From 3bdd8ffb9fb1b695c3f77e5dc79d0c740d9a65a1 Mon Sep 17 00:00:00 2001 From: Nikita Bulai Date: Tue, 29 Oct 2019 12:00:37 +0300 Subject: [PATCH] Release 1.5.0 :tada: --- app/assets/javascripts/mapbox-gl.js | 1635 ++++++++++++++++++++----- app/assets/stylesheets/mapbox-gl.scss | 24 +- lib/mapbox-gl/rails/version.rb | 2 +- 3 files changed, 1337 insertions(+), 324 deletions(-) diff --git a/app/assets/javascripts/mapbox-gl.js b/app/assets/javascripts/mapbox-gl.js index 5980f25..cbccfdc 100644 --- a/app/assets/javascripts/mapbox-gl.js +++ b/app/assets/javascripts/mapbox-gl.js @@ -1,4 +1,4 @@ -/* Mapbox GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/mapbox/mapbox-gl-js/blob/v1.4.0/LICENSE.txt */ +/* Mapbox GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/mapbox/mapbox-gl-js/blob/v1.5.0/LICENSE.txt */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : @@ -1296,7 +1296,7 @@ var objectKeys = Object.keys || function (obj) { var name = "mapbox-gl"; var description = "A WebGL interactive maps library"; -var version = "1.4.0"; +var version = "1.5.0"; var main = "dist/mapbox-gl.js"; var style = "dist/mapbox-gl.css"; var license = "SEE LICENSE IN LICENSE.txt"; @@ -1324,7 +1324,7 @@ var dependencies = { "grid-index": "^1.1.0", minimist: "0.0.8", "murmurhash-js": "^1.0.0", - pbf: "^3.0.5", + pbf: "^3.2.1", potpack: "^1.0.1", quickselect: "^2.0.0", rw: "^1.3.3", @@ -1337,9 +1337,12 @@ var devDependencies = { "@mapbox/gazetteer": "^3.1.2", "@mapbox/mapbox-gl-rtl-text": "^0.2.1", "@mapbox/mapbox-gl-test-suite": "file:test/integration", - "@octokit/rest": "^15.15.1", + "@octokit/rest": "^16.30.1", + address: "^1.1.2", "babel-eslint": "^10.0.1", + benchmark: "^2.1.4", browserify: "^16.2.3", + chokidar: "^3.0.2", d3: "^4.12.0", documentation: "~12.1.1", ejs: "^2.5.7", @@ -1358,6 +1361,7 @@ var devDependencies = { "json-stringify-pretty-compact": "^2.0.0", jsonwebtoken: "^8.3.0", "mock-geolocation": "^1.0.11", + "node-notifier": "^5.4.3", "npm-run-all": "^4.1.5", nyc: "^13.3.0", pirates: "^4.0.1", @@ -1365,24 +1369,29 @@ var devDependencies = { "postcss-cli": "^6.1.2", "postcss-inline-svg": "^3.1.1", "pretty-bytes": "^5.1.0", + puppeteer: "^1.18.0", + "qrcode-terminal": "^0.12.0", react: "^16.8.6", "react-dom": "^16.8.6", - puppeteer: "^1.18.0", request: "^2.88.0", - rollup: "^1.16.4", + rollup: "^1.23.1", "rollup-plugin-buble": "^0.19.8", - "rollup-plugin-commonjs": "^10.0.1", + "rollup-plugin-commonjs": "^10.1.0", "rollup-plugin-json": "^4.0.0", "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-replace": "^2.2.0", "rollup-plugin-sourcemaps": "^0.4.2", - "rollup-plugin-terser": "^5.0.0", + "rollup-plugin-terser": "^5.1.2", "rollup-plugin-unassert": "^0.3.0", sinon: "^7.3.2", st: "^1.2.2", stylelint: "^9.10.1", "stylelint-config-standard": "^18.2.0", - tap: "~12.4.1" + tap: "~12.4.1", + "tap-parser": "^9.3.3", + tape: "^4.11.0", + "tape-filter": "^1.0.4", + testem: "^2.17.0" }; var browser = { "./src/shaders/index.js": "./src/shaders/shaders.js", @@ -1396,6 +1405,7 @@ var scripts = { "build-prod": "rollup -c --environment BUILD:production", "build-prod-min": "rollup -c --environment BUILD:production,MINIFY:true", "build-csp": "rollup -c rollup.config.csp.js", + "build-query-suite": "rollup -c test/integration/rollup.config.test.js", "build-flow-types": "cp build/mapbox-gl.js.flow dist/mapbox-gl.js.flow && cp build/mapbox-gl.js.flow dist/mapbox-gl-dev.js.flow", "build-css": "postcss -o dist/mapbox-gl.css src/css/mapbox-gl.css", "build-style-spec": "cd src/style-spec && npm run build && cd ../.. && mkdir -p dist/style-spec && cp src/style-spec/dist/* dist/style-spec", @@ -1404,10 +1414,10 @@ var scripts = { "build-benchmarks": "BENCHMARK_VERSION=${BENCHMARK_VERSION:-\"$(git rev-parse --abbrev-ref HEAD) $(git rev-parse --short=7 HEAD)\"} rollup -c bench/versions/rollup_config_benchmarks.js", "watch-benchmarks": "BENCHMARK_VERSION=${BENCHMARK_VERSION:-\"$(git rev-parse --abbrev-ref HEAD) $(git rev-parse --short=7 HEAD)\"} rollup -c bench/rollup_config_benchmarks.js -w", "start-server": "st --no-cache -H 0.0.0.0 --port 9966 --index index.html .", - start: "run-p build-token watch-css watch-dev watch-benchmarks start-server", - "start-debug": "run-p build-token watch-css watch-dev start-server", + start: "run-p build-token watch-css watch-query watch-benchmarks start-server", + "start-debug": "run-p build-token watch-css watch-query start-server", "start-bench": "run-p build-token watch-benchmarks start-server", - "start-docs": "run-s build-prod-min build-css build-docs && NODE_OPTIONS=\"--max_old_space_size=2048\" DEPLOY_ENV=local batfish start", + "start-release": "run-s build-token build-prod-min build-css print-release-url start-server", lint: "eslint --cache --ignore-path .gitignore src test bench debug/*.html", "lint-docs": "documentation lint src/index.js", "lint-css": "stylelint 'src/css/mapbox-gl.css'", @@ -1417,11 +1427,14 @@ var scripts = { "test-unit": "build/run-tap --reporter classic --no-coverage test/unit", "test-build": "build/run-tap --no-coverage test/build/**/*.test.js", "test-render": "node --max-old-space-size=2048 test/render.test.js", - "test-query": "node test/query.test.js", + "test-query-node": "node test/query.test.js", + "watch-query": "testem -f test/integration/testem.js", + "test-query": "testem ci -f test/integration/testem.js -R xunit > test/integration/query-tests/test-results.xml", "test-expressions": "build/run-node test/expression.test.js", "test-flow": "build/run-node build/generate-flow-typed-style-spec && flow .", "test-cov": "nyc --require=@mapbox/flow-remove-types/register --reporter=text-summary --reporter=lcov --cache run-s test-unit test-expressions test-query test-render", prepublishOnly: "run-s build-flow-types build-dev build-prod-min build-prod build-csp build-css build-style-spec test-build", + "print-release-url": "node build/print-release-url.js", codegen: "build/run-node build/generate-style-code.js && build/run-node build/generate-struct-arrays.js" }; var files = [ @@ -3099,7 +3112,6 @@ function cacheGet(request , callback // manually strip URL instead of `ignoreSearch: true` because of a known // performance issue in Chrome https://github.com/mapbox/mapbox-gl-js/issues/8431 cache.match(strippedURL) - .catch(callback) .then(function (response) { var fresh = isFresh(response); @@ -3111,7 +3123,8 @@ function cacheGet(request , callback } callback(null, response, fresh); - }); + }) + .catch(callback); }) .catch(callback); @@ -4462,7 +4475,7 @@ var layout_symbol = { "property-type": "data-constant" }, "icon-image": { - type: "image", + type: "resolvedImage", tokens: true, expression: { interpolated: false, @@ -5577,7 +5590,7 @@ var paint_fill = { "property-type": "data-constant" }, "fill-pattern": { - type: "image", + type: "resolvedImage", transition: true, expression: { interpolated: false, @@ -5746,7 +5759,7 @@ var paint_line = { "property-type": "cross-faded" }, "line-pattern": { - type: "image", + type: "resolvedImage", transition: true, expression: { interpolated: false, @@ -6543,7 +6556,7 @@ var paint_background = { "property-type": "data-constant" }, "background-pattern": { - type: "image", + type: "resolvedImage", transition: true, expression: { interpolated: false, @@ -6746,7 +6759,7 @@ var spec = { "property-type": "data-constant" }, "fill-extrusion-pattern": { - type: "image", + type: "resolvedImage", transition: true, expression: { interpolated: false, @@ -6961,7 +6974,7 @@ Scope.prototype.has = function has (name ) { - + @@ -6977,7 +6990,7 @@ Scope.prototype.has = function has (name ) { - + @@ -6995,7 +7008,7 @@ var ValueType = {kind: 'value'}; var ErrorType = {kind: 'error'}; var CollatorType = {kind: 'collator'}; var FormattedType = {kind: 'formatted'}; -var ImageType = {kind: 'image'}; +var ResolvedImageType = {kind: 'resolvedImage'}; function array(itemType , N ) { return { @@ -7025,7 +7038,7 @@ var valueMemberTypes = [ FormattedType, ObjectType, array(ValueType), - ImageType + ResolvedImageType ]; /** @@ -7474,8 +7487,8 @@ var ResolvedImage = function ResolvedImage(options ) { return this.name; }; - ResolvedImage.fromString = function fromString (options ) { - return new ResolvedImage(options); + ResolvedImage.fromString = function fromString (name ) { + return new ResolvedImage({name: name, available: false}); }; ResolvedImage.prototype.serialize = function serialize () { @@ -7561,7 +7574,7 @@ function typeOf(value ) { } else if (value instanceof Formatted) { return FormattedType; } else if (value instanceof ResolvedImage) { - return ImageType; + return ResolvedImageType; } else if (Array.isArray(value)) { var length = value.length; var itemType ; @@ -7917,7 +7930,7 @@ FormatExpression.prototype.serialize = function serialize () { var ImageExpression = function ImageExpression(input ) { - this.type = ImageType; + this.type = ResolvedImageType; this.input = input; }; @@ -7940,7 +7953,7 @@ ImageExpression.prototype.evaluate = function evaluate (ctx ) { available = true; } - return {name: evaluatedImageName, available: available}; + return new ResolvedImage({name: evaluatedImageName, available: available}); }; ImageExpression.prototype.eachChild = function eachChild (fn ) { @@ -8049,9 +8062,8 @@ Coercion.prototype.evaluate = function evaluate (ctx ) { // There is no explicit 'to-formatted' but this coercion can be implicitly // created by properties that expect the 'formatted' type. return Formatted.fromString(toString$1(this.args[0].evaluate(ctx))); - } else if (this.type.kind === 'image') { - var name = toString$1(this.args[0].evaluate(ctx)); - return ResolvedImage.fromString({name: name, available: false}); + } else if (this.type.kind === 'resolvedImage') { + return ResolvedImage.fromString(toString$1(this.args[0].evaluate(ctx))); } else { return toString$1(this.args[0].evaluate(ctx)); } @@ -8072,7 +8084,7 @@ Coercion.prototype.serialize = function serialize () { return new FormatExpression([{text: this.args[0], scale: null, font: null, textColor: null}]).serialize(); } - if (this.type.kind === 'image') { + if (this.type.kind === 'resolvedImage') { return new ImageExpression(this.args[0]).serialize(); } @@ -8531,7 +8543,7 @@ ParsingContext.prototype._parse = function _parse (expr , options // if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') { parsed = annotate(parsed, expected, options.typeAnnotation || 'assert'); - } else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'image') && (actual.kind === 'value' || actual.kind === 'string')) { + } else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'resolvedImage') && (actual.kind === 'value' || actual.kind === 'string')) { parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce'); } else if (this.checkSubtype(expected, actual)) { return null; @@ -8542,7 +8554,7 @@ ParsingContext.prototype._parse = function _parse (expr , options // it immediately and replace it with a literal value in the // parsed/compiled result. Expressions that expect an image should // not be resolved here so we can later get the available images. - if (!(parsed instanceof Literal) && (parsed.type.kind !== 'image') && isConstant(parsed)) { + if (!(parsed instanceof Literal) && (parsed.type.kind !== 'resolvedImage') && isConstant(parsed)) { var ec = new EvaluationContext(); try { parsed = new Literal(parsed.type, parsed.evaluate(ec)); @@ -8824,6 +8836,7 @@ function array$1(from , to , t ) } var interpolate = /*#__PURE__*/Object.freeze({ +__proto__: null, number: number, color: color, array: array$1 @@ -8969,6 +8982,7 @@ var hcl = { }; var colorSpaces = /*#__PURE__*/Object.freeze({ +__proto__: null, lab: lab, hcl: hcl }); @@ -9292,7 +9306,7 @@ Coalesce.prototype.evaluate = function evaluate (ctx ) { result = arg.evaluate(ctx); // we need to keep track of the first requested image in a coalesce statement // if coalesce can't find a valid image, we return the first image name so styleimagemissing can fire - if (arg.type.kind === 'image' && !result.available) { + if (arg.type.kind === 'resolvedImage' && !result.available) { if (!requestedImageName) { requestedImageName = arg.evaluate(ctx).name; } result = null; if (argCount === this.args.length) { @@ -11032,8 +11046,8 @@ function evaluateIdentityFunction(parameters, propertySpec, input) { input = Color.parse(input); } else if (propertySpec.type === 'formatted') { input = Formatted.fromString(input.toString()); - } else if (propertySpec.type === 'image') { - input = ResolvedImage.fromString({name: input.toString(), available: false}); + } else if (propertySpec.type === 'resolvedImage') { + input = ResolvedImage.fromString(input.toString()); } else if (getType(input) !== propertySpec.type && (propertySpec.type !== 'enum' || !propertySpec.values[input])) { input = undefined; } @@ -11399,7 +11413,7 @@ function getExpectedType(spec ) { enum: StringType, boolean: BooleanType, formatted: FormattedType, - image: ImageType + resolvedImage: ResolvedImageType }; if (spec.type === 'array') { @@ -12454,7 +12468,7 @@ var VALIDATORS = { 'light': validateLight, 'string': validateString, 'formatted': validateFormatted, - 'image': validateImage + 'resolvedImage': validateImage }; // Main recursive validation function. Tracks: @@ -12872,6 +12886,7 @@ register('Grid', gridIndex); register('Color', Color); register('Error', Error); +register('ResolvedImage', ResolvedImage); register('StylePropertyFunction', StylePropertyFunction); register('StyleExpression', StyleExpression, {omit: ['_evaluator']}); @@ -12884,6 +12899,11 @@ for (var name$1 in expressions) { register(("Expression_" + name$1), expressions[name$1]); } +function isArrayBuffer(val ) { + return val && typeof ArrayBuffer !== 'undefined' && + (val instanceof ArrayBuffer || (val.constructor && val.constructor.name === 'ArrayBuffer')); +} + /** * Serialize the given object for transfer to or from a web worker. * @@ -12912,9 +12932,9 @@ function serialize(input , transferables ) return input; } - if (input instanceof ArrayBuffer) { + if (isArrayBuffer(input)) { if (transferables) { - transferables.push(input); + transferables.push(((input ) )); } return input; } @@ -13004,7 +13024,7 @@ function deserialize(input ) { input instanceof String || input instanceof Date || input instanceof RegExp || - input instanceof ArrayBuffer || + isArrayBuffer(input) || ArrayBuffer.isView(input) || input instanceof ImageData) { return input; @@ -13711,9 +13731,14 @@ function isStringInSupportedScript(chars , canRenderRTL ) { // -var pluginRequested = false; +var status = { + unavailable: 'unavailable', + loading: 'loading', + loaded: 'loaded', + error: 'error' +}; +var pluginStatus = status.unavailable; var pluginURL = null; -var foregroundLoadComplete = false; var evented = new Evented(); @@ -13722,6 +13747,10 @@ var evented = new Evented(); var _completionCallback; +var getRTLTextPluginStatus = function () { + return pluginStatus; +}; + var registerForPluginAvailability = function( callback ) { @@ -13734,26 +13763,27 @@ var registerForPluginAvailability = function( }; var clearRTLTextPlugin = function() { - pluginRequested = false; + pluginStatus = status.unavailable; pluginURL = null; }; var setRTLTextPlugin = function(url , callback ) { - if (pluginRequested) { + if (pluginStatus === status.loading || pluginStatus === status.loaded) { throw new Error('setRTLTextPlugin cannot be called multiple times.'); } - pluginRequested = true; + pluginStatus = status.loading; pluginURL = exported.resolveURL(url); _completionCallback = function (error ) { if (error) { // Clear loaded state to allow retries clearRTLTextPlugin(); + pluginStatus = status.error; if (callback) { callback(error); } } else { // Called once for each worker - foregroundLoadComplete = true; + pluginStatus = status.loaded; } }; evented.fire(new Event('pluginAvailable', {pluginURL: pluginURL, completionCallback: _completionCallback})); @@ -13769,7 +13799,7 @@ var plugin processBidirectionalText: null, processStyledBidirectionalText: null, isLoaded: function isLoaded() { - return foregroundLoadComplete || // Foreground: loaded if the completion callback returned successfully + return pluginStatus === status.loaded || // Foreground: loaded if the completion callback returned successfully plugin.applyArabicShaping != null; // Background: loaded if the plugin functions have been compiled } }; @@ -14381,7 +14411,7 @@ var CrossFadedDataDrivenProperty = /*@__PURE__*/(function (DataDrivenProperty) { return new PossiblyEvaluatedPropertyValue(this, {kind: 'constant', value: undefined}, parameters); } else if (value.expression.kind === 'constant') { var evaluatedValue = value.expression.evaluate(parameters, (null ), {}, availableImages); - var isImageExpression = value.property.specification.type === 'image'; + var isImageExpression = value.property.specification.type === 'resolvedImage'; var constantValue = isImageExpression && typeof evaluatedValue !== 'string' ? evaluatedValue.name : evaluatedValue; var constant = this._calculate(constantValue, constantValue, constantValue, parameters); return new PossiblyEvaluatedPropertyValue(this, {kind: 'constant', value: constant}, parameters); @@ -15524,23 +15554,23 @@ register('StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48', StructArrayLayout2i2ui3ul3u /** * Implementation of the StructArray layout: - * [0]: Int16[7] - * [14]: Uint16[11] - * [36]: Uint32[1] - * [40]: Float32[3] + * [0]: Int16[8] + * [16]: Uint16[14] + * [44]: Uint32[1] + * [48]: Float32[3] * * @private */ -var StructArrayLayout7i11ui1ul3f52 = /*@__PURE__*/(function (StructArray) { - function StructArrayLayout7i11ui1ul3f52 () { +var StructArrayLayout8i14ui1ul3f60 = /*@__PURE__*/(function (StructArray) { + function StructArrayLayout8i14ui1ul3f60 () { StructArray.apply(this, arguments); } - if ( StructArray ) StructArrayLayout7i11ui1ul3f52.__proto__ = StructArray; - StructArrayLayout7i11ui1ul3f52.prototype = Object.create( StructArray && StructArray.prototype ); - StructArrayLayout7i11ui1ul3f52.prototype.constructor = StructArrayLayout7i11ui1ul3f52; + if ( StructArray ) StructArrayLayout8i14ui1ul3f60.__proto__ = StructArray; + StructArrayLayout8i14ui1ul3f60.prototype = Object.create( StructArray && StructArray.prototype ); + StructArrayLayout8i14ui1ul3f60.prototype.constructor = StructArrayLayout8i14ui1ul3f60; - StructArrayLayout7i11ui1ul3f52.prototype._refreshViews = function _refreshViews () { + StructArrayLayout8i14ui1ul3f60.prototype._refreshViews = function _refreshViews () { this.uint8 = new Uint8Array(this.arrayBuffer); this.int16 = new Int16Array(this.arrayBuffer); this.uint16 = new Uint16Array(this.arrayBuffer); @@ -15548,15 +15578,15 @@ var StructArrayLayout7i11ui1ul3f52 = /*@__PURE__*/(function (StructArray) { this.float32 = new Float32Array(this.arrayBuffer); }; - StructArrayLayout7i11ui1ul3f52.prototype.emplaceBack = function emplaceBack (v0 , v1 , v2 , v3 , v4 , v5 , v6 , v7 , v8 , v9 , v10 , v11 , v12 , v13 , v14 , v15 , v16 , v17 , v18 , v19 , v20 , v21 ) { + StructArrayLayout8i14ui1ul3f60.prototype.emplaceBack = function emplaceBack (v0 , v1 , v2 , v3 , v4 , v5 , v6 , v7 , v8 , v9 , v10 , v11 , v12 , v13 , v14 , v15 , v16 , v17 , v18 , v19 , v20 , v21 , v22 , v23 , v24 , v25 ) { var i = this.length; this.resize(i + 1); - return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); + return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25); }; - StructArrayLayout7i11ui1ul3f52.prototype.emplace = function emplace (i , v0 , v1 , v2 , v3 , v4 , v5 , v6 , v7 , v8 , v9 , v10 , v11 , v12 , v13 , v14 , v15 , v16 , v17 , v18 , v19 , v20 , v21 ) { - var o2 = i * 26; - var o4 = i * 13; + StructArrayLayout8i14ui1ul3f60.prototype.emplace = function emplace (i , v0 , v1 , v2 , v3 , v4 , v5 , v6 , v7 , v8 , v9 , v10 , v11 , v12 , v13 , v14 , v15 , v16 , v17 , v18 , v19 , v20 , v21 , v22 , v23 , v24 , v25 ) { + var o2 = i * 30; + var o4 = i * 15; this.int16[o2 + 0] = v0; this.int16[o2 + 1] = v1; this.int16[o2 + 2] = v2; @@ -15564,7 +15594,7 @@ var StructArrayLayout7i11ui1ul3f52 = /*@__PURE__*/(function (StructArray) { this.int16[o2 + 4] = v4; this.int16[o2 + 5] = v5; this.int16[o2 + 6] = v6; - this.uint16[o2 + 7] = v7; + this.int16[o2 + 7] = v7; this.uint16[o2 + 8] = v8; this.uint16[o2 + 9] = v9; this.uint16[o2 + 10] = v10; @@ -15575,18 +15605,22 @@ var StructArrayLayout7i11ui1ul3f52 = /*@__PURE__*/(function (StructArray) { this.uint16[o2 + 15] = v15; this.uint16[o2 + 16] = v16; this.uint16[o2 + 17] = v17; - this.uint32[o4 + 9] = v18; - this.float32[o4 + 10] = v19; - this.float32[o4 + 11] = v20; - this.float32[o4 + 12] = v21; + this.uint16[o2 + 18] = v18; + this.uint16[o2 + 19] = v19; + this.uint16[o2 + 20] = v20; + this.uint16[o2 + 21] = v21; + this.uint32[o4 + 11] = v22; + this.float32[o4 + 12] = v23; + this.float32[o4 + 13] = v24; + this.float32[o4 + 14] = v25; return i; }; - return StructArrayLayout7i11ui1ul3f52; + return StructArrayLayout8i14ui1ul3f60; }(StructArray)); -StructArrayLayout7i11ui1ul3f52.prototype.bytesPerElement = 52; -register('StructArrayLayout7i11ui1ul3f52', StructArrayLayout7i11ui1ul3f52); +StructArrayLayout8i14ui1ul3f60.prototype.bytesPerElement = 60; +register('StructArrayLayout8i14ui1ul3f60', StructArrayLayout8i14ui1ul3f60); /** * Implementation of the StructArray layout: @@ -16058,7 +16092,7 @@ var SymbolInstanceStruct = /*@__PURE__*/(function (Struct) { SymbolInstanceStruct.prototype = Object.create( Struct && Struct.prototype ); SymbolInstanceStruct.prototype.constructor = SymbolInstanceStruct; - var prototypeAccessors$2 = { anchorX: { configurable: true },anchorY: { configurable: true },rightJustifiedTextSymbolIndex: { configurable: true },centerJustifiedTextSymbolIndex: { configurable: true },leftJustifiedTextSymbolIndex: { configurable: true },verticalPlacedTextSymbolIndex: { configurable: true },placedIconSymbolIndex: { configurable: true },key: { configurable: true },textBoxStartIndex: { configurable: true },textBoxEndIndex: { configurable: true },verticalTextBoxStartIndex: { configurable: true },verticalTextBoxEndIndex: { configurable: true },iconBoxStartIndex: { configurable: true },iconBoxEndIndex: { configurable: true },featureIndex: { configurable: true },numHorizontalGlyphVertices: { configurable: true },numVerticalGlyphVertices: { configurable: true },numIconVertices: { configurable: true },crossTileID: { configurable: true },textBoxScale: { configurable: true },textOffset0: { configurable: true },textOffset1: { configurable: true } }; + var prototypeAccessors$2 = { anchorX: { configurable: true },anchorY: { configurable: true },rightJustifiedTextSymbolIndex: { configurable: true },centerJustifiedTextSymbolIndex: { configurable: true },leftJustifiedTextSymbolIndex: { configurable: true },verticalPlacedTextSymbolIndex: { configurable: true },placedIconSymbolIndex: { configurable: true },verticalPlacedIconSymbolIndex: { configurable: true },key: { configurable: true },textBoxStartIndex: { configurable: true },textBoxEndIndex: { configurable: true },verticalTextBoxStartIndex: { configurable: true },verticalTextBoxEndIndex: { configurable: true },iconBoxStartIndex: { configurable: true },iconBoxEndIndex: { configurable: true },verticalIconBoxStartIndex: { configurable: true },verticalIconBoxEndIndex: { configurable: true },featureIndex: { configurable: true },numHorizontalGlyphVertices: { configurable: true },numVerticalGlyphVertices: { configurable: true },numIconVertices: { configurable: true },numVerticalIconVertices: { configurable: true },crossTileID: { configurable: true },textBoxScale: { configurable: true },textOffset0: { configurable: true },textOffset1: { configurable: true } }; prototypeAccessors$2.anchorX.get = function () { return this._structArray.int16[this._pos2 + 0]; }; prototypeAccessors$2.anchorX.set = function (x ) { this._structArray.int16[this._pos2 + 0] = x; }; @@ -16074,56 +16108,64 @@ var SymbolInstanceStruct = /*@__PURE__*/(function (Struct) { prototypeAccessors$2.verticalPlacedTextSymbolIndex.set = function (x ) { this._structArray.int16[this._pos2 + 5] = x; }; prototypeAccessors$2.placedIconSymbolIndex.get = function () { return this._structArray.int16[this._pos2 + 6]; }; prototypeAccessors$2.placedIconSymbolIndex.set = function (x ) { this._structArray.int16[this._pos2 + 6] = x; }; - prototypeAccessors$2.key.get = function () { return this._structArray.uint16[this._pos2 + 7]; }; - prototypeAccessors$2.key.set = function (x ) { this._structArray.uint16[this._pos2 + 7] = x; }; - prototypeAccessors$2.textBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 8]; }; - prototypeAccessors$2.textBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 8] = x; }; - prototypeAccessors$2.textBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 9]; }; - prototypeAccessors$2.textBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 9] = x; }; - prototypeAccessors$2.verticalTextBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 10]; }; - prototypeAccessors$2.verticalTextBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 10] = x; }; - prototypeAccessors$2.verticalTextBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 11]; }; - prototypeAccessors$2.verticalTextBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 11] = x; }; - prototypeAccessors$2.iconBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 12]; }; - prototypeAccessors$2.iconBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 12] = x; }; - prototypeAccessors$2.iconBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 13]; }; - prototypeAccessors$2.iconBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 13] = x; }; - prototypeAccessors$2.featureIndex.get = function () { return this._structArray.uint16[this._pos2 + 14]; }; - prototypeAccessors$2.featureIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 14] = x; }; - prototypeAccessors$2.numHorizontalGlyphVertices.get = function () { return this._structArray.uint16[this._pos2 + 15]; }; - prototypeAccessors$2.numHorizontalGlyphVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 15] = x; }; - prototypeAccessors$2.numVerticalGlyphVertices.get = function () { return this._structArray.uint16[this._pos2 + 16]; }; - prototypeAccessors$2.numVerticalGlyphVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 16] = x; }; - prototypeAccessors$2.numIconVertices.get = function () { return this._structArray.uint16[this._pos2 + 17]; }; - prototypeAccessors$2.numIconVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 17] = x; }; - prototypeAccessors$2.crossTileID.get = function () { return this._structArray.uint32[this._pos4 + 9]; }; - prototypeAccessors$2.crossTileID.set = function (x ) { this._structArray.uint32[this._pos4 + 9] = x; }; - prototypeAccessors$2.textBoxScale.get = function () { return this._structArray.float32[this._pos4 + 10]; }; - prototypeAccessors$2.textBoxScale.set = function (x ) { this._structArray.float32[this._pos4 + 10] = x; }; - prototypeAccessors$2.textOffset0.get = function () { return this._structArray.float32[this._pos4 + 11]; }; - prototypeAccessors$2.textOffset0.set = function (x ) { this._structArray.float32[this._pos4 + 11] = x; }; - prototypeAccessors$2.textOffset1.get = function () { return this._structArray.float32[this._pos4 + 12]; }; - prototypeAccessors$2.textOffset1.set = function (x ) { this._structArray.float32[this._pos4 + 12] = x; }; + prototypeAccessors$2.verticalPlacedIconSymbolIndex.get = function () { return this._structArray.int16[this._pos2 + 7]; }; + prototypeAccessors$2.verticalPlacedIconSymbolIndex.set = function (x ) { this._structArray.int16[this._pos2 + 7] = x; }; + prototypeAccessors$2.key.get = function () { return this._structArray.uint16[this._pos2 + 8]; }; + prototypeAccessors$2.key.set = function (x ) { this._structArray.uint16[this._pos2 + 8] = x; }; + prototypeAccessors$2.textBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 9]; }; + prototypeAccessors$2.textBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 9] = x; }; + prototypeAccessors$2.textBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 10]; }; + prototypeAccessors$2.textBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 10] = x; }; + prototypeAccessors$2.verticalTextBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 11]; }; + prototypeAccessors$2.verticalTextBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 11] = x; }; + prototypeAccessors$2.verticalTextBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 12]; }; + prototypeAccessors$2.verticalTextBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 12] = x; }; + prototypeAccessors$2.iconBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 13]; }; + prototypeAccessors$2.iconBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 13] = x; }; + prototypeAccessors$2.iconBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 14]; }; + prototypeAccessors$2.iconBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 14] = x; }; + prototypeAccessors$2.verticalIconBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 15]; }; + prototypeAccessors$2.verticalIconBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 15] = x; }; + prototypeAccessors$2.verticalIconBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 16]; }; + prototypeAccessors$2.verticalIconBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 16] = x; }; + prototypeAccessors$2.featureIndex.get = function () { return this._structArray.uint16[this._pos2 + 17]; }; + prototypeAccessors$2.featureIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 17] = x; }; + prototypeAccessors$2.numHorizontalGlyphVertices.get = function () { return this._structArray.uint16[this._pos2 + 18]; }; + prototypeAccessors$2.numHorizontalGlyphVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 18] = x; }; + prototypeAccessors$2.numVerticalGlyphVertices.get = function () { return this._structArray.uint16[this._pos2 + 19]; }; + prototypeAccessors$2.numVerticalGlyphVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 19] = x; }; + prototypeAccessors$2.numIconVertices.get = function () { return this._structArray.uint16[this._pos2 + 20]; }; + prototypeAccessors$2.numIconVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 20] = x; }; + prototypeAccessors$2.numVerticalIconVertices.get = function () { return this._structArray.uint16[this._pos2 + 21]; }; + prototypeAccessors$2.numVerticalIconVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 21] = x; }; + prototypeAccessors$2.crossTileID.get = function () { return this._structArray.uint32[this._pos4 + 11]; }; + prototypeAccessors$2.crossTileID.set = function (x ) { this._structArray.uint32[this._pos4 + 11] = x; }; + prototypeAccessors$2.textBoxScale.get = function () { return this._structArray.float32[this._pos4 + 12]; }; + prototypeAccessors$2.textBoxScale.set = function (x ) { this._structArray.float32[this._pos4 + 12] = x; }; + prototypeAccessors$2.textOffset0.get = function () { return this._structArray.float32[this._pos4 + 13]; }; + prototypeAccessors$2.textOffset0.set = function (x ) { this._structArray.float32[this._pos4 + 13] = x; }; + prototypeAccessors$2.textOffset1.get = function () { return this._structArray.float32[this._pos4 + 14]; }; + prototypeAccessors$2.textOffset1.set = function (x ) { this._structArray.float32[this._pos4 + 14] = x; }; Object.defineProperties( SymbolInstanceStruct.prototype, prototypeAccessors$2 ); return SymbolInstanceStruct; }(Struct)); -SymbolInstanceStruct.prototype.size = 52; +SymbolInstanceStruct.prototype.size = 60; /** * @private */ -var SymbolInstanceArray = /*@__PURE__*/(function (StructArrayLayout7i11ui1ul3f52) { +var SymbolInstanceArray = /*@__PURE__*/(function (StructArrayLayout8i14ui1ul3f60) { function SymbolInstanceArray () { - StructArrayLayout7i11ui1ul3f52.apply(this, arguments); + StructArrayLayout8i14ui1ul3f60.apply(this, arguments); } - if ( StructArrayLayout7i11ui1ul3f52 ) SymbolInstanceArray.__proto__ = StructArrayLayout7i11ui1ul3f52; - SymbolInstanceArray.prototype = Object.create( StructArrayLayout7i11ui1ul3f52 && StructArrayLayout7i11ui1ul3f52.prototype ); + if ( StructArrayLayout8i14ui1ul3f60 ) SymbolInstanceArray.__proto__ = StructArrayLayout8i14ui1ul3f60; + SymbolInstanceArray.prototype = Object.create( StructArrayLayout8i14ui1ul3f60 && StructArrayLayout8i14ui1ul3f60.prototype ); SymbolInstanceArray.prototype.constructor = SymbolInstanceArray; SymbolInstanceArray.prototype.get = function get (index ) { @@ -16132,7 +16174,7 @@ var SymbolInstanceArray = /*@__PURE__*/(function (StructArrayLayout7i11ui1ul3f52 }; return SymbolInstanceArray; -}(StructArrayLayout7i11ui1ul3f52)); +}(StructArrayLayout8i14ui1ul3f60)); register('SymbolInstanceArray', SymbolInstanceArray); @@ -16983,10 +17025,9 @@ var CompositeExpressionBinder = function CompositeExpressionBinder(expression CompositeExpressionBinder.prototype.interpolationFactor = function interpolationFactor (currentZoom ) { if (this.useIntegerZoom) { - return this.expression.interpolationFactor(Math.floor(currentZoom), this.zoom, this.zoom + 1); - } else { - return this.expression.interpolationFactor(currentZoom, this.zoom, this.zoom + 1); + currentZoom = Math.floor(currentZoom); } + return clamp(this.expression.interpolationFactor(currentZoom, this.zoom, this.zoom + 1), 0, 1); }; CompositeExpressionBinder.prototype.setUniforms = function setUniforms (context , uniform , @@ -17932,6 +17973,8 @@ function translate(queryGeometry , + + @@ -18015,6 +18058,18 @@ function toRadian(a) { function equals(a, b) { return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b)); } +if (!Math.hypot) { Math.hypot = function () { + var arguments$1 = arguments; + + var y = 0, + i = arguments.length; + + while (i--) { + y += arguments$1[i] * arguments$1[i]; + } + + return Math.sqrt(y); +}; } /** * 2x2 Matrix @@ -18323,7 +18378,7 @@ function str(a) { */ function frob(a) { - return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2)); + return Math.hypot(a[0], a[1], a[2], a[3]); } /** * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix @@ -18455,16 +18510,16 @@ var sub = subtract; * @description * A mat2d contains six elements defined as: *
- * [a, c, tx,
- *  b, d, ty]
+ * [a, b, c,
+ *  d, tx, ty]
  * 
* This is a short form for the 3x3 matrix: *
- * [a, c, tx,
- *  b, d, ty,
- *  0, 0, 1]
+ * [a, b, 0,
+ *  c, d, 0,
+ *  tx, ty, 1]
  * 
- * The last row is ignored so the array is shorter and operations are faster. + * The last column is ignored so the array is shorter and operations are faster. */ /** @@ -18812,7 +18867,7 @@ function str$1(a) { */ function frob$1(a) { - return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + 1); + return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], 1); } /** * Adds two mat2d's @@ -19573,7 +19628,7 @@ function str$2(a) { */ function frob$2(a) { - return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2)); + return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]); } /** * Adds two mat3's @@ -20268,7 +20323,7 @@ function rotate$3(out, a, rad, axis) { var x = axis[0], y = axis[1], z = axis[2]; - var len = Math.sqrt(x * x + y * y + z * z); + var len = Math.hypot(x, y, z); var s, c, t; var a00, a01, a02, a03; var a10, a11, a12, a13; @@ -20545,7 +20600,7 @@ function fromRotation$3(out, rad, axis) { var x = axis[0], y = axis[1], z = axis[2]; - var len = Math.sqrt(x * x + y * y + z * z); + var len = Math.hypot(x, y, z); var s, c, t; if (len < EPSILON) { @@ -20802,9 +20857,9 @@ function getScaling(out, mat) { var m31 = mat[8]; var m32 = mat[9]; var m33 = mat[10]; - out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13); - out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23); - out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33); + out[0] = Math.hypot(m11, m12, m13); + out[1] = Math.hypot(m21, m22, m23); + out[2] = Math.hypot(m31, m32, m33); return out; } /** @@ -20818,33 +20873,46 @@ function getScaling(out, mat) { */ function getRotation(out, mat) { - // Algorithm taken from http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm - var trace = mat[0] + mat[5] + mat[10]; + var scaling = new ARRAY_TYPE(3); + getScaling(scaling, mat); + var is1 = 1 / scaling[0]; + var is2 = 1 / scaling[1]; + var is3 = 1 / scaling[2]; + var sm11 = mat[0] * is1; + var sm12 = mat[1] * is2; + var sm13 = mat[2] * is3; + var sm21 = mat[4] * is1; + var sm22 = mat[5] * is2; + var sm23 = mat[6] * is3; + var sm31 = mat[8] * is1; + var sm32 = mat[9] * is2; + var sm33 = mat[10] * is3; + var trace = sm11 + sm22 + sm33; var S = 0; if (trace > 0) { S = Math.sqrt(trace + 1.0) * 2; out[3] = 0.25 * S; - out[0] = (mat[6] - mat[9]) / S; - out[1] = (mat[8] - mat[2]) / S; - out[2] = (mat[1] - mat[4]) / S; - } else if (mat[0] > mat[5] && mat[0] > mat[10]) { - S = Math.sqrt(1.0 + mat[0] - mat[5] - mat[10]) * 2; - out[3] = (mat[6] - mat[9]) / S; + out[0] = (sm23 - sm32) / S; + out[1] = (sm31 - sm13) / S; + out[2] = (sm12 - sm21) / S; + } else if (sm11 > sm22 && sm11 > sm33) { + S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2; + out[3] = (sm23 - sm32) / S; out[0] = 0.25 * S; - out[1] = (mat[1] + mat[4]) / S; - out[2] = (mat[8] + mat[2]) / S; - } else if (mat[5] > mat[10]) { - S = Math.sqrt(1.0 + mat[5] - mat[0] - mat[10]) * 2; - out[3] = (mat[8] - mat[2]) / S; - out[0] = (mat[1] + mat[4]) / S; + out[1] = (sm12 + sm21) / S; + out[2] = (sm31 + sm13) / S; + } else if (sm22 > sm33) { + S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2; + out[3] = (sm31 - sm13) / S; + out[0] = (sm12 + sm21) / S; out[1] = 0.25 * S; - out[2] = (mat[6] + mat[9]) / S; + out[2] = (sm23 + sm32) / S; } else { - S = Math.sqrt(1.0 + mat[10] - mat[0] - mat[5]) * 2; - out[3] = (mat[1] - mat[4]) / S; - out[0] = (mat[8] + mat[2]) / S; - out[1] = (mat[6] + mat[9]) / S; + S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2; + out[3] = (sm12 - sm21) / S; + out[0] = (sm31 + sm13) / S; + out[1] = (sm23 + sm32) / S; out[2] = 0.25 * S; } @@ -21201,14 +21269,14 @@ function lookAt(out, eye, center, up) { z0 = eyex - centerx; z1 = eyey - centery; z2 = eyez - centerz; - len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2); + len = 1 / Math.hypot(z0, z1, z2); z0 *= len; z1 *= len; z2 *= len; x0 = upy * z2 - upz * z1; x1 = upz * z0 - upx * z2; x2 = upx * z1 - upy * z0; - len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2); + len = Math.hypot(x0, x1, x2); if (!len) { x0 = 0; @@ -21224,7 +21292,7 @@ function lookAt(out, eye, center, up) { y0 = z1 * x2 - z2 * x1; y1 = z2 * x0 - z0 * x2; y2 = z0 * x1 - z1 * x0; - len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2); + len = Math.hypot(y0, y1, y2); if (!len) { y0 = 0; @@ -21333,7 +21401,7 @@ function str$3(a) { */ function frob$3(a) { - return Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2) + Math.pow(a[9], 2) + Math.pow(a[10], 2) + Math.pow(a[11], 2) + Math.pow(a[12], 2) + Math.pow(a[13], 2) + Math.pow(a[14], 2) + Math.pow(a[15], 2)); + return Math.hypot(a[0], a[1], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]); } /** * Adds two mat4's @@ -21562,7 +21630,7 @@ function length(a) { var x = a[0]; var y = a[1]; var z = a[2]; - return Math.sqrt(x * x + y * y + z * z); + return Math.hypot(x, y, z); } /** * Creates a new vec3 initialized with the given values @@ -21785,7 +21853,7 @@ function distance(a, b) { var x = b[0] - a[0]; var y = b[1] - a[1]; var z = b[2] - a[2]; - return Math.sqrt(x * x + y * y + z * z); + return Math.hypot(x, y, z); } /** * Calculates the squared euclidian distance between two vec3's @@ -22580,7 +22648,7 @@ function distance$1(a, b) { var y = b[1] - a[1]; var z = b[2] - a[2]; var w = b[3] - a[3]; - return Math.sqrt(x * x + y * y + z * z + w * w); + return Math.hypot(x, y, z, w); } /** * Calculates the squared euclidian distance between two vec4's @@ -22609,7 +22677,7 @@ function length$1(a) { var y = a[1]; var z = a[2]; var w = a[3]; - return Math.sqrt(x * x + y * y + z * z + w * w); + return Math.hypot(x, y, z, w); } /** * Calculates the squared length of a vec4 @@ -23055,6 +23123,18 @@ function getAxisAngle(out_axis, q) { return rad; } +/** + * Gets the angular distance between two unit quaternions + * + * @param {quat} a Origin unit quaternion + * @param {quat} b Destination unit quaternion + * @return {Number} Angle, in radians, between the two quaternions + */ + +function getAngle(a, b) { + var dotproduct = dot$2(a, b); + return Math.acos(2 * dotproduct * dotproduct - 1); +} /** * Multiplies two quat's * @@ -23168,6 +23248,64 @@ function calculateW(out, a) { out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z)); return out; } +/** + * Calculate the exponential of a unit quaternion. + * + * @param {quat} out the receiving quaternion + * @param {quat} a quat to calculate the exponential of + * @returns {quat} out + */ + +function exp(out, a) { + var x = a[0], + y = a[1], + z = a[2], + w = a[3]; + var r = Math.sqrt(x * x + y * y + z * z); + var et = Math.exp(w); + var s = r > 0 ? et * Math.sin(r) / r : 0; + out[0] = x * s; + out[1] = y * s; + out[2] = z * s; + out[3] = et * Math.cos(r); + return out; +} +/** + * Calculate the natural logarithm of a unit quaternion. + * + * @param {quat} out the receiving quaternion + * @param {quat} a quat to calculate the exponential of + * @returns {quat} out + */ + +function ln(out, a) { + var x = a[0], + y = a[1], + z = a[2], + w = a[3]; + var r = Math.sqrt(x * x + y * y + z * z); + var t = r > 0 ? Math.atan2(r, w) / r : 0; + out[0] = x * t; + out[1] = y * t; + out[2] = z * t; + out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w); + return out; +} +/** + * Calculate the scalar power of a unit quaternion. + * + * @param {quat} out the receiving quaternion + * @param {quat} a quat to calculate the exponential of + * @param {Number} b amount to scale the quaternion by + * @returns {quat} out + */ + +function pow(out, a, b) { + ln(out, a); + scale$6(out, out, b); + exp(out, out); + return out; +} /** * Performs a spherical linear interpolation between two quat * @@ -23223,8 +23361,8 @@ function slerp(out, a, b, t) { return out; } /** - * Generates a random quaternion - * + * Generates a random unit quaternion + * * @param {quat} out the receiving quaternion * @returns {quat} out */ @@ -23715,7 +23853,7 @@ function fromRotationTranslationValues(x1, y1, z1, w1, x2, y2, z2) { * Creates a dual quat from a quaternion and a translation * * @param {quat2} dual quaternion receiving operation result - * @param {quat} q quaternion + * @param {quat} q a normalized quaternion * @param {vec3} t tranlation vector * @returns {quat2} dual quaternion receiving operation result * @function @@ -24141,7 +24279,7 @@ function rotateAroundAxis(out, a, axis, rad) { return copy$7(out, a); } - var axisLength = Math.sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]); + var axisLength = Math.hypot(axis[0], axis[1], axis[2]); rad = rad * 0.5; var s = Math.sin(rad); var bx = s * axis[0] / axisLength; @@ -24676,7 +24814,7 @@ function scaleAndAdd$2(out, a, b, scale) { function distance$2(a, b) { var x = b[0] - a[0], y = b[1] - a[1]; - return Math.sqrt(x * x + y * y); + return Math.hypot(x, y); } /** * Calculates the squared euclidian distance between two vec2's @@ -24701,7 +24839,7 @@ function squaredDistance$2(a, b) { function length$4(a) { var x = a[0], y = a[1]; - return Math.sqrt(x * x + y * y); + return Math.hypot(x, y); } /** * Calculates the squared length of a vec2 @@ -25324,6 +25462,8 @@ register('RGBAImage', RGBAImage); + + @@ -25438,6 +25578,8 @@ var HeatmapStyleLayer = /*@__PURE__*/(function (StyleLayer) { + + @@ -25855,10 +25997,7 @@ function findHoleBridge(hole, outerNode) { // whether sector in vertex m contains sector in vertex p in the same coordinates function sectorContainsSector(m, p) { - return ( - (area(m.prev, m, p.prev) < 0 || area(p.prev, m, m.next) < 0) && - (area(m.prev, m, p.next) < 0 || area(p.next, m, m.next) < 0) - ); + return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; } // interlink polygon nodes in z-order @@ -27244,6 +27383,7 @@ function isEntirelyOutside(ring) { + @@ -28290,6 +28430,7 @@ var symbolInstance = createLayout([ {type: 'Int16', name: 'leftJustifiedTextSymbolIndex'}, {type: 'Int16', name: 'verticalPlacedTextSymbolIndex'}, {type: 'Int16', name: 'placedIconSymbolIndex'}, + {type: 'Int16', name: 'verticalPlacedIconSymbolIndex'}, {type: 'Uint16', name: 'key'}, {type: 'Uint16', name: 'textBoxStartIndex'}, {type: 'Uint16', name: 'textBoxEndIndex'}, @@ -28297,10 +28438,13 @@ var symbolInstance = createLayout([ {type: 'Uint16', name: 'verticalTextBoxEndIndex'}, {type: 'Uint16', name: 'iconBoxStartIndex'}, {type: 'Uint16', name: 'iconBoxEndIndex'}, + {type: 'Uint16', name: 'verticalIconBoxStartIndex'}, + {type: 'Uint16', name: 'verticalIconBoxEndIndex'}, {type: 'Uint16', name: 'featureIndex'}, {type: 'Uint16', name: 'numHorizontalGlyphVertices'}, {type: 'Uint16', name: 'numVerticalGlyphVertices'}, {type: 'Uint16', name: 'numIconVertices'}, + {type: 'Uint16', name: 'numVerticalIconVertices'}, {type: 'Uint32', name: 'crossTileID'}, {type: 'Float32', name: 'textBoxScale'}, {type: 'Float32', components: 2, name: 'textOffset'} @@ -29296,6 +29440,7 @@ function evaluateSizeForZoom(sizeData , zoom ) { } var symbolSize = /*#__PURE__*/Object.freeze({ +__proto__: null, getSizeData: getSizeData, evaluateSizeForFeature: evaluateSizeForFeature, evaluateSizeForZoom: evaluateSizeForZoom, @@ -29325,10 +29470,12 @@ var vectorTileFeatureTypes$2 = vectorTile.VectorTileFeature.types; + + @@ -29553,7 +29700,7 @@ var SymbolBucket = function SymbolBucket(options // this allows us to fire the styleimagemissing event if image evaluation returns null // the only way to distinguish between null returned from a coalesce statement with no valid images // and null returned because icon-image wasn't defined is to check whether or not iconImage.parameters is an empty object - var hasIcon = iconImage.value.kind !== 'constant' || !!iconImage.value.value || Object.keys(iconImage.parameters).length > 0; + var hasIcon = (iconImage.value.kind !== 'constant' || !!iconImage.value.value) && Object.keys(iconImage.parameters).length > 0; var symbolSortKey = layout.get('symbol-sort-key'); this.features = []; @@ -29597,8 +29744,6 @@ var SymbolBucket = function SymbolBucket(options var resolvedTokens$1 = layer.getValueAndResolveTokens('icon-image', feature, availableImages); if (resolvedTokens$1 instanceof ResolvedImage) { icon = resolvedTokens$1; - } else if (!resolvedTokens$1 || typeof resolvedTokens$1 === 'string') { - icon = ResolvedImage.fromString({name: resolvedTokens$1, available: false}); } else { icon = ResolvedImage.fromString(resolvedTokens$1); } @@ -29897,12 +30042,18 @@ var SymbolBucket = function SymbolBucket(options this.addDebugCollisionBoxes(symbolInstance.textBoxStartIndex, symbolInstance.textBoxEndIndex, symbolInstance, true); this.addDebugCollisionBoxes(symbolInstance.verticalTextBoxStartIndex, symbolInstance.verticalTextBoxEndIndex, symbolInstance, true); this.addDebugCollisionBoxes(symbolInstance.iconBoxStartIndex, symbolInstance.iconBoxEndIndex, symbolInstance, false); + this.addDebugCollisionBoxes(symbolInstance.verticalIconBoxStartIndex, symbolInstance.verticalIconBoxEndIndex, symbolInstance, false); } }; // These flat arrays are meant to be quicker to iterate over than the source // CollisionBoxArray - SymbolBucket.prototype._deserializeCollisionBoxesForSymbol = function _deserializeCollisionBoxesForSymbol (collisionBoxArray , textStartIndex , textEndIndex , verticalTextStartIndex , verticalTextEndIndex , iconStartIndex , iconEndIndex ) { + SymbolBucket.prototype._deserializeCollisionBoxesForSymbol = function _deserializeCollisionBoxesForSymbol (collisionBoxArray , + textStartIndex , textEndIndex , + verticalTextStartIndex , verticalTextEndIndex , + iconStartIndex , iconEndIndex , + verticalIconStartIndex , verticalIconEndIndex ) { + var collisionArrays = {}; for (var k = textStartIndex; k < textEndIndex; k++) { var box = (collisionBoxArray.get(k) ); @@ -29936,6 +30087,15 @@ var SymbolBucket = function SymbolBucket(options break; // Only one box allowed per instance } } + for (var k$3 = verticalIconStartIndex; k$3 < verticalIconEndIndex; k$3++) { + // An icon can only have one box now, so this indexing is a bit vestigial... + var box$3 = (collisionBoxArray.get(k$3) ); + if (box$3.radius === 0) { + collisionArrays.verticalIconBox = {x1: box$3.x1, y1: box$3.y1, x2: box$3.x2, y2: box$3.y2, anchorPointX: box$3.anchorPointX, anchorPointY: box$3.anchorPointY}; + collisionArrays.verticalIconFeatureIndex = box$3.featureIndex; + break; // Only one box allowed per instance + } + } return collisionArrays; }; @@ -29950,7 +30110,9 @@ var SymbolBucket = function SymbolBucket(options symbolInstance.verticalTextBoxStartIndex, symbolInstance.verticalTextBoxEndIndex, symbolInstance.iconBoxStartIndex, - symbolInstance.iconBoxEndIndex + symbolInstance.iconBoxEndIndex, + symbolInstance.verticalIconBoxStartIndex, + symbolInstance.verticalIconBoxEndIndex )); } }; @@ -29989,6 +30151,15 @@ var SymbolBucket = function SymbolBucket(options } }; + SymbolBucket.prototype.addIndicesForPlacedIconSymbol = function addIndicesForPlacedIconSymbol (placedIconSymbolIndex ) { + var placedIcon = this.icon.placedSymbolArray.get(placedIconSymbolIndex); + if (placedIcon.numGlyphs) { + var vertexIndex = placedIcon.vertexStartIndex; + this.icon.indexArray.emplaceBack(vertexIndex, vertexIndex + 1, vertexIndex + 2); + this.icon.indexArray.emplaceBack(vertexIndex + 1, vertexIndex + 2, vertexIndex + 3); + } + }; + SymbolBucket.prototype.getSortedSymbolIndexes = function getSortedSymbolIndexes (angle ) { if (this.sortedAngle === angle && this.symbolInstanceIndexes !== undefined) { return this.symbolInstanceIndexes; @@ -30060,11 +30231,12 @@ var SymbolBucket = function SymbolBucket(options this.addIndicesForPlacedTextSymbol(symbolInstance.verticalPlacedTextSymbolIndex); } - var placedIcon = this.icon.placedSymbolArray.get(i); - if (placedIcon.numGlyphs) { - var vertexIndex = placedIcon.vertexStartIndex; - this.icon.indexArray.emplaceBack(vertexIndex, vertexIndex + 1, vertexIndex + 2); - this.icon.indexArray.emplaceBack(vertexIndex + 1, vertexIndex + 2, vertexIndex + 3); + if (symbolInstance.placedIconSymbolIndex >= 0) { + this.addIndicesForPlacedIconSymbol(symbolInstance.placedIconSymbolIndex); + } + + if (symbolInstance.verticalPlacedIconSymbolIndex >= 0) { + this.addIndicesForPlacedIconSymbol(symbolInstance.verticalPlacedIconSymbolIndex); } } @@ -30450,6 +30622,7 @@ var SymbolStyleLayer = /*@__PURE__*/(function (StyleLayer) { + @@ -30492,6 +30665,8 @@ var BackgroundStyleLayer = /*@__PURE__*/(function (StyleLayer) { + + @@ -31246,6 +31421,11 @@ Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32 var SHIFT_LEFT_32 = (1 << 16) * (1 << 16), SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32; +// Threshold chosen based on both benchmarking and knowledge about browser string +// data structures (which currently switch structure types at 12 bytes or more) +var TEXT_DECODER_MIN_LENGTH = 12; +var utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf8'); + Pbf.prototype = { destroy: function() { @@ -31339,10 +31519,16 @@ Pbf.prototype = { }, readString: function() { - var end = this.readVarint() + this.pos, - str = readUtf8(this.buf, this.pos, end); + var end = this.readVarint() + this.pos; + var pos = this.pos; this.pos = end; - return str; + + if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) { + // longer strings are fast with the built-in browser TextDecoder API + return readUtf8TextDecoder(this.buf, pos, end); + } + // short strings are fast with our custom implementation + return readUtf8(this.buf, pos, end); }, readBytes: function() { @@ -31800,6 +31986,10 @@ function readUtf8(buf, pos, end) { return str; } +function readUtf8TextDecoder(buf, pos, end) { + return utf8TextDecoder.decode(buf.subarray(pos, end)); +} + function writeUtf8(buf, str, pos) { for (var i = 0, c, lead; i < str.length; i++) { c = str.charCodeAt(i); // code point @@ -31939,6 +32129,11 @@ ThrottledInvoker.prototype.trigger = function trigger () { } }; +ThrottledInvoker.prototype.remove = function remove () { + delete this._channel; + this._callback = function () {}; +}; + // @@ -32120,6 +32315,7 @@ Actor.prototype.process = function process () { }; Actor.prototype.remove = function remove () { + this.invoker.remove(); this.target.removeEventListener('message', this.receive, false); }; @@ -33713,12 +33909,6 @@ Tile.prototype.unloadVectorData = function unloadVectorData () { this.state = 'unloaded'; }; -Tile.prototype.unloadDEMData = function unloadDEMData () { - this.dem = null; - this.neighboringTiles = null; - this.state = 'unloaded'; -}; - Tile.prototype.getBucket = function getBucket (layer ) { return this.buckets[layer.id]; }; @@ -33815,6 +34005,8 @@ Tile.prototype.clearMask = function clearMask () { this.maskedIndexBuffer.destroy(); delete this.maskedIndexBuffer; } + + delete this.mask; }; Tile.prototype.setMask = function setMask (mask , context ) { @@ -33822,8 +34014,8 @@ Tile.prototype.setMask = function setMask (mask , context ) { // don't redo buffer work if the mask is the same; if (deepEqual(this.mask, mask)) { return; } - this.mask = mask; this.clearMask(); + this.mask = mask; // We want to render the full tile, and keeping the segments/vertices/indices empty means // using the global shared buffers for covering the entire tile. @@ -35354,8 +35546,13 @@ function addFeature(bucket , textRepeatDistance = symbolMinDistance / 2; var iconTextFit = layout.get('icon-text-fit'); + var verticallyShapedIcon; // Adjust shaped icon size when icon-text-fit is used. if (shapedIcon && iconTextFit !== 'none') { + if (bucket.allowVerticalPlacement && shapedTextOrientations.vertical) { + verticallyShapedIcon = fitIconToText(shapedIcon, shapedTextOrientations.vertical, iconTextFit, + layout.get('icon-text-fit-padding'), iconOffset, fontScale); + } if (defaultHorizontalShaping) { shapedIcon = fitIconToText(shapedIcon, defaultHorizontalShaping, iconTextFit, layout.get('icon-text-fit-padding'), iconOffset, fontScale); @@ -35370,7 +35567,7 @@ function addFeature(bucket , return; } - addSymbol(bucket, anchor, line, shapedTextOrientations, shapedIcon, bucket.layers[0], + addSymbol(bucket, anchor, line, shapedTextOrientations, shapedIcon, verticallyShapedIcon, bucket.layers[0], bucket.collisionBoxArray, feature.index, feature.sourceLayerIndex, bucket.index, textBoxScale, textPadding, textAlongLine, textOffset, iconBoxScale, iconPadding, iconAlongLine, iconOffset, @@ -35530,6 +35727,7 @@ function addSymbol(bucket , line , shapedTextOrientations , shapedIcon , + verticallyShapedIcon , layer , collisionBoxArray , featureIndex , @@ -35550,12 +35748,14 @@ function addSymbol(bucket , var lineArray = bucket.addToLineVertexArray(anchor, line); - var textCollisionFeature, iconCollisionFeature, verticalTextCollisionFeature; + var textCollisionFeature, iconCollisionFeature, verticalTextCollisionFeature, verticalIconCollisionFeature; var numIconVertices = 0; + var numVerticalIconVertices = 0; var numHorizontalGlyphVertices = 0; var numVerticalGlyphVertices = 0; var placedIconSymbolIndex = -1; + var verticalPlacedIconSymbolIndex = -1; var placedTextSymbolIndices = {}; var key = murmurhashJs(''); @@ -35573,6 +35773,10 @@ function addSymbol(bucket , var verticalTextRotation = textRotation + 90.0; var verticalShaping = shapedTextOrientations.vertical; verticalTextCollisionFeature = new CollisionFeature(collisionBoxArray, line, anchor, featureIndex, sourceLayerIndex, bucketIndex, verticalShaping, textBoxScale, textPadding, textAlongLine, bucket.overscaling, verticalTextRotation); + + if (verticallyShapedIcon) { + verticalIconCollisionFeature = new CollisionFeature(collisionBoxArray, line, anchor, featureIndex, sourceLayerIndex, bucketIndex, verticallyShapedIcon, iconBoxScale, iconPadding, textAlongLine, bucket.overscaling, verticalTextRotation); + } } //Place icon first, so text can have a reference to its index in the placed symbol array. @@ -35582,6 +35786,7 @@ function addSymbol(bucket , if (shapedIcon) { var iconRotate = layer.layout.get('icon-rotate').evaluate(feature, {}); var iconQuads = getIconQuads(shapedIcon, iconRotate); + var verticalIconQuads = verticallyShapedIcon ? getIconQuads(verticallyShapedIcon, iconRotate) : undefined; iconCollisionFeature = new CollisionFeature(collisionBoxArray, line, anchor, featureIndex, sourceLayerIndex, bucketIndex, shapedIcon, iconBoxScale, iconPadding, /*align boxes to line*/false, bucket.overscaling, iconRotate); numIconVertices = iconQuads.length * 4; @@ -35621,6 +35826,26 @@ function addSymbol(bucket , -1); placedIconSymbolIndex = bucket.icon.placedSymbolArray.length - 1; + + if (verticalIconQuads) { + numVerticalIconVertices = verticalIconQuads.length * 4; + + bucket.addSymbols( + bucket.icon, + verticalIconQuads, + iconSizeData, + iconOffset, + iconAlongLine, + feature, + WritingMode.vertical, + anchor, + lineArray.lineStartIndex, + lineArray.lineLength, + // The icon itself does not have an associated symbol since the text isnt placed yet + -1); + + verticalPlacedIconSymbolIndex = bucket.icon.placedSymbolArray.length - 1; + } } for (var justification in shapedTextOrientations.horizontal) { @@ -35649,7 +35874,7 @@ function addSymbol(bucket , if (shapedTextOrientations.vertical) { numVerticalGlyphVertices += addTextVertices( bucket, anchor, shapedTextOrientations.vertical, layer, textAlongLine, feature, - textOffset, lineArray, WritingMode.vertical, ['vertical'], placedTextSymbolIndices, glyphPositionMap, placedIconSymbolIndex, sizes); + textOffset, lineArray, WritingMode.vertical, ['vertical'], placedTextSymbolIndices, glyphPositionMap, verticalPlacedIconSymbolIndex, sizes); } var textBoxStartIndex = textCollisionFeature ? textCollisionFeature.boxStartIndex : bucket.collisionBoxArray.length; @@ -35661,6 +35886,9 @@ function addSymbol(bucket , var iconBoxStartIndex = iconCollisionFeature ? iconCollisionFeature.boxStartIndex : bucket.collisionBoxArray.length; var iconBoxEndIndex = iconCollisionFeature ? iconCollisionFeature.boxEndIndex : bucket.collisionBoxArray.length; + var verticalIconBoxStartIndex = verticalIconCollisionFeature ? verticalIconCollisionFeature.boxStartIndex : bucket.collisionBoxArray.length; + var verticalIconBoxEndIndex = verticalIconCollisionFeature ? verticalIconCollisionFeature.boxEndIndex : bucket.collisionBoxArray.length; + if (bucket.glyphOffsetArray.length >= SymbolBucket.MAX_GLYPHS) { warnOnce( "Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907" ); } @@ -35673,6 +35901,7 @@ function addSymbol(bucket , placedTextSymbolIndices.left >= 0 ? placedTextSymbolIndices.left : -1, placedTextSymbolIndices.vertical || -1, placedIconSymbolIndex, + verticalPlacedIconSymbolIndex, key, textBoxStartIndex, textBoxEndIndex, @@ -35680,10 +35909,13 @@ function addSymbol(bucket , verticalTextBoxEndIndex, iconBoxStartIndex, iconBoxEndIndex, + verticalIconBoxStartIndex, + verticalIconBoxEndIndex, featureIndex, numHorizontalGlyphVertices, numVerticalGlyphVertices, numIconVertices, + numVerticalIconVertices, 0, textBoxScale, textOffset0, @@ -35799,9 +36031,11 @@ exports.getAnchorJustification = getAnchorJustification; exports.getArrayBuffer = getArrayBuffer; exports.getImage = getImage; exports.getJSON = getJSON; +exports.getRTLTextPluginStatus = getRTLTextPluginStatus; exports.getReferrer = getReferrer; exports.getVideo = getVideo; exports.identity = identity$3; +exports.ieee754 = ieee754; exports.invert = invert$3; exports.isChar = unicodeBlockLookup; exports.isMapboxURL = isMapboxURL; @@ -35816,7 +36050,6 @@ exports.mvt = vectorTile; exports.number = number; exports.ortho = ortho; exports.parseGlyphPBF = parseGlyphPBF; -exports.pbf = pbf; exports.performSymbolLayout = performSymbolLayout; exports.perspective = perspective; exports.pick = pick; @@ -36378,7 +36611,7 @@ function loadVectorTile(params , callback callback(err); } else if (data) { callback(null, { - vectorTile: new symbol_layout.vectorTile.VectorTile(new symbol_layout.pbf(data)), + vectorTile: new symbol_layout.vectorTile.VectorTile(new symbol_layout.Protobuf(data)), rawData: data, cacheControl: cacheControl, expires: expires @@ -36793,6 +37026,634 @@ GeoJSONWrapper.prototype.feature = function feature (i ) { 'use strict'; +var pbf = Pbf; + + + +function Pbf(buf) { + this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0); + this.pos = 0; + this.type = 0; + this.length = this.buf.length; +} + +Pbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum +Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64 +Pbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields +Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32 + +var SHIFT_LEFT_32 = (1 << 16) * (1 << 16), + SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32; + +Pbf.prototype = { + + destroy: function() { + this.buf = null; + }, + + // === READING ================================================================= + + readFields: function(readField, result, end) { + end = end || this.length; + + while (this.pos < end) { + var val = this.readVarint(), + tag = val >> 3, + startPos = this.pos; + + this.type = val & 0x7; + readField(tag, result, this); + + if (this.pos === startPos) { this.skip(val); } + } + return result; + }, + + readMessage: function(readField, result) { + return this.readFields(readField, result, this.readVarint() + this.pos); + }, + + readFixed32: function() { + var val = readUInt32(this.buf, this.pos); + this.pos += 4; + return val; + }, + + readSFixed32: function() { + var val = readInt32(this.buf, this.pos); + this.pos += 4; + return val; + }, + + // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed) + + readFixed64: function() { + var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; + this.pos += 8; + return val; + }, + + readSFixed64: function() { + var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; + this.pos += 8; + return val; + }, + + readFloat: function() { + var val = symbol_layout.ieee754.read(this.buf, this.pos, true, 23, 4); + this.pos += 4; + return val; + }, + + readDouble: function() { + var val = symbol_layout.ieee754.read(this.buf, this.pos, true, 52, 8); + this.pos += 8; + return val; + }, + + readVarint: function(isSigned) { + var buf = this.buf, + val, b; + + b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) { return val; } + b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) { return val; } + b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) { return val; } + b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) { return val; } + b = buf[this.pos]; val |= (b & 0x0f) << 28; + + return readVarintRemainder(val, isSigned, this); + }, + + readVarint64: function() { // for compatibility with v2.0.1 + return this.readVarint(true); + }, + + readSVarint: function() { + var num = this.readVarint(); + return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding + }, + + readBoolean: function() { + return Boolean(this.readVarint()); + }, + + readString: function() { + var end = this.readVarint() + this.pos, + str = readUtf8(this.buf, this.pos, end); + this.pos = end; + return str; + }, + + readBytes: function() { + var end = this.readVarint() + this.pos, + buffer = this.buf.subarray(this.pos, end); + this.pos = end; + return buffer; + }, + + // verbose for performance reasons; doesn't affect gzipped size + + readPackedVarint: function(arr, isSigned) { + if (this.type !== Pbf.Bytes) { return arr.push(this.readVarint(isSigned)); } + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) { arr.push(this.readVarint(isSigned)); } + return arr; + }, + readPackedSVarint: function(arr) { + if (this.type !== Pbf.Bytes) { return arr.push(this.readSVarint()); } + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) { arr.push(this.readSVarint()); } + return arr; + }, + readPackedBoolean: function(arr) { + if (this.type !== Pbf.Bytes) { return arr.push(this.readBoolean()); } + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) { arr.push(this.readBoolean()); } + return arr; + }, + readPackedFloat: function(arr) { + if (this.type !== Pbf.Bytes) { return arr.push(this.readFloat()); } + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) { arr.push(this.readFloat()); } + return arr; + }, + readPackedDouble: function(arr) { + if (this.type !== Pbf.Bytes) { return arr.push(this.readDouble()); } + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) { arr.push(this.readDouble()); } + return arr; + }, + readPackedFixed32: function(arr) { + if (this.type !== Pbf.Bytes) { return arr.push(this.readFixed32()); } + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) { arr.push(this.readFixed32()); } + return arr; + }, + readPackedSFixed32: function(arr) { + if (this.type !== Pbf.Bytes) { return arr.push(this.readSFixed32()); } + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) { arr.push(this.readSFixed32()); } + return arr; + }, + readPackedFixed64: function(arr) { + if (this.type !== Pbf.Bytes) { return arr.push(this.readFixed64()); } + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) { arr.push(this.readFixed64()); } + return arr; + }, + readPackedSFixed64: function(arr) { + if (this.type !== Pbf.Bytes) { return arr.push(this.readSFixed64()); } + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) { arr.push(this.readSFixed64()); } + return arr; + }, + + skip: function(val) { + var type = val & 0x7; + if (type === Pbf.Varint) { while (this.buf[this.pos++] > 0x7f) {} } + else if (type === Pbf.Bytes) { this.pos = this.readVarint() + this.pos; } + else if (type === Pbf.Fixed32) { this.pos += 4; } + else if (type === Pbf.Fixed64) { this.pos += 8; } + else { throw new Error('Unimplemented type: ' + type); } + }, + + // === WRITING ================================================================= + + writeTag: function(tag, type) { + this.writeVarint((tag << 3) | type); + }, + + realloc: function(min) { + var length = this.length || 16; + + while (length < this.pos + min) { length *= 2; } + + if (length !== this.length) { + var buf = new Uint8Array(length); + buf.set(this.buf); + this.buf = buf; + this.length = length; + } + }, + + finish: function() { + this.length = this.pos; + this.pos = 0; + return this.buf.subarray(0, this.length); + }, + + writeFixed32: function(val) { + this.realloc(4); + writeInt32(this.buf, val, this.pos); + this.pos += 4; + }, + + writeSFixed32: function(val) { + this.realloc(4); + writeInt32(this.buf, val, this.pos); + this.pos += 4; + }, + + writeFixed64: function(val) { + this.realloc(8); + writeInt32(this.buf, val & -1, this.pos); + writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4); + this.pos += 8; + }, + + writeSFixed64: function(val) { + this.realloc(8); + writeInt32(this.buf, val & -1, this.pos); + writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4); + this.pos += 8; + }, + + writeVarint: function(val) { + val = +val || 0; + + if (val > 0xfffffff || val < 0) { + writeBigVarint(val, this); + return; + } + + this.realloc(4); + + this.buf[this.pos++] = val & 0x7f | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; } + this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; } + this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; } + this.buf[this.pos++] = (val >>> 7) & 0x7f; + }, + + writeSVarint: function(val) { + this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2); + }, + + writeBoolean: function(val) { + this.writeVarint(Boolean(val)); + }, + + writeString: function(str) { + str = String(str); + this.realloc(str.length * 4); + + this.pos++; // reserve 1 byte for short string length + + var startPos = this.pos; + // write the string directly to the buffer and see how much was written + this.pos = writeUtf8(this.buf, str, this.pos); + var len = this.pos - startPos; + + if (len >= 0x80) { makeRoomForExtraLength(startPos, len, this); } + + // finally, write the message length in the reserved place and restore the position + this.pos = startPos - 1; + this.writeVarint(len); + this.pos += len; + }, + + writeFloat: function(val) { + this.realloc(4); + symbol_layout.ieee754.write(this.buf, val, this.pos, true, 23, 4); + this.pos += 4; + }, + + writeDouble: function(val) { + this.realloc(8); + symbol_layout.ieee754.write(this.buf, val, this.pos, true, 52, 8); + this.pos += 8; + }, + + writeBytes: function(buffer) { + var len = buffer.length; + this.writeVarint(len); + this.realloc(len); + for (var i = 0; i < len; i++) { this.buf[this.pos++] = buffer[i]; } + }, + + writeRawMessage: function(fn, obj) { + this.pos++; // reserve 1 byte for short message length + + // write the message directly to the buffer and see how much was written + var startPos = this.pos; + fn(obj, this); + var len = this.pos - startPos; + + if (len >= 0x80) { makeRoomForExtraLength(startPos, len, this); } + + // finally, write the message length in the reserved place and restore the position + this.pos = startPos - 1; + this.writeVarint(len); + this.pos += len; + }, + + writeMessage: function(tag, fn, obj) { + this.writeTag(tag, Pbf.Bytes); + this.writeRawMessage(fn, obj); + }, + + writePackedVarint: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedVarint, arr); } }, + writePackedSVarint: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSVarint, arr); } }, + writePackedBoolean: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedBoolean, arr); } }, + writePackedFloat: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFloat, arr); } }, + writePackedDouble: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedDouble, arr); } }, + writePackedFixed32: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFixed32, arr); } }, + writePackedSFixed32: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSFixed32, arr); } }, + writePackedFixed64: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFixed64, arr); } }, + writePackedSFixed64: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSFixed64, arr); } }, + + writeBytesField: function(tag, buffer) { + this.writeTag(tag, Pbf.Bytes); + this.writeBytes(buffer); + }, + writeFixed32Field: function(tag, val) { + this.writeTag(tag, Pbf.Fixed32); + this.writeFixed32(val); + }, + writeSFixed32Field: function(tag, val) { + this.writeTag(tag, Pbf.Fixed32); + this.writeSFixed32(val); + }, + writeFixed64Field: function(tag, val) { + this.writeTag(tag, Pbf.Fixed64); + this.writeFixed64(val); + }, + writeSFixed64Field: function(tag, val) { + this.writeTag(tag, Pbf.Fixed64); + this.writeSFixed64(val); + }, + writeVarintField: function(tag, val) { + this.writeTag(tag, Pbf.Varint); + this.writeVarint(val); + }, + writeSVarintField: function(tag, val) { + this.writeTag(tag, Pbf.Varint); + this.writeSVarint(val); + }, + writeStringField: function(tag, str) { + this.writeTag(tag, Pbf.Bytes); + this.writeString(str); + }, + writeFloatField: function(tag, val) { + this.writeTag(tag, Pbf.Fixed32); + this.writeFloat(val); + }, + writeDoubleField: function(tag, val) { + this.writeTag(tag, Pbf.Fixed64); + this.writeDouble(val); + }, + writeBooleanField: function(tag, val) { + this.writeVarintField(tag, Boolean(val)); + } +}; + +function readVarintRemainder(l, s, p) { + var buf = p.buf, + h, b; + + b = buf[p.pos++]; h = (b & 0x70) >> 4; if (b < 0x80) { return toNum(l, h, s); } + b = buf[p.pos++]; h |= (b & 0x7f) << 3; if (b < 0x80) { return toNum(l, h, s); } + b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) { return toNum(l, h, s); } + b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) { return toNum(l, h, s); } + b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) { return toNum(l, h, s); } + b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) { return toNum(l, h, s); } + + throw new Error('Expected varint not more than 10 bytes'); +} + +function readPackedEnd(pbf) { + return pbf.type === Pbf.Bytes ? + pbf.readVarint() + pbf.pos : pbf.pos + 1; +} + +function toNum(low, high, isSigned) { + if (isSigned) { + return high * 0x100000000 + (low >>> 0); + } + + return ((high >>> 0) * 0x100000000) + (low >>> 0); +} + +function writeBigVarint(val, pbf) { + var low, high; + + if (val >= 0) { + low = (val % 0x100000000) | 0; + high = (val / 0x100000000) | 0; + } else { + low = ~(-val % 0x100000000); + high = ~(-val / 0x100000000); + + if (low ^ 0xffffffff) { + low = (low + 1) | 0; + } else { + low = 0; + high = (high + 1) | 0; + } + } + + if (val >= 0x10000000000000000 || val < -0x10000000000000000) { + throw new Error('Given varint doesn\'t fit into 10 bytes'); + } + + pbf.realloc(10); + + writeBigVarintLow(low, high, pbf); + writeBigVarintHigh(high, pbf); +} + +function writeBigVarintLow(low, high, pbf) { + pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; + pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; + pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; + pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; + pbf.buf[pbf.pos] = low & 0x7f; +} + +function writeBigVarintHigh(high, pbf) { + var lsb = (high & 0x07) << 4; + + pbf.buf[pbf.pos++] |= lsb | ((high >>>= 3) ? 0x80 : 0); if (!high) { return; } + pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; } + pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; } + pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; } + pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; } + pbf.buf[pbf.pos++] = high & 0x7f; +} + +function makeRoomForExtraLength(startPos, len, pbf) { + var extraLen = + len <= 0x3fff ? 1 : + len <= 0x1fffff ? 2 : + len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7)); + + // if 1 byte isn't enough for encoding message length, shift the data to the right + pbf.realloc(extraLen); + for (var i = pbf.pos - 1; i >= startPos; i--) { pbf.buf[i + extraLen] = pbf.buf[i]; } +} + +function writePackedVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeVarint(arr[i]); } } +function writePackedSVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeSVarint(arr[i]); } } +function writePackedFloat(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeFloat(arr[i]); } } +function writePackedDouble(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeDouble(arr[i]); } } +function writePackedBoolean(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeBoolean(arr[i]); } } +function writePackedFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeFixed32(arr[i]); } } +function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeSFixed32(arr[i]); } } +function writePackedFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeFixed64(arr[i]); } } +function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeSFixed64(arr[i]); } } + +// Buffer code below from https://github.com/feross/buffer, MIT-licensed + +function readUInt32(buf, pos) { + return ((buf[pos]) | + (buf[pos + 1] << 8) | + (buf[pos + 2] << 16)) + + (buf[pos + 3] * 0x1000000); +} + +function writeInt32(buf, val, pos) { + buf[pos] = val; + buf[pos + 1] = (val >>> 8); + buf[pos + 2] = (val >>> 16); + buf[pos + 3] = (val >>> 24); +} + +function readInt32(buf, pos) { + return ((buf[pos]) | + (buf[pos + 1] << 8) | + (buf[pos + 2] << 16)) + + (buf[pos + 3] << 24); +} + +function readUtf8(buf, pos, end) { + var str = ''; + var i = pos; + + while (i < end) { + var b0 = buf[i]; + var c = null; // codepoint + var bytesPerSequence = + b0 > 0xEF ? 4 : + b0 > 0xDF ? 3 : + b0 > 0xBF ? 2 : 1; + + if (i + bytesPerSequence > end) { break; } + + var b1, b2, b3; + + if (bytesPerSequence === 1) { + if (b0 < 0x80) { + c = b0; + } + } else if (bytesPerSequence === 2) { + b1 = buf[i + 1]; + if ((b1 & 0xC0) === 0x80) { + c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F); + if (c <= 0x7F) { + c = null; + } + } + } else if (bytesPerSequence === 3) { + b1 = buf[i + 1]; + b2 = buf[i + 2]; + if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) { + c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F); + if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) { + c = null; + } + } + } else if (bytesPerSequence === 4) { + b1 = buf[i + 1]; + b2 = buf[i + 2]; + b3 = buf[i + 3]; + if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) { + c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F); + if (c <= 0xFFFF || c >= 0x110000) { + c = null; + } + } + } + + if (c === null) { + c = 0xFFFD; + bytesPerSequence = 1; + + } else if (c > 0xFFFF) { + c -= 0x10000; + str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800); + c = 0xDC00 | c & 0x3FF; + } + + str += String.fromCharCode(c); + i += bytesPerSequence; + } + + return str; +} + +function writeUtf8(buf, str, pos) { + for (var i = 0, c, lead; i < str.length; i++) { + c = str.charCodeAt(i); // code point + + if (c > 0xD7FF && c < 0xE000) { + if (lead) { + if (c < 0xDC00) { + buf[pos++] = 0xEF; + buf[pos++] = 0xBF; + buf[pos++] = 0xBD; + lead = c; + continue; + } else { + c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000; + lead = null; + } + } else { + if (c > 0xDBFF || (i + 1 === str.length)) { + buf[pos++] = 0xEF; + buf[pos++] = 0xBF; + buf[pos++] = 0xBD; + } else { + lead = c; + } + continue; + } + } else if (lead) { + buf[pos++] = 0xEF; + buf[pos++] = 0xBF; + buf[pos++] = 0xBD; + lead = null; + } + + if (c < 0x80) { + buf[pos++] = c; + } else { + if (c < 0x800) { + buf[pos++] = c >> 0x6 | 0xC0; + } else { + if (c < 0x10000) { + buf[pos++] = c >> 0xC | 0xE0; + } else { + buf[pos++] = c >> 0x12 | 0xF0; + buf[pos++] = c >> 0xC & 0x3F | 0x80; + } + buf[pos++] = c >> 0x6 & 0x3F | 0x80; + } + buf[pos++] = c & 0x3F | 0x80; + } + } + return pos; +} + +'use strict'; + var VectorTileFeature = symbol_layout.vectorTile.VectorTileFeature; @@ -36871,7 +37732,7 @@ var GeoJSONWrapper_1 = geojson_wrapper; * @return {Buffer} uncompressed, pbf-serialized tile data */ function fromVectorTileJs (tile) { - var out = new symbol_layout.pbf(); + var out = new pbf(); writeTile(tile, out); return out.finish() } @@ -40632,6 +41493,7 @@ var VectorTileSource = /*@__PURE__*/(function (Evented) { VectorTileSource.prototype.unloadTile = function unloadTile (tile ) { tile.unloadVectorData(); + tile.clearMask(); if (tile.actor) { tile.actor.send('removeTile', {uid: tile.uid, type: this.type, source: this.id}, undefined); } @@ -40782,6 +41644,7 @@ var RasterTileSource = /*@__PURE__*/(function (Evented) { RasterTileSource.prototype.unloadTile = function unloadTile (tile , callback ) { if (tile.texture) { this.map.painter.saveTileTexture(tile.texture); } + tile.clearMask(); callback(); }; @@ -40910,6 +41773,7 @@ var RasterDEMTileSource = /*@__PURE__*/(function (RasterTileSource) { } if (tile.dem) { delete tile.dem; } delete tile.neighboringTiles; + tile.clearMask(); tile.state = 'unloaded'; if (tile.actor) { @@ -41230,6 +42094,7 @@ var GeoJSONSource = /*@__PURE__*/(function (Evented) { GeoJSONSource.prototype.unloadTile = function unloadTile (tile ) { tile.unloadVectorData(); + tile.clearMask(); this.actor.send('removeTile', {uid: tile.uid, type: this.type, source: this.id}); }; @@ -46407,7 +47272,7 @@ var Placement = function Placement(transform , fadeDuration , cross Placement.prototype.attemptAnchorPlacement = function attemptAnchorPlacement (anchor , textBox , width , height , textBoxScale , rotateWithMap , pitchWithMap , textPixelRatio , posMatrix , collisionGroup , - textAllowOverlap , symbolInstance , bucket , orientation ) { + textAllowOverlap , symbolInstance , bucket , orientation , iconBox ) { var textOffset = [symbolInstance.textOffset0, symbolInstance.textOffset1]; var shift = calculateVariableLayoutShift(anchor, width, height, textOffset, textBoxScale); @@ -46418,6 +47283,15 @@ var Placement = function Placement(transform , fadeDuration , cross rotateWithMap, pitchWithMap, this.transform.angle), textAllowOverlap, textPixelRatio, posMatrix, collisionGroup.predicate); + if (iconBox) { + var placedIconBoxes = this.collisionIndex.placeCollisionBox( + shiftVariableCollisionBox( + iconBox, shift.x, shift.y, + rotateWithMap, pitchWithMap, this.transform.angle), + textAllowOverlap, textPixelRatio, posMatrix, collisionGroup.predicate); + if (placedIconBoxes.box.length === 0) { return; } + } + if (placedGlyphBoxes.box.length > 0) { var prevAnchor; // If this label was placed in the previous placement, record the anchor position @@ -46502,7 +47376,7 @@ var Placement = function Placement(transform , fadeDuration , cross var shift = null; var placed = {box: null, offscreen: null}; - var placedVertical = {box: null, offscreen: null}; + var placedVerticalText = {box: null, offscreen: null}; var placedGlyphBoxes = null; var placedGlyphCircles = null; @@ -46541,7 +47415,7 @@ var Placement = function Placement(transform , fadeDuration , cross if (placementMode === symbol_layout.WritingMode.vertical) { placed = placeVerticalFn(); - placedVertical = placed; + placedVerticalText = placed; } else { placed = placeHorizontalFn(); } @@ -46592,11 +47466,13 @@ var Placement = function Placement(transform , fadeDuration , cross } } - var placeBoxForVariableAnchors = function (collisionTextBox, orientation) { + var placeBoxForVariableAnchors = function (collisionTextBox, collisionIconBox, orientation) { var width = collisionTextBox.x2 - collisionTextBox.x1; var height = collisionTextBox.y2 - collisionTextBox.y1; var textBoxScale = symbolInstance.textBoxScale; + var variableIconBox = hasIconTextFit && !iconAllowOverlap ? collisionIconBox : null; + var placedBox = {box: [], offscreen: false}; var placementAttempts = textAllowOverlap ? anchors.length * 2 : anchors.length; for (var i = 0; i < placementAttempts; ++i) { @@ -46605,7 +47481,7 @@ var Placement = function Placement(transform , fadeDuration , cross var result = this$1.attemptAnchorPlacement( anchor, collisionTextBox, width, height, textBoxScale, rotateWithMap, pitchWithMap, textPixelRatio, posMatrix, - collisionGroup, allowOverlap, symbolInstance, bucket, orientation); + collisionGroup, allowOverlap, symbolInstance, bucket, orientation, variableIconBox); if (result) { placedBox = result.placedGlyphBoxes; @@ -46621,14 +47497,14 @@ var Placement = function Placement(transform , fadeDuration , cross }; var placeHorizontal$1 = function () { - return placeBoxForVariableAnchors(textBox, symbol_layout.WritingMode.horizontal); + return placeBoxForVariableAnchors(textBox, collisionArrays.iconBox, symbol_layout.WritingMode.horizontal); }; var placeVertical$1 = function () { var verticalTextBox = collisionArrays.verticalTextBox; var wasPlaced = placed && placed.box && placed.box.length; if (bucket.allowVerticalPlacement && !wasPlaced && symbolInstance.numVerticalGlyphVertices > 0 && verticalTextBox) { - return placeBoxForVariableAnchors(verticalTextBox, symbol_layout.WritingMode.vertical); + return placeBoxForVariableAnchors(verticalTextBox, collisionArrays.verticalIconBox, symbol_layout.WritingMode.vertical); } return {box: null, offscreen: null}; }; @@ -46687,17 +47563,26 @@ var Placement = function Placement(transform , fadeDuration , cross if (collisionArrays.iconFeatureIndex) { iconFeatureIndex = collisionArrays.iconFeatureIndex; } - if (collisionArrays.iconBox) { - var iconBox = hasIconTextFit && shift ? - shiftVariableCollisionBox( - collisionArrays.iconBox, shift.x, shift.y, - rotateWithMap, pitchWithMap, this$1.transform.angle) : - collisionArrays.iconBox; + if (collisionArrays.iconBox) { - placedIconBoxes = this$1.collisionIndex.placeCollisionBox(iconBox, + var placeIconFeature = function (iconBox) { + var shiftedIconBox = hasIconTextFit && shift ? + shiftVariableCollisionBox( + iconBox, shift.x, shift.y, + rotateWithMap, pitchWithMap, this$1.transform.angle) : + iconBox; + return this$1.collisionIndex.placeCollisionBox(shiftedIconBox, layout.get('icon-allow-overlap'), textPixelRatio, posMatrix, collisionGroup.predicate); - placeIcon = placedIconBoxes.box.length > 0; + }; + + if (placedVerticalText && placedVerticalText.box && placedVerticalText.box.length && collisionArrays.verticalIconBox) { + placedIconBoxes = placeIconFeature(collisionArrays.verticalIconBox); + placeIcon = placedIconBoxes.box.length > 0; + } else { + placedIconBoxes = placeIconFeature(collisionArrays.iconBox); + placeIcon = placedIconBoxes.box.length > 0; + } offscreen = offscreen && placedIconBoxes.offscreen; } @@ -46715,7 +47600,7 @@ var Placement = function Placement(transform , fadeDuration , cross } if (placeText && placedGlyphBoxes && placedGlyphBoxes.box) { - if (placedVertical && placedVertical.box && verticalTextFeatureIndex) { + if (placedVerticalText && placedVerticalText.box && verticalTextFeatureIndex) { this$1.collisionIndex.insertCollisionBox(placedGlyphBoxes.box, layout.get('text-ignore-placement'), bucket.bucketInstanceId, verticalTextFeatureIndex, collisionGroup.ID); } else { @@ -46814,13 +47699,13 @@ var Placement = function Placement(transform , fadeDuration , cross Placement.prototype.commit = function commit (now ) { this.commitTime = now; + this.zoomAtLastRecencyCheck = this.transform.zoom; var prevPlacement = this.prevPlacement; var placementChanged = false; - var increment = (prevPlacement && this.fadeDuration !== 0) ? - (this.commitTime - prevPlacement.commitTime) / this.fadeDuration : - 1; + this.prevZoomAdjustment = prevPlacement ? prevPlacement.zoomAdjustment(this.transform.zoom) : 0; + var increment = prevPlacement ? prevPlacement.symbolFadeChange(now) : 1; var prevOpacities = prevPlacement ? prevPlacement.opacities : {}; var prevOffsets = prevPlacement ? prevPlacement.variableOffsets : {}; @@ -46888,6 +47773,8 @@ var Placement = function Placement(transform , fadeDuration , cross }; Placement.prototype.updateBucketOpacities = function updateBucketOpacities (bucket , seenCrossTileIDs , collisionBoxArray ) { + var this$1 = this; + if (bucket.hasTextData()) { bucket.text.opacityVertexArray.clear(); } if (bucket.hasIconData()) { bucket.icon.opacityVertexArray.clear(); } if (bucket.hasIconCollisionBoxData()) { bucket.iconCollisionBox.collisionVertexArray.clear(); } @@ -46917,7 +47804,13 @@ var Placement = function Placement(transform , fadeDuration , cross bucket.deserializeCollisionBoxes(collisionBoxArray); } - for (var s = 0; s < bucket.symbolInstances.length; s++) { + var addOpacities = function (iconOrText, numVertices , opacity ) { + for (var i = 0; i < numVertices / 4; i++) { + iconOrText.opacityVertexArray.emplaceBack(opacity); + } + }; + + var loop = function ( s ) { var symbolInstance = bucket.symbolInstances.get(s); var numHorizontalGlyphVertices = symbolInstance.numHorizontalGlyphVertices; var numVerticalGlyphVertices = symbolInstance.numVerticalGlyphVertices; @@ -46925,13 +47818,13 @@ var Placement = function Placement(transform , fadeDuration , cross var isDuplicate = seenCrossTileIDs[crossTileID]; - var opacityState = this.opacities[crossTileID]; + var opacityState = this$1.opacities[crossTileID]; if (isDuplicate) { opacityState = duplicateOpacityState; } else if (!opacityState) { opacityState = defaultOpacityState; // store the state so that future placements use it as a starting point - this.opacities[crossTileID] = opacityState; + this$1.opacities[crossTileID] = opacityState; } seenCrossTileIDs[crossTileID] = true; @@ -46939,55 +47832,68 @@ var Placement = function Placement(transform , fadeDuration , cross var hasText = numHorizontalGlyphVertices > 0 || numVerticalGlyphVertices > 0; var hasIcon = symbolInstance.numIconVertices > 0; + var placedOrientation = this$1.placedOrientations[symbolInstance.crossTileID]; + var horizontalHidden = placedOrientation === symbol_layout.WritingMode.vertical; + var verticalHidden = placedOrientation === symbol_layout.WritingMode.horizontal || placedOrientation === symbol_layout.WritingMode.horizontalOnly; + if (hasText) { var packedOpacity = packOpacity(opacityState.text); // Vertical text fades in/out on collision the same way as corresponding // horizontal text. Switch between vertical/horizontal should be instantaneous - var opacityEntryCount = (numHorizontalGlyphVertices + numVerticalGlyphVertices) / 4; - for (var i = 0; i < opacityEntryCount; i++) { - bucket.text.opacityVertexArray.emplaceBack(packedOpacity); - } + var horizontalOpacity = horizontalHidden ? PACKED_HIDDEN_OPACITY : packedOpacity; + addOpacities(bucket.text, numHorizontalGlyphVertices, horizontalOpacity); + var verticalOpacity = verticalHidden ? PACKED_HIDDEN_OPACITY : packedOpacity; + addOpacities(bucket.text, numVerticalGlyphVertices, verticalOpacity); + // If this label is completely faded, mark it so that we don't have to calculate // its position at render time. If this layer has variable placement, shift the various // symbol instances appropriately so that symbols from buckets that have yet to be placed // offset appropriately. - var symbolHidden = opacityState.text.isHidden() ? 1 : 0; - var placedOrientation = this.placedOrientations[symbolInstance.crossTileID]; - var verticalHidden = (placedOrientation === symbol_layout.WritingMode.horizontal || placedOrientation === symbol_layout.WritingMode.horizontalOnly) ? 1 : 0; - var horizontalHidden = placedOrientation === symbol_layout.WritingMode.vertical ? 1 : 0; + var symbolHidden = opacityState.text.isHidden(); [ symbolInstance.rightJustifiedTextSymbolIndex, symbolInstance.centerJustifiedTextSymbolIndex, symbolInstance.leftJustifiedTextSymbolIndex ].forEach(function (index) { if (index >= 0) { - bucket.text.placedSymbolArray.get(index).hidden = symbolHidden || horizontalHidden; + bucket.text.placedSymbolArray.get(index).hidden = symbolHidden || horizontalHidden ? 1 : 0; } }); if (symbolInstance.verticalPlacedTextSymbolIndex >= 0) { - bucket.text.placedSymbolArray.get(symbolInstance.verticalPlacedTextSymbolIndex).hidden = symbolHidden || verticalHidden; + bucket.text.placedSymbolArray.get(symbolInstance.verticalPlacedTextSymbolIndex).hidden = symbolHidden || verticalHidden ? 1 : 0; } - var prevOffset = this.variableOffsets[symbolInstance.crossTileID]; + var prevOffset = this$1.variableOffsets[symbolInstance.crossTileID]; if (prevOffset) { - this.markUsedJustification(bucket, prevOffset.anchor, symbolInstance, placedOrientation); + this$1.markUsedJustification(bucket, prevOffset.anchor, symbolInstance, placedOrientation); } - var prevOrientation = this.placedOrientations[symbolInstance.crossTileID]; + var prevOrientation = this$1.placedOrientations[symbolInstance.crossTileID]; if (prevOrientation) { - this.markUsedJustification(bucket, 'left', symbolInstance, prevOrientation); - this.markUsedOrientation(bucket, prevOrientation, symbolInstance); + this$1.markUsedJustification(bucket, 'left', symbolInstance, prevOrientation); + this$1.markUsedOrientation(bucket, prevOrientation, symbolInstance); } } if (hasIcon) { var packedOpacity$1 = packOpacity(opacityState.icon); - for (var i$1 = 0; i$1 < symbolInstance.numIconVertices / 4; i$1++) { - bucket.icon.opacityVertexArray.emplaceBack(packedOpacity$1); + + var useHorizontal = !(hasIconTextFit && symbolInstance.verticalPlacedIconSymbolIndex && horizontalHidden); + + if (symbolInstance.placedIconSymbolIndex >= 0) { + var horizontalOpacity$1 = useHorizontal ? packedOpacity$1 : PACKED_HIDDEN_OPACITY; + addOpacities(bucket.icon, symbolInstance.numIconVertices, horizontalOpacity$1); + bucket.icon.placedSymbolArray.get(symbolInstance.placedIconSymbolIndex).hidden = + (opacityState.icon.isHidden() ); + } + + if (symbolInstance.verticalPlacedIconSymbolIndex >= 0) { + var verticalOpacity$1 = !useHorizontal ? packedOpacity$1 : PACKED_HIDDEN_OPACITY; + addOpacities(bucket.icon, symbolInstance.numVerticalIconVertices, verticalOpacity$1); + bucket.icon.placedSymbolArray.get(symbolInstance.verticalPlacedIconSymbolIndex).hidden = + (opacityState.icon.isHidden() ); } - bucket.icon.placedSymbolArray.get(s).hidden = - (opacityState.icon.isHidden() ); } if (bucket.hasIconCollisionBoxData() || bucket.hasIconCollisionCircleData() || @@ -46995,10 +47901,10 @@ var Placement = function Placement(transform , fadeDuration , cross var collisionArrays = bucket.collisionArrays[s]; if (collisionArrays) { var shift = new symbol_layout.Point(0, 0); - if (collisionArrays.textBox) { + if (collisionArrays.textBox || collisionArrays.verticalTextBox) { var used = true; if (variablePlacement) { - var variableOffset = this.variableOffsets[crossTileID]; + var variableOffset = this$1.variableOffsets[crossTileID]; if (variableOffset) { // This will show either the currently placed position or the last // successfully placed position (so you can visualize what collision @@ -47010,7 +47916,7 @@ var Placement = function Placement(transform , fadeDuration , cross variableOffset.textOffset, variableOffset.textBoxScale); if (rotateWithMap) { - shift._rotate(pitchWithMap ? this.transform.angle : -this.transform.angle); + shift._rotate(pitchWithMap ? this$1.transform.angle : -this$1.transform.angle); } } else { // No offset -> this symbol hasn't been placed since coming on-screen @@ -47020,11 +47926,24 @@ var Placement = function Placement(transform , fadeDuration , cross } } - updateCollisionVertices(bucket.textCollisionBox.collisionVertexArray, opacityState.text.placed, !used, shift.x, shift.y); + if (collisionArrays.textBox) { + updateCollisionVertices(bucket.textCollisionBox.collisionVertexArray, opacityState.text.placed, !used || horizontalHidden, shift.x, shift.y); + } + if (collisionArrays.verticalTextBox) { + updateCollisionVertices(bucket.textCollisionBox.collisionVertexArray, opacityState.text.placed, !used || verticalHidden, shift.x, shift.y); + } } + var verticalIconUsed = Boolean(!verticalHidden && collisionArrays.verticalIconBox); + if (collisionArrays.iconBox) { - updateCollisionVertices(bucket.iconCollisionBox.collisionVertexArray, opacityState.icon.placed, false, + updateCollisionVertices(bucket.iconCollisionBox.collisionVertexArray, opacityState.icon.placed, verticalIconUsed, + hasIconTextFit ? shift.x : 0, + hasIconTextFit ? shift.y : 0); + } + + if (collisionArrays.verticalIconBox) { + updateCollisionVertices(bucket.iconCollisionBox.collisionVertexArray, opacityState.icon.placed, !verticalIconUsed, hasIconTextFit ? shift.x : 0, hasIconTextFit ? shift.y : 0); } @@ -47038,7 +47957,9 @@ var Placement = function Placement(transform , fadeDuration , cross } } } - } + }; + + for (var s = 0; s < bucket.symbolInstances.length; s++) loop( s ); bucket.sortFeatures(this.transform.angle); if (this.retainedQueryData[bucket.bucketInstanceId]) { @@ -47071,7 +47992,15 @@ var Placement = function Placement(transform , fadeDuration , cross Placement.prototype.symbolFadeChange = function symbolFadeChange (now ) { return this.fadeDuration === 0 ? 1 : - (now - this.commitTime) / this.fadeDuration; + ((now - this.commitTime) / this.fadeDuration + this.prevZoomAdjustment); + }; + + Placement.prototype.zoomAdjustment = function zoomAdjustment (zoom ) { + // When zooming out quickly, labels can overlap each other. This + // adjustment is used to reduce the interval between placement calculations + // and to reduce the fade duration when zooming out quickly. Discovering the + // collisions more quickly and fading them more quickly reduces the unwanted effect. + return Math.max(0, (this.transform.zoom - zoom) / 1.5); }; Placement.prototype.hasTransitions = function hasTransitions (now ) { @@ -47079,15 +48008,23 @@ var Placement = function Placement(transform , fadeDuration , cross now - this.lastPlacementChangeTime < this.fadeDuration; }; - Placement.prototype.stillRecent = function stillRecent (now ) { - return this.commitTime + this.fadeDuration > now; + Placement.prototype.stillRecent = function stillRecent (now , zoom ) { + // The adjustment makes placement more frequent when zooming. + // This condition applies the adjustment only after the map has + // stopped zooming. This avoids adding extra jank while zooming. + var durationAdjustment = this.zoomAtLastRecencyCheck === zoom ? + (1 - this.zoomAdjustment(zoom)) : + 1; + this.zoomAtLastRecencyCheck = zoom; + + return this.commitTime + this.fadeDuration * durationAdjustment > now; }; Placement.prototype.setStale = function setStale () { this.stale = true; }; -function updateCollisionVertices(collisionVertexArray , placed , notUsed , shiftX , shiftY ) { +function updateCollisionVertices(collisionVertexArray , placed , notUsed , shiftX , shiftY ) { collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0); collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0); collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0); @@ -47119,6 +48056,8 @@ function packOpacity(opacityState ) { opacityBits * shift1 + targetBit; } +var PACKED_HIDDEN_OPACITY = 0; + // @@ -48600,9 +49539,16 @@ var Style = /*@__PURE__*/(function (Evented) { this._spriteRequest = null; } symbol_layout.evented.off('pluginAvailable', this._rtlTextPluginCallback); + for (var layerId in this._layers) { + var layer = this._layers[layerId]; + layer.setEventedParent(null); + } for (var id in this.sourceCaches) { this.sourceCaches[id].clearTiles(); + this.sourceCaches[id].setEventedParent(null); } + this.imageManager.setEventedParent(null); + this.setEventedParent(null); this.dispatcher.remove(); }; @@ -48659,7 +49605,7 @@ var Style = /*@__PURE__*/(function (Evented) { // tiles will fully display symbols in their first frame var forceFullPlacement = this._layerOrderChanged || fadeDuration === 0; - if (forceFullPlacement || !this.pauseablePlacement || (this.pauseablePlacement.isDone() && !this.placement.stillRecent(symbol_layout.browser.now()))) { + if (forceFullPlacement || !this.pauseablePlacement || (this.pauseablePlacement.isDone() && !this.placement.stillRecent(symbol_layout.browser.now(), transform.zoom))) { this.pauseablePlacement = new PauseablePlacement(transform, this._order, forceFullPlacement, showCollisionBoxes, fadeDuration, crossSourceCollisions, this.placement); this._layerOrderChanged = false; } @@ -48909,6 +49855,7 @@ function compile(fragmentSource, vertexSource) { } var shaders = /*#__PURE__*/Object.freeze({ +__proto__: null, prelude: prelude, background: background, backgroundPattern: backgroundPattern, @@ -50694,29 +51641,6 @@ function updateVariableAnchorsForBucket(bucket, rotateWithMap, pitchWithMap, var bucket.text.dynamicLayoutVertexBuffer.updateData(dynamicTextLayoutVertexArray); } -function updateVerticalLabels(bucket) { - var placedSymbols = bucket.text.placedSymbolArray; - var dynamicLayoutVertexArray = bucket.text.dynamicLayoutVertexArray; - dynamicLayoutVertexArray.clear(); - for (var s = 0; s < placedSymbols.length; s++) { - var symbol = placedSymbols.get(s); - var shouldHide = symbol.hidden || !symbol.placedOrientation; - if (shouldHide) { - // These symbols are from an orientation that is not being used, or a label that wasn't placed - // so we don't need to do the extra math to figure out what incremental shift to apply. - hideGlyphs(symbol.numGlyphs, dynamicLayoutVertexArray); - } else { - var tileAnchor = new symbol_layout.Point(symbol.anchorX, symbol.anchorY); - var angle = (bucket.allowVerticalPlacement && symbol.placedOrientation === symbol_layout.WritingMode.vertical) ? Math.PI / 2 : 0; - - for (var g = 0; g < symbol.numGlyphs; g++) { - symbol_layout.addDynamicAttributes(dynamicLayoutVertexArray, tileAnchor, angle); - } - } - } - bucket.text.dynamicLayoutVertexBuffer.updateData(dynamicLayoutVertexArray); -} - function drawLayerSymbols(painter, sourceCache, layer, coords, isText, translate, translateAnchor, rotationAlignment, pitchAlignment, keepUpright, stencilMode, colorMode) { @@ -50793,8 +51717,6 @@ function drawLayerSymbols(painter, sourceCache, layer, coords, isText, translate if (alongLine) { updateLineLabels(bucket, coord.posMatrix, painter, isText, labelPlaneMatrix, glCoordMatrix, pitchWithMap, keepUpright); - } else if (isText && size && bucket.allowVerticalPlacement && !variablePlacement) { - updateVerticalLabels(bucket); } var matrix = painter.translatePosMatrix(coord.posMatrix, tile, translate, translateAnchor), @@ -51717,6 +52639,10 @@ function drawDebugTile(painter, sourceCache, coord) { program.draw(context, gl.LINES, depthMode, stencilMode, colorMode, CullFaceMode.disabled, debugUniformValues(posMatrix, symbol_layout.Color.black), id, debugTextBuffer, debugTextIndexBuffer, debugTextSegment); + + debugTextBuffer.destroy(); + debugTextIndexBuffer.destroy(); + debugTextSegment.destroy(); } // Font data From Hershey Simplex Font @@ -53149,8 +54075,10 @@ function throttle(fn , time ) { * * @returns {Hash} `this` */ -var Hash = function Hash() { +var Hash = function Hash(hashName ) { + this._hashName = hashName && encodeURIComponent(hashName); symbol_layout.bindAll([ + '_getCurrentHash', '_onHashChange', '_updateHash' ], this); @@ -53200,19 +54128,52 @@ Hash.prototype.getHashString = function getHashString (mapFeedback ) { if (mapFeedback) { // new map feedback site has some constraints that don't allow // us to use the same hash format as we do for the Map hash option. - hash += "#/" + lng + "/" + lat + "/" + zoom; + hash += "/" + lng + "/" + lat + "/" + zoom; } else { - hash += "#" + zoom + "/" + lat + "/" + lng; + hash += zoom + "/" + lat + "/" + lng; } if (bearing || pitch) { hash += (("/" + (Math.round(bearing * 10) / 10))); } if (pitch) { hash += (("/" + (Math.round(pitch)))); } - return hash; + + if (this._hashName) { + var hashName = this._hashName; + var found = false; + var parts = symbol_layout.window.location.hash.slice(1).split('&').map(function (part) { + var key = part.split('=')[0]; + if (key === hashName) { + found = true; + return (key + "=" + hash); + } + return part; + }).filter(function (a) { return a; }); + if (!found) { + parts.push((hashName + "=" + hash)); + } + return ("#" + (parts.join('&'))); + } + + return ("#" + hash); +}; + +Hash.prototype._getCurrentHash = function _getCurrentHash () { + var this$1 = this; + + // Get the current hash from location, stripped from its number sign + var hash = symbol_layout.window.location.hash.replace('#', ''); + if (this._hashName) { + // Split the parameter-styled hash into parts and find the value we need + var keyval = hash.split('&').map( + function (part) { return part.split('='); } + ).find(function (part) { return part[0] === this$1._hashName; }); + return (keyval ? keyval[1] || '' : '').split('/'); + } + return hash.split('/'); }; Hash.prototype._onHashChange = function _onHashChange () { - var loc = symbol_layout.window.location.hash.replace('#', '').split('/'); - if (loc.length >= 3) { + var loc = this._getCurrentHash(); + if (loc.length >= 3 && !loc.some(function (v) { return isNaN(v); })) { this._map.jumpTo({ center: [+loc[2], +loc[1]], zoom: +loc[0], @@ -54009,13 +54970,19 @@ DragRotateHandler.prototype._onDragFrame = function _onDragFrame () { this._drainInertiaBuffer(); inertia.push([symbol_layout.browser.now(), this._map._normalizeBearing(bearing, last[1])]); + var prevBearing = tr.bearing; tr.bearing = bearing; if (this._pitchWithRotate) { - this._fireEvent('pitch', e); + var prevPitch = tr.pitch; tr.pitch = pitch; + if (tr.pitch !== prevPitch) { + this._fireEvent('pitch', e); + } } - this._fireEvent('rotate', e); + if (tr.bearing !== prevBearing) { + this._fireEvent('rotate', e); + } this._fireEvent('move', e); delete this._lastMoveEvent; @@ -56695,7 +57662,7 @@ var HTMLElement = symbol_layout.window.HTMLElement; /* eslint-enable no-use-before-define */ - + @@ -56802,8 +57769,11 @@ var defaultOptions = { * Tilesets hosted with Mapbox can be style-optimized if you append `?optimize=true` to the end of your style URL, like `mapbox://styles/mapbox/streets-v9?optimize=true`. * Learn more about style-optimized vector tiles in our [API documentation](https://www.mapbox.com/api-documentation/maps/#retrieve-tiles). * - * @param {boolean} [options.hash=false] If `true`, the map's position (zoom, center latitude, center longitude, bearing, and pitch) will be synced with the hash fragment of the page's URL. + * @param {(boolean|string)} [options.hash=false] If `true`, the map's position (zoom, center latitude, center longitude, bearing, and pitch) will be synced with the hash fragment of the page's URL. * For example, `http://path/to/my/page.html#2.59/39.26/53.07/-24.1/60`. + * An additional string may optionally be provided to indicate a parameter-styled hash, + * e.g. http://path/to/my/page.html#map=2.59/39.26/53.07/-24.1/60&foo=bar, where foo + * is a custom parameter and bar is an arbitrary hash distinct from the map hash. * @param {boolean} [options.interactive=true] If `false`, no mouse, touch, or keyboard listeners will be attached to the map, so it will not respond to interaction. * @param {number} [options.bearingSnap=7] The threshold, measured in degrees, that determines when the map's * bearing will snap to north. For example, with a `bearingSnap` of 7, if the user rotates @@ -56940,7 +57910,8 @@ var Map = /*@__PURE__*/(function (Camera) { bindHandlers(this, options); - this._hash = options.hash && (new Hash()).addTo(this); + var hashName = (typeof options.hash === 'string' && options.hash) || undefined; + this._hash = options.hash && (new Hash(hashName)).addTo(this); // don't set position from options if set through hash if (!this._hash || !this._hash._onHashChange()) { this.jumpTo({ @@ -56997,7 +57968,7 @@ var Map = /*@__PURE__*/(function (Camera) { }; /** - * Adds a {@link IControl} to the map, calling `control.onAdd(this)`. + * Adds an {@link IControl} to the map, calling `control.onAdd(this)`. * * @param {IControl} control The {@link IControl} to add. * @param {string} [position] position on the map to which the control will be added. @@ -58759,7 +59730,7 @@ function removeNode(node) { } /** - * Interface for interactive controls added to the map. This is an + * Interface for interactive controls added to the map. This is a * specification for implementers to model: it is not * an exported method or class. * @@ -59672,7 +60643,57 @@ var GeolocateControl = /*@__PURE__*/(function (Evented) { this._map = (undefined ); }; + GeolocateControl.prototype._isOutOfMapMaxBounds = function _isOutOfMapMaxBounds (position ) { + var bounds = this._map.getMaxBounds(); + var coordinates = position.coords; + + return bounds && ( + coordinates.longitude < bounds.getWest() || + coordinates.longitude > bounds.getEast() || + coordinates.latitude < bounds.getSouth() || + coordinates.latitude > bounds.getNorth() + ); + }; + + GeolocateControl.prototype._setErrorState = function _setErrorState () { + switch (this._watchState) { + case 'WAITING_ACTIVE': + this._watchState = 'ACTIVE_ERROR'; + this._geolocateButton.classList.remove('mapboxgl-ctrl-geolocate-active'); + this._geolocateButton.classList.add('mapboxgl-ctrl-geolocate-active-error'); + break; + case 'ACTIVE_LOCK': + this._watchState = 'ACTIVE_ERROR'; + this._geolocateButton.classList.remove('mapboxgl-ctrl-geolocate-active'); + this._geolocateButton.classList.add('mapboxgl-ctrl-geolocate-active-error'); + this._geolocateButton.classList.add('mapboxgl-ctrl-geolocate-waiting'); + // turn marker grey + break; + case 'BACKGROUND': + this._watchState = 'BACKGROUND_ERROR'; + this._geolocateButton.classList.remove('mapboxgl-ctrl-geolocate-background'); + this._geolocateButton.classList.add('mapboxgl-ctrl-geolocate-background-error'); + this._geolocateButton.classList.add('mapboxgl-ctrl-geolocate-waiting'); + // turn marker grey + break; + case 'ACTIVE_ERROR': + break; + default: + symbol_layout.assert(false, ("Unexpected watchState " + (this._watchState))); + } + }; + GeolocateControl.prototype._onSuccess = function _onSuccess (position ) { + if (this._isOutOfMapMaxBounds(position)) { + this._setErrorState(); + + this.fire(new symbol_layout.Event('outofmaxbounds', position)); + this._updateMarker(); + this._finish(); + + return; + } + if (this.options.trackUserLocation) { // keep a record of the position so that if the state is BACKGROUND and the user // clicks the button, we can move to ACTIVE_LOCK immediately without waiting for @@ -59748,36 +60769,15 @@ var GeolocateControl = /*@__PURE__*/(function (Evented) { this._geolocateButton.classList.remove('mapboxgl-ctrl-geolocate-active-error'); this._geolocateButton.classList.remove('mapboxgl-ctrl-geolocate-background'); this._geolocateButton.classList.remove('mapboxgl-ctrl-geolocate-background-error'); + this._geolocateButton.disabled = true; + this._geolocateButton.title = 'Location not available'; + this._geolocateButton.setAttribute('aria-label', 'Location not available'); if (this._geolocationWatchID !== undefined) { this._clearWatch(); } } else { - switch (this._watchState) { - case 'WAITING_ACTIVE': - this._watchState = 'ACTIVE_ERROR'; - this._geolocateButton.classList.remove('mapboxgl-ctrl-geolocate-active'); - this._geolocateButton.classList.add('mapboxgl-ctrl-geolocate-active-error'); - break; - case 'ACTIVE_LOCK': - this._watchState = 'ACTIVE_ERROR'; - this._geolocateButton.classList.remove('mapboxgl-ctrl-geolocate-active'); - this._geolocateButton.classList.add('mapboxgl-ctrl-geolocate-active-error'); - this._geolocateButton.classList.add('mapboxgl-ctrl-geolocate-waiting'); - // turn marker grey - break; - case 'BACKGROUND': - this._watchState = 'BACKGROUND_ERROR'; - this._geolocateButton.classList.remove('mapboxgl-ctrl-geolocate-background'); - this._geolocateButton.classList.add('mapboxgl-ctrl-geolocate-background-error'); - this._geolocateButton.classList.add('mapboxgl-ctrl-geolocate-waiting'); - // turn marker grey - break; - case 'ACTIVE_ERROR': - break; - default: - symbol_layout.assert(false, ("Unexpected watchState " + (this._watchState))); - } + this._setErrorState(); } } @@ -59798,10 +60798,6 @@ var GeolocateControl = /*@__PURE__*/(function (Evented) { GeolocateControl.prototype._setupUI = function _setupUI (supported ) { var this$1 = this; - if (supported === false) { - symbol_layout.warnOnce('Geolocation support is not available, the GeolocateControl will not be visible.'); - return; - } this._container.addEventListener('contextmenu', function (e ) { return e.preventDefault(); }); this._geolocateButton = DOM.create('button', (className + "-icon " + className + "-geolocate"), @@ -59809,6 +60805,12 @@ var GeolocateControl = /*@__PURE__*/(function (Evented) { this._geolocateButton.type = 'button'; this._geolocateButton.title = 'Find my location'; this._geolocateButton.setAttribute('aria-label', 'Find my location'); + if (supported === false) { + symbol_layout.warnOnce('Geolocation support is not available so the GeolocateControl will be disabled.'); + this._geolocateButton.disabled = true; + this._geolocateButton.title = 'Location not available'; + this._geolocateButton.setAttribute('aria-label', 'Location not available'); + } if (this.options.trackUserLocation) { this._geolocateButton.setAttribute('aria-pressed', 'false'); @@ -59993,6 +60995,16 @@ var GeolocateControl = /*@__PURE__*/(function (Evented) { * */ +/** + * Fired on each Geolocation API position update which returned as success but user position is out of map maxBounds. + * + * @event outofmaxbounds + * @memberof GeolocateControl + * @instance + * @property {Position} data The returned [Position](https://developer.mozilla.org/en-US/docs/Web/API/Position) object from the callback in [Geolocation.getCurrentPosition()](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition) or [Geolocation.watchPosition()](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/watchPosition). + * + */ + /** * Fired when the Geolocate Control changes to the active lock state, which happens either upon first obtaining a successful Geolocation API position for the user (a geolocate event will follow), or the user clicks the geolocate button when in the background state which uses the last known position to recenter the map and enter active lock state (no geolocate event will follow unless the users's location changes). * @@ -60761,6 +61773,7 @@ var exported = { version: symbol_layout.version, supported: mapboxGlSupported, setRTLTextPlugin: symbol_layout.setRTLTextPlugin, + getRTLTextPluginStatus: symbol_layout.getRTLTextPluginStatus, Map: Map, NavigationControl: NavigationControl, GeolocateControl: GeolocateControl, @@ -60875,4 +61888,4 @@ return exported; return mapboxgl; })); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LWdsLWRldi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYXNzZXJ0L25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdW5pdGJlemllci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3BvaW50LWdlb21ldHJ5L2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9kZWVwX2VxdWFsLmpzIiwiLi4vc3JjL3V0aWwvdXRpbC5qcyIsIi4uL3NyYy91dGlsL2Jyb3dzZXIuanMiLCIuLi9zcmMvdXRpbC9jb25maWcuanMiLCIuLi9zcmMvdXRpbC93ZWJwX3N1cHBvcnRlZC5qcyIsIi4uL3NyYy91dGlsL3NrdV90b2tlbi5qcyIsIi4uL3NyYy91dGlsL21hcGJveC5qcyIsIi4uL3NyYy91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZS5qcyIsIi4uL3NyYy91dGlsL2FqYXguanMiLCIuLi9zcmMvdXRpbC9ldmVudGVkLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXJyb3IvdmFsaWRhdGlvbl9lcnJvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbnN0YW50cy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvZXh0ZW5kLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC91bmJ1bmRsZV9qc29ubGludC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vcGFyc2luZ19lcnJvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vc2NvcGUuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Nzc2NvbG9ycGFyc2VyL2Nzc2NvbG9ycGFyc2VyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9jb2xvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvY29sbGF0b3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3ZhbHVlcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbGl0ZXJhbC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vcnVudGltZV9lcnJvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvYXNzZXJ0aW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9mb3JtYXQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2ltYWdlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9jb2VyY2lvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZXZhbHVhdGlvbl9jb250ZXh0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9jb21wb3VuZF9leHByZXNzaW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9jb2xsYXRvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vaXNfY29uc3RhbnQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL3Zhci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vcGFyc2luZ19jb250ZXh0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9zdG9wcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvc3RlcC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL2NvbG9yX3NwYWNlcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2NvYWxlc2NlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9sZXQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2F0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9tYXRjaC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY2FzZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29tcGFyaXNvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbnVtYmVyX2Zvcm1hdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbGVuZ3RoLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvcmVzdWx0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9nZXRfdHlwZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2Z1bmN0aW9uL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX29iamVjdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2FycmF5LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbnVtYmVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZnVuY3Rpb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9leHByZXNzaW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfYm9vbGVhbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZW51bS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZmlsdGVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfcHJvcGVydHkuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfc291cmNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbGlnaHQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9zdHJpbmcuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9mb3JtYXR0ZWQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZ2x5cGhzX3VybC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlX3N0eWxlLm1pbi5qcyIsIi4uL3NyYy9zdHlsZS92YWxpZGF0ZV9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9ncmlkLWluZGV4L2dyaWQtaW5kZXguanMiLCIuLi9zcmMvdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyLmpzIiwiLi4vc3JjL3N0eWxlL3pvb21faGlzdG9yeS5qcyIsIi4uL3NyYy91dGlsL2lzX2NoYXJfaW5fdW5pY29kZV9ibG9jay5qcyIsIi4uL3NyYy91dGlsL3NjcmlwdF9kZXRlY3Rpb24uanMiLCIuLi9zcmMvc291cmNlL3J0bF90ZXh0X3BsdWdpbi5qcyIsIi4uL3NyYy9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMuanMiLCIuLi9zcmMvc3R5bGUvcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy91dGlsL3N0cnVjdF9hcnJheS5qcyIsIi4uL3NyYy9kYXRhL2FycmF5X3R5cGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2NpcmNsZV9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvc2VnbWVudC5qcyIsIi4uL3NyYy9zaGFkZXJzL2VuY29kZV9hdHRyaWJ1dGUuanMiLCIuLi9zcmMvZGF0YS9mZWF0dXJlX3Bvc2l0aW9uX21hcC5qcyIsIi4uL3NyYy9yZW5kZXIvdW5pZm9ybV9iaW5kaW5nLmpzIiwiLi4vc3JjL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uLmpzIiwiLi4vc3JjL2RhdGEvZXh0ZW50LmpzIiwiLi4vc3JjL2RhdGEvbG9hZF9nZW9tZXRyeS5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9jaXJjbGVfYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzLmpzIiwiLi4vc3JjL3N0eWxlL3F1ZXJ5X3V0aWxzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vY29tbW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0Mi5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL21hdDJkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0My5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL21hdDQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS92ZWMzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vdmVjNC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3F1YXQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9xdWF0Mi5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3ZlYzIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2hlYXRtYXBfYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvaW1hZ2UuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3V0aWwvY29sb3JfcmFtcC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2F0dHJpYnV0ZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvZWFyY3V0L3NyYy9lYXJjdXQuanMiLCIuLi9ub2RlX21vZHVsZXMvcXVpY2tzZWxlY3QvaW5kZXguanMiLCIuLi9zcmMvdXRpbC9jbGFzc2lmeV9yaW5ncy5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcy5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2J1Y2tldC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2V4dHJ1c2lvbl9hdHRyaWJ1dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGVsYXllci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3ZlY3Rvci10aWxlL2xpYi92ZWN0b3J0aWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvaW5kZXguanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvbGluZV9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2xpbmVfYnVja2V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L3N5bWJvbF9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL3N5bWJvbC90cmFuc2Zvcm1fdGV4dC5qcyIsIi4uL3NyYy9zeW1ib2wvbWVyZ2VsaW5lcy5qcyIsIi4uL3NyYy91dGlsL3ZlcnRpY2FsaXplX3B1bmN0dWF0aW9uLmpzIiwiLi4vc3JjL3N5bWJvbC9vbmVfZW0uanMiLCIuLi9zcmMvc3ltYm9sL3NoYXBpbmcuanMiLCIuLi9zcmMvc3ltYm9sL2FuY2hvci5qcyIsIi4uL3NyYy9zeW1ib2wvc3ltYm9sX3NpemUuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldC5qcyIsIi4uL3NyYy91dGlsL3Jlc29sdmVfdG9rZW5zLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9mb3JtYXRfc2VjdGlvbl9vdmVycmlkZS5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvYmFja2dyb3VuZF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2JhY2tncm91bmRfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvcmFzdGVyX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvcmFzdGVyX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9zdHlsZS9jcmVhdGVfc3R5bGVfbGF5ZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcG90cGFjay9pbmRleC5tanMiLCIuLi9zcmMvcmVuZGVyL2ltYWdlX2F0bGFzLmpzIiwiLi4vc3JjL3JlbmRlci90ZXh0dXJlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcGJmL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlL3BhcnNlX2dseXBoX3BiZi5qcyIsIi4uL3NyYy91dGlsL3Rocm90dGxlZF9pbnZva2VyLmpzIiwiLi4vc3JjL3V0aWwvYWN0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC93aG9vdHMtanMvaW5kZXgubWpzIiwiLi4vc3JjL2dlby9sbmdfbGF0X2JvdW5kcy5qcyIsIi4uL3NyYy9nZW8vbG5nX2xhdC5qcyIsIi4uL3NyYy9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZS5qcyIsIi4uL3NyYy9zb3VyY2UvdGlsZV9pZC5qcyIsIi4uL3NyYy9kYXRhL2RlbV9kYXRhLmpzIiwiLi4vc3JjL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvZGljdGlvbmFyeV9jb2Rlci5qcyIsIi4uL3NyYy91dGlsL3ZlY3RvcnRpbGVfdG9fZ2VvanNvbi5qcyIsIi4uL3NyYy9zb3VyY2Uvc291cmNlX3N0YXRlLmpzIiwiLi4vc3JjL2RhdGEvZmVhdHVyZV9pbmRleC5qcyIsIi4uL3NyYy9zb3VyY2UvdGlsZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvcmVmX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3ltYm9sL2NoZWNrX21heF9hbmdsZS5qcyIsIi4uL3NyYy9zeW1ib2wvZ2V0X2FuY2hvcnMuanMiLCIuLi9zcmMvc3ltYm9sL2NsaXBfbGluZS5qcyIsIi4uL3NyYy9zeW1ib2wvcXVhZHMuanMiLCIuLi9zcmMvc3ltYm9sL2NvbGxpc2lvbl9mZWF0dXJlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3RpbnlxdWV1ZS9pbmRleC5qcyIsIi4uL3NyYy91dGlsL2ZpbmRfcG9sZV9vZl9pbmFjY2Vzc2liaWxpdHkuanMiLCIuLi9ub2RlX21vZHVsZXMvbXVybXVyaGFzaC1qcy9tdXJtdXJoYXNoM19nYy5qcyIsIi4uL25vZGVfbW9kdWxlcy9tdXJtdXJoYXNoLWpzL211cm11cmhhc2gyX2djLmpzIiwiLi4vbm9kZV9tb2R1bGVzL211cm11cmhhc2gtanMvaW5kZXguanMiLCIuLi9zcmMvc3ltYm9sL3N5bWJvbF9sYXlvdXQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9ncm91cF9ieV9sYXlvdXQuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXJfaW5kZXguanMiLCIuLi9zcmMvcmVuZGVyL2dseXBoX2F0bGFzLmpzIiwiLi4vc3JjL3NvdXJjZS93b3JrZXJfdGlsZS5qcyIsIi4uL3NyYy91dGlsL3BlcmZvcm1hbmNlLmpzIiwiLi4vc3JjL3NvdXJjZS92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9yYXN0ZXJfZGVtX3RpbGVfd29ya2VyX3NvdXJjZS5qcyIsIi4uL25vZGVfbW9kdWxlcy93Z3M4NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L2dlb2pzb24tYXJlYS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L2dlb2pzb24tcmV3aW5kL2luZGV4LmpzIiwiLi4vc3JjL3NvdXJjZS9nZW9qc29uX3dyYXBwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvdnQtcGJmL2xpYi9nZW9qc29uX3dyYXBwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvdnQtcGJmL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvc29ydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9rZGJ1c2gvc3JjL3JhbmdlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvd2l0aGluLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvc3VwZXJjbHVzdGVyL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3NpbXBsaWZ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL2ZlYXR1cmUuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvY29udmVydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9jbGlwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3dyYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3RpbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvaW5kZXguanMiLCIuLi9zcmMvc291cmNlL2dlb2pzb25fd29ya2VyX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2Uvd29ya2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvbWFwYm94LWdsLXN1cHBvcnRlZC9pbmRleC5qcyIsIi4uL3NyYy91dGlsL2RvbS5qcyIsIi4uL3NyYy9zdHlsZS9sb2FkX3Nwcml0ZS5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9pbWFnZS5qcyIsIi4uL3NyYy9yZW5kZXIvaW1hZ2VfbWFuYWdlci5qcyIsIi4uL3NyYy9zdHlsZS9sb2FkX2dseXBoX3JhbmdlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdGlueS1zZGYvaW5kZXguanMiLCIuLi9zcmMvcmVuZGVyL2dseXBoX21hbmFnZXIuanMiLCIuLi9zcmMvc3R5bGUvbGlnaHQuanMiLCIuLi9zcmMvcmVuZGVyL2xpbmVfYXRsYXMuanMiLCIuLi9zcmMvdXRpbC9kaXNwYXRjaGVyLmpzIiwiLi4vc3JjL3NvdXJjZS9sb2FkX3RpbGVqc29uLmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlX2JvdW5kcy5qcyIsIi4uL3NyYy9zb3VyY2UvdmVjdG9yX3RpbGVfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9yYXN0ZXJfdGlsZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3Jhc3Rlcl9kZW1fdGlsZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL2dlb2pzb25fc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9pbWFnZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3ZpZGVvX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvY2FudmFzX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2Uvc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9xdWVyeV9mZWF0dXJlcy5qcyIsIi4uL3NyYy9zb3VyY2UvdGlsZV9jYWNoZS5qcyIsIi4uL3NyYy9nbC9pbmRleF9idWZmZXIuanMiLCIuLi9zcmMvZ2wvdmVydGV4X2J1ZmZlci5qcyIsIi4uL3NyYy9nbC92YWx1ZS5qcyIsIi4uL3NyYy9nbC9mcmFtZWJ1ZmZlci5qcyIsIi4uL3NyYy9nbC9kZXB0aF9tb2RlLmpzIiwiLi4vc3JjL2dsL3N0ZW5jaWxfbW9kZS5qcyIsIi4uL3NyYy9nbC9jb2xvcl9tb2RlLmpzIiwiLi4vc3JjL2dsL2N1bGxfZmFjZV9tb2RlLmpzIiwiLi4vc3JjL2dsL2NvbnRleHQuanMiLCIuLi9zcmMvc291cmNlL3NvdXJjZV9jYWNoZS5qcyIsIi4uL3NyYy91dGlsL2Jyb3dzZXIvd2ViX3dvcmtlci5qcyIsIi4uL3NyYy91dGlsL3dvcmtlcl9wb29sLmpzIiwiLi4vc3JjL3V0aWwvZ2xvYmFsX3dvcmtlcl9wb29sLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZGVyZWYuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9kaWZmLmpzIiwiLi4vc3JjL3N5bWJvbC9ncmlkX2luZGV4LmpzIiwiLi4vc3JjL3N5bWJvbC9wcm9qZWN0aW9uLmpzIiwiLi4vc3JjL3N5bWJvbC9jb2xsaXNpb25faW5kZXguanMiLCIuLi9zcmMvc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzLmpzIiwiLi4vc3JjL3N5bWJvbC9wbGFjZW1lbnQuanMiLCIuLi9zcmMvc3R5bGUvcGF1c2VhYmxlX3BsYWNlbWVudC5qcyIsIi4uL3NyYy9zeW1ib2wvY3Jvc3NfdGlsZV9zeW1ib2xfaW5kZXguanMiLCIuLi9zcmMvc3R5bGUvc3R5bGUuanMiLCIuLi9zcmMvZGF0YS9wb3NfYXR0cmlidXRlcy5qcyIsIi4uL3NyYy9zaGFkZXJzL3NoYWRlcnMuanMiLCIuLi9zcmMvcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QuanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vcGF0dGVybi5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9maWxsX2V4dHJ1c2lvbl9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2ZpbGxfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9jaXJjbGVfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9jb2xsaXNpb25fcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9kZWJ1Z19wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2NsaXBwaW5nX21hc2tfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9oZWF0bWFwX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vaGlsbHNoYWRlX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vbGluZV9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL3Jhc3Rlcl9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL3N5bWJvbF9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2JhY2tncm91bmRfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9wcm9ncmFtX3VuaWZvcm1zLmpzIiwiLi4vc3JjL3JlbmRlci90aWxlX21hc2suanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfY29sbGlzaW9uX2RlYnVnLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X3N5bWJvbC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19jaXJjbGUuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfaGVhdG1hcC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19saW5lLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2ZpbGwuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfZmlsbF9leHRydXNpb24uanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfaGlsbHNoYWRlLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X3Jhc3Rlci5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19iYWNrZ3JvdW5kLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2RlYnVnLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2N1c3RvbS5qcyIsIi4uL3NyYy9yZW5kZXIvcGFpbnRlci5qcyIsIi4uL3NyYy91dGlsL3RpbGVfY292ZXIuanMiLCIuLi9zcmMvZ2VvL3RyYW5zZm9ybS5qcyIsIi4uL3NyYy91dGlsL3Rocm90dGxlLmpzIiwiLi4vc3JjL3VpL2hhc2guanMiLCIuLi9zcmMvdWkvZXZlbnRzLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvc2Nyb2xsX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci9ib3hfem9vbS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2RyYWdfcm90YXRlLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvZHJhZ19wYW4uanMiLCIuLi9zcmMvdWkvaGFuZGxlci9rZXlib2FyZC5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2RibGNsaWNrX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci90b3VjaF96b29tX3JvdGF0ZS5qcyIsIi4uL3NyYy91aS9iaW5kX2hhbmRsZXJzLmpzIiwiLi4vc3JjL3VpL2NhbWVyYS5qcyIsIi4uL3NyYy91aS9jb250cm9sL2F0dHJpYnV0aW9uX2NvbnRyb2wuanMiLCIuLi9zcmMvdWkvY29udHJvbC9sb2dvX2NvbnRyb2wuanMiLCIuLi9zcmMvdXRpbC90YXNrX3F1ZXVlLmpzIiwiLi4vc3JjL3VpL21hcC5qcyIsIi4uL3NyYy91aS9jb250cm9sL25hdmlnYXRpb25fY29udHJvbC5qcyIsIi4uL3NyYy91dGlsL3NtYXJ0X3dyYXAuanMiLCIuLi9zcmMvdWkvYW5jaG9yLmpzIiwiLi4vc3JjL3VpL21hcmtlci5qcyIsIi4uL3NyYy91aS9jb250cm9sL2dlb2xvY2F0ZV9jb250cm9sLmpzIiwiLi4vc3JjL3VpL2NvbnRyb2wvc2NhbGVfY29udHJvbC5qcyIsIi4uL3NyYy91aS9jb250cm9sL2Z1bGxzY3JlZW5fY29udHJvbC5qcyIsIi4uL3NyYy91aS9wb3B1cC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uL3JvbGx1cC9tYXBib3hnbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBmb3JtYXRSZWdFeHAgPSAvJVtzZGolXS9nO1xuZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbihmKSB7XG4gIGlmICghaXNTdHJpbmcoZikpIHtcbiAgICB2YXIgb2JqZWN0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goaW5zcGVjdChhcmd1bWVudHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpO1xuICB9XG5cbiAgdmFyIGkgPSAxO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbih4KSB7XG4gICAgaWYgKHggPT09ICclJScpIHJldHVybiAnJSc7XG4gICAgaWYgKGkgPj0gbGVuKSByZXR1cm4geDtcbiAgICBzd2l0Y2ggKHgpIHtcbiAgICAgIGNhc2UgJyVzJzogcmV0dXJuIFN0cmluZyhhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWQnOiByZXR1cm4gTnVtYmVyKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclaic6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3NbaSsrXSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICBmb3IgKHZhciB4ID0gYXJnc1tpXTsgaSA8IGxlbjsgeCA9IGFyZ3NbKytpXSkge1xuICAgIGlmIChpc051bGwoeCkgfHwgIWlzT2JqZWN0KHgpKSB7XG4gICAgICBzdHIgKz0gJyAnICsgeDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9ICcgJyArIGluc3BlY3QoeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8vIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4vLyBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuLy8gSWYgLS1uby1kZXByZWNhdGlvbiBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbmV4cG9ydHMuZGVwcmVjYXRlID0gZnVuY3Rpb24oZm4sIG1zZykge1xuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb2JqZWN0QXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBjb21wYXJlIGFuZCBpc0J1ZmZlciB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciB4ID0gYS5sZW5ndGg7XG4gIHZhciB5ID0gYi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV07XG4gICAgICB5ID0gYltpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgaWYgKGdsb2JhbC5CdWZmZXIgJiYgdHlwZW9mIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcihiKTtcbiAgfVxuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKTtcbn1cblxuLy8gYmFzZWQgb24gbm9kZSBhc3NlcnQsIG9yaWdpbmFsIG5vdGljZTpcbi8vIE5COiBUaGUgVVJMIHRvIHRoZSBDb21tb25KUyBzcGVjIGlzIGtlcHQganVzdCBmb3IgdHJhZGl0aW9uLlxuLy8gICAgIG5vZGUtYXNzZXJ0IGhhcyBldm9sdmVkIGEgbG90IHNpbmNlIHRoZW4sIGJvdGggaW4gQVBJIGFuZCBiZWhhdmlvci5cblxuLy8gaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvVW5pdF9UZXN0aW5nLzEuMFxuLy9cbi8vIFRISVMgSVMgTk9UIFRFU1RFRCBOT1IgTElLRUxZIFRPIFdPUksgT1VUU0lERSBWOCFcbi8vXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbC8nKTtcbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9vKCkge30ubmFtZSA9PT0gJ2Zvbyc7XG59KCkpO1xuZnVuY3Rpb24gcFRvU3RyaW5nIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNWaWV3KGFycmJ1Zikge1xuICBpZiAoaXNCdWZmZXIoYXJyYnVmKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYnVmKTtcbiAgfVxuICBpZiAoIWFycmJ1Zikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYXJyYnVmIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXJyYnVmLmJ1ZmZlciAmJiBhcnJidWYuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4vLyAxLiBUaGUgYXNzZXJ0IG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB0aHJvd1xuLy8gQXNzZXJ0aW9uRXJyb3IncyB3aGVuIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4gVGhlXG4vLyBhc3NlcnQgbW9kdWxlIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIGludGVyZmFjZS5cblxudmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7XG5cbi8vIDIuIFRoZSBBc3NlcnRpb25FcnJvciBpcyBkZWZpbmVkIGluIGFzc2VydC5cbi8vIG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiBtZXNzYWdlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCB9KVxuXG52YXIgcmVnZXggPSAvXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9ibG9iL2FkZWVlZWM4YmZjYzYwNjhiMTg3ZDdkOWZiM2Q1YmIxZDNhMzA4OTkvaW1wbGVtZW50YXRpb24uanNcbmZ1bmN0aW9uIGdldE5hbWUoZnVuYykge1xuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmMubmFtZTtcbiAgfVxuICB2YXIgc3RyID0gZnVuYy50b1N0cmluZygpO1xuICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXgpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG59XG5hc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7XG4gIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICB0aGlzLm9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvcjtcbiAgaWYgKG9wdGlvbnMubWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gZ2V0TmFtZShzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICAgICAgdmFyIGlkeCA9IG91dC5pbmRleE9mKCdcXG4nICsgZm5fbmFtZSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGxvY2F0ZWQgdGhlIGZ1bmN0aW9uIGZyYW1lXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gc3RyaXAgb3V0IGV2ZXJ5dGhpbmcgYmVmb3JlIGl0IChhbmQgaXRzIGxpbmUpXG4gICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXFxuJywgaWR4ICsgMSk7XG4gICAgICAgIG91dCA9IG91dC5zdWJzdHJpbmcobmV4dF9saW5lICsgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sgPSBvdXQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxudXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gdHJ1bmNhdGUocywgbikge1xuICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgbiA/IHMgOiBzLnNsaWNlKDAsIG4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzO1xuICB9XG59XG5mdW5jdGlvbiBpbnNwZWN0KHNvbWV0aGluZykge1xuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzIHx8ICF1dGlsLmlzRnVuY3Rpb24oc29tZXRoaW5nKSkge1xuICAgIHJldHVybiB1dGlsLmluc3BlY3Qoc29tZXRoaW5nKTtcbiAgfVxuICB2YXIgcmF3bmFtZSA9IGdldE5hbWUoc29tZXRoaW5nKTtcbiAgdmFyIG5hbWUgPSByYXduYW1lID8gJzogJyArIHJhd25hbWUgOiAnJztcbiAgcmV0dXJuICdbRnVuY3Rpb24nICsgIG5hbWUgKyAnXSc7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHtcbiAgcmV0dXJuIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5hY3R1YWwpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmV4cGVjdGVkKSwgMTI4KTtcbn1cblxuLy8gQXQgcHJlc2VudCBvbmx5IHRoZSB0aHJlZSBrZXlzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCBhbmRcbi8vIHVuZGVyc3Rvb2QgYnkgdGhlIHNwZWMuIEltcGxlbWVudGF0aW9ucyBvciBzdWIgbW9kdWxlcyBjYW4gcGFzc1xuLy8gb3RoZXIga2V5cyB0byB0aGUgQXNzZXJ0aW9uRXJyb3IncyBjb25zdHJ1Y3RvciAtIHRoZXkgd2lsbCBiZVxuLy8gaWdub3JlZC5cblxuLy8gMy4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gIEFsbCBhc3NlcnRpb24gbWV0aG9kcyBwcm92aWRlXG4vLyBib3RoIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyB0byB0aGUgYXNzZXJ0aW9uIGVycm9yIGZvclxuLy8gZGlzcGxheSBwdXJwb3Nlcy5cblxuZnVuY3Rpb24gZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvciwgc3RhY2tTdGFydEZ1bmN0aW9uKSB7XG4gIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3Ioe1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0RnVuY3Rpb246IHN0YWNrU3RhcnRGdW5jdGlvblxuICB9KTtcbn1cblxuLy8gRVhURU5TSU9OISBhbGxvd3MgZm9yIHdlbGwgYmVoYXZlZCBlcnJvcnMgZGVmaW5lZCBlbHNld2hlcmUuXG5hc3NlcnQuZmFpbCA9IGZhaWw7XG5cbi8vIDQuIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhZ3VhcmQuXG4vLyBhc3NlcnQub2soZ3VhcmQsIG1lc3NhZ2Vfb3B0KTtcbi8vIFRoaXMgc3RhdGVtZW50IGlzIGVxdWl2YWxlbnQgdG8gYXNzZXJ0LmVxdWFsKHRydWUsICEhZ3VhcmQsXG4vLyBtZXNzYWdlX29wdCk7LiBUbyB0ZXN0IHN0cmljdGx5IGZvciB0aGUgdmFsdWUgdHJ1ZSwgdXNlXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgZ3VhcmQsIG1lc3NhZ2Vfb3B0KTsuXG5cbmZ1bmN0aW9uIG9rKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7XG59XG5hc3NlcnQub2sgPSBvaztcblxuLy8gNS4gVGhlIGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzaGFsbG93LCBjb2VyY2l2ZSBlcXVhbGl0eSB3aXRoXG4vLyA9PS5cbi8vIGFzc2VydC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpO1xufTtcblxuLy8gNi4gVGhlIG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHdoZXRoZXIgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbFxuLy8gd2l0aCAhPSBhc3NlcnQubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbiBub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPScsIGFzc2VydC5ub3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDcuIFRoZSBlcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgYSBkZWVwIGVxdWFsaXR5IHJlbGF0aW9uLlxuLy8gYXNzZXJ0LmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5kZWVwRXF1YWwgPSBmdW5jdGlvbiBkZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcEVxdWFsJywgYXNzZXJ0LmRlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwU3RyaWN0RXF1YWwnLCBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKSB7XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgJiYgaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkgPT09IDA7XG5cbiAgLy8gNy4yLiBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBEYXRlIG9iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0aW1lLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKGFjdHVhbCkgJiYgdXRpbC5pc0RhdGUoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMgSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBSZWdFeHAgb2JqZWN0IHdpdGggdGhlIHNhbWUgc291cmNlIGFuZFxuICAvLyBwcm9wZXJ0aWVzIChgZ2xvYmFsYCwgYG11bHRpbGluZWAsIGBsYXN0SW5kZXhgLCBgaWdub3JlQ2FzZWApLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuc291cmNlID09PSBleHBlY3RlZC5zb3VyY2UgJiZcbiAgICAgICAgICAgYWN0dWFsLmdsb2JhbCA9PT0gZXhwZWN0ZWQuZ2xvYmFsICYmXG4gICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJlxuICAgICAgICAgICBhY3R1YWwubGFzdEluZGV4ID09PSBleHBlY3RlZC5sYXN0SW5kZXggJiZcbiAgICAgICAgICAgYWN0dWFsLmlnbm9yZUNhc2UgPT09IGV4cGVjdGVkLmlnbm9yZUNhc2U7XG5cbiAgLy8gNy40LiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgKGV4cGVjdGVkID09PSBudWxsIHx8IHR5cGVvZiBleHBlY3RlZCAhPT0gJ29iamVjdCcpKSB7XG4gICAgcmV0dXJuIHN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZiB0eXBlZCBhcnJheXMsIHdyYXAgdGhlaXIgdW5kZXJseWluZ1xuICAvLyBBcnJheUJ1ZmZlcnMgaW4gYSBCdWZmZXIgZWFjaCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZVxuICAvLyBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGUgYXJyYXlzIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjaGVja2VkIGJ5XG4gIC8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKGFrYSBwVG9TdHJpbmcpLiBOZXZlciBwZXJmb3JtIGJpbmFyeVxuICAvLyBjb21wYXJpc29ucyBmb3IgRmxvYXQqQXJyYXlzLCB0aG91Z2gsIHNpbmNlIGUuZy4gKzAgPT09IC0wIGJ1dCB0aGVpclxuICAvLyBiaXQgcGF0dGVybnMgYXJlIG5vdCBpZGVudGljYWwuXG4gIH0gZWxzZSBpZiAoaXNWaWV3KGFjdHVhbCkgJiYgaXNWaWV3KGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgIHBUb1N0cmluZyhhY3R1YWwpID09PSBwVG9TdHJpbmcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgIShhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICAgICAgICAgICAgIGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpIHtcbiAgICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhY3R1YWwuYnVmZmVyKSxcbiAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShleHBlY3RlZC5idWZmZXIpKSA9PT0gMDtcblxuICAvLyA3LjUgRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgIT09IGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBtZW1vcyA9IG1lbW9zIHx8IHthY3R1YWw6IFtdLCBleHBlY3RlZDogW119O1xuXG4gICAgdmFyIGFjdHVhbEluZGV4ID0gbWVtb3MuYWN0dWFsLmluZGV4T2YoYWN0dWFsKTtcbiAgICBpZiAoYWN0dWFsSW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoYWN0dWFsSW5kZXggPT09IG1lbW9zLmV4cGVjdGVkLmluZGV4T2YoZXhwZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLmFjdHVhbC5wdXNoKGFjdHVhbCk7XG4gICAgbWVtb3MuZXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG5cbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBvbmUgaXMgYSBwcmltaXRpdmUsIHRoZSBvdGhlciBtdXN0IGJlIHNhbWVcbiAgaWYgKHV0aWwuaXNQcmltaXRpdmUoYSkgfHwgdXRpbC5pc1ByaW1pdGl2ZShiKSlcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgaWYgKHN0cmljdCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBhSXNBcmdzID0gaXNBcmd1bWVudHMoYSk7XG4gIHZhciBiSXNBcmdzID0gaXNBcmd1bWVudHMoYik7XG4gIGlmICgoYUlzQXJncyAmJiAhYklzQXJncykgfHwgKCFhSXNBcmdzICYmIGJJc0FyZ3MpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFJc0FyZ3MpIHtcbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBfZGVlcEVxdWFsKGEsIGIsIHN0cmljdCk7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgdmFyIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT09IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQubm90RGVlcFN0cmljdEVxdWFsID0gbm90RGVlcFN0cmljdEVxdWFsO1xuZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwU3RyaWN0RXF1YWwnLCBub3REZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59XG5cblxuLy8gOS4gVGhlIHN0cmljdCBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc3RyaWN0IGVxdWFsaXR5LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbi8vIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PT0nLCBhc3NlcnQuc3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG4vLyAxMC4gVGhlIHN0cmljdCBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciBzdHJpY3QgaW5lcXVhbGl0eSwgYXNcbi8vIGRldGVybWluZWQgYnkgIT09LiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gbm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElnbm9yZS4gIFRoZSBpbnN0YW5jZW9mIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgYXJyb3cgZnVuY3Rpb25zLlxuICB9XG5cbiAgaWYgKEVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIF90cnlCbG9jayhibG9jaykge1xuICB2YXIgZXJyb3I7XG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIF90aHJvd3Moc2hvdWxkVGhyb3csIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICB2YXIgYWN0dWFsO1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBleHBlY3RlZDtcbiAgICBleHBlY3RlZCA9IG51bGw7XG4gIH1cblxuICBhY3R1YWwgPSBfdHJ5QmxvY2soYmxvY2spO1xuXG4gIG1lc3NhZ2UgPSAoZXhwZWN0ZWQgJiYgZXhwZWN0ZWQubmFtZSA/ICcgKCcgKyBleHBlY3RlZC5uYW1lICsgJykuJyA6ICcuJykgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgPyAnICcgKyBtZXNzYWdlIDogJy4nKTtcblxuICBpZiAoc2hvdWxkVGhyb3cgJiYgIWFjdHVhbCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ01pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgdmFyIHVzZXJQcm92aWRlZE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBpc1Vud2FudGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIHV0aWwuaXNFcnJvcihhY3R1YWwpO1xuICB2YXIgaXNVbmV4cGVjdGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIGFjdHVhbCAmJiAhZXhwZWN0ZWQ7XG5cbiAgaWYgKChpc1Vud2FudGVkRXhjZXB0aW9uICYmXG4gICAgICB1c2VyUHJvdmlkZWRNZXNzYWdlICYmXG4gICAgICBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHxcbiAgICAgIGlzVW5leHBlY3RlZEV4Y2VwdGlvbikge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJlxuICAgICAgIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fCAoIXNob3VsZFRocm93ICYmIGFjdHVhbCkpIHtcbiAgICB0aHJvdyBhY3R1YWw7XG4gIH1cbn1cblxuLy8gMTEuIEV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yOlxuLy8gYXNzZXJ0LnRocm93cyhibG9jaywgRXJyb3Jfb3B0LCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyh0cnVlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuLy8gRVhURU5TSU9OISBUaGlzIGlzIGFubm95aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhpcyBtb2R1bGUuXG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MoZmFsc2UsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKGVycikgeyBpZiAoZXJyKSB0aHJvdyBlcnI7IH07XG5cbi8vIEV4cG9zZSBhIHN0cmljdCBvbmx5IHZhcmlhbnQgb2YgYXNzZXJ0XG5mdW5jdGlvbiBzdHJpY3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09Jywgc3RyaWN0KTtcbn1cbmFzc2VydC5zdHJpY3QgPSBvYmplY3RBc3NpZ24oc3RyaWN0LCBhc3NlcnQsIHtcbiAgZXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgZGVlcEVxdWFsOiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsLFxuICBub3RFcXVhbDogYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLFxuICBub3REZWVwRXF1YWw6IGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWxcbn0pO1xuYXNzZXJ0LnN0cmljdC5zdHJpY3QgPSBhc3NlcnQuc3RyaWN0O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zXG4gKiBhcmUgbWV0OlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUlxuICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1JcbiAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLFxuICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLFxuICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SXG4gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiBQb3J0ZWQgZnJvbSBXZWJraXRcbiAqIGh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Vbml0QmV6aWVyLmhcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVuaXRCZXppZXI7XG5cbmZ1bmN0aW9uIFVuaXRCZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBwb2x5bm9taWFsIGNvZWZmaWNpZW50cywgaW1wbGljaXQgZmlyc3QgYW5kIGxhc3QgY29udHJvbCBwb2ludHMgYXJlICgwLDApIGFuZCAoMSwxKS5cbiAgICB0aGlzLmN4ID0gMy4wICogcDF4O1xuICAgIHRoaXMuYnggPSAzLjAgKiAocDJ4IC0gcDF4KSAtIHRoaXMuY3g7XG4gICAgdGhpcy5heCA9IDEuMCAtIHRoaXMuY3ggLSB0aGlzLmJ4O1xuXG4gICAgdGhpcy5jeSA9IDMuMCAqIHAxeTtcbiAgICB0aGlzLmJ5ID0gMy4wICogKHAyeSAtIHAxeSkgLSB0aGlzLmN5O1xuICAgIHRoaXMuYXkgPSAxLjAgLSB0aGlzLmN5IC0gdGhpcy5ieTtcblxuICAgIHRoaXMucDF4ID0gcDF4O1xuICAgIHRoaXMucDF5ID0gcDJ5O1xuICAgIHRoaXMucDJ4ID0gcDJ4O1xuICAgIHRoaXMucDJ5ID0gcDJ5O1xufVxuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVggPSBmdW5jdGlvbih0KSB7XG4gICAgLy8gYGF4IHReMyArIGJ4IHReMiArIGN4IHQnIGV4cGFuZGVkIHVzaW5nIEhvcm5lcidzIHJ1bGUuXG4gICAgcmV0dXJuICgodGhpcy5heCAqIHQgKyB0aGlzLmJ4KSAqIHQgKyB0aGlzLmN4KSAqIHQ7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVkgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuICgodGhpcy5heSAqIHQgKyB0aGlzLmJ5KSAqIHQgKyB0aGlzLmN5KSAqIHQ7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYID0gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoMy4wICogdGhpcy5heCAqIHQgKyAyLjAgKiB0aGlzLmJ4KSAqIHQgKyB0aGlzLmN4O1xufTtcblxuVW5pdEJlemllci5wcm90b3R5cGUuc29sdmVDdXJ2ZVggPSBmdW5jdGlvbih4LCBlcHNpbG9uKSB7XG4gICAgaWYgKHR5cGVvZiBlcHNpbG9uID09PSAndW5kZWZpbmVkJykgZXBzaWxvbiA9IDFlLTY7XG5cbiAgICB2YXIgdDAsIHQxLCB0MiwgeDIsIGk7XG5cbiAgICAvLyBGaXJzdCB0cnkgYSBmZXcgaXRlcmF0aW9ucyBvZiBOZXd0b24ncyBtZXRob2QgLS0gbm9ybWFsbHkgdmVyeSBmYXN0LlxuICAgIGZvciAodDIgPSB4LCBpID0gMDsgaSA8IDg7IGkrKykge1xuXG4gICAgICAgIHgyID0gdGhpcy5zYW1wbGVDdXJ2ZVgodDIpIC0geDtcbiAgICAgICAgaWYgKE1hdGguYWJzKHgyKSA8IGVwc2lsb24pIHJldHVybiB0MjtcblxuICAgICAgICB2YXIgZDIgPSB0aGlzLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgodDIpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoZDIpIDwgMWUtNikgYnJlYWs7XG5cbiAgICAgICAgdDIgPSB0MiAtIHgyIC8gZDI7XG4gICAgfVxuXG4gICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBiaXNlY3Rpb24gbWV0aG9kIGZvciByZWxpYWJpbGl0eS5cbiAgICB0MCA9IDAuMDtcbiAgICB0MSA9IDEuMDtcbiAgICB0MiA9IHg7XG5cbiAgICBpZiAodDIgPCB0MCkgcmV0dXJuIHQwO1xuICAgIGlmICh0MiA+IHQxKSByZXR1cm4gdDE7XG5cbiAgICB3aGlsZSAodDAgPCB0MSkge1xuXG4gICAgICAgIHgyID0gdGhpcy5zYW1wbGVDdXJ2ZVgodDIpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoeDIgLSB4KSA8IGVwc2lsb24pIHJldHVybiB0MjtcblxuICAgICAgICBpZiAoeCA+IHgyKSB7XG4gICAgICAgICAgICB0MCA9IHQyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdDEgPSB0MjtcbiAgICAgICAgfVxuXG4gICAgICAgIHQyID0gKHQxIC0gdDApICogMC41ICsgdDA7XG4gICAgfVxuXG4gICAgLy8gRmFpbHVyZS5cbiAgICByZXR1cm4gdDI7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zb2x2ZSA9IGZ1bmN0aW9uKHgsIGVwc2lsb24pIHtcbiAgICByZXR1cm4gdGhpcy5zYW1wbGVDdXJ2ZVkodGhpcy5zb2x2ZUN1cnZlWCh4LCBlcHNpbG9uKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIEEgc3RhbmRhbG9uZSBwb2ludCBnZW9tZXRyeSB3aXRoIHVzZWZ1bCBhY2Nlc3NvciwgY29tcGFyaXNvbiwgYW5kXG4gKiBtb2RpZmljYXRpb24gbWV0aG9kcy5cbiAqXG4gKiBAY2xhc3MgUG9pbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IHRoZSB4LWNvb3JkaW5hdGUuIHRoaXMgY291bGQgYmUgbG9uZ2l0dWRlIG9yIHNjcmVlblxuICogcGl4ZWxzLCBvciBhbnkgb3RoZXIgc29ydCBvZiB1bml0LlxuICogQHBhcmFtIHtOdW1iZXJ9IHkgdGhlIHktY29vcmRpbmF0ZS4gdGhpcyBjb3VsZCBiZSBsYXRpdHVkZSBvciBzY3JlZW5cbiAqIHBpeGVscywgb3IgYW55IG90aGVyIHNvcnQgb2YgdW5pdC5cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSBuZXcgUG9pbnQoLTc3LCAzOCk7XG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG59XG5cblBvaW50LnByb3RvdHlwZSA9IHtcblxuICAgIC8qKlxuICAgICAqIENsb25lIHRoaXMgcG9pbnQsIHJldHVybmluZyBhIG5ldyBwb2ludCB0aGF0IGNhbiBiZSBtb2RpZmllZFxuICAgICAqIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBvbGQgb25lLlxuICAgICAqIEByZXR1cm4ge1BvaW50fSB0aGUgY2xvbmVcbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpOyB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyB0byBhbm90aGVyIHBvaW50LFxuICAgICAqIHlpZWxkaW5nIGEgbmV3IHBvaW50LlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIGFkZDogICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHApOyB9LFxuXG4gICAgLyoqXG4gICAgICogU3VidHJhY3QgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIHRvIGZyb20gcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgc3ViOiAgICAgZnVuY3Rpb24ocCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgYnkgcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgbXVsdEJ5UG9pbnQ6ICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdEJ5UG9pbnQocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGUgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIGJ5IHBvaW50LFxuICAgICAqIHlpZWxkaW5nIGEgbmV3IHBvaW50LlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIGRpdkJ5UG9pbnQ6ICAgICBmdW5jdGlvbihwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX2RpdkJ5UG9pbnQocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgYnkgYSBmYWN0b3IsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gayBmYWN0b3JcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgbXVsdDogICAgZnVuY3Rpb24oaykgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0KGspOyB9LFxuXG4gICAgLyoqXG4gICAgICogRGl2aWRlIHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyBieSBhIGZhY3RvcixcbiAgICAgKiB5aWVsZGluZyBhIG5ldyBwb2ludC5cbiAgICAgKiBAcGFyYW0ge1BvaW50fSBrIGZhY3RvclxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICBkaXY6ICAgICBmdW5jdGlvbihrKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX2RpdihrKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSB0aGlzIHBvaW50IGFyb3VuZCB0aGUgMCwgMCBvcmlnaW4gYnkgYW4gYW5nbGUgYSxcbiAgICAgKiBnaXZlbiBpbiByYWRpYW5zXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGEgYW5nbGUgdG8gcm90YXRlIGFyb3VuZCwgaW4gcmFkaWFuc1xuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICByb3RhdGU6ICBmdW5jdGlvbihhKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZShhKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSB0aGlzIHBvaW50IGFyb3VuZCBwIHBvaW50IGJ5IGFuIGFuZ2xlIGEsXG4gICAgICogZ2l2ZW4gaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBhIGFuZ2xlIHRvIHJvdGF0ZSBhcm91bmQsIGluIHJhZGlhbnNcbiAgICAgKiBAcGFyYW0ge1BvaW50fSBwIFBvaW50IHRvIHJvdGF0ZSBhcm91bmRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgcm90YXRlQXJvdW5kOiAgZnVuY3Rpb24oYSxwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZChhLHApOyB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbHkgdGhpcyBwb2ludCBieSBhIDR4MSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0ge0FycmF5PE51bWJlcj59IG0gdHJhbnNmb3JtYXRpb24gbWF0cml4XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIG1hdE11bHQ6IGZ1bmN0aW9uKG0pIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdChtKTsgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGlzIHBvaW50IGJ1dCBhcyBhIHVuaXQgdmVjdG9yIGZyb20gMCwgMCwgbWVhbmluZ1xuICAgICAqIHRoYXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHJlc3VsdGluZyBwb2ludCB0byB0aGUgMCwgMFxuICAgICAqIGNvb3JkaW5hdGUgd2lsbCBiZSBlcXVhbCB0byAxIGFuZCB0aGUgYW5nbGUgZnJvbSB0aGUgcmVzdWx0aW5nXG4gICAgICogcG9pbnQgdG8gdGhlIDAsIDAgY29vcmRpbmF0ZSB3aWxsIGJlIHRoZSBzYW1lIGFzIGJlZm9yZS5cbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gdW5pdCB2ZWN0b3IgcG9pbnRcbiAgICAgKi9cbiAgICB1bml0OiAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fdW5pdCgpOyB9LFxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSBhIHBlcnBlbmRpY3VsYXIgcG9pbnQsIHdoZXJlIHRoZSBuZXcgeSBjb29yZGluYXRlXG4gICAgICogaXMgdGhlIG9sZCB4IGNvb3JkaW5hdGUgYW5kIHRoZSBuZXcgeCBjb29yZGluYXRlIGlzIHRoZSBvbGQgeVxuICAgICAqIGNvb3JkaW5hdGUgbXVsdGlwbGllZCBieSAtMVxuICAgICAqIEByZXR1cm4ge1BvaW50fSBwZXJwZW5kaWN1bGFyIHBvaW50XG4gICAgICovXG4gICAgcGVycDogICAgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZlcnNpb24gb2YgdGhpcyBwb2ludCB3aXRoIHRoZSB4ICYgeSBjb29yZGluYXRlc1xuICAgICAqIHJvdW5kZWQgdG8gaW50ZWdlcnMuXG4gICAgICogQHJldHVybiB7UG9pbnR9IHJvdW5kZWQgcG9pbnRcbiAgICAgKi9cbiAgICByb3VuZDogICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbWFnaXR1ZGUgb2YgdGhpcyBwb2ludDogdGhpcyBpcyB0aGUgRXVjbGlkZWFuXG4gICAgICogZGlzdGFuY2UgZnJvbSB0aGUgMCwgMCBjb29yZGluYXRlIHRvIHRoaXMgcG9pbnQncyB4IGFuZCB5XG4gICAgICogY29vcmRpbmF0ZXMuXG4gICAgICogQHJldHVybiB7TnVtYmVyfSBtYWduaXR1ZGVcbiAgICAgKi9cbiAgICBtYWc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEp1ZGdlIHdoZXRoZXIgdGhpcyBwb2ludCBpcyBlcXVhbCB0byBhbm90aGVyIHBvaW50LCByZXR1cm5pbmdcbiAgICAgKiB0cnVlIG9yIGZhbHNlLlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IG90aGVyIHRoZSBvdGhlciBwb2ludFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhlIHBvaW50cyBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBlcXVhbHM6IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnggPT09IG90aGVyLnggJiZcbiAgICAgICAgICAgICAgIHRoaXMueSA9PT0gb3RoZXIueTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBmcm9tIHRoaXMgcG9pbnQgdG8gYW5vdGhlciBwb2ludFxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICAgICAqL1xuICAgIGRpc3Q6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIocCkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhpcyBwb2ludCB0byBhbm90aGVyIHBvaW50LFxuICAgICAqIHdpdGhvdXQgdGhlIHNxdWFyZSByb290IHN0ZXAuIFVzZWZ1bCBpZiB5b3UncmUgY29tcGFyaW5nXG4gICAgICogcmVsYXRpdmUgZGlzdGFuY2VzLlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICAgICAqL1xuICAgIGRpc3RTcXI6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdmFyIGR4ID0gcC54IC0gdGhpcy54LFxuICAgICAgICAgICAgZHkgPSBwLnkgLSB0aGlzLnk7XG4gICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBhbmdsZSBmcm9tIHRoZSAwLCAwIGNvb3JkaW5hdGUgdG8gdGhpcyBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIGNvb3JkaW5hdGVzLlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAgICAgKi9cbiAgICBhbmdsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKHRoaXMueSwgdGhpcy54KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBhbmdsZSBmcm9tIHRoaXMgcG9pbnQgdG8gYW5vdGhlciBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7UG9pbnR9IGIgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgICAqL1xuICAgIGFuZ2xlVG86IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpcy55IC0gYi55LCB0aGlzLnggLSBiLngpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGFuZ2xlIGJldHdlZW4gdGhpcyBwb2ludCBhbmQgYW5vdGhlciBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7UG9pbnR9IGIgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgICAqL1xuICAgIGFuZ2xlV2l0aDogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAoYi54LCBiLnkpO1xuICAgIH0sXG5cbiAgICAvKlxuICAgICAqIEZpbmQgdGhlIGFuZ2xlIG9mIHRoZSB0d28gdmVjdG9ycywgc29sdmluZyB0aGUgZm9ybXVsYSBmb3JcbiAgICAgKiB0aGUgY3Jvc3MgcHJvZHVjdCBhIHggYiA9IHxhfHxifHNpbijDjsK4KSBmb3Igw47CuC5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0geCB0aGUgeC1jb29yZGluYXRlXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHkgdGhlIHktY29vcmRpbmF0ZVxuICAgICAqIEByZXR1cm4ge051bWJlcn0gdGhlIGFuZ2xlIGluIHJhZGlhbnNcbiAgICAgKi9cbiAgICBhbmdsZVdpdGhTZXA6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoXG4gICAgICAgICAgICB0aGlzLnggKiB5IC0gdGhpcy55ICogeCxcbiAgICAgICAgICAgIHRoaXMueCAqIHggKyB0aGlzLnkgKiB5KTtcbiAgICB9LFxuXG4gICAgX21hdE11bHQ6IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmFyIHggPSBtWzBdICogdGhpcy54ICsgbVsxXSAqIHRoaXMueSxcbiAgICAgICAgICAgIHkgPSBtWzJdICogdGhpcy54ICsgbVszXSAqIHRoaXMueTtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9hZGQ6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54ICs9IHAueDtcbiAgICAgICAgdGhpcy55ICs9IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9zdWI6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54IC09IHAueDtcbiAgICAgICAgdGhpcy55IC09IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9tdWx0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHRoaXMueCAqPSBrO1xuICAgICAgICB0aGlzLnkgKj0gaztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9kaXY6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdGhpcy54IC89IGs7XG4gICAgICAgIHRoaXMueSAvPSBrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX211bHRCeVBvaW50OiBmdW5jdGlvbihwKSB7XG4gICAgICAgIHRoaXMueCAqPSBwLng7XG4gICAgICAgIHRoaXMueSAqPSBwLnk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfZGl2QnlQb2ludDogZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnggLz0gcC54O1xuICAgICAgICB0aGlzLnkgLz0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3VuaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9kaXYodGhpcy5tYWcoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcGVycDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xuICAgICAgICB0aGlzLnkgPSB0aGlzLng7XG4gICAgICAgIHRoaXMueCA9IC15O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3JvdGF0ZTogZnVuY3Rpb24oYW5nbGUpIHtcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIHggPSBjb3MgKiB0aGlzLnggLSBzaW4gKiB0aGlzLnksXG4gICAgICAgICAgICB5ID0gc2luICogdGhpcy54ICsgY29zICogdGhpcy55O1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3JvdGF0ZUFyb3VuZDogZnVuY3Rpb24oYW5nbGUsIHApIHtcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIHggPSBwLnggKyBjb3MgKiAodGhpcy54IC0gcC54KSAtIHNpbiAqICh0aGlzLnkgLSBwLnkpLFxuICAgICAgICAgICAgeSA9IHAueSArIHNpbiAqICh0aGlzLnggLSBwLngpICsgY29zICogKHRoaXMueSAtIHAueSk7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcm91bmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnggPSBNYXRoLnJvdW5kKHRoaXMueCk7XG4gICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQodGhpcy55KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBwb2ludCBmcm9tIGFuIGFycmF5IGlmIG5lY2Vzc2FyeSwgb3RoZXJ3aXNlIGlmIHRoZSBpbnB1dFxuICogaXMgYWxyZWFkeSBhIFBvaW50LCBvciBhbiB1bmtub3duIHR5cGUsIHJldHVybiBpdCB1bmNoYW5nZWRcbiAqIEBwYXJhbSB7QXJyYXk8TnVtYmVyPnxQb2ludHwqfSBhIGFueSBraW5kIG9mIGlucHV0IHZhbHVlXG4gKiBAcmV0dXJuIHtQb2ludH0gY29uc3RydWN0ZWQgcG9pbnQsIG9yIHBhc3NlZC10aHJvdWdoIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqIC8vIHRoaXNcbiAqIHZhciBwb2ludCA9IFBvaW50LmNvbnZlcnQoWzAsIDFdKTtcbiAqIC8vIGlzIGVxdWl2YWxlbnQgdG9cbiAqIHZhciBwb2ludCA9IG5ldyBQb2ludCgwLCAxKTtcbiAqL1xuUG9pbnQuY29udmVydCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBQb2ludCkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChhWzBdLCBhWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGE7XG59O1xuIiwiLy8gQGZsb3dcblxuLyoqXG4gKiBEZWVwbHkgY29tcGFyZXMgdHdvIG9iamVjdCBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWVwRXF1YWwoYTogP21peGVkLCBiOiA/bWl4ZWQpOiBib29sZWFuIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhICE9PSBudWxsICYmIGIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCEodHlwZW9mIGIgPT09ICdvYmplY3QnKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGEpIHtcbiAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYSA9PT0gYjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVlcEVxdWFsO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFVuaXRCZXppZXIgZnJvbSAnQG1hcGJveC91bml0YmV6aWVyJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuL3dpbmRvdyc7XG5cbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuXG4vKipcbiAqIEBtb2R1bGUgdXRpbFxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIEdpdmVuIGEgdmFsdWUgYHRgIHRoYXQgdmFyaWVzIGJldHdlZW4gMCBhbmQgMSwgcmV0dXJuXG4gKiBhbiBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIHRoYXQgZWFzZXMgYmV0d2VlbiAwIGFuZCAxIGluIGEgcGxlYXNpbmdcbiAqIGN1YmljIGluLW91dCBmYXNoaW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlYXNlQ3ViaWNJbk91dCh0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0IDw9IDApIHJldHVybiAwO1xuICAgIGlmICh0ID49IDEpIHJldHVybiAxO1xuICAgIGNvbnN0IHQyID0gdCAqIHQsXG4gICAgICAgIHQzID0gdDIgKiB0O1xuICAgIHJldHVybiA0ICogKHQgPCAwLjUgPyB0MyA6IDMgKiAodCAtIHQyKSArIHQzIC0gMC43NSk7XG59XG5cbi8qKlxuICogR2l2ZW4gZ2l2ZW4gKHgsIHkpLCAoeDEsIHkxKSBjb250cm9sIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUsXG4gKiByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGludGVycG9sYXRlcyBhbG9uZyB0aGF0IGN1cnZlLlxuICpcbiAqIEBwYXJhbSBwMXggY29udHJvbCBwb2ludCAxIHggY29vcmRpbmF0ZVxuICogQHBhcmFtIHAxeSBjb250cm9sIHBvaW50IDEgeSBjb29yZGluYXRlXG4gKiBAcGFyYW0gcDJ4IGNvbnRyb2wgcG9pbnQgMiB4IGNvb3JkaW5hdGVcbiAqIEBwYXJhbSBwMnkgY29udHJvbCBwb2ludCAyIHkgY29vcmRpbmF0ZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlemllcihwMXg6IG51bWJlciwgcDF5OiBudW1iZXIsIHAyeDogbnVtYmVyLCBwMnk6IG51bWJlcik6ICh0OiBudW1iZXIpID0+IG51bWJlciB7XG4gICAgY29uc3QgYmV6aWVyID0gbmV3IFVuaXRCZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBiZXppZXIuc29sdmUodCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBBIGRlZmF1bHQgYmV6aWVyLWN1cnZlIHBvd2VyZWQgZWFzaW5nIGZ1bmN0aW9uIHdpdGhcbiAqIGNvbnRyb2wgcG9pbnRzICgwLjI1LCAwLjEpIGFuZCAoMC4yNSwgMSlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgZWFzZSA9IGJlemllcigwLjI1LCAwLjEsIDAuMjUsIDEpO1xuXG4vKipcbiAqIGNvbnN0cmFpbiBuIHRvIHRoZSBnaXZlbiByYW5nZSB2aWEgbWluICsgbWF4XG4gKlxuICogQHBhcmFtIG4gdmFsdWVcbiAqIEBwYXJhbSBtaW4gdGhlIG1pbmltdW0gdmFsdWUgdG8gYmUgcmV0dXJuZWRcbiAqIEBwYXJhbSBtYXggdGhlIG1heGltdW0gdmFsdWUgdG8gYmUgcmV0dXJuZWRcbiAqIEByZXR1cm5zIHRoZSBjbGFtcGVkIHZhbHVlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAobjogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgbikpO1xufVxuXG4vKipcbiAqIGNvbnN0cmFpbiBuIHRvIHRoZSBnaXZlbiByYW5nZSwgZXhjbHVkaW5nIHRoZSBtaW5pbXVtLCB2aWEgbW9kdWxhciBhcml0aG1ldGljXG4gKlxuICogQHBhcmFtIG4gdmFsdWVcbiAqIEBwYXJhbSBtaW4gdGhlIG1pbmltdW0gdmFsdWUgdG8gYmUgcmV0dXJuZWQsIGV4Y2x1c2l2ZVxuICogQHBhcmFtIG1heCB0aGUgbWF4aW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZCwgaW5jbHVzaXZlXG4gKiBAcmV0dXJucyBjb25zdHJhaW5lZCBudW1iZXJcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwKG46IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBkID0gbWF4IC0gbWluO1xuICAgIGNvbnN0IHcgPSAoKG4gLSBtaW4pICUgZCArIGQpICUgZCArIG1pbjtcbiAgICByZXR1cm4gKHcgPT09IG1pbikgPyBtYXggOiB3O1xufVxuXG4vKlxuICogQ2FsbCBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gb24gYW4gYXJyYXkgb2YgYXJndW1lbnRzLFxuICogY2FsbGluZyBgY2FsbGJhY2tgIHdpdGggdGhlIGNvbXBsZXRlZCByZXN1bHRzIG9mIGFsbCBjYWxscy5cbiAqXG4gKiBAcGFyYW0gYXJyYXkgaW5wdXQgdG8gZWFjaCBjYWxsIG9mIHRoZSBhc3luYyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBmbiBhbiBhc3luYyBmdW5jdGlvbiB3aXRoIHNpZ25hdHVyZSAoZGF0YSwgY2FsbGJhY2spXG4gKiBAcGFyYW0gY2FsbGJhY2sgYSBjYWxsYmFjayBydW4gYWZ0ZXIgYWxsIGFzeW5jIHdvcmsgaXMgZG9uZS5cbiAqIGNhbGxlZCB3aXRoIGFuIGFycmF5LCBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIGVhY2ggYXN5bmMgY2FsbC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3luY0FsbDxJdGVtLCBSZXN1bHQ+KFxuICAgIGFycmF5OiBBcnJheTxJdGVtPixcbiAgICBmbjogKGl0ZW06IEl0ZW0sIGZuQ2FsbGJhY2s6IENhbGxiYWNrPFJlc3VsdD4pID0+IHZvaWQsXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrPEFycmF5PFJlc3VsdD4+XG4pIHtcbiAgICBpZiAoIWFycmF5Lmxlbmd0aCkgeyByZXR1cm4gY2FsbGJhY2sobnVsbCwgW10pOyB9XG4gICAgbGV0IHJlbWFpbmluZyA9IGFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IEFycmF5KGFycmF5Lmxlbmd0aCk7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBhcnJheS5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICAgIGZuKGl0ZW0sIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICByZXN1bHRzW2ldID0gKChyZXN1bHQ6IGFueSk6IFJlc3VsdCk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yMTIzXG4gICAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIGNhbGxiYWNrKGVycm9yLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qXG4gKiBQb2x5ZmlsbCBmb3IgT2JqZWN0LnZhbHVlcy4gTm90IGZ1bGx5IHNwZWMgY29tcGxpYW50LCBidXQgd2UgZG9uJ3RcbiAqIG5lZWQgaXQgdG8gYmUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlczxUPihvYmo6IHtba2V5OiBzdHJpbmddOiBUfSk6IEFycmF5PFQ+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGsgaW4gb2JqKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG9ialtrXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qXG4gKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGtleXMgaW4gb25lIG9iamVjdCBhbmQgdGhlIGtleXNcbiAqIGluIGFub3RoZXIgb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIGtleXMgZGlmZmVyZW5jZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtleXNEaWZmZXJlbmNlPFMsIFQ+KG9iajoge1trZXk6IHN0cmluZ106IFN9LCBvdGhlcjoge1trZXk6IHN0cmluZ106IFR9KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IFtdO1xuICAgIGZvciAoY29uc3QgaSBpbiBvYmopIHtcbiAgICAgICAgaWYgKCEoaSBpbiBvdGhlcikpIHtcbiAgICAgICAgICAgIGRpZmZlcmVuY2UucHVzaChpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlmZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGRlc3RpbmF0aW9uIG9iamVjdCBhbmQgb3B0aW9uYWxseSBtYW55IHNvdXJjZSBvYmplY3RzLFxuICogY29weSBhbGwgcHJvcGVydGllcyBmcm9tIHRoZSBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZSBkZXN0aW5hdGlvbi5cbiAqIFRoZSBsYXN0IHNvdXJjZSBvYmplY3QgZ2l2ZW4gb3ZlcnJpZGVzIHByb3BlcnRpZXMgZnJvbSBwcmV2aW91c1xuICogc291cmNlIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGRlc3QgZGVzdGluYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0gc291cmNlcyBzb3VyY2VzIGZyb20gd2hpY2ggcHJvcGVydGllcyBhcmUgcHVsbGVkXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKGRlc3Q6IE9iamVjdCwgLi4uc291cmNlczogQXJyYXk8P09iamVjdD4pOiBPYmplY3Qge1xuICAgIGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrIGluIHNyYykge1xuICAgICAgICAgICAgZGVzdFtrXSA9IHNyY1trXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVzdDtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBvYmplY3QgYW5kIGEgbnVtYmVyIG9mIHByb3BlcnRpZXMgYXMgc3RyaW5ncywgcmV0dXJuIHZlcnNpb25cbiAqIG9mIHRoYXQgb2JqZWN0IHdpdGggb25seSB0aG9zZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSBzcmMgdGhlIG9iamVjdFxuICogQHBhcmFtIHByb3BlcnRpZXMgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgY2hvc2VuXG4gKiB0byBhcHBlYXIgb24gdGhlIHJlc3VsdGluZyBvYmplY3QuXG4gKiBAcmV0dXJucyBvYmplY3Qgd2l0aCBsaW1pdGVkIHByb3BlcnRpZXMuXG4gKiBAZXhhbXBsZVxuICogdmFyIGZvbyA9IHsgbmFtZTogJ0NoYXJsaWUnLCBhZ2U6IDEwIH07XG4gKiB2YXIganVzdE5hbWUgPSBwaWNrKGZvbywgWyduYW1lJ10pO1xuICogLy8ganVzdE5hbWUgPSB7IG5hbWU6ICdDaGFybGllJyB9XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGljayhzcmM6IE9iamVjdCwgcHJvcGVydGllczogQXJyYXk8c3RyaW5nPik6IE9iamVjdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGsgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICBpZiAoayBpbiBzcmMpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IHNyY1trXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5sZXQgaWQgPSAxO1xuXG4vKipcbiAqIFJldHVybiBhIHVuaXF1ZSBudW1lcmljIGlkLCBzdGFydGluZyBhdCAxIGFuZCBpbmNyZW1lbnRpbmcgd2l0aFxuICogZWFjaCBjYWxsLlxuICpcbiAqIEByZXR1cm5zIHVuaXF1ZSBudW1lcmljIGlkLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUlkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGlkKys7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgcmFuZG9tIFVVSUQgKHY0KS4gVGFrZW4gZnJvbTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vamVkLzk4Mjg4M1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHV1aWQoKTogc3RyaW5nIHtcbiAgICBmdW5jdGlvbiBiKGEpIHtcbiAgICAgICAgcmV0dXJuIGEgPyAoYSBeIE1hdGgucmFuZG9tKCkgKiAxNiA+PiBhIC8gNCkudG9TdHJpbmcoMTYpIDpcbiAgICAgICAgLy8kRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSB0aGUgaW1wbGllZCBhcnJheSBsaXRlcmFsIGNvbnZlcnNpb24gaGVyZVxuICAgICAgICAgICAgKFsxZTddICsgLVsxZTNdICsgLTRlMyArIC04ZTMgKyAtMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYik7XG4gICAgfVxuICAgIHJldHVybiBiKCk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBzdHJpbmcgdG8gbWF0Y2ggVVVJRCh2NCkgb2YgdGhlXG4gKiBmb3JtOiB4eHh4eHh4eC14eHh4LTR4eHgtWzg5YWJdeHh4LXh4eHh4eHh4eHh4eFxuICogQHBhcmFtIHN0ciBzdHJpbmcgdG8gdmFsaWRhdGUuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVVdWlkKHN0cjogP3N0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdHIgPyAvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVs0XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfSQvaS50ZXN0KHN0cikgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBtZW1iZXIgZnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncywgcmVwbGFjZSBhbGwgb2YgdGhlbVxuICogd2l0aCBib3VuZCB2ZXJzaW9ucyB0aGF0IHdpbGwgYWx3YXlzIHJlZmVyIHRvIGBjb250ZXh0YCBhcyBgdGhpc2AuIFRoaXNcbiAqIGlzIHVzZWZ1bCBmb3IgY2xhc3NlcyB3aGVyZSBvdGhlcndpc2UgZXZlbnQgYmluZGluZ3Mgd291bGQgcmVhc3NpZ25cbiAqIGB0aGlzYCB0byB0aGUgZXZlbnRlZCBvYmplY3Qgb3Igc29tZSBvdGhlciB2YWx1ZTogdGhpcyBsZXRzIHlvdSBlbnN1cmVcbiAqIHRoZSBgdGhpc2AgdmFsdWUgYWx3YXlzLlxuICpcbiAqIEBwYXJhbSBmbnMgbGlzdCBvZiBtZW1iZXIgZnVuY3Rpb24gbmFtZXNcbiAqIEBwYXJhbSBjb250ZXh0IHRoZSBjb250ZXh0IHZhbHVlXG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gTXlDbGFzcygpIHtcbiAqICAgYmluZEFsbChbJ29udGltZXInXSwgdGhpcyk7XG4gKiAgIHRoaXMubmFtZSA9ICdUb20nO1xuICogfVxuICogTXlDbGFzcy5wcm90b3R5cGUub250aW1lciA9IGZ1bmN0aW9uKCkge1xuICogICBhbGVydCh0aGlzLm5hbWUpO1xuICogfTtcbiAqIHZhciBteUNsYXNzID0gbmV3IE15Q2xhc3MoKTtcbiAqIHNldFRpbWVvdXQobXlDbGFzcy5vbnRpbWVyLCAxMDApO1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRBbGwoZm5zOiBBcnJheTxzdHJpbmc+LCBjb250ZXh0OiBPYmplY3QpOiB2b2lkIHtcbiAgICBmbnMuZm9yRWFjaCgoZm4pID0+IHtcbiAgICAgICAgaWYgKCFjb250ZXh0W2ZuXSkgeyByZXR1cm47IH1cbiAgICAgICAgY29udGV4dFtmbl0gPSBjb250ZXh0W2ZuXS5iaW5kKGNvbnRleHQpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHN0cmluZyBlbmRzIHdpdGggYSBwYXJ0aWN1bGFyIHN1YnN0cmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRzV2l0aChzdHJpbmc6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RyaW5nLmluZGV4T2Yoc3VmZml4LCBzdHJpbmcubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCkgIT09IC0xO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgYnkgbWFwcGluZyBhbGwgdGhlIHZhbHVlcyBvZiBhbiBleGlzdGluZyBvYmplY3Qgd2hpbGVcbiAqIHByZXNlcnZpbmcgdGhlaXIga2V5cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwT2JqZWN0KGlucHV0OiBPYmplY3QsIGl0ZXJhdG9yOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IE9iamVjdCB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBpdGVyYXRvci5jYWxsKGNvbnRleHQgfHwgdGhpcywgaW5wdXRba2V5XSwga2V5LCBpbnB1dCk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCBieSBmaWx0ZXJpbmcgb3V0IHZhbHVlcyBvZiBhbiBleGlzdGluZyBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlck9iamVjdChpbnB1dDogT2JqZWN0LCBpdGVyYXRvcjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QpOiBPYmplY3Qge1xuICAgIGNvbnN0IG91dHB1dCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGlucHV0KSB7XG4gICAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQgfHwgdGhpcywgaW5wdXRba2V5XSwga2V5LCBpbnB1dCkpIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gaW5wdXRba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuXG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9kZWVwX2VxdWFsJztcbmV4cG9ydCB7ZGVlcEVxdWFsfTtcblxuLyoqXG4gKiBEZWVwbHkgY2xvbmVzIHR3byBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZTxUPihpbnB1dDogVCk6IFQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICByZXR1cm4gaW5wdXQubWFwKGNsb25lKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuICgobWFwT2JqZWN0KGlucHV0LCBjbG9uZSk6IGFueSk6IFQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdHdvIGFycmF5cyBoYXZlIGF0IGxlYXN0IG9uZSBjb21tb24gZWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlzSW50ZXJzZWN0PFQ+KGE6IEFycmF5PFQ+LCBiOiBBcnJheTxUPik6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgYS5sZW5ndGg7IGwrKykge1xuICAgICAgICBpZiAoYi5pbmRleE9mKGFbbF0pID49IDApIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgYW5kIGVuc3VyZSBkdXBsaWNhdGUgd2FybmluZyBtZXNzYWdlc1xuICogYXJlIG5vdCBwcmludGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHdhcm5PbmNlSGlzdG9yeToge1trZXk6IHN0cmluZ106IGJvb2xlYW59ID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXJuT25jZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXdhcm5PbmNlSGlzdG9yeVttZXNzYWdlXSkge1xuICAgICAgICAvLyBjb25zb2xlIGlzbid0IGRlZmluZWQgaW4gc29tZSBXZWJXb3JrZXJzLCBzZWUgIzI1NThcbiAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiKSBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgIHdhcm5PbmNlSGlzdG9yeVttZXNzYWdlXSA9IHRydWU7XG4gICAgfVxufVxuXG4vKipcbiAqIEluZGljYXRlcyBpZiB0aGUgcHJvdmlkZWQgUG9pbnRzIGFyZSBpbiBhIGNvdW50ZXIgY2xvY2t3aXNlICh0cnVlKSBvciBjbG9ja3dpc2UgKGZhbHNlKSBvcmRlclxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB0cnVlIGZvciBhIGNvdW50ZXIgY2xvY2t3aXNlIHNldCBvZiBwb2ludHNcbiAqL1xuLy8gaHR0cDovL2JyeWNlYm9lLmNvbS8yMDA2LzEwLzIzL2xpbmUtc2VnbWVudC1pbnRlcnNlY3Rpb24tYWxnb3JpdGhtL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ291bnRlckNsb2Nrd2lzZShhOiBQb2ludCwgYjogUG9pbnQsIGM6IFBvaW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChjLnkgLSBhLnkpICogKGIueCAtIGEueCkgPiAoYi55IC0gYS55KSAqIChjLnggLSBhLngpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNpZ25lZCBhcmVhIGZvciB0aGUgcG9seWdvbiByaW5nLiAgUG9zdGl2ZSBhcmVhcyBhcmUgZXh0ZXJpb3IgcmluZ3MgYW5kXG4gKiBoYXZlIGEgY2xvY2t3aXNlIHdpbmRpbmcuICBOZWdhdGl2ZSBhcmVhcyBhcmUgaW50ZXJpb3IgcmluZ3MgYW5kIGhhdmUgYSBjb3VudGVyIGNsb2Nrd2lzZVxuICogb3JkZXJpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSByaW5nIEV4dGVyaW9yIG9yIGludGVyaW9yIHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVNpZ25lZEFyZWEocmluZzogQXJyYXk8UG9pbnQ+KTogbnVtYmVyIHtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmluZy5sZW5ndGgsIGogPSBsZW4gLSAxLCBwMSwgcDI7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgcDEgPSByaW5nW2ldO1xuICAgICAgICBwMiA9IHJpbmdbal07XG4gICAgICAgIHN1bSArPSAocDIueCAtIHAxLngpICogKHAxLnkgKyBwMi55KTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIGNsb3NlZCBwb2x5Z29ucywgZmlyc3QgKyBsYXN0IHBvaW50IGFyZSBlcXVhbFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gcG9pbnRzIGFycmF5IG9mIHBvaW50c1xuICogQHJldHVybiB0cnVlIGlmIHRoZSBwb2ludHMgYXJlIGEgY2xvc2VkIHBvbHlnb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xvc2VkUG9seWdvbihwb2ludHM6IEFycmF5PFBvaW50Pik6IGJvb2xlYW4ge1xuICAgIC8vIElmIGl0IGlzIDIgcG9pbnRzIHRoYXQgYXJlIHRoZSBzYW1lIHRoZW4gaXQgaXMgYSBwb2ludFxuICAgIC8vIElmIGl0IGlzIDMgcG9pbnRzIHdpdGggc3RhcnQgYW5kIGVuZCB0aGUgc2FtZSB0aGVuIGl0IGlzIGEgbGluZVxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcDEgPSBwb2ludHNbMF07XG4gICAgY29uc3QgcDIgPSBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKE1hdGguYWJzKHAxLnggLSBwMi54KSA+IDAgfHxcbiAgICAgICAgTWF0aC5hYnMocDEueSAtIHAyLnkpID4gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gcG9seWdvbiBzaW1wbGlmaWNhdGlvbiBjYW4gcHJvZHVjZSBwb2x5Z29ucyB3aXRoIHplcm8gYXJlYSBhbmQgbW9yZSB0aGFuIDMgcG9pbnRzXG4gICAgcmV0dXJuIE1hdGguYWJzKGNhbGN1bGF0ZVNpZ25lZEFyZWEocG9pbnRzKSkgPiAwLjAxO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHNwaGVyaWNhbCBjb29yZGluYXRlcyB0byBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzcGhlcmljYWwgU3BoZXJpY2FsIGNvb3JkaW5hdGVzLCBpbiBbcmFkaWFsLCBhemltdXRoYWwsIHBvbGFyXVxuICogQHJldHVybiBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgaW4gW3gsIHksIHpdXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNwaGVyaWNhbFRvQ2FydGVzaWFuKFtyLCBhemltdXRoYWwsIHBvbGFyXTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdKToge3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJ9IHtcbiAgICAvLyBXZSBhYnN0cmFjdCBcIm5vcnRoXCIvXCJ1cFwiIChjb21wYXNzLXdpc2UpIHRvIGJlIDDDgsKwIHdoZW4gcmVhbGx5IHRoaXMgaXMgOTDDgsKwICjDj8KALzIpOlxuICAgIC8vIGNvcnJlY3QgZm9yIHRoYXQgaGVyZVxuICAgIGF6aW11dGhhbCArPSA5MDtcblxuICAgIC8vIENvbnZlcnQgYXppbXV0aGFsIGFuZCBwb2xhciBhbmdsZXMgdG8gcmFkaWFuc1xuICAgIGF6aW11dGhhbCAqPSBNYXRoLlBJIC8gMTgwO1xuICAgIHBvbGFyICo9IE1hdGguUEkgLyAxODA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB4OiByICogTWF0aC5jb3MoYXppbXV0aGFsKSAqIE1hdGguc2luKHBvbGFyKSxcbiAgICAgICAgeTogciAqIE1hdGguc2luKGF6aW11dGhhbCkgKiBNYXRoLnNpbihwb2xhciksXG4gICAgICAgIHo6IHIgKiBNYXRoLmNvcyhwb2xhcilcbiAgICB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBkYXRhIGZyb20gJ0NhY2hlLUNvbnRyb2wnIGhlYWRlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBjYWNoZUNvbnRyb2wgVmFsdWUgb2YgJ0NhY2hlLUNvbnRyb2wnIGhlYWRlclxuICogQHJldHVybiBvYmplY3QgY29udGFpbmluZyBwYXJzZWQgaGVhZGVyIGluZm8uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2FjaGVDb250cm9sKGNhY2hlQ29udHJvbDogc3RyaW5nKTogT2JqZWN0IHtcbiAgICAvLyBUYWtlbiBmcm9tIFtXcmVja10oaHR0cHM6Ly9naXRodWIuY29tL2hhcGlqcy93cmVjaylcbiAgICBjb25zdCByZSA9IC8oPzpefCg/OlxccypcXCxcXHMqKSkoW15cXHgwMC1cXHgyMFxcKFxcKTw+QFxcLDtcXDpcXFxcXCJcXC9cXFtcXF1cXD9cXD1cXHtcXH1cXHg3Rl0rKSg/OlxcPSg/OihbXlxceDAwLVxceDIwXFwoXFwpPD5AXFwsO1xcOlxcXFxcIlxcL1xcW1xcXVxcP1xcPVxce1xcfVxceDdGXSspfCg/OlxcXCIoKD86W15cIlxcXFxdfFxcXFwuKSopXFxcIikpKT8vZztcblxuICAgIGNvbnN0IGhlYWRlciA9IHt9O1xuICAgIGNhY2hlQ29udHJvbC5yZXBsYWNlKHJlLCAoJDAsICQxLCAkMiwgJDMpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAkMiB8fCAkMztcbiAgICAgICAgaGVhZGVyWyQxXSA9IHZhbHVlID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHRydWU7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcblxuICAgIGlmIChoZWFkZXJbJ21heC1hZ2UnXSkge1xuICAgICAgICBjb25zdCBtYXhBZ2UgPSBwYXJzZUludChoZWFkZXJbJ21heC1hZ2UnXSwgMTApO1xuICAgICAgICBpZiAoaXNOYU4obWF4QWdlKSkgZGVsZXRlIGhlYWRlclsnbWF4LWFnZSddO1xuICAgICAgICBlbHNlIGhlYWRlclsnbWF4LWFnZSddID0gbWF4QWdlO1xuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9yYWdlQXZhaWxhYmxlKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB3aW5kb3dbdHlwZV07XG4gICAgICAgIHN0b3JhZ2Uuc2V0SXRlbSgnX21hcGJveF90ZXN0XycsIDEpO1xuICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oJ19tYXBib3hfdGVzdF8nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvd0Jhc2U2NC9CYXNlNjRfZW5jb2RpbmdfYW5kX2RlY29kaW5nI1RoZV9Vbmljb2RlX1Byb2JsZW1cbi8vVW5pY29kZSBjb21wbGlhbnQgYmFzZTY0IGVuY29kZXIgZm9yIHN0cmluZ3NcbmV4cG9ydCBmdW5jdGlvbiBiNjRFbmNvZGVVbmljb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKFxuICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLFxuICAgICAgICAgICAgKG1hdGNoLCBwMSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlcignMHgnICsgcDEpKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICApO1xufVxuXG4vLyBVbmljb2RlIGNvbXBsaWFudCBkZWNvZGVyIGZvciBiYXNlNjQtZW5jb2RlZCBzdHJpbmdzXG5leHBvcnQgZnVuY3Rpb24gYjY0RGVjb2RlVW5pY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2Ioc3RyKS5zcGxpdCgnJykubWFwKChjKSA9PiB7XG4gICAgICAgIHJldHVybiAnJScgKyAoJzAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfSkuam9pbignJykpO1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG5jb25zdCBub3cgPSB3aW5kb3cucGVyZm9ybWFuY2UgJiYgd2luZG93LnBlcmZvcm1hbmNlLm5vdyA/XG4gICAgd2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSkgOlxuICAgIERhdGUubm93LmJpbmQoRGF0ZSk7XG5cbmNvbnN0IHJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuY29uc3QgY2FuY2VsID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5cbmxldCBsaW5rRWw7XG5cbmxldCByZWR1Y2VkTW90aW9uUXVlcnk6IE1lZGlhUXVlcnlMaXN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGV4cG9ydGVkID0ge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgZnVuY3Rpb24gdGhhdCBvdXRwdXRzIG1pbGxpc2Vjb25kczogZWl0aGVyIHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICogb3IgYSBmYWxsYmFjayB0byBEYXRlLm5vdygpXG4gICAgICovXG4gICAgbm93LFxuXG4gICAgZnJhbWUoZm46ICgpID0+IHZvaWQpOiBDYW5jZWxhYmxlIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSByYWYoZm4pO1xuICAgICAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4gY2FuY2VsKGZyYW1lKX07XG4gICAgfSxcblxuICAgIGdldEltYWdlRGF0YShpbWc6IENhbnZhc0ltYWdlU291cmNlLCBwYWRkaW5nPzogbnVtYmVyID0gMCk6IEltYWdlRGF0YSB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dCcpO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0SW1hZ2VEYXRhKC1wYWRkaW5nLCAtcGFkZGluZywgaW1nLndpZHRoICsgMiAqIHBhZGRpbmcsIGltZy5oZWlnaHQgKyAyICogcGFkZGluZyk7XG4gICAgfSxcblxuICAgIHJlc29sdmVVUkwocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghbGlua0VsKSBsaW5rRWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rRWwuaHJlZiA9IHBhdGg7XG4gICAgICAgIHJldHVybiBsaW5rRWwuaHJlZjtcbiAgICB9LFxuXG4gICAgaGFyZHdhcmVDb25jdXJyZW5jeTogd2luZG93Lm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5IHx8IDQsXG5cbiAgICBnZXQgZGV2aWNlUGl4ZWxSYXRpbygpIHsgcmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOyB9LFxuICAgIGdldCBwcmVmZXJzUmVkdWNlZE1vdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF3aW5kb3cubWF0Y2hNZWRpYSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvL0xhemlseSBpbml0aWFsaXplIG1lZGlhIHF1ZXJ5XG4gICAgICAgIGlmIChyZWR1Y2VkTW90aW9uUXVlcnkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVkdWNlZE1vdGlvblF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZHVjZWRNb3Rpb25RdWVyeS5tYXRjaGVzO1xuICAgIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcbiIsIi8vIEBmbG93IHN0cmljdFxuXG50eXBlIENvbmZpZyA9IHt8XG4gIEFQSV9VUkw6IHN0cmluZyxcbiAgRVZFTlRTX1VSTDogP3N0cmluZyxcbiAgRkVFREJBQ0tfVVJMOiBzdHJpbmcsXG4gIFJFUVVJUkVfQUNDRVNTX1RPS0VOOiBib29sZWFuLFxuICBBQ0NFU1NfVE9LRU46ID9zdHJpbmcsXG4gIE1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUzogbnVtYmVyXG58fTtcblxuY29uc3QgY29uZmlnOiBDb25maWcgPSB7XG4gICAgQVBJX1VSTDogJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20nLFxuICAgIGdldCBFVkVOVFNfVVJMKCkge1xuICAgICAgICBpZiAoIXRoaXMuQVBJX1VSTCkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICBpZiAodGhpcy5BUElfVVJMLmluZGV4T2YoJ2h0dHBzOi8vYXBpLm1hcGJveC5jbicpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vZXZlbnRzLm1hcGJveC5jbi9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQVBJX1VSTC5pbmRleE9mKCdodHRwczovL2FwaS5tYXBib3guY29tJykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9ldmVudHMubWFwYm94LmNvbS9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIEZFRURCQUNLX1VSTDogJ2h0dHBzOi8vYXBwcy5tYXBib3guY29tL2ZlZWRiYWNrJyxcbiAgICBSRVFVSVJFX0FDQ0VTU19UT0tFTjogdHJ1ZSxcbiAgICBBQ0NFU1NfVE9LRU46IG51bGwsXG4gICAgTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOiAxNlxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29uZmlnO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuXG5jb25zdCBleHBvcnRlZCA9IHtcbiAgICBzdXBwb3J0ZWQ6IGZhbHNlLFxuICAgIHRlc3RTdXBwb3J0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcblxubGV0IGdsRm9yVGVzdGluZztcbmxldCB3ZWJwQ2hlY2tDb21wbGV0ZSA9IGZhbHNlO1xubGV0IHdlYnBJbWdUZXN0O1xubGV0IHdlYnBJbWdUZXN0T25sb2FkQ29tcGxldGUgPSBmYWxzZTtcblxuaWYgKHdpbmRvdy5kb2N1bWVudCkge1xuICAgIHdlYnBJbWdUZXN0ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHdlYnBJbWdUZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoZ2xGb3JUZXN0aW5nKSB0ZXN0V2VicFRleHR1cmVVcGxvYWQoZ2xGb3JUZXN0aW5nKTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICAgICAgd2VicEltZ1Rlc3RPbmxvYWRDb21wbGV0ZSA9IHRydWU7XG4gICAgfTtcbiAgICB3ZWJwSW1nVGVzdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHdlYnBDaGVja0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICB9O1xuICAgIHdlYnBJbWdUZXN0LnNyYyA9ICdkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdSaDRBQUFCWFJVSlFWbEE0VEJFQUFBQXZBUUFBQUFmUS8vNzN2LytCaU9oL0FBQT0nO1xufVxuXG5mdW5jdGlvbiB0ZXN0U3VwcG9ydChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgaWYgKHdlYnBDaGVja0NvbXBsZXRlIHx8ICF3ZWJwSW1nVGVzdCkgcmV0dXJuO1xuXG4gICAgLy8gSFRNTEltYWdlRWxlbWVudC5jb21wbGV0ZSBpcyBzZXQgd2hlbiBhbiBpbWFnZSBpcyBkb25lIGxvYWRpbmcgaXQncyBzb3VyY2VcbiAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGxvYWQgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxuICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIGFuIGVycm9yIHRvIHNldCBIVE1MSW1hZ2VFbGVtZW50LmNvbXBsZXRlIHRvIHRydWUgd2hpY2ggd291bGQgdHJpZ2dlclxuICAgIC8vIHRlc3RXZWJwVGV4dHVyZVVwbG9hZCBhbmQgbWlzdGFrZW5seSBzZXQgZXhwb3J0ZWQuc3VwcG9ydGVkIHRvIHRydWUgaW4gYnJvd3NlcnMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCB3ZWJwXG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugc2V0IGEgZmxhZyBpbiB0aGUgaW1hZ2UncyBvbmxvYWQgaGFuZGxlciBhbmQgb25seSBjYWxsIHRlc3RXZWJwVGV4dHVyZVVwbG9hZFxuICAgIC8vIGFmdGVyIGEgc3VjY2Vzc2Z1bCBpbWFnZSBsb2FkIGV2ZW50LlxuICAgIGlmICh3ZWJwSW1nVGVzdE9ubG9hZENvbXBsZXRlKSB7XG4gICAgICAgIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gZ2w7XG5cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgLy8gRWRnZSAxOCBzdXBwb3J0cyBXZWJQIGJ1dCBub3QgdXBsb2FkaW5nIGEgV2ViUCBpbWFnZSB0byBhIGdsIHRleHR1cmVcbiAgICAvLyBUZXN0IHN1cHBvcnQgZm9yIHRoaXMgYmVmb3JlIGFsbG93aW5nIFdlYlAgaW1hZ2VzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83NjcxXG4gICAgY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2VicEltZ1Rlc3QpO1xuXG4gICAgICAgIC8vIFRoZSBlcnJvciBkb2VzIG5vdCBnZXQgdHJpZ2dlcmVkIGluIEVkZ2UgaWYgdGhlIGNvbnRleHQgaXMgbG9zdFxuICAgICAgICBpZiAoZ2wuaXNDb250ZXh0TG9zdCgpKSByZXR1cm47XG5cbiAgICAgICAgZXhwb3J0ZWQuc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIENhdGNoIFwiVW5zcGVjaWZpZWQgRXJyb3IuXCIgaW4gRWRnZSAxOC5cbiAgICB9XG5cbiAgICBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgd2VicENoZWNrQ29tcGxldGUgPSB0cnVlO1xufVxuIiwiLy8gQGZsb3dcblxuLyoqKioqIFNUQVJUIFdBUk5JTkcgLSBJRiBZT1UgVVNFIFRISVMgQ09ERSBXSVRIIE1BUEJPWCBNQVBQSU5HIEFQSVMsIFJFTU9WQUwgT1JcbiogTU9ESUZJQ0FUSU9OIE9GIFRIRSBGT0xMT1dJTkcgQ09ERSBWSU9MQVRFUyBUSEUgTUFQQk9YIFRFUk1TIE9GIFNFUlZJQ0UgICoqKioqKlxuKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdXNlZCB0byBhY2Nlc3MgTWFwYm94J3MgTWFwcGluZyBBUElzLiBSZW1vdmFsIG9yIG1vZGlmaWNhdGlvblxuKiBvZiB0aGlzIGNvZGUgd2hlbiB1c2VkIHdpdGggTWFwYm94J3MgTWFwcGluZyBBUElzIGNhbiByZXN1bHQgaW4gaGlnaGVyIGZlZXMgYW5kL29yXG4qIHRlcm1pbmF0aW9uIG9mIHlvdXIgYWNjb3VudCB3aXRoIE1hcGJveC5cbipcbiogVW5kZXIgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlLCB5b3UgbWF5IG5vdCB1c2UgdGhpcyBjb2RlIHRvIGFjY2VzcyBNYXBib3hcbiogTWFwcGluZyBBUElzIG90aGVyIHRoYW4gdGhyb3VnaCBNYXBib3ggU0RLcy5cbipcbiogVGhlIE1hcHBpbmcgQVBJcyBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL2RvY3MubWFwYm94LmNvbS9hcGkvbWFwcy8jbWFwc1xuKiBhbmQgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlIGFyZSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubWFwYm94LmNvbS90b3MvXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbnR5cGUgU2t1VG9rZW5PYmplY3QgPSB7fFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdG9rZW5FeHBpcmVzQXQ6IG51bWJlclxufH07XG5cbmNvbnN0IFNLVV9JRCA9ICcwMSc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNrdVRva2VuKCk6IFNrdVRva2VuT2JqZWN0IHtcbiAgICAvLyBTS1VfSUQgYW5kIFRPS0VOX1ZFUlNJT04gYXJlIHNwZWNpZmllZCBieSBhbiBpbnRlcm5hbCBzY2hlbWEgYW5kIHNob3VsZCBub3QgY2hhbmdlXG4gICAgY29uc3QgVE9LRU5fVkVSU0lPTiA9ICcxJztcbiAgICBjb25zdCBiYXNlNjJjaGFycyA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XG4gICAgLy8gc2Vzc2lvblJhbmRvbWl6ZXIgaXMgYSByYW5kb21pemVkIDEwLWRpZ2l0IGJhc2UtNjIgbnVtYmVyXG4gICAgbGV0IHNlc3Npb25SYW5kb21pemVyID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHNlc3Npb25SYW5kb21pemVyICs9IGJhc2U2MmNoYXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDYyKV07XG4gICAgfVxuICAgIGNvbnN0IGV4cGlyYXRpb24gPSAxMiAqIDYwICogNjAgKiAxMDAwOyAvLyAxMiBob3Vyc1xuICAgIGNvbnN0IHRva2VuID0gW1RPS0VOX1ZFUlNJT04sIFNLVV9JRCwgc2Vzc2lvblJhbmRvbWl6ZXJdLmpvaW4oJycpO1xuICAgIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIGV4cGlyYXRpb247XG5cbiAgICByZXR1cm4ge3Rva2VuLCB0b2tlbkV4cGlyZXNBdH07XG59XG5cbmV4cG9ydCB7Y3JlYXRlU2t1VG9rZW4sIFNLVV9JRH07XG5cbi8qKioqKiBFTkQgV0FSTklORyAtIFJFTU9WQUwgT1IgTU9ESUZJQ0FUSU9OIE9GIFRIRVxuUFJFQ0VESU5HIENPREUgVklPTEFURVMgVEhFIE1BUEJPWCBURVJNUyBPRiBTRVJWSUNFICAqKioqKiovXG4iLCIvLyBAZmxvd1xuXG4vKioqKiogU1RBUlQgV0FSTklORyAtIElGIFlPVSBVU0UgVEhJUyBDT0RFIFdJVEggTUFQQk9YIE1BUFBJTkcgQVBJUywgUkVNT1ZBTCBPUlxuKiBNT0RJRklDQVRJT04gT0YgVEhFIEZPTExPV0lORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqXG4qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB1c2VkIHRvIGFjY2VzcyBNYXBib3gncyBNYXBwaW5nIEFQSXMuIFJlbW92YWwgb3IgbW9kaWZpY2F0aW9uXG4qIG9mIHRoaXMgY29kZSB3aGVuIHVzZWQgd2l0aCBNYXBib3gncyBNYXBwaW5nIEFQSXMgY2FuIHJlc3VsdCBpbiBoaWdoZXIgZmVlcyBhbmQvb3JcbiogdGVybWluYXRpb24gb2YgeW91ciBhY2NvdW50IHdpdGggTWFwYm94LlxuKlxuKiBVbmRlciB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UsIHlvdSBtYXkgbm90IHVzZSB0aGlzIGNvZGUgdG8gYWNjZXNzIE1hcGJveFxuKiBNYXBwaW5nIEFQSXMgb3RoZXIgdGhhbiB0aHJvdWdoIE1hcGJveCBTREtzLlxuKlxuKiBUaGUgTWFwcGluZyBBUElzIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2FwaS9tYXBzLyNtYXBzXG4qIGFuZCB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UgYXJlIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5tYXBib3guY29tL3Rvcy9cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4vYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4vd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IHtjcmVhdGVTa3VUb2tlbiwgU0tVX0lEfSBmcm9tICcuL3NrdV90b2tlbic7XG5pbXBvcnQge3ZlcnNpb24gYXMgc2RrVmVyc2lvbn0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7dXVpZCwgdmFsaWRhdGVVdWlkLCBzdG9yYWdlQXZhaWxhYmxlLCBiNjREZWNvZGVVbmljb2RlLCBiNjRFbmNvZGVVbmljb2RlLCB3YXJuT25jZSwgZXh0ZW5kfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHtwb3N0RGF0YSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuL2FqYXgnO1xuXG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnN9IGZyb20gJy4vYWpheCc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7VGlsZUpTT059IGZyb20gJy4uL3R5cGVzL3RpbGVqc29uJztcblxudHlwZSBSZXNvdXJjZVR5cGVFbnVtID0gJEtleXM8dHlwZW9mIFJlc291cmNlVHlwZT47XG5leHBvcnQgdHlwZSBSZXF1ZXN0VHJhbnNmb3JtRnVuY3Rpb24gPSAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IFJlc291cmNlVHlwZUVudW0pID0+IFJlcXVlc3RQYXJhbWV0ZXJzO1xuXG50eXBlIFVybE9iamVjdCA9IHt8XG4gICAgcHJvdG9jb2w6IHN0cmluZyxcbiAgICBhdXRob3JpdHk6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBBcnJheTxzdHJpbmc+XG58fTtcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RNYW5hZ2VyIHtcbiAgICBfc2t1VG9rZW46IHN0cmluZztcbiAgICBfc2t1VG9rZW5FeHBpcmVzQXQ6IG51bWJlcjtcbiAgICBfdHJhbnNmb3JtUmVxdWVzdEZuOiA/UmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9uO1xuICAgIF9jdXN0b21BY2Nlc3NUb2tlbjogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybVJlcXVlc3RGbj86IFJlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbiwgY3VzdG9tQWNjZXNzVG9rZW4/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuID0gdHJhbnNmb3JtUmVxdWVzdEZuO1xuICAgICAgICB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiA9IGN1c3RvbUFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLl9jcmVhdGVTa3VUb2tlbigpO1xuICAgIH1cblxuICAgIF9jcmVhdGVTa3VUb2tlbigpIHtcbiAgICAgICAgY29uc3Qgc2t1VG9rZW4gPSBjcmVhdGVTa3VUb2tlbigpO1xuICAgICAgICB0aGlzLl9za3VUb2tlbiA9IHNrdVRva2VuLnRva2VuO1xuICAgICAgICB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdCA9IHNrdVRva2VuLnRva2VuRXhwaXJlc0F0O1xuICAgIH1cblxuICAgIF9pc1NrdVRva2VuRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgPiB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdDtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1SZXF1ZXN0KHVybDogc3RyaW5nLCB0eXBlOiBSZXNvdXJjZVR5cGVFbnVtKSB7XG4gICAgICAgIGlmICh0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4odXJsLCB0eXBlKSB8fCB7dXJsfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7dXJsfTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTdHlsZVVSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWtlQVBJVVJMKHVybE9iamVjdCwgdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW4gfHwgYWNjZXNzVG9rZW4pO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZUdseXBoc1VSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9mb250cy92MSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VBUElVUkwodXJsT2JqZWN0LCB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBhY2Nlc3NUb2tlbik7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplU291cmNlVVJMKHVybDogc3RyaW5nLCBhY2Nlc3NUb2tlbj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXNNYXBib3hVUkwodXJsKSkgcmV0dXJuIHVybDtcbiAgICAgICAgY29uc3QgdXJsT2JqZWN0ID0gcGFyc2VVcmwodXJsKTtcbiAgICAgICAgdXJsT2JqZWN0LnBhdGggPSBgL3Y0LyR7dXJsT2JqZWN0LmF1dGhvcml0eX0uanNvbmA7XG4gICAgICAgIC8vIFRpbGVKU09OIHJlcXVlc3RzIG5lZWQgYSBzZWN1cmUgZmxhZyBhcHBlbmRlZCB0byB0aGVpciBVUkxzIHNvXG4gICAgICAgIC8vIHRoYXQgdGhlIHNlcnZlciBrbm93cyB0byBzZW5kIFNTTC1pZmllZCByZXNvdXJjZSByZWZlcmVuY2VzLlxuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTcHJpdGVVUkwodXJsOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB1cmxPYmplY3QgPSBwYXJzZVVybCh1cmwpO1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHtcbiAgICAgICAgICAgIHVybE9iamVjdC5wYXRoICs9IGAke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFVybCh1cmxPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofS9zcHJpdGUke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVUaWxlVVJMKHRpbGVVUkw6IHN0cmluZywgc291cmNlVVJMPzogP3N0cmluZywgdGlsZVNpemU/OiA/bnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzU2t1VG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNrdVRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNvdXJjZVVSTCB8fCAhaXNNYXBib3hVUkwoc291cmNlVVJMKSkgcmV0dXJuIHRpbGVVUkw7XG5cbiAgICAgICAgY29uc3QgdXJsT2JqZWN0ID0gcGFyc2VVcmwodGlsZVVSTCk7XG4gICAgICAgIGNvbnN0IGltYWdlRXh0ZW5zaW9uUmUgPSAvKFxcLihwbmd8anBnKVxcZCopKD89JCkvO1xuICAgICAgICBjb25zdCB0aWxlVVJMQVBJUHJlZml4UmUgPSAvXi4rXFwvdjRcXC8vO1xuXG4gICAgICAgIC8vIFRoZSB2NCBtYXBib3ggdGlsZSBBUEkgc3VwcG9ydHMgNTEyeDUxMiBpbWFnZSB0aWxlcyBvbmx5IHdoZW4gQDJ4XG4gICAgICAgIC8vIGlzIGFwcGVuZGVkIHRvIHRoZSB0aWxlIFVSTC4gSWYgYHRpbGVTaXplOiA1MTJgIGlzIHNwZWNpZmllZCBmb3JcbiAgICAgICAgLy8gYSBNYXBib3ggcmFzdGVyIHNvdXJjZSBmb3JjZSB0aGUgQDJ4IHN1ZmZpeCBldmVuIGlmIGEgbm9uIGhpZHBpIGRldmljZS5cbiAgICAgICAgY29uc3Qgc3VmZml4ID0gYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvID49IDIgfHwgdGlsZVNpemUgPT09IDUxMiA/ICdAMngnIDogJyc7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHdlYnBTdXBwb3J0ZWQuc3VwcG9ydGVkID8gJy53ZWJwJyA6ICckMSc7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gdXJsT2JqZWN0LnBhdGgucmVwbGFjZShpbWFnZUV4dGVuc2lvblJlLCBgJHtzdWZmaXh9JHtleHRlbnNpb259YCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gdXJsT2JqZWN0LnBhdGgucmVwbGFjZSh0aWxlVVJMQVBJUHJlZml4UmUsICcvJyk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC92NCR7dXJsT2JqZWN0LnBhdGh9YDtcblxuICAgICAgICBpZiAoY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOICYmIChjb25maWcuQUNDRVNTX1RPS0VOIHx8IHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuKSAmJiB0aGlzLl9za3VUb2tlbikge1xuICAgICAgICAgICAgdXJsT2JqZWN0LnBhcmFtcy5wdXNoKGBza3U9JHt0aGlzLl9za3VUb2tlbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9tYWtlQVBJVVJMKHVybE9iamVjdCwgdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cblxuICAgIGNhbm9uaWNhbGl6ZVRpbGVVUkwodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFwiL3Y0L1wiO1xuICAgICAgICAvLyBtYXRjaGVzIGFueSBmaWxlIGV4dGVuc2lvbiBzcGVjaWZpZWQgYnkgYSBkb3QgYW5kIG9uZSBvciBtb3JlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvblJlID0gL1xcLltcXHddKyQvO1xuXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggYSB2YWxpZCBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgIC8vIEhhcyB0byBiZWdpbiB3aXRoIC92NC8sIHdpdGggYSB2YWxpZCBmaWxlbmFtZSArIGV4dGVuc2lvblxuICAgICAgICBpZiAoIXVybE9iamVjdC5wYXRoLm1hdGNoKC8oXlxcL3Y0XFwvKS8pIHx8ICF1cmxPYmplY3QucGF0aC5tYXRjaChleHRlbnNpb25SZSkpIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIHByb3BlciBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlYXNzZW1ibGUgdGhlIGNhbm9uaWNhbCBVUkwgZnJvbSB0aGUgcGFydHMgd2UndmUgcGFyc2VkIGJlZm9yZS5cbiAgICAgICAgbGV0IHJlc3VsdCA9IFwibWFwYm94Oi8vdGlsZXMvXCI7XG4gICAgICAgIHJlc3VsdCArPSAgdXJsT2JqZWN0LnBhdGgucmVwbGFjZSh2ZXJzaW9uLCAnJyk7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBxdWVyeSBzdHJpbmcsIG1pbnVzIHRoZSBhY2Nlc3MgdG9rZW4gcGFyYW1ldGVyLlxuICAgICAgICBjb25zdCBwYXJhbXMgPSB1cmxPYmplY3QucGFyYW1zLmZpbHRlcihwID0+ICFwLm1hdGNoKC9eYWNjZXNzX3Rva2VuPS8pKTtcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGgpIHJlc3VsdCArPSBgPyR7cGFyYW1zLmpvaW4oJyYnKX1gO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNhbm9uaWNhbGl6ZVRpbGVzZXQodGlsZUpTT046IFRpbGVKU09OLCBzb3VyY2VVUkw6IHN0cmluZykge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHNvdXJjZVVSTCkpIHJldHVybiB0aWxlSlNPTi50aWxlcyB8fCBbXTtcbiAgICAgICAgY29uc3QgY2Fub25pY2FsID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdXJsIG9mIHRpbGVKU09OLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5vbmljYWxVcmwgPSB0aGlzLmNhbm9uaWNhbGl6ZVRpbGVVUkwodXJsKTtcbiAgICAgICAgICAgIGNhbm9uaWNhbC5wdXNoKGNhbm9uaWNhbFVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbDtcbiAgICB9XG5cbiAgICBfbWFrZUFQSVVSTCh1cmxPYmplY3Q6IFVybE9iamVjdCwgYWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB2b2lkKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaGVscCA9ICdTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzJztcbiAgICAgICAgY29uc3QgYXBpVXJsT2JqZWN0ID0gcGFyc2VVcmwoY29uZmlnLkFQSV9VUkwpO1xuICAgICAgICB1cmxPYmplY3QucHJvdG9jb2wgPSBhcGlVcmxPYmplY3QucHJvdG9jb2w7XG4gICAgICAgIHVybE9iamVjdC5hdXRob3JpdHkgPSBhcGlVcmxPYmplY3QuYXV0aG9yaXR5O1xuXG4gICAgICAgIGlmIChhcGlVcmxPYmplY3QucGF0aCAhPT0gJy8nKSB7XG4gICAgICAgICAgICB1cmxPYmplY3QucGF0aCA9IGAke2FwaVVybE9iamVjdC5wYXRofSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOKSByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG5cbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhY2Nlc3NUb2tlbiB8fCBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbiBBUEkgYWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkIHRvIHVzZSBNYXBib3ggR0wuICR7aGVscH1gKTtcbiAgICAgICAgaWYgKGFjY2Vzc1Rva2VuWzBdID09PSAncycpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzZSBhIHB1YmxpYyBhY2Nlc3MgdG9rZW4gKHBrLiopIHdpdGggTWFwYm94IEdMLCBub3QgYSBzZWNyZXQgYWNjZXNzIHRva2VuIChzay4qKS4gJHtoZWxwfWApO1xuXG4gICAgICAgIHVybE9iamVjdC5wYXJhbXMgPSB1cmxPYmplY3QucGFyYW1zLmZpbHRlcigoZCkgPT4gZC5pbmRleE9mKCdhY2Nlc3NfdG9rZW4nKSA9PT0gLTEpO1xuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goYGFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApO1xuICAgICAgICByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc01hcGJveFVSTCh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB1cmwuaW5kZXhPZignbWFwYm94OicpID09PSAwO1xufVxuXG5jb25zdCBtYXBib3hIVFRQVVJMUmUgPSAvXigoaHR0cHM/Oik/XFwvXFwvKT8oW15cXC9dK1xcLik/bWFwYm94XFwuYyhufG9tKShcXC98XFw/fCQpL2k7XG5mdW5jdGlvbiBpc01hcGJveEhUVFBVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWFwYm94SFRUUFVSTFJlLnRlc3QodXJsKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2FjaGVEZWZlYXRpbmdTa3UodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3NrdT0nKSA+IDAgJiYgaXNNYXBib3hIVFRQVVJMKHVybCk7XG59XG5cbmNvbnN0IHVybFJlID0gL14oXFx3Kyk6XFwvXFwvKFteLz9dKikoXFwvW14/XSspP1xcPz8oLispPy87XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHVybDogc3RyaW5nKTogVXJsT2JqZWN0IHtcbiAgICBjb25zdCBwYXJ0cyA9IHVybC5tYXRjaCh1cmxSZSk7XG4gICAgaWYgKCFwYXJ0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBVUkwgb2JqZWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sOiBwYXJ0c1sxXSxcbiAgICAgICAgYXV0aG9yaXR5OiBwYXJ0c1syXSxcbiAgICAgICAgcGF0aDogcGFydHNbM10gfHwgJy8nLFxuICAgICAgICBwYXJhbXM6IHBhcnRzWzRdID8gcGFydHNbNF0uc3BsaXQoJyYnKSA6IFtdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VXJsKG9iajogVXJsT2JqZWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBvYmoucGFyYW1zLmxlbmd0aCA/IGA/JHtvYmoucGFyYW1zLmpvaW4oJyYnKX1gIDogJyc7XG4gICAgcmV0dXJuIGAke29iai5wcm90b2NvbH06Ly8ke29iai5hdXRob3JpdHl9JHtvYmoucGF0aH0ke3BhcmFtc31gO1xufVxuXG5leHBvcnQge2lzTWFwYm94VVJMLCBpc01hcGJveEhUVFBVUkwsIGhhc0NhY2hlRGVmZWF0aW5nU2t1fTtcblxuY29uc3QgdGVsZW1FdmVudEtleSA9ICdtYXBib3guZXZlbnREYXRhJztcblxuZnVuY3Rpb24gcGFyc2VBY2Nlc3NUb2tlbihhY2Nlc3NUb2tlbjogP3N0cmluZykge1xuICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBhY2Nlc3NUb2tlbi5zcGxpdCgnLicpO1xuICAgIGlmICghcGFydHMgfHwgcGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0gSlNPTi5wYXJzZShiNjREZWNvZGVVbmljb2RlKHBhcnRzWzFdKSk7XG4gICAgICAgIHJldHVybiBqc29uRGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxudHlwZSBUZWxlbWV0cnlFdmVudFR5cGUgPSAnYXBwVXNlclR1cm5zdGlsZScgfCAnbWFwLmxvYWQnO1xuXG5jbGFzcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgZXZlbnREYXRhOiBhbnk7XG4gICAgYW5vbklkOiA/c3RyaW5nO1xuICAgIHF1ZXVlOiBBcnJheTxhbnk+O1xuICAgIHR5cGU6IFRlbGVtZXRyeUV2ZW50VHlwZTtcbiAgICBwZW5kaW5nUmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgX2N1c3RvbUFjY2Vzc1Rva2VuOiA/c3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVGVsZW1ldHJ5RXZlbnRUeXBlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYW5vbklkID0gbnVsbDtcbiAgICAgICAgdGhpcy5ldmVudERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTdG9yYWdlS2V5KGRvbWFpbjogP3N0cmluZykge1xuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBsZXQgdSA9ICcnO1xuICAgICAgICBpZiAodG9rZW5EYXRhICYmIHRva2VuRGF0YVsndSddKSB7XG4gICAgICAgICAgICB1ID0gYjY0RW5jb2RlVW5pY29kZSh0b2tlbkRhdGFbJ3UnXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1ID0gY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9tYWluID9cbiAgICAgICAgICAgIGAke3RlbGVtRXZlbnRLZXl9LiR7ZG9tYWlufToke3V9YCA6XG4gICAgICAgICAgICBgJHt0ZWxlbUV2ZW50S2V5fToke3V9YDtcbiAgICB9XG5cbiAgICBmZXRjaEV2ZW50RGF0YSgpIHtcbiAgICAgICAgY29uc3QgaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUgPSBzdG9yYWdlQXZhaWxhYmxlKCdsb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IHRoaXMuZ2V0U3RvcmFnZUtleSgpO1xuICAgICAgICBjb25zdCB1dWlkS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCd1dWlkJyk7XG5cbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odXVpZEtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHV1aWQpIHRoaXMuYW5vbklkID0gdXVpZDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnVW5hYmxlIHRvIHJlYWQgZnJvbSBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVFdmVudERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlID0gc3RvcmFnZUF2YWlsYWJsZSgnbG9jYWxTdG9yYWdlJyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSAgdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG4gICAgICAgIGNvbnN0IHV1aWRLZXkgPSB0aGlzLmdldFN0b3JhZ2VLZXkoJ3V1aWQnKTtcbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh1dWlkS2V5LCB0aGlzLmFub25JZCk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXZlbnREYXRhKS5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5ldmVudERhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoJ1VuYWJsZSB0byB3cml0ZSB0byBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKF86ID9zdHJpbmcpIHt9XG5cbiAgICAvKlxuICAgICogSWYgYW55IGV2ZW50IGRhdGEgc2hvdWxkIGJlIHBlcnNpc3RlZCBhZnRlciB0aGUgUE9TVCByZXF1ZXN0LCB0aGUgY2FsbGJhY2sgc2hvdWxkIG1vZGlmeSBldmVudERhdGFgXG4gICAgKiB0byB0aGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHNhdmVkLiBGb3IgdGhpcyByZWFzb24sIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBwcmlvciB0byB0aGUgY2FsbFxuICAgICogdG8gVGVsZW1ldHJ5RXZlbnQjc2F2ZURhdGFcbiAgICAqL1xuICAgIHBvc3RFdmVudCh0aW1lc3RhbXA6IG51bWJlciwgYWRkaXRpb25hbFBheWxvYWQ6IHtbc3RyaW5nXTogYW55fSwgY2FsbGJhY2s6IChlcnI6ID9FcnJvcikgPT4gdm9pZCwgY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICghY29uZmlnLkVWRU5UU19VUkwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXZlbnRzVXJsT2JqZWN0OiBVcmxPYmplY3QgPSBwYXJzZVVybChjb25maWcuRVZFTlRTX1VSTCk7XG4gICAgICAgIGV2ZW50c1VybE9iamVjdC5wYXJhbXMucHVzaChgYWNjZXNzX3Rva2VuPSR7Y3VzdG9tQWNjZXNzVG9rZW4gfHwgY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJ31gKTtcblxuICAgICAgICBjb25zdCBwYXlsb2FkOiBPYmplY3QgPSB7XG4gICAgICAgICAgICBldmVudDogdGhpcy50eXBlLFxuICAgICAgICAgICAgY3JlYXRlZDogbmV3IERhdGUodGltZXN0YW1wKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgc2RrSWRlbnRpZmllcjogJ21hcGJveC1nbC1qcycsXG4gICAgICAgICAgICBzZGtWZXJzaW9uLFxuICAgICAgICAgICAgc2t1SWQ6IFNLVV9JRCxcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy5hbm9uSWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmaW5hbFBheWxvYWQgPSBhZGRpdGlvbmFsUGF5bG9hZCA/IGV4dGVuZChwYXlsb2FkLCBhZGRpdGlvbmFsUGF5bG9hZCkgOiBwYXlsb2FkO1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBSZXF1ZXN0UGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIHVybDogZm9ybWF0VXJsKGV2ZW50c1VybE9iamVjdCksXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyAvL1NraXAgdGhlIHByZS1mbGlnaHQgT1BUSU9OUyByZXF1ZXN0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoW2ZpbmFsUGF5bG9hZF0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IHBvc3REYXRhKHJlcXVlc3QsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNhdmVFdmVudERhdGEoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcXVldWVSZXF1ZXN0KGV2ZW50OiBudW1iZXIgfCB7aWQ6IG51bWJlciwgdGltZXN0YW1wOiBudW1iZXJ9LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hcExvYWRFdmVudCBleHRlbmRzIFRlbGVtZXRyeUV2ZW50IHtcbiAgICArc3VjY2Vzczoge1tudW1iZXJdOiBib29sZWFufTtcbiAgICBza3VUb2tlbjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdtYXAubG9hZCcpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB7fTtcbiAgICAgICAgdGhpcy5za3VUb2tlbiA9ICcnO1xuICAgIH1cblxuICAgIHBvc3RNYXBMb2FkRXZlbnQodGlsZVVybHM6IEFycmF5PHN0cmluZz4sIG1hcElkOiBudW1iZXIsIHNrdVRva2VuOiBzdHJpbmcsIGN1c3RvbUFjY2Vzc1Rva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIHRoaXMuc2t1VG9rZW4gPSBza3VUb2tlbjtcblxuICAgICAgICBpZiAoY29uZmlnLkVWRU5UU19VUkwgJiZcbiAgICAgICAgICAgIGN1c3RvbUFjY2Vzc1Rva2VuIHx8IGNvbmZpZy5BQ0NFU1NfVE9LRU4gJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGlsZVVybHMpICYmXG4gICAgICAgICAgICB0aWxlVXJscy5zb21lKHVybCA9PiBpc01hcGJveFVSTCh1cmwpIHx8IGlzTWFwYm94SFRUUFVSTCh1cmwpKSkge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZVJlcXVlc3Qoe2lkOiBtYXBJZCwgdGltZXN0YW1wOiBEYXRlLm5vdygpfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuPzogP3N0cmluZykge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdCB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB7aWQsIHRpbWVzdGFtcH0gPSB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgICAgLy8gT25seSBvbmUgbG9hZCBldmVudCBzaG91bGQgZmlyZSBwZXIgbWFwXG4gICAgICAgIGlmIChpZCAmJiB0aGlzLnN1Y2Nlc3NbaWRdKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLmFub25JZCkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEV2ZW50RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVV1aWQodGhpcy5hbm9uSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmFub25JZCA9IHV1aWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zdEV2ZW50KHRpbWVzdGFtcCwge3NrdVRva2VuOiB0aGlzLnNrdVRva2VufSwgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHRoaXMuc3VjY2Vzc1tpZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHVybnN0aWxlRXZlbnQgZXh0ZW5kcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgY29uc3RydWN0b3IoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCdhcHBVc2VyVHVybnN0aWxlJyk7XG4gICAgICAgIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuID0gY3VzdG9tQWNjZXNzVG9rZW47XG4gICAgfVxuXG4gICAgcG9zdFR1cm5zdGlsZUV2ZW50KHRpbGVVcmxzOiBBcnJheTxzdHJpbmc+LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIGlmIChjb25maWcuRVZFTlRTX1VSTCAmJlxuICAgICAgICAgICAgY29uZmlnLkFDQ0VTU19UT0tFTiAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aWxlVXJscykgJiZcbiAgICAgICAgICAgIHRpbGVVcmxzLnNvbWUodXJsID0+IGlzTWFwYm94VVJMKHVybCkgfHwgaXNNYXBib3hIVFRQVVJMKHVybCkpKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlUmVxdWVzdChEYXRlLm5vdygpLCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0IHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYW5vbklkIHx8ICF0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcyB8fCAhdGhpcy5ldmVudERhdGEudG9rZW5VKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0aGlzLmZldGNoRXZlbnREYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBjb25zdCB0b2tlblUgPSB0b2tlbkRhdGEgPyB0b2tlbkRhdGFbJ3UnXSA6IGNvbmZpZy5BQ0NFU1NfVE9LRU47XG4gICAgICAgIC8vUmVzZXQgZXZlbnQgZGF0YSBjYWNoZSBpZiB0aGUgYWNjZXNzIHRva2VuIG93bmVyIGNoYW5nZWQuXG4gICAgICAgIGxldCBkdWVGb3JFdmVudCA9IHRva2VuVSAhPT0gdGhpcy5ldmVudERhdGEudG9rZW5VO1xuXG4gICAgICAgIGlmICghdmFsaWRhdGVVdWlkKHRoaXMuYW5vbklkKSkge1xuICAgICAgICAgICAgdGhpcy5hbm9uSWQgPSB1dWlkKCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0VXBkYXRlID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAvLyBSZWNvcmQgdHVybnN0aWxlIGV2ZW50IG9uY2UgcGVyIGNhbGVuZGFyIGRheS5cbiAgICAgICAgaWYgKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0VXBkYXRlID0gbmV3IERhdGUodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgbmV4dERhdGUgPSBuZXcgRGF0ZShuZXh0VXBkYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGRheXNFbGFwc2VkID0gKG5leHRVcGRhdGUgLSB0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcykgLyAoMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IGR1ZUZvckV2ZW50IHx8IGRheXNFbGFwc2VkID49IDEgfHwgZGF5c0VsYXBzZWQgPCAtMSB8fCBsYXN0VXBkYXRlLmdldERhdGUoKSAhPT0gbmV4dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHVlRm9yRXZlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkdWVGb3JFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvc3RFdmVudChuZXh0VXBkYXRlLCB7XCJlbmFibGVkLnRlbGVtZXRyeVwiOiBmYWxzZX0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MgPSBuZXh0VXBkYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnREYXRhLnRva2VuVSA9IHRva2VuVTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuY29uc3QgdHVybnN0aWxlRXZlbnRfID0gbmV3IFR1cm5zdGlsZUV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdFR1cm5zdGlsZUV2ZW50ID0gdHVybnN0aWxlRXZlbnRfLnBvc3RUdXJuc3RpbGVFdmVudC5iaW5kKHR1cm5zdGlsZUV2ZW50Xyk7XG5cbmNvbnN0IG1hcExvYWRFdmVudF8gPSBuZXcgTWFwTG9hZEV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdE1hcExvYWRFdmVudCA9IG1hcExvYWRFdmVudF8ucG9zdE1hcExvYWRFdmVudC5iaW5kKG1hcExvYWRFdmVudF8pO1xuXG4vKioqKiogRU5EIFdBUk5JTkcgLSBSRU1PVkFMIE9SIE1PRElGSUNBVElPTiBPRiBUSEVcblBSRUNFRElORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZSwgcGFyc2VDYWNoZUNvbnRyb2x9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBDQUNIRV9OQU1FID0gJ21hcGJveC10aWxlcyc7XG5sZXQgY2FjaGVMaW1pdCA9IDUwMDsgLy8gNTBNQiAvICgxMDBLQi90aWxlKSB+PSA1MDAgdGlsZXNcbmxldCBjYWNoZUNoZWNrVGhyZXNob2xkID0gNTA7XG5cbmNvbnN0IE1JTl9USU1FX1VOVElMX0VYUElSWSA9IDEwMDAgKiA2MCAqIDc7IC8vIDcgbWludXRlcy4gU2tpcCBjYWNoaW5nIHRpbGVzIHdpdGggYSBzaG9ydCBlbm91Z2ggbWF4IGFnZS5cblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VPcHRpb25zID0ge1xuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIHN0YXR1c1RleHQ6IHN0cmluZyxcbiAgICBoZWFkZXJzOiB3aW5kb3cuSGVhZGVyc1xufTtcblxubGV0IHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtO1xuZnVuY3Rpb24gcHJlcGFyZUJvZHkocmVzcG9uc2U6IFJlc3BvbnNlLCBjYWxsYmFjaykge1xuICAgIGlmIChyZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgUmVzcG9uc2UobmV3IFJlYWRhYmxlU3RyZWFtKCkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICByZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEVkZ2VcbiAgICAgICAgICAgIHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VDb25zdHJ1Y3RvclN1cHBvcnRzUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2UuYm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UuYmxvYigpLnRoZW4oY2FsbGJhY2spO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlUHV0KHJlcXVlc3Q6IFJlcXVlc3QsIHJlc3BvbnNlOiBSZXNwb25zZSwgcmVxdWVzdFRpbWU6IG51bWJlcikge1xuICAgIGlmICghd2luZG93LmNhY2hlcykgcmV0dXJuO1xuXG4gICAgY29uc3Qgb3B0aW9uczogUmVzcG9uc2VPcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogbmV3IHdpbmRvdy5IZWFkZXJzKClcbiAgICB9O1xuICAgIHJlc3BvbnNlLmhlYWRlcnMuZm9yRWFjaCgodiwgaykgPT4gb3B0aW9ucy5oZWFkZXJzLnNldChrLCB2KSk7XG5cbiAgICBjb25zdCBjYWNoZUNvbnRyb2wgPSBwYXJzZUNhY2hlQ29udHJvbChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpIHx8ICcnKTtcbiAgICBpZiAoY2FjaGVDb250cm9sWyduby1zdG9yZSddKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNhY2hlQ29udHJvbFsnbWF4LWFnZSddKSB7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVycy5zZXQoJ0V4cGlyZXMnLCBuZXcgRGF0ZShyZXF1ZXN0VGltZSArIGNhY2hlQ29udHJvbFsnbWF4LWFnZSddICogMTAwMCkudG9VVENTdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVVudGlsRXhwaXJ5ID0gbmV3IERhdGUob3B0aW9ucy5oZWFkZXJzLmdldCgnRXhwaXJlcycpKS5nZXRUaW1lKCkgLSByZXF1ZXN0VGltZTtcbiAgICBpZiAodGltZVVudGlsRXhwaXJ5IDwgTUlOX1RJTUVfVU5USUxfRVhQSVJZKSByZXR1cm47XG5cbiAgICBwcmVwYXJlQm9keShyZXNwb25zZSwgYm9keSA9PiB7XG4gICAgICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gbmV3IHdpbmRvdy5SZXNwb25zZShib2R5LCBvcHRpb25zKTtcblxuICAgICAgICB3aW5kb3cuY2FjaGVzLm9wZW4oQ0FDSEVfTkFNRSlcbiAgICAgICAgICAgIC50aGVuKGNhY2hlID0+IGNhY2hlLnB1dChzdHJpcFF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnVybCksIGNsb25lZFJlc3BvbnNlKSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHdhcm5PbmNlKGUubWVzc2FnZSkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzdHJpcFF1ZXJ5UGFyYW1ldGVycyh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICByZXR1cm4gc3RhcnQgPCAwID8gdXJsIDogdXJsLnNsaWNlKDAsIHN0YXJ0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlR2V0KHJlcXVlc3Q6IFJlcXVlc3QsIGNhbGxiYWNrOiAoZXJyb3I6ID9hbnksIHJlc3BvbnNlOiA/UmVzcG9uc2UsIGZyZXNoOiA/Ym9vbGVhbikgPT4gdm9pZCkge1xuICAgIGlmICghd2luZG93LmNhY2hlcykgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgY29uc3Qgc3RyaXBwZWRVUkwgPSBzdHJpcFF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnVybCk7XG5cbiAgICB3aW5kb3cuY2FjaGVzLm9wZW4oQ0FDSEVfTkFNRSlcbiAgICAgICAgLnRoZW4oY2FjaGUgPT4ge1xuICAgICAgICAgICAgLy8gbWFudWFsbHkgc3RyaXAgVVJMIGluc3RlYWQgb2YgYGlnbm9yZVNlYXJjaDogdHJ1ZWAgYmVjYXVzZSBvZiBhIGtub3duXG4gICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSBpc3N1ZSBpbiBDaHJvbWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzg0MzFcbiAgICAgICAgICAgIGNhY2hlLm1hdGNoKHN0cmlwcGVkVVJMKVxuICAgICAgICAgICAgICAgIC5jYXRjaChjYWxsYmFjaylcbiAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyZXNoID0gaXNGcmVzaChyZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVpbnNlcnQgaW50byBjYWNoZSBzbyB0aGF0IG9yZGVyIG9mIGtleXMgaW4gdGhlIGNhY2hlIGlzIHRoZSBvcmRlciBvZiBhY2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbGluZSBtYWtlcyB0aGUgY2FjaGUgYSBMUlUgaW5zdGVhZCBvZiBhIEZJRk8gY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlLmRlbGV0ZShzdHJpcHBlZFVSTCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUucHV0KHN0cmlwcGVkVVJMLCByZXNwb25zZS5jbG9uZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLCBmcmVzaCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG5cbn1cblxuZnVuY3Rpb24gaXNGcmVzaChyZXNwb25zZSkge1xuICAgIGlmICghcmVzcG9uc2UpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSk7XG4gICAgY29uc3QgY2FjaGVDb250cm9sID0gcGFyc2VDYWNoZUNvbnRyb2wocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NhY2hlLUNvbnRyb2wnKSB8fCAnJyk7XG4gICAgcmV0dXJuIGV4cGlyZXMgPiBEYXRlLm5vdygpICYmICFjYWNoZUNvbnRyb2xbJ25vLWNhY2hlJ107XG59XG5cbi8vIGBJbmZpbml0eWAgdHJpZ2dlcnMgYSBjYWNoZSBjaGVjayBhZnRlciB0aGUgZmlyc3QgdGlsZSBpcyBsb2FkZWRcbi8vIHNvIHRoYXQgYSBjaGVjayBpcyBydW4gYXQgbGVhc3Qgb25jZSBvbiBlYWNoIHBhZ2UgbG9hZC5cbmxldCBnbG9iYWxFbnRyeUNvdW50ZXIgPSBJbmZpbml0eTtcblxuLy8gVGhlIGNhY2hlIGNoZWNrIGdldHMgcnVuIG9uIGEgd29ya2VyLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXRcbi8vIHByb2ZpbGluZyBzb21ldGltZXMgc2hvd3MgdGhpcyBhcyB0YWtpbmcgdXAgc2lnbmlmaWNhbnQgdGltZSBvbiB0aGVcbi8vIHRocmVhZCBpdCBnZXRzIGNhbGxlZCBmcm9tLiBBbmQgc29tZXRpbWVzIGl0IGRvZXNuJ3QuIEl0ICptYXkqIGJlXG4vLyBmaW5lIHRvIHJ1biB0aGlzIG9uIHRoZSBtYWluIHRocmVhZCBidXQgb3V0IG9mIGNhdXRpb24gdGhpcyBpcyBiZWluZ1xuLy8gZGlzcGF0Y2hlZCBvbiBhIHdvcmtlci4gVGhpcyBjYW4gYmUgaW52ZXN0aWdhdGVkIGZ1cnRoZXIgaW4gdGhlIGZ1dHVyZS5cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUVudHJ5UG9zc2libHlBZGRlZChkaXNwYXRjaGVyOiBEaXNwYXRjaGVyKSB7XG4gICAgZ2xvYmFsRW50cnlDb3VudGVyKys7XG4gICAgaWYgKGdsb2JhbEVudHJ5Q291bnRlciA+IGNhY2hlQ2hlY2tUaHJlc2hvbGQpIHtcbiAgICAgICAgZGlzcGF0Y2hlci5nZXRBY3RvcigpLnNlbmQoJ2VuZm9yY2VDYWNoZVNpemVMaW1pdCcsIGNhY2hlTGltaXQpO1xuICAgICAgICBnbG9iYWxFbnRyeUNvdW50ZXIgPSAwO1xuICAgIH1cbn1cblxuLy8gcnVucyBvbiB3b3JrZXIsIHNlZSBhYm92ZSBjb21tZW50XG5leHBvcnQgZnVuY3Rpb24gZW5mb3JjZUNhY2hlU2l6ZUxpbWl0KGxpbWl0OiBudW1iZXIpIHtcbiAgICBpZiAoIXdpbmRvdy5jYWNoZXMpIHJldHVybjtcbiAgICB3aW5kb3cuY2FjaGVzLm9wZW4oQ0FDSEVfTkFNRSlcbiAgICAgICAgLnRoZW4oY2FjaGUgPT4ge1xuICAgICAgICAgICAgY2FjaGUua2V5cygpLnRoZW4oa2V5cyA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIGxpbWl0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGtleXNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyVGlsZUNhY2hlKGNhbGxiYWNrPzogKGVycjogP0Vycm9yKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHdpbmRvdy5jYWNoZXMuZGVsZXRlKENBQ0hFX05BTUUpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBwcm9taXNlLmNhdGNoKGNhbGxiYWNrKS50aGVuKCgpID0+IGNhbGxiYWNrKCkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENhY2hlTGltaXRzKGxpbWl0OiBudW1iZXIsIGNoZWNrVGhyZXNob2xkOiBudW1iZXIpIHtcbiAgICBjYWNoZUxpbWl0ID0gbGltaXQ7XG4gICAgY2FjaGVDaGVja1RocmVzaG9sZCA9IGNoZWNrVGhyZXNob2xkO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuL3dpbmRvdyc7XG5pbXBvcnQge2V4dGVuZCwgd2Fybk9uY2V9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge2lzTWFwYm94SFRUUFVSTCwgaGFzQ2FjaGVEZWZlYXRpbmdTa3V9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtjYWNoZUdldCwgY2FjaGVQdXR9IGZyb20gJy4vdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgYSByZXNvdXJjZS5cbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJlc291cmNlVHlwZSA9IHtcbiAgICBVbmtub3duOiAnVW5rbm93bicsXG4gICAgU3R5bGU6ICdTdHlsZScsXG4gICAgU291cmNlOiAnU291cmNlJyxcbiAgICBUaWxlOiAnVGlsZScsXG4gICAgR2x5cGhzOiAnR2x5cGhzJyxcbiAgICBTcHJpdGVJbWFnZTogJ1Nwcml0ZUltYWdlJyxcbiAgICBTcHJpdGVKU09OOiAnU3ByaXRlSlNPTicsXG4gICAgSW1hZ2U6ICdJbWFnZSdcbn07XG5leHBvcnQge1Jlc291cmNlVHlwZX07XG5cbmlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgT2JqZWN0LmZyZWV6ZShSZXNvdXJjZVR5cGUpO1xufVxuXG4vKipcbiAqIEEgYFJlcXVlc3RQYXJhbWV0ZXJzYCBvYmplY3QgdG8gYmUgcmV0dXJuZWQgZnJvbSBNYXAub3B0aW9ucy50cmFuc2Zvcm1SZXF1ZXN0IGNhbGxiYWNrcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlcXVlc3RQYXJhbWV0ZXJzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcmVxdWVzdGVkLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGhlYWRlcnMgVGhlIGhlYWRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNyZWRlbnRpYWxzIGAnc2FtZS1vcmlnaW4nfCdpbmNsdWRlJ2AgVXNlICdpbmNsdWRlJyB0byBzZW5kIGNvb2tpZXMgd2l0aCBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVlc3RQYXJhbWV0ZXJzID0ge1xuICAgIHVybDogc3RyaW5nLFxuICAgIGhlYWRlcnM/OiBPYmplY3QsXG4gICAgbWV0aG9kPzogJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyxcbiAgICBib2R5Pzogc3RyaW5nLFxuICAgIHR5cGU/OiAnc3RyaW5nJyB8ICdqc29uJyB8ICdhcnJheUJ1ZmZlcicsXG4gICAgY3JlZGVudGlhbHM/OiAnc2FtZS1vcmlnaW4nIHwgJ2luY2x1ZGUnLFxuICAgIGNvbGxlY3RSZXNvdXJjZVRpbWluZz86IGJvb2xlYW5cbn07XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ2FsbGJhY2s8VD4gPSAoZXJyb3I6ID9FcnJvciwgZGF0YTogP1QsIGNhY2hlQ29udHJvbDogP3N0cmluZywgZXhwaXJlczogP3N0cmluZykgPT4gdm9pZDtcblxuY2xhc3MgQUpBWEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwMSAmJiBpc01hcGJveEhUVFBVUkwodXJsKSkge1xuICAgICAgICAgICAgbWVzc2FnZSArPSAnOiB5b3UgbWF5IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCBNYXBib3ggYWNjZXNzIHRva2VuLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzJztcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgICAgIC8vIHdvcmsgYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vUmljaC1IYXJyaXMvYnVibGUvaXNzdWVzLzQwXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfSAoJHt0aGlzLnN0YXR1c30pOiAke3RoaXMudXJsfWA7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1dvcmtlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuXG4vLyBFbnN1cmUgdGhhdCB3ZSdyZSBzZW5kaW5nIHRoZSBjb3JyZWN0IHJlZmVycmVyIGZyb20gYmxvYiBVUkwgd29ya2VyIGJ1bmRsZXMuXG4vLyBGb3IgZmlsZXMgbG9hZGVkIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLCBgbG9jYXRpb24ub3JpZ2luYCB3aWxsIGJlIHNldFxuLy8gdG8gdGhlIHN0cmluZyghKSBcIm51bGxcIiAoRmlyZWZveCksIG9yIFwiZmlsZTovL1wiIChDaHJvbWUsIFNhZmFyaSwgRWRnZSwgSUUpLFxuLy8gYW5kIHdlIHdpbGwgc2V0IGFuIGVtcHR5IHJlZmVycmVyLiBPdGhlcndpc2UsIHdlJ3JlIHVzaW5nIHRoZSBkb2N1bWVudCdzIFVSTC5cbi8qIGdsb2JhbCBzZWxmLCBXb3JrZXJHbG9iYWxTY29wZSAqL1xuZXhwb3J0IGNvbnN0IGdldFJlZmVycmVyID0gaXNXb3JrZXIoKSA/XG4gICAgKCkgPT4gc2VsZi53b3JrZXIgJiYgc2VsZi53b3JrZXIucmVmZXJyZXIgOlxuICAgICgpID0+ICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09ICdibG9iOicgPyB3aW5kb3cucGFyZW50IDogd2luZG93KS5sb2NhdGlvbi5ocmVmO1xuXG4vLyBEZXRlcm1pbmVzIHdoZXRoZXIgYSBVUkwgaXMgYSBmaWxlOi8vIFVSTC4gVGhpcyBpcyBvYnZpb3VzbHkgdGhlIGNhc2UgaWYgaXQgYmVnaW5zXG4vLyB3aXRoIGZpbGU6Ly8uIFJlbGF0aXZlIFVSTHMgYXJlIGFsc28gZmlsZTovLyBVUkxzIGlmZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnQgd2FzIGxvYWRlZFxuLy8gdmlhIGEgZmlsZTovLyBVUkwuXG5jb25zdCBpc0ZpbGVVUkwgPSB1cmwgPT4gL15maWxlOi8udGVzdCh1cmwpIHx8ICgvXmZpbGU6Ly50ZXN0KGdldFJlZmVycmVyKCkpICYmICEvXlxcdys6Ly50ZXN0KHVybCkpO1xuXG5mdW5jdGlvbiBtYWtlRmV0Y2hSZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8YW55Pik6IENhbmNlbGFibGUge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgd2luZG93LkFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgd2luZG93LlJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnMudXJsLCB7XG4gICAgICAgIG1ldGhvZDogcmVxdWVzdFBhcmFtZXRlcnMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgICBib2R5OiByZXF1ZXN0UGFyYW1ldGVycy5ib2R5LFxuICAgICAgICBjcmVkZW50aWFsczogcmVxdWVzdFBhcmFtZXRlcnMuY3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnMsXG4gICAgICAgIHJlZmVycmVyOiBnZXRSZWZlcnJlcigpLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsXG4gICAgfSk7XG4gICAgbGV0IGNvbXBsZXRlID0gZmFsc2U7XG4gICAgbGV0IGFib3J0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNhY2hlSWdub3JpbmdTZWFyY2ggPSBoYXNDYWNoZURlZmVhdGluZ1NrdShyZXF1ZXN0LnVybCk7XG5cbiAgICBpZiAocmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVPckZldGNoID0gKGVyciwgY2FjaGVkUmVzcG9uc2UsIHJlc3BvbnNlSXNGcmVzaCkgPT4ge1xuICAgICAgICBpZiAoYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIC8vIERvIGZldGNoIGluIGNhc2Ugb2YgY2FjaGUgZXJyb3IuXG4gICAgICAgICAgICAvLyBIVFRQIHBhZ2VzIGluIEVkZ2UgdHJpZ2dlciBhIHNlY3VyaXR5IGVycm9yIHRoYXQgY2FuIGJlIGlnbm9yZWQuXG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdTZWN1cml0eUVycm9yJykge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FjaGVkUmVzcG9uc2UgJiYgcmVzcG9uc2VJc0ZyZXNoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluaXNoUmVxdWVzdChjYWNoZWRSZXNwb25zZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FjaGVkUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vIFdlIGNhbid0IGRvIHJldmFsaWRhdGlvbiB3aXRoICdJZi1Ob25lLU1hdGNoJyBiZWNhdXNlIHRoZW4gdGhlXG4gICAgICAgICAgICAvLyByZXF1ZXN0IGRvZXNuJ3QgaGF2ZSBzaW1wbGUgY29ycyBoZWFkZXJzLlxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHdpbmRvdy5mZXRjaChyZXF1ZXN0KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlYWJsZVJlc3BvbnNlID0gY2FjaGVJZ25vcmluZ1NlYXJjaCA/IHJlc3BvbnNlLmNsb25lKCkgOiBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaW5pc2hSZXF1ZXN0KHJlc3BvbnNlLCBjYWNoZWFibGVSZXNwb25zZSwgcmVxdWVzdFRpbWUpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgQUpBWEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHJlc3BvbnNlLnN0YXR1cywgcmVxdWVzdFBhcmFtZXRlcnMudXJsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAyMCkge1xuICAgICAgICAgICAgICAgIC8vIHNpbGVuY2UgZXhwZWN0ZWQgQWJvcnRFcnJvclxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmaW5pc2hSZXF1ZXN0ID0gKHJlc3BvbnNlLCBjYWNoZWFibGVSZXNwb25zZSwgcmVxdWVzdFRpbWUpID0+IHtcbiAgICAgICAgKFxuICAgICAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2FycmF5QnVmZmVyJyA/IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkgOlxuICAgICAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2pzb24nID8gcmVzcG9uc2UuanNvbigpIDpcbiAgICAgICAgICAgIHJlc3BvbnNlLnRleHQoKVxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoY2FjaGVhYmxlUmVzcG9uc2UgJiYgcmVxdWVzdFRpbWUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcmVzcG9uc2UgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgY2FjaGUgYWZ0ZXIgaXQgaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAgICAgICAgICAgIC8vIFVudGlsIGl0IGlzIGZ1bGx5IGxvYWRlZCB0aGVyZSBpcyBhIGNoYW5jZSBpdCB3aWxsIGJlIGFib3J0ZWQuIEFib3J0aW5nIHdoaWxlXG4gICAgICAgICAgICAgICAgLy8gcmVhZGluZyB0aGUgYm9keSBjYW4gY2F1c2UgdGhlIGNhY2hlIGluc2VydGlvbiB0byBlcnJvci4gV2UgY291bGQgY2F0Y2ggdGhpcyBlcnJvclxuICAgICAgICAgICAgICAgIC8vIGluIG1vc3QgYnJvd3NlcnMgYnV0IGluIEZpcmVmb3ggaXQgc2VlbXMgdG8gc29tZXRpbWVzIGNyYXNoIHRoZSB0YWIuIEFkZGluZ1xuICAgICAgICAgICAgICAgIC8vIGl0IHRvIHRoZSBjYWNoZSBoZXJlIGF2b2lkcyB0aGF0IGVycm9yLlxuICAgICAgICAgICAgICAgIGNhY2hlUHV0KHJlcXVlc3QsIGNhY2hlYWJsZVJlc3BvbnNlLCByZXF1ZXN0VGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDYWNoZS1Db250cm9sJyksIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdFeHBpcmVzJykpO1xuICAgICAgICB9KS5jYXRjaChlcnIgPT4gY2FsbGJhY2sobmV3IEVycm9yKGVyci5tZXNzYWdlKSkpO1xuICAgIH07XG5cbiAgICBpZiAoY2FjaGVJZ25vcmluZ1NlYXJjaCkge1xuICAgICAgICBjYWNoZUdldChyZXF1ZXN0LCB2YWxpZGF0ZU9yRmV0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRlT3JGZXRjaChudWxsLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4ge1xuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFjb21wbGV0ZSkgY29udHJvbGxlci5hYm9ydCgpO1xuICAgIH19O1xufVxuXG5mdW5jdGlvbiBtYWtlWE1MSHR0cFJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxhbnk+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHhoci5vcGVuKHJlcXVlc3RQYXJhbWV0ZXJzLm1ldGhvZCB8fCAnR0VUJywgcmVxdWVzdFBhcmFtZXRlcnMudXJsLCB0cnVlKTtcbiAgICBpZiAocmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2FycmF5QnVmZmVyJykge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgICB9XG4gICAgZm9yIChjb25zdCBrIGluIHJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnMpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaywgcmVxdWVzdFBhcmFtZXRlcnMuaGVhZGVyc1trXSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnanNvbicpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICd0ZXh0JztcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgfVxuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSByZXF1ZXN0UGFyYW1ldGVycy5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnO1xuICAgIHhoci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoeGhyLnN0YXR1c1RleHQpKTtcbiAgICB9O1xuICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICgoKHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDApIHx8IHhoci5zdGF0dXMgPT09IDApICYmIHhoci5yZXNwb25zZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IGRhdGE6IG1peGVkID0geGhyLnJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdqc29uJykge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG1hbnVhbGx5IHBhcnNpbmcgSlNPTiBoZXJlIHRvIGdldCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YSwgeGhyLmdldFJlc3BvbnNlSGVhZGVyKCdDYWNoZS1Db250cm9sJyksIHhoci5nZXRSZXNwb25zZUhlYWRlcignRXhwaXJlcycpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBBSkFYRXJyb3IoeGhyLnN0YXR1c1RleHQsIHhoci5zdGF0dXMsIHJlcXVlc3RQYXJhbWV0ZXJzLnVybCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB4aHIuc2VuZChyZXF1ZXN0UGFyYW1ldGVycy5ib2R5KTtcbiAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4geGhyLmFib3J0KCl9O1xufVxuXG5leHBvcnQgY29uc3QgbWFrZVJlcXVlc3QgPSBmdW5jdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPGFueT4pOiBDYW5jZWxhYmxlIHtcbiAgICAvLyBXZSdyZSB0cnlpbmcgdG8gdXNlIHRoZSBGZXRjaCBBUEkgaWYgcG9zc2libGUuIEhvd2V2ZXIsIGluIHNvbWUgc2l0dWF0aW9ucyB3ZSBjYW4ndCB1c2UgaXQ6XG4gICAgLy8gLSBJRTExIGRvZXNuJ3Qgc3VwcG9ydCBpdCBhdCBhbGwuIEluIHRoaXMgY2FzZSwgd2UgZGlzcGF0Y2ggdGhlIHJlcXVlc3QgdG8gdGhlIG1haW4gdGhyZWFkIHNvXG4gICAgLy8gICB0aGF0IHdlIGNhbiBnZXQgYW4gYWNjcnVhdGUgcmVmZXJyZXIgaGVhZGVyLlxuICAgIC8vIC0gU2FmYXJpIGV4cG9zZXMgd2luZG93LkFib3J0Q29udHJvbGxlciwgYnV0IGl0IGRvZXNuJ3Qgd29yayBhY3R1YWxseSBhYm9ydCBhbnkgcmVxdWVzdHMgaW5cbiAgICAvLyAgIHNvbWUgdmVyc2lvbnMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTgwI2MyKVxuICAgIC8vIC0gUmVxdWVzdHMgZm9yIHJlc291cmNlcyB3aXRoIHRoZSBmaWxlOi8vIFVSSSBzY2hlbWUgZG9uJ3Qgd29yayB3aXRoIHRoZSBGZXRjaCBBUEkgZWl0aGVyLiBJblxuICAgIC8vICAgdGhpcyBjYXNlIHdlIHVuY29uZGl0aW9uYWxseSB1c2UgWEhSIG9uIHRoZSBjdXJyZW50IHRocmVhZCBzaW5jZSByZWZlcnJlcnMgZG9uJ3QgbWF0dGVyLlxuICAgIGlmICghaXNGaWxlVVJMKHJlcXVlc3RQYXJhbWV0ZXJzLnVybCkpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5mZXRjaCAmJiB3aW5kb3cuUmVxdWVzdCAmJiB3aW5kb3cuQWJvcnRDb250cm9sbGVyICYmIHdpbmRvdy5SZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnc2lnbmFsJykpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlRmV0Y2hSZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzV29ya2VyKCkgJiYgc2VsZi53b3JrZXIgJiYgc2VsZi53b3JrZXIuYWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLndvcmtlci5hY3Rvci5zZW5kKCdnZXRSZXNvdXJjZScsIHJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1ha2VYTUxIdHRwUmVxdWVzdChyZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEpTT04gPSBmdW5jdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPE9iamVjdD4pOiBDYW5jZWxhYmxlIHtcbiAgICByZXR1cm4gbWFrZVJlcXVlc3QoZXh0ZW5kKHJlcXVlc3RQYXJhbWV0ZXJzLCB7dHlwZTogJ2pzb24nfSksIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8QXJyYXlCdWZmZXI+KTogQ2FuY2VsYWJsZSB7XG4gICAgcmV0dXJuIG1ha2VSZXF1ZXN0KGV4dGVuZChyZXF1ZXN0UGFyYW1ldGVycywge3R5cGU6ICdhcnJheUJ1ZmZlcid9KSwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3REYXRhID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxzdHJpbmc+KTogQ2FuY2VsYWJsZSB7XG4gICAgcmV0dXJuIG1ha2VSZXF1ZXN0KGV4dGVuZChyZXF1ZXN0UGFyYW1ldGVycywge21ldGhvZDogJ1BPU1QnfSksIGNhbGxiYWNrKTtcbn07XG5cbmZ1bmN0aW9uIHNhbWVPcmlnaW4odXJsKSB7XG4gICAgY29uc3QgYTogSFRNTEFuY2hvckVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuaHJlZiA9IHVybDtcbiAgICByZXR1cm4gYS5wcm90b2NvbCA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICYmIGEuaG9zdCA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG59XG5cbmNvbnN0IHRyYW5zcGFyZW50UG5nVXJsID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRWVYyTmdBQUlBQUFVQUFhclZ5RkVBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmxldCBpbWFnZVF1ZXVlLCBudW1JbWFnZVJlcXVlc3RzO1xuZXhwb3J0IGNvbnN0IHJlc2V0SW1hZ2VSZXF1ZXN0UXVldWUgPSAoKSA9PiB7XG4gICAgaW1hZ2VRdWV1ZSA9IFtdO1xuICAgIG51bUltYWdlUmVxdWVzdHMgPSAwO1xufTtcbnJlc2V0SW1hZ2VSZXF1ZXN0UXVldWUoKTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogQ2FsbGJhY2s8SFRNTEltYWdlRWxlbWVudD4pOiBDYW5jZWxhYmxlIHtcbiAgICAvLyBsaW1pdCBjb25jdXJyZW50IGltYWdlIGxvYWRzIHRvIGhlbHAgd2l0aCByYXN0ZXIgc291cmNlcyBwZXJmb3JtYW5jZSBvbiBiaWcgc2NyZWVuc1xuICAgIGlmIChudW1JbWFnZVJlcXVlc3RzID49IGNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFMpIHtcbiAgICAgICAgY29uc3QgcXVldWVkID0ge1xuICAgICAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnMsXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIGNhbmNlbGxlZDogZmFsc2UsXG4gICAgICAgICAgICBjYW5jZWwoKSB7IHRoaXMuY2FuY2VsbGVkID0gdHJ1ZTsgfVxuICAgICAgICB9O1xuICAgICAgICBpbWFnZVF1ZXVlLnB1c2gocXVldWVkKTtcbiAgICAgICAgcmV0dXJuIHF1ZXVlZDtcbiAgICB9XG4gICAgbnVtSW1hZ2VSZXF1ZXN0cysrO1xuXG4gICAgbGV0IGFkdmFuY2VkID0gZmFsc2U7XG4gICAgY29uc3QgYWR2YW5jZUltYWdlUmVxdWVzdFF1ZXVlID0gKCkgPT4ge1xuICAgICAgICBpZiAoYWR2YW5jZWQpIHJldHVybjtcbiAgICAgICAgYWR2YW5jZWQgPSB0cnVlO1xuICAgICAgICBudW1JbWFnZVJlcXVlc3RzLS07XG4gICAgICAgIGFzc2VydChudW1JbWFnZVJlcXVlc3RzID49IDApO1xuICAgICAgICB3aGlsZSAoaW1hZ2VRdWV1ZS5sZW5ndGggJiYgbnVtSW1hZ2VSZXF1ZXN0cyA8IGNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGltYWdlUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHtyZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2ssIGNhbmNlbGxlZH0gPSByZXF1ZXN0O1xuICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmNhbmNlbCA9IGdldEltYWdlKHJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjaykuY2FuY2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIHJlcXVlc3QgdGhlIGltYWdlIHdpdGggWEhSIHRvIHdvcmsgYXJvdW5kIGNhY2hpbmcgaXNzdWVzXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8xNDcwXG4gICAgY29uc3QgcmVxdWVzdCA9IGdldEFycmF5QnVmZmVyKHJlcXVlc3RQYXJhbWV0ZXJzLCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9BcnJheUJ1ZmZlciwgY2FjaGVDb250cm9sOiA/c3RyaW5nLCBleHBpcmVzOiA/c3RyaW5nKSA9PiB7XG5cbiAgICAgICAgYWR2YW5jZUltYWdlUmVxdWVzdFF1ZXVlKCk7XG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQgPSBuZXcgd2luZG93LkltYWdlKCk7XG4gICAgICAgICAgICBjb25zdCBVUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG4gICAgICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGltZyk7XG4gICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWcuc3JjKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpbWcub25lcnJvciA9ICgpID0+IGNhbGxiYWNrKG5ldyBFcnJvcignQ291bGQgbm90IGxvYWQgaW1hZ2UuIFBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGEgc3VwcG9ydGVkIGltYWdlIHR5cGUgc3VjaCBhcyBQTkcgb3IgSlBFRy4gTm90ZSB0aGF0IFNWR3MgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgICAgICAgICAgY29uc3QgYmxvYjogQmxvYiA9IG5ldyB3aW5kb3cuQmxvYihbbmV3IFVpbnQ4QXJyYXkoZGF0YSldLCB7dHlwZTogJ2ltYWdlL3BuZyd9KTtcbiAgICAgICAgICAgIChpbWc6IGFueSkuY2FjaGVDb250cm9sID0gY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgKGltZzogYW55KS5leHBpcmVzID0gZXhwaXJlcztcbiAgICAgICAgICAgIGltZy5zcmMgPSBkYXRhLmJ5dGVMZW5ndGggPyBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpIDogdHJhbnNwYXJlbnRQbmdVcmw7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGNhbmNlbDogKCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGFkdmFuY2VJbWFnZVJlcXVlc3RRdWV1ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlbyA9IGZ1bmN0aW9uKHVybHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazxIVE1MVmlkZW9FbGVtZW50Pik6IENhbmNlbGFibGUge1xuICAgIGNvbnN0IHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xuICAgIHZpZGVvLm9ubG9hZHN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHZpZGVvKTtcbiAgICB9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzOiBIVE1MU291cmNlRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHVybHNbaV0pKSB7XG4gICAgICAgICAgICB2aWRlby5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xuICAgICAgICB9XG4gICAgICAgIHMuc3JjID0gdXJsc1tpXTtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQocyk7XG4gICAgfVxuICAgIHJldHVybiB7Y2FuY2VsOiAoKSA9PiB7fX07XG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4vdXRpbCc7XG5cbnR5cGUgTGlzdGVuZXIgPSAoT2JqZWN0KSA9PiBhbnk7XG50eXBlIExpc3RlbmVycyA9IHsgW3N0cmluZ106IEFycmF5PExpc3RlbmVyPiB9O1xuXG5mdW5jdGlvbiBfYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBMaXN0ZW5lciwgbGlzdGVuZXJMaXN0OiBMaXN0ZW5lcnMpIHtcbiAgICBjb25zdCBsaXN0ZW5lckV4aXN0cyA9IGxpc3RlbmVyTGlzdFt0eXBlXSAmJiBsaXN0ZW5lckxpc3RbdHlwZV0uaW5kZXhPZihsaXN0ZW5lcikgIT09IC0xO1xuICAgIGlmICghbGlzdGVuZXJFeGlzdHMpIHtcbiAgICAgICAgbGlzdGVuZXJMaXN0W3R5cGVdID0gbGlzdGVuZXJMaXN0W3R5cGVdIHx8IFtdO1xuICAgICAgICBsaXN0ZW5lckxpc3RbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBMaXN0ZW5lciwgbGlzdGVuZXJMaXN0OiBMaXN0ZW5lcnMpIHtcbiAgICBpZiAobGlzdGVuZXJMaXN0ICYmIGxpc3RlbmVyTGlzdFt0eXBlXSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3RlbmVyTGlzdFt0eXBlXS5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbGlzdGVuZXJMaXN0W3R5cGVdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudCB7XG4gICAgK3R5cGU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZywgZGF0YTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGRhdGEpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVycm9yRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICAgZXJyb3I6IEVycm9yO1xuXG4gICAgY29uc3RydWN0b3IoZXJyb3I6IEVycm9yLCBkYXRhOiBPYmplY3QgPSB7fSkge1xuICAgICAgICBzdXBlcignZXJyb3InLCBleHRlbmQoe2Vycm9yfSwgZGF0YSkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBNZXRob2RzIG1peGVkIGluIHRvIG90aGVyIGNsYXNzZXMgZm9yIGV2ZW50IGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAbWl4aW4gRXZlbnRlZFxuICovXG5leHBvcnQgY2xhc3MgRXZlbnRlZCB7XG4gICAgX2xpc3RlbmVyczogTGlzdGVuZXJzO1xuICAgIF9vbmVUaW1lTGlzdGVuZXJzOiBMaXN0ZW5lcnM7XG4gICAgX2V2ZW50ZWRQYXJlbnQ6ID9FdmVudGVkO1xuICAgIF9ldmVudGVkUGFyZW50RGF0YTogPyhPYmplY3QgfCAoKSA9PiBPYmplY3QpO1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIHRvIGEgc3BlY2lmaWVkIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBhZGQgYSBsaXN0ZW4gZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogICBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byBgZmlyZWAsXG4gICAgICogICBleHRlbmRlZCB3aXRoIGB0YXJnZXRgIGFuZCBgdHlwZWAgcHJvcGVydGllcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBgdGhpc2BcbiAgICAgKi9cbiAgICBvbih0eXBlOiAqLCBsaXN0ZW5lcjogTGlzdGVuZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzIHx8IHt9O1xuICAgICAgICBfYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fbGlzdGVuZXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gcmVtb3ZlIGxpc3RlbmVycyBmb3IuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBgdGhpc2BcbiAgICAgKi9cbiAgICBvZmYodHlwZTogKiwgbGlzdGVuZXI6IExpc3RlbmVyKSB7XG4gICAgICAgIF9yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB0aGlzLl9saXN0ZW5lcnMpO1xuICAgICAgICBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fb25lVGltZUxpc3RlbmVycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlIHRvIGEgc3BlY2lmaWVkIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBUaGUgbGlzdGVuZXIgd2lsbCBiZSBjYWxsZWQgZmlyc3QgdGltZSB0aGUgZXZlbnQgZmlyZXMgYWZ0ZXIgdGhlIGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBsaXN0ZW4gZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQgdGhlIGZpcnN0IHRpbWUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gYHRoaXNgXG4gICAgICovXG4gICAgb25jZSh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBMaXN0ZW5lcikge1xuICAgICAgICB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzID0gdGhpcy5fb25lVGltZUxpc3RlbmVycyB8fCB7fTtcbiAgICAgICAgX2FkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZpcmUoZXZlbnQ6IEV2ZW50LCBwcm9wZXJ0aWVzPzogT2JqZWN0KSB7XG4gICAgICAgIC8vIENvbXBhdGliaWxpdHkgd2l0aCAodHlwZTogc3RyaW5nLCBwcm9wZXJ0aWVzOiBPYmplY3QpIHNpZ25hdHVyZSBmcm9tIHByZXZpb3VzIHZlcnNpb25zLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzY1MjIsXG4gICAgICAgIC8vICAgICBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1kcmF3L2lzc3Vlcy83NjZcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGV2ZW50LCBwcm9wZXJ0aWVzIHx8IHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBldmVudC50eXBlO1xuXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbnModHlwZSkpIHtcbiAgICAgICAgICAgIChldmVudDogYW55KS50YXJnZXQgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgYWRkaW5nIG9yIHJlbW92aW5nIGxpc3RlbmVycyBpbnNpZGUgb3RoZXIgbGlzdGVuZXJzIHdvbid0IGNhdXNlIGFuIGluZmluaXRlIGxvb3BcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycyAmJiB0aGlzLl9saXN0ZW5lcnNbdHlwZV0gPyB0aGlzLl9saXN0ZW5lcnNbdHlwZV0uc2xpY2UoKSA6IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb25lVGltZUxpc3RlbmVycyA9IHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMgJiYgdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0eXBlXSA/IHRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdHlwZV0uc2xpY2UoKSA6IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBvbmVUaW1lTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICAgICAgX3JlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9ldmVudGVkUGFyZW50O1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIGV4dGVuZChcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLl9ldmVudGVkUGFyZW50RGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKCkgOiB0aGlzLl9ldmVudGVkUGFyZW50RGF0YVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50LmZpcmUoZXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IG5vIGVycm9yIGV2ZW50cyBhcmUgZHJvcHBlZCwgcHJpbnQgdGhlbSB0byB0aGVcbiAgICAgICAgLy8gY29uc29sZSBpZiB0aGV5IGhhdmUgbm8gbGlzdGVuZXJzLlxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihldmVudC5lcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdHJ1ZSBpZiB0aGlzIGluc3RhbmNlIG9mIEV2ZW50ZWQgb3IgYW55IGZvcndhcmRlZWQgaW5zdGFuY2VzIG9mIEV2ZW50ZWQgaGF2ZSBhIGxpc3RlbmVyIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHJlZ2lzdGVyZWQgbGlzdGVuZXIgZm9yIHNwZWNpZmllZCBldmVudCB0eXBlLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbGlzdGVucyh0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLl9saXN0ZW5lcnMgJiYgdGhpcy5fbGlzdGVuZXJzW3R5cGVdICYmIHRoaXMuX2xpc3RlbmVyc1t0eXBlXS5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMgJiYgdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0eXBlXSAmJiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3R5cGVdLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fZXZlbnRlZFBhcmVudCAmJiB0aGlzLl9ldmVudGVkUGFyZW50Lmxpc3RlbnModHlwZSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnViYmxlIGFsbCBldmVudHMgZmlyZWQgYnkgdGhpcyBpbnN0YW5jZSBvZiBFdmVudGVkIHRvIHRoaXMgcGFyZW50IGluc3RhbmNlIG9mIEV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGB0aGlzYFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0RXZlbnRlZFBhcmVudChwYXJlbnQ6ID9FdmVudGVkLCBkYXRhPzogT2JqZWN0IHwgKCkgPT4gT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50ZWRQYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhID0gZGF0YTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRpb25FcnJvciB7XG4gICAgY29uc3RydWN0b3Ioa2V5LCB2YWx1ZSwgbWVzc2FnZSwgaWRlbnRpZmllcikge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAoa2V5ID8gYCR7a2V5fTogYCA6ICcnKSArIG1lc3NhZ2U7XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLl9fbGluZV9fKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmUgPSB2YWx1ZS5fX2xpbmVfXztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVDb25zdGFudHMob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IGNvbnN0YW50cyA9IG9wdGlvbnMudmFsdWU7XG5cbiAgICBpZiAoY29uc3RhbnRzKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGNvbnN0YW50cywgJ2NvbnN0YW50cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2OCcpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAob3V0cHV0LCAuLi5pbnB1dHMpIHtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIG91dHB1dFtrXSA9IGlucHV0W2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG4iLCJmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW47XG59XG5cbi8vIFR1cm4ganNvbmxpbnQtbGluZXMtcHJpbWl0aXZlcyBvYmplY3RzIGludG8gcHJpbWl0aXZlIG9iamVjdHNcbmV4cG9ydCBmdW5jdGlvbiB1bmJ1bmRsZSh2YWx1ZSkge1xuICAgIGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlT2YoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcFVuYnVuZGxlKHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoZGVlcFVuYnVuZGxlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICFpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgdW5idW5kbGVkVmFsdWUgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHVuYnVuZGxlZFZhbHVlW2tleV0gPSBkZWVwVW5idW5kbGUodmFsdWVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuYnVuZGxlZFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmJ1bmRsZSh2YWx1ZSk7XG59XG5cbiIsIi8vIEBmbG93XG5cbmNsYXNzIFBhcnNpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3Ioa2V5OiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYXJzaW5nRXJyb3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi9leHByZXNzaW9uJztcblxuLyoqXG4gKiBUcmFja3MgYGxldGAgYmluZGluZ3MgZHVyaW5nIGV4cHJlc3Npb24gcGFyc2luZy5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNjb3BlIHtcbiAgICBwYXJlbnQ6ID9TY29wZTtcbiAgICBiaW5kaW5nczoge1tzdHJpbmddOiBFeHByZXNzaW9ufTtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBTY29wZSwgYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPiA9IFtdKSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmJpbmRpbmdzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGV4cHJlc3Npb25dIG9mIGJpbmRpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzW25hbWVdID0gZXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbmNhdChiaW5kaW5nczogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+KSB7XG4gICAgICAgIHJldHVybiBuZXcgU2NvcGUodGhpcywgYmluZGluZ3MpO1xuICAgIH1cblxuICAgIGdldChuYW1lOiBzdHJpbmcpOiBFeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKHRoaXMuYmluZGluZ3NbbmFtZV0pIHsgcmV0dXJuIHRoaXMuYmluZGluZ3NbbmFtZV07IH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7IHJldHVybiB0aGlzLnBhcmVudC5nZXQobmFtZSk7IH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG5vdCBmb3VuZCBpbiBzY29wZS5gKTtcbiAgICB9XG5cbiAgICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzW25hbWVdKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuaGFzKG5hbWUpIDogZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTY29wZTtcbiIsIi8vIEBmbG93XG5cbmV4cG9ydCB0eXBlIE51bGxUeXBlVCA9IHsga2luZDogJ251bGwnIH07XG5leHBvcnQgdHlwZSBOdW1iZXJUeXBlVCA9IHsga2luZDogJ251bWJlcicgfTtcbmV4cG9ydCB0eXBlIFN0cmluZ1R5cGVUID0geyBraW5kOiAnc3RyaW5nJyB9O1xuZXhwb3J0IHR5cGUgQm9vbGVhblR5cGVUID0geyBraW5kOiAnYm9vbGVhbicgfTtcbmV4cG9ydCB0eXBlIENvbG9yVHlwZVQgPSB7IGtpbmQ6ICdjb2xvcicgfTtcbmV4cG9ydCB0eXBlIE9iamVjdFR5cGVUID0geyBraW5kOiAnb2JqZWN0JyB9O1xuZXhwb3J0IHR5cGUgVmFsdWVUeXBlVCA9IHsga2luZDogJ3ZhbHVlJyB9O1xuZXhwb3J0IHR5cGUgRXJyb3JUeXBlVCA9IHsga2luZDogJ2Vycm9yJyB9O1xuZXhwb3J0IHR5cGUgQ29sbGF0b3JUeXBlVCA9IHsga2luZDogJ2NvbGxhdG9yJyB9O1xuZXhwb3J0IHR5cGUgRm9ybWF0dGVkVHlwZVQgPSB7IGtpbmQ6ICdmb3JtYXR0ZWQnIH07XG5leHBvcnQgdHlwZSBJbWFnZVR5cGVUID0geyBraW5kOiAnaW1hZ2UnIH07XG5cbmV4cG9ydCB0eXBlIEV2YWx1YXRpb25LaW5kID0gJ2NvbnN0YW50JyB8ICdzb3VyY2UnIHwgJ2NhbWVyYScgfCAnY29tcG9zaXRlJztcblxuZXhwb3J0IHR5cGUgVHlwZSA9XG4gICAgTnVsbFR5cGVUIHxcbiAgICBOdW1iZXJUeXBlVCB8XG4gICAgU3RyaW5nVHlwZVQgfFxuICAgIEJvb2xlYW5UeXBlVCB8XG4gICAgQ29sb3JUeXBlVCB8XG4gICAgT2JqZWN0VHlwZVQgfFxuICAgIFZhbHVlVHlwZVQgfFxuICAgIEFycmF5VHlwZSB8IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBFcnJvclR5cGVUIHxcbiAgICBDb2xsYXRvclR5cGVUIHxcbiAgICBGb3JtYXR0ZWRUeXBlVCB8XG4gICAgSW1hZ2VUeXBlVFxuXG5leHBvcnQgdHlwZSBBcnJheVR5cGUgPSB7XG4gICAga2luZDogJ2FycmF5JyxcbiAgICBpdGVtVHlwZTogVHlwZSxcbiAgICBOOiA/bnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBOdWxsVHlwZSA9IHtraW5kOiAnbnVsbCd9O1xuZXhwb3J0IGNvbnN0IE51bWJlclR5cGUgPSB7a2luZDogJ251bWJlcid9O1xuZXhwb3J0IGNvbnN0IFN0cmluZ1R5cGUgPSB7a2luZDogJ3N0cmluZyd9O1xuZXhwb3J0IGNvbnN0IEJvb2xlYW5UeXBlID0ge2tpbmQ6ICdib29sZWFuJ307XG5leHBvcnQgY29uc3QgQ29sb3JUeXBlID0ge2tpbmQ6ICdjb2xvcid9O1xuZXhwb3J0IGNvbnN0IE9iamVjdFR5cGUgPSB7a2luZDogJ29iamVjdCd9O1xuZXhwb3J0IGNvbnN0IFZhbHVlVHlwZSA9IHtraW5kOiAndmFsdWUnfTtcbmV4cG9ydCBjb25zdCBFcnJvclR5cGUgPSB7a2luZDogJ2Vycm9yJ307XG5leHBvcnQgY29uc3QgQ29sbGF0b3JUeXBlID0ge2tpbmQ6ICdjb2xsYXRvcid9O1xuZXhwb3J0IGNvbnN0IEZvcm1hdHRlZFR5cGUgPSB7a2luZDogJ2Zvcm1hdHRlZCd9O1xuZXhwb3J0IGNvbnN0IEltYWdlVHlwZSA9IHtraW5kOiAnaW1hZ2UnfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5KGl0ZW1UeXBlOiBUeXBlLCBOOiA/bnVtYmVyKTogQXJyYXlUeXBlIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnYXJyYXknLFxuICAgICAgICBpdGVtVHlwZSxcbiAgICAgICAgTlxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh0eXBlOiBUeXBlKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZS5raW5kID09PSAnYXJyYXknKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gdG9TdHJpbmcodHlwZS5pdGVtVHlwZSk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdHlwZS5OID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICBgYXJyYXk8JHtpdGVtVHlwZX0sICR7dHlwZS5OfT5gIDpcbiAgICAgICAgICAgIHR5cGUuaXRlbVR5cGUua2luZCA9PT0gJ3ZhbHVlJyA/ICdhcnJheScgOiBgYXJyYXk8JHtpdGVtVHlwZX0+YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZS5raW5kO1xuICAgIH1cbn1cblxuY29uc3QgdmFsdWVNZW1iZXJUeXBlcyA9IFtcbiAgICBOdWxsVHlwZSxcbiAgICBOdW1iZXJUeXBlLFxuICAgIFN0cmluZ1R5cGUsXG4gICAgQm9vbGVhblR5cGUsXG4gICAgQ29sb3JUeXBlLFxuICAgIEZvcm1hdHRlZFR5cGUsXG4gICAgT2JqZWN0VHlwZSxcbiAgICBhcnJheShWYWx1ZVR5cGUpLFxuICAgIEltYWdlVHlwZVxuXTtcblxuLyoqXG4gKiBSZXR1cm5zIG51bGwgaWYgYHRgIGlzIGEgc3VidHlwZSBvZiBgZXhwZWN0ZWRgOyBvdGhlcndpc2UgcmV0dXJucyBhblxuICogZXJyb3IgbWVzc2FnZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1N1YnR5cGUoZXhwZWN0ZWQ6IFR5cGUsIHQ6IFR5cGUpOiA/c3RyaW5nIHtcbiAgICBpZiAodC5raW5kID09PSAnZXJyb3InKSB7XG4gICAgICAgIC8vIEVycm9yIGlzIGEgc3VidHlwZSBvZiBldmVyeSB0eXBlXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQua2luZCA9PT0gJ2FycmF5Jykge1xuICAgICAgICBpZiAodC5raW5kID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAoKHQuTiA9PT0gMCAmJiB0Lml0ZW1UeXBlLmtpbmQgPT09ICd2YWx1ZScpIHx8ICFjaGVja1N1YnR5cGUoZXhwZWN0ZWQuaXRlbVR5cGUsIHQuaXRlbVR5cGUpKSAmJlxuICAgICAgICAgICAgKHR5cGVvZiBleHBlY3RlZC5OICE9PSAnbnVtYmVyJyB8fCBleHBlY3RlZC5OID09PSB0Lk4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQua2luZCA9PT0gdC5raW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQua2luZCA9PT0gJ3ZhbHVlJykge1xuICAgICAgICBmb3IgKGNvbnN0IG1lbWJlclR5cGUgb2YgdmFsdWVNZW1iZXJUeXBlcykge1xuICAgICAgICAgICAgaWYgKCFjaGVja1N1YnR5cGUobWVtYmVyVHlwZSwgdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBgRXhwZWN0ZWQgJHt0b1N0cmluZyhleHBlY3RlZCl9IGJ1dCBmb3VuZCAke3RvU3RyaW5nKHQpfSBpbnN0ZWFkLmA7XG59XG4iLCIvLyAoYykgRGVhbiBNY05hbWVlIDxkZWFuQGdtYWlsLmNvbT4sIDIwMTIuXG4vL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RlYW5tL2Nzcy1jb2xvci1wYXJzZXItanNcbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HU1xuLy8gSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yL1xudmFyIGtDU1NDb2xvclRhYmxlID0ge1xuICBcInRyYW5zcGFyZW50XCI6IFswLDAsMCwwXSwgXCJhbGljZWJsdWVcIjogWzI0MCwyNDgsMjU1LDFdLFxuICBcImFudGlxdWV3aGl0ZVwiOiBbMjUwLDIzNSwyMTUsMV0sIFwiYXF1YVwiOiBbMCwyNTUsMjU1LDFdLFxuICBcImFxdWFtYXJpbmVcIjogWzEyNywyNTUsMjEyLDFdLCBcImF6dXJlXCI6IFsyNDAsMjU1LDI1NSwxXSxcbiAgXCJiZWlnZVwiOiBbMjQ1LDI0NSwyMjAsMV0sIFwiYmlzcXVlXCI6IFsyNTUsMjI4LDE5NiwxXSxcbiAgXCJibGFja1wiOiBbMCwwLDAsMV0sIFwiYmxhbmNoZWRhbG1vbmRcIjogWzI1NSwyMzUsMjA1LDFdLFxuICBcImJsdWVcIjogWzAsMCwyNTUsMV0sIFwiYmx1ZXZpb2xldFwiOiBbMTM4LDQzLDIyNiwxXSxcbiAgXCJicm93blwiOiBbMTY1LDQyLDQyLDFdLCBcImJ1cmx5d29vZFwiOiBbMjIyLDE4NCwxMzUsMV0sXG4gIFwiY2FkZXRibHVlXCI6IFs5NSwxNTgsMTYwLDFdLCBcImNoYXJ0cmV1c2VcIjogWzEyNywyNTUsMCwxXSxcbiAgXCJjaG9jb2xhdGVcIjogWzIxMCwxMDUsMzAsMV0sIFwiY29yYWxcIjogWzI1NSwxMjcsODAsMV0sXG4gIFwiY29ybmZsb3dlcmJsdWVcIjogWzEwMCwxNDksMjM3LDFdLCBcImNvcm5zaWxrXCI6IFsyNTUsMjQ4LDIyMCwxXSxcbiAgXCJjcmltc29uXCI6IFsyMjAsMjAsNjAsMV0sIFwiY3lhblwiOiBbMCwyNTUsMjU1LDFdLFxuICBcImRhcmtibHVlXCI6IFswLDAsMTM5LDFdLCBcImRhcmtjeWFuXCI6IFswLDEzOSwxMzksMV0sXG4gIFwiZGFya2dvbGRlbnJvZFwiOiBbMTg0LDEzNCwxMSwxXSwgXCJkYXJrZ3JheVwiOiBbMTY5LDE2OSwxNjksMV0sXG4gIFwiZGFya2dyZWVuXCI6IFswLDEwMCwwLDFdLCBcImRhcmtncmV5XCI6IFsxNjksMTY5LDE2OSwxXSxcbiAgXCJkYXJra2hha2lcIjogWzE4OSwxODMsMTA3LDFdLCBcImRhcmttYWdlbnRhXCI6IFsxMzksMCwxMzksMV0sXG4gIFwiZGFya29saXZlZ3JlZW5cIjogWzg1LDEwNyw0NywxXSwgXCJkYXJrb3JhbmdlXCI6IFsyNTUsMTQwLDAsMV0sXG4gIFwiZGFya29yY2hpZFwiOiBbMTUzLDUwLDIwNCwxXSwgXCJkYXJrcmVkXCI6IFsxMzksMCwwLDFdLFxuICBcImRhcmtzYWxtb25cIjogWzIzMywxNTAsMTIyLDFdLCBcImRhcmtzZWFncmVlblwiOiBbMTQzLDE4OCwxNDMsMV0sXG4gIFwiZGFya3NsYXRlYmx1ZVwiOiBbNzIsNjEsMTM5LDFdLCBcImRhcmtzbGF0ZWdyYXlcIjogWzQ3LDc5LDc5LDFdLFxuICBcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LDc5LDc5LDFdLCBcImRhcmt0dXJxdW9pc2VcIjogWzAsMjA2LDIwOSwxXSxcbiAgXCJkYXJrdmlvbGV0XCI6IFsxNDgsMCwyMTEsMV0sIFwiZGVlcHBpbmtcIjogWzI1NSwyMCwxNDcsMV0sXG4gIFwiZGVlcHNreWJsdWVcIjogWzAsMTkxLDI1NSwxXSwgXCJkaW1ncmF5XCI6IFsxMDUsMTA1LDEwNSwxXSxcbiAgXCJkaW1ncmV5XCI6IFsxMDUsMTA1LDEwNSwxXSwgXCJkb2RnZXJibHVlXCI6IFszMCwxNDQsMjU1LDFdLFxuICBcImZpcmVicmlja1wiOiBbMTc4LDM0LDM0LDFdLCBcImZsb3JhbHdoaXRlXCI6IFsyNTUsMjUwLDI0MCwxXSxcbiAgXCJmb3Jlc3RncmVlblwiOiBbMzQsMTM5LDM0LDFdLCBcImZ1Y2hzaWFcIjogWzI1NSwwLDI1NSwxXSxcbiAgXCJnYWluc2Jvcm9cIjogWzIyMCwyMjAsMjIwLDFdLCBcImdob3N0d2hpdGVcIjogWzI0OCwyNDgsMjU1LDFdLFxuICBcImdvbGRcIjogWzI1NSwyMTUsMCwxXSwgXCJnb2xkZW5yb2RcIjogWzIxOCwxNjUsMzIsMV0sXG4gIFwiZ3JheVwiOiBbMTI4LDEyOCwxMjgsMV0sIFwiZ3JlZW5cIjogWzAsMTI4LDAsMV0sXG4gIFwiZ3JlZW55ZWxsb3dcIjogWzE3MywyNTUsNDcsMV0sIFwiZ3JleVwiOiBbMTI4LDEyOCwxMjgsMV0sXG4gIFwiaG9uZXlkZXdcIjogWzI0MCwyNTUsMjQwLDFdLCBcImhvdHBpbmtcIjogWzI1NSwxMDUsMTgwLDFdLFxuICBcImluZGlhbnJlZFwiOiBbMjA1LDkyLDkyLDFdLCBcImluZGlnb1wiOiBbNzUsMCwxMzAsMV0sXG4gIFwiaXZvcnlcIjogWzI1NSwyNTUsMjQwLDFdLCBcImtoYWtpXCI6IFsyNDAsMjMwLDE0MCwxXSxcbiAgXCJsYXZlbmRlclwiOiBbMjMwLDIzMCwyNTAsMV0sIFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LDI0MCwyNDUsMV0sXG4gIFwibGF3bmdyZWVuXCI6IFsxMjQsMjUyLDAsMV0sIFwibGVtb25jaGlmZm9uXCI6IFsyNTUsMjUwLDIwNSwxXSxcbiAgXCJsaWdodGJsdWVcIjogWzE3MywyMTYsMjMwLDFdLCBcImxpZ2h0Y29yYWxcIjogWzI0MCwxMjgsMTI4LDFdLFxuICBcImxpZ2h0Y3lhblwiOiBbMjI0LDI1NSwyNTUsMV0sIFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwyNTAsMjEwLDFdLFxuICBcImxpZ2h0Z3JheVwiOiBbMjExLDIxMSwyMTEsMV0sIFwibGlnaHRncmVlblwiOiBbMTQ0LDIzOCwxNDQsMV0sXG4gIFwibGlnaHRncmV5XCI6IFsyMTEsMjExLDIxMSwxXSwgXCJsaWdodHBpbmtcIjogWzI1NSwxODIsMTkzLDFdLFxuICBcImxpZ2h0c2FsbW9uXCI6IFsyNTUsMTYwLDEyMiwxXSwgXCJsaWdodHNlYWdyZWVuXCI6IFszMiwxNzgsMTcwLDFdLFxuICBcImxpZ2h0c2t5Ymx1ZVwiOiBbMTM1LDIwNiwyNTAsMV0sIFwibGlnaHRzbGF0ZWdyYXlcIjogWzExOSwxMzYsMTUzLDFdLFxuICBcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksMTM2LDE1MywxXSwgXCJsaWdodHN0ZWVsYmx1ZVwiOiBbMTc2LDE5NiwyMjIsMV0sXG4gIFwibGlnaHR5ZWxsb3dcIjogWzI1NSwyNTUsMjI0LDFdLCBcImxpbWVcIjogWzAsMjU1LDAsMV0sXG4gIFwibGltZWdyZWVuXCI6IFs1MCwyMDUsNTAsMV0sIFwibGluZW5cIjogWzI1MCwyNDAsMjMwLDFdLFxuICBcIm1hZ2VudGFcIjogWzI1NSwwLDI1NSwxXSwgXCJtYXJvb25cIjogWzEyOCwwLDAsMV0sXG4gIFwibWVkaXVtYXF1YW1hcmluZVwiOiBbMTAyLDIwNSwxNzAsMV0sIFwibWVkaXVtYmx1ZVwiOiBbMCwwLDIwNSwxXSxcbiAgXCJtZWRpdW1vcmNoaWRcIjogWzE4Niw4NSwyMTEsMV0sIFwibWVkaXVtcHVycGxlXCI6IFsxNDcsMTEyLDIxOSwxXSxcbiAgXCJtZWRpdW1zZWFncmVlblwiOiBbNjAsMTc5LDExMywxXSwgXCJtZWRpdW1zbGF0ZWJsdWVcIjogWzEyMywxMDQsMjM4LDFdLFxuICBcIm1lZGl1bXNwcmluZ2dyZWVuXCI6IFswLDI1MCwxNTQsMV0sIFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwyMDksMjA0LDFdLFxuICBcIm1lZGl1bXZpb2xldHJlZFwiOiBbMTk5LDIxLDEzMywxXSwgXCJtaWRuaWdodGJsdWVcIjogWzI1LDI1LDExMiwxXSxcbiAgXCJtaW50Y3JlYW1cIjogWzI0NSwyNTUsMjUwLDFdLCBcIm1pc3R5cm9zZVwiOiBbMjU1LDIyOCwyMjUsMV0sXG4gIFwibW9jY2FzaW5cIjogWzI1NSwyMjgsMTgxLDFdLCBcIm5hdmFqb3doaXRlXCI6IFsyNTUsMjIyLDE3MywxXSxcbiAgXCJuYXZ5XCI6IFswLDAsMTI4LDFdLCBcIm9sZGxhY2VcIjogWzI1MywyNDUsMjMwLDFdLFxuICBcIm9saXZlXCI6IFsxMjgsMTI4LDAsMV0sIFwib2xpdmVkcmFiXCI6IFsxMDcsMTQyLDM1LDFdLFxuICBcIm9yYW5nZVwiOiBbMjU1LDE2NSwwLDFdLCBcIm9yYW5nZXJlZFwiOiBbMjU1LDY5LDAsMV0sXG4gIFwib3JjaGlkXCI6IFsyMTgsMTEyLDIxNCwxXSwgXCJwYWxlZ29sZGVucm9kXCI6IFsyMzgsMjMyLDE3MCwxXSxcbiAgXCJwYWxlZ3JlZW5cIjogWzE1MiwyNTEsMTUyLDFdLCBcInBhbGV0dXJxdW9pc2VcIjogWzE3NSwyMzgsMjM4LDFdLFxuICBcInBhbGV2aW9sZXRyZWRcIjogWzIxOSwxMTIsMTQ3LDFdLCBcInBhcGF5YXdoaXBcIjogWzI1NSwyMzksMjEzLDFdLFxuICBcInBlYWNocHVmZlwiOiBbMjU1LDIxOCwxODUsMV0sIFwicGVydVwiOiBbMjA1LDEzMyw2MywxXSxcbiAgXCJwaW5rXCI6IFsyNTUsMTkyLDIwMywxXSwgXCJwbHVtXCI6IFsyMjEsMTYwLDIyMSwxXSxcbiAgXCJwb3dkZXJibHVlXCI6IFsxNzYsMjI0LDIzMCwxXSwgXCJwdXJwbGVcIjogWzEyOCwwLDEyOCwxXSxcbiAgXCJyZWJlY2NhcHVycGxlXCI6IFsxMDIsNTEsMTUzLDFdLFxuICBcInJlZFwiOiBbMjU1LDAsMCwxXSwgXCJyb3N5YnJvd25cIjogWzE4OCwxNDMsMTQzLDFdLFxuICBcInJveWFsYmx1ZVwiOiBbNjUsMTA1LDIyNSwxXSwgXCJzYWRkbGVicm93blwiOiBbMTM5LDY5LDE5LDFdLFxuICBcInNhbG1vblwiOiBbMjUwLDEyOCwxMTQsMV0sIFwic2FuZHlicm93blwiOiBbMjQ0LDE2NCw5NiwxXSxcbiAgXCJzZWFncmVlblwiOiBbNDYsMTM5LDg3LDFdLCBcInNlYXNoZWxsXCI6IFsyNTUsMjQ1LDIzOCwxXSxcbiAgXCJzaWVubmFcIjogWzE2MCw4Miw0NSwxXSwgXCJzaWx2ZXJcIjogWzE5MiwxOTIsMTkyLDFdLFxuICBcInNreWJsdWVcIjogWzEzNSwyMDYsMjM1LDFdLCBcInNsYXRlYmx1ZVwiOiBbMTA2LDkwLDIwNSwxXSxcbiAgXCJzbGF0ZWdyYXlcIjogWzExMiwxMjgsMTQ0LDFdLCBcInNsYXRlZ3JleVwiOiBbMTEyLDEyOCwxNDQsMV0sXG4gIFwic25vd1wiOiBbMjU1LDI1MCwyNTAsMV0sIFwic3ByaW5nZ3JlZW5cIjogWzAsMjU1LDEyNywxXSxcbiAgXCJzdGVlbGJsdWVcIjogWzcwLDEzMCwxODAsMV0sIFwidGFuXCI6IFsyMTAsMTgwLDE0MCwxXSxcbiAgXCJ0ZWFsXCI6IFswLDEyOCwxMjgsMV0sIFwidGhpc3RsZVwiOiBbMjE2LDE5MSwyMTYsMV0sXG4gIFwidG9tYXRvXCI6IFsyNTUsOTksNzEsMV0sIFwidHVycXVvaXNlXCI6IFs2NCwyMjQsMjA4LDFdLFxuICBcInZpb2xldFwiOiBbMjM4LDEzMCwyMzgsMV0sIFwid2hlYXRcIjogWzI0NSwyMjIsMTc5LDFdLFxuICBcIndoaXRlXCI6IFsyNTUsMjU1LDI1NSwxXSwgXCJ3aGl0ZXNtb2tlXCI6IFsyNDUsMjQ1LDI0NSwxXSxcbiAgXCJ5ZWxsb3dcIjogWzI1NSwyNTUsMCwxXSwgXCJ5ZWxsb3dncmVlblwiOiBbMTU0LDIwNSw1MCwxXX1cblxuZnVuY3Rpb24gY2xhbXBfY3NzX2J5dGUoaSkgeyAgLy8gQ2xhbXAgdG8gaW50ZWdlciAwIC4uIDI1NS5cbiAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cbiAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAyNTUgPyAyNTUgOiBpO1xufVxuXG5mdW5jdGlvbiBjbGFtcF9jc3NfZmxvYXQoZikgeyAgLy8gQ2xhbXAgdG8gZmxvYXQgMC4wIC4uIDEuMC5cbiAgcmV0dXJuIGYgPCAwID8gMCA6IGYgPiAxID8gMSA6IGY7XG59XG5cbmZ1bmN0aW9uIHBhcnNlX2Nzc19pbnQoc3RyKSB7ICAvLyBpbnQgb3IgcGVyY2VudGFnZS5cbiAgaWYgKHN0cltzdHIubGVuZ3RoIC0gMV0gPT09ICclJylcbiAgICByZXR1cm4gY2xhbXBfY3NzX2J5dGUocGFyc2VGbG9hdChzdHIpIC8gMTAwICogMjU1KTtcbiAgcmV0dXJuIGNsYW1wX2Nzc19ieXRlKHBhcnNlSW50KHN0cikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9jc3NfZmxvYXQoc3RyKSB7ICAvLyBmbG9hdCBvciBwZXJjZW50YWdlLlxuICBpZiAoc3RyW3N0ci5sZW5ndGggLSAxXSA9PT0gJyUnKVxuICAgIHJldHVybiBjbGFtcF9jc3NfZmxvYXQocGFyc2VGbG9hdChzdHIpIC8gMTAwKTtcbiAgcmV0dXJuIGNsYW1wX2Nzc19mbG9hdChwYXJzZUZsb2F0KHN0cikpO1xufVxuXG5mdW5jdGlvbiBjc3NfaHVlX3RvX3JnYihtMSwgbTIsIGgpIHtcbiAgaWYgKGggPCAwKSBoICs9IDE7XG4gIGVsc2UgaWYgKGggPiAxKSBoIC09IDE7XG5cbiAgaWYgKGggKiA2IDwgMSkgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogaCAqIDY7XG4gIGlmIChoICogMiA8IDEpIHJldHVybiBtMjtcbiAgaWYgKGggKiAzIDwgMikgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIvMyAtIGgpICogNjtcbiAgcmV0dXJuIG0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNTU0NvbG9yKGNzc19zdHIpIHtcbiAgLy8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlLCBub3QgY29tcGxpYW50LCBidXQgc2hvdWxkIGp1c3QgYmUgbW9yZSBhY2NlcHRpbmcuXG4gIHZhciBzdHIgPSBjc3Nfc3RyLnJlcGxhY2UoLyAvZywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gQ29sb3Iga2V5d29yZHMgKGFuZCB0cmFuc3BhcmVudCkgbG9va3VwLlxuICBpZiAoc3RyIGluIGtDU1NDb2xvclRhYmxlKSByZXR1cm4ga0NTU0NvbG9yVGFibGVbc3RyXS5zbGljZSgpOyAgLy8gZHVwLlxuXG4gIC8vICNhYmMgYW5kICNhYmMxMjMgc3ludGF4LlxuICBpZiAoc3RyWzBdID09PSAnIycpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gNCkge1xuICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXG4gICAgICBpZiAoIShpdiA+PSAwICYmIGl2IDw9IDB4ZmZmKSkgcmV0dXJuIG51bGw7ICAvLyBDb3ZlcnMgTmFOLlxuICAgICAgcmV0dXJuIFsoKGl2ICYgMHhmMDApID4+IDQpIHwgKChpdiAmIDB4ZjAwKSA+PiA4KSxcbiAgICAgICAgICAgICAgKGl2ICYgMHhmMCkgfCAoKGl2ICYgMHhmMCkgPj4gNCksXG4gICAgICAgICAgICAgIChpdiAmIDB4ZikgfCAoKGl2ICYgMHhmKSA8PCA0KSxcbiAgICAgICAgICAgICAgMV07XG4gICAgfSBlbHNlIGlmIChzdHIubGVuZ3RoID09PSA3KSB7XG4gICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cbiAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmZmZmYpKSByZXR1cm4gbnVsbDsgIC8vIENvdmVycyBOYU4uXG4gICAgICByZXR1cm4gWyhpdiAmIDB4ZmYwMDAwKSA+PiAxNixcbiAgICAgICAgICAgICAgKGl2ICYgMHhmZjAwKSA+PiA4LFxuICAgICAgICAgICAgICBpdiAmIDB4ZmYsXG4gICAgICAgICAgICAgIDFdO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG9wID0gc3RyLmluZGV4T2YoJygnKSwgZXAgPSBzdHIuaW5kZXhPZignKScpO1xuICBpZiAob3AgIT09IC0xICYmIGVwICsgMSA9PT0gc3RyLmxlbmd0aCkge1xuICAgIHZhciBmbmFtZSA9IHN0ci5zdWJzdHIoMCwgb3ApO1xuICAgIHZhciBwYXJhbXMgPSBzdHIuc3Vic3RyKG9wKzEsIGVwLShvcCsxKSkuc3BsaXQoJywnKTtcbiAgICB2YXIgYWxwaGEgPSAxOyAgLy8gVG8gYWxsb3cgY2FzZSBmYWxsdGhyb3VnaC5cbiAgICBzd2l0Y2ggKGZuYW1lKSB7XG4gICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDQpIHJldHVybiBudWxsO1xuICAgICAgICBhbHBoYSA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXMucG9wKCkpO1xuICAgICAgICAvLyBGYWxsIHRocm91Z2guXG4gICAgICBjYXNlICdyZ2InOlxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBbcGFyc2VfY3NzX2ludChwYXJhbXNbMF0pLFxuICAgICAgICAgICAgICAgIHBhcnNlX2Nzc19pbnQocGFyYW1zWzFdKSxcbiAgICAgICAgICAgICAgICBwYXJzZV9jc3NfaW50KHBhcmFtc1syXSksXG4gICAgICAgICAgICAgICAgYWxwaGFdO1xuICAgICAgY2FzZSAnaHNsYSc6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgYWxwaGEgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zLnBvcCgpKTtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoLlxuICAgICAgY2FzZSAnaHNsJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgaCA9ICgoKHBhcnNlRmxvYXQocGFyYW1zWzBdKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MDsgIC8vIDAgLi4gMVxuICAgICAgICAvLyBOT1RFKGRlYW5tKTogQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBzL2wgc2hvdWxkIG9ubHkgYmVcbiAgICAgICAgLy8gcGVyY2VudGFnZXMsIGJ1dCB3ZSBkb24ndCBib3RoZXIgYW5kIGxldCBmbG9hdCBvciBwZXJjZW50YWdlLlxuICAgICAgICB2YXIgcyA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXNbMV0pO1xuICAgICAgICB2YXIgbCA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXNbMl0pO1xuICAgICAgICB2YXIgbTIgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgdmFyIG0xID0gbCAqIDIgLSBtMjtcbiAgICAgICAgcmV0dXJuIFtjbGFtcF9jc3NfYnl0ZShjc3NfaHVlX3RvX3JnYihtMSwgbTIsIGgrMS8zKSAqIDI1NSksXG4gICAgICAgICAgICAgICAgY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoKSAqIDI1NSksXG4gICAgICAgICAgICAgICAgY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoLTEvMykgKiAyNTUpLFxuICAgICAgICAgICAgICAgIGFscGhhXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG50cnkgeyBleHBvcnRzLnBhcnNlQ1NTQ29sb3IgPSBwYXJzZUNTU0NvbG9yIH0gY2F0Y2goZSkgeyB9XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BhcnNlQ1NTQ29sb3J9IGZyb20gJ2Nzc2NvbG9ycGFyc2VyJztcblxuLyoqXG4gKiBBbiBSR0JBIGNvbG9yIHZhbHVlLiBDcmVhdGUgaW5zdGFuY2VzIGZyb20gY29sb3Igc3RyaW5ncyB1c2luZyB0aGUgc3RhdGljXG4gKiBtZXRob2QgYENvbG9yLnBhcnNlYC4gVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgUkdCIGNoYW5uZWwgdmFsdWVzIGluIHRoZSByYW5nZVxuICogYFswLCAxXWAsIHByZW11bHRpcGxpZWQgYnkgQS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gciBUaGUgcmVkIGNoYW5uZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gZyBUaGUgZ3JlZW4gY2hhbm5lbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiIFRoZSBibHVlIGNoYW5uZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gYSBUaGUgYWxwaGEgY2hhbm5lbC5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbG9yIHtcbiAgICByOiBudW1iZXI7XG4gICAgZzogbnVtYmVyO1xuICAgIGI6IG51bWJlcjtcbiAgICBhOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIHRoaXMuciA9IHI7XG4gICAgICAgIHRoaXMuZyA9IGc7XG4gICAgICAgIHRoaXMuYiA9IGI7XG4gICAgICAgIHRoaXMuYSA9IGE7XG4gICAgfVxuXG4gICAgc3RhdGljIGJsYWNrOiBDb2xvcjtcbiAgICBzdGF0aWMgd2hpdGU6IENvbG9yO1xuICAgIHN0YXRpYyB0cmFuc3BhcmVudDogQ29sb3I7XG4gICAgc3RhdGljIHJlZDogQ29sb3I7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdmFsaWQgQ1NTIGNvbG9yIHN0cmluZ3MgYW5kIHJldHVybnMgYSBgQ29sb3JgIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIEEgYENvbG9yYCBpbnN0YW5jZSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGlucHV0IGlzIG5vdCBhIHZhbGlkIGNvbG9yIHN0cmluZy5cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UoaW5wdXQ6ID9zdHJpbmcpOiBDb2xvciB8IHZvaWQge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmdiYSA9IHBhcnNlQ1NTQ29sb3IoaW5wdXQpO1xuICAgICAgICBpZiAoIXJnYmEpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICAgICAgcmdiYVswXSAvIDI1NSAqIHJnYmFbM10sXG4gICAgICAgICAgICByZ2JhWzFdIC8gMjU1ICogcmdiYVszXSxcbiAgICAgICAgICAgIHJnYmFbMl0gLyAyNTUgKiByZ2JhWzNdLFxuICAgICAgICAgICAgcmdiYVszXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gUkdCQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2xvciB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFuIFJHQkEgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHB1cnBsZSA9IG5ldyBDb2xvci5wYXJzZSgncHVycGxlJyk7XG4gICAgICogcHVycGxlLnRvU3RyaW5nOyAvLyA9IFwicmdiYSgxMjgsMCwxMjgsMSlcIlxuICAgICAqIHZhciB0cmFuc2x1Y2VudEdyZWVuID0gbmV3IENvbG9yLnBhcnNlKCdyZ2JhKDI2LCAyMDcsIDI2LCAuNzMpJyk7XG4gICAgICogdHJhbnNsdWNlbnRHcmVlbi50b1N0cmluZygpOyAvLyA9IFwicmdiYSgyNiwyMDcsMjYsMC43MylcIlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IFtyLCBnLCBiLCBhXSA9IHRoaXMudG9BcnJheSgpO1xuICAgICAgICByZXR1cm4gYHJnYmEoJHtNYXRoLnJvdW5kKHIpfSwke01hdGgucm91bmQoZyl9LCR7TWF0aC5yb3VuZChiKX0sJHthfSlgO1xuICAgIH1cblxuICAgIHRvQXJyYXkoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICBjb25zdCB7ciwgZywgYiwgYX0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gYSA9PT0gMCA/IFswLCAwLCAwLCAwXSA6IFtcbiAgICAgICAgICAgIHIgKiAyNTUgLyBhLFxuICAgICAgICAgICAgZyAqIDI1NSAvIGEsXG4gICAgICAgICAgICBiICogMjU1IC8gYSxcbiAgICAgICAgICAgIGFcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbkNvbG9yLmJsYWNrID0gbmV3IENvbG9yKDAsIDAsIDAsIDEpO1xuQ29sb3Iud2hpdGUgPSBuZXcgQ29sb3IoMSwgMSwgMSwgMSk7XG5Db2xvci50cmFuc3BhcmVudCA9IG5ldyBDb2xvcigwLCAwLCAwLCAwKTtcbkNvbG9yLnJlZCA9IG5ldyBDb2xvcigxLCAwLCAwLCAxKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29sb3I7XG4iLCIvLyBAZmxvd1xuXG4vLyBGbG93IHR5cGUgZGVjbGFyYXRpb25zIGZvciBJbnRsIGNyaWJiZWQgZnJvbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzEyNzBcblxuZGVjbGFyZSB2YXIgSW50bDoge1xuICAgIENvbGxhdG9yOiBDbGFzczxJbnRsJENvbGxhdG9yPlxufTtcblxuZGVjbGFyZSBjbGFzcyBJbnRsJENvbGxhdG9yIHtcbiAgICBjb25zdHJ1Y3RvciAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IENvbGxhdG9yT3B0aW9uc1xuICAgICk6IEludGwkQ29sbGF0b3I7XG5cbiAgICBzdGF0aWMgKFxuICAgICAgICBsb2NhbGVzPzogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgICAgIG9wdGlvbnM/OiBDb2xsYXRvck9wdGlvbnNcbiAgICApOiBJbnRsJENvbGxhdG9yO1xuXG4gICAgY29tcGFyZSAoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgICByZXNvbHZlZE9wdGlvbnMoKTogYW55O1xufVxuXG50eXBlIENvbGxhdG9yT3B0aW9ucyA9IHtcbiAgICBsb2NhbGVNYXRjaGVyPzogJ2xvb2t1cCcgfCAnYmVzdCBmaXQnLFxuICAgIHVzYWdlPzogJ3NvcnQnIHwgJ3NlYXJjaCcsXG4gICAgc2Vuc2l0aXZpdHk/OiAnYmFzZScgfCAnYWNjZW50JyB8ICdjYXNlJyB8ICd2YXJpYW50JyxcbiAgICBpZ25vcmVQdW5jdHVhdGlvbj86IGJvb2xlYW4sXG4gICAgbnVtZXJpYz86IGJvb2xlYW4sXG4gICAgY2FzZUZpcnN0PzogJ3VwcGVyJyB8ICdsb3dlcicgfCAnZmFsc2UnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbGxhdG9yIHtcbiAgICBsb2NhbGU6IHN0cmluZyB8IG51bGw7XG4gICAgc2Vuc2l0aXZpdHk6ICdiYXNlJyB8ICdhY2NlbnQnIHwgJ2Nhc2UnIHwgJ3ZhcmlhbnQnO1xuICAgIGNvbGxhdG9yOiBJbnRsJENvbGxhdG9yO1xuXG4gICAgY29uc3RydWN0b3IoY2FzZVNlbnNpdGl2ZTogYm9vbGVhbiwgZGlhY3JpdGljU2Vuc2l0aXZlOiBib29sZWFuLCBsb2NhbGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUpXG4gICAgICAgICAgICB0aGlzLnNlbnNpdGl2aXR5ID0gZGlhY3JpdGljU2Vuc2l0aXZlID8gJ3ZhcmlhbnQnIDogJ2Nhc2UnO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnNlbnNpdGl2aXR5ID0gZGlhY3JpdGljU2Vuc2l0aXZlID8gJ2FjY2VudCcgOiAnYmFzZSc7XG5cbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHRoaXMuY29sbGF0b3IgPSBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlIDogW10sXG4gICAgICAgICAgICB7c2Vuc2l0aXZpdHk6IHRoaXMuc2Vuc2l0aXZpdHksIHVzYWdlOiAnc2VhcmNoJ30pO1xuICAgIH1cblxuICAgIGNvbXBhcmUobGhzOiBzdHJpbmcsIHJoczogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGF0b3IuY29tcGFyZShsaHMsIHJocyk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gV2UgY3JlYXRlIGEgQ29sbGF0b3Igd2l0aG91dCBcInVzYWdlOiBzZWFyY2hcIiBiZWNhdXNlIHdlIGRvbid0IHdhbnRcbiAgICAgICAgLy8gdGhlIHNlYXJjaCBvcHRpb25zIGVuY29kZWQgaW4gb3VyIHJlc3VsdCAoZS5nLiBcImVuLXUtY28tc2VhcmNoXCIpXG4gICAgICAgIHJldHVybiBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlIDogW10pXG4gICAgICAgICAgICAucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3V0aWwvY29sb3InO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0dGVkU2VjdGlvbiB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHNjYWxlOiBudW1iZXIgfCBudWxsO1xuICAgIGZvbnRTdGFjazogc3RyaW5nIHwgbnVsbDtcbiAgICB0ZXh0Q29sb3I6IENvbG9yIHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHRleHQ6IHN0cmluZywgc2NhbGU6IG51bWJlciB8IG51bGwsIGZvbnRTdGFjazogc3RyaW5nIHwgbnVsbCwgdGV4dENvbG9yOiBDb2xvciB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICB0aGlzLmZvbnRTdGFjayA9IGZvbnRTdGFjaztcbiAgICAgICAgdGhpcy50ZXh0Q29sb3IgPSB0ZXh0Q29sb3I7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtYXR0ZWQge1xuICAgIHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uPikge1xuICAgICAgICB0aGlzLnNlY3Rpb25zID0gc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21TdHJpbmcodW5mb3JtYXR0ZWQ6IHN0cmluZyk6IEZvcm1hdHRlZCB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkKFtuZXcgRm9ybWF0dGVkU2VjdGlvbih1bmZvcm1hdHRlZCwgbnVsbCwgbnVsbCwgbnVsbCldKTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWN0aW9ucy5tYXAoc2VjdGlvbiA9PiBzZWN0aW9uLnRleHQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiZm9ybWF0XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5zZWN0aW9ucykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHNlY3Rpb24udGV4dCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5mb250U3RhY2spIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW1widGV4dC1mb250XCJdID0gW1wibGl0ZXJhbFwiLCBzZWN0aW9uLmZvbnRTdGFjay5zcGxpdCgnLCcpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uLnNjYWxlKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tcImZvbnQtc2NhbGVcIl0gPSBzZWN0aW9uLnNjYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24udGV4dENvbG9yKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tcInRleHQtY29sb3JcIl0gPSBbXCJyZ2JhXCJdLmNvbmNhdChzZWN0aW9uLnRleHRDb2xvci50b0FycmF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVkSW1hZ2VPcHRpb25zID0ge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhdmFpbGFibGU6IGJvb2xlYW5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc29sdmVkSW1hZ2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhdmFpbGFibGU6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXNvbHZlZEltYWdlT3B0aW9ucykge1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlID0gb3B0aW9ucy5hdmFpbGFibGU7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVN0cmluZyhvcHRpb25zOiBSZXNvbHZlZEltYWdlT3B0aW9ucyk6IFJlc29sdmVkSW1hZ2Uge1xuICAgICAgICByZXR1cm4gbmV3IFJlc29sdmVkSW1hZ2Uob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIHJldHVybiBbXCJpbWFnZVwiLCB0aGlzLm5hbWVdO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL3V0aWwvY29sb3InO1xuaW1wb3J0IENvbGxhdG9yIGZyb20gJy4vdHlwZXMvY29sbGF0b3InO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcbmltcG9ydCB7TnVsbFR5cGUsIE51bWJlclR5cGUsIFN0cmluZ1R5cGUsIEJvb2xlYW5UeXBlLCBDb2xvclR5cGUsIE9iamVjdFR5cGUsIFZhbHVlVHlwZSwgQ29sbGF0b3JUeXBlLCBGb3JtYXR0ZWRUeXBlLCBJbWFnZVR5cGUsIGFycmF5fSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSR0JBKHI6IG1peGVkLCBnOiBtaXhlZCwgYjogbWl4ZWQsIGE/OiBtaXhlZCk6ID9zdHJpbmcge1xuICAgIGlmICghKFxuICAgICAgICB0eXBlb2YgciA9PT0gJ251bWJlcicgJiYgciA+PSAwICYmIHIgPD0gMjU1ICYmXG4gICAgICAgIHR5cGVvZiBnID09PSAnbnVtYmVyJyAmJiBnID49IDAgJiYgZyA8PSAyNTUgJiZcbiAgICAgICAgdHlwZW9mIGIgPT09ICdudW1iZXInICYmIGIgPj0gMCAmJiBiIDw9IDI1NVxuICAgICkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgYSA9PT0gJ251bWJlcicgPyBbciwgZywgYiwgYV0gOiBbciwgZywgYl07XG4gICAgICAgIHJldHVybiBgSW52YWxpZCByZ2JhIHZhbHVlIFske3ZhbHVlLmpvaW4oJywgJyl9XTogJ3InLCAnZycsIGFuZCAnYicgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NS5gO1xuICAgIH1cblxuICAgIGlmICghKFxuICAgICAgICB0eXBlb2YgYSA9PT0gJ3VuZGVmaW5lZCcgfHwgKHR5cGVvZiBhID09PSAnbnVtYmVyJyAmJiBhID49IDAgJiYgYSA8PSAxKVxuICAgICkpIHtcbiAgICAgICAgcmV0dXJuIGBJbnZhbGlkIHJnYmEgdmFsdWUgWyR7W3IsIGcsIGIsIGFdLmpvaW4oJywgJyl9XTogJ2EnIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFZhbHVlID0gbnVsbCB8IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBDb2xvciB8IENvbGxhdG9yIHwgRm9ybWF0dGVkIHwgUmVzb2x2ZWRJbWFnZSB8ICRSZWFkT25seUFycmF5PFZhbHVlPiB8IHsgK1tzdHJpbmddOiBWYWx1ZSB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbHVlKG1peGVkOiBtaXhlZCk6IGJvb2xlYW4ge1xuICAgIGlmIChtaXhlZCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtaXhlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWl4ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtaXhlZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChtaXhlZCBpbnN0YW5jZW9mIENvbG9yKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAobWl4ZWQgaW5zdGFuY2VvZiBDb2xsYXRvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1peGVkIGluc3RhbmNlb2YgRm9ybWF0dGVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAobWl4ZWQgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtaXhlZCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1peGVkKSB7XG4gICAgICAgICAgICBpZiAoIWlzVmFsdWUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWl4ZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1peGVkKSB7XG4gICAgICAgICAgICBpZiAoIWlzVmFsdWUobWl4ZWRba2V5XSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVPZih2YWx1ZTogVmFsdWUpOiBUeXBlIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE51bGxUeXBlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gU3RyaW5nVHlwZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuVHlwZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlclR5cGU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbG9yKSB7XG4gICAgICAgIHJldHVybiBDb2xvclR5cGU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbGxhdG9yKSB7XG4gICAgICAgIHJldHVybiBDb2xsYXRvclR5cGU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICByZXR1cm4gRm9ybWF0dGVkVHlwZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVzb2x2ZWRJbWFnZSkge1xuICAgICAgICByZXR1cm4gSW1hZ2VUeXBlO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXRlbVR5cGU6ID9UeXBlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IHR5cGVPZihpdGVtKTtcbiAgICAgICAgICAgIGlmICghaXRlbVR5cGUpIHtcbiAgICAgICAgICAgICAgICBpdGVtVHlwZSA9IHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlID09PSB0KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1UeXBlID0gVmFsdWVUeXBlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5KGl0ZW1UeXBlIHx8IFZhbHVlVHlwZSwgbGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyk7XG4gICAgICAgIHJldHVybiBPYmplY3RUeXBlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBWYWx1ZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29sb3IgfHwgdmFsdWUgaW5zdGFuY2VvZiBGb3JtYXR0ZWQgfHwgdmFsdWUgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxufVxuXG5leHBvcnQge0NvbG9yLCBDb2xsYXRvcn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge2lzVmFsdWUsIHR5cGVPZiwgQ29sb3J9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9ICBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcblxuY2xhc3MgTGl0ZXJhbCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgdmFsdWU6IFZhbHVlO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgdmFsdWU6IFZhbHVlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgJ2xpdGVyYWwnIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcblxuICAgICAgICBpZiAoIWlzVmFsdWUoYXJnc1sxXSkpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgaW52YWxpZCB2YWx1ZWApO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGFyZ3NbMV06IGFueSk7XG4gICAgICAgIGxldCB0eXBlID0gdHlwZU9mKHZhbHVlKTtcblxuICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGluZmVyIHRoZSBpdGVtIHR5cGUgaWYgcG9zc2libGUgZm9yIHplcm8tbGVuZ3RoIGFycmF5c1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIHR5cGUuTiA9PT0gMCAmJlxuICAgICAgICAgICAgZXhwZWN0ZWQgJiZcbiAgICAgICAgICAgIGV4cGVjdGVkLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICh0eXBlb2YgZXhwZWN0ZWQuTiAhPT0gJ251bWJlcicgfHwgZXhwZWN0ZWQuTiA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0eXBlID0gZXhwZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IExpdGVyYWwodHlwZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoKSB7fVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdhcnJheScgfHwgdGhpcy50eXBlLmtpbmQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gW1wibGl0ZXJhbFwiLCB0aGlzLnZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgICAgIC8vIENvbnN0YW50LWZvbGRpbmcgY2FuIGdlbmVyYXRlIExpdGVyYWwgZXhwcmVzc2lvbnMgdGhhdCB5b3VcbiAgICAgICAgICAgIC8vIGNvdWxkbid0IGFjdHVhbGx5IGdlbmVyYXRlIHdpdGggYSBcImxpdGVyYWxcIiBleHByZXNzaW9uLFxuICAgICAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBpbXBsZW1lbnQgYW4gZXF1aXZhbGVudCBzZXJpYWxpemF0aW9uIGhlcmVcbiAgICAgICAgICAgIHJldHVybiBbXCJyZ2JhXCJdLmNvbmNhdCh0aGlzLnZhbHVlLnRvQXJyYXkoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgLy8gU2FtZSBhcyBDb2xvclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuc2VyaWFsaXplKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQodGhpcy52YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnYm9vbGVhbicpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnZhbHVlOiBhbnkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXRlcmFsO1xuIiwiLy8gQGZsb3dcblxuY2xhc3MgUnVudGltZUVycm9yIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmFtZSA9ICdFeHByZXNzaW9uRXZhbHVhdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSdW50aW1lRXJyb3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7XG4gICAgT2JqZWN0VHlwZSxcbiAgICBWYWx1ZVR5cGUsXG4gICAgU3RyaW5nVHlwZSxcbiAgICBOdW1iZXJUeXBlLFxuICAgIEJvb2xlYW5UeXBlLFxuICAgIGNoZWNrU3VidHlwZSxcbiAgICB0b1N0cmluZyxcbiAgICBhcnJheVxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgdHlwZXMgPSB7XG4gICAgc3RyaW5nOiBTdHJpbmdUeXBlLFxuICAgIG51bWJlcjogTnVtYmVyVHlwZSxcbiAgICBib29sZWFuOiBCb29sZWFuVHlwZSxcbiAgICBvYmplY3Q6IE9iamVjdFR5cGVcbn07XG5cbmNsYXNzIEFzc2VydGlvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgYXJnczogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBhcmdzOiBBcnJheTxFeHByZXNzaW9uPikge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5gKTtcblxuICAgICAgICBsZXQgaSA9IDE7XG4gICAgICAgIGxldCB0eXBlO1xuXG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IChhcmdzWzBdOiBhbnkpO1xuICAgICAgICBpZiAobmFtZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgbGV0IGl0ZW1UeXBlO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBhcmdzWzFdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycgfHwgISh0eXBlIGluIHR5cGVzKSB8fCB0eXBlID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ1RoZSBpdGVtIHR5cGUgYXJndW1lbnQgb2YgXCJhcnJheVwiIG11c3QgYmUgb25lIG9mIHN0cmluZywgbnVtYmVyLCBib29sZWFuJywgMSk7XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUgPSB0eXBlc1t0eXBlXTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1UeXBlID0gVmFsdWVUeXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgTjtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJnc1syXSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGFyZ3NbMl0gIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXSAhPT0gTWF0aC5mbG9vcihhcmdzWzJdKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ1RoZSBsZW5ndGggYXJndW1lbnQgdG8gXCJhcnJheVwiIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxpdGVyYWwnLCAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgTiA9IGFyZ3NbMl07XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0eXBlID0gYXJyYXkoaXRlbVR5cGUsIE4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzZXJ0KHR5cGVzW25hbWVdLCBuYW1lKTtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlc1tuYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFtdO1xuICAgICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCBpLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBwYXJzZWQucHVzaChpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEFzc2VydGlvbih0eXBlLCBwYXJzZWQpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5hcmdzW2ldLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGNoZWNrU3VidHlwZSh0aGlzLnR5cGUsIHR5cGVPZih2YWx1ZSkpO1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gdGhpcy5hcmdzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlICR7dG9TdHJpbmcodGhpcy50eXBlKX0sIGJ1dCBmb3VuZCAke3RvU3RyaW5nKHR5cGVPZih2YWx1ZSkpfSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCk6IEFycmF5PFZhbHVlIHwgdm9pZD4ge1xuICAgICAgICByZXR1cm4gW10uY29uY2F0KC4uLnRoaXMuYXJncy5tYXAoKGFyZykgPT4gYXJnLnBvc3NpYmxlT3V0cHV0cygpKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbdHlwZS5raW5kXTtcbiAgICAgICAgaWYgKHR5cGUua2luZCA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSB0eXBlLml0ZW1UeXBlO1xuICAgICAgICAgICAgaWYgKGl0ZW1UeXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUua2luZCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICBpdGVtVHlwZS5raW5kID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goaXRlbVR5cGUua2luZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgTiA9IHR5cGUuTjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIE4gPT09ICdudW1iZXInIHx8IHRoaXMuYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChOKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQuY29uY2F0KHRoaXMuYXJncy5tYXAoYXJnID0+IGFyZy5zZXJpYWxpemUoKSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXNzZXJ0aW9uO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtOdW1iZXJUeXBlLCBWYWx1ZVR5cGUsIEZvcm1hdHRlZFR5cGUsIGFycmF5LCBTdHJpbmdUeXBlLCBDb2xvclR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBGb3JtYXR0ZWQsIHtGb3JtYXR0ZWRTZWN0aW9ufSBmcm9tICcuLi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IHt0b1N0cmluZ30gZnJvbSAnLi4vdmFsdWVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIEZvcm1hdHRlZFNlY3Rpb25FeHByZXNzaW9uID0ge1xuICAgIHRleHQ6IEV4cHJlc3Npb24sXG4gICAgc2NhbGU6IEV4cHJlc3Npb24gfCBudWxsO1xuICAgIGZvbnQ6IEV4cHJlc3Npb24gfCBudWxsO1xuICAgIHRleHRDb2xvcjogRXhwcmVzc2lvbiB8IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdEV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uRXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3RvcihzZWN0aW9uczogQXJyYXk8Rm9ybWF0dGVkU2VjdGlvbkV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IEZvcm1hdHRlZFR5cGU7XG4gICAgICAgIHRoaXMuc2VjdGlvbnMgPSBzZWN0aW9ucztcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IHR3byBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGFyZ3MubGVuZ3RoIC0gMSkgJSAyICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbnM6IEFycmF5PEZvcm1hdHRlZFNlY3Rpb25FeHByZXNzaW9uPiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoIC0gMTsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCAxLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCF0ZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGtpbmQgPSB0ZXh0LnR5cGUua2luZDtcbiAgICAgICAgICAgIGlmIChraW5kICE9PSAnc3RyaW5nJyAmJiBraW5kICE9PSAndmFsdWUnICYmIGtpbmQgIT09ICdudWxsJylcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRm9ybWF0dGVkIHRleHQgdHlwZSBtdXN0IGJlICdzdHJpbmcnLCAndmFsdWUnLCBvciAnbnVsbCcuYCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoYXJnc1tpICsgMV06IGFueSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRm9ybWF0IG9wdGlvbnMgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QuYCk7XG5cbiAgICAgICAgICAgIGxldCBzY2FsZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAob3B0aW9uc1snZm9udC1zY2FsZSddKSB7XG4gICAgICAgICAgICAgICAgc2NhbGUgPSBjb250ZXh0LnBhcnNlKG9wdGlvbnNbJ2ZvbnQtc2NhbGUnXSwgMSwgTnVtYmVyVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzY2FsZSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBmb250ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChvcHRpb25zWyd0ZXh0LWZvbnQnXSkge1xuICAgICAgICAgICAgICAgIGZvbnQgPSBjb250ZXh0LnBhcnNlKG9wdGlvbnNbJ3RleHQtZm9udCddLCAxLCBhcnJheShTdHJpbmdUeXBlKSk7XG4gICAgICAgICAgICAgICAgaWYgKCFmb250KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHRleHRDb2xvciA9IG51bGw7XG4gICAgICAgICAgICBpZiAob3B0aW9uc1sndGV4dC1jb2xvciddKSB7XG4gICAgICAgICAgICAgICAgdGV4dENvbG9yID0gY29udGV4dC5wYXJzZShvcHRpb25zWyd0ZXh0LWNvbG9yJ10sIDEsIENvbG9yVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0ZXh0Q29sb3IpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VjdGlvbnMucHVzaCh7dGV4dCwgc2NhbGUsIGZvbnQsIHRleHRDb2xvcn0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtYXRFeHByZXNzaW9uKHNlY3Rpb25zKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkKFxuICAgICAgICAgICAgdGhpcy5zZWN0aW9ucy5tYXAoc2VjdGlvbiA9PlxuICAgICAgICAgICAgICAgIG5ldyBGb3JtYXR0ZWRTZWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0b1N0cmluZyhzZWN0aW9uLnRleHQuZXZhbHVhdGUoY3R4KSksXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2NhbGUgPyBzZWN0aW9uLnNjYWxlLmV2YWx1YXRlKGN0eCkgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLmZvbnQgPyBzZWN0aW9uLmZvbnQuZXZhbHVhdGUoY3R4KS5qb2luKCcsJykgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnRleHRDb2xvciA/IHNlY3Rpb24udGV4dENvbG9yLmV2YWx1YXRlKGN0eCkgOiBudWxsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuc2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGZuKHNlY3Rpb24udGV4dCk7XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5zY2FsZSkge1xuICAgICAgICAgICAgICAgIGZuKHNlY3Rpb24uc2NhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24uZm9udCkge1xuICAgICAgICAgICAgICAgIGZuKHNlY3Rpb24uZm9udCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi50ZXh0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBmbihzZWN0aW9uLnRleHRDb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgIC8vIFRlY2huaWNhbGx5IHRoZSBjb21iaW5hdG9yaWMgc2V0IG9mIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyBVc3VhbGx5LCB0aGlzLnRleHQgd2lsbCBiZSB1bmRlZmluZWQgYW55d2F5XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJmb3JtYXRcIl07XG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLnNlY3Rpb25zKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goc2VjdGlvbi50ZXh0LnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIGlmIChzZWN0aW9uLnNjYWxlKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1snZm9udC1zY2FsZSddID0gc2VjdGlvbi5zY2FsZS5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uLmZvbnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zWyd0ZXh0LWZvbnQnXSA9IHNlY3Rpb24uZm9udC5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uLnRleHRDb2xvcikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbJ3RleHQtY29sb3InXSA9IHNlY3Rpb24udGV4dENvbG9yLnNlcmlhbGl6ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7SW1hZ2VUeXBlLCBTdHJpbmdUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1hZ2VFeHByZXNzaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IEltYWdlVHlwZTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCB0d28gYXJndW1lbnRzLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgU3RyaW5nVHlwZSk7XG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGNvbnRleHQuZXJyb3IoYE5vIGltYWdlIG5hbWUgcHJvdmlkZWQuYCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBJbWFnZUV4cHJlc3Npb24obmFtZSk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBldmFsdWF0ZWRJbWFnZU5hbWUgPSB0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIGxldCBhdmFpbGFibGUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3R4LmF2YWlsYWJsZUltYWdlcyAmJiBjdHguYXZhaWxhYmxlSW1hZ2VzLmluZGV4T2YoZXZhbHVhdGVkSW1hZ2VOYW1lKSA+IC0xKSB7XG4gICAgICAgICAgICBhdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtuYW1lOiBldmFsdWF0ZWRJbWFnZU5hbWUsIGF2YWlsYWJsZX07XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgIC8vIFRoZSBvdXRwdXQgb2YgaW1hZ2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgaW1hZ2VzIGluIHRoZSBldmFsdWF0aW9uIGNvbnRleHRcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIFtcImltYWdlXCIsIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtCb29sZWFuVHlwZSwgQ29sb3JUeXBlLCBOdW1iZXJUeXBlLCBTdHJpbmdUeXBlLCBWYWx1ZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7Q29sb3IsIHRvU3RyaW5nIGFzIHZhbHVlVG9TdHJpbmcsIHZhbGlkYXRlUkdCQX0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgRm9ybWF0RXhwcmVzc2lvbiBmcm9tICcuLi9kZWZpbml0aW9ucy9mb3JtYXQnO1xuaW1wb3J0IEltYWdlRXhwcmVzc2lvbiBmcm9tICcuLi9kZWZpbml0aW9ucy9pbWFnZSc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgdHlwZXMgPSB7XG4gICAgJ3RvLWJvb2xlYW4nOiBCb29sZWFuVHlwZSxcbiAgICAndG8tY29sb3InOiBDb2xvclR5cGUsXG4gICAgJ3RvLW51bWJlcic6IE51bWJlclR5cGUsXG4gICAgJ3RvLXN0cmluZyc6IFN0cmluZ1R5cGVcbn07XG5cbi8qKlxuICogU3BlY2lhbCBmb3JtIGZvciBlcnJvci1jb2FsZXNjaW5nIGNvZXJjaW9uIGV4cHJlc3Npb25zIFwidG8tbnVtYmVyXCIsXG4gKiBcInRvLWNvbG9yXCIuICBTaW5jZSB0aGVzZSBjb2VyY2lvbnMgY2FuIGZhaWwgYXQgcnVudGltZSwgdGhleSBhY2NlcHQgbXVsdGlwbGVcbiAqIGFyZ3VtZW50cywgb25seSBldmFsdWF0aW5nIG9uZSBhdCBhIHRpbWUgdW50aWwgb25lIHN1Y2NlZWRzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvZXJjaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBhcmdzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LmApO1xuXG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IChhcmdzWzBdOiBhbnkpO1xuICAgICAgICBhc3NlcnQodHlwZXNbbmFtZV0sIG5hbWUpO1xuXG4gICAgICAgIGlmICgobmFtZSA9PT0gJ3RvLWJvb2xlYW4nIHx8IG5hbWUgPT09ICd0by1zdHJpbmcnKSAmJiBhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBvbmUgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW25hbWVdO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCBpLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBwYXJzZWQucHVzaChpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IENvZXJjaW9uKHR5cGUsIHBhcnNlZCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5hcmdzWzBdLmV2YWx1YXRlKGN0eCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5raW5kID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICBsZXQgaW5wdXQ7XG4gICAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgICAgIGVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBjdHgucGFyc2VDb2xvcihpbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjKSByZXR1cm4gYztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPCAzIHx8IGlucHV0Lmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gYEludmFsaWQgcmJnYSB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KGlucHV0KX06IGV4cGVjdGVkIGFuIGFycmF5IGNvbnRhaW5pbmcgZWl0aGVyIHRocmVlIG9yIGZvdXIgbnVtZXJpYyB2YWx1ZXMuYDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdmFsaWRhdGVSR0JBKGlucHV0WzBdLCBpbnB1dFsxXSwgaW5wdXRbMl0sIGlucHV0WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKChpbnB1dFswXTogYW55KSAvIDI1NSwgKGlucHV0WzFdOiBhbnkpIC8gMjU1LCAoaW5wdXRbMl06IGFueSkgLyAyNTUsIChpbnB1dFszXTogYW55KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGVycm9yIHx8IGBDb3VsZCBub3QgcGFyc2UgY29sb3IgZnJvbSB2YWx1ZSAnJHt0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gaW5wdXQgOiBTdHJpbmcoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKX0nYCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5hcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBudW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBDb3VsZCBub3QgY29udmVydCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gdG8gbnVtYmVyLmApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5raW5kID09PSAnZm9ybWF0dGVkJykge1xuICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gZXhwbGljaXQgJ3RvLWZvcm1hdHRlZCcgYnV0IHRoaXMgY29lcmNpb24gY2FuIGJlIGltcGxpY2l0bHlcbiAgICAgICAgICAgIC8vIGNyZWF0ZWQgYnkgcHJvcGVydGllcyB0aGF0IGV4cGVjdCB0aGUgJ2Zvcm1hdHRlZCcgdHlwZS5cbiAgICAgICAgICAgIHJldHVybiBGb3JtYXR0ZWQuZnJvbVN0cmluZyh2YWx1ZVRvU3RyaW5nKHRoaXMuYXJnc1swXS5ldmFsdWF0ZShjdHgpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB2YWx1ZVRvU3RyaW5nKHRoaXMuYXJnc1swXS5ldmFsdWF0ZShjdHgpKTtcbiAgICAgICAgICAgIHJldHVybiBSZXNvbHZlZEltYWdlLmZyb21TdHJpbmcoe25hbWUsIGF2YWlsYWJsZTogZmFsc2V9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVRvU3RyaW5nKHRoaXMuYXJnc1swXS5ldmFsdWF0ZShjdHgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5hcmdzLmZvckVhY2goZm4pO1xuICAgIH1cblxuICAgIHBvc3NpYmxlT3V0cHV0cygpOiBBcnJheTxWYWx1ZSB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFtdLmNvbmNhdCguLi50aGlzLmFyZ3MubWFwKChhcmcpID0+IGFyZy5wb3NzaWJsZU91dHB1dHMoKSkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZS5raW5kID09PSAnZm9ybWF0dGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtYXRFeHByZXNzaW9uKFt7dGV4dDogdGhpcy5hcmdzWzBdLCBzY2FsZTogbnVsbCwgZm9udDogbnVsbCwgdGV4dENvbG9yOiBudWxsfV0pLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudHlwZS5raW5kID09PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEltYWdlRXhwcmVzc2lvbih0aGlzLmFyZ3NbMF0pLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtgdG8tJHt0aGlzLnR5cGUua2luZH1gXTtcbiAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb2VyY2lvbjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Q29sb3J9IGZyb20gJy4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtGb3JtYXR0ZWRTZWN0aW9ufSBmcm9tICcuL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgdHlwZSB7R2xvYmFsUHJvcGVydGllcywgRmVhdHVyZSwgRmVhdHVyZVN0YXRlfSBmcm9tICcuL2luZGV4JztcblxuY29uc3QgZ2VvbWV0cnlUeXBlcyA9IFsnVW5rbm93bicsICdQb2ludCcsICdMaW5lU3RyaW5nJywgJ1BvbHlnb24nXTtcblxuY2xhc3MgRXZhbHVhdGlvbkNvbnRleHQge1xuICAgIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXM7XG4gICAgZmVhdHVyZTogP0ZlYXR1cmU7XG4gICAgZmVhdHVyZVN0YXRlOiA/RmVhdHVyZVN0YXRlO1xuICAgIGZvcm1hdHRlZFNlY3Rpb246ID9Gb3JtYXR0ZWRTZWN0aW9uO1xuICAgIGF2YWlsYWJsZUltYWdlczogP0FycmF5PHN0cmluZz47XG5cbiAgICBfcGFyc2VDb2xvckNhY2hlOiB7W3N0cmluZ106ID9Db2xvcn07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxzID0gKG51bGw6IGFueSk7XG4gICAgICAgIHRoaXMuZmVhdHVyZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmVhdHVyZVN0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb3JtYXR0ZWRTZWN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGFyc2VDb2xvckNhY2hlID0ge307XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSW1hZ2VzID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZSAmJiAnaWQnIGluIHRoaXMuZmVhdHVyZSA/IHRoaXMuZmVhdHVyZS5pZCA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2VvbWV0cnlUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlID8gdHlwZW9mIHRoaXMuZmVhdHVyZS50eXBlID09PSAnbnVtYmVyJyA/IGdlb21ldHJ5VHlwZXNbdGhpcy5mZWF0dXJlLnR5cGVdIDogdGhpcy5mZWF0dXJlLnR5cGUgOiBudWxsO1xuICAgIH1cblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZlYXR1cmUgJiYgdGhpcy5mZWF0dXJlLnByb3BlcnRpZXMgfHwge307XG4gICAgfVxuXG4gICAgcGFyc2VDb2xvcihpbnB1dDogc3RyaW5nKTogP0NvbG9yIHtcbiAgICAgICAgbGV0IGNhY2hlZCA9IHRoaXMuX3BhcnNlQ29sb3JDYWNoZVtpbnB1dF07XG4gICAgICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgICAgICBjYWNoZWQgPSB0aGlzLl9wYXJzZUNvbG9yQ2FjaGVbaW5wdXRdID0gQ29sb3IucGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFdmFsdWF0aW9uQ29udGV4dDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dG9TdHJpbmd9IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb24sIEV4cHJlc3Npb25SZWdpc3RyeX0gZnJvbSAnLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi92YWx1ZXMnO1xuXG5leHBvcnQgdHlwZSBWYXJhcmdzID0ge3wgdHlwZTogVHlwZSB8fTtcbnR5cGUgU2lnbmF0dXJlID0gQXJyYXk8VHlwZT4gfCBWYXJhcmdzO1xudHlwZSBFdmFsdWF0ZSA9IChFdmFsdWF0aW9uQ29udGV4dCwgQXJyYXk8RXhwcmVzc2lvbj4pID0+IFZhbHVlO1xudHlwZSBEZWZpbml0aW9uID0gW1R5cGUsIFNpZ25hdHVyZSwgRXZhbHVhdGVdIHxcbiAgICB7fHR5cGU6IFR5cGUsIG92ZXJsb2FkczogQXJyYXk8W1NpZ25hdHVyZSwgRXZhbHVhdGVdPnx9O1xuXG5jbGFzcyBDb21wb3VuZEV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogVHlwZTtcbiAgICBfZXZhbHVhdGU6IEV2YWx1YXRlO1xuICAgIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgc3RhdGljIGRlZmluaXRpb25zOiB7IFtzdHJpbmddOiBEZWZpbml0aW9uIH07XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHR5cGU6IFR5cGUsIGV2YWx1YXRlOiBFdmFsdWF0ZSwgYXJnczogQXJyYXk8RXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdGUgPSBldmFsdWF0ZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmFsdWF0ZShjdHgsIHRoaXMuYXJncyk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIHJldHVybiBbdGhpcy5uYW1lXS5jb25jYXQodGhpcy5hcmdzLm1hcChhcmcgPT4gYXJnLnNlcmlhbGl6ZSgpKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGNvbnN0IG9wOiBzdHJpbmcgPSAoYXJnc1swXTogYW55KTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IENvbXBvdW5kRXhwcmVzc2lvbi5kZWZpbml0aW9uc1tvcF07XG4gICAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFVua25vd24gZXhwcmVzc2lvbiBcIiR7b3B9XCIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uYCwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3cgY2hlY2sgYXJndW1lbnQgdHlwZXMgYWdhaW5zdCBlYWNoIHNpZ25hdHVyZVxuICAgICAgICBjb25zdCB0eXBlID0gQXJyYXkuaXNBcnJheShkZWZpbml0aW9uKSA/XG4gICAgICAgICAgICBkZWZpbml0aW9uWzBdIDogZGVmaW5pdGlvbi50eXBlO1xuXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZU92ZXJsb2FkcyA9IEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikgP1xuICAgICAgICAgICAgW1tkZWZpbml0aW9uWzFdLCBkZWZpbml0aW9uWzJdXV0gOlxuICAgICAgICAgICAgZGVmaW5pdGlvbi5vdmVybG9hZHM7XG5cbiAgICAgICAgY29uc3Qgb3ZlcmxvYWRzID0gYXZhaWxhYmxlT3ZlcmxvYWRzLmZpbHRlcigoW3NpZ25hdHVyZV0pID0+IChcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHNpZ25hdHVyZSkgfHwgLy8gdmFyYWdzXG4gICAgICAgICAgICBzaWduYXR1cmUubGVuZ3RoID09PSBhcmdzLmxlbmd0aCAtIDEgLy8gY29ycmVjdCBwYXJhbSBjb3VudFxuICAgICAgICApKTtcblxuICAgICAgICBsZXQgc2lnbmF0dXJlQ29udGV4dDogUGFyc2luZ0NvbnRleHQgPSAobnVsbDogYW55KTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtwYXJhbXMsIGV2YWx1YXRlXSBvZiBvdmVybG9hZHMpIHtcbiAgICAgICAgICAgIC8vIFVzZSBhIGZyZXNoIGNvbnRleHQgZm9yIGVhY2ggYXR0ZW1wdGVkIHNpZ25hdHVyZSBzbyB0aGF0LCBpZlxuICAgICAgICAgICAgLy8gd2UgZXZlbnR1YWxseSBzdWNjZWVkLCB3ZSBoYXZlbid0IHBvbGx1dGVkIGBjb250ZXh0LmVycm9yc2AuXG4gICAgICAgICAgICBzaWduYXR1cmVDb250ZXh0ID0gbmV3IFBhcnNpbmdDb250ZXh0KGNvbnRleHQucmVnaXN0cnksIGNvbnRleHQucGF0aCwgbnVsbCwgY29udGV4dC5zY29wZSk7XG5cbiAgICAgICAgICAgIC8vIEZpcnN0IHBhcnNlIGFsbCB0aGUgYXJncywgcG90ZW50aWFsbHkgY29lcmNpbmcgdG8gdGhlXG4gICAgICAgICAgICAvLyB0eXBlcyBleHBlY3RlZCBieSB0aGlzIG92ZXJsb2FkLlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJnczogQXJyYXk8RXhwcmVzc2lvbj4gPSBbXTtcbiAgICAgICAgICAgIGxldCBhcmdQYXJzZUZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtcykgP1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaSAtIDFdIDpcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnR5cGU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBzaWduYXR1cmVDb250ZXh0LnBhcnNlKGFyZywgMSArIHBhcnNlZEFyZ3MubGVuZ3RoLCBleHBlY3RlZFR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ1BhcnNlRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlZEFyZ3MucHVzaChwYXJzZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ1BhcnNlRmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgY29lcmNlIGFyZ3Mgb2YgdGhpcyBvdmVybG9hZCB0byBleHBlY3RlZCB0eXBlLCBtb3ZlXG4gICAgICAgICAgICAgICAgLy8gb24gdG8gbmV4dCBvbmUuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gcGFyc2VkQXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlQ29udGV4dC5lcnJvcihgRXhwZWN0ZWQgJHtwYXJhbXMubGVuZ3RofSBhcmd1bWVudHMsIGJ1dCBmb3VuZCAke3BhcnNlZEFyZ3MubGVuZ3RofSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyc2VkQXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zW2ldIDogcGFyYW1zLnR5cGU7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJnID0gcGFyc2VkQXJnc1tpXTtcbiAgICAgICAgICAgICAgICBzaWduYXR1cmVDb250ZXh0LmNvbmNhdChpICsgMSkuY2hlY2tTdWJ0eXBlKGV4cGVjdGVkLCBhcmcudHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVDb250ZXh0LmVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBvdW5kRXhwcmVzc2lvbihvcCwgdHlwZSwgZXZhbHVhdGUsIHBhcnNlZEFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KCFzaWduYXR1cmVDb250ZXh0IHx8IHNpZ25hdHVyZUNvbnRleHQuZXJyb3JzLmxlbmd0aCA+IDApO1xuXG4gICAgICAgIGlmIChvdmVybG9hZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5wdXNoKC4uLnNpZ25hdHVyZUNvbnRleHQuZXJyb3JzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gb3ZlcmxvYWRzLmxlbmd0aCA/IG92ZXJsb2FkcyA6IGF2YWlsYWJsZU92ZXJsb2FkcztcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBleHBlY3RlZFxuICAgICAgICAgICAgICAgIC5tYXAoKFtwYXJhbXNdKSA9PiBzdHJpbmdpZnlTaWduYXR1cmUocGFyYW1zKSlcbiAgICAgICAgICAgICAgICAuam9pbignIHwgJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbFR5cGVzID0gW107XG4gICAgICAgICAgICAvLyBGb3IgZXJyb3IgbWVzc2FnZSwgcmUtcGFyc2UgYXJndW1lbnRzIHdpdGhvdXQgdHJ5aW5nIHRvXG4gICAgICAgICAgICAvLyBhcHBseSBhbnkgY29lcmNpb25zXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaV0sIDEgKyBhY3R1YWxUeXBlcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBhY3R1YWxUeXBlcy5wdXNoKHRvU3RyaW5nKHBhcnNlZC50eXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhcmd1bWVudHMgb2YgdHlwZSAke3NpZ25hdHVyZXN9LCBidXQgZm91bmQgKCR7YWN0dWFsVHlwZXMuam9pbignLCAnKX0pIGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVnaXN0ZXIoXG4gICAgICAgIHJlZ2lzdHJ5OiBFeHByZXNzaW9uUmVnaXN0cnksXG4gICAgICAgIGRlZmluaXRpb25zOiB7IFtzdHJpbmddOiBEZWZpbml0aW9uIH1cbiAgICApIHtcbiAgICAgICAgYXNzZXJ0KCFDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnMpO1xuICAgICAgICBDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRlZmluaXRpb25zKSB7XG4gICAgICAgICAgICByZWdpc3RyeVtuYW1lXSA9IENvbXBvdW5kRXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2lnbmF0dXJlKHNpZ25hdHVyZTogU2lnbmF0dXJlKTogc3RyaW5nIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzaWduYXR1cmUpKSB7XG4gICAgICAgIHJldHVybiBgKCR7c2lnbmF0dXJlLm1hcCh0b1N0cmluZykuam9pbignLCAnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCgke3RvU3RyaW5nKHNpZ25hdHVyZS50eXBlKX0uLi4pYDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvdW5kRXhwcmVzc2lvbjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7U3RyaW5nVHlwZSwgQm9vbGVhblR5cGUsIENvbGxhdG9yVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IENvbGxhdG9yIGZyb20gJy4uL3R5cGVzL2NvbGxhdG9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYXRvckV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGNhc2VTZW5zaXRpdmU6IEV4cHJlc3Npb247XG4gICAgZGlhY3JpdGljU2Vuc2l0aXZlOiBFeHByZXNzaW9uO1xuICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihjYXNlU2Vuc2l0aXZlOiBFeHByZXNzaW9uLCBkaWFjcml0aWNTZW5zaXRpdmU6IEV4cHJlc3Npb24sIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50eXBlID0gQ29sbGF0b3JUeXBlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUgPSBkaWFjcml0aWNTZW5zaXRpdmU7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBvbmUgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzFdOiBhbnkpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LmApO1xuXG4gICAgICAgIGNvbnN0IGNhc2VTZW5zaXRpdmUgPSBjb250ZXh0LnBhcnNlKFxuICAgICAgICAgICAgb3B0aW9uc1snY2FzZS1zZW5zaXRpdmUnXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zWydjYXNlLXNlbnNpdGl2ZSddLCAxLCBCb29sZWFuVHlwZSk7XG4gICAgICAgIGlmICghY2FzZVNlbnNpdGl2ZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgZGlhY3JpdGljU2Vuc2l0aXZlID0gY29udGV4dC5wYXJzZShcbiAgICAgICAgICAgIG9wdGlvbnNbJ2RpYWNyaXRpYy1zZW5zaXRpdmUnXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zWydkaWFjcml0aWMtc2Vuc2l0aXZlJ10sIDEsIEJvb2xlYW5UeXBlKTtcbiAgICAgICAgaWYgKCFkaWFjcml0aWNTZW5zaXRpdmUpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGxldCBsb2NhbGUgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbG9jYWxlJ10pIHtcbiAgICAgICAgICAgIGxvY2FsZSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbG9jYWxlJ10sIDEsIFN0cmluZ1R5cGUpO1xuICAgICAgICAgICAgaWYgKCFsb2NhbGUpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsYXRvckV4cHJlc3Npb24oY2FzZVNlbnNpdGl2ZSwgZGlhY3JpdGljU2Vuc2l0aXZlLCBsb2NhbGUpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsYXRvcih0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUoY3R4KSwgdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUoY3R4KSwgdGhpcy5sb2NhbGUgPyB0aGlzLmxvY2FsZS5ldmFsdWF0ZShjdHgpIDogbnVsbCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmNhc2VTZW5zaXRpdmUpO1xuICAgICAgICBmbih0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZSk7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgZm4odGhpcy5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICAvLyBUZWNobmljYWxseSB0aGUgc2V0IG9mIHBvc3NpYmxlIG91dHB1dHMgaXMgdGhlIGNvbWJpbmF0b3JpYyBzZXQgb2YgQ29sbGF0b3JzIHByb2R1Y2VkXG4gICAgICAgIC8vIGJ5IGFsbCBwb3NzaWJsZU91dHB1dHMgb2YgbG9jYWxlL2Nhc2VTZW5zaXRpdmUvZGlhY3JpdGljU2Vuc2l0aXZlXG4gICAgICAgIC8vIEJ1dCBmb3IgdGhlIHByaW1hcnkgdXNlIG9mIENvbGxhdG9ycyBpbiBjb21wYXJpc29uIG9wZXJhdG9ycywgd2UgaWdub3JlIHRoZSBDb2xsYXRvcidzXG4gICAgICAgIC8vIHBvc3NpYmxlT3V0cHV0cyBhbnl3YXksIHNvIHdlIGNhbiBnZXQgYXdheSB3aXRoIGxlYXZpbmcgdGhpcyB1bmRlZmluZWQgZm9yIG5vdy5cbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBvcHRpb25zWydjYXNlLXNlbnNpdGl2ZSddID0gdGhpcy5jYXNlU2Vuc2l0aXZlLnNlcmlhbGl6ZSgpO1xuICAgICAgICBvcHRpb25zWydkaWFjcml0aWMtc2Vuc2l0aXZlJ10gPSB0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5zZXJpYWxpemUoKTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxlKSB7XG4gICAgICAgICAgICBvcHRpb25zWydsb2NhbGUnXSA9IHRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJjb2xsYXRvclwiLCBvcHRpb25zXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuL2V4cHJlc3Npb24uanMnO1xuXG5mdW5jdGlvbiBpc0ZlYXR1cmVDb25zdGFudChlOiBFeHByZXNzaW9uKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ2dldCcgJiYgZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGUubmFtZSA9PT0gJ2ZlYXR1cmUtc3RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5uYW1lID09PSAnaGFzJyAmJiBlLmFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlLm5hbWUgPT09ICdwcm9wZXJ0aWVzJyB8fFxuICAgICAgICAgICAgZS5uYW1lID09PSAnZ2VvbWV0cnktdHlwZScgfHxcbiAgICAgICAgICAgIGUubmFtZSA9PT0gJ2lkJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgvXmZpbHRlci0vLnRlc3QoZS5uYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgZS5lYWNoQ2hpbGQoYXJnID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiAhaXNGZWF0dXJlQ29uc3RhbnQoYXJnKSkgeyByZXN1bHQgPSBmYWxzZTsgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGVDb25zdGFudChlOiBFeHByZXNzaW9uKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ2ZlYXR1cmUtc3RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgZS5lYWNoQ2hpbGQoYXJnID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiAhaXNTdGF0ZUNvbnN0YW50KGFyZykpIHsgcmVzdWx0ID0gZmFsc2U7IH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQoZTogRXhwcmVzc2lvbiwgcHJvcGVydGllczogQXJyYXk8c3RyaW5nPikge1xuICAgIGlmIChlIGluc3RhbmNlb2YgQ29tcG91bmRFeHByZXNzaW9uICYmIHByb3BlcnRpZXMuaW5kZXhPZihlLm5hbWUpID49IDApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgZS5lYWNoQ2hpbGQoKGFyZykgPT4ge1xuICAgICAgICBpZiAocmVzdWx0ICYmICFpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQoYXJnLCBwcm9wZXJ0aWVzKSkgeyByZXN1bHQgPSBmYWxzZTsgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB7aXNGZWF0dXJlQ29uc3RhbnQsIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudCwgaXNTdGF0ZUNvbnN0YW50fTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgIGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5cbmNsYXNzIFZhciBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGJvdW5kRXhwcmVzc2lvbjogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgYm91bmRFeHByZXNzaW9uOiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IGJvdW5kRXhwcmVzc2lvbi50eXBlO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmJvdW5kRXhwcmVzc2lvbiA9IGJvdW5kRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIgfHwgdHlwZW9mIGFyZ3NbMV0gIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYCd2YXInIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgc3RyaW5nIGxpdGVyYWwgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGFyZ3NbMV07XG4gICAgICAgIGlmICghY29udGV4dC5zY29wZS5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBVbmtub3duIHZhcmlhYmxlIFwiJHtuYW1lfVwiLiBNYWtlIHN1cmUgXCIke25hbWV9XCIgaGFzIGJlZW4gYm91bmQgaW4gYW4gZW5jbG9zaW5nIFwibGV0XCIgZXhwcmVzc2lvbiBiZWZvcmUgdXNpbmcgaXQuYCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFZhcihuYW1lLCBjb250ZXh0LnNjb3BlLmdldChuYW1lKSk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3VuZEV4cHJlc3Npb24uZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoKSB7fVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gW1widmFyXCIsIHRoaXMubmFtZV07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU2NvcGUgZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQge2NoZWNrU3VidHlwZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgUGFyc2luZ0Vycm9yIGZyb20gJy4vcGFyc2luZ19lcnJvcic7XG5pbXBvcnQgTGl0ZXJhbCBmcm9tICcuL2RlZmluaXRpb25zL2xpdGVyYWwnO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tICcuL2RlZmluaXRpb25zL2Fzc2VydGlvbic7XG5pbXBvcnQgQ29lcmNpb24gZnJvbSAnLi9kZWZpbml0aW9ucy9jb2VyY2lvbic7XG5pbXBvcnQgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IENvbGxhdG9yRXhwcmVzc2lvbiBmcm9tICcuL2RlZmluaXRpb25zL2NvbGxhdG9yJztcbmltcG9ydCB7aXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50LCBpc0ZlYXR1cmVDb25zdGFudH0gZnJvbSAnLi9pc19jb25zdGFudCc7XG5pbXBvcnQgVmFyIGZyb20gJy4vZGVmaW5pdGlvbnMvdmFyJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb24sIEV4cHJlc3Npb25SZWdpc3RyeX0gZnJvbSAnLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTdGF0ZSBhc3NvY2lhdGVkIHBhcnNpbmcgYXQgYSBnaXZlbiBwb2ludCBpbiBhbiBleHByZXNzaW9uIHRyZWUuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBQYXJzaW5nQ29udGV4dCB7XG4gICAgcmVnaXN0cnk6IEV4cHJlc3Npb25SZWdpc3RyeTtcbiAgICBwYXRoOiBBcnJheTxudW1iZXI+O1xuICAgIGtleTogc3RyaW5nO1xuICAgIHNjb3BlOiBTY29wZTtcbiAgICBlcnJvcnM6IEFycmF5PFBhcnNpbmdFcnJvcj47XG5cbiAgICAvLyBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGlzIGV4cHJlc3Npb24uIFByb3ZpZGVkIG9ubHkgdG8gYWxsb3cgRXhwcmVzc2lvblxuICAgIC8vIGltcGxlbWVudGF0aW9ucyB0byBpbmZlciBhcmd1bWVudCB0eXBlczogRXhwcmVzc2lvbiNwYXJzZSgpIG5lZWQgbm90XG4gICAgLy8gY2hlY2sgdGhhdCB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIHBhcnNlZCBleHByZXNzaW9uIG1hdGNoZXNcbiAgICAvLyBgZXhwZWN0ZWRUeXBlYC5cbiAgICBleHBlY3RlZFR5cGU6ID9UeXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHJlZ2lzdHJ5OiBFeHByZXNzaW9uUmVnaXN0cnksXG4gICAgICAgIHBhdGg6IEFycmF5PG51bWJlcj4gPSBbXSxcbiAgICAgICAgZXhwZWN0ZWRUeXBlOiA/VHlwZSxcbiAgICAgICAgc2NvcGU6IFNjb3BlID0gbmV3IFNjb3BlKCksXG4gICAgICAgIGVycm9yczogQXJyYXk8UGFyc2luZ0Vycm9yPiA9IFtdXG4gICAgKSB7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5rZXkgPSBwYXRoLm1hcChwYXJ0ID0+IGBbJHtwYXJ0fV1gKS5qb2luKCcnKTtcbiAgICAgICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgdGhpcy5leHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGV4cHIgdGhlIEpTT04gZXhwcmVzc2lvbiB0byBwYXJzZVxuICAgICAqIEBwYXJhbSBpbmRleCB0aGUgb3B0aW9uYWwgYXJndW1lbnQgaW5kZXggaWYgdGhpcyBleHByZXNzaW9uIGlzIGFuIGFyZ3VtZW50IG9mIGEgcGFyZW50IGV4cHJlc3Npb24gdGhhdCdzIGJlaW5nIHBhcnNlZFxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMub21pdFR5cGVBbm5vdGF0aW9ucyBzZXQgdHJ1ZSB0byBvbWl0IGluZmVycmVkIHR5cGUgYW5ub3RhdGlvbnMuICBDYWxsZXIgYmV3YXJlOiB3aXRoIHRoaXMgb3B0aW9uIHNldCwgdGhlIHBhcnNlZCBleHByZXNzaW9uJ3MgdHlwZSB3aWxsIE5PVCBzYXRpc2Z5IGBleHBlY3RlZFR5cGVgIGlmIGl0IHdvdWxkIG5vcm1hbGx5IGJlIHdyYXBwZWQgaW4gYW4gaW5mZXJyZWQgYW5ub3RhdGlvbi5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHBhcnNlKFxuICAgICAgICBleHByOiBtaXhlZCxcbiAgICAgICAgaW5kZXg/OiBudW1iZXIsXG4gICAgICAgIGV4cGVjdGVkVHlwZT86ID9UeXBlLFxuICAgICAgICBiaW5kaW5ncz86IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPixcbiAgICAgICAgb3B0aW9uczoge3R5cGVBbm5vdGF0aW9uPzogJ2Fzc2VydCcgfCAnY29lcmNlJyB8ICdvbWl0J30gPSB7fVxuICAgICk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25jYXQoaW5kZXgsIGV4cGVjdGVkVHlwZSwgYmluZGluZ3MpLl9wYXJzZShleHByLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2UoZXhwciwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgX3BhcnNlKGV4cHI6IG1peGVkLCBvcHRpb25zOiB7dHlwZUFubm90YXRpb24/OiAnYXNzZXJ0JyB8ICdjb2VyY2UnIHwgJ29taXQnfSk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGV4cHIgPT09IG51bGwgfHwgdHlwZW9mIGV4cHIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBleHByID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGV4cHIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBleHByID0gWydsaXRlcmFsJywgZXhwcl07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhbm5vdGF0ZShwYXJzZWQsIHR5cGUsIHR5cGVBbm5vdGF0aW9uOiAnYXNzZXJ0JyB8ICdjb2VyY2UnIHwgJ29taXQnKSB7XG4gICAgICAgICAgICBpZiAodHlwZUFubm90YXRpb24gPT09ICdhc3NlcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odHlwZSwgW3BhcnNlZF0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlQW5ub3RhdGlvbiA9PT0gJ2NvZXJjZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvZXJjaW9uKHR5cGUsIFtwYXJzZWRdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cHIpKSB7XG4gICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgRXhwZWN0ZWQgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFtdXS5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb3AgPSBleHByWzBdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGBFeHByZXNzaW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgYnV0IGZvdW5kICR7dHlwZW9mIG9wfSBpbnN0ZWFkLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgWy4uLl1dLmAsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBFeHByID0gdGhpcy5yZWdpc3RyeVtvcF07XG4gICAgICAgICAgICBpZiAoRXhwcikge1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWQgPSBFeHByLnBhcnNlKGV4cHIsIHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cGVjdGVkVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMuZXhwZWN0ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWwgPSBwYXJzZWQudHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHdlIGV4cGVjdCBhIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBvciBhcnJheSBidXQgaGF2ZSBhIHZhbHVlLCB3cmFwIGl0IGluIGFuIGFzc2VydGlvbi5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBleHBlY3QgYSBjb2xvciBvciBmb3JtYXR0ZWQgc3RyaW5nLCBidXQgaGF2ZSBhIHN0cmluZyBvciB2YWx1ZSwgd3JhcCBpdCBpbiBhIGNvZXJjaW9uLlxuICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGRvIHN0YXRpYyB0eXBlLWNoZWNraW5nLlxuICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGVzZSBiZWhhdmlvcnMgYXJlIG92ZXJyaWRhYmxlIGZvcjpcbiAgICAgICAgICAgICAgICAgICAgLy8gICAqIFRoZSBcImNvYWxlc2NlXCIgb3BlcmF0b3IsIHdoaWNoIG5lZWRzIHRvIG9taXQgdHlwZSBhbm5vdGF0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgLy8gICAqIFN0cmluZy12YWx1ZWQgcHJvcGVydGllcyAoZS5nLiBgdGV4dC1maWVsZGApLCB3aGVyZSBjb2VyY2lvbiBpcyBtb3JlIGNvbnZlbmllbnQgdGhhbiBhc3NlcnRpb24uXG4gICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZXhwZWN0ZWQua2luZCA9PT0gJ3N0cmluZycgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ251bWJlcicgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ2Jvb2xlYW4nIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdvYmplY3QnIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdhcnJheScpICYmIGFjdHVhbC5raW5kID09PSAndmFsdWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBhbm5vdGF0ZShwYXJzZWQsIGV4cGVjdGVkLCBvcHRpb25zLnR5cGVBbm5vdGF0aW9uIHx8ICdhc3NlcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZXhwZWN0ZWQua2luZCA9PT0gJ2NvbG9yJyB8fCBleHBlY3RlZC5raW5kID09PSAnZm9ybWF0dGVkJyB8fCBleHBlY3RlZC5raW5kID09PSAnaW1hZ2UnKSAmJiAoYWN0dWFsLmtpbmQgPT09ICd2YWx1ZScgfHwgYWN0dWFsLmtpbmQgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gYW5ub3RhdGUocGFyc2VkLCBleHBlY3RlZCwgb3B0aW9ucy50eXBlQW5ub3RhdGlvbiB8fCAnY29lcmNlJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja1N1YnR5cGUoZXhwZWN0ZWQsIGFjdHVhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gZXhwcmVzc2lvbidzIGFyZ3VtZW50cyBhcmUgYWxsIGxpdGVyYWxzLCB3ZSBjYW4gZXZhbHVhdGVcbiAgICAgICAgICAgICAgICAvLyBpdCBpbW1lZGlhdGVseSBhbmQgcmVwbGFjZSBpdCB3aXRoIGEgbGl0ZXJhbCB2YWx1ZSBpbiB0aGVcbiAgICAgICAgICAgICAgICAvLyBwYXJzZWQvY29tcGlsZWQgcmVzdWx0LiBFeHByZXNzaW9ucyB0aGF0IGV4cGVjdCBhbiBpbWFnZSBzaG91bGRcbiAgICAgICAgICAgICAgICAvLyBub3QgYmUgcmVzb2x2ZWQgaGVyZSBzbyB3ZSBjYW4gbGF0ZXIgZ2V0IHRoZSBhdmFpbGFibGUgaW1hZ2VzLlxuICAgICAgICAgICAgICAgIGlmICghKHBhcnNlZCBpbnN0YW5jZW9mIExpdGVyYWwpICYmIChwYXJzZWQudHlwZS5raW5kICE9PSAnaW1hZ2UnKSAmJiBpc0NvbnN0YW50KHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWMgPSBuZXcgRXZhbHVhdGlvbkNvbnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IG5ldyBMaXRlcmFsKHBhcnNlZC50eXBlLCBwYXJzZWQuZXZhbHVhdGUoZWMpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgVW5rbm93biBleHByZXNzaW9uIFwiJHtvcH1cIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFsuLi5dXS5gLCAwKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGAndW5kZWZpbmVkJyB2YWx1ZSBpbnZhbGlkLiBVc2UgbnVsbCBpbnN0ZWFkLmApO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHByID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoYEJhcmUgb2JqZWN0cyBpbnZhbGlkLiBVc2UgW1wibGl0ZXJhbFwiLCB7Li4ufV0gaW5zdGVhZC5gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGBFeHBlY3RlZCBhbiBhcnJheSwgYnV0IGZvdW5kICR7dHlwZW9mIGV4cHJ9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIGNvbnRleHQgc3VpdGFibGUgZm9yIHBhcnNpbmcgdGhlIHN1YmV4cHJlc3Npb24gYXRcbiAgICAgKiBpbmRleCBgaW5kZXhgLCBvcHRpb25hbGx5IGFwcGVuZGluZyB0byAnbGV0JyBiaW5kaW5nIG1hcC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBgZXJyb3JzYCBwcm9wZXJ0eSwgaW50ZW5kZWQgZm9yIGNvbGxlY3RpbmcgZXJyb3JzIHdoaWxlXG4gICAgICogcGFyc2luZywgaXMgY29waWVkIGJ5IHJlZmVyZW5jZSByYXRoZXIgdGhhbiBjbG9uZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25jYXQoaW5kZXg6IG51bWJlciwgZXhwZWN0ZWRUeXBlPzogP1R5cGUsIGJpbmRpbmdzPzogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+KSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0eXBlb2YgaW5kZXggPT09ICdudW1iZXInID8gdGhpcy5wYXRoLmNvbmNhdChpbmRleCkgOiB0aGlzLnBhdGg7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gYmluZGluZ3MgPyB0aGlzLnNjb3BlLmNvbmNhdChiaW5kaW5ncykgOiB0aGlzLnNjb3BlO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5yZWdpc3RyeSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBleHBlY3RlZFR5cGUgfHwgbnVsbCxcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgdGhpcy5lcnJvcnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQdXNoIGEgcGFyc2luZyAob3IgdHlwZSBjaGVja2luZykgZXJyb3IgaW50byB0aGUgYHRoaXMuZXJyb3JzYFxuICAgICAqIEBwYXJhbSBlcnJvciBUaGUgbWVzc2FnZVxuICAgICAqIEBwYXJhbSBrZXlzIE9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgc291cmNlIG9mIHRoZSBlcnJvciBhdCBhIGNoaWxkXG4gICAgICogb2YgdGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBhdCBgdGhpcy5rZXlgLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZXJyb3IoZXJyb3I6IHN0cmluZywgLi4ua2V5czogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmtleX0ke2tleXMubWFwKGsgPT4gYFske2t9XWApLmpvaW4oJycpfWA7XG4gICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IFBhcnNpbmdFcnJvcihrZXksIGVycm9yKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBudWxsIGlmIGB0YCBpcyBhIHN1YnR5cGUgb2YgYGV4cGVjdGVkYDsgb3RoZXJ3aXNlIHJldHVybnMgYW5cbiAgICAgKiBlcnJvciBtZXNzYWdlIGFuZCBhbHNvIHB1c2hlcyBpdCB0byBgdGhpcy5lcnJvcnNgLlxuICAgICAqL1xuICAgIGNoZWNrU3VidHlwZShleHBlY3RlZDogVHlwZSwgdDogVHlwZSk6ID9zdHJpbmcge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNoZWNrU3VidHlwZShleHBlY3RlZCwgdCk7XG4gICAgICAgIGlmIChlcnJvcikgdGhpcy5lcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNpbmdDb250ZXh0O1xuXG5mdW5jdGlvbiBpc0NvbnN0YW50KGV4cHJlc3Npb246IEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFZhcikge1xuICAgICAgICByZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uLmJvdW5kRXhwcmVzc2lvbik7XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgQ29tcG91bmRFeHByZXNzaW9uICYmIGV4cHJlc3Npb24ubmFtZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgQ29sbGF0b3JFeHByZXNzaW9uKSB7XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSByZXN1bHRzIG9mIGEgQ29sbGF0b3IgZXhwcmVzc2lvbiB3aXRoIGZpeGVkIGFyZ3VtZW50c1xuICAgICAgICAvLyBnZW5lcmFsbHkgc2hvdWxkbid0IGNoYW5nZSBiZXR3ZWVuIGV4ZWN1dGlvbnMsIHdlIGNhbid0IHNlcmlhbGl6ZSB0aGVtXG4gICAgICAgIC8vIGFzIGNvbnN0YW50IGV4cHJlc3Npb25zIGJlY2F1c2UgcmVzdWx0cyBjaGFuZ2UgYmFzZWQgb24gZW52aXJvbm1lbnQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1R5cGVBbm5vdGF0aW9uID0gZXhwcmVzc2lvbiBpbnN0YW5jZW9mIENvZXJjaW9uIHx8XG4gICAgICAgIGV4cHJlc3Npb24gaW5zdGFuY2VvZiBBc3NlcnRpb247XG5cbiAgICBsZXQgY2hpbGRyZW5Db25zdGFudCA9IHRydWU7XG4gICAgZXhwcmVzc2lvbi5lYWNoQ2hpbGQoY2hpbGQgPT4ge1xuICAgICAgICAvLyBXZSBjYW4gX2FsbW9zdF8gYXNzdW1lIHRoYXQgaWYgYGV4cHJlc3Npb25zYCBjaGlsZHJlbiBhcmUgY29uc3RhbnQsXG4gICAgICAgIC8vIHRoZXkgd291bGQgYWxyZWFkeSBoYXZlIGJlZW4gZXZhbHVhdGVkIHRvIExpdGVyYWwgdmFsdWVzIHdoZW4gdGhleVxuICAgICAgICAvLyB3ZXJlIHBhcnNlZC4gIFR5cGUgYW5ub3RhdGlvbnMgYXJlIHRoZSBleGNlcHRpb24sIGJlY2F1c2UgdGhleSBtaWdodFxuICAgICAgICAvLyBoYXZlIGJlZW4gaW5mZXJyZWQgYW5kIGFkZGVkIGFmdGVyIGEgY2hpbGQgd2FzIHBhcnNlZC5cblxuICAgICAgICAvLyBTbyB3ZSByZWN1cnNlIGludG8gaXNDb25zdGFudCgpIGZvciB0aGUgY2hpbGRyZW4gb2YgdHlwZSBhbm5vdGF0aW9ucyxcbiAgICAgICAgLy8gYnV0IG90aGVyd2lzZSBzaW1wbHkgY2hlY2sgd2hldGhlciB0aGV5IGFyZSBMaXRlcmFscy5cbiAgICAgICAgaWYgKGlzVHlwZUFubm90YXRpb24pIHtcbiAgICAgICAgICAgIGNoaWxkcmVuQ29uc3RhbnQgPSBjaGlsZHJlbkNvbnN0YW50ICYmIGlzQ29uc3RhbnQoY2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hpbGRyZW5Db25zdGFudCA9IGNoaWxkcmVuQ29uc3RhbnQgJiYgY2hpbGQgaW5zdGFuY2VvZiBMaXRlcmFsO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFjaGlsZHJlbkNvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNGZWF0dXJlQ29uc3RhbnQoZXhwcmVzc2lvbikgJiZcbiAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50KGV4cHJlc3Npb24sIFsnem9vbScsICdoZWF0bWFwLWRlbnNpdHknLCAnbGluZS1wcm9ncmVzcycsICdhY2N1bXVsYXRlZCcsICdpcy1zdXBwb3J0ZWQtc2NyaXB0J10pO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuL3J1bnRpbWVfZXJyb3InO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi9leHByZXNzaW9uJztcblxuZXhwb3J0IHR5cGUgU3RvcHMgPSBBcnJheTxbbnVtYmVyLCBFeHByZXNzaW9uXT47XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgc3RvcCA8PSBpbnB1dCwgb3IgMCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8oc3RvcHM6IEFycmF5PG51bWJlcj4sIGlucHV0OiBudW1iZXIpIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBzdG9wcy5sZW5ndGggLSAxO1xuICAgIGxldCBsb3dlckluZGV4ID0gMDtcbiAgICBsZXQgdXBwZXJJbmRleCA9IGxhc3RJbmRleDtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcbiAgICBsZXQgY3VycmVudFZhbHVlLCBuZXh0VmFsdWU7XG5cbiAgICB3aGlsZSAobG93ZXJJbmRleCA8PSB1cHBlckluZGV4KSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IE1hdGguZmxvb3IoKGxvd2VySW5kZXggKyB1cHBlckluZGV4KSAvIDIpO1xuICAgICAgICBjdXJyZW50VmFsdWUgPSBzdG9wc1tjdXJyZW50SW5kZXhdO1xuICAgICAgICBuZXh0VmFsdWUgPSBzdG9wc1tjdXJyZW50SW5kZXggKyAxXTtcblxuICAgICAgICBpZiAoY3VycmVudFZhbHVlIDw9IGlucHV0KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID09PSBsYXN0SW5kZXggfHwgaW5wdXQgPCBuZXh0VmFsdWUpIHsgLy8gU2VhcmNoIGNvbXBsZXRlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG93ZXJJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlID4gaW5wdXQpIHtcbiAgICAgICAgICAgIHVwcGVySW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcignSW5wdXQgaXMgbm90IGEgbnVtYmVyLicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge051bWJlclR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvfSBmcm9tICcuLi9zdG9wcyc7XG5cbmltcG9ydCB0eXBlIHtTdG9wc30gZnJvbSAnLi4vc3RvcHMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jbGFzcyBTdGVwIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcblxuICAgIGlucHV0OiBFeHByZXNzaW9uO1xuICAgIGxhYmVsczogQXJyYXk8bnVtYmVyPjtcbiAgICBvdXRwdXRzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGlucHV0OiBFeHByZXNzaW9uLCBzdG9wczogU3RvcHMpIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgIHRoaXMubGFiZWxzID0gW107XG4gICAgICAgIHRoaXMub3V0cHV0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtsYWJlbCwgZXhwcmVzc2lvbl0gb2Ygc3RvcHMpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxzLnB1c2gobGFiZWwpO1xuICAgICAgICAgICAgdGhpcy5vdXRwdXRzLnB1c2goZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggLSAxIDwgNCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAke2FyZ3MubGVuZ3RoIC0gMX0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGFyZ3MubGVuZ3RoIC0gMSkgJSAyICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBzdG9wczogU3RvcHMgPSBbXTtcblxuICAgICAgICBsZXQgb3V0cHV0VHlwZTogVHlwZSA9IChudWxsOiBhbnkpO1xuICAgICAgICBpZiAoY29udGV4dC5leHBlY3RlZFR5cGUgJiYgY29udGV4dC5leHBlY3RlZFR5cGUua2luZCAhPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IGkgPT09IDEgPyAtSW5maW5pdHkgOiBhcmdzW2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzW2kgKyAxXTtcblxuICAgICAgICAgICAgY29uc3QgbGFiZWxLZXkgPSBpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVLZXkgPSBpICsgMTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYWJlbCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcInN0ZXBcIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLCBsYWJlbEtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdG9wcy5sZW5ndGggJiYgc3RvcHNbc3RvcHMubGVuZ3RoIC0gMV1bMF0gPj0gbGFiZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcInN0ZXBcIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLCBsYWJlbEtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGNvbnRleHQucGFyc2UodmFsdWUsIHZhbHVlS2V5LCBvdXRwdXRUeXBlKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHBhcnNlZC50eXBlO1xuICAgICAgICAgICAgc3RvcHMucHVzaChbbGFiZWwsIHBhcnNlZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTdGVwKG91dHB1dFR5cGUsIGlucHV0LCBzdG9wcyk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmxhYmVscztcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMub3V0cHV0cztcblxuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbMF0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKCh0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk6IGFueSk6IG51bWJlcik7XG4gICAgICAgIGlmICh2YWx1ZSA8PSBsYWJlbHNbMF0pIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzWzBdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9wQ291bnQgPSBsYWJlbHMubGVuZ3RoO1xuICAgICAgICBpZiAodmFsdWUgPj0gbGFiZWxzW3N0b3BDb3VudCAtIDFdKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1tzdG9wQ291bnQgLSAxXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvKGxhYmVscywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gb3V0cHV0c1tpbmRleF0uZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgICAgICBmb3IgKGNvbnN0IGV4cHJlc3Npb24gb2YgdGhpcy5vdXRwdXRzKSB7XG4gICAgICAgICAgICBmbihleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBvc3NpYmxlT3V0cHV0cygpOiBBcnJheTxWYWx1ZSB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFtdLmNvbmNhdCguLi50aGlzLm91dHB1dHMubWFwKChvdXRwdXQpID0+IG91dHB1dC5wb3NzaWJsZU91dHB1dHMoKSkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcInN0ZXBcIiwgdGhpcy5pbnB1dC5zZXJpYWxpemUoKV07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sYWJlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLmxhYmVsc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2godGhpcy5vdXRwdXRzW2ldLnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0ZXA7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi9jb2xvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXIoYTogbnVtYmVyLCBiOiBudW1iZXIsIHQ6IG51bWJlcikge1xuICAgIHJldHVybiAoYSAqICgxIC0gdCkpICsgKGIgKiB0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yKGZyb206IENvbG9yLCB0bzogQ29sb3IsIHQ6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIG51bWJlcihmcm9tLnIsIHRvLnIsIHQpLFxuICAgICAgICBudW1iZXIoZnJvbS5nLCB0by5nLCB0KSxcbiAgICAgICAgbnVtYmVyKGZyb20uYiwgdG8uYiwgdCksXG4gICAgICAgIG51bWJlcihmcm9tLmEsIHRvLmEsIHQpXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5KGZyb206IEFycmF5PG51bWJlcj4sIHRvOiBBcnJheTxudW1iZXI+LCB0OiBudW1iZXIpOiBBcnJheTxudW1iZXI+IHtcbiAgICByZXR1cm4gZnJvbS5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIG51bWJlcihkLCB0b1tpXSwgdCk7XG4gICAgfSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi9jb2xvcic7XG5cbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlTnVtYmVyfSBmcm9tICcuL2ludGVycG9sYXRlJztcblxudHlwZSBMQUJDb2xvciA9IHtcbiAgICBsOiBudW1iZXIsXG4gICAgYTogbnVtYmVyLFxuICAgIGI6IG51bWJlcixcbiAgICBhbHBoYTogbnVtYmVyXG59O1xuXG50eXBlIEhDTENvbG9yID0ge1xuICAgIGg6IG51bWJlcixcbiAgICBjOiBudW1iZXIsXG4gICAgbDogbnVtYmVyLFxuICAgIGFscGhhOiBudW1iZXJcbn07XG5cbi8vIENvbnN0YW50c1xuY29uc3QgWG4gPSAwLjk1MDQ3MCwgLy8gRDY1IHN0YW5kYXJkIHJlZmVyZW50XG4gICAgWW4gPSAxLFxuICAgIFpuID0gMS4wODg4MzAsXG4gICAgdDAgPSA0IC8gMjksXG4gICAgdDEgPSA2IC8gMjksXG4gICAgdDIgPSAzICogdDEgKiB0MSxcbiAgICB0MyA9IHQxICogdDEgKiB0MSxcbiAgICBkZWcycmFkID0gTWF0aC5QSSAvIDE4MCxcbiAgICByYWQyZGVnID0gMTgwIC8gTWF0aC5QSTtcblxuLy8gVXRpbGl0aWVzXG5mdW5jdGlvbiB4eXoybGFiKHQpIHtcbiAgICByZXR1cm4gdCA+IHQzID8gTWF0aC5wb3codCwgMSAvIDMpIDogdCAvIHQyICsgdDA7XG59XG5cbmZ1bmN0aW9uIGxhYjJ4eXoodCkge1xuICAgIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiB4eXoycmdiKHgpIHtcbiAgICByZXR1cm4gMjU1ICogKHggPD0gMC4wMDMxMzA4ID8gMTIuOTIgKiB4IDogMS4wNTUgKiBNYXRoLnBvdyh4LCAxIC8gMi40KSAtIDAuMDU1KTtcbn1cblxuZnVuY3Rpb24gcmdiMnh5eih4KSB7XG4gICAgeCAvPSAyNTU7XG4gICAgcmV0dXJuIHggPD0gMC4wNDA0NSA/IHggLyAxMi45MiA6IE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbi8vIExBQlxuZnVuY3Rpb24gcmdiVG9MYWIocmdiQ29sb3I6IENvbG9yKTogTEFCQ29sb3Ige1xuICAgIGNvbnN0IGIgPSByZ2IyeHl6KHJnYkNvbG9yLnIpLFxuICAgICAgICBhID0gcmdiMnh5eihyZ2JDb2xvci5nKSxcbiAgICAgICAgbCA9IHJnYjJ4eXoocmdiQ29sb3IuYiksXG4gICAgICAgIHggPSB4eXoybGFiKCgwLjQxMjQ1NjQgKiBiICsgMC4zNTc1NzYxICogYSArIDAuMTgwNDM3NSAqIGwpIC8gWG4pLFxuICAgICAgICB5ID0geHl6MmxhYigoMC4yMTI2NzI5ICogYiArIDAuNzE1MTUyMiAqIGEgKyAwLjA3MjE3NTAgKiBsKSAvIFluKSxcbiAgICAgICAgeiA9IHh5ejJsYWIoKDAuMDE5MzMzOSAqIGIgKyAwLjExOTE5MjAgKiBhICsgMC45NTAzMDQxICogbCkgLyBabik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBsOiAxMTYgKiB5IC0gMTYsXG4gICAgICAgIGE6IDUwMCAqICh4IC0geSksXG4gICAgICAgIGI6IDIwMCAqICh5IC0geiksXG4gICAgICAgIGFscGhhOiByZ2JDb2xvci5hXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbGFiVG9SZ2IobGFiQ29sb3I6IExBQkNvbG9yKTogQ29sb3Ige1xuICAgIGxldCB5ID0gKGxhYkNvbG9yLmwgKyAxNikgLyAxMTYsXG4gICAgICAgIHggPSBpc05hTihsYWJDb2xvci5hKSA/IHkgOiB5ICsgbGFiQ29sb3IuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKGxhYkNvbG9yLmIpID8geSA6IHkgLSBsYWJDb2xvci5iIC8gMjAwO1xuICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XG4gICAgeCA9IFhuICogbGFiMnh5eih4KTtcbiAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejJyZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KSwgLy8gRDY1IC0+IHNSR0JcbiAgICAgICAgeHl6MnJnYigtMC45NjkyNjYwICogeCArIDEuODc2MDEwOCAqIHkgKyAwLjA0MTU1NjAgKiB6KSxcbiAgICAgICAgeHl6MnJnYigwLjA1NTY0MzQgKiB4IC0gMC4yMDQwMjU5ICogeSArIDEuMDU3MjI1MiAqIHopLFxuICAgICAgICBsYWJDb2xvci5hbHBoYVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlTGFiKGZyb206IExBQkNvbG9yLCB0bzogTEFCQ29sb3IsIHQ6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGw6IGludGVycG9sYXRlTnVtYmVyKGZyb20ubCwgdG8ubCwgdCksXG4gICAgICAgIGE6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYSwgdG8uYSwgdCksXG4gICAgICAgIGI6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYiwgdG8uYiwgdCksXG4gICAgICAgIGFscGhhOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmFscGhhLCB0by5hbHBoYSwgdClcbiAgICB9O1xufVxuXG4vLyBIQ0xcbmZ1bmN0aW9uIHJnYlRvSGNsKHJnYkNvbG9yOiBDb2xvcik6IEhDTENvbG9yIHtcbiAgICBjb25zdCB7bCwgYSwgYn0gPSByZ2JUb0xhYihyZ2JDb2xvcik7XG4gICAgY29uc3QgaCA9IE1hdGguYXRhbjIoYiwgYSkgKiByYWQyZGVnO1xuICAgIHJldHVybiB7XG4gICAgICAgIGg6IGggPCAwID8gaCArIDM2MCA6IGgsXG4gICAgICAgIGM6IE1hdGguc3FydChhICogYSArIGIgKiBiKSxcbiAgICAgICAgbCxcbiAgICAgICAgYWxwaGE6IHJnYkNvbG9yLmFcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBoY2xUb1JnYihoY2xDb2xvcjogSENMQ29sb3IpOiBDb2xvciB7XG4gICAgY29uc3QgaCA9IGhjbENvbG9yLmggKiBkZWcycmFkLFxuICAgICAgICBjID0gaGNsQ29sb3IuYyxcbiAgICAgICAgbCA9IGhjbENvbG9yLmw7XG4gICAgcmV0dXJuIGxhYlRvUmdiKHtcbiAgICAgICAgbCxcbiAgICAgICAgYTogTWF0aC5jb3MoaCkgKiBjLFxuICAgICAgICBiOiBNYXRoLnNpbihoKSAqIGMsXG4gICAgICAgIGFscGhhOiBoY2xDb2xvci5hbHBoYVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUh1ZShhOiBudW1iZXIsIGI6IG51bWJlciwgdDogbnVtYmVyKSB7XG4gICAgY29uc3QgZCA9IGIgLSBhO1xuICAgIHJldHVybiBhICsgdCAqIChkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVIY2woZnJvbTogSENMQ29sb3IsIHRvOiBIQ0xDb2xvciwgdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaDogaW50ZXJwb2xhdGVIdWUoZnJvbS5oLCB0by5oLCB0KSxcbiAgICAgICAgYzogaW50ZXJwb2xhdGVOdW1iZXIoZnJvbS5jLCB0by5jLCB0KSxcbiAgICAgICAgbDogaW50ZXJwb2xhdGVOdW1iZXIoZnJvbS5sLCB0by5sLCB0KSxcbiAgICAgICAgYWxwaGE6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYWxwaGEsIHRvLmFscGhhLCB0KVxuICAgIH07XG59XG5cbmV4cG9ydCBjb25zdCBsYWIgPSB7XG4gICAgZm9yd2FyZDogcmdiVG9MYWIsXG4gICAgcmV2ZXJzZTogbGFiVG9SZ2IsXG4gICAgaW50ZXJwb2xhdGU6IGludGVycG9sYXRlTGFiXG59O1xuXG5leHBvcnQgY29uc3QgaGNsID0ge1xuICAgIGZvcndhcmQ6IHJnYlRvSGNsLFxuICAgIHJldmVyc2U6IGhjbFRvUmdiLFxuICAgIGludGVycG9sYXRlOiBpbnRlcnBvbGF0ZUhjbFxufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBVbml0QmV6aWVyIGZyb20gJ0BtYXBib3gvdW5pdGJlemllcic7XG5cbmltcG9ydCAqIGFzIGludGVycG9sYXRlIGZyb20gJy4uLy4uL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHt0b1N0cmluZywgTnVtYmVyVHlwZSwgQ29sb3JUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2ZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG99IGZyb20gJy4uL3N0b3BzJztcbmltcG9ydCB7aGNsLCBsYWJ9IGZyb20gJy4uLy4uL3V0aWwvY29sb3Jfc3BhY2VzJztcblxuaW1wb3J0IHR5cGUge1N0b3BzfSBmcm9tICcuLi9zdG9wcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEludGVycG9sYXRpb25UeXBlID1cbiAgICB7IG5hbWU6ICdsaW5lYXInIH0gfFxuICAgIHsgbmFtZTogJ2V4cG9uZW50aWFsJywgYmFzZTogbnVtYmVyIH0gfFxuICAgIHsgbmFtZTogJ2N1YmljLWJlemllcicsIGNvbnRyb2xQb2ludHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIH07XG5cbmNsYXNzIEludGVycG9sYXRlIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcblxuICAgIG9wZXJhdG9yOiAnaW50ZXJwb2xhdGUnIHwgJ2ludGVycG9sYXRlLWhjbCcgfCAnaW50ZXJwb2xhdGUtbGFiJztcbiAgICBpbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uVHlwZTtcbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcbiAgICBsYWJlbHM6IEFycmF5PG51bWJlcj47XG4gICAgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBvcGVyYXRvcjogJ2ludGVycG9sYXRlJyB8ICdpbnRlcnBvbGF0ZS1oY2wnIHwgJ2ludGVycG9sYXRlLWxhYicsIGludGVycG9sYXRpb246IEludGVycG9sYXRpb25UeXBlLCBpbnB1dDogRXhwcmVzc2lvbiwgc3RvcHM6IFN0b3BzKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgIHRoaXMubGFiZWxzID0gW107XG4gICAgICAgIHRoaXMub3V0cHV0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtsYWJlbCwgZXhwcmVzc2lvbl0gb2Ygc3RvcHMpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxzLnB1c2gobGFiZWwpO1xuICAgICAgICAgICAgdGhpcy5vdXRwdXRzLnB1c2goZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgaW50ZXJwb2xhdGlvbkZhY3RvcihpbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uVHlwZSwgaW5wdXQ6IG51bWJlciwgbG93ZXI6IG51bWJlciwgdXBwZXI6IG51bWJlcikge1xuICAgICAgICBsZXQgdCA9IDA7XG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdleHBvbmVudGlhbCcpIHtcbiAgICAgICAgICAgIHQgPSBleHBvbmVudGlhbEludGVycG9sYXRpb24oaW5wdXQsIGludGVycG9sYXRpb24uYmFzZSwgbG93ZXIsIHVwcGVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdsaW5lYXInKSB7XG4gICAgICAgICAgICB0ID0gZXhwb25lbnRpYWxJbnRlcnBvbGF0aW9uKGlucHV0LCAxLCBsb3dlciwgdXBwZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRpb24ubmFtZSA9PT0gJ2N1YmljLWJlemllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBpbnRlcnBvbGF0aW9uLmNvbnRyb2xQb2ludHM7XG4gICAgICAgICAgICBjb25zdCB1YiA9IG5ldyBVbml0QmV6aWVyKGNbMF0sIGNbMV0sIGNbMl0sIGNbM10pO1xuICAgICAgICAgICAgdCA9IHViLnNvbHZlKGV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbihpbnB1dCwgMSwgbG93ZXIsIHVwcGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgbGV0IFtvcGVyYXRvciwgaW50ZXJwb2xhdGlvbiwgaW5wdXQsIC4uLnJlc3RdID0gYXJncztcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW50ZXJwb2xhdGlvbikgfHwgaW50ZXJwb2xhdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBpbnRlcnBvbGF0aW9uIHR5cGUgZXhwcmVzc2lvbi5gLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uWzBdID09PSAnbGluZWFyJykge1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IHtuYW1lOiAnbGluZWFyJ307XG4gICAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGlvblswXSA9PT0gJ2V4cG9uZW50aWFsJykge1xuICAgICAgICAgICAgY29uc3QgYmFzZSA9IGludGVycG9sYXRpb25bMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGJhc2UgIT09ICdudW1iZXInKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGEgbnVtZXJpYyBiYXNlLmAsIDEsIDEpO1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXhwb25lbnRpYWwnLFxuICAgICAgICAgICAgICAgIGJhc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGlvblswXSA9PT0gJ2N1YmljLWJlemllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xQb2ludHMgPSBpbnRlcnBvbGF0aW9uLnNsaWNlKDEpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludHMubGVuZ3RoICE9PSA0IHx8XG4gICAgICAgICAgICAgICAgY29udHJvbFBvaW50cy5zb21lKHQgPT4gdHlwZW9mIHQgIT09ICdudW1iZXInIHx8IHQgPCAwIHx8IHQgPiAxKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0N1YmljIGJlemllciBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGZvdXIgbnVtZXJpYyBhcmd1bWVudHMgd2l0aCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxLicsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjdWJpYy1iZXppZXInLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludHM6IChjb250cm9sUG9pbnRzOiBhbnkpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFVua25vd24gaW50ZXJwb2xhdGlvbiB0eXBlICR7U3RyaW5nKGludGVycG9sYXRpb25bMF0pfWAsIDEsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gMSA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgJHthcmdzLmxlbmd0aCAtIDF9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChhcmdzLmxlbmd0aCAtIDEpICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gY29udGV4dC5wYXJzZShpbnB1dCwgMiwgTnVtYmVyVHlwZSk7XG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHN0b3BzOiBTdG9wcyA9IFtdO1xuXG4gICAgICAgIGxldCBvdXRwdXRUeXBlOiBUeXBlID0gKG51bGw6IGFueSk7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gJ2ludGVycG9sYXRlLWhjbCcgfHwgb3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZS1sYWInKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gQ29sb3JUeXBlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQuZXhwZWN0ZWRUeXBlICYmIGNvbnRleHQuZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSByZXN0W2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXN0W2kgKyAxXTtcblxuICAgICAgICAgICAgY29uc3QgbGFiZWxLZXkgPSBpICsgMztcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gaSArIDQ7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsIGxhYmVsS2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0b3BzLmxlbmd0aCAmJiBzdG9wc1tzdG9wcy5sZW5ndGggLSAxXVswXSA+PSBsYWJlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLCBsYWJlbEtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGNvbnRleHQucGFyc2UodmFsdWUsIHZhbHVlS2V5LCBvdXRwdXRUeXBlKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHBhcnNlZC50eXBlO1xuICAgICAgICAgICAgc3RvcHMucHVzaChbbGFiZWwsIHBhcnNlZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG91dHB1dFR5cGUua2luZCAhPT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIG91dHB1dFR5cGUua2luZCAhPT0gJ2NvbG9yJyAmJlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICBvdXRwdXRUeXBlLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICBvdXRwdXRUeXBlLml0ZW1UeXBlLmtpbmQgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG91dHB1dFR5cGUuTiA9PT0gJ251bWJlcidcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgVHlwZSAke3RvU3RyaW5nKG91dHB1dFR5cGUpfSBpcyBub3QgaW50ZXJwb2xhdGFibGUuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEludGVycG9sYXRlKG91dHB1dFR5cGUsIChvcGVyYXRvcjogYW55KSwgaW50ZXJwb2xhdGlvbiwgaW5wdXQsIHN0b3BzKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMubGFiZWxzO1xuICAgICAgICBjb25zdCBvdXRwdXRzID0gdGhpcy5vdXRwdXRzO1xuXG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1swXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSAoKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgaWYgKHZhbHVlIDw9IGxhYmVsc1swXSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbMF0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0b3BDb3VudCA9IGxhYmVscy5sZW5ndGg7XG4gICAgICAgIGlmICh2YWx1ZSA+PSBsYWJlbHNbc3RvcENvdW50IC0gMV0pIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzW3N0b3BDb3VudCAtIDFdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8obGFiZWxzLCB2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGxvd2VyID0gbGFiZWxzW2luZGV4XTtcbiAgICAgICAgY29uc3QgdXBwZXIgPSBsYWJlbHNbaW5kZXggKyAxXTtcbiAgICAgICAgY29uc3QgdCA9IEludGVycG9sYXRlLmludGVycG9sYXRpb25GYWN0b3IodGhpcy5pbnRlcnBvbGF0aW9uLCB2YWx1ZSwgbG93ZXIsIHVwcGVyKTtcblxuICAgICAgICBjb25zdCBvdXRwdXRMb3dlciA9IG91dHB1dHNbaW5kZXhdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIGNvbnN0IG91dHB1dFVwcGVyID0gb3V0cHV0c1tpbmRleCArIDFdLmV2YWx1YXRlKGN0eCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiAoaW50ZXJwb2xhdGVbdGhpcy50eXBlLmtpbmQudG9Mb3dlckNhc2UoKV06IGFueSkob3V0cHV0TG93ZXIsIG91dHB1dFVwcGVyLCB0KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcGVyYXRvciA9PT0gJ2ludGVycG9sYXRlLWhjbCcpIHtcbiAgICAgICAgICAgIHJldHVybiBoY2wucmV2ZXJzZShoY2wuaW50ZXJwb2xhdGUoaGNsLmZvcndhcmQob3V0cHV0TG93ZXIpLCBoY2wuZm9yd2FyZChvdXRwdXRVcHBlciksIHQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsYWIucmV2ZXJzZShsYWIuaW50ZXJwb2xhdGUobGFiLmZvcndhcmQob3V0cHV0TG93ZXIpLCBsYWIuZm9yd2FyZChvdXRwdXRVcHBlciksIHQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgICAgIGZvciAoY29uc3QgZXhwcmVzc2lvbiBvZiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgIGZuKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCk6IEFycmF5PFZhbHVlIHwgdm9pZD4ge1xuICAgICAgICByZXR1cm4gW10uY29uY2F0KC4uLnRoaXMub3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gb3V0cHV0LnBvc3NpYmxlT3V0cHV0cygpKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGxldCBpbnRlcnBvbGF0aW9uO1xuICAgICAgICBpZiAodGhpcy5pbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdsaW5lYXInKSB7XG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uID0gW1wibGluZWFyXCJdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnZXhwb25lbnRpYWwnKSB7XG4gICAgICAgICAgICBpZiAgKHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IFtcImxpbmVhclwiXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IFtcImV4cG9uZW50aWFsXCIsIHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGludGVycG9sYXRpb24gPSBbXCJjdWJpYy1iZXppZXJcIiBdLmNvbmNhdCh0aGlzLmludGVycG9sYXRpb24uY29udHJvbFBvaW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW3RoaXMub3BlcmF0b3IsIGludGVycG9sYXRpb24sIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sYWJlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsc1tpXSxcbiAgICAgICAgICAgICAgICB0aGlzLm91dHB1dHNbaV0uc2VyaWFsaXplKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSByYXRpbyB0aGF0IGNhbiBiZSB1c2VkIHRvIGludGVycG9sYXRlIGJldHdlZW4gZXhwb25lbnRpYWwgZnVuY3Rpb25cbiAqIHN0b3BzLlxuICogSG93IGl0IHdvcmtzOiBUd28gY29uc2VjdXRpdmUgc3RvcCB2YWx1ZXMgZGVmaW5lIGEgKHNjYWxlZCBhbmQgc2hpZnRlZCkgZXhwb25lbnRpYWwgZnVuY3Rpb24gYGYoeCkgPSBhICogYmFzZV54ICsgYmAsIHdoZXJlIGBiYXNlYCBpcyB0aGUgdXNlci1zcGVjaWZpZWQgYmFzZSxcbiAqIGFuZCBgYWAgYW5kIGBiYCBhcmUgY29uc3RhbnRzIGFmZm9yZGluZyBzdWZmaWNpZW50IGRlZ3JlZXMgb2YgZnJlZWRvbSB0byBmaXRcbiAqIHRoZSBmdW5jdGlvbiB0byB0aGUgZ2l2ZW4gc3RvcHMuXG4gKlxuICogSGVyZSdzIGEgYml0IG9mIGFsZ2VicmEgdGhhdCBsZXRzIHVzIGNvbXB1dGUgYGYoeClgIGRpcmVjdGx5IGZyb20gdGhlIHN0b3BcbiAqIHZhbHVlcyB3aXRob3V0IGV4cGxpY2l0bHkgc29sdmluZyBmb3IgYGFgIGFuZCBgYmA6XG4gKlxuICogRmlyc3Qgc3RvcCB2YWx1ZTogYGYoeDApID0geTAgPSBhICogYmFzZV54MCArIGJgXG4gKiBTZWNvbmQgc3RvcCB2YWx1ZTogYGYoeDEpID0geTEgPSBhICogYmFzZV54MSArIGJgXG4gKiA9PiBgeTEgLSB5MCA9IGEoYmFzZV54MSAtIGJhc2VeeDApYFxuICogPT4gYGEgPSAoeTEgLSB5MCkvKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqXG4gKiBEZXNpcmVkIHZhbHVlOiBgZih4KSA9IHkgPSBhICogYmFzZV54ICsgYmBcbiAqID0+IGBmKHgpID0geTAgKyBhICogKGJhc2VeeCAtIGJhc2VeeDApYFxuICpcbiAqIEZyb20gdGhlIGFib3ZlLCB3ZSBjYW4gcmVwbGFjZSB0aGUgYGFgIGluIGBhICogKGJhc2VeeCAtIGJhc2VeeDApYCBhbmQgZG8gYVxuICogbGl0dGxlIGFsZ2VicmE6XG4gKiBgYGBcbiAqIGEgKiAoYmFzZV54IC0gYmFzZV54MCkgPSAoeTEgLSB5MCkvKGJhc2VeeDEgLSBiYXNlXngwKSAqIChiYXNlXnggLSBiYXNlXngwKVxuICogICAgICAgICAgICAgICAgICAgICA9ICh5MSAtIHkwKSAqIChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIC0gYmFzZV54MClcbiAqIGBgYFxuICpcbiAqIElmIHdlIGxldCBgKGJhc2VeeCAtIGJhc2VeeDApIC8gKGJhc2VeeDEgYmFzZV54MClgLCB0aGVuIHdlIGhhdmVcbiAqIGBmKHgpID0geTAgKyAoeTEgLSB5MCkgKiByYXRpb2AuICBJbiBvdGhlciB3b3JkcywgYHJhdGlvYCBtYXkgYmUgdHJlYXRlZCBhc1xuICogYW4gaW50ZXJwb2xhdGlvbiBmYWN0b3IgYmV0d2VlbiB0aGUgdHdvIHN0b3BzJyBvdXRwdXQgdmFsdWVzLlxuICpcbiAqIChOb3RlOiBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtIGZvciBgcmF0aW9gLFxuICogYChiYXNlXih4LXgwKSAtIDEpIC8gKGJhc2VeKHgxLXgwKSAtIDEpIGAsIGlzIGVxdWl2YWxlbnQsIGJ1dCByZXF1aXJlcyBmZXdlclxuICogZXhwZW5zaXZlIGBNYXRoLnBvdygpYCBvcGVyYXRpb25zLilcbiAqXG4gKiBAcHJpdmF0ZVxuKi9cbmZ1bmN0aW9uIGV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbihpbnB1dCwgYmFzZSwgbG93ZXJWYWx1ZSwgdXBwZXJWYWx1ZSkge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB1cHBlclZhbHVlIC0gbG93ZXJWYWx1ZTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IGlucHV0IC0gbG93ZXJWYWx1ZTtcblxuICAgIGlmIChkaWZmZXJlbmNlID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAoYmFzZSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBkaWZmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoTWF0aC5wb3coYmFzZSwgcHJvZ3Jlc3MpIC0gMSkgLyAoTWF0aC5wb3coYmFzZSwgZGlmZmVyZW5jZSkgLSAxKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVycG9sYXRlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge2NoZWNrU3VidHlwZSwgVmFsdWVUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY2xhc3MgQ29hbGVzY2UgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgYXJnczogQXJyYXk8RXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihcIkV4cGVjdGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG91dHB1dFR5cGU6IFR5cGUgPSAobnVsbDogYW55KTtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIGlmIChleHBlY3RlZFR5cGUgJiYgZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBleHBlY3RlZFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3Muc2xpY2UoMSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGNvbnRleHQucGFyc2UoYXJnLCAxICsgcGFyc2VkQXJncy5sZW5ndGgsIG91dHB1dFR5cGUsIHVuZGVmaW5lZCwge3R5cGVBbm5vdGF0aW9uOiAnb21pdCd9KTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHBhcnNlZC50eXBlO1xuICAgICAgICAgICAgcGFyc2VkQXJncy5wdXNoKHBhcnNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KG91dHB1dFR5cGUpO1xuXG4gICAgICAgIC8vIEFib3ZlLCB3ZSBwYXJzZSBhcmd1bWVudHMgd2l0aG91dCBpbmZlcnJlZCB0eXBlIGFubm90YXRpb24gc28gdGhhdFxuICAgICAgICAvLyB0aGV5IGRvbid0IHByb2R1Y2UgYSBydW50aW1lIGVycm9yIGZvciBgbnVsbGAgaW5wdXQsIHdoaWNoIHdvdWxkXG4gICAgICAgIC8vIHByZWVtcHQgdGhlIGRlc2lyZWQgbnVsbC1jb2FsZXNjaW5nIGJlaGF2aW9yLlxuICAgICAgICAvLyBUaHVzLCBpZiBhbnkgb2Ygb3VyIGFyZ3VtZW50cyB3b3VsZCBoYXZlIG5lZWRlZCBhbiBhbm5vdGF0aW9uLCB3ZVxuICAgICAgICAvLyBuZWVkIHRvIHdyYXAgdGhlIGVuY2xvc2luZyBjb2FsZXNjZSBleHByZXNzaW9uIHdpdGggaXQgaW5zdGVhZC5cbiAgICAgICAgY29uc3QgbmVlZHNBbm5vdGF0aW9uID0gZXhwZWN0ZWRUeXBlICYmXG4gICAgICAgICAgICBwYXJzZWRBcmdzLnNvbWUoYXJnID0+IGNoZWNrU3VidHlwZShleHBlY3RlZFR5cGUsIGFyZy50eXBlKSk7XG5cbiAgICAgICAgcmV0dXJuIG5lZWRzQW5ub3RhdGlvbiA/XG4gICAgICAgICAgICBuZXcgQ29hbGVzY2UoVmFsdWVUeXBlLCBwYXJzZWRBcmdzKSA6XG4gICAgICAgICAgICBuZXcgQ29hbGVzY2UoKG91dHB1dFR5cGU6IGFueSksIHBhcnNlZEFyZ3MpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgIGxldCBhcmdDb3VudCA9IDA7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRJbWFnZU5hbWU7XG4gICAgICAgIGZvciAoY29uc3QgYXJnIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgYXJnQ291bnQrKztcbiAgICAgICAgICAgIHJlc3VsdCA9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBmaXJzdCByZXF1ZXN0ZWQgaW1hZ2UgaW4gYSBjb2FsZXNjZSBzdGF0ZW1lbnRcbiAgICAgICAgICAgIC8vIGlmIGNvYWxlc2NlIGNhbid0IGZpbmQgYSB2YWxpZCBpbWFnZSwgd2UgcmV0dXJuIHRoZSBmaXJzdCBpbWFnZSBuYW1lIHNvIHN0eWxlaW1hZ2VtaXNzaW5nIGNhbiBmaXJlXG4gICAgICAgICAgICBpZiAoYXJnLnR5cGUua2luZCA9PT0gJ2ltYWdlJyAmJiAhcmVzdWx0LmF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdGVkSW1hZ2VOYW1lKSByZXF1ZXN0ZWRJbWFnZU5hbWUgPSBhcmcuZXZhbHVhdGUoY3R4KS5uYW1lO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID09PSB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlcXVlc3RlZEltYWdlTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCk6IEFycmF5PFZhbHVlIHwgdm9pZD4ge1xuICAgICAgICByZXR1cm4gW10uY29uY2F0KC4uLnRoaXMuYXJncy5tYXAoKGFyZykgPT4gYXJnLnBvc3NpYmxlT3V0cHV0cygpKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiY29hbGVzY2VcIl07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29hbGVzY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0ICBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuXG5jbGFzcyBMZXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT47XG4gICAgcmVzdWx0OiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IoYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPiwgcmVzdWx0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHJlc3VsdC50eXBlO1xuICAgICAgICB0aGlzLmJpbmRpbmdzID0gW10uY29uY2F0KGJpbmRpbmdzKTtcbiAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQuZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiB0aGlzLmJpbmRpbmdzKSB7XG4gICAgICAgICAgICBmbihiaW5kaW5nWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBmbih0aGlzLnJlc3VsdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNClcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuXG4gICAgICAgIGNvbnN0IGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGFyZ3NbaV07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgc3RyaW5nLCBidXQgZm91bmQgJHt0eXBlb2YgbmFtZX0gaW5zdGVhZC5gLCBpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKC9bXmEtekEtWjAtOV9dLy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFZhcmlhYmxlIG5hbWVzIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yICdfJy5gLCBpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaSArIDFdLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgYmluZGluZ3MucHVzaChbbmFtZSwgdmFsdWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQucGFyc2UoYXJnc1thcmdzLmxlbmd0aCAtIDFdLCBhcmdzLmxlbmd0aCAtIDEsIGNvbnRleHQuZXhwZWN0ZWRUeXBlLCBiaW5kaW5ncyk7XG4gICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4gbmV3IExldChiaW5kaW5ncywgcmVzdWx0KTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC5wb3NzaWJsZU91dHB1dHMoKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJsZXRcIl07XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGV4cHJdIG9mIHRoaXMuYmluZGluZ3MpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChuYW1lLCBleHByLnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBzZXJpYWxpemVkLnB1c2godGhpcy5yZXN1bHQuc2VyaWFsaXplKCkpO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExldDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YXJyYXksIFZhbHVlVHlwZSwgTnVtYmVyVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlLCBBcnJheVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcblxuY2xhc3MgQXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGluZGV4OiBFeHByZXNzaW9uO1xuICAgIGlucHV0OiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgaW5kZXg6IEV4cHJlc3Npb24sIGlucHV0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMylcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMl0sIDIsIGFycmF5KGNvbnRleHQuZXhwZWN0ZWRUeXBlIHx8IFZhbHVlVHlwZSkpO1xuXG4gICAgICAgIGlmICghaW5kZXggfHwgIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCB0OiBBcnJheVR5cGUgPSAoaW5wdXQudHlwZTogYW55KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBdCh0Lml0ZW1UeXBlLCBpbmRleCwgaW5wdXQpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSAoKHRoaXMuaW5kZXguZXZhbHVhdGUoY3R4KTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgY29uc3QgYXJyYXkgPSAoKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTogQXJyYXk8VmFsdWU+KTtcblxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAke2luZGV4fSA8IDAuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPj0gYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAke2luZGV4fSA+ICR7YXJyYXkubGVuZ3RoIC0gMX0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggIT09IE1hdGguZmxvb3IoaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBBcnJheSBpbmRleCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBmb3VuZCAke2luZGV4fSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5W2luZGV4XTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMuaW5kZXgpO1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBbXCJhdFwiLCB0aGlzLmluZGV4LnNlcmlhbGl6ZSgpLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge3R5cGVPZn0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB7VmFsdWVUeXBlLCB0eXBlIFR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbi8vIE1hcCBpbnB1dCBsYWJlbCB2YWx1ZXMgdG8gb3V0cHV0IGV4cHJlc3Npb24gaW5kZXhcbnR5cGUgQ2FzZXMgPSB7W251bWJlciB8IHN0cmluZ106IG51bWJlcn07XG5cbmNsYXNzIE1hdGNoIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBpbnB1dFR5cGU6IFR5cGU7XG5cbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcbiAgICBjYXNlczogQ2FzZXM7XG4gICAgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj47XG4gICAgb3RoZXJ3aXNlOiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IoaW5wdXRUeXBlOiBUeXBlLCBvdXRwdXRUeXBlOiBUeXBlLCBpbnB1dDogRXhwcmVzc2lvbiwgY2FzZXM6IENhc2VzLCBvdXRwdXRzOiBBcnJheTxFeHByZXNzaW9uPiwgb3RoZXJ3aXNlOiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMuaW5wdXRUeXBlID0gaW5wdXRUeXBlO1xuICAgICAgICB0aGlzLnR5cGUgPSBvdXRwdXRUeXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuY2FzZXMgPSBjYXNlcztcbiAgICAgICAgdGhpcy5vdXRwdXRzID0gb3V0cHV0cztcbiAgICAgICAgdGhpcy5vdGhlcndpc2UgPSBvdGhlcndpc2U7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgJHthcmdzLmxlbmd0aCAtIDF9LmApO1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggJSAyICE9PSAxKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICBsZXQgaW5wdXRUeXBlO1xuICAgICAgICBsZXQgb3V0cHV0VHlwZTtcbiAgICAgICAgaWYgKGNvbnRleHQuZXhwZWN0ZWRUeXBlICYmIGNvbnRleHQuZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYXNlcyA9IHt9O1xuICAgICAgICBjb25zdCBvdXRwdXRzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgYXJncy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGxldCBsYWJlbHMgPSBhcmdzW2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzW2kgKyAxXTtcblxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxhYmVscykpIHtcbiAgICAgICAgICAgICAgICBsYWJlbHMgPSBbbGFiZWxzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGFiZWxDb250ZXh0ID0gY29udGV4dC5jb25jYXQoaSk7XG4gICAgICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbENvbnRleHQuZXJyb3IoJ0V4cGVjdGVkIGF0IGxlYXN0IG9uZSBicmFuY2ggbGFiZWwuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsYWJlbCAhPT0gJ251bWJlcicgJiYgdHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKGBCcmFuY2ggbGFiZWxzIG11c3QgYmUgbnVtYmVycyBvciBzdHJpbmdzLmApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxhYmVsID09PSAnbnVtYmVyJyAmJiBNYXRoLmFicyhsYWJlbCkgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKGBCcmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlcnMgbm8gbGFyZ2VyIHRoYW4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn0uYCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsYWJlbCA9PT0gJ251bWJlcicgJiYgTWF0aC5mbG9vcihsYWJlbCkgIT09IGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbENvbnRleHQuZXJyb3IoYE51bWVyaWMgYnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXIgdmFsdWVzLmApO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaW5wdXRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9IHR5cGVPZihsYWJlbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYWJlbENvbnRleHQuY2hlY2tTdWJ0eXBlKGlucHV0VHlwZSwgdHlwZU9mKGxhYmVsKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXNlc1tTdHJpbmcobGFiZWwpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsQ29udGV4dC5lcnJvcignQnJhbmNoIGxhYmVscyBtdXN0IGJlIHVuaXF1ZS4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlc1tTdHJpbmcobGFiZWwpXSA9IG91dHB1dHMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LnBhcnNlKHZhbHVlLCBpLCBvdXRwdXRUeXBlKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHJlc3VsdC50eXBlO1xuICAgICAgICAgICAgb3V0cHV0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgVmFsdWVUeXBlKTtcbiAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgb3RoZXJ3aXNlID0gY29udGV4dC5wYXJzZShhcmdzW2FyZ3MubGVuZ3RoIC0gMV0sIGFyZ3MubGVuZ3RoIC0gMSwgb3V0cHV0VHlwZSk7XG4gICAgICAgIGlmICghb3RoZXJ3aXNlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBhc3NlcnQoaW5wdXRUeXBlICYmIG91dHB1dFR5cGUpO1xuXG4gICAgICAgIGlmIChpbnB1dC50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiYgY29udGV4dC5jb25jYXQoMSkuY2hlY2tTdWJ0eXBlKChpbnB1dFR5cGU6IGFueSksIGlucHV0LnR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2goKGlucHV0VHlwZTogYW55KSwgKG91dHB1dFR5cGU6IGFueSksIGlucHV0LCBjYXNlcywgb3V0cHV0cywgb3RoZXJ3aXNlKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gKHR5cGVPZihpbnB1dCkgPT09IHRoaXMuaW5wdXRUeXBlICYmIHRoaXMub3V0cHV0c1t0aGlzLmNhc2VzW2lucHV0XV0pIHx8IHRoaXMub3RoZXJ3aXNlO1xuICAgICAgICByZXR1cm4gb3V0cHV0LmV2YWx1YXRlKGN0eCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICAgICAgdGhpcy5vdXRwdXRzLmZvckVhY2goZm4pO1xuICAgICAgICBmbih0aGlzLm90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCk6IEFycmF5PFZhbHVlIHwgdm9pZD4ge1xuICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICAgIC5jb25jYXQoLi4udGhpcy5vdXRwdXRzLm1hcCgob3V0KSA9PiBvdXQucG9zc2libGVPdXRwdXRzKCkpKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLm90aGVyd2lzZS5wb3NzaWJsZU91dHB1dHMoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJtYXRjaFwiLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcblxuICAgICAgICAvLyBTb3J0IHNvIHNlcmlhbGl6YXRpb24gaGFzIGFuIGFyYml0cmFyeSBkZWZpbmVkIG9yZGVyLCBldmVuIHRob3VnaFxuICAgICAgICAvLyBicmFuY2ggb3JkZXIgZG9lc24ndCBhZmZlY3QgZXZhbHVhdGlvblxuICAgICAgICBjb25zdCBzb3J0ZWRMYWJlbHMgPSBPYmplY3Qua2V5cyh0aGlzLmNhc2VzKS5zb3J0KCk7XG5cbiAgICAgICAgLy8gR3JvdXAgYnJhbmNoZXMgYnkgdW5pcXVlIG1hdGNoIGV4cHJlc3Npb24gdG8gc3VwcG9ydCBjb25kZW5zZWRcbiAgICAgICAgLy8gc2VyaWFsaXphdGlvbnMgb2YgdGhlIGZvcm0gW2Nhc2UxLCBjYXNlMiwgLi4uXSAtPiBtYXRjaEV4cHJlc3Npb25cbiAgICAgICAgY29uc3QgZ3JvdXBlZEJ5T3V0cHV0OiBBcnJheTxbbnVtYmVyLCBBcnJheTxudW1iZXIgfCBzdHJpbmc+XT4gPSBbXTtcbiAgICAgICAgY29uc3Qgb3V0cHV0TG9va3VwOiB7W2luZGV4OiBudW1iZXJdOiBudW1iZXJ9ID0ge307IC8vIGxvb2t1cCBpbmRleCBpbnRvIGdyb3VwZWRCeU91dHB1dCBmb3IgYSBnaXZlbiBvdXRwdXQgZXhwcmVzc2lvblxuICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIHNvcnRlZExhYmVscykge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSBvdXRwdXRMb29rdXBbdGhpcy5jYXNlc1tsYWJlbF1dO1xuICAgICAgICAgICAgaWYgKG91dHB1dEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBGaXJzdCB0aW1lIHNlZWluZyB0aGlzIG91dHB1dCwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGdyb3VwZWQgbGlzdFxuICAgICAgICAgICAgICAgIG91dHB1dExvb2t1cFt0aGlzLmNhc2VzW2xhYmVsXV0gPSBncm91cGVkQnlPdXRwdXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGdyb3VwZWRCeU91dHB1dC5wdXNoKFt0aGlzLmNhc2VzW2xhYmVsXSwgW2xhYmVsXV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBzZWVuIHRoaXMgZXhwcmVzc2lvbiBiZWZvcmUsIGFkZCB0aGUgbGFiZWwgdG8gdGhhdCBvdXRwdXQncyBncm91cFxuICAgICAgICAgICAgICAgIGdyb3VwZWRCeU91dHB1dFtvdXRwdXRJbmRleF1bMV0ucHVzaChsYWJlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2VyY2VMYWJlbCA9IChsYWJlbCkgPT4gdGhpcy5pbnB1dFR5cGUua2luZCA9PT0gJ251bWJlcicgPyBOdW1iZXIobGFiZWwpIDogbGFiZWw7XG5cbiAgICAgICAgZm9yIChjb25zdCBbb3V0cHV0SW5kZXgsIGxhYmVsc10gb2YgZ3JvdXBlZEJ5T3V0cHV0KSB7XG4gICAgICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgYSBzaW5nbGUgbGFiZWwgbWF0Y2hlcyB0aGlzIG91dHB1dCBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKGNvZXJjZUxhYmVsKGxhYmVsc1swXSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBcnJheSBvZiBsaXRlcmFsIGxhYmVscyBwb2ludGluZyB0byB0aGlzIG91dHB1dCBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKGxhYmVscy5tYXAoY29lcmNlTGFiZWwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLm91dHB1dHNbb3V0cHV0SW5kZXhdLnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBzZXJpYWxpemVkLnB1c2godGhpcy5vdGhlcndpc2Uuc2VyaWFsaXplKCkpO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge0Jvb2xlYW5UeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxudHlwZSBCcmFuY2hlcyA9IEFycmF5PFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXT47XG5cbmNsYXNzIENhc2UgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuXG4gICAgYnJhbmNoZXM6IEJyYW5jaGVzO1xuICAgIG90aGVyd2lzZTogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGJyYW5jaGVzOiBCcmFuY2hlcywgb3RoZXJ3aXNlOiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYnJhbmNoZXMgPSBicmFuY2hlcztcbiAgICAgICAgdGhpcy5vdGhlcndpc2UgPSBvdGhlcndpc2U7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNClcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgJHthcmdzLmxlbmd0aCAtIDF9LmApO1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzLmApO1xuXG4gICAgICAgIGxldCBvdXRwdXRUeXBlOiA/VHlwZTtcbiAgICAgICAgaWYgKGNvbnRleHQuZXhwZWN0ZWRUeXBlICYmIGNvbnRleHQuZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJyYW5jaGVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3QgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaV0sIGksIEJvb2xlYW5UeXBlKTtcbiAgICAgICAgICAgIGlmICghdGVzdCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQucGFyc2UoYXJnc1tpICsgMV0sIGkgKyAxLCBvdXRwdXRUeXBlKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgYnJhbmNoZXMucHVzaChbdGVzdCwgcmVzdWx0XSk7XG5cbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHJlc3VsdC50eXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3RoZXJ3aXNlID0gY29udGV4dC5wYXJzZShhcmdzW2FyZ3MubGVuZ3RoIC0gMV0sIGFyZ3MubGVuZ3RoIC0gMSwgb3V0cHV0VHlwZSk7XG4gICAgICAgIGlmICghb3RoZXJ3aXNlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBhc3NlcnQob3V0cHV0VHlwZSk7XG4gICAgICAgIHJldHVybiBuZXcgQ2FzZSgob3V0cHV0VHlwZTogYW55KSwgYnJhbmNoZXMsIG90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBmb3IgKGNvbnN0IFt0ZXN0LCBleHByZXNzaW9uXSBvZiB0aGlzLmJyYW5jaGVzKSB7XG4gICAgICAgICAgICBpZiAodGVzdC5ldmFsdWF0ZShjdHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5vdGhlcndpc2UuZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3QgW3Rlc3QsIGV4cHJlc3Npb25dIG9mIHRoaXMuYnJhbmNoZXMpIHtcbiAgICAgICAgICAgIGZuKHRlc3QpO1xuICAgICAgICAgICAgZm4oZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgZm4odGhpcy5vdGhlcndpc2UpO1xuICAgIH1cblxuICAgIHBvc3NpYmxlT3V0cHV0cygpOiBBcnJheTxWYWx1ZSB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgICAgICAuY29uY2F0KC4uLnRoaXMuYnJhbmNoZXMubWFwKChbXywgb3V0XSkgPT4gb3V0LnBvc3NpYmxlT3V0cHV0cygpKSlcbiAgICAgICAgICAgIC5jb25jYXQodGhpcy5vdGhlcndpc2UucG9zc2libGVPdXRwdXRzKCkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcImNhc2VcIl07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FzZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dG9TdHJpbmcsIFZhbHVlVHlwZSwgQm9vbGVhblR5cGUsIENvbGxhdG9yVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tICcuL2Fzc2VydGlvbic7XG5pbXBvcnQge3R5cGVPZn0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxudHlwZSBDb21wYXJpc29uT3BlcmF0b3IgPSAnPT0nIHwgJyE9JyB8ICc8JyB8ICc+JyB8ICc8PScgfCAnPj0nIDtcblxuZnVuY3Rpb24gaXNDb21wYXJhYmxlVHlwZShvcDogQ29tcGFyaXNvbk9wZXJhdG9yLCB0eXBlOiBUeXBlKSB7XG4gICAgaWYgKG9wID09PSAnPT0nIHx8IG9wID09PSAnIT0nKSB7XG4gICAgICAgIC8vIGVxdWFsaXR5IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiB0eXBlLmtpbmQgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAnbnVsbCcgfHxcbiAgICAgICAgICAgIHR5cGUua2luZCA9PT0gJ3ZhbHVlJztcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvcmRlcmluZyBvcGVyYXRvclxuICAgICAgICByZXR1cm4gdHlwZS5raW5kID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAndmFsdWUnO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhID09PSBiOyB9XG5mdW5jdGlvbiBuZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhICE9PSBiOyB9XG5mdW5jdGlvbiBsdChjdHgsIGEsIGIpIHsgcmV0dXJuIGEgPCBiOyB9XG5mdW5jdGlvbiBndChjdHgsIGEsIGIpIHsgcmV0dXJuIGEgPiBiOyB9XG5mdW5jdGlvbiBsdGVxKGN0eCwgYSwgYikgeyByZXR1cm4gYSA8PSBiOyB9XG5mdW5jdGlvbiBndGVxKGN0eCwgYSwgYikgeyByZXR1cm4gYSA+PSBiOyB9XG5cbmZ1bmN0aW9uIGVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuIGMuY29tcGFyZShhLCBiKSA9PT0gMDsgfVxuZnVuY3Rpb24gbmVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuICFlcUNvbGxhdGUoY3R4LCBhLCBiLCBjKTsgfVxuZnVuY3Rpb24gbHRDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gYy5jb21wYXJlKGEsIGIpIDwgMDsgfVxuZnVuY3Rpb24gZ3RDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gYy5jb21wYXJlKGEsIGIpID4gMDsgfVxuZnVuY3Rpb24gbHRlcUNvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPD0gMDsgfVxuZnVuY3Rpb24gZ3RlcUNvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPj0gMDsgfVxuXG4vKipcbiAqIFNwZWNpYWwgZm9ybSBmb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGltcGxlbWVudGluZyB0aGUgc2lnbmF0dXJlczpcbiAqIC0gKFQsIFQsID9Db2xsYXRvcikgPT4gYm9vbGVhblxuICogLSAoVCwgdmFsdWUsID9Db2xsYXRvcikgPT4gYm9vbGVhblxuICogLSAodmFsdWUsIFQsID9Db2xsYXRvcikgPT4gYm9vbGVhblxuICpcbiAqIEZvciBpbmVxdWFsaXRpZXMsIFQgbXVzdCBiZSBlaXRoZXIgdmFsdWUsIHN0cmluZywgb3IgbnVtYmVyLiBGb3IgPT0vIT0sIGl0XG4gKiBjYW4gYWxzbyBiZSBib29sZWFuIG9yIG51bGwuXG4gKlxuICogRXF1YWxpdHkgc2VtYW50aWNzIGFyZSBlcXVpdmFsZW50IHRvIEphdmFzY3JpcHQncyBzdHJpY3QgZXF1YWxpdHkgKD09PS8hPT0pXG4gKiAtLSBpLmUuLCB3aGVuIHRoZSBhcmd1bWVudHMnIHR5cGVzIGRvbid0IG1hdGNoLCA9PSBldmFsdWF0ZXMgdG8gZmFsc2UsICE9IHRvXG4gKiB0cnVlLlxuICpcbiAqIFdoZW4gdHlwZXMgZG9uJ3QgbWF0Y2ggaW4gYW4gb3JkZXJpbmcgY29tcGFyaXNvbiwgYSBydW50aW1lIGVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYWtlQ29tcGFyaXNvbihvcDogQ29tcGFyaXNvbk9wZXJhdG9yLCBjb21wYXJlQmFzaWMsIGNvbXBhcmVXaXRoQ29sbGF0b3IpIHtcbiAgICBjb25zdCBpc09yZGVyQ29tcGFyaXNvbiA9IG9wICE9PSAnPT0nICYmIG9wICE9PSAnIT0nO1xuXG4gICAgcmV0dXJuIGNsYXNzIENvbXBhcmlzb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICAgICAgdHlwZTogVHlwZTtcbiAgICAgICAgbGhzOiBFeHByZXNzaW9uO1xuICAgICAgICByaHM6IEV4cHJlc3Npb247XG4gICAgICAgIGNvbGxhdG9yOiA/RXhwcmVzc2lvbjtcbiAgICAgICAgaGFzVW50eXBlZEFyZ3VtZW50OiBib29sZWFuO1xuXG4gICAgICAgIGNvbnN0cnVjdG9yKGxoczogRXhwcmVzc2lvbiwgcmhzOiBFeHByZXNzaW9uLCBjb2xsYXRvcjogP0V4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IEJvb2xlYW5UeXBlO1xuICAgICAgICAgICAgdGhpcy5saHMgPSBsaHM7XG4gICAgICAgICAgICB0aGlzLnJocyA9IHJocztcbiAgICAgICAgICAgIHRoaXMuY29sbGF0b3IgPSBjb2xsYXRvcjtcbiAgICAgICAgICAgIHRoaXMuaGFzVW50eXBlZEFyZ3VtZW50ID0gbGhzLnR5cGUua2luZCA9PT0gJ3ZhbHVlJyB8fCByaHMudHlwZS5raW5kID09PSAndmFsdWUnO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDMgJiYgYXJncy5sZW5ndGggIT09IDQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIHR3byBvciB0aHJlZSBhcmd1bWVudHMuYCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9wOiBDb21wYXJpc29uT3BlcmF0b3IgPSAoYXJnc1swXTogYW55KTtcblxuICAgICAgICAgICAgbGV0IGxocyA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgVmFsdWVUeXBlKTtcbiAgICAgICAgICAgIGlmICghbGhzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGlmICghaXNDb21wYXJhYmxlVHlwZShvcCwgbGhzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY29uY2F0KDEpLmVycm9yKGBcIiR7b3B9XCIgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHR5cGUgJyR7dG9TdHJpbmcobGhzLnR5cGUpfScuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmhzID0gY29udGV4dC5wYXJzZShhcmdzWzJdLCAyLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFyaHMpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgaWYgKCFpc0NvbXBhcmFibGVUeXBlKG9wLCByaHMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb25jYXQoMikuZXJyb3IoYFwiJHtvcH1cIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnJHt0b1N0cmluZyhyaHMudHlwZSl9Jy5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09IHJocy50eXBlLmtpbmQgJiZcbiAgICAgICAgICAgICAgICBsaHMudHlwZS5raW5kICE9PSAndmFsdWUnICYmXG4gICAgICAgICAgICAgICAgcmhzLnR5cGUua2luZCAhPT0gJ3ZhbHVlJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYENhbm5vdCBjb21wYXJlIHR5cGVzICcke3RvU3RyaW5nKGxocy50eXBlKX0nIGFuZCAnJHt0b1N0cmluZyhyaHMudHlwZSl9Jy5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzT3JkZXJDb21wYXJpc29uKSB7XG4gICAgICAgICAgICAgICAgLy8gdHlwaW5nIHJ1bGVzIHNwZWNpZmljIHRvIGxlc3MvZ3JlYXRlciB0aGFuIG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgIGlmIChsaHMudHlwZS5raW5kID09PSAndmFsdWUnICYmIHJocy50eXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKHZhbHVlLCBUKVxuICAgICAgICAgICAgICAgICAgICBsaHMgPSBuZXcgQXNzZXJ0aW9uKHJocy50eXBlLCBbbGhzXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaHMudHlwZS5raW5kICE9PSAndmFsdWUnICYmIHJocy50eXBlLmtpbmQgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKFQsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByaHMgPSBuZXcgQXNzZXJ0aW9uKGxocy50eXBlLCBbcmhzXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY29sbGF0b3IgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBsaHMudHlwZS5raW5kICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICByaHMudHlwZS5raW5kICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICBsaHMudHlwZS5raW5kICE9PSAndmFsdWUnICYmXG4gICAgICAgICAgICAgICAgICAgIHJocy50eXBlLmtpbmQgIT09ICd2YWx1ZSdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYENhbm5vdCB1c2UgY29sbGF0b3IgdG8gY29tcGFyZSBub24tc3RyaW5nIHR5cGVzLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2xsYXRvciA9IGNvbnRleHQucGFyc2UoYXJnc1szXSwgMywgQ29sbGF0b3JUeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbGxhdG9yKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uKGxocywgcmhzLCBjb2xsYXRvcik7XG4gICAgICAgIH1cblxuICAgICAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBsaHMgPSB0aGlzLmxocy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgY29uc3QgcmhzID0gdGhpcy5yaHMuZXZhbHVhdGUoY3R4KTtcblxuICAgICAgICAgICAgaWYgKGlzT3JkZXJDb21wYXJpc29uICYmIHRoaXMuaGFzVW50eXBlZEFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbHQgPSB0eXBlT2YobGhzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBydCA9IHR5cGVPZihyaHMpO1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdHlwZSBpcyBzdHJpbmcgb3IgbnVtYmVyLCBhbmQgZXF1YWxcbiAgICAgICAgICAgICAgICBpZiAobHQua2luZCAhPT0gcnQua2luZCB8fCAhKGx0LmtpbmQgPT09ICdzdHJpbmcnIHx8IGx0LmtpbmQgPT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCBhcmd1bWVudHMgZm9yIFwiJHtvcH1cIiB0byBiZSAoc3RyaW5nLCBzdHJpbmcpIG9yIChudW1iZXIsIG51bWJlciksIGJ1dCBmb3VuZCAoJHtsdC5raW5kfSwgJHtydC5raW5kfSkgaW5zdGVhZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhdG9yICYmICFpc09yZGVyQ29tcGFyaXNvbiAmJiB0aGlzLmhhc1VudHlwZWRBcmd1bWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGx0ID0gdHlwZU9mKGxocyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnQgPSB0eXBlT2YocmhzKTtcbiAgICAgICAgICAgICAgICBpZiAobHQua2luZCAhPT0gJ3N0cmluZycgfHwgcnQua2luZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCYXNpYyhjdHgsIGxocywgcmhzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxhdG9yID9cbiAgICAgICAgICAgICAgICBjb21wYXJlV2l0aENvbGxhdG9yKGN0eCwgbGhzLCByaHMsIHRoaXMuY29sbGF0b3IuZXZhbHVhdGUoY3R4KSkgOlxuICAgICAgICAgICAgICAgIGNvbXBhcmVCYXNpYyhjdHgsIGxocywgcmhzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgICAgIGZuKHRoaXMubGhzKTtcbiAgICAgICAgICAgIGZuKHRoaXMucmhzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhdG9yKSB7XG4gICAgICAgICAgICAgICAgZm4odGhpcy5jb2xsYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIGZhbHNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbb3BdO1xuICAgICAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVxdWFscyA9IG1ha2VDb21wYXJpc29uKCc9PScsIGVxLCBlcUNvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IE5vdEVxdWFscyA9IG1ha2VDb21wYXJpc29uKCchPScsIG5lcSwgbmVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgTGVzc1RoYW4gPSBtYWtlQ29tcGFyaXNvbignPCcsIGx0LCBsdENvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IEdyZWF0ZXJUaGFuID0gbWFrZUNvbXBhcmlzb24oJz4nLCBndCwgZ3RDb2xsYXRlKTtcbmV4cG9ydCBjb25zdCBMZXNzVGhhbk9yRXF1YWwgPSBtYWtlQ29tcGFyaXNvbignPD0nLCBsdGVxLCBsdGVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgR3JlYXRlclRoYW5PckVxdWFsID0gbWFrZUNvbXBhcmlzb24oJz49JywgZ3RlcSwgZ3RlcUNvbGxhdGUpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtTdHJpbmdUeXBlLCBOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZGVjbGFyZSB2YXIgSW50bDoge1xuICAgIE51bWJlckZvcm1hdDogQ2xhc3M8SW50bCROdW1iZXJGb3JtYXQ+XG59O1xuXG5kZWNsYXJlIGNsYXNzIEludGwkTnVtYmVyRm9ybWF0IHtcbiAgICBjb25zdHJ1Y3RvciAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnNcbiAgICApOiBJbnRsJE51bWJlckZvcm1hdDtcblxuICAgIHN0YXRpYyAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnNcbiAgICApOiBJbnRsJE51bWJlckZvcm1hdDtcblxuICAgIGZvcm1hdChhOiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgICByZXNvbHZlZE9wdGlvbnMoKTogYW55O1xufVxuXG50eXBlIE51bWJlckZvcm1hdE9wdGlvbnMgPSB7XG4gICAgc3R5bGU/OiAnZGVjaW1hbCcgfCAnY3VycmVuY3knIHwgJ3BlcmNlbnQnO1xuICAgIGN1cnJlbmN5PzogbnVsbCB8IHN0cmluZztcbiAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM/OiBudWxsIHwgc3RyaW5nO1xuICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0cz86IG51bGwgfCBzdHJpbmc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJGb3JtYXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIG51bWJlcjogRXhwcmVzc2lvbjtcbiAgICBsb2NhbGU6IEV4cHJlc3Npb24gfCBudWxsOyAgIC8vIEJDUCA0NyBsYW5ndWFnZSB0YWdcbiAgICBjdXJyZW5jeTogRXhwcmVzc2lvbiB8IG51bGw7IC8vIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUsIHJlcXVpcmVkIGlmIHN0eWxlPWN1cnJlbmN5XG4gICAgbWluRnJhY3Rpb25EaWdpdHM6IEV4cHJlc3Npb24gfCBudWxsOyAvLyBEZWZhdWx0IDBcbiAgICBtYXhGcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGw7IC8vIERlZmF1bHQgM1xuXG4gICAgY29uc3RydWN0b3IobnVtYmVyOiBFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGwsXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6IEV4cHJlc3Npb24gfCBudWxsLFxuICAgICAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzOiBFeHByZXNzaW9uIHwgbnVsbCxcbiAgICAgICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50eXBlID0gU3RyaW5nVHlwZTtcbiAgICAgICAgdGhpcy5udW1iZXIgPSBudW1iZXI7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgICAgICB0aGlzLmN1cnJlbmN5ID0gY3VycmVuY3k7XG4gICAgICAgIHRoaXMubWluRnJhY3Rpb25EaWdpdHMgPSBtaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyA9IG1heEZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDMpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICBjb25zdCBudW1iZXIgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICBpZiAoIW51bWJlcikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzJdOiBhbnkpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBOdW1iZXJGb3JtYXQgb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC5gKTtcblxuICAgICAgICBsZXQgbG9jYWxlID0gbnVsbDtcbiAgICAgICAgaWYgKG9wdGlvbnNbJ2xvY2FsZSddKSB7XG4gICAgICAgICAgICBsb2NhbGUgPSBjb250ZXh0LnBhcnNlKG9wdGlvbnNbJ2xvY2FsZSddLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgICAgIGlmICghbG9jYWxlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXJyZW5jeSA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydjdXJyZW5jeSddKSB7XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snY3VycmVuY3knXSwgMSwgU3RyaW5nVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbmN5KSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW5GcmFjdGlvbkRpZ2l0cyA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10pIHtcbiAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29udGV4dC5wYXJzZShvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICAgICAgaWYgKCFtaW5GcmFjdGlvbkRpZ2l0cykgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWF4RnJhY3Rpb25EaWdpdHMgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddKSB7XG4gICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgICAgIGlmICghbWF4RnJhY3Rpb25EaWdpdHMpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJGb3JtYXQobnVtYmVyLCBsb2NhbGUsIGN1cnJlbmN5LCBtaW5GcmFjdGlvbkRpZ2l0cywgbWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlLmV2YWx1YXRlKGN0eCkgOiBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogdGhpcy5jdXJyZW5jeSA/IFwiY3VycmVuY3lcIiA6IFwiZGVjaW1hbFwiLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5ID8gdGhpcy5jdXJyZW5jeS5ldmFsdWF0ZShjdHgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyA/IHRoaXMubWluRnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUoY3R4KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMubWF4RnJhY3Rpb25EaWdpdHMgPyB0aGlzLm1heEZyYWN0aW9uRGlnaXRzLmV2YWx1YXRlKGN0eCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KS5mb3JtYXQodGhpcy5udW1iZXIuZXZhbHVhdGUoY3R4KSk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLm51bWJlcik7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgZm4odGhpcy5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBmbih0aGlzLmN1cnJlbmN5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW5GcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgZm4odGhpcy5taW5GcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgIGZuKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgb3B0aW9uc1snbG9jYWxlJ10gPSB0aGlzLmxvY2FsZS5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW5jeSkge1xuICAgICAgICAgICAgb3B0aW9uc1snY3VycmVuY3knXSA9IHRoaXMuY3VycmVuY3kuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluRnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ21pbi1mcmFjdGlvbi1kaWdpdHMnXSA9IHRoaXMubWluRnJhY3Rpb25EaWdpdHMuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ21heC1mcmFjdGlvbi1kaWdpdHMnXSA9IHRoaXMubWF4RnJhY3Rpb25EaWdpdHMuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm51bWJlci1mb3JtYXRcIiwgdGhpcy5udW1iZXIuc2VyaWFsaXplKCksIG9wdGlvbnNdO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7TnVtYmVyVHlwZSwgdG9TdHJpbmd9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIExlbmd0aCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dDogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLnR5cGUgPSBOdW1iZXJUeXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIDEgYXJndW1lbnQsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcblxuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSk7XG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmIChpbnB1dC50eXBlLmtpbmQgIT09ICdhcnJheScgJiYgaW5wdXQudHlwZS5raW5kICE9PSAnc3RyaW5nJyAmJiBpbnB1dC50eXBlLmtpbmQgIT09ICd2YWx1ZScpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXJndW1lbnQgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAke3RvU3RyaW5nKGlucHV0LnR5cGUpfSBpbnN0ZWFkLmApO1xuXG4gICAgICAgIHJldHVybiBuZXcgTGVuZ3RoKGlucHV0KTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5ldmFsdWF0ZShjdHgpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0Lmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0Lmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgJHt0b1N0cmluZyh0eXBlT2YoaW5wdXQpKX0gaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wibGVuZ3RoXCJdO1xuICAgICAgICB0aGlzLmVhY2hDaGlsZChjaGlsZCA9PiB7IHNlcmlhbGl6ZWQucHVzaChjaGlsZC5zZXJpYWxpemUoKSk7IH0pO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExlbmd0aDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgdHlwZSBUeXBlLFxuICAgIE51bWJlclR5cGUsXG4gICAgU3RyaW5nVHlwZSxcbiAgICBCb29sZWFuVHlwZSxcbiAgICBDb2xvclR5cGUsXG4gICAgT2JqZWN0VHlwZSxcbiAgICBWYWx1ZVR5cGUsXG4gICAgRXJyb3JUeXBlLFxuICAgIENvbGxhdG9yVHlwZSxcbiAgICBhcnJheSxcbiAgICB0b1N0cmluZyBhcyB0eXBlVG9TdHJpbmdcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge3R5cGVPZiwgQ29sb3IsIHZhbGlkYXRlUkdCQSwgdG9TdHJpbmcgYXMgdmFsdWVUb1N0cmluZ30gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCBDb21wb3VuZEV4cHJlc3Npb24gZnJvbSAnLi4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IExldCBmcm9tICcuL2xldCc7XG5pbXBvcnQgVmFyIGZyb20gJy4vdmFyJztcbmltcG9ydCBMaXRlcmFsIGZyb20gJy4vbGl0ZXJhbCc7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gJy4vYXNzZXJ0aW9uJztcbmltcG9ydCBDb2VyY2lvbiBmcm9tICcuL2NvZXJjaW9uJztcbmltcG9ydCBBdCBmcm9tICcuL2F0JztcbmltcG9ydCBNYXRjaCBmcm9tICcuL21hdGNoJztcbmltcG9ydCBDYXNlIGZyb20gJy4vY2FzZSc7XG5pbXBvcnQgU3RlcCBmcm9tICcuL3N0ZXAnO1xuaW1wb3J0IEludGVycG9sYXRlIGZyb20gJy4vaW50ZXJwb2xhdGUnO1xuaW1wb3J0IENvYWxlc2NlIGZyb20gJy4vY29hbGVzY2UnO1xuaW1wb3J0IHtcbiAgICBFcXVhbHMsXG4gICAgTm90RXF1YWxzLFxuICAgIExlc3NUaGFuLFxuICAgIEdyZWF0ZXJUaGFuLFxuICAgIExlc3NUaGFuT3JFcXVhbCxcbiAgICBHcmVhdGVyVGhhbk9yRXF1YWxcbn0gZnJvbSAnLi9jb21wYXJpc29uJztcbmltcG9ydCBDb2xsYXRvckV4cHJlc3Npb24gZnJvbSAnLi9jb2xsYXRvcic7XG5pbXBvcnQgTnVtYmVyRm9ybWF0IGZyb20gJy4vbnVtYmVyX2Zvcm1hdCc7XG5pbXBvcnQgRm9ybWF0RXhwcmVzc2lvbiBmcm9tICcuL2Zvcm1hdCc7XG5pbXBvcnQgSW1hZ2UgZnJvbSAnLi9pbWFnZSc7XG5pbXBvcnQgTGVuZ3RoIGZyb20gJy4vbGVuZ3RoJztcblxuaW1wb3J0IHR5cGUge1ZhcmFyZ3N9IGZyb20gJy4uL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb25SZWdpc3RyeX0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5cbmNvbnN0IGV4cHJlc3Npb25zOiBFeHByZXNzaW9uUmVnaXN0cnkgPSB7XG4gICAgLy8gc3BlY2lhbCBmb3Jtc1xuICAgICc9PSc6IEVxdWFscyxcbiAgICAnIT0nOiBOb3RFcXVhbHMsXG4gICAgJz4nOiBHcmVhdGVyVGhhbixcbiAgICAnPCc6IExlc3NUaGFuLFxuICAgICc+PSc6IEdyZWF0ZXJUaGFuT3JFcXVhbCxcbiAgICAnPD0nOiBMZXNzVGhhbk9yRXF1YWwsXG4gICAgJ2FycmF5JzogQXNzZXJ0aW9uLFxuICAgICdhdCc6IEF0LFxuICAgICdib29sZWFuJzogQXNzZXJ0aW9uLFxuICAgICdjYXNlJzogQ2FzZSxcbiAgICAnY29hbGVzY2UnOiBDb2FsZXNjZSxcbiAgICAnY29sbGF0b3InOiBDb2xsYXRvckV4cHJlc3Npb24sXG4gICAgJ2Zvcm1hdCc6IEZvcm1hdEV4cHJlc3Npb24sXG4gICAgJ2ltYWdlJzogSW1hZ2UsXG4gICAgJ2ludGVycG9sYXRlJzogSW50ZXJwb2xhdGUsXG4gICAgJ2ludGVycG9sYXRlLWhjbCc6IEludGVycG9sYXRlLFxuICAgICdpbnRlcnBvbGF0ZS1sYWInOiBJbnRlcnBvbGF0ZSxcbiAgICAnbGVuZ3RoJzogTGVuZ3RoLFxuICAgICdsZXQnOiBMZXQsXG4gICAgJ2xpdGVyYWwnOiBMaXRlcmFsLFxuICAgICdtYXRjaCc6IE1hdGNoLFxuICAgICdudW1iZXInOiBBc3NlcnRpb24sXG4gICAgJ251bWJlci1mb3JtYXQnOiBOdW1iZXJGb3JtYXQsXG4gICAgJ29iamVjdCc6IEFzc2VydGlvbixcbiAgICAnc3RlcCc6IFN0ZXAsXG4gICAgJ3N0cmluZyc6IEFzc2VydGlvbixcbiAgICAndG8tYm9vbGVhbic6IENvZXJjaW9uLFxuICAgICd0by1jb2xvcic6IENvZXJjaW9uLFxuICAgICd0by1udW1iZXInOiBDb2VyY2lvbixcbiAgICAndG8tc3RyaW5nJzogQ29lcmNpb24sXG4gICAgJ3Zhcic6IFZhclxufTtcblxuZnVuY3Rpb24gcmdiYShjdHgsIFtyLCBnLCBiLCBhXSkge1xuICAgIHIgPSByLmV2YWx1YXRlKGN0eCk7XG4gICAgZyA9IGcuZXZhbHVhdGUoY3R4KTtcbiAgICBiID0gYi5ldmFsdWF0ZShjdHgpO1xuICAgIGNvbnN0IGFscGhhID0gYSA/IGEuZXZhbHVhdGUoY3R4KSA6IDE7XG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0ZVJHQkEociwgZywgYiwgYWxwaGEpO1xuICAgIGlmIChlcnJvcikgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihyIC8gMjU1ICogYWxwaGEsIGcgLyAyNTUgKiBhbHBoYSwgYiAvIDI1NSAqIGFscGhhLCBhbHBoYSk7XG59XG5cbmZ1bmN0aW9uIGhhcyhrZXksIG9iaikge1xuICAgIHJldHVybiBrZXkgaW4gb2JqO1xufVxuXG5mdW5jdGlvbiBnZXQoa2V5LCBvYmopIHtcbiAgICBjb25zdCB2ID0gb2JqW2tleV07XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB2O1xufVxuXG5mdW5jdGlvbiBiaW5hcnlTZWFyY2godiwgYSwgaSwgaikge1xuICAgIHdoaWxlIChpIDw9IGopIHtcbiAgICAgICAgY29uc3QgbSA9IChpICsgaikgPj4gMTtcbiAgICAgICAgaWYgKGFbbV0gPT09IHYpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGFbbV0gPiB2KVxuICAgICAgICAgICAgaiA9IG0gLSAxO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBpID0gbSArIDE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFyYXJncyh0eXBlOiBUeXBlKTogVmFyYXJncyB7XG4gICAgcmV0dXJuIHt0eXBlfTtcbn1cblxuQ29tcG91bmRFeHByZXNzaW9uLnJlZ2lzdGVyKGV4cHJlc3Npb25zLCB7XG4gICAgJ2Vycm9yJzogW1xuICAgICAgICBFcnJvclR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7IHRocm93IG5ldyBSdW50aW1lRXJyb3Iodi5ldmFsdWF0ZShjdHgpKTsgfVxuICAgIF0sXG4gICAgJ3R5cGVvZic6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gdHlwZVRvU3RyaW5nKHR5cGVPZih2LmV2YWx1YXRlKGN0eCkpKVxuICAgIF0sXG4gICAgJ3RvLXJnYmEnOiBbXG4gICAgICAgIGFycmF5KE51bWJlclR5cGUsIDQpLFxuICAgICAgICBbQ29sb3JUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdi5ldmFsdWF0ZShjdHgpLnRvQXJyYXkoKTtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ3JnYic6IFtcbiAgICAgICAgQ29sb3JUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgIHJnYmFcbiAgICBdLFxuICAgICdyZ2JhJzogW1xuICAgICAgICBDb2xvclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgcmdiYVxuICAgIF0sXG4gICAgJ2hhcyc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhblR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5XSkgPT4gaGFzKGtleS5ldmFsdWF0ZShjdHgpLCBjdHgucHJvcGVydGllcygpKVxuICAgICAgICAgICAgXSwgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlLCBPYmplY3RUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5LCBvYmpdKSA9PiBoYXMoa2V5LmV2YWx1YXRlKGN0eCksIG9iai5ldmFsdWF0ZShjdHgpKVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnZ2V0Jzoge1xuICAgICAgICB0eXBlOiBWYWx1ZVR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5XSkgPT4gZ2V0KGtleS5ldmFsdWF0ZShjdHgpLCBjdHgucHJvcGVydGllcygpKVxuICAgICAgICAgICAgXSwgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlLCBPYmplY3RUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5LCBvYmpdKSA9PiBnZXQoa2V5LmV2YWx1YXRlKGN0eCksIG9iai5ldmFsdWF0ZShjdHgpKVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnZmVhdHVyZS1zdGF0ZSc6IFtcbiAgICAgICAgVmFsdWVUeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFtrZXldKSA9PiBnZXQoa2V5LmV2YWx1YXRlKGN0eCksIGN0eC5mZWF0dXJlU3RhdGUgfHwge30pXG4gICAgXSxcbiAgICAncHJvcGVydGllcyc6IFtcbiAgICAgICAgT2JqZWN0VHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5wcm9wZXJ0aWVzKClcbiAgICBdLFxuICAgICdnZW9tZXRyeS10eXBlJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4Lmdlb21ldHJ5VHlwZSgpXG4gICAgXSxcbiAgICAnaWQnOiBbXG4gICAgICAgIFZhbHVlVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5pZCgpXG4gICAgXSxcbiAgICAnem9vbSc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLnpvb21cbiAgICBdLFxuICAgICdoZWF0bWFwLWRlbnNpdHknOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHguZ2xvYmFscy5oZWF0bWFwRGVuc2l0eSB8fCAwXG4gICAgXSxcbiAgICAnbGluZS1wcm9ncmVzcyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLmxpbmVQcm9ncmVzcyB8fCAwXG4gICAgXSxcbiAgICAnYWNjdW11bGF0ZWQnOiBbXG4gICAgICAgIFZhbHVlVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLmFjY3VtdWxhdGVkID09PSB1bmRlZmluZWQgPyBudWxsIDogY3R4Lmdsb2JhbHMuYWNjdW11bGF0ZWRcbiAgICBdLFxuICAgICcrJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICB2YXJhcmdzKE51bWJlclR5cGUpLFxuICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYXJnLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnKic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgdmFyYXJncyhOdW1iZXJUeXBlKSxcbiAgICAgICAgKGN0eCwgYXJncykgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IDE7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICo9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJy0nOiB7XG4gICAgICAgIHR5cGU6IE51bWJlclR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBbYSwgYl0pID0+IGEuZXZhbHVhdGUoY3R4KSAtIGIuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXSwgW1xuICAgICAgICAgICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBbYV0pID0+IC1hLmV2YWx1YXRlKGN0eClcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgJy8nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW2EsIGJdKSA9PiBhLmV2YWx1YXRlKGN0eCkgLyBiLmV2YWx1YXRlKGN0eClcbiAgICBdLFxuICAgICclJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpICUgYi5ldmFsdWF0ZShjdHgpXG4gICAgXSxcbiAgICAnbG4yJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKCkgPT4gTWF0aC5MTjJcbiAgICBdLFxuICAgICdwaSc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgICgpID0+IE1hdGguUElcbiAgICBdLFxuICAgICdlJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKCkgPT4gTWF0aC5FXG4gICAgXSxcbiAgICAnXic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbYiwgZV0pID0+IE1hdGgucG93KGIuZXZhbHVhdGUoY3R4KSwgZS5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ3NxcnQnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW3hdKSA9PiBNYXRoLnNxcnQoeC5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2xvZzEwJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5sb2cobi5ldmFsdWF0ZShjdHgpKSAvIE1hdGguTE4xMFxuICAgIF0sXG4gICAgJ2xuJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5sb2cobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2xvZzInOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmxvZyhuLmV2YWx1YXRlKGN0eCkpIC8gTWF0aC5MTjJcbiAgICBdLFxuICAgICdzaW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLnNpbihuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnY29zJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5jb3Mobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ3Rhbic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGgudGFuKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdhc2luJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hc2luKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdhY29zJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hY29zKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdhdGFuJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hdGFuKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdtaW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIHZhcmFyZ3MoTnVtYmVyVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IE1hdGgubWluKC4uLmFyZ3MubWFwKGFyZyA9PiBhcmcuZXZhbHVhdGUoY3R4KSkpXG4gICAgXSxcbiAgICAnbWF4JzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICB2YXJhcmdzKE51bWJlclR5cGUpLFxuICAgICAgICAoY3R4LCBhcmdzKSA9PiBNYXRoLm1heCguLi5hcmdzLm1hcChhcmcgPT4gYXJnLmV2YWx1YXRlKGN0eCkpKVxuICAgIF0sXG4gICAgJ2Ficyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguYWJzKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdyb3VuZCc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBuLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICAvLyBKYXZhc2NyaXB0J3MgTWF0aC5yb3VuZCgpIHJvdW5kcyB0b3dhcmRzICtJbmZpbml0eSBmb3IgaGFsZndheVxuICAgICAgICAgICAgLy8gdmFsdWVzLCBldmVuIHdoZW4gdGhleSdyZSBuZWdhdGl2ZS4gSXQncyBtb3JlIGNvbW1vbiB0byByb3VuZFxuICAgICAgICAgICAgLy8gYXdheSBmcm9tIDAgKGUuZy4sIHRoaXMgaXMgd2hhdCBweXRob24gYW5kIEMrKyBkbylcbiAgICAgICAgICAgIHJldHVybiB2IDwgMCA/IC1NYXRoLnJvdW5kKC12KSA6IE1hdGgucm91bmQodik7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmbG9vcic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguZmxvb3Iobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2NlaWwnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmNlaWwobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2ZpbHRlci09PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdID09PSAodjogYW55KS52YWx1ZVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC09PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IGN0eC5pZCgpID09PSAodjogYW55KS52YWx1ZVxuICAgIF0sXG4gICAgJ2ZpbHRlci10eXBlLT09JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IGN0eC5nZW9tZXRyeVR5cGUoKSA9PT0gKHY6IGFueSkudmFsdWVcbiAgICBdLFxuICAgICdmaWx0ZXItPCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItPic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA+IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA+IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItPD0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV07XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPD0gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC08PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8PSBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLT49JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIFZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhID49IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPj0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LmlkKCk7XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPj0gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1oYXMnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2tdKSA9PiAoazogYW55KS52YWx1ZSBpbiBjdHgucHJvcGVydGllcygpXG4gICAgXSxcbiAgICAnZmlsdGVyLWhhcy1pZCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHguaWQoKSAhPT0gbnVsbFxuICAgIF0sXG4gICAgJ2ZpbHRlci10eXBlLWluJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW2FycmF5KFN0cmluZ1R5cGUpXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiAodjogYW55KS52YWx1ZS5pbmRleE9mKGN0eC5nZW9tZXRyeVR5cGUoKSkgPj0gMFxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC1pbic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFthcnJheShWYWx1ZVR5cGUpXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiAodjogYW55KS52YWx1ZS5pbmRleE9mKGN0eC5pZCgpKSA+PSAwXG4gICAgXSxcbiAgICAnZmlsdGVyLWluLXNtYWxsJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIGFycmF5KFZhbHVlVHlwZSldLFxuICAgICAgICAvLyBhc3N1bWVzIHYgaXMgYW4gYXJyYXkgbGl0ZXJhbFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+ICh2OiBhbnkpLnZhbHVlLmluZGV4T2YoY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV0pID49IDBcbiAgICBdLFxuICAgICdmaWx0ZXItaW4tbGFyZ2UnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgYXJyYXkoVmFsdWVUeXBlKV0sXG4gICAgICAgIC8vIGFzc3VtZXMgdiBpcyBhIGFycmF5IGxpdGVyYWwgd2l0aCB2YWx1ZXMgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBhbmQgb2YgYSBzaW5nbGUgdHlwZVxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IGJpbmFyeVNlYXJjaChjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXSwgKHY6IGFueSkudmFsdWUsIDAsICh2OiBhbnkpLnZhbHVlLmxlbmd0aCAtIDEpXG4gICAgXSxcbiAgICAnYWxsJzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuVHlwZSxcbiAgICAgICAgb3ZlcmxvYWRzOiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW0Jvb2xlYW5UeXBlLCBCb29sZWFuVHlwZV0sXG4gICAgICAgICAgICAgICAgKGN0eCwgW2EsIGJdKSA9PiBhLmV2YWx1YXRlKGN0eCkgJiYgYi5ldmFsdWF0ZShjdHgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHZhcmFyZ3MoQm9vbGVhblR5cGUpLFxuICAgICAgICAgICAgICAgIChjdHgsIGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuZXZhbHVhdGUoY3R4KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnYW55Jzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuVHlwZSxcbiAgICAgICAgb3ZlcmxvYWRzOiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW0Jvb2xlYW5UeXBlLCBCb29sZWFuVHlwZV0sXG4gICAgICAgICAgICAgICAgKGN0eCwgW2EsIGJdKSA9PiBhLmV2YWx1YXRlKGN0eCkgfHwgYi5ldmFsdWF0ZShjdHgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHZhcmFyZ3MoQm9vbGVhblR5cGUpLFxuICAgICAgICAgICAgICAgIChjdHgsIGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5ldmFsdWF0ZShjdHgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICB9LFxuICAgICchJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW0Jvb2xlYW5UeXBlXSxcbiAgICAgICAgKGN0eCwgW2JdKSA9PiAhYi5ldmFsdWF0ZShjdHgpXG4gICAgXSxcbiAgICAnaXMtc3VwcG9ydGVkLXNjcmlwdCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgLy8gQXQgcGFyc2UgdGltZSB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlLCBzbyB3ZSBuZWVkIHRvIGV4Y2x1ZGUgdGhpcyBleHByZXNzaW9uIHdpdGggaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50XG4gICAgICAgIChjdHgsIFtzXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNTdXBwb3J0ZWRTY3JpcHQgPSBjdHguZ2xvYmFscyAmJiBjdHguZ2xvYmFscy5pc1N1cHBvcnRlZFNjcmlwdDtcbiAgICAgICAgICAgIGlmIChpc1N1cHBvcnRlZFNjcmlwdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc1N1cHBvcnRlZFNjcmlwdChzLmV2YWx1YXRlKGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICd1cGNhc2UnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgKGN0eCwgW3NdKSA9PiBzLmV2YWx1YXRlKGN0eCkudG9VcHBlckNhc2UoKVxuICAgIF0sXG4gICAgJ2Rvd25jYXNlJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFtzXSkgPT4gcy5ldmFsdWF0ZShjdHgpLnRvTG93ZXJDYXNlKClcbiAgICBdLFxuICAgICdjb25jYXQnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIHZhcmFyZ3MoVmFsdWVUeXBlKSxcbiAgICAgICAgKGN0eCwgYXJncykgPT4gYXJncy5tYXAoYXJnID0+IHZhbHVlVG9TdHJpbmcoYXJnLmV2YWx1YXRlKGN0eCkpKS5qb2luKCcnKVxuICAgIF0sXG4gICAgJ3Jlc29sdmVkLWxvY2FsZSc6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgW0NvbGxhdG9yVHlwZV0sXG4gICAgICAgIChjdHgsIFtjb2xsYXRvcl0pID0+IGNvbGxhdG9yLmV2YWx1YXRlKGN0eCkucmVzb2x2ZWRMb2NhbGUoKVxuICAgIF1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBleHByZXNzaW9ucztcbiIsIi8vIEBmbG93XG5cbi8qKlxuICogQSB0eXBlIHVzZWQgZm9yIHJldHVybmluZyBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzLiBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdW5pb25cbiAqIHJlcHJlc2VudHMgc3VjY2VzcyBhbmQgY29udGFpbnMgYSB2YWx1ZSwgYW5kIHRoZSBzZWNvbmQgcmVwcmVzZW50cyBhbiBlcnJvciBhbmRcbiAqIGNvbnRhaW5zIGFuIGVycm9yIHZhbHVlLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0PFQsIEU+ID1cbiAgICB8IHt8IHJlc3VsdDogJ3N1Y2Nlc3MnLCB2YWx1ZTogVCB8fVxuICAgIHwge3wgcmVzdWx0OiAnZXJyb3InLCB2YWx1ZTogRSB8fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHN1Y2Nlc3M8VCwgRT4odmFsdWU6IFQpOiBSZXN1bHQ8VCwgRT4ge1xuICAgIHJldHVybiB7cmVzdWx0OiAnc3VjY2VzcycsIHZhbHVlfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yPFQsIEU+KHZhbHVlOiBFKTogUmVzdWx0PFQsIEU+IHtcbiAgICByZXR1cm4ge3Jlc3VsdDogJ2Vycm9yJywgdmFsdWV9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjJztcblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNwZWNbJ3Byb3BlcnR5LXR5cGUnXSA9PT0gJ2RhdGEtZHJpdmVuJyB8fCBzcGVjWydwcm9wZXJ0eS10eXBlJ10gPT09ICdjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1pvb21FeHByZXNzaW9uKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3BlYy5leHByZXNzaW9uICYmIHNwZWMuZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLmluZGV4T2YoJ3pvb20nKSA+IC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNJbnRlcnBvbGF0aW9uKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3BlYy5leHByZXNzaW9uICYmIHNwZWMuZXhwcmVzc2lvbi5pbnRlcnBvbGF0ZWQ7XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFR5cGUodmFsKSB7XG4gICAgaWYgKHZhbCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgfSBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIH0gZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgQm9vbGVhbikge1xuICAgICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH0gZWxzZSBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWw7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgKiBhcyBjb2xvclNwYWNlcyBmcm9tICcuLi91dGlsL2NvbG9yX3NwYWNlcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vdXRpbC9jb2xvcic7XG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4uL3V0aWwvZXh0ZW5kJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0ICogYXMgaW50ZXJwb2xhdGUgZnJvbSAnLi4vdXRpbC9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgSW50ZXJwb2xhdGUgZnJvbSAnLi4vZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCBSZXNvbHZlZEltYWdlIGZyb20gJy4uL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuaW1wb3J0IHtzdXBwb3J0c0ludGVycG9sYXRpb259IGZyb20gJy4uL3V0aWwvcHJvcGVydGllcyc7XG5pbXBvcnQge2ZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG99IGZyb20gJy4uL2V4cHJlc3Npb24vc3RvcHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaWRlbnRpdHlGdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbihwYXJhbWV0ZXJzLCBwcm9wZXJ0eVNwZWMpIHtcbiAgICBjb25zdCBpc0NvbG9yID0gcHJvcGVydHlTcGVjLnR5cGUgPT09ICdjb2xvcic7XG4gICAgY29uc3Qgem9vbUFuZEZlYXR1cmVEZXBlbmRlbnQgPSBwYXJhbWV0ZXJzLnN0b3BzICYmIHR5cGVvZiBwYXJhbWV0ZXJzLnN0b3BzWzBdWzBdID09PSAnb2JqZWN0JztcbiAgICBjb25zdCBmZWF0dXJlRGVwZW5kZW50ID0gem9vbUFuZEZlYXR1cmVEZXBlbmRlbnQgfHwgcGFyYW1ldGVycy5wcm9wZXJ0eSAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHpvb21EZXBlbmRlbnQgPSB6b29tQW5kRmVhdHVyZURlcGVuZGVudCB8fCAhZmVhdHVyZURlcGVuZGVudDtcbiAgICBjb25zdCB0eXBlID0gcGFyYW1ldGVycy50eXBlIHx8IChzdXBwb3J0c0ludGVycG9sYXRpb24ocHJvcGVydHlTcGVjKSA/ICdleHBvbmVudGlhbCcgOiAnaW50ZXJ2YWwnKTtcblxuICAgIGlmIChpc0NvbG9yKSB7XG4gICAgICAgIHBhcmFtZXRlcnMgPSBleHRlbmQoe30sIHBhcmFtZXRlcnMpO1xuXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLnN0b3BzKSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLnN0b3BzID0gcGFyYW1ldGVycy5zdG9wcy5tYXAoKHN0b3ApID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3N0b3BbMF0sIENvbG9yLnBhcnNlKHN0b3BbMV0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcnMuZGVmYXVsdCkge1xuICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0ID0gQ29sb3IucGFyc2UocGFyYW1ldGVycy5kZWZhdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdCA9IENvbG9yLnBhcnNlKHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbWV0ZXJzLmNvbG9yU3BhY2UgJiYgcGFyYW1ldGVycy5jb2xvclNwYWNlICE9PSAncmdiJyAmJiAhY29sb3JTcGFjZXNbcGFyYW1ldGVycy5jb2xvclNwYWNlXSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbG9yIHNwYWNlOiAke3BhcmFtZXRlcnMuY29sb3JTcGFjZX1gKTtcbiAgICB9XG5cbiAgICBsZXQgaW5uZXJGdW47XG4gICAgbGV0IGhhc2hlZFN0b3BzO1xuICAgIGxldCBjYXRlZ29yaWNhbEtleVR5cGU7XG4gICAgaWYgKHR5cGUgPT09ICdleHBvbmVudGlhbCcpIHtcbiAgICAgICAgaW5uZXJGdW4gPSBldmFsdWF0ZUV4cG9uZW50aWFsRnVuY3Rpb247XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnaW50ZXJ2YWwnKSB7XG4gICAgICAgIGlubmVyRnVuID0gZXZhbHVhdGVJbnRlcnZhbEZ1bmN0aW9uO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NhdGVnb3JpY2FsJykge1xuICAgICAgICBpbm5lckZ1biA9IGV2YWx1YXRlQ2F0ZWdvcmljYWxGdW5jdGlvbjtcblxuICAgICAgICAvLyBGb3IgY2F0ZWdvcmljYWwgZnVuY3Rpb25zLCBnZW5lcmF0ZSBhbiBPYmplY3QgYXMgYSBoYXNobWFwIG9mIHRoZSBzdG9wcyBmb3IgZmFzdCBzZWFyY2hpbmdcbiAgICAgICAgaGFzaGVkU3RvcHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBmb3IgKGNvbnN0IHN0b3Agb2YgcGFyYW1ldGVycy5zdG9wcykge1xuICAgICAgICAgICAgaGFzaGVkU3RvcHNbc3RvcFswXV0gPSBzdG9wWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5mZXIga2V5IHR5cGUgYmFzZWQgb24gZmlyc3Qgc3RvcCBrZXktLSB1c2VkIHRvIGVuY2ZvcmNlIHN0cmljdCB0eXBlIGNoZWNraW5nIGxhdGVyXG4gICAgICAgIGNhdGVnb3JpY2FsS2V5VHlwZSA9IHR5cGVvZiBwYXJhbWV0ZXJzLnN0b3BzWzBdWzBdO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnaWRlbnRpdHknKSB7XG4gICAgICAgIGlubmVyRnVuID0gZXZhbHVhdGVJZGVudGl0eUZ1bmN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmdW5jdGlvbiB0eXBlIFwiJHt0eXBlfVwiYCk7XG4gICAgfVxuXG4gICAgaWYgKHpvb21BbmRGZWF0dXJlRGVwZW5kZW50KSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVGdW5jdGlvbnMgPSB7fTtcbiAgICAgICAgY29uc3Qgem9vbVN0b3BzID0gW107XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgcGFyYW1ldGVycy5zdG9wcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgY29uc3Qgc3RvcCA9IHBhcmFtZXRlcnMuc3RvcHNbc107XG4gICAgICAgICAgICBjb25zdCB6b29tID0gc3RvcFswXS56b29tO1xuICAgICAgICAgICAgaWYgKGZlYXR1cmVGdW5jdGlvbnNbem9vbV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZlYXR1cmVGdW5jdGlvbnNbem9vbV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHpvb20sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHBhcmFtZXRlcnMudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IHBhcmFtZXRlcnMucHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHBhcmFtZXRlcnMuZGVmYXVsdCxcbiAgICAgICAgICAgICAgICAgICAgc3RvcHM6IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB6b29tU3RvcHMucHVzaCh6b29tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlYXR1cmVGdW5jdGlvbnNbem9vbV0uc3RvcHMucHVzaChbc3RvcFswXS52YWx1ZSwgc3RvcFsxXV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmVhdHVyZUZ1bmN0aW9uU3RvcHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB6IG9mIHpvb21TdG9wcykge1xuICAgICAgICAgICAgZmVhdHVyZUZ1bmN0aW9uU3RvcHMucHVzaChbZmVhdHVyZUZ1bmN0aW9uc1t6XS56b29tLCBjcmVhdGVGdW5jdGlvbihmZWF0dXJlRnVuY3Rpb25zW3pdLCBwcm9wZXJ0eVNwZWMpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnRlcnBvbGF0aW9uVHlwZSA9IHtuYW1lOiAnbGluZWFyJ307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnY29tcG9zaXRlJyxcbiAgICAgICAgICAgIGludGVycG9sYXRpb25UeXBlLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbkZhY3RvcjogSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGlvbkZhY3Rvci5iaW5kKHVuZGVmaW5lZCwgaW50ZXJwb2xhdGlvblR5cGUpLFxuICAgICAgICAgICAgem9vbVN0b3BzOiBmZWF0dXJlRnVuY3Rpb25TdG9wcy5tYXAocyA9PiBzWzBdKSxcbiAgICAgICAgICAgIGV2YWx1YXRlKHt6b29tfSwgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBldmFsdWF0ZUV4cG9uZW50aWFsRnVuY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgICBzdG9wczogZmVhdHVyZUZ1bmN0aW9uU3RvcHMsXG4gICAgICAgICAgICAgICAgICAgIGJhc2U6IHBhcmFtZXRlcnMuYmFzZVxuICAgICAgICAgICAgICAgIH0sIHByb3BlcnR5U3BlYywgem9vbSkuZXZhbHVhdGUoem9vbSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh6b29tRGVwZW5kZW50KSB7XG4gICAgICAgIGNvbnN0IGludGVycG9sYXRpb25UeXBlID0gdHlwZSA9PT0gJ2V4cG9uZW50aWFsJyA/XG4gICAgICAgICAgICB7bmFtZTogJ2V4cG9uZW50aWFsJywgYmFzZTogcGFyYW1ldGVycy5iYXNlICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmJhc2UgOiAxfSA6IG51bGw7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnY2FtZXJhJyxcbiAgICAgICAgICAgIGludGVycG9sYXRpb25UeXBlLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbkZhY3RvcjogSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGlvbkZhY3Rvci5iaW5kKHVuZGVmaW5lZCwgaW50ZXJwb2xhdGlvblR5cGUpLFxuICAgICAgICAgICAgem9vbVN0b3BzOiBwYXJhbWV0ZXJzLnN0b3BzLm1hcChzID0+IHNbMF0pLFxuICAgICAgICAgICAgZXZhbHVhdGU6ICh7em9vbX0pID0+IGlubmVyRnVuKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgem9vbSwgaGFzaGVkU3RvcHMsIGNhdGVnb3JpY2FsS2V5VHlwZSlcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ3NvdXJjZScsXG4gICAgICAgICAgICBldmFsdWF0ZShfLCBmZWF0dXJlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmZWF0dXJlICYmIGZlYXR1cmUucHJvcGVydGllcyA/IGZlYXR1cmUucHJvcGVydGllc1twYXJhbWV0ZXJzLnByb3BlcnR5XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29hbGVzY2UocGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpbm5lckZ1bihwYXJhbWV0ZXJzLCBwcm9wZXJ0eVNwZWMsIHZhbHVlLCBoYXNoZWRTdG9wcywgY2F0ZWdvcmljYWxLZXlUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvYWxlc2NlKGEsIGIsIGMpIHtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYTtcbiAgICBpZiAoYiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYjtcbiAgICBpZiAoYyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVDYXRlZ29yaWNhbEZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgaW5wdXQsIGhhc2hlZFN0b3BzLCBrZXlUeXBlKSB7XG4gICAgY29uc3QgZXZhbHVhdGVkID0gdHlwZW9mIGlucHV0ID09PSBrZXlUeXBlID8gaGFzaGVkU3RvcHNbaW5wdXRdIDogdW5kZWZpbmVkOyAvLyBFbmZvcmNlIHN0cmljdCB0eXBpbmcgb24gaW5wdXRcbiAgICByZXR1cm4gY29hbGVzY2UoZXZhbHVhdGVkLCBwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVJbnRlcnZhbEZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgaW5wdXQpIHtcbiAgICAvLyBFZGdlIGNhc2VzXG4gICAgaWYgKGdldFR5cGUoaW5wdXQpICE9PSAnbnVtYmVyJykgcmV0dXJuIGNvYWxlc2NlKHBhcmFtZXRlcnMuZGVmYXVsdCwgcHJvcGVydHlTcGVjLmRlZmF1bHQpO1xuICAgIGNvbnN0IG4gPSBwYXJhbWV0ZXJzLnN0b3BzLmxlbmd0aDtcbiAgICBpZiAobiA9PT0gMSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbMF1bMV07XG4gICAgaWYgKGlucHV0IDw9IHBhcmFtZXRlcnMuc3RvcHNbMF1bMF0pIHJldHVybiBwYXJhbWV0ZXJzLnN0b3BzWzBdWzFdO1xuICAgIGlmIChpbnB1dCA+PSBwYXJhbWV0ZXJzLnN0b3BzW24gLSAxXVswXSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbbiAtIDFdWzFdO1xuXG4gICAgY29uc3QgaW5kZXggPSBmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvKHBhcmFtZXRlcnMuc3RvcHMubWFwKChzdG9wKSA9PiBzdG9wWzBdKSwgaW5wdXQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbaW5kZXhdWzFdO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUV4cG9uZW50aWFsRnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCBpbnB1dCkge1xuICAgIGNvbnN0IGJhc2UgPSBwYXJhbWV0ZXJzLmJhc2UgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuYmFzZSA6IDE7XG5cbiAgICAvLyBFZGdlIGNhc2VzXG4gICAgaWYgKGdldFR5cGUoaW5wdXQpICE9PSAnbnVtYmVyJykgcmV0dXJuIGNvYWxlc2NlKHBhcmFtZXRlcnMuZGVmYXVsdCwgcHJvcGVydHlTcGVjLmRlZmF1bHQpO1xuICAgIGNvbnN0IG4gPSBwYXJhbWV0ZXJzLnN0b3BzLmxlbmd0aDtcbiAgICBpZiAobiA9PT0gMSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbMF1bMV07XG4gICAgaWYgKGlucHV0IDw9IHBhcmFtZXRlcnMuc3RvcHNbMF1bMF0pIHJldHVybiBwYXJhbWV0ZXJzLnN0b3BzWzBdWzFdO1xuICAgIGlmIChpbnB1dCA+PSBwYXJhbWV0ZXJzLnN0b3BzW24gLSAxXVswXSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbbiAtIDFdWzFdO1xuXG4gICAgY29uc3QgaW5kZXggPSBmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvKHBhcmFtZXRlcnMuc3RvcHMubWFwKChzdG9wKSA9PiBzdG9wWzBdKSwgaW5wdXQpO1xuICAgIGNvbnN0IHQgPSBpbnRlcnBvbGF0aW9uRmFjdG9yKFxuICAgICAgICBpbnB1dCwgYmFzZSxcbiAgICAgICAgcGFyYW1ldGVycy5zdG9wc1tpbmRleF1bMF0sXG4gICAgICAgIHBhcmFtZXRlcnMuc3RvcHNbaW5kZXggKyAxXVswXSk7XG5cbiAgICBjb25zdCBvdXRwdXRMb3dlciA9IHBhcmFtZXRlcnMuc3RvcHNbaW5kZXhdWzFdO1xuICAgIGNvbnN0IG91dHB1dFVwcGVyID0gcGFyYW1ldGVycy5zdG9wc1tpbmRleCArIDFdWzFdO1xuICAgIGxldCBpbnRlcnAgPSBpbnRlcnBvbGF0ZVtwcm9wZXJ0eVNwZWMudHlwZV0gfHwgaWRlbnRpdHlGdW5jdGlvbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG5cbiAgICBpZiAocGFyYW1ldGVycy5jb2xvclNwYWNlICYmIHBhcmFtZXRlcnMuY29sb3JTcGFjZSAhPT0gJ3JnYicpIHtcbiAgICAgICAgY29uc3QgY29sb3JzcGFjZSA9IGNvbG9yU3BhY2VzW3BhcmFtZXRlcnMuY29sb3JTcGFjZV07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICBpbnRlcnAgPSAoYSwgYikgPT4gY29sb3JzcGFjZS5yZXZlcnNlKGNvbG9yc3BhY2UuaW50ZXJwb2xhdGUoY29sb3JzcGFjZS5mb3J3YXJkKGEpLCBjb2xvcnNwYWNlLmZvcndhcmQoYiksIHQpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG91dHB1dExvd2VyLmV2YWx1YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmFsdWF0ZSguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkTG93ZXIgPSBvdXRwdXRMb3dlci5ldmFsdWF0ZS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRlZFVwcGVyID0gb3V0cHV0VXBwZXIuZXZhbHVhdGUuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGZpbGwtb3V0bGluZS1jb2xvciwgd2hpY2ggaGFzIG5vIHNwZWMgZGVmYXVsdC5cbiAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGVkTG93ZXIgPT09IHVuZGVmaW5lZCB8fCBldmFsdWF0ZWRVcHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcnAoZXZhbHVhdGVkTG93ZXIsIGV2YWx1YXRlZFVwcGVyLCB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJwKG91dHB1dExvd2VyLCBvdXRwdXRVcHBlciwgdCk7XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlSWRlbnRpdHlGdW5jdGlvbihwYXJhbWV0ZXJzLCBwcm9wZXJ0eVNwZWMsIGlucHV0KSB7XG4gICAgaWYgKHByb3BlcnR5U3BlYy50eXBlID09PSAnY29sb3InKSB7XG4gICAgICAgIGlucHV0ID0gQ29sb3IucGFyc2UoaW5wdXQpO1xuICAgIH0gZWxzZSBpZiAocHJvcGVydHlTcGVjLnR5cGUgPT09ICdmb3JtYXR0ZWQnKSB7XG4gICAgICAgIGlucHV0ID0gRm9ybWF0dGVkLmZyb21TdHJpbmcoaW5wdXQudG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgICBpbnB1dCA9IFJlc29sdmVkSW1hZ2UuZnJvbVN0cmluZyh7bmFtZTogaW5wdXQudG9TdHJpbmcoKSwgYXZhaWxhYmxlOiBmYWxzZX0pO1xuICAgIH0gZWxzZSBpZiAoZ2V0VHlwZShpbnB1dCkgIT09IHByb3BlcnR5U3BlYy50eXBlICYmIChwcm9wZXJ0eVNwZWMudHlwZSAhPT0gJ2VudW0nIHx8ICFwcm9wZXJ0eVNwZWMudmFsdWVzW2lucHV0XSkpIHtcbiAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBjb2FsZXNjZShpbnB1dCwgcGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJhdGlvIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiBleHBvbmVudGlhbCBmdW5jdGlvblxuICogc3RvcHMuXG4gKlxuICogSG93IGl0IHdvcmtzOlxuICogVHdvIGNvbnNlY3V0aXZlIHN0b3AgdmFsdWVzIGRlZmluZSBhIChzY2FsZWQgYW5kIHNoaWZ0ZWQpIGV4cG9uZW50aWFsXG4gKiBmdW5jdGlvbiBgZih4KSA9IGEgKiBiYXNlXnggKyBiYCwgd2hlcmUgYGJhc2VgIGlzIHRoZSB1c2VyLXNwZWNpZmllZCBiYXNlLFxuICogYW5kIGBhYCBhbmQgYGJgIGFyZSBjb25zdGFudHMgYWZmb3JkaW5nIHN1ZmZpY2llbnQgZGVncmVlcyBvZiBmcmVlZG9tIHRvIGZpdFxuICogdGhlIGZ1bmN0aW9uIHRvIHRoZSBnaXZlbiBzdG9wcy5cbiAqXG4gKiBIZXJlJ3MgYSBiaXQgb2YgYWxnZWJyYSB0aGF0IGxldHMgdXMgY29tcHV0ZSBgZih4KWAgZGlyZWN0bHkgZnJvbSB0aGUgc3RvcFxuICogdmFsdWVzIHdpdGhvdXQgZXhwbGljaXRseSBzb2x2aW5nIGZvciBgYWAgYW5kIGBiYDpcbiAqXG4gKiBGaXJzdCBzdG9wIHZhbHVlOiBgZih4MCkgPSB5MCA9IGEgKiBiYXNlXngwICsgYmBcbiAqIFNlY29uZCBzdG9wIHZhbHVlOiBgZih4MSkgPSB5MSA9IGEgKiBiYXNlXngxICsgYmBcbiAqID0+IGB5MSAtIHkwID0gYShiYXNlXngxIC0gYmFzZV54MClgXG4gKiA9PiBgYSA9ICh5MSAtIHkwKS8oYmFzZV54MSAtIGJhc2VeeDApYFxuICpcbiAqIERlc2lyZWQgdmFsdWU6IGBmKHgpID0geSA9IGEgKiBiYXNlXnggKyBiYFxuICogPT4gYGYoeCkgPSB5MCArIGEgKiAoYmFzZV54IC0gYmFzZV54MClgXG4gKlxuICogRnJvbSB0aGUgYWJvdmUsIHdlIGNhbiByZXBsYWNlIHRoZSBgYWAgaW4gYGEgKiAoYmFzZV54IC0gYmFzZV54MClgIGFuZCBkbyBhXG4gKiBsaXR0bGUgYWxnZWJyYTpcbiAqIGBgYFxuICogYSAqIChiYXNlXnggLSBiYXNlXngwKSA9ICh5MSAtIHkwKS8oYmFzZV54MSAtIGJhc2VeeDApICogKGJhc2VeeCAtIGJhc2VeeDApXG4gKiAgICAgICAgICAgICAgICAgICAgID0gKHkxIC0geTApICogKGJhc2VeeCAtIGJhc2VeeDApIC8gKGJhc2VeeDEgLSBiYXNlXngwKVxuICogYGBgXG4gKlxuICogSWYgd2UgbGV0IGAoYmFzZV54IC0gYmFzZV54MCkgLyAoYmFzZV54MSBiYXNlXngwKWAsIHRoZW4gd2UgaGF2ZVxuICogYGYoeCkgPSB5MCArICh5MSAtIHkwKSAqIHJhdGlvYC4gIEluIG90aGVyIHdvcmRzLCBgcmF0aW9gIG1heSBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbnRlcnBvbGF0aW9uIGZhY3RvciBiZXR3ZWVuIHRoZSB0d28gc3RvcHMnIG91dHB1dCB2YWx1ZXMuXG4gKlxuICogKE5vdGU6IGEgc2xpZ2h0bHkgZGlmZmVyZW50IGZvcm0gZm9yIGByYXRpb2AsXG4gKiBgKGJhc2VeKHgteDApIC0gMSkgLyAoYmFzZV4oeDEteDApIC0gMSkgYCwgaXMgZXF1aXZhbGVudCwgYnV0IHJlcXVpcmVzIGZld2VyXG4gKiBleHBlbnNpdmUgYE1hdGgucG93KClgIG9wZXJhdGlvbnMuKVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGludGVycG9sYXRpb25GYWN0b3IoaW5wdXQsIGJhc2UsIGxvd2VyVmFsdWUsIHVwcGVyVmFsdWUpIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdXBwZXJWYWx1ZSAtIGxvd2VyVmFsdWU7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBpbnB1dCAtIGxvd2VyVmFsdWU7XG5cbiAgICBpZiAoZGlmZmVyZW5jZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKGJhc2UgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHByb2dyZXNzIC8gZGlmZmVyZW5jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKE1hdGgucG93KGJhc2UsIHByb2dyZXNzKSAtIDEpIC8gKE1hdGgucG93KGJhc2UsIGRpZmZlcmVuY2UpIC0gMSk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4uL3V0aWwvZXh0ZW5kJztcbmltcG9ydCBQYXJzaW5nRXJyb3IgZnJvbSAnLi9wYXJzaW5nX2Vycm9yJztcbmltcG9ydCBQYXJzaW5nQ29udGV4dCBmcm9tICcuL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IFN0ZXAgZnJvbSAnLi9kZWZpbml0aW9ucy9zdGVwJztcbmltcG9ydCBJbnRlcnBvbGF0ZSBmcm9tICcuL2RlZmluaXRpb25zL2ludGVycG9sYXRlJztcbmltcG9ydCBDb2FsZXNjZSBmcm9tICcuL2RlZmluaXRpb25zL2NvYWxlc2NlJztcbmltcG9ydCBMZXQgZnJvbSAnLi9kZWZpbml0aW9ucy9sZXQnO1xuaW1wb3J0IGRlZmluaXRpb25zIGZyb20gJy4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0ICogYXMgaXNDb25zdGFudCBmcm9tICcuL2lzX2NvbnN0YW50JztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi9ydW50aW1lX2Vycm9yJztcbmltcG9ydCB7c3VjY2VzcywgZXJyb3J9IGZyb20gJy4uL3V0aWwvcmVzdWx0JztcbmltcG9ydCB7c3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24sIHN1cHBvcnRzWm9vbUV4cHJlc3Npb24sIHN1cHBvcnRzSW50ZXJwb2xhdGlvbn0gZnJvbSAnLi4vdXRpbC9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge1R5cGUsIEV2YWx1YXRpb25LaW5kfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7U3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMnO1xuaW1wb3J0IHR5cGUge1Jlc3VsdH0gZnJvbSAnLi4vdXRpbC9yZXN1bHQnO1xuaW1wb3J0IHR5cGUge0ludGVycG9sYXRpb25UeXBlfSBmcm9tICcuL2RlZmluaXRpb25zL2ludGVycG9sYXRlJztcbmltcG9ydCB0eXBlIHtQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0Zvcm1hdHRlZFNlY3Rpb259IGZyb20gJy4vdHlwZXMvZm9ybWF0dGVkJztcblxuZXhwb3J0IHR5cGUgRmVhdHVyZSA9IHtcbiAgICArdHlwZTogMSB8IDIgfCAzIHwgJ1Vua25vd24nIHwgJ1BvaW50JyB8ICdNdWx0aVBvaW50JyB8ICdMaW5lU3RyaW5nJyB8ICdNdWx0aUxpbmVTdHJpbmcnIHwgJ1BvbHlnb24nIHwgJ011bHRpUG9seWdvbicsXG4gICAgK2lkPzogYW55LFxuICAgICtwcm9wZXJ0aWVzOiB7W3N0cmluZ106IGFueX0sXG4gICAgK3BhdHRlcm5zPzoge1tzdHJpbmddOiB7XCJtaW5cIjogc3RyaW5nLCBcIm1pZFwiOiBzdHJpbmcsIFwibWF4XCI6IHN0cmluZ319XG59O1xuXG5leHBvcnQgdHlwZSBGZWF0dXJlU3RhdGUgPSB7W3N0cmluZ106IGFueX07XG5cbmV4cG9ydCB0eXBlIEdsb2JhbFByb3BlcnRpZXMgPSAkUmVhZE9ubHk8e1xuICAgIHpvb206IG51bWJlcixcbiAgICBoZWF0bWFwRGVuc2l0eT86IG51bWJlcixcbiAgICBsaW5lUHJvZ3Jlc3M/OiBudW1iZXIsXG4gICAgaXNTdXBwb3J0ZWRTY3JpcHQ/OiAoc3RyaW5nKSA9PiBib29sZWFuLFxuICAgIGFjY3VtdWxhdGVkPzogVmFsdWVcbn0+O1xuXG5leHBvcnQgY2xhc3MgU3R5bGVFeHByZXNzaW9uIHtcbiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uO1xuXG4gICAgX2V2YWx1YXRvcjogRXZhbHVhdGlvbkNvbnRleHQ7XG4gICAgX2RlZmF1bHRWYWx1ZTogVmFsdWU7XG4gICAgX3dhcm5pbmdIaXN0b3J5OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn07XG4gICAgX2VudW1WYWx1ZXM6ID97W3N0cmluZ106IGFueX07XG5cbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBFeHByZXNzaW9uLCBwcm9wZXJ0eVNwZWM6ID9TdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLl93YXJuaW5nSGlzdG9yeSA9IHt9O1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IgPSBuZXcgRXZhbHVhdGlvbkNvbnRleHQoKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gcHJvcGVydHlTcGVjID8gZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5U3BlYykgOiBudWxsO1xuICAgICAgICB0aGlzLl9lbnVtVmFsdWVzID0gcHJvcGVydHlTcGVjICYmIHByb3BlcnR5U3BlYy50eXBlID09PSAnZW51bScgPyBwcm9wZXJ0eVNwZWMudmFsdWVzIDogbnVsbDtcbiAgICB9XG5cbiAgICBldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmdsb2JhbHMgPSBnbG9iYWxzO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZSA9IGZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlU3RhdGUgPSBmZWF0dXJlU3RhdGU7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5hdmFpbGFibGVJbWFnZXMgPSBhdmFpbGFibGVJbWFnZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZvcm1hdHRlZFNlY3Rpb24gPSBmb3JtYXR0ZWRTZWN0aW9uO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5fZXZhbHVhdG9yKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IGFueSB7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5nbG9iYWxzID0gZ2xvYmFscztcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmUgPSBmZWF0dXJlIHx8IG51bGw7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlU3RhdGUgPSBmZWF0dXJlU3RhdGUgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcyA9IGF2YWlsYWJsZUltYWdlcyB8fCBudWxsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZm9ybWF0dGVkU2VjdGlvbiA9IGZvcm1hdHRlZFNlY3Rpb24gfHwgbnVsbDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcik7XG4gICAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9lbnVtVmFsdWVzICYmICEodmFsIGluIHRoaXMuX2VudW1WYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mICR7T2JqZWN0LmtleXModGhpcy5fZW51bVZhbHVlcykubWFwKHYgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oJywgJyl9LCBidXQgZm91bmQgJHtKU09OLnN0cmluZ2lmeSh2YWwpfSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl93YXJuaW5nSGlzdG9yeVtlLm1lc3NhZ2VdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2FybmluZ0hpc3RvcnlbZS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHByZXNzaW9uKGV4cHJlc3Npb246IG1peGVkKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi5sZW5ndGggPiAwICYmXG4gICAgICAgIHR5cGVvZiBleHByZXNzaW9uWzBdID09PSAnc3RyaW5nJyAmJiBleHByZXNzaW9uWzBdIGluIGRlZmluaXRpb25zO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuZCB0eXBlY2hlY2sgdGhlIGdpdmVuIHN0eWxlIHNwZWMgSlNPTiBleHByZXNzaW9uLiAgSWZcbiAqIG9wdGlvbnMuZGVmYXVsdFZhbHVlIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSByZXN1bHRpbmcgU3R5bGVFeHByZXNzaW9uJ3NcbiAqIGBldmFsdWF0ZSgpYCBtZXRob2Qgd2lsbCBoYW5kbGUgZXJyb3JzIGJ5IGxvZ2dpbmcgYSB3YXJuaW5nIChvbmNlIHBlclxuICogbWVzc2FnZSkgYW5kIHJldHVybmluZyB0aGUgZGVmYXVsdCB2YWx1ZS4gIE90aGVyd2lzZSwgaXQgd2lsbCB0aHJvd1xuICogZXZhbHVhdGlvbiBlcnJvcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogbWl4ZWQsIHByb3BlcnR5U3BlYzogP1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogUmVzdWx0PFN0eWxlRXhwcmVzc2lvbiwgQXJyYXk8UGFyc2luZ0Vycm9yPj4ge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzaW5nQ29udGV4dChkZWZpbml0aW9ucywgW10sIHByb3BlcnR5U3BlYyA/IGdldEV4cGVjdGVkVHlwZShwcm9wZXJ0eVNwZWMpIDogdW5kZWZpbmVkKTtcblxuICAgIC8vIEZvciBzdHJpbmctdmFsdWVkIHByb3BlcnRpZXMsIGNvZXJjZSB0byBzdHJpbmcgYXQgdGhlIHRvcCBsZXZlbCByYXRoZXIgdGhhbiBhc3NlcnRpbmcuXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VyLnBhcnNlKGV4cHJlc3Npb24sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsXG4gICAgICAgIHByb3BlcnR5U3BlYyAmJiBwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ3N0cmluZycgPyB7dHlwZUFubm90YXRpb246ICdjb2VyY2UnfSA6IHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBhc3NlcnQocGFyc2VyLmVycm9ycy5sZW5ndGggPiAwKTtcbiAgICAgICAgcmV0dXJuIGVycm9yKHBhcnNlci5lcnJvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWNjZXNzKG5ldyBTdHlsZUV4cHJlc3Npb24ocGFyc2VkLCBwcm9wZXJ0eVNwZWMpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFpvb21Db25zdGFudEV4cHJlc3Npb248S2luZDogRXZhbHVhdGlvbktpbmQ+IHtcbiAgICBraW5kOiBLaW5kO1xuICAgIGlzU3RhdGVEZXBlbmRlbnQ6IGJvb2xlYW47XG4gICAgX3N0eWxlRXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3Ioa2luZDogS2luZCwgZXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgIHRoaXMuX3N0eWxlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuaXNTdGF0ZURlcGVuZGVudCA9IGtpbmQgIT09ICgnY29uc3RhbnQnOiBFdmFsdWF0aW9uS2luZCkgJiYgIWlzQ29uc3RhbnQuaXNTdGF0ZUNvbnN0YW50KGV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyhnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyhnbG9iYWxzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcywgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBab29tRGVwZW5kZW50RXhwcmVzc2lvbjxLaW5kOiBFdmFsdWF0aW9uS2luZD4ge1xuICAgIGtpbmQ6IEtpbmQ7XG4gICAgem9vbVN0b3BzOiBBcnJheTxudW1iZXI+O1xuICAgIGlzU3RhdGVEZXBlbmRlbnQ6IGJvb2xlYW47XG5cbiAgICBfc3R5bGVFeHByZXNzaW9uOiBTdHlsZUV4cHJlc3Npb247XG4gICAgaW50ZXJwb2xhdGlvblR5cGU6ID9JbnRlcnBvbGF0aW9uVHlwZTtcblxuICAgIGNvbnN0cnVjdG9yKGtpbmQ6IEtpbmQsIGV4cHJlc3Npb246IFN0eWxlRXhwcmVzc2lvbiwgem9vbVN0b3BzOiBBcnJheTxudW1iZXI+LCBpbnRlcnBvbGF0aW9uVHlwZT86IEludGVycG9sYXRpb25UeXBlKSB7XG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgIHRoaXMuem9vbVN0b3BzID0gem9vbVN0b3BzO1xuICAgICAgICB0aGlzLl9zdHlsZUV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLmlzU3RhdGVEZXBlbmRlbnQgPSBraW5kICE9PSAoJ2NhbWVyYSc6IEV2YWx1YXRpb25LaW5kKSAmJiAhaXNDb25zdGFudC5pc1N0YXRlQ29uc3RhbnQoZXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uVHlwZSA9IGludGVycG9sYXRpb25UeXBlO1xuICAgIH1cblxuICAgIGV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcoZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZShnbG9iYWxzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcywgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGlvbkZhY3RvcihpbnB1dDogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJwb2xhdGlvblR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yKHRoaXMuaW50ZXJwb2xhdGlvblR5cGUsIGlucHV0LCBsb3dlciwgdXBwZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIENvbnN0YW50RXhwcmVzc2lvbiA9IHtcbiAgICBraW5kOiAnY29uc3RhbnQnLFxuICAgICtldmFsdWF0ZTogKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pID0+IGFueSxcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlRXhwcmVzc2lvbiA9IHtcbiAgICBraW5kOiAnc291cmNlJyxcbiAgICBpc1N0YXRlRGVwZW5kZW50OiBib29sZWFuLFxuICAgICtldmFsdWF0ZTogKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSA9PiBhbnksXG59O1xuXG5leHBvcnQgdHlwZSBDYW1lcmFFeHByZXNzaW9uID0ge1xuICAgIGtpbmQ6ICdjYW1lcmEnLFxuICAgICtldmFsdWF0ZTogKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pID0+IGFueSxcbiAgICAraW50ZXJwb2xhdGlvbkZhY3RvcjogKGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpID0+IG51bWJlcixcbiAgICB6b29tU3RvcHM6IEFycmF5PG51bWJlcj4sXG4gICAgaW50ZXJwb2xhdGlvblR5cGU6ID9JbnRlcnBvbGF0aW9uVHlwZVxufTtcblxuZXhwb3J0IHR5cGUgQ29tcG9zaXRlRXhwcmVzc2lvbiA9IHtcbiAgICBraW5kOiAnY29tcG9zaXRlJyxcbiAgICBpc1N0YXRlRGVwZW5kZW50OiBib29sZWFuLFxuICAgICtldmFsdWF0ZTogKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSA9PiBhbnksXG4gICAgK2ludGVycG9sYXRpb25GYWN0b3I6IChpbnB1dDogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgem9vbVN0b3BzOiBBcnJheTxudW1iZXI+LFxuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGVcbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlUHJvcGVydHlFeHByZXNzaW9uID1cbiAgICB8IENvbnN0YW50RXhwcmVzc2lvblxuICAgIHwgU291cmNlRXhwcmVzc2lvblxuICAgIHwgQ2FtZXJhRXhwcmVzc2lvblxuICAgIHwgQ29tcG9zaXRlRXhwcmVzc2lvbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5RXhwcmVzc2lvbihleHByZXNzaW9uOiBtaXhlZCwgcHJvcGVydHlTcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IFJlc3VsdDxTdHlsZVByb3BlcnR5RXhwcmVzc2lvbiwgQXJyYXk8UGFyc2luZ0Vycm9yPj4ge1xuICAgIGV4cHJlc3Npb24gPSBjcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIHByb3BlcnR5U3BlYyk7XG4gICAgaWYgKGV4cHJlc3Npb24ucmVzdWx0ID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiBleHByZXNzaW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IGV4cHJlc3Npb24udmFsdWUuZXhwcmVzc2lvbjtcblxuICAgIGNvbnN0IGlzRmVhdHVyZUNvbnN0YW50ID0gaXNDb25zdGFudC5pc0ZlYXR1cmVDb25zdGFudChwYXJzZWQpO1xuICAgIGlmICghaXNGZWF0dXJlQ29uc3RhbnQgJiYgIXN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKHByb3BlcnR5U3BlYykpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFtuZXcgUGFyc2luZ0Vycm9yKCcnLCAnZGF0YSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkJyldKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1pvb21Db25zdGFudCA9IGlzQ29uc3RhbnQuaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50KHBhcnNlZCwgWyd6b29tJ10pO1xuICAgIGlmICghaXNab29tQ29uc3RhbnQgJiYgIXN1cHBvcnRzWm9vbUV4cHJlc3Npb24ocHJvcGVydHlTcGVjKSkge1xuICAgICAgICByZXR1cm4gZXJyb3IoW25ldyBQYXJzaW5nRXJyb3IoJycsICd6b29tIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQnKV0pO1xuICAgIH1cblxuICAgIGNvbnN0IHpvb21DdXJ2ZSA9IGZpbmRab29tQ3VydmUocGFyc2VkKTtcbiAgICBpZiAoIXpvb21DdXJ2ZSAmJiAhaXNab29tQ29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFtuZXcgUGFyc2luZ0Vycm9yKCcnLCAnXCJ6b29tXCIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9uLicpXSk7XG4gICAgfSBlbHNlIGlmICh6b29tQ3VydmUgaW5zdGFuY2VvZiBQYXJzaW5nRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFt6b29tQ3VydmVdKTtcbiAgICB9IGVsc2UgaWYgKHpvb21DdXJ2ZSBpbnN0YW5jZW9mIEludGVycG9sYXRlICYmICFzdXBwb3J0c0ludGVycG9sYXRpb24ocHJvcGVydHlTcGVjKSkge1xuICAgICAgICByZXR1cm4gZXJyb3IoW25ldyBQYXJzaW5nRXJyb3IoJycsICdcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTtcbiAgICB9XG5cbiAgICBpZiAoIXpvb21DdXJ2ZSkge1xuICAgICAgICByZXR1cm4gc3VjY2Vzcyhpc0ZlYXR1cmVDb25zdGFudCA/XG4gICAgICAgICAgICAobmV3IFpvb21Db25zdGFudEV4cHJlc3Npb24oJ2NvbnN0YW50JywgZXhwcmVzc2lvbi52YWx1ZSk6IENvbnN0YW50RXhwcmVzc2lvbikgOlxuICAgICAgICAgICAgKG5ldyBab29tQ29uc3RhbnRFeHByZXNzaW9uKCdzb3VyY2UnLCBleHByZXNzaW9uLnZhbHVlKTogU291cmNlRXhwcmVzc2lvbikpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVycG9sYXRpb25UeXBlID0gem9vbUN1cnZlIGluc3RhbmNlb2YgSW50ZXJwb2xhdGUgPyB6b29tQ3VydmUuaW50ZXJwb2xhdGlvbiA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBzdWNjZXNzKGlzRmVhdHVyZUNvbnN0YW50ID9cbiAgICAgICAgKG5ldyBab29tRGVwZW5kZW50RXhwcmVzc2lvbignY2FtZXJhJywgZXhwcmVzc2lvbi52YWx1ZSwgem9vbUN1cnZlLmxhYmVscywgaW50ZXJwb2xhdGlvblR5cGUpOiBDYW1lcmFFeHByZXNzaW9uKSA6XG4gICAgICAgIChuZXcgWm9vbURlcGVuZGVudEV4cHJlc3Npb24oJ2NvbXBvc2l0ZScsIGV4cHJlc3Npb24udmFsdWUsIHpvb21DdXJ2ZS5sYWJlbHMsIGludGVycG9sYXRpb25UeXBlKTogQ29tcG9zaXRlRXhwcmVzc2lvbikpO1xufVxuXG5pbXBvcnQge2lzRnVuY3Rpb24sIGNyZWF0ZUZ1bmN0aW9ufSBmcm9tICcuLi9mdW5jdGlvbic7XG5pbXBvcnQge0NvbG9yfSBmcm9tICcuL3ZhbHVlcyc7XG5cbi8vIHNlcmlhbGl6YXRpb24gd3JhcHBlciBmb3Igb2xkLXN0eWxlIHN0b3AgZnVuY3Rpb25zIG5vcm1hbGl6ZWQgdG8gdGhlXG4vLyBleHByZXNzaW9uIGludGVyZmFjZVxuZXhwb3J0IGNsYXNzIFN0eWxlUHJvcGVydHlGdW5jdGlvbjxUPiB7XG4gICAgX3BhcmFtZXRlcnM6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+O1xuICAgIF9zcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGtpbmQ6IEV2YWx1YXRpb25LaW5kO1xuICAgIGV2YWx1YXRlOiAoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUpID0+IGFueTtcbiAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiA/KGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpID0+IG51bWJlcjtcbiAgICB6b29tU3RvcHM6ID9BcnJheTxudW1iZXI+O1xuXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVyczogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4sIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICB0aGlzLl9zcGVjaWZpY2F0aW9uID0gc3BlY2lmaWNhdGlvbjtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGNyZWF0ZUZ1bmN0aW9uKHRoaXMuX3BhcmFtZXRlcnMsIHRoaXMuX3NwZWNpZmljYXRpb24pKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUoc2VyaWFsaXplZDoge19wYXJhbWV0ZXJzOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiwgX3NwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9ufSkge1xuICAgICAgICByZXR1cm4gKChuZXcgU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uKHNlcmlhbGl6ZWQuX3BhcmFtZXRlcnMsIHNlcmlhbGl6ZWQuX3NwZWNpZmljYXRpb24pKTogU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uPFQ+KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2VyaWFsaXplKGlucHV0OiBTdHlsZVByb3BlcnR5RnVuY3Rpb248VD4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9wYXJhbWV0ZXJzOiBpbnB1dC5fcGFyYW1ldGVycyxcbiAgICAgICAgICAgIF9zcGVjaWZpY2F0aW9uOiBpbnB1dC5fc3BlY2lmaWNhdGlvblxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BlcnR5RXhwcmVzc2lvbjxUPih2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4sIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogU3R5bGVQcm9wZXJ0eUV4cHJlc3Npb24ge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gKG5ldyBTdHlsZVByb3BlcnR5RnVuY3Rpb24odmFsdWUsIHNwZWNpZmljYXRpb24pOiBhbnkpO1xuXG4gICAgfSBlbHNlIGlmIChpc0V4cHJlc3Npb24odmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBjcmVhdGVQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWUsIHNwZWNpZmljYXRpb24pO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbi5yZXN1bHQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgaW4gdmFsaWRhdGlvblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cHJlc3Npb24udmFsdWUubWFwKGVyciA9PiBgJHtlcnIua2V5fTogJHtlcnIubWVzc2FnZX1gKS5qb2luKCcsICcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi52YWx1ZTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb25zdGFudDogYW55ID0gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHNwZWNpZmljYXRpb24udHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgY29uc3RhbnQgPSBDb2xvci5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb25zdGFudCcsXG4gICAgICAgICAgICBldmFsdWF0ZTogKCkgPT4gY29uc3RhbnRcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8vIFpvb20tZGVwZW5kZW50IGV4cHJlc3Npb25zIG1heSBvbmx5IHVzZSBbXCJ6b29tXCJdIGFzIHRoZSBpbnB1dCB0byBhIHRvcC1sZXZlbCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCJcbi8vIGV4cHJlc3Npb24gKGNvbGxlY3RpdmVseSByZWZlcnJlZCB0byBhcyBhIFwiY3VydmVcIikuIFRoZSBjdXJ2ZSBtYXkgYmUgd3JhcHBlZCBpbiBvbmUgb3IgbW9yZSBcImxldFwiIG9yXG4vLyBcImNvYWxlc2NlXCIgZXhwcmVzc2lvbnMuXG5mdW5jdGlvbiBmaW5kWm9vbUN1cnZlKGV4cHJlc3Npb246IEV4cHJlc3Npb24pOiBTdGVwIHwgSW50ZXJwb2xhdGUgfCBQYXJzaW5nRXJyb3IgfCBudWxsIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIExldCkge1xuICAgICAgICByZXN1bHQgPSBmaW5kWm9vbUN1cnZlKGV4cHJlc3Npb24ucmVzdWx0KTtcblxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIENvYWxlc2NlKSB7XG4gICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGV4cHJlc3Npb24uYXJncykge1xuICAgICAgICAgICAgcmVzdWx0ID0gZmluZFpvb21DdXJ2ZShhcmcpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKChleHByZXNzaW9uIGluc3RhbmNlb2YgU3RlcCB8fCBleHByZXNzaW9uIGluc3RhbmNlb2YgSW50ZXJwb2xhdGUpICYmXG4gICAgICAgIGV4cHJlc3Npb24uaW5wdXQgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24gJiZcbiAgICAgICAgZXhwcmVzc2lvbi5pbnB1dC5uYW1lID09PSAnem9vbScpIHtcblxuICAgICAgICByZXN1bHQgPSBleHByZXNzaW9uO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQYXJzaW5nRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBleHByZXNzaW9uLmVhY2hDaGlsZCgoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRSZXN1bHQgPSBmaW5kWm9vbUN1cnZlKGNoaWxkKTtcbiAgICAgICAgaWYgKGNoaWxkUmVzdWx0IGluc3RhbmNlb2YgUGFyc2luZ0Vycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjaGlsZFJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmICghcmVzdWx0ICYmIGNoaWxkUmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgUGFyc2luZ0Vycm9yKCcnLCAnXCJ6b29tXCIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9uLicpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAmJiBjaGlsZFJlc3VsdCAmJiByZXN1bHQgIT09IGNoaWxkUmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgUGFyc2luZ0Vycm9yKCcnLCAnT25seSBvbmUgem9vbS1iYXNlZCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCIgc3ViZXhwcmVzc2lvbiBtYXkgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLicpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5pbXBvcnQge0NvbG9yVHlwZSwgU3RyaW5nVHlwZSwgTnVtYmVyVHlwZSwgQm9vbGVhblR5cGUsIFZhbHVlVHlwZSwgRm9ybWF0dGVkVHlwZSwgSW1hZ2VUeXBlLCBhcnJheX0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIGdldEV4cGVjdGVkVHlwZShzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IFR5cGUge1xuICAgIGNvbnN0IHR5cGVzID0ge1xuICAgICAgICBjb2xvcjogQ29sb3JUeXBlLFxuICAgICAgICBzdHJpbmc6IFN0cmluZ1R5cGUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyVHlwZSxcbiAgICAgICAgZW51bTogU3RyaW5nVHlwZSxcbiAgICAgICAgYm9vbGVhbjogQm9vbGVhblR5cGUsXG4gICAgICAgIGZvcm1hdHRlZDogRm9ybWF0dGVkVHlwZSxcbiAgICAgICAgaW1hZ2U6IEltYWdlVHlwZVxuICAgIH07XG5cbiAgICBpZiAoc3BlYy50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgIHJldHVybiBhcnJheSh0eXBlc1tzcGVjLnZhbHVlXSB8fCBWYWx1ZVR5cGUsIHNwZWMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXNbc3BlYy50eXBlXTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogVmFsdWUge1xuICAgIGlmIChzcGVjLnR5cGUgPT09ICdjb2xvcicgJiYgaXNGdW5jdGlvbihzcGVjLmRlZmF1bHQpKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgaGVhdG1hcC1jb2xvcjogaXQgdXNlcyB0aGUgJ2RlZmF1bHQ6JyB0byBkZWZpbmUgYVxuICAgICAgICAvLyBkZWZhdWx0IGNvbG9yIHJhbXAsIGJ1dCBjcmVhdGVFeHByZXNzaW9uIGV4cGVjdHMgYSBzaW1wbGUgdmFsdWUgdG8gZmFsbFxuICAgICAgICAvLyBiYWNrIHRvIGluIGNhc2Ugb2YgcnVudGltZSBlcnJvcnNcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcigwLCAwLCAwLCAwKTtcbiAgICB9IGVsc2UgaWYgKHNwZWMudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICByZXR1cm4gQ29sb3IucGFyc2Uoc3BlYy5kZWZhdWx0KSB8fCBudWxsO1xuICAgIH0gZWxzZSBpZiAoc3BlYy5kZWZhdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNwZWMuZGVmYXVsdDtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB2YWxpZGF0ZVNwZWMgZnJvbSAnLi92YWxpZGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBvYmplY3QgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGVsZW1lbnRTcGVjcyA9IG9wdGlvbnMudmFsdWVTcGVjIHx8IHt9O1xuICAgIGNvbnN0IGVsZW1lbnRWYWxpZGF0b3JzID0gb3B0aW9ucy5vYmplY3RFbGVtZW50VmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUob2JqZWN0KTtcbiAgICBpZiAodHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgb2JqZWN0LCBgb2JqZWN0IGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb2JqZWN0S2V5IGluIG9iamVjdCkge1xuICAgICAgICBjb25zdCBlbGVtZW50U3BlY0tleSA9IG9iamVjdEtleS5zcGxpdCgnLicpWzBdOyAvLyB0cmVhdCAncGFpbnQuKicgYXMgJ3BhaW50J1xuICAgICAgICBjb25zdCBlbGVtZW50U3BlYyA9IGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV0gfHwgZWxlbWVudFNwZWNzWycqJ107XG5cbiAgICAgICAgbGV0IHZhbGlkYXRlRWxlbWVudDtcbiAgICAgICAgaWYgKGVsZW1lbnRWYWxpZGF0b3JzW2VsZW1lbnRTcGVjS2V5XSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50ID0gZWxlbWVudFZhbGlkYXRvcnNbZWxlbWVudFNwZWNLZXldO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV0pIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudCA9IHZhbGlkYXRlU3BlYztcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50VmFsaWRhdG9yc1snKiddKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQgPSBlbGVtZW50VmFsaWRhdG9yc1snKiddO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRTcGVjc1snKiddKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQgPSB2YWxpZGF0ZVNwZWM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgb2JqZWN0W29iamVjdEtleV0sIGB1bmtub3duIHByb3BlcnR5IFwiJHtvYmplY3RLZXl9XCJgKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVFbGVtZW50KHtcbiAgICAgICAgICAgIGtleTogKGtleSA/IGAke2tleX0uYCA6IGtleSkgKyBvYmplY3RLZXksXG4gICAgICAgICAgICB2YWx1ZTogb2JqZWN0W29iamVjdEtleV0sXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IGVsZW1lbnRTcGVjLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICBvYmplY3RLZXlcbiAgICAgICAgfSwgb2JqZWN0KSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbGVtZW50U3BlY0tleSBpbiBlbGVtZW50U3BlY3MpIHtcbiAgICAgICAgLy8gRG9uJ3QgY2hlY2sgYHJlcXVpcmVkYCB3aGVuIHRoZXJlJ3MgYSBjdXN0b20gdmFsaWRhdG9yIGZvciB0aGF0IHByb3BlcnR5LlxuICAgICAgICBpZiAoZWxlbWVudFZhbGlkYXRvcnNbZWxlbWVudFNwZWNLZXldKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50U3BlY3NbZWxlbWVudFNwZWNLZXldLnJlcXVpcmVkICYmIGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV1bJ2RlZmF1bHQnXSA9PT0gdW5kZWZpbmVkICYmIG9iamVjdFtlbGVtZW50U3BlY0tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIG9iamVjdCwgYG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCIke2VsZW1lbnRTcGVjS2V5fVwiYCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUFycmF5KG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgYXJyYXlTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWM7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHZhbGlkYXRlQXJyYXlFbGVtZW50ID0gb3B0aW9ucy5hcnJheUVsZW1lbnRWYWxpZGF0b3IgfHwgdmFsaWRhdGU7XG5cbiAgICBpZiAoZ2V0VHlwZShhcnJheSkgIT09ICdhcnJheScpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgYXJyYXksIGBhcnJheSBleHBlY3RlZCwgJHtnZXRUeXBlKGFycmF5KX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgaWYgKGFycmF5U3BlYy5sZW5ndGggJiYgYXJyYXkubGVuZ3RoICE9PSBhcnJheVNwZWMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGFycmF5LCBgYXJyYXkgbGVuZ3RoICR7YXJyYXlTcGVjLmxlbmd0aH0gZXhwZWN0ZWQsIGxlbmd0aCAke2FycmF5Lmxlbmd0aH0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgaWYgKGFycmF5U3BlY1snbWluLWxlbmd0aCddICYmIGFycmF5Lmxlbmd0aCA8IGFycmF5U3BlY1snbWluLWxlbmd0aCddKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGFycmF5LCBgYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICR7YXJyYXlTcGVjWydtaW4tbGVuZ3RoJ119IGV4cGVjdGVkLCBsZW5ndGggJHthcnJheS5sZW5ndGh9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGxldCBhcnJheUVsZW1lbnRTcGVjID0ge1xuICAgICAgICBcInR5cGVcIjogYXJyYXlTcGVjLnZhbHVlLFxuICAgICAgICBcInZhbHVlc1wiOiBhcnJheVNwZWMudmFsdWVzXG4gICAgfTtcblxuICAgIGlmIChzdHlsZVNwZWMuJHZlcnNpb24gPCA3KSB7XG4gICAgICAgIGFycmF5RWxlbWVudFNwZWMuZnVuY3Rpb24gPSBhcnJheVNwZWMuZnVuY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKGdldFR5cGUoYXJyYXlTcGVjLnZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYXJyYXlFbGVtZW50U3BlYyA9IGFycmF5U3BlYy52YWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgZXJyb3JzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlQXJyYXlFbGVtZW50KHtcbiAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgYXJyYXlJbmRleDogaSxcbiAgICAgICAgICAgIHZhbHVlOiBhcnJheVtpXSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogYXJyYXlFbGVtZW50U3BlYyxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICAgICAga2V5OiBgJHtrZXl9WyR7aX1dYFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCB2YWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZSh2YWx1ZSk7XG5cbiAgICBpZiAodHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBudW1iZXIgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgaWYgKCdtaW5pbXVtJyBpbiB2YWx1ZVNwZWMgJiYgdmFsdWUgPCB2YWx1ZVNwZWMubWluaW11bSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYCR7dmFsdWV9IGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAke3ZhbHVlU3BlYy5taW5pbXVtfWApXTtcbiAgICB9XG5cbiAgICBpZiAoJ21heGltdW0nIGluIHZhbHVlU3BlYyAmJiB2YWx1ZSA+IHZhbHVlU3BlYy5tYXhpbXVtKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgJHt2YWx1ZX0gaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlICR7dmFsdWVTcGVjLm1heGltdW19YCldO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IHZhbGlkYXRlT2JqZWN0IGZyb20gJy4vdmFsaWRhdGVfb2JqZWN0JztcbmltcG9ydCB2YWxpZGF0ZUFycmF5IGZyb20gJy4vdmFsaWRhdGVfYXJyYXknO1xuaW1wb3J0IHZhbGlkYXRlTnVtYmVyIGZyb20gJy4vdmFsaWRhdGVfbnVtYmVyJztcbmltcG9ydCB7aXNFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB7dW5idW5kbGUsIGRlZXBVbmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQge1xuICAgIHN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uLFxuICAgIHN1cHBvcnRzWm9vbUV4cHJlc3Npb24sXG4gICAgc3VwcG9ydHNJbnRlcnBvbGF0aW9uXG59IGZyb20gJy4uL3V0aWwvcHJvcGVydGllcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGNvbnN0IGZ1bmN0aW9uVmFsdWVTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWM7XG4gICAgY29uc3QgZnVuY3Rpb25UeXBlID0gdW5idW5kbGUob3B0aW9ucy52YWx1ZS50eXBlKTtcbiAgICBsZXQgc3RvcEtleVR5cGU7XG4gICAgbGV0IHN0b3BEb21haW5WYWx1ZXMgPSB7fTtcbiAgICBsZXQgcHJldmlvdXNTdG9wRG9tYWluVmFsdWU7XG4gICAgbGV0IHByZXZpb3VzU3RvcERvbWFpblpvb207XG5cbiAgICBjb25zdCBpc1pvb21GdW5jdGlvbiA9IGZ1bmN0aW9uVHlwZSAhPT0gJ2NhdGVnb3JpY2FsJyAmJiBvcHRpb25zLnZhbHVlLnByb3BlcnR5ID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNQcm9wZXJ0eUZ1bmN0aW9uID0gIWlzWm9vbUZ1bmN0aW9uO1xuICAgIGNvbnN0IGlzWm9vbUFuZFByb3BlcnR5RnVuY3Rpb24gPVxuICAgICAgICBnZXRUeXBlKG9wdGlvbnMudmFsdWUuc3RvcHMpID09PSAnYXJyYXknICYmXG4gICAgICAgIGdldFR5cGUob3B0aW9ucy52YWx1ZS5zdG9wc1swXSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgZ2V0VHlwZShvcHRpb25zLnZhbHVlLnN0b3BzWzBdWzBdKSA9PT0gJ29iamVjdCc7XG5cbiAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgIHZhbHVlOiBvcHRpb25zLnZhbHVlLFxuICAgICAgICB2YWx1ZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLmZ1bmN0aW9uLFxuICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgIHN0b3BzOiB2YWxpZGF0ZUZ1bmN0aW9uU3RvcHMsXG4gICAgICAgICAgICBkZWZhdWx0OiB2YWxpZGF0ZUZ1bmN0aW9uRGVmYXVsdFxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZnVuY3Rpb25UeXBlID09PSAnaWRlbnRpdHknICYmIGlzWm9vbUZ1bmN0aW9uKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwicHJvcGVydHlcIicpKTtcbiAgICB9XG5cbiAgICBpZiAoZnVuY3Rpb25UeXBlICE9PSAnaWRlbnRpdHknICYmICFvcHRpb25zLnZhbHVlLnN0b3BzKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwic3RvcHNcIicpKTtcbiAgICB9XG5cbiAgICBpZiAoZnVuY3Rpb25UeXBlID09PSAnZXhwb25lbnRpYWwnICYmIG9wdGlvbnMudmFsdWVTcGVjLmV4cHJlc3Npb24gJiYgIXN1cHBvcnRzSW50ZXJwb2xhdGlvbihvcHRpb25zLnZhbHVlU3BlYykpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ2V4cG9uZW50aWFsIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkJykpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnN0eWxlU3BlYy4kdmVyc2lvbiA+PSA4KSB7XG4gICAgICAgIGlmIChpc1Byb3BlcnR5RnVuY3Rpb24gJiYgIXN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKG9wdGlvbnMudmFsdWVTcGVjKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ3Byb3BlcnR5IGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzWm9vbUZ1bmN0aW9uICYmICFzdXBwb3J0c1pvb21FeHByZXNzaW9uKG9wdGlvbnMudmFsdWVTcGVjKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ3pvb20gZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKGZ1bmN0aW9uVHlwZSA9PT0gJ2NhdGVnb3JpY2FsJyB8fCBpc1pvb21BbmRQcm9wZXJ0eUZ1bmN0aW9uKSAmJiBvcHRpb25zLnZhbHVlLnByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ1wicHJvcGVydHlcIiBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvblN0b3BzKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PT0gJ2lkZW50aXR5Jykge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnaWRlbnRpdHkgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGEgXCJzdG9wc1wiIHByb3BlcnR5JyldO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVycm9ycyA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cbiAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUFycmF5KHtcbiAgICAgICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogb3B0aW9ucy52YWx1ZVNwZWMsXG4gICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICBhcnJheUVsZW1lbnRWYWxpZGF0b3I6IHZhbGlkYXRlRnVuY3Rpb25TdG9wXG4gICAgICAgIH0pKTtcblxuICAgICAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgPT09ICdhcnJheScgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCB2YWx1ZSwgJ2FycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3RvcCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvblN0b3Aob3B0aW9ucykge1xuICAgICAgICBsZXQgZXJyb3JzID0gW107XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICAgICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgICAgICAgaWYgKGdldFR5cGUodmFsdWUpICE9PSAnYXJyYXknKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGFycmF5IGV4cGVjdGVkLCAke2dldFR5cGUodmFsdWUpfSBmb3VuZGApXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgYXJyYXkgbGVuZ3RoIDIgZXhwZWN0ZWQsIGxlbmd0aCAke3ZhbHVlLmxlbmd0aH0gZm91bmRgKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNab29tQW5kUHJvcGVydHlGdW5jdGlvbikge1xuICAgICAgICAgICAgaWYgKGdldFR5cGUodmFsdWVbMF0pICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgb2JqZWN0IGV4cGVjdGVkLCAke2dldFR5cGUodmFsdWVbMF0pfSBmb3VuZGApXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVswXS56b29tID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ29iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgem9vbScpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVswXS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHZhbHVlJyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RvcERvbWFpblpvb20gJiYgcHJldmlvdXNTdG9wRG9tYWluWm9vbSA+IHVuYnVuZGxlKHZhbHVlWzBdLnpvb20pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWVbMF0uem9vbSwgJ3N0b3Agem9vbSB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyJyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVuYnVuZGxlKHZhbHVlWzBdLnpvb20pICE9PSBwcmV2aW91c1N0b3BEb21haW5ab29tKSB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTdG9wRG9tYWluWm9vbSA9IHVuYnVuZGxlKHZhbHVlWzBdLnpvb20pO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzU3RvcERvbWFpblZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHN0b3BEb21haW5WYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fVswXWAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlWzBdLFxuICAgICAgICAgICAgICAgIHZhbHVlU3BlYzoge3pvb206IHt9fSxcbiAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICAgICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7em9vbTogdmFsaWRhdGVOdW1iZXIsIHZhbHVlOiB2YWxpZGF0ZVN0b3BEb21haW5WYWx1ZX1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVTdG9wRG9tYWluVmFsdWUoe1xuICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fVswXWAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlWzBdLFxuICAgICAgICAgICAgICAgIHZhbHVlU3BlYzoge30sXG4gICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICAgICAgfSwgdmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0V4cHJlc3Npb24oZGVlcFVuYnVuZGxlKHZhbHVlWzFdKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcnMuY29uY2F0KFtuZXcgVmFsaWRhdGlvbkVycm9yKGAke2tleX1bMV1gLCB2YWx1ZVsxXSwgJ2V4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiBzdG9wcy4nKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycy5jb25jYXQodmFsaWRhdGUoe1xuICAgICAgICAgICAga2V5OiBgJHtrZXl9WzFdYCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVsxXSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogZnVuY3Rpb25WYWx1ZVNwZWMsXG4gICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3RvcERvbWFpblZhbHVlKG9wdGlvbnMsIHN0b3ApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGdldFR5cGUob3B0aW9ucy52YWx1ZSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdW5idW5kbGUob3B0aW9ucy52YWx1ZSk7XG5cbiAgICAgICAgY29uc3QgcmVwb3J0VmFsdWUgPSBvcHRpb25zLnZhbHVlICE9PSBudWxsID8gb3B0aW9ucy52YWx1ZSA6IHN0b3A7XG5cbiAgICAgICAgaWYgKCFzdG9wS2V5VHlwZSkge1xuICAgICAgICAgICAgc3RvcEtleVR5cGUgPSB0eXBlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHN0b3BLZXlUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCBgJHt0eXBlfSBzdG9wIGRvbWFpbiB0eXBlIG11c3QgbWF0Y2ggcHJldmlvdXMgc3RvcCBkb21haW4gdHlwZSAke3N0b3BLZXlUeXBlfWApXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlICE9PSAnbnVtYmVyJyAmJiB0eXBlICE9PSAnc3RyaW5nJyAmJiB0eXBlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsICdzdG9wIGRvbWFpbiB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4nKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSAhPT0gJ251bWJlcicgJiYgZnVuY3Rpb25UeXBlICE9PSAnY2F0ZWdvcmljYWwnKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IGBudW1iZXIgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgO1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKGZ1bmN0aW9uVmFsdWVTcGVjKSAmJiBmdW5jdGlvblR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gJ1xcbklmIHlvdSBpbnRlbmRlZCB0byB1c2UgYSBjYXRlZ29yaWNhbCBmdW5jdGlvbiwgc3BlY2lmeSBgXCJ0eXBlXCI6IFwiY2F0ZWdvcmljYWxcImAuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsIG1lc3NhZ2UpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdjYXRlZ29yaWNhbCcgJiYgdHlwZSA9PT0gJ251bWJlcicgJiYgKCFpc0Zpbml0ZSh2YWx1ZSkgfHwgTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgYGludGVnZXIgZXhwZWN0ZWQsIGZvdW5kICR7dmFsdWV9YCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPT0gJ2NhdGVnb3JpY2FsJyAmJiB0eXBlID09PSAnbnVtYmVyJyAmJiBwcmV2aW91c1N0b3BEb21haW5WYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDwgcHJldmlvdXNTdG9wRG9tYWluVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsICdzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyJyldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJldmlvdXNTdG9wRG9tYWluVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdjYXRlZ29yaWNhbCcgJiYgdmFsdWUgaW4gc3RvcERvbWFpblZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgJ3N0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZScpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3BEb21haW5WYWx1ZXNbdmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uRGVmYXVsdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh7XG4gICAgICAgICAgICBrZXk6IG9wdGlvbnMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IGZ1bmN0aW9uVmFsdWVTcGVjLFxuICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmltcG9ydCB7Y3JlYXRlRXhwcmVzc2lvbiwgY3JlYXRlUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB7ZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB7aXNTdGF0ZUNvbnN0YW50LCBpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQsIGlzRmVhdHVyZUNvbnN0YW50fSBmcm9tICcuLi9leHByZXNzaW9uL2lzX2NvbnN0YW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVFeHByZXNzaW9uKG9wdGlvbnM6IGFueSk6IEFycmF5PFZhbGlkYXRpb25FcnJvcj4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ3Byb3BlcnR5JyA/IGNyZWF0ZVByb3BlcnR5RXhwcmVzc2lvbiA6IGNyZWF0ZUV4cHJlc3Npb24pKGRlZXBVbmJ1bmRsZShvcHRpb25zLnZhbHVlKSwgb3B0aW9ucy52YWx1ZVNwZWMpO1xuICAgIGlmIChleHByZXNzaW9uLnJlc3VsdCA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi52YWx1ZS5tYXAoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25FcnJvcihgJHtvcHRpb25zLmtleX0ke2Vycm9yLmtleX1gLCBvcHRpb25zLnZhbHVlLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwcmVzc2lvbk9iaiA9IChleHByZXNzaW9uLnZhbHVlOiBhbnkpLmV4cHJlc3Npb24gfHwgKGV4cHJlc3Npb24udmFsdWU6IGFueSkuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uO1xuXG4gICAgaWYgKG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQgPT09ICdwcm9wZXJ0eScgJiYgKG9wdGlvbnMucHJvcGVydHlLZXkgPT09ICd0ZXh0LWZvbnQnKSAmJlxuICAgICAgICBleHByZXNzaW9uT2JqLnBvc3NpYmxlT3V0cHV0cygpLmluZGV4T2YodW5kZWZpbmVkKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCBgSW52YWxpZCBkYXRhIGV4cHJlc3Npb24gZm9yIFwiJHtvcHRpb25zLnByb3BlcnR5S2V5fVwiLiBPdXRwdXQgdmFsdWVzIG11c3QgYmUgY29udGFpbmVkIGFzIGxpdGVyYWxzIHdpdGhpbiB0aGUgZXhwcmVzc2lvbi5gKV07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQgPT09ICdwcm9wZXJ0eScgJiYgb3B0aW9ucy5wcm9wZXJ0eVR5cGUgPT09ICdsYXlvdXQnICYmXG4gICAgICAgICghaXNTdGF0ZUNvbnN0YW50KGV4cHJlc3Npb25PYmopKSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdcImZlYXR1cmUtc3RhdGVcIiBkYXRhIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggbGF5b3V0IHByb3BlcnRpZXMuJyldO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ID09PSAnZmlsdGVyJyAmJiAhaXNTdGF0ZUNvbnN0YW50KGV4cHJlc3Npb25PYmopKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ1wiZmVhdHVyZS1zdGF0ZVwiIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBmaWx0ZXJzLicpXTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCAmJiBvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0LmluZGV4T2YoJ2NsdXN0ZXInKSA9PT0gMCkge1xuICAgICAgICBpZiAoIWlzR2xvYmFsUHJvcGVydHlDb25zdGFudChleHByZXNzaW9uT2JqLCBbJ3pvb20nLCAnZmVhdHVyZS1zdGF0ZSddKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnXCJ6b29tXCIgYW5kIFwiZmVhdHVyZS1zdGF0ZVwiIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggY2x1c3RlciBwcm9wZXJ0aWVzLicpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ2NsdXN0ZXItaW5pdGlhbCcgJiYgIWlzRmVhdHVyZUNvbnN0YW50KGV4cHJlc3Npb25PYmopKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdGZWF0dXJlIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBpbml0aWFsIGV4cHJlc3Npb24gcGFydCBvZiBjbHVzdGVyIHByb3BlcnRpZXMuJyldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbihvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKHZhbHVlKTtcblxuICAgIGlmICh0eXBlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBib29sZWFuIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHtwYXJzZUNTU0NvbG9yfSBmcm9tICdjc3Njb2xvcnBhcnNlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sb3Iob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZSh2YWx1ZSk7XG5cbiAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBjb2xvciBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VDU1NDb2xvcih2YWx1ZSkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBjb2xvciBleHBlY3RlZCwgXCIke3ZhbHVlfVwiIGZvdW5kYCldO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCB7dW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUVudW0ob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCB2YWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlU3BlYy52YWx1ZXMpKSB7IC8vIDw9djdcbiAgICAgICAgaWYgKHZhbHVlU3BlYy52YWx1ZXMuaW5kZXhPZih1bmJ1bmRsZSh2YWx1ZSkpID09PSAtMSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgZXhwZWN0ZWQgb25lIG9mIFske3ZhbHVlU3BlYy52YWx1ZXMuam9pbignLCAnKX1dLCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gZm91bmRgKSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA+PXY4XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZVNwZWMudmFsdWVzKS5pbmRleE9mKHVuYnVuZGxlKHZhbHVlKSkgPT09IC0xKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBleHBlY3RlZCBvbmUgb2YgWyR7T2JqZWN0LmtleXModmFsdWVTcGVjLnZhbHVlcykuam9pbignLCAnKX1dLCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gZm91bmRgKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Y3JlYXRlRXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5cbmltcG9ydCB0eXBlIHtHbG9iYWxQcm9wZXJ0aWVzfSBmcm9tICcuLi9leHByZXNzaW9uJztcbmV4cG9ydCB0eXBlIEZlYXR1cmVGaWx0ZXIgPSAoZ2xvYmFsUHJvcGVydGllczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUpID0+IGJvb2xlYW47XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUZpbHRlcjtcbmV4cG9ydCB7aXNFeHByZXNzaW9uRmlsdGVyfTtcblxuZnVuY3Rpb24gaXNFeHByZXNzaW9uRmlsdGVyKGZpbHRlcjogYW55KSB7XG4gICAgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXIpIHx8IGZpbHRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzd2l0Y2ggKGZpbHRlclswXSkge1xuICAgIGNhc2UgJ2hhcyc6XG4gICAgICAgIHJldHVybiBmaWx0ZXIubGVuZ3RoID49IDIgJiYgZmlsdGVyWzFdICE9PSAnJGlkJyAmJiBmaWx0ZXJbMV0gIT09ICckdHlwZSc7XG5cbiAgICBjYXNlICdpbic6XG4gICAgY2FzZSAnIWluJzpcbiAgICBjYXNlICchaGFzJzpcbiAgICBjYXNlICdub25lJzpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSAnPT0nOlxuICAgIGNhc2UgJyE9JzpcbiAgICBjYXNlICc+JzpcbiAgICBjYXNlICc+PSc6XG4gICAgY2FzZSAnPCc6XG4gICAgY2FzZSAnPD0nOlxuICAgICAgICByZXR1cm4gZmlsdGVyLmxlbmd0aCAhPT0gMyB8fCAoQXJyYXkuaXNBcnJheShmaWx0ZXJbMV0pIHx8IEFycmF5LmlzQXJyYXkoZmlsdGVyWzJdKSk7XG5cbiAgICBjYXNlICdhbnknOlxuICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBmaWx0ZXIuc2xpY2UoMSkpIHtcbiAgICAgICAgICAgIGlmICghaXNFeHByZXNzaW9uRmlsdGVyKGYpICYmIHR5cGVvZiBmICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbmNvbnN0IGZpbHRlclNwZWMgPSB7XG4gICAgJ3R5cGUnOiAnYm9vbGVhbicsXG4gICAgJ2RlZmF1bHQnOiBmYWxzZSxcbiAgICAndHJhbnNpdGlvbic6IGZhbHNlLFxuICAgICdwcm9wZXJ0eS10eXBlJzogJ2RhdGEtZHJpdmVuJyxcbiAgICAnZXhwcmVzc2lvbic6IHtcbiAgICAgICAgJ2ludGVycG9sYXRlZCc6IGZhbHNlLFxuICAgICAgICAncGFyYW1ldGVycyc6IFsnem9vbScsICdmZWF0dXJlJ11cbiAgICB9XG59O1xuXG4vKipcbiAqIEdpdmVuIGEgZmlsdGVyIGV4cHJlc3NlZCBhcyBuZXN0ZWQgYXJyYXlzLCByZXR1cm4gYSBuZXcgZnVuY3Rpb25cbiAqIHRoYXQgZXZhbHVhdGVzIHdoZXRoZXIgYSBnaXZlbiBmZWF0dXJlICh3aXRoIGEgLnByb3BlcnRpZXMgb3IgLnRhZ3MgcHJvcGVydHkpXG4gKiBwYXNzZXMgaXRzIHRlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGZpbHRlciBtYXBib3ggZ2wgZmlsdGVyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGZpbHRlci1ldmFsdWF0aW5nIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcihmaWx0ZXI6IGFueSk6IEZlYXR1cmVGaWx0ZXIge1xuICAgIGlmIChmaWx0ZXIgPT09IG51bGwgfHwgZmlsdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFpc0V4cHJlc3Npb25GaWx0ZXIoZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBjb252ZXJ0RmlsdGVyKGZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGlsZWQgPSBjcmVhdGVFeHByZXNzaW9uKGZpbHRlciwgZmlsdGVyU3BlYyk7XG4gICAgaWYgKGNvbXBpbGVkLnJlc3VsdCA9PT0gJ2Vycm9yJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcGlsZWQudmFsdWUubWFwKGVyciA9PiBgJHtlcnIua2V5fTogJHtlcnIubWVzc2FnZX1gKS5qb2luKCcsICcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGdsb2JhbFByb3BlcnRpZXM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlKSA9PiBjb21waWxlZC52YWx1ZS5ldmFsdWF0ZShnbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlKTtcbiAgICB9XG59XG5cbi8vIENvbXBhcmlzb24gZnVuY3Rpb24gdG8gc29ydCBudW1iZXJzIGFuZCBzdHJpbmdzXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRGaWx0ZXIoZmlsdGVyOiA/QXJyYXk8YW55Pik6IG1peGVkIHtcbiAgICBpZiAoIWZpbHRlcikgcmV0dXJuIHRydWU7XG4gICAgY29uc3Qgb3AgPSBmaWx0ZXJbMF07XG4gICAgaWYgKGZpbHRlci5sZW5ndGggPD0gMSkgcmV0dXJuIChvcCAhPT0gJ2FueScpO1xuICAgIGNvbnN0IGNvbnZlcnRlZCA9XG4gICAgICAgIG9wID09PSAnPT0nID8gY29udmVydENvbXBhcmlzb25PcChmaWx0ZXJbMV0sIGZpbHRlclsyXSwgJz09JykgOlxuICAgICAgICBvcCA9PT0gJyE9JyA/IGNvbnZlcnROZWdhdGlvbihjb252ZXJ0Q29tcGFyaXNvbk9wKGZpbHRlclsxXSwgZmlsdGVyWzJdLCAnPT0nKSkgOlxuICAgICAgICBvcCA9PT0gJzwnIHx8XG4gICAgICAgIG9wID09PSAnPicgfHxcbiAgICAgICAgb3AgPT09ICc8PScgfHxcbiAgICAgICAgb3AgPT09ICc+PScgPyBjb252ZXJ0Q29tcGFyaXNvbk9wKGZpbHRlclsxXSwgZmlsdGVyWzJdLCBvcCkgOlxuICAgICAgICBvcCA9PT0gJ2FueScgPyBjb252ZXJ0RGlzanVuY3Rpb25PcChmaWx0ZXIuc2xpY2UoMSkpIDpcbiAgICAgICAgb3AgPT09ICdhbGwnID8gWydhbGwnXS5jb25jYXQoZmlsdGVyLnNsaWNlKDEpLm1hcChjb252ZXJ0RmlsdGVyKSkgOlxuICAgICAgICBvcCA9PT0gJ25vbmUnID8gWydhbGwnXS5jb25jYXQoZmlsdGVyLnNsaWNlKDEpLm1hcChjb252ZXJ0RmlsdGVyKS5tYXAoY29udmVydE5lZ2F0aW9uKSkgOlxuICAgICAgICBvcCA9PT0gJ2luJyA/IGNvbnZlcnRJbk9wKGZpbHRlclsxXSwgZmlsdGVyLnNsaWNlKDIpKSA6XG4gICAgICAgIG9wID09PSAnIWluJyA/IGNvbnZlcnROZWdhdGlvbihjb252ZXJ0SW5PcChmaWx0ZXJbMV0sIGZpbHRlci5zbGljZSgyKSkpIDpcbiAgICAgICAgb3AgPT09ICdoYXMnID8gY29udmVydEhhc09wKGZpbHRlclsxXSkgOlxuICAgICAgICBvcCA9PT0gJyFoYXMnID8gY29udmVydE5lZ2F0aW9uKGNvbnZlcnRIYXNPcChmaWx0ZXJbMV0pKSA6XG4gICAgICAgIHRydWU7XG4gICAgcmV0dXJuIGNvbnZlcnRlZDtcbn1cblxuZnVuY3Rpb24gY29udmVydENvbXBhcmlzb25PcChwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcDogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgIGNhc2UgJyR0eXBlJzpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLXR5cGUtJHtvcH1gLCB2YWx1ZV07XG4gICAgY2FzZSAnJGlkJzpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLWlkLSR7b3B9YCwgdmFsdWVdO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci0ke29wfWAsIHByb3BlcnR5LCB2YWx1ZV07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlzanVuY3Rpb25PcChmaWx0ZXJzOiBBcnJheTxBcnJheTxhbnk+Pikge1xuICAgIHJldHVybiBbJ2FueSddLmNvbmNhdChmaWx0ZXJzLm1hcChjb252ZXJ0RmlsdGVyKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRJbk9wKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlczogQXJyYXk8YW55Pikge1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICBjYXNlICckdHlwZSc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci10eXBlLWluYCwgWydsaXRlcmFsJywgdmFsdWVzXV07XG4gICAgY2FzZSAnJGlkJzpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLWlkLWluYCwgWydsaXRlcmFsJywgdmFsdWVzXV07XG4gICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAyMDAgJiYgIXZhbHVlcy5zb21lKHYgPT4gdHlwZW9mIHYgIT09IHR5cGVvZiB2YWx1ZXNbMF0pKSB7XG4gICAgICAgICAgICByZXR1cm4gWydmaWx0ZXItaW4tbGFyZ2UnLCBwcm9wZXJ0eSwgWydsaXRlcmFsJywgdmFsdWVzLnNvcnQoY29tcGFyZSldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2ZpbHRlci1pbi1zbWFsbCcsIHByb3BlcnR5LCBbJ2xpdGVyYWwnLCB2YWx1ZXNdXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY29udmVydEhhc09wKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgY2FzZSAnJHR5cGUnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlICckaWQnOlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItaGFzLWlkYF07XG4gICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLWhhc2AsIHByb3BlcnR5XTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnROZWdhdGlvbihmaWx0ZXI6IG1peGVkKSB7XG4gICAgcmV0dXJuIFsnIScsIGZpbHRlcl07XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgdmFsaWRhdGVFeHByZXNzaW9uIGZyb20gJy4vdmFsaWRhdGVfZXhwcmVzc2lvbic7XG5pbXBvcnQgdmFsaWRhdGVFbnVtIGZyb20gJy4vdmFsaWRhdGVfZW51bSc7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB7dW5idW5kbGUsIGRlZXBVbmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4uL3V0aWwvZXh0ZW5kJztcbmltcG9ydCB7aXNFeHByZXNzaW9uRmlsdGVyfSBmcm9tICcuLi9mZWF0dXJlX2ZpbHRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyKG9wdGlvbnMpIHtcbiAgICBpZiAoaXNFeHByZXNzaW9uRmlsdGVyKGRlZXBVbmJ1bmRsZShvcHRpb25zLnZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXhwcmVzc2lvbihleHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25Db250ZXh0OiAnZmlsdGVyJyxcbiAgICAgICAgICAgIHZhbHVlU3BlYzoge3ZhbHVlOiAnYm9vbGVhbid9XG4gICAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVOb25FeHByZXNzaW9uRmlsdGVyKG9wdGlvbnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOb25FeHByZXNzaW9uRmlsdGVyKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgIT09ICdhcnJheScpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBhcnJheSBleHBlY3RlZCwgJHtnZXRUeXBlKHZhbHVlKX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgbGV0IHR5cGU7XG5cbiAgICBsZXQgZXJyb3JzID0gW107XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoIDwgMSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ2ZpbHRlciBhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50JyldO1xuICAgIH1cblxuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVFbnVtKHtcbiAgICAgICAga2V5OiBgJHtrZXl9WzBdYCxcbiAgICAgICAgdmFsdWU6IHZhbHVlWzBdLFxuICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5maWx0ZXJfb3BlcmF0b3IsXG4gICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgfSkpO1xuXG4gICAgc3dpdGNoICh1bmJ1bmRsZSh2YWx1ZVswXSkpIHtcbiAgICBjYXNlICc8JzpcbiAgICBjYXNlICc8PSc6XG4gICAgY2FzZSAnPic6XG4gICAgY2FzZSAnPj0nOlxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID49IDIgJiYgdW5idW5kbGUodmFsdWVbMV0pID09PSAnJHR5cGUnKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBcIiR0eXBlXCIgY2Fubm90IGJlIHVzZSB3aXRoIG9wZXJhdG9yIFwiJHt2YWx1ZVswXX1cImApKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSAnPT0nOlxuICAgIGNhc2UgJyE9JzpcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgZmlsdGVyIGFycmF5IGZvciBvcGVyYXRvciBcIiR7dmFsdWVbMF19XCIgbXVzdCBoYXZlIDMgZWxlbWVudHNgKSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgJ2luJzpcbiAgICBjYXNlICchaW4nOlxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIHR5cGUgPSBnZXRUeXBlKHZhbHVlWzFdKTtcbiAgICAgICAgICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3IoYCR7a2V5fVsxXWAsIHZhbHVlWzFdLCBgc3RyaW5nIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHR5cGUgPSBnZXRUeXBlKHZhbHVlW2ldKTtcbiAgICAgICAgICAgIGlmICh1bmJ1bmRsZSh2YWx1ZVsxXSkgPT09ICckdHlwZScpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlRW51bSh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fVske2l9XWAsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVtpXSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuZ2VvbWV0cnlfdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICdudW1iZXInICYmIHR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3IoYCR7a2V5fVske2l9XWAsIHZhbHVlW2ldLCBgc3RyaW5nLCBudW1iZXIsIG9yIGJvb2xlYW4gZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdhbnknOlxuICAgIGNhc2UgJ2FsbCc6XG4gICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVOb25FeHByZXNzaW9uRmlsdGVyKHtcbiAgICAgICAgICAgICAgICBrZXk6IGAke2tleX1bJHtpfV1gLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVtpXSxcbiAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdoYXMnOlxuICAgIGNhc2UgJyFoYXMnOlxuICAgICAgICB0eXBlID0gZ2V0VHlwZSh2YWx1ZVsxXSk7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGZpbHRlciBhcnJheSBmb3IgXCIke3ZhbHVlWzBdfVwiIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzYCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGAke2tleX1bMV1gLCB2YWx1ZVsxXSwgYHN0cmluZyBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB7aXNGdW5jdGlvbn0gZnJvbSAnLi4vZnVuY3Rpb24nO1xuaW1wb3J0IHt1bmJ1bmRsZSwgZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB7c3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL3V0aWwvcHJvcGVydGllcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkob3B0aW9ucywgcHJvcGVydHlUeXBlKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBwcm9wZXJ0eUtleSA9IG9wdGlvbnMub2JqZWN0S2V5O1xuICAgIGNvbnN0IGxheWVyU3BlYyA9IHN0eWxlU3BlY1tgJHtwcm9wZXJ0eVR5cGV9XyR7b3B0aW9ucy5sYXllclR5cGV9YF07XG5cbiAgICBpZiAoIWxheWVyU3BlYykgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgdHJhbnNpdGlvbk1hdGNoID0gcHJvcGVydHlLZXkubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7XG4gICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ3BhaW50JyAmJiB0cmFuc2l0aW9uTWF0Y2ggJiYgbGF5ZXJTcGVjW3RyYW5zaXRpb25NYXRjaFsxXV0gJiYgbGF5ZXJTcGVjW3RyYW5zaXRpb25NYXRjaFsxXV0udHJhbnNpdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy50cmFuc2l0aW9uLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWMgfHwgbGF5ZXJTcGVjW3Byb3BlcnR5S2V5XTtcbiAgICBpZiAoIXZhbHVlU3BlYykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYHVua25vd24gcHJvcGVydHkgXCIke3Byb3BlcnR5S2V5fVwiYCldO1xuICAgIH1cblxuICAgIGxldCB0b2tlbk1hdGNoO1xuICAgIGlmIChnZXRUeXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiYgc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWVTcGVjKSAmJiAhdmFsdWVTcGVjLnRva2VucyAmJiAodG9rZW5NYXRjaCA9IC9eeyhbXn1dKyl9JC8uZXhlYyh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGtleSwgdmFsdWUsXG4gICAgICAgICAgICBgXCIke3Byb3BlcnR5S2V5fVwiIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJwb2xhdGlvbiBzeW50YXhcXG5gICtcbiAgICAgICAgICAgICAgICBgVXNlIGFuIGlkZW50aXR5IHByb3BlcnR5IGZ1bmN0aW9uIGluc3RlYWQ6IFxcYHsgXCJ0eXBlXCI6IFwiaWRlbnRpdHlcIiwgXCJwcm9wZXJ0eVwiOiAke0pTT04uc3RyaW5naWZ5KHRva2VuTWF0Y2hbMV0pfSB9XFxgLmApXTtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcblxuICAgIGlmIChvcHRpb25zLmxheWVyVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgaWYgKHByb3BlcnR5S2V5ID09PSAndGV4dC1maWVsZCcgJiYgc3R5bGUgJiYgIXN0eWxlLmdseXBocykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAndXNlIG9mIFwidGV4dC1maWVsZFwiIHJlcXVpcmVzIGEgc3R5bGUgXCJnbHlwaHNcIiBwcm9wZXJ0eScpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydHlLZXkgPT09ICd0ZXh0LWZvbnQnICYmIGlzRnVuY3Rpb24oZGVlcFVuYnVuZGxlKHZhbHVlKSkgJiYgdW5idW5kbGUodmFsdWUudHlwZSkgPT09ICdpZGVudGl0eScpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ1widGV4dC1mb250XCIgZG9lcyBub3Qgc3VwcG9ydCBpZGVudGl0eSBmdW5jdGlvbnMnKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZVNwZWMsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgIGV4cHJlc3Npb25Db250ZXh0OiAncHJvcGVydHknLFxuICAgICAgICBwcm9wZXJ0eVR5cGUsXG4gICAgICAgIHByb3BlcnR5S2V5XG4gICAgfSkpO1xufVxuIiwiXG5pbXBvcnQgdmFsaWRhdGVQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlX3Byb3BlcnR5JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVQYWludFByb3BlcnR5KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdmFsaWRhdGVQcm9wZXJ0eShvcHRpb25zLCAncGFpbnQnKTtcbn1cbiIsIlxuaW1wb3J0IHZhbGlkYXRlUHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZV9wcm9wZXJ0eSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5b3V0UHJvcGVydHkob3B0aW9ucykge1xuICAgIHJldHVybiB2YWxpZGF0ZVByb3BlcnR5KG9wdGlvbnMsICdsYXlvdXQnKTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCB7dW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHZhbGlkYXRlT2JqZWN0IGZyb20gJy4vdmFsaWRhdGVfb2JqZWN0JztcbmltcG9ydCB2YWxpZGF0ZUZpbHRlciBmcm9tICcuL3ZhbGlkYXRlX2ZpbHRlcic7XG5pbXBvcnQgdmFsaWRhdGVQYWludFByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGVfcGFpbnRfcHJvcGVydHknO1xuaW1wb3J0IHZhbGlkYXRlTGF5b3V0UHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZV9sYXlvdXRfcHJvcGVydHknO1xuaW1wb3J0IHZhbGlkYXRlU3BlYyBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyKG9wdGlvbnMpIHtcbiAgICBsZXQgZXJyb3JzID0gW107XG5cbiAgICBjb25zdCBsYXllciA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuXG4gICAgaWYgKCFsYXllci50eXBlICYmICFsYXllci5yZWYpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLCAnZWl0aGVyIFwidHlwZVwiIG9yIFwicmVmXCIgaXMgcmVxdWlyZWQnKSk7XG4gICAgfVxuICAgIGxldCB0eXBlID0gdW5idW5kbGUobGF5ZXIudHlwZSk7XG4gICAgY29uc3QgcmVmID0gdW5idW5kbGUobGF5ZXIucmVmKTtcblxuICAgIGlmIChsYXllci5pZCkge1xuICAgICAgICBjb25zdCBsYXllcklkID0gdW5idW5kbGUobGF5ZXIuaWQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuYXJyYXlJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBvdGhlckxheWVyID0gc3R5bGUubGF5ZXJzW2ldO1xuICAgICAgICAgICAgaWYgKHVuYnVuZGxlKG90aGVyTGF5ZXIuaWQpID09PSBsYXllcklkKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLmlkLCBgZHVwbGljYXRlIGxheWVyIGlkIFwiJHtsYXllci5pZH1cIiwgcHJldmlvdXNseSB1c2VkIGF0IGxpbmUgJHtvdGhlckxheWVyLmlkLl9fbGluZV9ffWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgncmVmJyBpbiBsYXllcikge1xuICAgICAgICBbJ3R5cGUnLCAnc291cmNlJywgJ3NvdXJjZS1sYXllcicsICdmaWx0ZXInLCAnbGF5b3V0J10uZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgaWYgKHAgaW4gbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXJbcF0sIGBcIiR7cH1cIiBpcyBwcm9oaWJpdGVkIGZvciByZWYgbGF5ZXJzYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgcGFyZW50O1xuXG4gICAgICAgIHN0eWxlLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgaWYgKHVuYnVuZGxlKGxheWVyLmlkKSA9PT0gcmVmKSBwYXJlbnQgPSBsYXllcjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5yZWYsIGByZWYgbGF5ZXIgXCIke3JlZn1cIiBub3QgZm91bmRgKSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyZW50LnJlZikge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnJlZiwgJ3JlZiBjYW5ub3QgcmVmZXJlbmNlIGFub3RoZXIgcmVmIGxheWVyJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHlwZSA9IHVuYnVuZGxlKHBhcmVudC50eXBlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ2JhY2tncm91bmQnKSB7XG4gICAgICAgIGlmICghbGF5ZXIuc291cmNlKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIsICdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwic291cmNlXCInKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzdHlsZS5zb3VyY2VzICYmIHN0eWxlLnNvdXJjZXNbbGF5ZXIuc291cmNlXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBzb3VyY2UgJiYgdW5idW5kbGUoc291cmNlLnR5cGUpO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIuc291cmNlLCBgc291cmNlIFwiJHtsYXllci5zb3VyY2V9XCIgbm90IGZvdW5kYCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiB0eXBlID09PSAncmFzdGVyJykge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5zb3VyY2UsIGBsYXllciBcIiR7bGF5ZXIuaWR9XCIgcmVxdWlyZXMgYSByYXN0ZXIgc291cmNlYCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VUeXBlID09PSAncmFzdGVyJyAmJiB0eXBlICE9PSAncmFzdGVyJykge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5zb3VyY2UsIGBsYXllciBcIiR7bGF5ZXIuaWR9XCIgcmVxdWlyZXMgYSB2ZWN0b3Igc291cmNlYCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiAhbGF5ZXJbJ3NvdXJjZS1sYXllciddKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLCBgbGF5ZXIgXCIke2xheWVyLmlkfVwiIG11c3Qgc3BlY2lmeSBhIFwic291cmNlLWxheWVyXCJgKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09ICdyYXN0ZXItZGVtJyAmJiB0eXBlICE9PSAnaGlsbHNoYWRlJykge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5zb3VyY2UsICdyYXN0ZXItZGVtIHNvdXJjZSBjYW4gb25seSBiZSB1c2VkIHdpdGggbGF5ZXIgdHlwZSBcXCdoaWxsc2hhZGVcXCcuJykpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbGluZScgJiYgbGF5ZXIucGFpbnQgJiYgbGF5ZXIucGFpbnRbJ2xpbmUtZ3JhZGllbnQnXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAoc291cmNlVHlwZSAhPT0gJ2dlb2pzb24nIHx8ICFzb3VyY2UubGluZU1ldHJpY3MpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLCBgbGF5ZXIgXCIke2xheWVyLmlkfVwiIHNwZWNpZmllcyBhIGxpbmUtZ3JhZGllbnQsIHdoaWNoIHJlcXVpcmVzIGEgR2VvSlNPTiBzb3VyY2Ugd2l0aCBcXGBsaW5lTWV0cmljc1xcYCBlbmFibGVkLmApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiBsYXllcixcbiAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMubGF5ZXIsXG4gICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgJyonKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGVuZm9yY2UgdGhlIHNwZWMncyBgXCJyZXF1aXJlc1wiOiB0cnVlYCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHJlZnM7XG4gICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHJlcXVpcmVtZW50IGlzIHZhbGlkYXRlZCBhYm92ZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy81NzcyLlxuICAgICAgICAgICAgdHlwZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVTcGVjKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9LnR5cGVgLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbGF5ZXIudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMubGF5ZXIudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDogbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdEtleTogJ3R5cGUnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsdGVyOiB2YWxpZGF0ZUZpbHRlcixcbiAgICAgICAgICAgIGxheW91dChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICcqJyhvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlTGF5b3V0UHJvcGVydHkoZXh0ZW5kKHtsYXllclR5cGU6IHR5cGV9LCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYWludChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICcqJyhvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlUGFpbnRQcm9wZXJ0eShleHRlbmQoe2xheWVyVHlwZTogdHlwZX0sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCB7dW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHZhbGlkYXRlT2JqZWN0IGZyb20gJy4vdmFsaWRhdGVfb2JqZWN0JztcbmltcG9ydCB2YWxpZGF0ZUVudW0gZnJvbSAnLi92YWxpZGF0ZV9lbnVtJztcbmltcG9ydCB2YWxpZGF0ZUV4cHJlc3Npb24gZnJvbSAnLi92YWxpZGF0ZV9leHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVTb3VyY2Uob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG5cbiAgICBpZiAoIXZhbHVlLnR5cGUpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdcInR5cGVcIiBpcyByZXF1aXJlZCcpXTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gdW5idW5kbGUodmFsdWUudHlwZSk7XG4gICAgbGV0IGVycm9ycztcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3ZlY3Rvcic6XG4gICAgY2FzZSAncmFzdGVyJzpcbiAgICBjYXNlICdyYXN0ZXItZGVtJzpcbiAgICAgICAgZXJyb3JzID0gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlY1tgc291cmNlXyR7dHlwZS5yZXBsYWNlKCctJywgJ18nKX1gXSxcbiAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuXG4gICAgY2FzZSAnZ2VvanNvbic6XG4gICAgICAgIGVycm9ycyA9IHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuc291cmNlX2dlb2pzb24sXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHZhbHVlLmNsdXN0ZXIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiB2YWx1ZS5jbHVzdGVyUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtvcGVyYXRvciwgbWFwRXhwcl0gPSB2YWx1ZS5jbHVzdGVyUHJvcGVydGllc1twcm9wXTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWR1Y2VFeHByID0gdHlwZW9mIG9wZXJhdG9yID09PSAnc3RyaW5nJyA/IFtvcGVyYXRvciwgWydhY2N1bXVsYXRlZCddLCBbJ2dldCcsIHByb3BdXSA6IG9wZXJhdG9yO1xuXG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9LiR7cHJvcH0ubWFwYCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hcEV4cHIsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Db250ZXh0OiAnY2x1c3Rlci1tYXAnXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fS4ke3Byb3B9LnJlZHVjZWAsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZWR1Y2VFeHByLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uQ29udGV4dDogJ2NsdXN0ZXItcmVkdWNlJ1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5zb3VyY2VfdmlkZW8sXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcblxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuc291cmNlX2ltYWdlLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSk7XG5cbiAgICBjYXNlICdjYW52YXMnOlxuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBudWxsLCBgUGxlYXNlIHVzZSBydW50aW1lIEFQSXMgdG8gYWRkIGNhbnZhcyBzb3VyY2VzLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlbSBpbiBzdHlsZXNoZWV0cy5gLCAnc291cmNlLmNhbnZhcycpXTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUVudW0oe1xuICAgICAgICAgICAga2V5OiBgJHtrZXl9LnR5cGVgLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHt2YWx1ZXM6IFsndmVjdG9yJywgJ3Jhc3RlcicsICdyYXN0ZXItZGVtJywgJ2dlb2pzb24nLCAndmlkZW8nLCAnaW1hZ2UnXX0sXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVMaWdodChvcHRpb25zKSB7XG4gICAgY29uc3QgbGlnaHQgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGNvbnN0IGxpZ2h0U3BlYyA9IHN0eWxlU3BlYy5saWdodDtcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG5cbiAgICBsZXQgZXJyb3JzID0gW107XG5cbiAgICBjb25zdCByb290VHlwZSA9IGdldFR5cGUobGlnaHQpO1xuICAgIGlmIChsaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfSBlbHNlIGlmIChyb290VHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChbbmV3IFZhbGlkYXRpb25FcnJvcignbGlnaHQnLCBsaWdodCwgYG9iamVjdCBleHBlY3RlZCwgJHtyb290VHlwZX0gZm91bmRgKV0pO1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGxpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb25NYXRjaCA9IGtleS5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTtcblxuICAgICAgICBpZiAodHJhbnNpdGlvbk1hdGNoICYmIGxpZ2h0U3BlY1t0cmFuc2l0aW9uTWF0Y2hbMV1dICYmIGxpZ2h0U3BlY1t0cmFuc2l0aW9uTWF0Y2hbMV1dLnRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGUoe1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbGlnaHRba2V5XSxcbiAgICAgICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy50cmFuc2l0aW9uLFxuICAgICAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpZ2h0U3BlY1trZXldKSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlKHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxpZ2h0W2tleV0sXG4gICAgICAgICAgICAgICAgdmFsdWVTcGVjOiBsaWdodFNwZWNba2V5XSxcbiAgICAgICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQoW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsaWdodFtrZXldLCBgdW5rbm93biBwcm9wZXJ0eSBcIiR7a2V5fVwiYCldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZSh2YWx1ZSk7XG5cbiAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBzdHJpbmcgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB2YWxpZGF0ZUV4cHJlc3Npb24gZnJvbSAnLi92YWxpZGF0ZV9leHByZXNzaW9uJztcbmltcG9ydCB2YWxpZGF0ZVN0cmluZyBmcm9tICcuL3ZhbGlkYXRlX3N0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0dGVkKG9wdGlvbnM6IGFueSkge1xuICAgIGlmICh2YWxpZGF0ZVN0cmluZyhvcHRpb25zKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUV4cHJlc3Npb24ob3B0aW9ucyk7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVJbWFnZShvcHRpb25zOiBhbnkpIHtcbiAgICBpZiAodmFsaWRhdGVTdHJpbmcob3B0aW9ucykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVFeHByZXNzaW9uKG9wdGlvbnMpO1xufVxuIiwiXG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4uL3V0aWwvZXh0ZW5kJztcbmltcG9ydCB7dW5idW5kbGUsIGRlZXBVbmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQge2lzRXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQge2lzRnVuY3Rpb259IGZyb20gJy4uL2Z1bmN0aW9uJztcblxuaW1wb3J0IHZhbGlkYXRlRnVuY3Rpb24gZnJvbSAnLi92YWxpZGF0ZV9mdW5jdGlvbic7XG5pbXBvcnQgdmFsaWRhdGVFeHByZXNzaW9uIGZyb20gJy4vdmFsaWRhdGVfZXhwcmVzc2lvbic7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlQXJyYXkgZnJvbSAnLi92YWxpZGF0ZV9hcnJheSc7XG5pbXBvcnQgdmFsaWRhdGVCb29sZWFuIGZyb20gJy4vdmFsaWRhdGVfYm9vbGVhbic7XG5pbXBvcnQgdmFsaWRhdGVOdW1iZXIgZnJvbSAnLi92YWxpZGF0ZV9udW1iZXInO1xuaW1wb3J0IHZhbGlkYXRlQ29sb3IgZnJvbSAnLi92YWxpZGF0ZV9jb2xvcic7XG5pbXBvcnQgdmFsaWRhdGVDb25zdGFudHMgZnJvbSAnLi92YWxpZGF0ZV9jb25zdGFudHMnO1xuaW1wb3J0IHZhbGlkYXRlRW51bSBmcm9tICcuL3ZhbGlkYXRlX2VudW0nO1xuaW1wb3J0IHZhbGlkYXRlRmlsdGVyIGZyb20gJy4vdmFsaWRhdGVfZmlsdGVyJztcbmltcG9ydCB2YWxpZGF0ZUxheWVyIGZyb20gJy4vdmFsaWRhdGVfbGF5ZXInO1xuaW1wb3J0IHZhbGlkYXRlU291cmNlIGZyb20gJy4vdmFsaWRhdGVfc291cmNlJztcbmltcG9ydCB2YWxpZGF0ZUxpZ2h0IGZyb20gJy4vdmFsaWRhdGVfbGlnaHQnO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcbmltcG9ydCB2YWxpZGF0ZUZvcm1hdHRlZCBmcm9tICcuL3ZhbGlkYXRlX2Zvcm1hdHRlZCc7XG5pbXBvcnQgdmFsaWRhdGVJbWFnZSBmcm9tICcuL3ZhbGlkYXRlX2ltYWdlJztcblxuY29uc3QgVkFMSURBVE9SUyA9IHtcbiAgICAnKicoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgICdhcnJheSc6IHZhbGlkYXRlQXJyYXksXG4gICAgJ2Jvb2xlYW4nOiB2YWxpZGF0ZUJvb2xlYW4sXG4gICAgJ251bWJlcic6IHZhbGlkYXRlTnVtYmVyLFxuICAgICdjb2xvcic6IHZhbGlkYXRlQ29sb3IsXG4gICAgJ2NvbnN0YW50cyc6IHZhbGlkYXRlQ29uc3RhbnRzLFxuICAgICdlbnVtJzogdmFsaWRhdGVFbnVtLFxuICAgICdmaWx0ZXInOiB2YWxpZGF0ZUZpbHRlcixcbiAgICAnZnVuY3Rpb24nOiB2YWxpZGF0ZUZ1bmN0aW9uLFxuICAgICdsYXllcic6IHZhbGlkYXRlTGF5ZXIsXG4gICAgJ29iamVjdCc6IHZhbGlkYXRlT2JqZWN0LFxuICAgICdzb3VyY2UnOiB2YWxpZGF0ZVNvdXJjZSxcbiAgICAnbGlnaHQnOiB2YWxpZGF0ZUxpZ2h0LFxuICAgICdzdHJpbmcnOiB2YWxpZGF0ZVN0cmluZyxcbiAgICAnZm9ybWF0dGVkJzogdmFsaWRhdGVGb3JtYXR0ZWQsXG4gICAgJ2ltYWdlJzogdmFsaWRhdGVJbWFnZVxufTtcblxuLy8gTWFpbiByZWN1cnNpdmUgdmFsaWRhdGlvbiBmdW5jdGlvbi4gVHJhY2tzOlxuLy9cbi8vIC0ga2V5OiBzdHJpbmcgcmVwcmVzZW50aW5nIGxvY2F0aW9uIG9mIHZhbGlkYXRpb24gaW4gc3R5bGUgdHJlZS4gVXNlZCBvbmx5XG4vLyAgIGZvciBtb3JlIGluZm9ybWF0aXZlIGVycm9yIHJlcG9ydGluZy5cbi8vIC0gdmFsdWU6IGN1cnJlbnQgdmFsdWUgZnJvbSBzdHlsZSBiZWluZyBldmFsdWF0ZWQuIE1heSBiZSBhbnl0aGluZyBmcm9tIGFcbi8vICAgaGlnaCBsZXZlbCBvYmplY3QgdGhhdCBuZWVkcyB0byBiZSBkZXNjZW5kZWQgaW50byBkZWVwZXIgb3IgYSBzaW1wbGVcbi8vICAgc2NhbGFyIHZhbHVlLlxuLy8gLSB2YWx1ZVNwZWM6IGN1cnJlbnQgc3BlYyBiZWluZyBldmFsdWF0ZWQuIFRyYWNrcyB2YWx1ZS5cbi8vIC0gc3R5bGVTcGVjOiBjdXJyZW50IGZ1bGwgc3BlYyBiZWluZyBldmFsdWF0ZWQuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgdmFsdWVTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWM7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG5cbiAgICBpZiAodmFsdWVTcGVjLmV4cHJlc3Npb24gJiYgaXNGdW5jdGlvbih1bmJ1bmRsZSh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUZ1bmN0aW9uKG9wdGlvbnMpO1xuXG4gICAgfSBlbHNlIGlmICh2YWx1ZVNwZWMuZXhwcmVzc2lvbiAmJiBpc0V4cHJlc3Npb24oZGVlcFVuYnVuZGxlKHZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXhwcmVzc2lvbihvcHRpb25zKTtcblxuICAgIH0gZWxzZSBpZiAodmFsdWVTcGVjLnR5cGUgJiYgVkFMSURBVE9SU1t2YWx1ZVNwZWMudHlwZV0pIHtcbiAgICAgICAgcmV0dXJuIFZBTElEQVRPUlNbdmFsdWVTcGVjLnR5cGVdKG9wdGlvbnMpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdChleHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIHZhbHVlU3BlYzogdmFsdWVTcGVjLnR5cGUgPyBzdHlsZVNwZWNbdmFsdWVTcGVjLnR5cGVdIDogdmFsdWVTcGVjXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCB2YWxpZGF0ZVN0cmluZyBmcm9tICcuL3ZhbGlkYXRlX3N0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZVN0cmluZyhvcHRpb25zKTtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcmV0dXJuIGVycm9ycztcblxuICAgIGlmICh2YWx1ZS5pbmRleE9mKCd7Zm9udHN0YWNrfScpID09PSAtMSkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdcImdseXBoc1wiIHVybCBtdXN0IGluY2x1ZGUgYSBcIntmb250c3RhY2t9XCIgdG9rZW4nKSk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLmluZGV4T2YoJ3tyYW5nZX0nKSA9PT0gLTEpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnXCJnbHlwaHNcIiB1cmwgbXVzdCBpbmNsdWRlIGEgXCJ7cmFuZ2V9XCIgdG9rZW4nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IHZhbGlkYXRlQ29uc3RhbnRzIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfY29uc3RhbnRzJztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlJztcbmltcG9ydCBsYXRlc3RTdHlsZVNwZWMgZnJvbSAnLi9yZWZlcmVuY2UvbGF0ZXN0JztcbmltcG9ydCB2YWxpZGF0ZUdseXBoc1VSTCBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2dseXBoc191cmwnO1xuXG5pbXBvcnQgdmFsaWRhdGVTb3VyY2UgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9zb3VyY2UnO1xuaW1wb3J0IHZhbGlkYXRlTGlnaHQgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9saWdodCc7XG5pbXBvcnQgdmFsaWRhdGVMYXllciBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheWVyJztcbmltcG9ydCB2YWxpZGF0ZUZpbHRlciBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2ZpbHRlcic7XG5pbXBvcnQgdmFsaWRhdGVQYWludFByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfcGFpbnRfcHJvcGVydHknO1xuaW1wb3J0IHZhbGlkYXRlTGF5b3V0UHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9sYXlvdXRfcHJvcGVydHknO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgTWFwYm94IEdMIHN0eWxlIGFnYWluc3QgdGhlIHN0eWxlIHNwZWNpZmljYXRpb24uIFRoaXMgZW50cnlwb2ludCxcbiAqIGBtYXBib3gtZ2wtc3R5bGUtc3BlYy9saWIvdmFsaWRhdGVfc3R5bGUubWluYCwgaXMgZGVzaWduZWQgdG8gcHJvZHVjZSBhc1xuICogc21hbGwgYSBicm93c2VyaWZ5IGJ1bmRsZSBhcyBwb3NzaWJsZSBieSBvbWl0dGluZyB1bm5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5XG4gKiBhbmQgbGVnYWN5IHN0eWxlIHNwZWNpZmljYXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc3R5bGUgVGhlIHN0eWxlIHRvIGJlIHZhbGlkYXRlZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3R5bGVTcGVjXSBUaGUgc3R5bGUgc3BlY2lmaWNhdGlvbiB0byB2YWxpZGF0ZSBhZ2FpbnN0LlxuICogICAgIElmIG9taXR0ZWQsIHRoZSBsYXRlc3Qgc3R5bGUgc3BlYyBpcyB1c2VkLlxuICogQHJldHVybnMge0FycmF5PFZhbGlkYXRpb25FcnJvcj59XG4gKiBAZXhhbXBsZVxuICogICB2YXIgdmFsaWRhdGUgPSByZXF1aXJlKCdtYXBib3gtZ2wtc3R5bGUtc3BlYy9saWIvdmFsaWRhdGVfc3R5bGUubWluJyk7XG4gKiAgIHZhciBlcnJvcnMgPSB2YWxpZGF0ZShzdHlsZSk7XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3R5bGVNaW4oc3R5bGUsIHN0eWxlU3BlYyA9IGxhdGVzdFN0eWxlU3BlYykge1xuXG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgIGtleTogJycsXG4gICAgICAgIHZhbHVlOiBzdHlsZSxcbiAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuJHJvb3QsXG4gICAgICAgIHN0eWxlU3BlYyxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7XG4gICAgICAgICAgICBnbHlwaHM6IHZhbGlkYXRlR2x5cGhzVVJMLFxuICAgICAgICAgICAgJyonKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pKTtcblxuICAgIGlmIChzdHlsZS5jb25zdGFudHMpIHtcbiAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUNvbnN0YW50cyh7XG4gICAgICAgICAgICBrZXk6ICdjb25zdGFudHMnLFxuICAgICAgICAgICAgdmFsdWU6IHN0eWxlLmNvbnN0YW50cyxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc29ydEVycm9ycyhlcnJvcnMpO1xufVxuXG52YWxpZGF0ZVN0eWxlTWluLnNvdXJjZSA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZVNvdXJjZSk7XG52YWxpZGF0ZVN0eWxlTWluLmxpZ2h0ID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlTGlnaHQpO1xudmFsaWRhdGVTdHlsZU1pbi5sYXllciA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZUxheWVyKTtcbnZhbGlkYXRlU3R5bGVNaW4uZmlsdGVyID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlRmlsdGVyKTtcbnZhbGlkYXRlU3R5bGVNaW4ucGFpbnRQcm9wZXJ0eSA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZVBhaW50UHJvcGVydHkpO1xudmFsaWRhdGVTdHlsZU1pbi5sYXlvdXRQcm9wZXJ0eSA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZUxheW91dFByb3BlcnR5KTtcblxuZnVuY3Rpb24gc29ydEVycm9ycyhlcnJvcnMpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KGVycm9ycykuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICByZXR1cm4gYS5saW5lIC0gYi5saW5lO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB3cmFwQ2xlYW5FcnJvcnMoaW5uZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gc29ydEVycm9ycyhpbm5lci5hcHBseSh0aGlzLCBhcmdzKSk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGVTdHlsZU1pbjtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdmFsaWRhdGVTdHlsZU1pbiBmcm9tICcuLi9zdHlsZS1zcGVjL3ZhbGlkYXRlX3N0eWxlLm1pbic7XG5pbXBvcnQge0Vycm9yRXZlbnR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG50eXBlIFZhbGlkYXRpb25FcnJvciA9IHtcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgbGluZTogbnVtYmVyLFxuICAgIGlkZW50aWZpZXI/OiBzdHJpbmdcbn07XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRvciA9IChPYmplY3QpID0+ICRSZWFkT25seUFycmF5PFZhbGlkYXRpb25FcnJvcj47XG5cbnR5cGUgVmFsaWRhdGVTdHlsZSA9IHtcbiAgICAoT2JqZWN0LCA/T2JqZWN0KTogJFJlYWRPbmx5QXJyYXk8VmFsaWRhdGlvbkVycm9yPixcbiAgICBzb3VyY2U6IFZhbGlkYXRvcixcbiAgICBsYXllcjogVmFsaWRhdG9yLFxuICAgIGxpZ2h0OiBWYWxpZGF0b3IsXG4gICAgZmlsdGVyOiBWYWxpZGF0b3IsXG4gICAgcGFpbnRQcm9wZXJ0eTogVmFsaWRhdG9yLFxuICAgIGxheW91dFByb3BlcnR5OiBWYWxpZGF0b3Jcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN0eWxlID0gKHZhbGlkYXRlU3R5bGVNaW46IFZhbGlkYXRlU3R5bGUpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTb3VyY2UgPSB2YWxpZGF0ZVN0eWxlLnNvdXJjZTtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUxpZ2h0ID0gdmFsaWRhdGVTdHlsZS5saWdodDtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUZpbHRlciA9IHZhbGlkYXRlU3R5bGUuZmlsdGVyO1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUGFpbnRQcm9wZXJ0eSA9IHZhbGlkYXRlU3R5bGUucGFpbnRQcm9wZXJ0eTtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUxheW91dFByb3BlcnR5ID0gdmFsaWRhdGVTdHlsZS5sYXlvdXRQcm9wZXJ0eTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRWYWxpZGF0aW9uRXJyb3JzKGVtaXR0ZXI6IEV2ZW50ZWQsIGVycm9yczogPyRSZWFkT25seUFycmF5PHttZXNzYWdlOiBzdHJpbmcsIGlkZW50aWZpZXI/OiBzdHJpbmd9Pik6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvcnMpIHtcbiAgICAgICAgICAgIGVtaXR0ZXIuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSkpKTtcbiAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhc0Vycm9ycztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBHcmlkSW5kZXg7XG5cbnZhciBOVU1fUEFSQU1TID0gMztcblxuZnVuY3Rpb24gR3JpZEluZGV4KGV4dGVudCwgbiwgcGFkZGluZykge1xuICAgIHZhciBjZWxscyA9IHRoaXMuY2VsbHMgPSBbXTtcblxuICAgIGlmIChleHRlbnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICB0aGlzLmFycmF5QnVmZmVyID0gZXh0ZW50O1xuICAgICAgICB2YXIgYXJyYXkgPSBuZXcgSW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgZXh0ZW50ID0gYXJyYXlbMF07XG4gICAgICAgIG4gPSBhcnJheVsxXTtcbiAgICAgICAgcGFkZGluZyA9IGFycmF5WzJdO1xuXG4gICAgICAgIHRoaXMuZCA9IG4gKyAyICogcGFkZGluZztcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmQgKiB0aGlzLmQ7IGsrKykge1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gYXJyYXlbTlVNX1BBUkFNUyArIGtdO1xuICAgICAgICAgICAgdmFyIGVuZCA9IGFycmF5W05VTV9QQVJBTVMgKyBrICsgMV07XG4gICAgICAgICAgICBjZWxscy5wdXNoKHN0YXJ0ID09PSBlbmQgP1xuICAgICAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkuc3ViYXJyYXkoc3RhcnQsIGVuZCkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzT2Zmc2V0ID0gYXJyYXlbTlVNX1BBUkFNUyArIGNlbGxzLmxlbmd0aF07XG4gICAgICAgIHZhciBiYm94ZXNPZmZzZXQgPSBhcnJheVtOVU1fUEFSQU1TICsgY2VsbHMubGVuZ3RoICsgMV07XG4gICAgICAgIHRoaXMua2V5cyA9IGFycmF5LnN1YmFycmF5KGtleXNPZmZzZXQsIGJib3hlc09mZnNldCk7XG4gICAgICAgIHRoaXMuYmJveGVzID0gYXJyYXkuc3ViYXJyYXkoYmJveGVzT2Zmc2V0KTtcblxuICAgICAgICB0aGlzLmluc2VydCA9IHRoaXMuX2luc2VydFJlYWRvbmx5O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kID0gbiArIDIgKiBwYWRkaW5nO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZCAqIHRoaXMuZDsgaSsrKSB7XG4gICAgICAgICAgICBjZWxscy5wdXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5iYm94ZXMgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLm4gPSBuO1xuICAgIHRoaXMuZXh0ZW50ID0gZXh0ZW50O1xuICAgIHRoaXMucGFkZGluZyA9IHBhZGRpbmc7XG4gICAgdGhpcy5zY2FsZSA9IG4gLyBleHRlbnQ7XG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgdmFyIHAgPSAocGFkZGluZyAvIG4pICogZXh0ZW50O1xuICAgIHRoaXMubWluID0gLXA7XG4gICAgdGhpcy5tYXggPSBleHRlbnQgKyBwO1xufVxuXG5cbkdyaWRJbmRleC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24oa2V5LCB4MSwgeTEsIHgyLCB5Mikge1xuICAgIHRoaXMuX2ZvckVhY2hDZWxsKHgxLCB5MSwgeDIsIHkyLCB0aGlzLl9pbnNlcnRDZWxsLCB0aGlzLnVpZCsrKTtcbiAgICB0aGlzLmtleXMucHVzaChrZXkpO1xuICAgIHRoaXMuYmJveGVzLnB1c2goeDEpO1xuICAgIHRoaXMuYmJveGVzLnB1c2goeTEpO1xuICAgIHRoaXMuYmJveGVzLnB1c2goeDIpO1xuICAgIHRoaXMuYmJveGVzLnB1c2goeTIpO1xufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5faW5zZXJ0UmVhZG9ubHkgPSBmdW5jdGlvbigpIHtcbiAgICB0aHJvdyAnQ2Fubm90IGluc2VydCBpbnRvIGEgR3JpZEluZGV4IGNyZWF0ZWQgZnJvbSBhbiBBcnJheUJ1ZmZlci4nO1xufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5faW5zZXJ0Q2VsbCA9IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCBjZWxsSW5kZXgsIHVpZCkge1xuICAgIHRoaXMuY2VsbHNbY2VsbEluZGV4XS5wdXNoKHVpZCk7XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIGludGVyc2VjdGlvblRlc3QpIHtcbiAgICB2YXIgbWluID0gdGhpcy5taW47XG4gICAgdmFyIG1heCA9IHRoaXMubWF4O1xuICAgIGlmICh4MSA8PSBtaW4gJiYgeTEgPD0gbWluICYmIG1heCA8PSB4MiAmJiBtYXggPD0geTIgJiYgIWludGVyc2VjdGlvblRlc3QpIHtcbiAgICAgICAgLy8gV2UgdXNlIGBBcnJheSNzbGljZWAgYmVjYXVzZSBgdGhpcy5rZXlzYCBtYXkgYmUgYSBgSW50MzJBcnJheWAgYW5kXG4gICAgICAgIC8vIHNvbWUgYnJvd3NlcnMgKFNhZmFyaSBhbmQgSUUpIGRvIG5vdCBzdXBwb3J0IGBUeXBlZEFycmF5I3NsaWNlYFxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9UeXBlZEFycmF5L3NsaWNlI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5rZXlzKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgdmFyIHNlZW5VaWRzID0ge307XG4gICAgICAgIHRoaXMuX2ZvckVhY2hDZWxsKHgxLCB5MSwgeDIsIHkyLCB0aGlzLl9xdWVyeUNlbGwsIHJlc3VsdCwgc2VlblVpZHMsIGludGVyc2VjdGlvblRlc3QpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX3F1ZXJ5Q2VsbCA9IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCBjZWxsSW5kZXgsIHJlc3VsdCwgc2VlblVpZHMsIGludGVyc2VjdGlvblRlc3QpIHtcbiAgICB2YXIgY2VsbCA9IHRoaXMuY2VsbHNbY2VsbEluZGV4XTtcbiAgICBpZiAoY2VsbCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cztcbiAgICAgICAgdmFyIGJib3hlcyA9IHRoaXMuYmJveGVzO1xuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IGNlbGwubGVuZ3RoOyB1KyspIHtcbiAgICAgICAgICAgIHZhciB1aWQgPSBjZWxsW3VdO1xuICAgICAgICAgICAgaWYgKHNlZW5VaWRzW3VpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB1aWQgKiA0O1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb25UZXN0ID9cbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uVGVzdChiYm94ZXNbb2Zmc2V0ICsgMF0sIGJib3hlc1tvZmZzZXQgKyAxXSwgYmJveGVzW29mZnNldCArIDJdLCBiYm94ZXNbb2Zmc2V0ICsgM10pIDpcbiAgICAgICAgICAgICAgICAgICAgKCh4MSA8PSBiYm94ZXNbb2Zmc2V0ICsgMl0pICYmXG4gICAgICAgICAgICAgICAgICAgICh5MSA8PSBiYm94ZXNbb2Zmc2V0ICsgM10pICYmXG4gICAgICAgICAgICAgICAgICAgICh4MiA+PSBiYm94ZXNbb2Zmc2V0ICsgMF0pICYmXG4gICAgICAgICAgICAgICAgICAgICh5MiA+PSBiYm94ZXNbb2Zmc2V0ICsgMV0pKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkc1t1aWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5c1t1aWRdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkc1t1aWRdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5fZm9yRWFjaENlbGwgPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgZm4sIGFyZzEsIGFyZzIsIGludGVyc2VjdGlvblRlc3QpIHtcbiAgICB2YXIgY3gxID0gdGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHgxKTtcbiAgICB2YXIgY3kxID0gdGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHkxKTtcbiAgICB2YXIgY3gyID0gdGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHgyKTtcbiAgICB2YXIgY3kyID0gdGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHkyKTtcbiAgICBmb3IgKHZhciB4ID0gY3gxOyB4IDw9IGN4MjsgeCsrKSB7XG4gICAgICAgIGZvciAodmFyIHkgPSBjeTE7IHkgPD0gY3kyOyB5KyspIHtcbiAgICAgICAgICAgIHZhciBjZWxsSW5kZXggPSB0aGlzLmQgKiB5ICsgeDtcbiAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb25UZXN0ICYmICFpbnRlcnNlY3Rpb25UZXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQoeCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZCh5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHggKyAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHkgKyAxKSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGZuLmNhbGwodGhpcywgeDEsIHkxLCB4MiwgeTIsIGNlbGxJbmRleCwgYXJnMSwgYXJnMiwgaW50ZXJzZWN0aW9uVGVzdCkpIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX2NvbnZlcnRGcm9tQ2VsbENvb3JkID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMucGFkZGluZykgLyB0aGlzLnNjYWxlO1xufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5fY29udmVydFRvQ2VsbENvb3JkID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLmQgLSAxLCBNYXRoLmZsb29yKHggKiB0aGlzLnNjYWxlKSArIHRoaXMucGFkZGluZykpO1xufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS50b0FycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuYXJyYXlCdWZmZXIpIHJldHVybiB0aGlzLmFycmF5QnVmZmVyO1xuXG4gICAgdmFyIGNlbGxzID0gdGhpcy5jZWxscztcblxuICAgIHZhciBtZXRhZGF0YUxlbmd0aCA9IE5VTV9QQVJBTVMgKyB0aGlzLmNlbGxzLmxlbmd0aCArIDEgKyAxO1xuICAgIHZhciB0b3RhbENlbGxMZW5ndGggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0b3RhbENlbGxMZW5ndGggKz0gdGhpcy5jZWxsc1tpXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gbmV3IEludDMyQXJyYXkobWV0YWRhdGFMZW5ndGggKyB0b3RhbENlbGxMZW5ndGggKyB0aGlzLmtleXMubGVuZ3RoICsgdGhpcy5iYm94ZXMubGVuZ3RoKTtcbiAgICBhcnJheVswXSA9IHRoaXMuZXh0ZW50O1xuICAgIGFycmF5WzFdID0gdGhpcy5uO1xuICAgIGFycmF5WzJdID0gdGhpcy5wYWRkaW5nO1xuXG4gICAgdmFyIG9mZnNldCA9IG1ldGFkYXRhTGVuZ3RoO1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2VsbHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGNlbGwgPSBjZWxsc1trXTtcbiAgICAgICAgYXJyYXlbTlVNX1BBUkFNUyArIGtdID0gb2Zmc2V0O1xuICAgICAgICBhcnJheS5zZXQoY2VsbCwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IGNlbGwubGVuZ3RoO1xuICAgIH1cblxuICAgIGFycmF5W05VTV9QQVJBTVMgKyBjZWxscy5sZW5ndGhdID0gb2Zmc2V0O1xuICAgIGFycmF5LnNldCh0aGlzLmtleXMsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IHRoaXMua2V5cy5sZW5ndGg7XG5cbiAgICBhcnJheVtOVU1fUEFSQU1TICsgY2VsbHMubGVuZ3RoICsgMV0gPSBvZmZzZXQ7XG4gICAgYXJyYXkuc2V0KHRoaXMuYmJveGVzLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSB0aGlzLmJib3hlcy5sZW5ndGg7XG5cbiAgICByZXR1cm4gYXJyYXkuYnVmZmVyO1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IEdyaWQgZnJvbSAnZ3JpZC1pbmRleCc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCB7U3R5bGVQcm9wZXJ0eUZ1bmN0aW9uLCBTdHlsZUV4cHJlc3Npb24sIFpvb21EZXBlbmRlbnRFeHByZXNzaW9uLCBab29tQ29uc3RhbnRFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgZXhwcmVzc2lvbnMgZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuY29uc3Qge0ltYWdlRGF0YX0gPSB3aW5kb3c7XG5cbmltcG9ydCB0eXBlIHtUcmFuc2ZlcmFibGV9IGZyb20gJy4uL3R5cGVzL3RyYW5zZmVyYWJsZSc7XG5cbnR5cGUgU2VyaWFsaXplZE9iamVjdCA9IHsgW3N0cmluZ106IFNlcmlhbGl6ZWQgfTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZCA9XG4gICAgfCBudWxsXG4gICAgfCB2b2lkXG4gICAgfCBib29sZWFuXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgQm9vbGVhblxuICAgIHwgTnVtYmVyXG4gICAgfCBTdHJpbmdcbiAgICB8IERhdGVcbiAgICB8IFJlZ0V4cFxuICAgIHwgQXJyYXlCdWZmZXJcbiAgICB8ICRBcnJheUJ1ZmZlclZpZXdcbiAgICB8IEltYWdlRGF0YVxuICAgIHwgQXJyYXk8U2VyaWFsaXplZD5cbiAgICB8IFNlcmlhbGl6ZWRPYmplY3Q7XG5cbnR5cGUgUmVnaXN0cnkgPSB7XG4gICAgW3N0cmluZ106IHtcbiAgICAgICAga2xhc3M6IENsYXNzPGFueT4sXG4gICAgICAgIG9taXQ6ICRSZWFkT25seUFycmF5PHN0cmluZz4sXG4gICAgICAgIHNoYWxsb3c6ICRSZWFkT25seUFycmF5PHN0cmluZz5cbiAgICB9XG59O1xuXG50eXBlIFJlZ2lzdGVyT3B0aW9uczxUPiA9IHtcbiAgICBvbWl0PzogJFJlYWRPbmx5QXJyYXk8JEtleXM8VD4+LFxuICAgIHNoYWxsb3c/OiAkUmVhZE9ubHlBcnJheTwkS2V5czxUPj5cbn1cblxuY29uc3QgcmVnaXN0cnk6IFJlZ2lzdHJ5ID0ge307XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIGdpdmVuIGNsYXNzIGFzIHNlcmlhbGl6YWJsZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMub21pdCBMaXN0IG9mIHByb3BlcnRpZXMgdG8gb21pdCBmcm9tIHNlcmlhbGl6YXRpb24gKGUuZy4sIGNhY2hlZC9jb21wdXRlZCBwcm9wZXJ0aWVzKVxuICogQHBhcmFtIG9wdGlvbnMuc2hhbGxvdyBMaXN0IG9mIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgc2VyaWFsaXplZCBieSBhIHNpbXBsZSBzaGFsbG93IGNvcHksIHJhdGhlciB0aGFuIGJ5IGEgcmVjdXJzaXZlIGNhbGwgdG8gc2VyaWFsaXplKCkuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyPFQ6IGFueT4obmFtZTogc3RyaW5nLCBrbGFzczogQ2xhc3M8VD4sIG9wdGlvbnM6IFJlZ2lzdGVyT3B0aW9uczxUPiA9IHt9KSB7XG4gICAgYXNzZXJ0KCFyZWdpc3RyeVtuYW1lXSwgYCR7bmFtZX0gaXMgYWxyZWFkeSByZWdpc3RlcmVkLmApO1xuICAgIChPYmplY3QuZGVmaW5lUHJvcGVydHk6IGFueSkoa2xhc3MsICdfY2xhc3NSZWdpc3RyeUtleScsIHtcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHdyaXRlYWJsZTogZmFsc2VcbiAgICB9KTtcbiAgICByZWdpc3RyeVtuYW1lXSA9IHtcbiAgICAgICAga2xhc3MsXG4gICAgICAgIG9taXQ6IG9wdGlvbnMub21pdCB8fCBbXSxcbiAgICAgICAgc2hhbGxvdzogb3B0aW9ucy5zaGFsbG93IHx8IFtdXG4gICAgfTtcbn1cblxucmVnaXN0ZXIoJ09iamVjdCcsIE9iamVjdCk7XG5cbnR5cGUgU2VyaWFsaXplZEdyaWQgPSB7IGJ1ZmZlcjogQXJyYXlCdWZmZXIgfTtcblxuR3JpZC5zZXJpYWxpemUgPSBmdW5jdGlvbiBzZXJpYWxpemUoZ3JpZDogR3JpZCwgdHJhbnNmZXJhYmxlcz86IEFycmF5PFRyYW5zZmVyYWJsZT4pOiBTZXJpYWxpemVkR3JpZCB7XG4gICAgY29uc3QgYnVmZmVyID0gZ3JpZC50b0FycmF5QnVmZmVyKCk7XG4gICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKGJ1ZmZlcik7XG4gICAgfVxuICAgIHJldHVybiB7YnVmZmVyfTtcbn07XG5cbkdyaWQuZGVzZXJpYWxpemUgPSBmdW5jdGlvbiBkZXNlcmlhbGl6ZShzZXJpYWxpemVkOiBTZXJpYWxpemVkR3JpZCk6IEdyaWQge1xuICAgIHJldHVybiBuZXcgR3JpZChzZXJpYWxpemVkLmJ1ZmZlcik7XG59O1xucmVnaXN0ZXIoJ0dyaWQnLCBHcmlkKTtcblxucmVnaXN0ZXIoJ0NvbG9yJywgQ29sb3IpO1xucmVnaXN0ZXIoJ0Vycm9yJywgRXJyb3IpO1xuXG5yZWdpc3RlcignU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uJywgU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uKTtcbnJlZ2lzdGVyKCdTdHlsZUV4cHJlc3Npb24nLCBTdHlsZUV4cHJlc3Npb24sIHtvbWl0OiBbJ19ldmFsdWF0b3InXX0pO1xuXG5yZWdpc3RlcignWm9vbURlcGVuZGVudEV4cHJlc3Npb24nLCBab29tRGVwZW5kZW50RXhwcmVzc2lvbik7XG5yZWdpc3RlcignWm9vbUNvbnN0YW50RXhwcmVzc2lvbicsIFpvb21Db25zdGFudEV4cHJlc3Npb24pO1xucmVnaXN0ZXIoJ0NvbXBvdW5kRXhwcmVzc2lvbicsIENvbXBvdW5kRXhwcmVzc2lvbiwge29taXQ6IFsnX2V2YWx1YXRlJ119KTtcbmZvciAoY29uc3QgbmFtZSBpbiBleHByZXNzaW9ucykge1xuICAgIGlmICgoZXhwcmVzc2lvbnNbbmFtZV06IGFueSkuX2NsYXNzUmVnaXN0cnlLZXkpIGNvbnRpbnVlO1xuICAgIHJlZ2lzdGVyKGBFeHByZXNzaW9uXyR7bmFtZX1gLCBleHByZXNzaW9uc1tuYW1lXSk7XG59XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBnaXZlbiBvYmplY3QgZm9yIHRyYW5zZmVyIHRvIG9yIGZyb20gYSB3ZWIgd29ya2VyLlxuICpcbiAqIEZvciBub24tYnVpbHRpbiB0eXBlcywgcmVjdXJzaXZlbHkgc2VyaWFsaXplIGVhY2ggcHJvcGVydHkgKHBvc3NpYmx5XG4gKiBvbWl0dGluZyBjZXJ0YWluIHByb3BlcnRpZXMgLSBzZWUgcmVnaXN0ZXIoKSksIGFuZCBwYWNrYWdlIHRoZSByZXN1bHQgYWxvbmdcbiAqIHdpdGggdGhlIGNvbnN0cnVjdG9yJ3MgYG5hbWVgIHNvIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGNvbnN0cnVjdG9yIGNhbiBiZVxuICogbG9va2VkIHVwIGluIGBkZXNlcmlhbGl6ZSgpYC5cbiAqXG4gKiBJZiBhIGB0cmFuc2ZlcmFibGVzYCBhcnJheSBpcyBwcm92aWRlZCwgYWRkIGFueSB0cmFuc2ZlcmFibGUgb2JqZWN0cyAoaS5lLixcbiAqIGFueSBBcnJheUJ1ZmZlcnMgb3IgQXJyYXlCdWZmZXIgdmlld3MpIHRvIHRoZSBsaXN0LiAoSWYgYSBjb3B5IGlzIG5lZWRlZCxcbiAqIHRoaXMgc2hvdWxkIGhhcHBlbiBpbiB0aGUgY2xpZW50IGNvZGUsIGJlZm9yZSB1c2luZyBzZXJpYWxpemUoKS4pXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZShpbnB1dDogbWl4ZWQsIHRyYW5zZmVyYWJsZXM/OiBBcnJheTxUcmFuc2ZlcmFibGU+KTogU2VyaWFsaXplZCB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgIGlucHV0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgQm9vbGVhbiB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIE51bWJlciB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZyB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0KSkge1xuICAgICAgICBjb25zdCB2aWV3OiAkQXJyYXlCdWZmZXJWaWV3ID0gKGlucHV0OiBhbnkpO1xuICAgICAgICBpZiAodHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKHZpZXcuYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJbWFnZURhdGEpIHtcbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaChpbnB1dC5kYXRhLmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBBcnJheTxTZXJpYWxpemVkPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChzZXJpYWxpemUoaXRlbSwgdHJhbnNmZXJhYmxlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGtsYXNzID0gKGlucHV0LmNvbnN0cnVjdG9yOiBhbnkpO1xuICAgICAgICBjb25zdCBuYW1lID0ga2xhc3MuX2NsYXNzUmVnaXN0cnlLZXk7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHVucmVnaXN0ZXJlZCBjbGFzc2ApO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChyZWdpc3RyeVtuYW1lXSk7XG5cbiAgICAgICAgY29uc3QgcHJvcGVydGllczogU2VyaWFsaXplZE9iamVjdCA9IGtsYXNzLnNlcmlhbGl6ZSA/XG4gICAgICAgICAgICAvLyAoVGVtcG9yYXJ5IHdvcmthcm91bmQpIGFsbG93IGEgY2xhc3MgdG8gcHJvdmlkZSBzdGF0aWNcbiAgICAgICAgICAgIC8vIGBzZXJpYWxpemUoKWAgYW5kIGBkZXNlcmlhbGl6ZSgpYCBtZXRob2RzIHRvIGJ5cGFzcyB0aGUgZ2VuZXJpY1xuICAgICAgICAgICAgLy8gYXBwcm9hY2guXG4gICAgICAgICAgICAvLyBUaGlzIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGxldHMgdXMgdXNlIHRoZSBnZW5lcmljIHNlcmlhbGl6YXRpb25cbiAgICAgICAgICAgIC8vIGFwcHJvYWNoIGZvciBvYmplY3RzIHdob3NlIG1lbWJlcnMgaW5jbHVkZSBpbnN0YW5jZXMgb2YgZHluYW1pY1xuICAgICAgICAgICAgLy8gU3RydWN0QXJyYXkgdHlwZXMuIE9uY2Ugd2UgcmVmYWN0b3IgU3RydWN0QXJyYXkgdG8gYmUgc3RhdGljLFxuICAgICAgICAgICAgLy8gd2UgY2FuIHJlbW92ZSB0aGlzIGNvbXBsZXhpdHkuXG4gICAgICAgICAgICAoa2xhc3Muc2VyaWFsaXplKGlucHV0LCB0cmFuc2ZlcmFibGVzKTogU2VyaWFsaXplZE9iamVjdCkgOiB7fTtcblxuICAgICAgICBpZiAoIWtsYXNzLnNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAvLyBhbnkgY2FzdCBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzUzOTNcbiAgICAgICAgICAgICAgICBpZiAoIShpbnB1dDogYW55KS5oYXNPd25Qcm9wZXJ0eShrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0cnlbbmFtZV0ub21pdC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSAoaW5wdXQ6IGFueSlba2V5XTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSByZWdpc3RyeVtuYW1lXS5zaGFsbG93LmluZGV4T2Yoa2V5KSA+PSAwID9cbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgOlxuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemUocHJvcGVydHksIHRyYW5zZmVyYWJsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm1lc3NhZ2UgPSBpbnB1dC5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHN0YXRpY2FsbHkgc2VyaWFsaXplZCBvYmplY3Qgc3Vydml2ZXMgdHJhbnNmZXIgb2YgJG5hbWUgcHJvcGVydHlcbiAgICAgICAgICAgIGFzc2VydCghdHJhbnNmZXJhYmxlcyB8fCBwcm9wZXJ0aWVzICE9PSB0cmFuc2ZlcmFibGVzW3RyYW5zZmVyYWJsZXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnRpZXMuJG5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignJG5hbWUgcHJvcGVydHkgaXMgcmVzZXJ2ZWQgZm9yIHdvcmtlciBzZXJpYWxpemF0aW9uIGxvZ2ljLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lICE9PSAnT2JqZWN0Jykge1xuICAgICAgICAgICAgcHJvcGVydGllcy4kbmFtZSA9IG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSAke3R5cGVvZiBpbnB1dH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplKGlucHV0OiBTZXJpYWxpemVkKTogbWl4ZWQge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICBpbnB1dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEJvb2xlYW4gfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmcgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgUmVnRXhwIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHxcbiAgICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0KSB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEltYWdlRGF0YSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5tYXAoZGVzZXJpYWxpemUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAoaW5wdXQ6IGFueSkuJG5hbWUgfHwgJ09iamVjdCc7XG5cbiAgICAgICAgY29uc3Qge2tsYXNzfSA9IHJlZ2lzdHJ5W25hbWVdO1xuICAgICAgICBpZiAoIWtsYXNzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGRlc2VyaWFsaXplIHVucmVnaXN0ZXJlZCBjbGFzcyAke25hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2xhc3MuZGVzZXJpYWxpemUpIHtcbiAgICAgICAgICAgIHJldHVybiAoa2xhc3MuZGVzZXJpYWxpemU6IHR5cGVvZiBkZXNlcmlhbGl6ZSkoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShrbGFzcy5wcm90b3R5cGUpO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGlucHV0KSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJyRuYW1lJykgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChpbnB1dDogU2VyaWFsaXplZE9iamVjdClba2V5XTtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gcmVnaXN0cnlbbmFtZV0uc2hhbGxvdy5pbmRleE9mKGtleSkgPj0gMCA/IHZhbHVlIDogZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICR7dHlwZW9mIGlucHV0fWApO1xufVxuIiwiLy8gQGZsb3dcblxuY2xhc3MgWm9vbUhpc3Rvcnkge1xuICAgIGxhc3Rab29tOiBudW1iZXI7XG4gICAgbGFzdEZsb29yWm9vbTogbnVtYmVyO1xuICAgIGxhc3RJbnRlZ2VyWm9vbTogbnVtYmVyO1xuICAgIGxhc3RJbnRlZ2VyWm9vbVRpbWU6IG51bWJlcjtcbiAgICBmaXJzdDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmZpcnN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB1cGRhdGUoejogbnVtYmVyLCBub3c6IG51bWJlcikge1xuICAgICAgICBjb25zdCBmbG9vclogPSBNYXRoLmZsb29yKHopO1xuXG4gICAgICAgIGlmICh0aGlzLmZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbSA9IGZsb29yWjtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tVGltZSA9IDA7XG4gICAgICAgICAgICB0aGlzLmxhc3Rab29tID0gejtcbiAgICAgICAgICAgIHRoaXMubGFzdEZsb29yWm9vbSA9IGZsb29yWjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGFzdEZsb29yWm9vbSA+IGZsb29yWikge1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb20gPSBmbG9vclogKyAxO1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lID0gbm93O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdEZsb29yWm9vbSA8IGZsb29yWikge1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb20gPSBmbG9vclo7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWUgPSBub3c7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeiAhPT0gdGhpcy5sYXN0Wm9vbSkge1xuICAgICAgICAgICAgdGhpcy5sYXN0Wm9vbSA9IHo7XG4gICAgICAgICAgICB0aGlzLmxhc3RGbG9vclpvb20gPSBmbG9vclo7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFpvb21IaXN0b3J5O1xuIiwiLy8gQGZsb3dcblxuLy8gVGhlIGZvbGxvd2luZyB0YWJsZSBjb21lcyBmcm9tIDxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8xMi4wLjAvdWNkL0Jsb2Nrcy50eHQ+LlxuLy8gS2VlcCBpdCBzeW5jaHJvbml6ZWQgd2l0aCA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVUNEL2xhdGVzdC91Y2QvQmxvY2tzLnR4dD4uXG5cbnR5cGUgVW5pY29kZUJsb2NrTG9va3VwID0ge1trZXk6IHN0cmluZ106IChjaGFyOiBudW1iZXIpID0+IGJvb2xlYW59O1xuXG5jb25zdCB1bmljb2RlQmxvY2tMb29rdXA6IFVuaWNvZGVCbG9ja0xvb2t1cCA9IHtcbiAgICAvLyAnQmFzaWMgTGF0aW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDAwMDAgJiYgY2hhciA8PSAweDAwN0YsXG4gICAgJ0xhdGluLTEgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MDA4MCAmJiBjaGFyIDw9IDB4MDBGRixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MDEwMCAmJiBjaGFyIDw9IDB4MDE3RixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQtQic6IChjaGFyKSA9PiBjaGFyID49IDB4MDE4MCAmJiBjaGFyIDw9IDB4MDI0RixcbiAgICAvLyAnSVBBIEV4dGVuc2lvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDAyNTAgJiYgY2hhciA8PSAweDAyQUYsXG4gICAgLy8gJ1NwYWNpbmcgTW9kaWZpZXIgTGV0dGVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDJCMCAmJiBjaGFyIDw9IDB4MDJGRixcbiAgICAvLyAnQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMzAwICYmIGNoYXIgPD0gMHgwMzZGLFxuICAgIC8vICdHcmVlayBhbmQgQ29wdGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMzcwICYmIGNoYXIgPD0gMHgwM0ZGLFxuICAgIC8vICdDeXJpbGxpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDQwMCAmJiBjaGFyIDw9IDB4MDRGRixcbiAgICAvLyAnQ3lyaWxsaWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MDUwMCAmJiBjaGFyIDw9IDB4MDUyRixcbiAgICAvLyAnQXJtZW5pYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDA1MzAgJiYgY2hhciA8PSAweDA1OEYsXG4gICAgLy8nSGVicmV3JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNTkwICYmIGNoYXIgPD0gMHgwNUZGLFxuICAgICdBcmFiaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDA2MDAgJiYgY2hhciA8PSAweDA2RkYsXG4gICAgLy8nU3lyaWFjJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNzAwICYmIGNoYXIgPD0gMHgwNzRGLFxuICAgICdBcmFiaWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MDc1MCAmJiBjaGFyIDw9IDB4MDc3RixcbiAgICAvLyAnVGhhYW5hJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNzgwICYmIGNoYXIgPD0gMHgwN0JGLFxuICAgIC8vICdOS28nOiAoY2hhcikgPT4gY2hhciA+PSAweDA3QzAgJiYgY2hhciA8PSAweDA3RkYsXG4gICAgLy8gJ1NhbWFyaXRhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MDgwMCAmJiBjaGFyIDw9IDB4MDgzRixcbiAgICAvLyAnTWFuZGFpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDg0MCAmJiBjaGFyIDw9IDB4MDg1RixcbiAgICAvLyAnU3lyaWFjIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDA4NjAgJiYgY2hhciA8PSAweDA4NkYsXG4gICAgJ0FyYWJpYyBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwOEEwICYmIGNoYXIgPD0gMHgwOEZGLFxuICAgIC8vICdEZXZhbmFnYXJpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwOTAwICYmIGNoYXIgPD0gMHgwOTdGLFxuICAgIC8vICdCZW5nYWxpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwOTgwICYmIGNoYXIgPD0gMHgwOUZGLFxuICAgIC8vICdHdXJtdWtoaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEEwMCAmJiBjaGFyIDw9IDB4MEE3RixcbiAgICAvLyAnR3VqYXJhdGknOiAoY2hhcikgPT4gY2hhciA+PSAweDBBODAgJiYgY2hhciA8PSAweDBBRkYsXG4gICAgLy8gJ09yaXlhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQjAwICYmIGNoYXIgPD0gMHgwQjdGLFxuICAgIC8vICdUYW1pbCc6IChjaGFyKSA9PiBjaGFyID49IDB4MEI4MCAmJiBjaGFyIDw9IDB4MEJGRixcbiAgICAvLyAnVGVsdWd1JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQzAwICYmIGNoYXIgPD0gMHgwQzdGLFxuICAgIC8vICdLYW5uYWRhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQzgwICYmIGNoYXIgPD0gMHgwQ0ZGLFxuICAgIC8vICdNYWxheWFsYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweDBEMDAgJiYgY2hhciA8PSAweDBEN0YsXG4gICAgLy8gJ1NpbmhhbGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDBEODAgJiYgY2hhciA8PSAweDBERkYsXG4gICAgLy8gJ1RoYWknOiAoY2hhcikgPT4gY2hhciA+PSAweDBFMDAgJiYgY2hhciA8PSAweDBFN0YsXG4gICAgLy8gJ0xhbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MEU4MCAmJiBjaGFyIDw9IDB4MEVGRixcbiAgICAvLyAnVGliZXRhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MEYwMCAmJiBjaGFyIDw9IDB4MEZGRixcbiAgICAvLyAnTXlhbm1hcic6IChjaGFyKSA9PiBjaGFyID49IDB4MTAwMCAmJiBjaGFyIDw9IDB4MTA5RixcbiAgICAvLyAnR2VvcmdpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQTAgJiYgY2hhciA8PSAweDEwRkYsXG4gICAgJ0hhbmd1bCBKYW1vJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTAwICYmIGNoYXIgPD0gMHgxMUZGLFxuICAgIC8vICdFdGhpb3BpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTIwMCAmJiBjaGFyIDw9IDB4MTM3RixcbiAgICAvLyAnRXRoaW9waWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTM4MCAmJiBjaGFyIDw9IDB4MTM5RixcbiAgICAvLyAnQ2hlcm9rZWUnOiAoY2hhcikgPT4gY2hhciA+PSAweDEzQTAgJiYgY2hhciA8PSAweDEzRkYsXG4gICAgJ1VuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MnOiAoY2hhcikgPT4gY2hhciA+PSAweDE0MDAgJiYgY2hhciA8PSAweDE2N0YsXG4gICAgLy8gJ09naGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNjgwICYmIGNoYXIgPD0gMHgxNjlGLFxuICAgIC8vICdSdW5pYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTZBMCAmJiBjaGFyIDw9IDB4MTZGRixcbiAgICAvLyAnVGFnYWxvZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTcwMCAmJiBjaGFyIDw9IDB4MTcxRixcbiAgICAvLyAnSGFudW5vbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTcyMCAmJiBjaGFyIDw9IDB4MTczRixcbiAgICAvLyAnQnVoaWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDE3NDAgJiYgY2hhciA8PSAweDE3NUYsXG4gICAgLy8gJ1RhZ2JhbndhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzYwICYmIGNoYXIgPD0gMHgxNzdGLFxuICAgICdLaG1lcic6IChjaGFyKSA9PiBjaGFyID49IDB4MTc4MCAmJiBjaGFyIDw9IDB4MTdGRixcbiAgICAvLyAnTW9uZ29saWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxODAwICYmIGNoYXIgPD0gMHgxOEFGLFxuICAgICdVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxOEIwICYmIGNoYXIgPD0gMHgxOEZGLFxuICAgIC8vICdMaW1idSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTkwMCAmJiBjaGFyIDw9IDB4MTk0RixcbiAgICAvLyAnVGFpIExlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxOTUwICYmIGNoYXIgPD0gMHgxOTdGLFxuICAgIC8vICdOZXcgVGFpIEx1ZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTk4MCAmJiBjaGFyIDw9IDB4MTlERixcbiAgICAvLyAnS2htZXIgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTlFMCAmJiBjaGFyIDw9IDB4MTlGRixcbiAgICAvLyAnQnVnaW5lc2UnOiAoY2hhcikgPT4gY2hhciA+PSAweDFBMDAgJiYgY2hhciA8PSAweDFBMUYsXG4gICAgLy8gJ1RhaSBUaGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQTIwICYmIGNoYXIgPD0gMHgxQUFGLFxuICAgIC8vICdDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFBQjAgJiYgY2hhciA8PSAweDFBRkYsXG4gICAgLy8gJ0JhbGluZXNlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjAwICYmIGNoYXIgPD0gMHgxQjdGLFxuICAgIC8vICdTdW5kYW5lc2UnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCODAgJiYgY2hhciA8PSAweDFCQkYsXG4gICAgLy8gJ0JhdGFrJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQkMwICYmIGNoYXIgPD0gMHgxQkZGLFxuICAgIC8vICdMZXBjaGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDFDMDAgJiYgY2hhciA8PSAweDFDNEYsXG4gICAgLy8gJ09sIENoaWtpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQzUwICYmIGNoYXIgPD0gMHgxQzdGLFxuICAgIC8vICdDeXJpbGxpYyBFeHRlbmRlZC1DJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQzgwICYmIGNoYXIgPD0gMHgxQzhGLFxuICAgIC8vICdHZW9yZ2lhbiBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUM5MCAmJiBjaGFyIDw9IDB4MUNCRixcbiAgICAvLyAnU3VuZGFuZXNlIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFDQzAgJiYgY2hhciA8PSAweDFDQ0YsXG4gICAgLy8gJ1ZlZGljIEV4dGVuc2lvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFDRDAgJiYgY2hhciA8PSAweDFDRkYsXG4gICAgLy8gJ1Bob25ldGljIEV4dGVuc2lvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMDAgJiYgY2hhciA8PSAweDFEN0YsXG4gICAgLy8gJ1Bob25ldGljIEV4dGVuc2lvbnMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQ4MCAmJiBjaGFyIDw9IDB4MURCRixcbiAgICAvLyAnQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEQzAgJiYgY2hhciA8PSAweDFERkYsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFMDAgJiYgY2hhciA8PSAweDFFRkYsXG4gICAgLy8gJ0dyZWVrIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjAwICYmIGNoYXIgPD0gMHgxRkZGLFxuICAgICdHZW5lcmFsIFB1bmN0dWF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMDAwICYmIGNoYXIgPD0gMHgyMDZGLFxuICAgIC8vICdTdXBlcnNjcmlwdHMgYW5kIFN1YnNjcmlwdHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIwNzAgJiYgY2hhciA8PSAweDIwOUYsXG4gICAgLy8gJ0N1cnJlbmN5IFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIwQTAgJiYgY2hhciA8PSAweDIwQ0YsXG4gICAgLy8gJ0NvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyBmb3IgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjBEMCAmJiBjaGFyIDw9IDB4MjBGRixcbiAgICAnTGV0dGVybGlrZSBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMTAwICYmIGNoYXIgPD0gMHgyMTRGLFxuICAgICdOdW1iZXIgRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIxNTAgJiYgY2hhciA8PSAweDIxOEYsXG4gICAgLy8gJ0Fycm93cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjE5MCAmJiBjaGFyIDw9IDB4MjFGRixcbiAgICAvLyAnTWF0aGVtYXRpY2FsIE9wZXJhdG9ycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjIwMCAmJiBjaGFyIDw9IDB4MjJGRixcbiAgICAnTWlzY2VsbGFuZW91cyBUZWNobmljYWwnOiAoY2hhcikgPT4gY2hhciA+PSAweDIzMDAgJiYgY2hhciA8PSAweDIzRkYsXG4gICAgJ0NvbnRyb2wgUGljdHVyZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI0MDAgJiYgY2hhciA8PSAweDI0M0YsXG4gICAgJ09wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNDQwICYmIGNoYXIgPD0gMHgyNDVGLFxuICAgICdFbmNsb3NlZCBBbHBoYW51bWVyaWNzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNDYwICYmIGNoYXIgPD0gMHgyNEZGLFxuICAgIC8vICdCb3ggRHJhd2luZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjUwMCAmJiBjaGFyIDw9IDB4MjU3RixcbiAgICAvLyAnQmxvY2sgRWxlbWVudHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI1ODAgJiYgY2hhciA8PSAweDI1OUYsXG4gICAgJ0dlb21ldHJpYyBTaGFwZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI1QTAgJiYgY2hhciA8PSAweDI1RkYsXG4gICAgJ01pc2NlbGxhbmVvdXMgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjYwMCAmJiBjaGFyIDw9IDB4MjZGRixcbiAgICAvLyAnRGluZ2JhdHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI3MDAgJiYgY2hhciA8PSAweDI3QkYsXG4gICAgLy8gJ01pc2NlbGxhbmVvdXMgTWF0aGVtYXRpY2FsIFN5bWJvbHMtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MjdDMCAmJiBjaGFyIDw9IDB4MjdFRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIEFycm93cy1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyN0YwICYmIGNoYXIgPD0gMHgyN0ZGLFxuICAgIC8vICdCcmFpbGxlIFBhdHRlcm5zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyODAwICYmIGNoYXIgPD0gMHgyOEZGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgQXJyb3dzLUInOiAoY2hhcikgPT4gY2hhciA+PSAweDI5MDAgJiYgY2hhciA8PSAweDI5N0YsXG4gICAgLy8gJ01pc2NlbGxhbmVvdXMgTWF0aGVtYXRpY2FsIFN5bWJvbHMtQic6IChjaGFyKSA9PiBjaGFyID49IDB4Mjk4MCAmJiBjaGFyIDw9IDB4MjlGRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIE1hdGhlbWF0aWNhbCBPcGVyYXRvcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJBMDAgJiYgY2hhciA8PSAweDJBRkYsXG4gICAgJ01pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQjAwICYmIGNoYXIgPD0gMHgyQkZGLFxuICAgIC8vICdHbGFnb2xpdGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQzAwICYmIGNoYXIgPD0gMHgyQzVGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZC1DJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQzYwICYmIGNoYXIgPD0gMHgyQzdGLFxuICAgIC8vICdDb3B0aWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJDODAgJiYgY2hhciA8PSAweDJDRkYsXG4gICAgLy8gJ0dlb3JnaWFuIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDJEMDAgJiYgY2hhciA8PSAweDJEMkYsXG4gICAgLy8gJ1RpZmluYWdoJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRDMwICYmIGNoYXIgPD0gMHgyRDdGLFxuICAgIC8vICdFdGhpb3BpYyBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkQ4MCAmJiBjaGFyIDw9IDB4MkRERixcbiAgICAvLyAnQ3lyaWxsaWMgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MkRFMCAmJiBjaGFyIDw9IDB4MkRGRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIFB1bmN0dWF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRTAwICYmIGNoYXIgPD0gMHgyRTdGLFxuICAgICdDSksgUmFkaWNhbHMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkU4MCAmJiBjaGFyIDw9IDB4MkVGRixcbiAgICAnS2FuZ3hpIFJhZGljYWxzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRjAwICYmIGNoYXIgPD0gMHgyRkRGLFxuICAgICdJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRkYwICYmIGNoYXIgPD0gMHgyRkZGLFxuICAgICdDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDMwMDAgJiYgY2hhciA8PSAweDMwM0YsXG4gICAgJ0hpcmFnYW5hJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMDQwICYmIGNoYXIgPD0gMHgzMDlGLFxuICAgICdLYXRha2FuYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MzBBMCAmJiBjaGFyIDw9IDB4MzBGRixcbiAgICAnQm9wb21vZm8nOiAoY2hhcikgPT4gY2hhciA+PSAweDMxMDAgJiYgY2hhciA8PSAweDMxMkYsXG4gICAgJ0hhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8nOiAoY2hhcikgPT4gY2hhciA+PSAweDMxMzAgJiYgY2hhciA8PSAweDMxOEYsXG4gICAgJ0thbmJ1bic6IChjaGFyKSA9PiBjaGFyID49IDB4MzE5MCAmJiBjaGFyIDw9IDB4MzE5RixcbiAgICAnQm9wb21vZm8gRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDMxQTAgJiYgY2hhciA8PSAweDMxQkYsXG4gICAgJ0NKSyBTdHJva2VzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMUMwICYmIGNoYXIgPD0gMHgzMUVGLFxuICAgICdLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMUYwICYmIGNoYXIgPD0gMHgzMUZGLFxuICAgICdFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMjAwICYmIGNoYXIgPD0gMHgzMkZGLFxuICAgICdDSksgQ29tcGF0aWJpbGl0eSc6IChjaGFyKSA9PiBjaGFyID49IDB4MzMwMCAmJiBjaGFyIDw9IDB4MzNGRixcbiAgICAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MzQwMCAmJiBjaGFyIDw9IDB4NERCRixcbiAgICAnWWlqaW5nIEhleGFncmFtIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDREQzAgJiYgY2hhciA8PSAweDRERkYsXG4gICAgJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDRFMDAgJiYgY2hhciA8PSAweDlGRkYsXG4gICAgJ1lpIFN5bGxhYmxlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4QTAwMCAmJiBjaGFyIDw9IDB4QTQ4RixcbiAgICAnWWkgUmFkaWNhbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweEE0OTAgJiYgY2hhciA8PSAweEE0Q0YsXG4gICAgLy8gJ0xpc3UnOiAoY2hhcikgPT4gY2hhciA+PSAweEE0RDAgJiYgY2hhciA8PSAweEE0RkYsXG4gICAgLy8gJ1ZhaSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTUwMCAmJiBjaGFyIDw9IDB4QTYzRixcbiAgICAvLyAnQ3lyaWxsaWMgRXh0ZW5kZWQtQic6IChjaGFyKSA9PiBjaGFyID49IDB4QTY0MCAmJiBjaGFyIDw9IDB4QTY5RixcbiAgICAvLyAnQmFtdW0nOiAoY2hhcikgPT4gY2hhciA+PSAweEE2QTAgJiYgY2hhciA8PSAweEE2RkYsXG4gICAgLy8gJ01vZGlmaWVyIFRvbmUgTGV0dGVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4QTcwMCAmJiBjaGFyIDw9IDB4QTcxRixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQtRCc6IChjaGFyKSA9PiBjaGFyID49IDB4QTcyMCAmJiBjaGFyIDw9IDB4QTdGRixcbiAgICAvLyAnU3lsb3RpIE5hZ3JpJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBODAwICYmIGNoYXIgPD0gMHhBODJGLFxuICAgIC8vICdDb21tb24gSW5kaWMgTnVtYmVyIEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBODMwICYmIGNoYXIgPD0gMHhBODNGLFxuICAgIC8vICdQaGFncy1wYSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTg0MCAmJiBjaGFyIDw9IDB4QTg3RixcbiAgICAvLyAnU2F1cmFzaHRyYSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTg4MCAmJiBjaGFyIDw9IDB4QThERixcbiAgICAvLyAnRGV2YW5hZ2FyaSBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4QThFMCAmJiBjaGFyIDw9IDB4QThGRixcbiAgICAvLyAnS2F5YWggTGknOiAoY2hhcikgPT4gY2hhciA+PSAweEE5MDAgJiYgY2hhciA8PSAweEE5MkYsXG4gICAgLy8gJ1JlamFuZyc6IChjaGFyKSA9PiBjaGFyID49IDB4QTkzMCAmJiBjaGFyIDw9IDB4QTk1RixcbiAgICAnSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTk2MCAmJiBjaGFyIDw9IDB4QTk3RixcbiAgICAvLyAnSmF2YW5lc2UnOiAoY2hhcikgPT4gY2hhciA+PSAweEE5ODAgJiYgY2hhciA8PSAweEE5REYsXG4gICAgLy8gJ015YW5tYXIgRXh0ZW5kZWQtQic6IChjaGFyKSA9PiBjaGFyID49IDB4QTlFMCAmJiBjaGFyIDw9IDB4QTlGRixcbiAgICAvLyAnQ2hhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4QUEwMCAmJiBjaGFyIDw9IDB4QUE1RixcbiAgICAvLyAnTXlhbm1hciBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQTYwICYmIGNoYXIgPD0gMHhBQTdGLFxuICAgIC8vICdUYWkgVmlldCc6IChjaGFyKSA9PiBjaGFyID49IDB4QUE4MCAmJiBjaGFyIDw9IDB4QUFERixcbiAgICAvLyAnTWVldGVpIE1heWVrIEV4dGVuc2lvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweEFBRTAgJiYgY2hhciA8PSAweEFBRkYsXG4gICAgLy8gJ0V0aGlvcGljIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweEFCMDAgJiYgY2hhciA8PSAweEFCMkYsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkLUUnOiAoY2hhcikgPT4gY2hhciA+PSAweEFCMzAgJiYgY2hhciA8PSAweEFCNkYsXG4gICAgLy8gJ0NoZXJva2VlIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweEFCNzAgJiYgY2hhciA8PSAweEFCQkYsXG4gICAgLy8gJ01lZXRlaSBNYXllayc6IChjaGFyKSA9PiBjaGFyID49IDB4QUJDMCAmJiBjaGFyIDw9IDB4QUJGRixcbiAgICAnSGFuZ3VsIFN5bGxhYmxlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4QUMwMCAmJiBjaGFyIDw9IDB4RDdBRixcbiAgICAnSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQic6IChjaGFyKSA9PiBjaGFyID49IDB4RDdCMCAmJiBjaGFyIDw9IDB4RDdGRixcbiAgICAvLyAnSGlnaCBTdXJyb2dhdGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhEODAwICYmIGNoYXIgPD0gMHhEQjdGLFxuICAgIC8vICdIaWdoIFByaXZhdGUgVXNlIFN1cnJvZ2F0ZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweERCODAgJiYgY2hhciA8PSAweERCRkYsXG4gICAgLy8gJ0xvdyBTdXJyb2dhdGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhEQzAwICYmIGNoYXIgPD0gMHhERkZGLFxuICAgICdQcml2YXRlIFVzZSBBcmVhJzogKGNoYXIpID0+IGNoYXIgPj0gMHhFMDAwICYmIGNoYXIgPD0gMHhGOEZGLFxuICAgICdDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGOTAwICYmIGNoYXIgPD0gMHhGQUZGLFxuICAgIC8vICdBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkIwMCAmJiBjaGFyIDw9IDB4RkI0RixcbiAgICAnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGQjUwICYmIGNoYXIgPD0gMHhGREZGLFxuICAgIC8vICdWYXJpYXRpb24gU2VsZWN0b3JzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTAwICYmIGNoYXIgPD0gMHhGRTBGLFxuICAgICdWZXJ0aWNhbCBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkUxMCAmJiBjaGFyIDw9IDB4RkUxRixcbiAgICAvLyAnQ29tYmluaW5nIEhhbGYgTWFya3MnOiAoY2hhcikgPT4gY2hhciA+PSAweEZFMjAgJiYgY2hhciA8PSAweEZFMkYsXG4gICAgJ0NKSyBDb21wYXRpYmlsaXR5IEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTMwICYmIGNoYXIgPD0gMHhGRTRGLFxuICAgICdTbWFsbCBGb3JtIFZhcmlhbnRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTUwICYmIGNoYXIgPD0gMHhGRTZGLFxuICAgICdBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUInOiAoY2hhcikgPT4gY2hhciA+PSAweEZFNzAgJiYgY2hhciA8PSAweEZFRkYsXG4gICAgJ0hhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRjAwICYmIGNoYXIgPD0gMHhGRkVGXG4gICAgLy8gJ1NwZWNpYWxzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRkYwICYmIGNoYXIgPD0gMHhGRkZGLFxuICAgIC8vICdMaW5lYXIgQiBTeWxsYWJhcnknOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMDAwICYmIGNoYXIgPD0gMHgxMDA3RixcbiAgICAvLyAnTGluZWFyIEIgSWRlb2dyYW1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDA4MCAmJiBjaGFyIDw9IDB4MTAwRkYsXG4gICAgLy8gJ0FlZ2VhbiBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDEwMCAmJiBjaGFyIDw9IDB4MTAxM0YsXG4gICAgLy8gJ0FuY2llbnQgR3JlZWsgTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAxNDAgJiYgY2hhciA8PSAweDEwMThGLFxuICAgIC8vICdBbmNpZW50IFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMTkwICYmIGNoYXIgPD0gMHgxMDFDRixcbiAgICAvLyAnUGhhaXN0b3MgRGlzYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAxRDAgJiYgY2hhciA8PSAweDEwMUZGLFxuICAgIC8vICdMeWNpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMjgwICYmIGNoYXIgPD0gMHgxMDI5RixcbiAgICAvLyAnQ2FyaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDJBMCAmJiBjaGFyIDw9IDB4MTAyREYsXG4gICAgLy8gJ0NvcHRpYyBFcGFjdCBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDJFMCAmJiBjaGFyIDw9IDB4MTAyRkYsXG4gICAgLy8gJ09sZCBJdGFsaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMzAwICYmIGNoYXIgPD0gMHgxMDMyRixcbiAgICAvLyAnR290aGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDMzMCAmJiBjaGFyIDw9IDB4MTAzNEYsXG4gICAgLy8gJ09sZCBQZXJtaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMzUwICYmIGNoYXIgPD0gMHgxMDM3RixcbiAgICAvLyAnVWdhcml0aWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMzgwICYmIGNoYXIgPD0gMHgxMDM5RixcbiAgICAvLyAnT2xkIFBlcnNpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwM0EwICYmIGNoYXIgPD0gMHgxMDNERixcbiAgICAvLyAnRGVzZXJldCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA0MDAgJiYgY2hhciA8PSAweDEwNDRGLFxuICAgIC8vICdTaGF2aWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDQ1MCAmJiBjaGFyIDw9IDB4MTA0N0YsXG4gICAgLy8gJ09zbWFueWEnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNDgwICYmIGNoYXIgPD0gMHgxMDRBRixcbiAgICAvLyAnT3NhZ2UnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNEIwICYmIGNoYXIgPD0gMHgxMDRGRixcbiAgICAvLyAnRWxiYXNhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA1MDAgJiYgY2hhciA8PSAweDEwNTJGLFxuICAgIC8vICdDYXVjYXNpYW4gQWxiYW5pYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNTMwICYmIGNoYXIgPD0gMHgxMDU2RixcbiAgICAvLyAnTGluZWFyIEEnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNjAwICYmIGNoYXIgPD0gMHgxMDc3RixcbiAgICAvLyAnQ3lwcmlvdCBTeWxsYWJhcnknOiAoY2hhcikgPT4gY2hhciA+PSAweDEwODAwICYmIGNoYXIgPD0gMHgxMDgzRixcbiAgICAvLyAnSW1wZXJpYWwgQXJhbWFpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA4NDAgJiYgY2hhciA8PSAweDEwODVGLFxuICAgIC8vICdQYWxteXJlbmUnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwODYwICYmIGNoYXIgPD0gMHgxMDg3RixcbiAgICAvLyAnTmFiYXRhZWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDg4MCAmJiBjaGFyIDw9IDB4MTA4QUYsXG4gICAgLy8gJ0hhdHJhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA4RTAgJiYgY2hhciA8PSAweDEwOEZGLFxuICAgIC8vICdQaG9lbmljaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDkwMCAmJiBjaGFyIDw9IDB4MTA5MUYsXG4gICAgLy8gJ0x5ZGlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA5MjAgJiYgY2hhciA8PSAweDEwOTNGLFxuICAgIC8vICdNZXJvaXRpYyBIaWVyb2dseXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA5ODAgJiYgY2hhciA8PSAweDEwOTlGLFxuICAgIC8vICdNZXJvaXRpYyBDdXJzaXZlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDlBMCAmJiBjaGFyIDw9IDB4MTA5RkYsXG4gICAgLy8gJ0toYXJvc2h0aGknOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQTAwICYmIGNoYXIgPD0gMHgxMEE1RixcbiAgICAvLyAnT2xkIFNvdXRoIEFyYWJpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQTYwICYmIGNoYXIgPD0gMHgxMEE3RixcbiAgICAvLyAnT2xkIE5vcnRoIEFyYWJpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQTgwICYmIGNoYXIgPD0gMHgxMEE5RixcbiAgICAvLyAnTWFuaWNoYWVhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBBQzAgJiYgY2hhciA8PSAweDEwQUZGLFxuICAgIC8vICdBdmVzdGFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEIwMCAmJiBjaGFyIDw9IDB4MTBCM0YsXG4gICAgLy8gJ0luc2NyaXB0aW9uYWwgUGFydGhpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQjQwICYmIGNoYXIgPD0gMHgxMEI1RixcbiAgICAvLyAnSW5zY3JpcHRpb25hbCBQYWhsYXZpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEI2MCAmJiBjaGFyIDw9IDB4MTBCN0YsXG4gICAgLy8gJ1BzYWx0ZXIgUGFobGF2aSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBCODAgJiYgY2hhciA8PSAweDEwQkFGLFxuICAgIC8vICdPbGQgVHVya2ljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEMwMCAmJiBjaGFyIDw9IDB4MTBDNEYsXG4gICAgLy8gJ09sZCBIdW5nYXJpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQzgwICYmIGNoYXIgPD0gMHgxMENGRixcbiAgICAvLyAnSGFuaWZpIFJvaGluZ3lhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEQwMCAmJiBjaGFyIDw9IDB4MTBEM0YsXG4gICAgLy8gJ1J1bWkgTnVtZXJhbCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEU2MCAmJiBjaGFyIDw9IDB4MTBFN0YsXG4gICAgLy8gJ09sZCBTb2dkaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEYwMCAmJiBjaGFyIDw9IDB4MTBGMkYsXG4gICAgLy8gJ1NvZ2RpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwRjMwICYmIGNoYXIgPD0gMHgxMEY2RixcbiAgICAvLyAnRWx5bWFpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBGRTAgJiYgY2hhciA8PSAweDEwRkZGLFxuICAgIC8vICdCcmFobWknOiAoY2hhcikgPT4gY2hhciA+PSAweDExMDAwICYmIGNoYXIgPD0gMHgxMTA3RixcbiAgICAvLyAnS2FpdGhpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTA4MCAmJiBjaGFyIDw9IDB4MTEwQ0YsXG4gICAgLy8gJ1NvcmEgU29tcGVuZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEwRDAgJiYgY2hhciA8PSAweDExMEZGLFxuICAgIC8vICdDaGFrbWEnOiAoY2hhcikgPT4gY2hhciA+PSAweDExMTAwICYmIGNoYXIgPD0gMHgxMTE0RixcbiAgICAvLyAnTWFoYWphbmknOiAoY2hhcikgPT4gY2hhciA+PSAweDExMTUwICYmIGNoYXIgPD0gMHgxMTE3RixcbiAgICAvLyAnU2hhcmFkYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTExODAgJiYgY2hhciA8PSAweDExMURGLFxuICAgIC8vICdTaW5oYWxhIEFyY2hhaWMgTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTExRTAgJiYgY2hhciA8PSAweDExMUZGLFxuICAgIC8vICdLaG9qa2knOiAoY2hhcikgPT4gY2hhciA+PSAweDExMjAwICYmIGNoYXIgPD0gMHgxMTI0RixcbiAgICAvLyAnTXVsdGFuaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEyODAgJiYgY2hhciA8PSAweDExMkFGLFxuICAgIC8vICdLaHVkYXdhZGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExMkIwICYmIGNoYXIgPD0gMHgxMTJGRixcbiAgICAvLyAnR3JhbnRoYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEzMDAgJiYgY2hhciA8PSAweDExMzdGLFxuICAgIC8vICdOZXdhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTQwMCAmJiBjaGFyIDw9IDB4MTE0N0YsXG4gICAgLy8gJ1Rpcmh1dGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDExNDgwICYmIGNoYXIgPD0gMHgxMTRERixcbiAgICAvLyAnU2lkZGhhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE1ODAgJiYgY2hhciA8PSAweDExNUZGLFxuICAgIC8vICdNb2RpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTYwMCAmJiBjaGFyIDw9IDB4MTE2NUYsXG4gICAgLy8gJ01vbmdvbGlhbiBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTY2MCAmJiBjaGFyIDw9IDB4MTE2N0YsXG4gICAgLy8gJ1Rha3JpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTY4MCAmJiBjaGFyIDw9IDB4MTE2Q0YsXG4gICAgLy8gJ0Fob20nOiAoY2hhcikgPT4gY2hhciA+PSAweDExNzAwICYmIGNoYXIgPD0gMHgxMTczRixcbiAgICAvLyAnRG9ncmEnOiAoY2hhcikgPT4gY2hhciA+PSAweDExODAwICYmIGNoYXIgPD0gMHgxMTg0RixcbiAgICAvLyAnV2FyYW5nIENpdGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExOEEwICYmIGNoYXIgPD0gMHgxMThGRixcbiAgICAvLyAnTmFuZGluYWdhcmknOiAoY2hhcikgPT4gY2hhciA+PSAweDExOUEwICYmIGNoYXIgPD0gMHgxMTlGRixcbiAgICAvLyAnWmFuYWJhemFyIFNxdWFyZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFBMDAgJiYgY2hhciA8PSAweDExQTRGLFxuICAgIC8vICdTb3lvbWJvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUE1MCAmJiBjaGFyIDw9IDB4MTFBQUYsXG4gICAgLy8gJ1BhdSBDaW4gSGF1JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUFDMCAmJiBjaGFyIDw9IDB4MTFBRkYsXG4gICAgLy8gJ0JoYWlrc3VraSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFDMDAgJiYgY2hhciA8PSAweDExQzZGLFxuICAgIC8vICdNYXJjaGVuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUM3MCAmJiBjaGFyIDw9IDB4MTFDQkYsXG4gICAgLy8gJ01hc2FyYW0gR29uZGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExRDAwICYmIGNoYXIgPD0gMHgxMUQ1RixcbiAgICAvLyAnR3VuamFsYSBHb25kaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFENjAgJiYgY2hhciA8PSAweDExREFGLFxuICAgIC8vICdNYWthc2FyJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUVFMCAmJiBjaGFyIDw9IDB4MTFFRkYsXG4gICAgLy8gJ1RhbWlsIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDExRkMwICYmIGNoYXIgPD0gMHgxMUZGRixcbiAgICAvLyAnQ3VuZWlmb3JtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMjAwMCAmJiBjaGFyIDw9IDB4MTIzRkYsXG4gICAgLy8gJ0N1bmVpZm9ybSBOdW1iZXJzIGFuZCBQdW5jdHVhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTI0MDAgJiYgY2hhciA8PSAweDEyNDdGLFxuICAgIC8vICdFYXJseSBEeW5hc3RpYyBDdW5laWZvcm0nOiAoY2hhcikgPT4gY2hhciA+PSAweDEyNDgwICYmIGNoYXIgPD0gMHgxMjU0RixcbiAgICAvLyAnRWd5cHRpYW4gSGllcm9nbHlwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEzMDAwICYmIGNoYXIgPD0gMHgxMzQyRixcbiAgICAvLyAnRWd5cHRpYW4gSGllcm9nbHlwaCBGb3JtYXQgQ29udHJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEzNDMwICYmIGNoYXIgPD0gMHgxMzQzRixcbiAgICAvLyAnQW5hdG9saWFuIEhpZXJvZ2x5cGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNDQwMCAmJiBjaGFyIDw9IDB4MTQ2N0YsXG4gICAgLy8gJ0JhbXVtIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDE2ODAwICYmIGNoYXIgPD0gMHgxNkEzRixcbiAgICAvLyAnTXJvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkE0MCAmJiBjaGFyIDw9IDB4MTZBNkYsXG4gICAgLy8gJ0Jhc3NhIFZhaCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTZBRDAgJiYgY2hhciA8PSAweDE2QUZGLFxuICAgIC8vICdQYWhhd2ggSG1vbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweDE2QjAwICYmIGNoYXIgPD0gMHgxNkI4RixcbiAgICAvLyAnTWVkZWZhaWRyaW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDE2RTQwICYmIGNoYXIgPD0gMHgxNkU5RixcbiAgICAvLyAnTWlhbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTZGMDAgJiYgY2hhciA8PSAweDE2RjlGLFxuICAgIC8vICdJZGVvZ3JhcGhpYyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTZGRTAgJiYgY2hhciA8PSAweDE2RkZGLFxuICAgIC8vICdUYW5ndXQnOiAoY2hhcikgPT4gY2hhciA+PSAweDE3MDAwICYmIGNoYXIgPD0gMHgxODdGRixcbiAgICAvLyAnVGFuZ3V0IENvbXBvbmVudHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDE4ODAwICYmIGNoYXIgPD0gMHgxOEFGRixcbiAgICAvLyAnS2FuYSBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjAwMCAmJiBjaGFyIDw9IDB4MUIwRkYsXG4gICAgLy8gJ0thbmEgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUIxMDAgJiYgY2hhciA8PSAweDFCMTJGLFxuICAgIC8vICdTbWFsbCBLYW5hIEV4dGVuc2lvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MUIxMzAgJiYgY2hhciA8PSAweDFCMTZGLFxuICAgIC8vICdOdXNodSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUIxNzAgJiYgY2hhciA8PSAweDFCMkZGLFxuICAgIC8vICdEdXBsb3lhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MUJDMDAgJiYgY2hhciA8PSAweDFCQzlGLFxuICAgIC8vICdTaG9ydGhhbmQgRm9ybWF0IENvbnRyb2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQkNBMCAmJiBjaGFyIDw9IDB4MUJDQUYsXG4gICAgLy8gJ0J5emFudGluZSBNdXNpY2FsIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMDAwICYmIGNoYXIgPD0gMHgxRDBGRixcbiAgICAvLyAnTXVzaWNhbCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDEwMCAmJiBjaGFyIDw9IDB4MUQxRkYsXG4gICAgLy8gJ0FuY2llbnQgR3JlZWsgTXVzaWNhbCBOb3RhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MUQyMDAgJiYgY2hhciA8PSAweDFEMjRGLFxuICAgIC8vICdNYXlhbiBOdW1lcmFscyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQyRTAgJiYgY2hhciA8PSAweDFEMkZGLFxuICAgIC8vICdUYWkgWHVhbiBKaW5nIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMzAwICYmIGNoYXIgPD0gMHgxRDM1RixcbiAgICAvLyAnQ291bnRpbmcgUm9kIE51bWVyYWxzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDM2MCAmJiBjaGFyIDw9IDB4MUQzN0YsXG4gICAgLy8gJ01hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQ0MDAgJiYgY2hhciA8PSAweDFEN0ZGLFxuICAgIC8vICdTdXR0b24gU2lnbldyaXRpbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEODAwICYmIGNoYXIgPD0gMHgxREFBRixcbiAgICAvLyAnR2xhZ29saXRpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTAwMCAmJiBjaGFyIDw9IDB4MUUwMkYsXG4gICAgLy8gJ055aWFrZW5nIFB1YWNodWUgSG1vbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFMTAwICYmIGNoYXIgPD0gMHgxRTE0RixcbiAgICAvLyAnV2FuY2hvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTJDMCAmJiBjaGFyIDw9IDB4MUUyRkYsXG4gICAgLy8gJ01lbmRlIEtpa2FrdWknOiAoY2hhcikgPT4gY2hhciA+PSAweDFFODAwICYmIGNoYXIgPD0gMHgxRThERixcbiAgICAvLyAnQWRsYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweDFFOTAwICYmIGNoYXIgPD0gMHgxRTk1RixcbiAgICAvLyAnSW5kaWMgU2l5YXEgTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUVDNzAgJiYgY2hhciA8PSAweDFFQ0JGLFxuICAgIC8vICdPdHRvbWFuIFNpeWFxIE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFRDAwICYmIGNoYXIgPD0gMHgxRUQ0RixcbiAgICAvLyAnQXJhYmljIE1hdGhlbWF0aWNhbCBBbHBoYWJldGljIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFRTAwICYmIGNoYXIgPD0gMHgxRUVGRixcbiAgICAvLyAnTWFoam9uZyBUaWxlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYwMDAgJiYgY2hhciA8PSAweDFGMDJGLFxuICAgIC8vICdEb21pbm8gVGlsZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMDMwICYmIGNoYXIgPD0gMHgxRjA5RixcbiAgICAvLyAnUGxheWluZyBDYXJkcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYwQTAgJiYgY2hhciA8PSAweDFGMEZGLFxuICAgIC8vICdFbmNsb3NlZCBBbHBoYW51bWVyaWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYxMDAgJiYgY2hhciA8PSAweDFGMUZGLFxuICAgIC8vICdFbmNsb3NlZCBJZGVvZ3JhcGhpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjIwMCAmJiBjaGFyIDw9IDB4MUYyRkYsXG4gICAgLy8gJ01pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgUGljdG9ncmFwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMzAwICYmIGNoYXIgPD0gMHgxRjVGRixcbiAgICAvLyAnRW1vdGljb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjYwMCAmJiBjaGFyIDw9IDB4MUY2NEYsXG4gICAgLy8gJ09ybmFtZW50YWwgRGluZ2JhdHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGNjUwICYmIGNoYXIgPD0gMHgxRjY3RixcbiAgICAvLyAnVHJhbnNwb3J0IGFuZCBNYXAgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY2ODAgJiYgY2hhciA8PSAweDFGNkZGLFxuICAgIC8vICdBbGNoZW1pY2FsIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGNzAwICYmIGNoYXIgPD0gMHgxRjc3RixcbiAgICAvLyAnR2VvbWV0cmljIFNoYXBlcyBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY3ODAgJiYgY2hhciA8PSAweDFGN0ZGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgQXJyb3dzLUMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGODAwICYmIGNoYXIgPD0gMHgxRjhGRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIFN5bWJvbHMgYW5kIFBpY3RvZ3JhcGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjkwMCAmJiBjaGFyIDw9IDB4MUY5RkYsXG4gICAgLy8gJ0NoZXNzIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGQTAwICYmIGNoYXIgPD0gMHgxRkE2RixcbiAgICAvLyAnU3ltYm9scyBhbmQgUGljdG9ncmFwaHMgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUZBNzAgJiYgY2hhciA8PSAweDFGQUZGLFxuICAgIC8vICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMDAwMCAmJiBjaGFyIDw9IDB4MkE2REYsXG4gICAgLy8gJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJBNzAwICYmIGNoYXIgPD0gMHgyQjczRixcbiAgICAvLyAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkI3NDAgJiYgY2hhciA8PSAweDJCODFGLFxuICAgIC8vICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBFJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQjgyMCAmJiBjaGFyIDw9IDB4MkNFQUYsXG4gICAgLy8gJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEYnOiAoY2hhcikgPT4gY2hhciA+PSAweDJDRUIwICYmIGNoYXIgPD0gMHgyRUJFRixcbiAgICAvLyAnQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRjgwMCAmJiBjaGFyIDw9IDB4MkZBMUYsXG4gICAgLy8gJ1RhZ3MnOiAoY2hhcikgPT4gY2hhciA+PSAweEUwMDAwICYmIGNoYXIgPD0gMHhFMDA3RixcbiAgICAvLyAnVmFyaWF0aW9uIFNlbGVjdG9ycyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHhFMDEwMCAmJiBjaGFyIDw9IDB4RTAxRUYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhcnkgUHJpdmF0ZSBVc2UgQXJlYS1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGMDAwMCAmJiBjaGFyIDw9IDB4RkZGRkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhcnkgUHJpdmF0ZSBVc2UgQXJlYS1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDAwMDAgJiYgY2hhciA8PSAweDEwRkZGRixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVuaWNvZGVCbG9ja0xvb2t1cDtcbiIsIi8vIEBmbG93XG5cbi8qIGVzbGludC1kaXNhYmxlIG5ldy1jYXAgKi9cblxuaW1wb3J0IGlzQ2hhciBmcm9tICcuL2lzX2NoYXJfaW5fdW5pY29kZV9ibG9jayc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nKGNoYXJzOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgY2hhcnMpIHtcbiAgICAgICAgaWYgKCFjaGFyQWxsb3dzSWRlb2dyYXBoaWNCcmVha2luZyhjaGFyLmNoYXJDb2RlQXQoMCkpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZShjaGFyczogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgIGlmIChjaGFySGFzVXByaWdodFZlcnRpY2FsT3JpZW50YXRpb24oY2hhci5jaGFyQ29kZUF0KDApKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93c0xldHRlclNwYWNpbmcoY2hhcnM6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgICBpZiAoIWNoYXJBbGxvd3NMZXR0ZXJTcGFjaW5nKGNoYXIuY2hhckNvZGVBdCgwKSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFyQWxsb3dzTGV0dGVyU3BhY2luZyhjaGFyOiBudW1iZXIpIHtcbiAgICBpZiAoaXNDaGFyWydBcmFiaWMnXShjaGFyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc0NoYXJbJ0FyYWJpYyBTdXBwbGVtZW50J10oY2hhcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaXNDaGFyWydBcmFiaWMgRXh0ZW5kZWQtQSddKGNoYXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BJ10oY2hhcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUInXShjaGFyKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFyQWxsb3dzSWRlb2dyYXBoaWNCcmVha2luZyhjaGFyOiBudW1iZXIpIHtcbiAgICAvLyBSZXR1cm4gZWFybHkgZm9yIGNoYXJhY3RlcnMgb3V0c2lkZSBhbGwgaWRlb2dyYXBoaWMgcmFuZ2VzLlxuICAgIGlmIChjaGFyIDwgMHgyRTgwKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoaXNDaGFyWydCb3BvbW9mbyBFeHRlbmRlZCddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydCb3BvbW9mbyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5J10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBSYWRpY2FscyBTdXBwbGVtZW50J10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBTdHJva2VzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIaXJhZ2FuYSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thbmd4aSBSYWRpY2FscyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thdGFrYW5hJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1ZlcnRpY2FsIEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1lpIFJhZGljYWxzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1lpIFN5bGxhYmxlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gVGhlIGZvbGxvd2luZyBsb2dpYyBjb21lcyBmcm9tXG4vLyA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvMTIuMC4wL3VjZC9WZXJ0aWNhbE9yaWVudGF0aW9uLnR4dD4uXG4vLyBLZWVwIGl0IHN5bmNocm9uaXplZCB3aXRoXG4vLyA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVUNEL2xhdGVzdC91Y2QvVmVydGljYWxPcmllbnRhdGlvbi50eHQ+LlxuLy8gVGhlIGRhdGEgZmlsZSBkZW5vdGVzIHdpdGggw6LCgMKcVcOiwoDCnSBvciDDosKAwpxUdcOiwoDCnSBhbnkgY29kZXBvaW50IHRoYXQgbWF5IGJlIGRyYXduXG4vLyB1cHJpZ2h0IGluIHZlcnRpY2FsIHRleHQgYnV0IGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gdXByaWdodCBhbmRcbi8vIMOiwoDCnG5ldXRyYWzDosKAwp0gY2hhcmFjdGVycy5cblxuLy8gQmxvY2tzIGluIHRoZSBVbmljb2RlIHN1cHBsZW1lbnRhcnkgcGxhbmVzIGFyZSBleGNsdWRlZCBmcm9tIHRoaXMgbW9kdWxlIGR1ZVxuLy8gdG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsL2lzc3Vlcy8yOT4uXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBVbmljb2RlIGNvZGVwb2ludCBpZGVudGlmaWVzIGEgY2hhcmFjdGVyIHdpdGhcbiAqIHVwcmlnaHQgb3JpZW50YXRpb24uXG4gKlxuICogQSBjaGFyYWN0ZXIgaGFzIHVwcmlnaHQgb3JpZW50YXRpb24gaWYgaXQgaXMgZHJhd24gdXByaWdodCAodW5yb3RhdGVkKVxuICogd2hldGhlciB0aGUgbGluZSBpcyBvcmllbnRlZCBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseSwgZXZlbiBpZiBib3RoXG4gKiBhZGphY2VudCBjaGFyYWN0ZXJzIGNhbiBiZSByb3RhdGVkLiBGb3IgZXhhbXBsZSwgYSBDaGluZXNlIGNoYXJhY3RlciBpc1xuICogYWx3YXlzIGRyYXduIHVwcmlnaHQuIEFuIHVwcmlnaHRseSBvcmllbnRlZCBjaGFyYWN0ZXIgY2F1c2VzIGFuIGFkamFjZW50XG4gKiDDosKAwpxuZXV0cmFsw6LCgMKdIGNoYXJhY3RlciB0byBiZSBkcmF3biB1cHJpZ2h0IGFzIHdlbGwuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXI6IG51bWJlcikge1xuICAgIGlmIChjaGFyID09PSAweDAyRUEgLyogbW9kaWZpZXIgbGV0dGVyIHlpbiBkZXBhcnRpbmcgdG9uZSBtYXJrICovIHx8XG4gICAgICAgIGNoYXIgPT09IDB4MDJFQiAvKiBtb2RpZmllciBsZXR0ZXIgeWFuZyBkZXBhcnRpbmcgdG9uZSBtYXJrICovKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBlYXJseSBmb3IgY2hhcmFjdGVycyBvdXRzaWRlIGFsbCByYW5nZXMgd2hvc2UgY2hhcmFjdGVycyByZW1haW5cbiAgICAvLyB1cHJpZ2h0IGluIHZlcnRpY2FsIHdyaXRpbmcgbW9kZS5cbiAgICBpZiAoY2hhciA8IDB4MTEwMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGlzQ2hhclsnQm9wb21vZm8gRXh0ZW5kZWQnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQm9wb21vZm8nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMnXShjaGFyKSkge1xuICAgICAgICBpZiAoISgoY2hhciA+PSAweEZFNDkgLyogZGFzaGVkIG92ZXJsaW5lICovICYmIGNoYXIgPD0gMHhGRTRGKSAvKiB3YXZ5IGxvdyBsaW5lICovKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgUmFkaWNhbHMgU3VwcGxlbWVudCddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgU3Ryb2tlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24nXShjaGFyKSkge1xuICAgICAgICBpZiAoISgoY2hhciA+PSAweDMwMDggLyogbGVmdCBhbmdsZSBicmFja2V0ICovICYmIGNoYXIgPD0gMHgzMDExKSAvKiByaWdodCBibGFjayBsZW50aWN1bGFyIGJyYWNrZXQgKi8pICYmXG4gICAgICAgICAgICAhKChjaGFyID49IDB4MzAxNCAvKiBsZWZ0IHRvcnRvaXNlIHNoZWxsIGJyYWNrZXQgKi8gJiYgY2hhciA8PSAweDMwMUYpIC8qIGxvdyBkb3VibGUgcHJpbWUgcXVvdGF0aW9uIG1hcmsgKi8pICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweDMwMzAgLyogd2F2eSBkYXNoICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbmd1bCBKYW1vIEV4dGVuZGVkLUEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYW5ndWwgSmFtbyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYW5ndWwgU3lsbGFibGVzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hpcmFnYW5hJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0lkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2FuYnVuJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thbmd4aSBSYWRpY2FscyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thdGFrYW5hJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKGNoYXIgIT09IDB4MzBGQyAvKiBrYXRha2FuYS1oaXJhZ2FuYSBwcm9sb25nZWQgc291bmQgbWFyayAqLykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMnXShjaGFyKSkge1xuICAgICAgICBpZiAoY2hhciAhPT0gMHhGRjA4IC8qIGZ1bGx3aWR0aCBsZWZ0IHBhcmVudGhlc2lzICovICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGMDkgLyogZnVsbHdpZHRoIHJpZ2h0IHBhcmVudGhlc2lzICovICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGMEQgLyogZnVsbHdpZHRoIGh5cGhlbi1taW51cyAqLyAmJlxuICAgICAgICAgICAgISgoY2hhciA+PSAweEZGMUEgLyogZnVsbHdpZHRoIGNvbG9uICovICYmIGNoYXIgPD0gMHhGRjFFKSAvKiBmdWxsd2lkdGggZ3JlYXRlci10aGFuIHNpZ24gKi8pICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGM0IgLyogZnVsbHdpZHRoIGxlZnQgc3F1YXJlIGJyYWNrZXQgKi8gJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkYzRCAvKiBmdWxsd2lkdGggcmlnaHQgc3F1YXJlIGJyYWNrZXQgKi8gJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkYzRiAvKiBmdWxsd2lkdGggbG93IGxpbmUgKi8gJiZcbiAgICAgICAgICAgICEoY2hhciA+PSAweEZGNUIgLyogZnVsbHdpZHRoIGxlZnQgY3VybHkgYnJhY2tldCAqLyAmJiBjaGFyIDw9IDB4RkZERikgJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkZFMyAvKiBmdWxsd2lkdGggbWFjcm9uICovICYmXG4gICAgICAgICAgICAhKGNoYXIgPj0gMHhGRkU4IC8qIGhhbGZ3aWR0aCBmb3JtcyBsaWdodCB2ZXJ0aWNhbCAqLyAmJiBjaGFyIDw9IDB4RkZFRikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ1NtYWxsIEZvcm0gVmFyaWFudHMnXShjaGFyKSkge1xuICAgICAgICBpZiAoISgoY2hhciA+PSAweEZFNTggLyogc21hbGwgZW0gZGFzaCAqLyAmJiBjaGFyIDw9IDB4RkU1RSkgLyogc21hbGwgcmlnaHQgdG9ydG9pc2Ugc2hlbGwgYnJhY2tldCAqLykgJiZcbiAgICAgICAgICAgICEoKGNoYXIgPj0gMHhGRTYzIC8qIHNtYWxsIGh5cGhlbi1taW51cyAqLyAmJiBjaGFyIDw9IDB4RkU2NikgLyogc21hbGwgZXF1YWxzIHNpZ24gKi8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1VuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWQnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnVmVydGljYWwgRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnWWlqaW5nIEhleGFncmFtIFN5bWJvbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnWWkgU3lsbGFibGVzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1lpIFJhZGljYWxzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gVW5pY29kZSBjb2RlcG9pbnQgaWRlbnRpZmllcyBhIGNoYXJhY3RlciB3aXRoXG4gKiBuZXV0cmFsIG9yaWVudGF0aW9uLlxuICpcbiAqIEEgY2hhcmFjdGVyIGhhcyBuZXV0cmFsIG9yaWVudGF0aW9uIGlmIGl0IG1heSBiZSBkcmF3biByb3RhdGVkIG9yIHVucm90YXRlZFxuICogd2hlbiB0aGUgbGluZSBpcyBvcmllbnRlZCB2ZXJ0aWNhbGx5LCBkZXBlbmRpbmcgb24gdGhlIG9yaWVudGF0aW9uIG9mIHRoZVxuICogYWRqYWNlbnQgY2hhcmFjdGVycy4gRm9yIGV4YW1wbGUsIGFsb25nIGEgdmVydGljbGx5IG9yaWVudGVkIGxpbmUsIHRoZSB2dWxnYXJcbiAqIGZyYWN0aW9uIMOCwr0gaXMgZHJhd24gdXByaWdodCBhbW9uZyBDaGluZXNlIGNoYXJhY3RlcnMgYnV0IHJvdGF0ZWQgYW1vbmcgTGF0aW5cbiAqIGxldHRlcnMuIEEgbmV1dHJhbGx5IG9yaWVudGVkIGNoYXJhY3RlciBkb2VzIG5vdCBpbmZsdWVuY2Ugd2hldGhlciBhblxuICogYWRqYWNlbnQgY2hhcmFjdGVyIGlzIGRyYXduIHVwcmlnaHQgb3Igcm90YXRlZC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFySGFzTmV1dHJhbFZlcnRpY2FsT3JpZW50YXRpb24oY2hhcjogbnVtYmVyKSB7XG4gICAgaWYgKGlzQ2hhclsnTGF0aW4tMSBTdXBwbGVtZW50J10oY2hhcikpIHtcbiAgICAgICAgaWYgKGNoYXIgPT09IDB4MDBBNyAvKiBzZWN0aW9uIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBBOSAvKiBjb3B5cmlnaHQgc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEFFIC8qIHJlZ2lzdGVyZWQgc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEIxIC8qIHBsdXMtbWludXMgc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEJDIC8qIHZ1bGdhciBmcmFjdGlvbiBvbmUgcXVhcnRlciAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEJEIC8qIHZ1bGdhciBmcmFjdGlvbiBvbmUgaGFsZiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEJFIC8qIHZ1bGdhciBmcmFjdGlvbiB0aHJlZSBxdWFydGVycyAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEQ3IC8qIG11bHRpcGxpY2F0aW9uIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBGNyAvKiBkaXZpc2lvbiBzaWduICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydHZW5lcmFsIFB1bmN0dWF0aW9uJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKGNoYXIgPT09IDB4MjAxNiAvKiBkb3VibGUgdmVydGljYWwgbGluZSAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDIwIC8qIGRhZ2dlciAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDIxIC8qIGRvdWJsZSBkYWdnZXIgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAzMCAvKiBwZXIgbWlsbGUgc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDMxIC8qIHBlciB0ZW4gdGhvdXNhbmQgc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDNCIC8qIHJlZmVyZW5jZSBtYXJrICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwM0MgLyogZG91YmxlIGV4Y2xhbWF0aW9uIG1hcmsgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjA0MiAvKiBhc3RlcmlzbSAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDQ3IC8qIGRvdWJsZSBxdWVzdGlvbiBtYXJrICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwNDggLyogcXVlc3Rpb24gZXhjbGFtYXRpb24gbWFyayAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDQ5IC8qIGV4Y2xhbWF0aW9uIHF1ZXN0aW9uIG1hcmsgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjA1MSAvKiB0d28gYXN0ZXJpc2tzIGFsaWduZWQgdmVydGljYWxseSAqLykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnTGV0dGVybGlrZSBTeW1ib2xzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ051bWJlciBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCddKGNoYXIpKSB7XG4gICAgICAgIGlmICgoY2hhciA+PSAweDIzMDAgLyogZGlhbWV0ZXIgc2lnbiAqLyAmJiBjaGFyIDw9IDB4MjMwNyAvKiB3YXZ5IGxpbmUgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzMEMgLyogYm90dG9tIHJpZ2h0IGNyb3AgKi8gJiYgY2hhciA8PSAweDIzMUYgLyogYm90dG9tIHJpZ2h0IGNvcm5lciAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjMyNCAvKiB1cCBhcnJvd2hlYWQgYmV0d2VlbiB0d28gaG9yaXpvbnRhbCBiYXJzICovICYmIGNoYXIgPD0gMHgyMzI4IC8qIGtleWJvYXJkICovKSB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMzJCIC8qIGVyYXNlIHRvIHRoZSBsZWZ0ICovIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzN0QgLyogc2hvdWxkZXJlZCBvcGVuIGJveCAqLyAmJiBjaGFyIDw9IDB4MjM5QSAvKiBjbGVhciBzY3JlZW4gc3ltYm9sICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyM0JFIC8qIGRlbnRpc3RyeSBzeW1ib2wgbGlnaHQgdmVydGljYWwgYW5kIHRvcCByaWdodCAqLyAmJiBjaGFyIDw9IDB4MjNDRCAvKiBzcXVhcmUgZm9vdCAqLykgfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjNDRiAvKiBlamVjdCBzeW1ib2wgKi8gfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjNEMSAvKiBtZXRyaWNhbCBicmV2ZSAqLyAmJiBjaGFyIDw9IDB4MjNEQiAvKiBmdXNlICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyM0UyIC8qIHdoaXRlIHRyYXBleml1bSAqLyAmJiBjaGFyIDw9IDB4MjNGRikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0NvbnRyb2wgUGljdHVyZXMnXShjaGFyKSAmJiBjaGFyICE9PSAweDI0MjMgLyogb3BlbiBib3ggKi8pIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ09wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0VuY2xvc2VkIEFscGhhbnVtZXJpY3MnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnR2VvbWV0cmljIFNoYXBlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydNaXNjZWxsYW5lb3VzIFN5bWJvbHMnXShjaGFyKSkge1xuICAgICAgICBpZiAoISgoY2hhciA+PSAweDI2MUEgLyogYmxhY2sgbGVmdCBwb2ludGluZyBpbmRleCAqLyAmJiBjaGFyIDw9IDB4MjYxRikgLyogd2hpdGUgZG93biBwb2ludGluZyBpbmRleCAqLykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ01pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKChjaGFyID49IDB4MkIxMiAvKiBzcXVhcmUgd2l0aCB0b3AgaGFsZiBibGFjayAqLyAmJiBjaGFyIDw9IDB4MkIyRiAvKiB3aGl0ZSB2ZXJ0aWNhbCBlbGxpcHNlICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyQjUwIC8qIHdoaXRlIG1lZGl1bSBzdGFyICovICYmIGNoYXIgPD0gMHgyQjU5IC8qIGhlYXZ5IGNpcmNsZWQgc2FsdGlyZSAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MkJCOCAvKiB1cHdhcmRzIHdoaXRlIGFycm93IGZyb20gYmFyIHdpdGggaG9yaXpvbnRhbCBiYXIgKi8gJiYgY2hhciA8PSAweDJCRUIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2F0YWthbmEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnUHJpdmF0ZSBVc2UgQXJlYSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydTbWFsbCBGb3JtIFZhcmlhbnRzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKGNoYXIgPT09IDB4MjIxRSAvKiBpbmZpbml0eSAqLyB8fFxuICAgICAgICBjaGFyID09PSAweDIyMzQgLyogdGhlcmVmb3JlICovIHx8XG4gICAgICAgIGNoYXIgPT09IDB4MjIzNSAvKiBiZWNhdXNlICovIHx8XG4gICAgICAgIChjaGFyID49IDB4MjcwMCAvKiBibGFjayBzYWZldHkgc2Npc3NvcnMgKi8gJiYgY2hhciA8PSAweDI3NjcgLyogcm90YXRlZCBmbG9yYWwgaGVhcnQgYnVsbGV0ICovKSB8fFxuICAgICAgICAoY2hhciA+PSAweDI3NzYgLyogZGluZ2JhdCBuZWdhdGl2ZSBjaXJjbGVkIGRpZ2l0IG9uZSAqLyAmJiBjaGFyIDw9IDB4Mjc5MyAvKiBkaW5nYmF0IG5lZ2F0aXZlIGNpcmNsZWQgc2Fucy1zZXJpZiBudW1iZXIgdGVuICovKSB8fFxuICAgICAgICBjaGFyID09PSAweEZGRkMgLyogb2JqZWN0IHJlcGxhY2VtZW50IGNoYXJhY3RlciAqLyB8fFxuICAgICAgICBjaGFyID09PSAweEZGRkQgLyogcmVwbGFjZW1lbnQgY2hhcmFjdGVyICovKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIFVuaWNvZGUgY29kZXBvaW50IGlkZW50aWZpZXMgYSBjaGFyYWN0ZXIgd2l0aFxuICogcm90YXRlZCBvcmllbnRhdGlvbi5cbiAqXG4gKiBBIGNoYXJhY3RlciBoYXMgcm90YXRlZCBvcmllbnRhdGlvbiBpZiBpdCBpcyBkcmF3biByb3RhdGVkIHdoZW4gdGhlIGxpbmUgaXNcbiAqIG9yaWVudGVkIHZlcnRpY2FsbHksIGV2ZW4gaWYgYm90aCBhZGphY2VudCBjaGFyYWN0ZXJzIGFyZSB1cHJpZ2h0LiBGb3JcbiAqIGV4YW1wbGUsIGEgTGF0aW4gbGV0dGVyIGlzIGRyYXduIHJvdGF0ZWQgYWxvbmcgYSB2ZXJ0aWNhbCBsaW5lLiBBIHJvdGF0ZWRcbiAqIGNoYXJhY3RlciBjYXVzZXMgYW4gYWRqYWNlbnQgw6LCgMKcbmV1dHJhbMOiwoDCnSBjaGFyYWN0ZXIgdG8gYmUgZHJhd24gcm90YXRlZCBhcyB3ZWxsLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJIYXNSb3RhdGVkVmVydGljYWxPcmllbnRhdGlvbihjaGFyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gIShjaGFySGFzVXByaWdodFZlcnRpY2FsT3JpZW50YXRpb24oY2hhcikgfHxcbiAgICAgICAgICAgICBjaGFySGFzTmV1dHJhbFZlcnRpY2FsT3JpZW50YXRpb24oY2hhcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhckluQ29tcGxleFNoYXBpbmdTY3JpcHQoY2hhcjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzQ2hhclsnQXJhYmljJ10oY2hhcikgfHxcbiAgICAgICAgICAgaXNDaGFyWydBcmFiaWMgU3VwcGxlbWVudCddKGNoYXIpIHx8XG4gICAgICAgICAgIGlzQ2hhclsnQXJhYmljIEV4dGVuZGVkLUEnXShjaGFyKSB8fFxuICAgICAgICAgICBpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSddKGNoYXIpIHx8XG4gICAgICAgICAgIGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CJ10oY2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFySW5TdXBwb3J0ZWRTY3JpcHQoY2hhcjogbnVtYmVyLCBjYW5SZW5kZXJSVEw6IGJvb2xlYW4pIHtcbiAgICAvLyBUaGlzIGlzIGEgcm91Z2ggaGV1cmlzdGljOiB3aGV0aGVyIHdlIFwiY2FuIHJlbmRlclwiIGEgc2NyaXB0XG4gICAgLy8gYWN0dWFsbHkgZGVwZW5kcyBvbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgZm9udCBiZWluZyB1c2VkXG4gICAgLy8gYW5kIHdoZXRoZXIgZGlmZmVyZW5jZXMgZnJvbSB0aGUgaWRlYWwgcmVuZGVyaW5nIGFyZSBjb25zaWRlcmVkXG4gICAgLy8gc2VtYW50aWNhbGx5IHNpZ25pZmljYW50LlxuXG4gICAgLy8gRXZlbiBpbiBMYXRpbiBzY3JpcHQsIHdlIFwiY2FuJ3QgcmVuZGVyXCIgY29tYmluYXRpb25zIHN1Y2ggYXMgdGhlIGZpXG4gICAgLy8gbGlnYXR1cmUsIGJ1dCB3ZSBkb24ndCBjb25zaWRlciB0aGF0IHNlbWFudGljYWxseSBzaWduaWZpY2FudC5cbiAgICBpZiAoIWNhblJlbmRlclJUTCAmJlxuICAgICAgICAoKGNoYXIgPj0gMHgwNTkwICYmIGNoYXIgPD0gMHgwOEZGKSB8fFxuICAgICAgICAgaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEnXShjaGFyKSB8fFxuICAgICAgICAgaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUInXShjaGFyKSkpIHtcbiAgICAgICAgLy8gTWFpbiBibG9ja3MgZm9yIEhlYnJldywgQXJhYmljLCBUaGFhbmEgYW5kIG90aGVyIFJUTCBzY3JpcHRzXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKChjaGFyID49IDB4MDkwMCAmJiBjaGFyIDw9IDB4MERGRikgfHxcbiAgICAgICAgLy8gTWFpbiBibG9ja3MgZm9yIEluZGljIHNjcmlwdHMgYW5kIFNpbmhhbGFcbiAgICAgICAgKGNoYXIgPj0gMHgwRjAwICYmIGNoYXIgPD0gMHgxMDlGKSB8fFxuICAgICAgICAvLyBNYWluIGJsb2NrcyBmb3IgVGliZXRhbiBhbmQgTXlhbm1hclxuICAgICAgICBpc0NoYXJbJ0tobWVyJ10oY2hhcikpIHtcbiAgICAgICAgLy8gVGhlc2UgYmxvY2tzIGNvdmVyIGNvbW1vbiBzY3JpcHRzIHRoYXQgcmVxdWlyZVxuICAgICAgICAvLyBjb21wbGV4IHRleHQgc2hhcGluZywgYmFzZWQgb24gdW5pY29kZSBzY3JpcHQgbWV0YWRhdGE6XG4gICAgICAgIC8vIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3MvY2xkci90cnVuay9jb21tb24vcHJvcGVydGllcy9zY3JpcHRNZXRhZGF0YS50eHRcbiAgICAgICAgLy8gd2hlcmUgXCJXZWIgUmFuayA8PSAzMlwiIFwiU2hhcGluZyBSZXF1aXJlZCA9IFlFU1wiXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ0luU3VwcG9ydGVkU2NyaXB0KGNoYXJzOiBzdHJpbmcsIGNhblJlbmRlclJUTDogYm9vbGVhbikge1xuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgICBpZiAoIWNoYXJJblN1cHBvcnRlZFNjcmlwdChjaGFyLmNoYXJDb2RlQXQoMCksIGNhblJlbmRlclJUTCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuXG5sZXQgcGx1Z2luUmVxdWVzdGVkID0gZmFsc2U7XG5sZXQgcGx1Z2luVVJMID0gbnVsbDtcbmxldCBmb3JlZ3JvdW5kTG9hZENvbXBsZXRlID0gZmFsc2U7XG5cbmV4cG9ydCBjb25zdCBldmVudGVkID0gbmV3IEV2ZW50ZWQoKTtcblxudHlwZSBDb21wbGV0aW9uQ2FsbGJhY2sgPSAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZDtcbnR5cGUgRXJyb3JDYWxsYmFjayA9IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG5cbmxldCBfY29tcGxldGlvbkNhbGxiYWNrO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHkgPSBmdW5jdGlvbihcbiAgICBjYWxsYmFjazogKGFyZ3M6IHtwbHVnaW5VUkw6IHN0cmluZywgY29tcGxldGlvbkNhbGxiYWNrOiBDb21wbGV0aW9uQ2FsbGJhY2t9KSA9PiB2b2lkXG4pIHtcbiAgICBpZiAocGx1Z2luVVJMKSB7XG4gICAgICAgIGNhbGxiYWNrKHtwbHVnaW5VUkwsIGNvbXBsZXRpb25DYWxsYmFjazogX2NvbXBsZXRpb25DYWxsYmFja30pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50ZWQub25jZSgncGx1Z2luQXZhaWxhYmxlJywgY2FsbGJhY2spO1xuICAgIH1cbiAgICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJSVExUZXh0UGx1Z2luID0gZnVuY3Rpb24oKSB7XG4gICAgcGx1Z2luUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgcGx1Z2luVVJMID0gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRSVExUZXh0UGx1Z2luID0gZnVuY3Rpb24odXJsOiBzdHJpbmcsIGNhbGxiYWNrOiBFcnJvckNhbGxiYWNrKSB7XG4gICAgaWYgKHBsdWdpblJlcXVlc3RlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFJUTFRleHRQbHVnaW4gY2Fubm90IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4nKTtcbiAgICB9XG4gICAgcGx1Z2luUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICBwbHVnaW5VUkwgPSBicm93c2VyLnJlc29sdmVVUkwodXJsKTtcbiAgICBfY29tcGxldGlvbkNhbGxiYWNrID0gKGVycm9yPzogRXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBDbGVhciBsb2FkZWQgc3RhdGUgdG8gYWxsb3cgcmV0cmllc1xuICAgICAgICAgICAgY2xlYXJSVExUZXh0UGx1Z2luKCk7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDYWxsZWQgb25jZSBmb3IgZWFjaCB3b3JrZXJcbiAgICAgICAgICAgIGZvcmVncm91bmRMb2FkQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBldmVudGVkLmZpcmUobmV3IEV2ZW50KCdwbHVnaW5BdmFpbGFibGUnLCB7cGx1Z2luVVJMLCBjb21wbGV0aW9uQ2FsbGJhY2s6IF9jb21wbGV0aW9uQ2FsbGJhY2t9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGx1Z2luOiB7XG4gICAgYXBwbHlBcmFiaWNTaGFwaW5nOiA/RnVuY3Rpb24sXG4gICAgcHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0OiA/KHN0cmluZywgQXJyYXk8bnVtYmVyPikgPT4gQXJyYXk8c3RyaW5nPixcbiAgICBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ6ID8oc3RyaW5nLCBBcnJheTxudW1iZXI+LCBBcnJheTxudW1iZXI+KSA9PiBBcnJheTxbc3RyaW5nLCBBcnJheTxudW1iZXI+XT4sXG4gICAgaXNMb2FkZWQ6ICgpID0+IGJvb2xlYW5cbn0gPSB7XG4gICAgYXBwbHlBcmFiaWNTaGFwaW5nOiBudWxsLFxuICAgIHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDogbnVsbCxcbiAgICBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ6IG51bGwsXG4gICAgaXNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiBmb3JlZ3JvdW5kTG9hZENvbXBsZXRlIHx8ICAgICAgIC8vIEZvcmVncm91bmQ6IGxvYWRlZCBpZiB0aGUgY29tcGxldGlvbiBjYWxsYmFjayByZXR1cm5lZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgICAgIHBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmcgIT0gbnVsbDsgLy8gQmFja2dyb3VuZDogbG9hZGVkIGlmIHRoZSBwbHVnaW4gZnVuY3Rpb25zIGhhdmUgYmVlbiBjb21waWxlZFxuICAgIH1cbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgWm9vbUhpc3RvcnkgZnJvbSAnLi96b29tX2hpc3RvcnknO1xuaW1wb3J0IHtpc1N0cmluZ0luU3VwcG9ydGVkU2NyaXB0fSBmcm9tICcuLi91dGlsL3NjcmlwdF9kZXRlY3Rpb24nO1xuaW1wb3J0IHtwbHVnaW4gYXMgcnRsVGV4dFBsdWdpbn0gZnJvbSAnLi4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5cbmltcG9ydCB0eXBlIHtUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIENyb3NzZmFkZVBhcmFtZXRlcnMgPSB7XG4gICAgZnJvbVNjYWxlOiBudW1iZXIsXG4gICAgdG9TY2FsZTogbnVtYmVyLFxuICAgIHQ6IG51bWJlclxufTtcblxuY2xhc3MgRXZhbHVhdGlvblBhcmFtZXRlcnMge1xuICAgIHpvb206IG51bWJlcjtcbiAgICBub3c6IG51bWJlcjtcbiAgICBmYWRlRHVyYXRpb246IG51bWJlcjtcbiAgICB6b29tSGlzdG9yeTogWm9vbUhpc3Rvcnk7XG4gICAgdHJhbnNpdGlvbjogVHJhbnNpdGlvblNwZWNpZmljYXRpb247XG5cbiAgICAvLyBcIm9wdGlvbnNcIiBtYXkgYWxzbyBiZSBhbm90aGVyIEV2YWx1YXRpb25QYXJhbWV0ZXJzIHRvIGNvcHksIHNlZSBDcm9zc0ZhZGVkUHJvcGVydHkucG9zc2libHlFdmFsdWF0ZVxuICAgIGNvbnN0cnVjdG9yKHpvb206IG51bWJlciwgb3B0aW9ucz86ICopIHtcbiAgICAgICAgdGhpcy56b29tID0gem9vbTtcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5ub3cgPSBvcHRpb25zLm5vdztcbiAgICAgICAgICAgIHRoaXMuZmFkZUR1cmF0aW9uID0gb3B0aW9ucy5mYWRlRHVyYXRpb247XG4gICAgICAgICAgICB0aGlzLnpvb21IaXN0b3J5ID0gb3B0aW9ucy56b29tSGlzdG9yeTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IG9wdGlvbnMudHJhbnNpdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm93ID0gMDtcbiAgICAgICAgICAgIHRoaXMuZmFkZUR1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIHRoaXMuem9vbUhpc3RvcnkgPSBuZXcgWm9vbUhpc3RvcnkoKTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNTdXBwb3J0ZWRTY3JpcHQoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nSW5TdXBwb3J0ZWRTY3JpcHQoc3RyLCBydGxUZXh0UGx1Z2luLmlzTG9hZGVkKCkpO1xuICAgIH1cblxuICAgIGNyb3NzRmFkaW5nRmFjdG9yKCkge1xuICAgICAgICBpZiAodGhpcy5mYWRlRHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKCh0aGlzLm5vdyAtIHRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tVGltZSkgLyB0aGlzLmZhZGVEdXJhdGlvbiwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk6IENyb3NzZmFkZVBhcmFtZXRlcnMge1xuICAgICAgICBjb25zdCB6ID0gdGhpcy56b29tO1xuICAgICAgICBjb25zdCBmcmFjdGlvbiA9IHogLSBNYXRoLmZsb29yKHopO1xuICAgICAgICBjb25zdCB0ID0gdGhpcy5jcm9zc0ZhZGluZ0ZhY3RvcigpO1xuXG4gICAgICAgIHJldHVybiB6ID4gdGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20gP1xuICAgICAgICAgICAge2Zyb21TY2FsZTogMiwgdG9TY2FsZTogMSwgdDogZnJhY3Rpb24gKyAoMSAtIGZyYWN0aW9uKSAqIHR9IDpcbiAgICAgICAgICAgIHtmcm9tU2NhbGU6IDAuNSwgdG9TY2FsZTogMSwgdDogMSAtICgxIC0gdCkgKiBmcmFjdGlvbn07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFdmFsdWF0aW9uUGFyYW1ldGVycztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtjbG9uZSwgZXh0ZW5kLCBlYXNlQ3ViaWNJbk91dH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCAqIGFzIGludGVycG9sYXRlIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQge25vcm1hbGl6ZVByb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9zdHlsZS1zcGVjJztcbmltcG9ydCB0eXBlIHtcbiAgICBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbixcbiAgICBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIEZlYXR1cmUsXG4gICAgRmVhdHVyZVN0YXRlLFxuICAgIFN0eWxlUHJvcGVydHlFeHByZXNzaW9uLFxuICAgIFNvdXJjZUV4cHJlc3Npb24sXG4gICAgQ29tcG9zaXRlRXhwcmVzc2lvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuXG50eXBlIFRpbWVQb2ludCA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgQ3Jvc3NGYWRlZDxUPiA9IHtcbiAgICB0bzogVCxcbiAgICBmcm9tOiBUXG59O1xuXG4vKipcbiAqIEltcGxlbWVudHMgYSBudW1iZXIgb2YgY2xhc3NlcyB0aGF0IGRlZmluZSBzdGF0ZSBhbmQgYmVoYXZpb3IgZm9yIHBhaW50IGFuZCBsYXlvdXQgcHJvcGVydGllcywgbW9zdFxuICogaW1wb3J0YW50bHkgdGhlaXIgcmVzcGVjdGl2ZSBldmFsdWF0aW9uIGNoYWluczpcbiAqXG4gKiAgICAgICBUcmFuc2l0aW9uYWJsZSBwYWludCBwcm9wZXJ0eSB2YWx1ZVxuICogICAgIMOiwobCkiBUcmFuc2l0aW9uaW5nIHBhaW50IHByb3BlcnR5IHZhbHVlXG4gKiAgICAgw6LChsKSIFBvc3NpYmx5IGV2YWx1YXRlZCBwYWludCBwcm9wZXJ0eSB2YWx1ZVxuICogICAgIMOiwobCkiBGdWxseSBldmFsdWF0ZWQgcGFpbnQgcHJvcGVydHkgdmFsdWVcbiAqXG4gKiAgICAgICBMYXlvdXQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgUG9zc2libHkgZXZhbHVhdGVkIGxheW91dCBwcm9wZXJ0eSB2YWx1ZVxuICogICAgIMOiwobCkiBGdWxseSBldmFsdWF0ZWQgbGF5b3V0IHByb3BlcnR5IHZhbHVlXG4gKlxuICogQG1vZHVsZVxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqICBJbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGBQcm9wZXJ0eWAgaW50ZXJmYWNlOlxuICpcbiAqICAqIEhvbGQgbWV0YWRhdGEgYWJvdXQgYSBwcm9wZXJ0eSB0aGF0J3MgaW5kZXBlbmRlbnQgb2YgYW55IHNwZWNpZmljIHZhbHVlOiBzdHVmZiBsaWtlIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSxcbiAqICAgIHRoZSBkZWZhdWx0IHZhbHVlLCBldGMuIFRoaXMgY29tZXMgZnJvbSB0aGUgc3R5bGUgc3BlY2lmaWNhdGlvbiBKU09OLlxuICogICogRGVmaW5lIGJlaGF2aW9yIHRoYXQgbmVlZHMgdG8gYmUgcG9seW1vcnBoaWMgYWNyb3NzIGRpZmZlcmVudCBwcm9wZXJ0aWVzOiBcInBvc3NpYmx5IGV2YWx1YXRpbmdcIlxuICogICAgYW4gaW5wdXQgdmFsdWUgKHNlZSBiZWxvdyksIGFuZCBpbnRlcnBvbGF0aW5nIGJldHdlZW4gdHdvIHBvc3NpYmx5LWV2YWx1dGVkIHZhbHVlcy5cbiAqXG4gKiAgVGhlIHR5cGUgYFRgIGlzIHRoZSBmdWxseS1ldmFsdWF0ZWQgdmFsdWUgdHlwZSAoZS5nLiBgbnVtYmVyYCwgYHN0cmluZ2AsIGBDb2xvcmApLlxuICogIFRoZSB0eXBlIGBSYCBpcyB0aGUgaW50ZXJtZWRpYXRlIFwicG9zc2libHkgZXZhbHVhdGVkXCIgdmFsdWUgdHlwZS4gU2VlIGJlbG93LlxuICpcbiAqICBUaGVyZSBhcmUgdHdvIG1haW4gaW1wbGVtZW50YXRpb25zIG9mIHRoZSBpbnRlcmZhY2UgLS0gb25lIGZvciBwcm9wZXJ0aWVzIHRoYXQgYWxsb3cgZGF0YS1kcml2ZW4gdmFsdWVzLFxuICogIGFuZCBvbmUgZm9yIHByb3BlcnRpZXMgdGhhdCBkb24ndC4gVGhlcmUgYXJlIGEgZmV3IFwic3BlY2lhbCBjYXNlXCIgaW1wbGVtZW50YXRpb25zIGFzIHdlbGw6IG9uZSBmb3IgcHJvcGVydGllc1xuICogIHdoaWNoIGNyb3NzLWZhZGUgYmV0d2VlbiB0d28gdmFsdWVzIHJhdGhlciB0aGFuIGludGVycG9sYXRpbmcsIG9uZSBmb3IgYGhlYXRtYXAtY29sb3JgIGFuZCBgbGluZS1ncmFkaWVudGAsXG4gKiAgYW5kIG9uZSBmb3IgYGxpZ2h0LXBvc2l0aW9uYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5PFQsIFI+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcbiAgICBwb3NzaWJseUV2YWx1YXRlKHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFI7XG4gICAgaW50ZXJwb2xhdGUoYTogUiwgYjogUiwgdDogbnVtYmVyKTogUjtcbn1cblxuLyoqXG4gKiAgYFByb3BlcnR5VmFsdWVgIHJlcHJlc2VudHMgdGhlIHZhbHVlIHBhcnQgb2YgYSBwcm9wZXJ0eSBrZXktdmFsdWUgdW5pdC4gSXQncyB1c2VkIHRvIHJlcHJlc2VudCBib3RoXG4gKiAgcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0eSB2YWx1ZXMsIGFuZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZWlyIHByb3BlcnR5IHN1cHBvcnRzIGRhdGEtZHJpdmVuXG4gKiAgZXhwcmVzc2lvbnMuXG4gKlxuICogIGBQcm9wZXJ0eVZhbHVlYCBzdG9yZXMgdGhlIHJhdyBpbnB1dCB2YWx1ZSBhcyBzZWVuIGluIGEgc3R5bGUgb3IgYSBydW50aW1lIHN0eWxpbmcgQVBJIGNhbGwsIGkuZS4gb25lIG9mIHRoZVxuICogIGZvbGxvd2luZzpcbiAqXG4gKiAgICAqIEEgY29uc3RhbnQgdmFsdWUgb2YgdGhlIHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBwcm9wZXJ0eVxuICogICAgKiBBIGZ1bmN0aW9uIHdoaWNoIHByb2R1Y2VzIGEgdmFsdWUgb2YgdGhhdCB0eXBlIChidXQgZnVuY3Rpb25zIGFyZSBxdWFzaS1kZXByZWNhdGVkIGluIGZhdm9yIG9mIGV4cHJlc3Npb25zKVxuICogICAgKiBBbiBleHByZXNzaW9uIHdoaWNoIHByb2R1Y2VzIGEgdmFsdWUgb2YgdGhhdCB0eXBlXG4gKiAgICAqIFwidW5kZWZpbmVkXCIvXCJub3QgcHJlc2VudFwiLCBpbiB3aGljaCBjYXNlIHRoZSBwcm9wZXJ0eSBpcyBhc3N1bWVkIHRvIHRha2Ugb24gaXRzIGRlZmF1bHQgdmFsdWUuXG4gKlxuICogIEluIGFkZGl0aW9uIHRvIHN0b3JpbmcgdGhlIG9yaWdpbmFsIGlucHV0IHZhbHVlLCBgUHJvcGVydHlWYWx1ZWAgYWxzbyBzdG9yZXMgYSBub3JtYWxpemVkIHJlcHJlc2VudGF0aW9uLFxuICogIGVmZmVjdGl2ZWx5IHRyZWF0aW5nIGZ1bmN0aW9ucyBhcyBpZiB0aGV5IGFyZSBleHByZXNzaW9ucywgYW5kIGNvbnN0YW50IG9yIGRlZmF1bHQgdmFsdWVzIGFzIGlmIHRoZXkgYXJlXG4gKiAgKGNvbnN0YW50KSBleHByZXNzaW9ucy5cbiAqXG4gKiAgQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFByb3BlcnR5VmFsdWU8VCwgUj4ge1xuICAgIHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPjtcbiAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkO1xuICAgIGV4cHJlc3Npb246IFN0eWxlUHJvcGVydHlFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IFByb3BlcnR5PFQsIFI+LCB2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkKSB7XG4gICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBub3JtYWxpemVQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWUgPT09IHVuZGVmaW5lZCA/IHByb3BlcnR5LnNwZWNpZmljYXRpb24uZGVmYXVsdCA6IHZhbHVlLCBwcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKTtcbiAgICB9XG5cbiAgICBpc0RhdGFEcml2ZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb24ua2luZCA9PT0gJ3NvdXJjZScgfHwgdGhpcy5leHByZXNzaW9uLmtpbmQgPT09ICdjb21wb3NpdGUnO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBSIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHkucG9zc2libHlFdmFsdWF0ZSh0aGlzLCBwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgIH1cbn1cblxuLy8gLS0tLS0tLSBUcmFuc2l0aW9uYWJsZSAtLS0tLS0tXG5cbmV4cG9ydCB0eXBlIFRyYW5zaXRpb25QYXJhbWV0ZXJzID0ge1xuICAgIG5vdzogVGltZVBvaW50LFxuICAgIHRyYW5zaXRpb246IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uXG59O1xuXG4vKipcbiAqIFBhaW50IHByb3BlcnRpZXMgYXJlIF90cmFuc2l0aW9uYWJsZV86IHRoZXkgY2FuIGNoYW5nZSBpbiBhIGZsdWlkIG1hbm5lciwgaW50ZXJwb2xhdGluZyBvciBjcm9zcy1mYWRpbmcgYmV0d2VlblxuICogb2xkIGFuZCBuZXcgdmFsdWUuIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiwgYW5kIHRoZSBkZWxheSBiZWZvcmUgaXQgYmVnaW5zLCBpcyBjb25maWd1cmFibGUuXG4gKlxuICogYFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZWAgaXMgYSBjb21wb3NpdGlvbmFsIGNsYXNzIHRoYXQgc3RvcmVzIGJvdGggdGhlIHByb3BlcnR5IHZhbHVlIGFuZCB0aGF0IHRyYW5zaXRpb25cbiAqIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQSBgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlYCBjYW4gY2FsY3VsYXRlIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIGV2YWx1YXRpb24gY2hhaW4gZm9yIHBhaW50IHByb3BlcnR5IHZhbHVlczpcbiAqIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlPFQsIFI+IHtcbiAgICBwcm9wZXJ0eTogUHJvcGVydHk8VCwgUj47XG4gICAgdmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj47XG4gICAgdHJhbnNpdGlvbjogVHJhbnNpdGlvblNwZWNpZmljYXRpb24gfCB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IFByb3BlcnR5PFQsIFI+KSB7XG4gICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBQcm9wZXJ0eVZhbHVlKHByb3BlcnR5LCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHRyYW5zaXRpb25lZChwYXJhbWV0ZXJzOiBUcmFuc2l0aW9uUGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgcHJpb3I6IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+KTogVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj4ge1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlKHRoaXMucHJvcGVydHksIHRoaXMudmFsdWUsIHByaW9yLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgICBleHRlbmQoe30sIHBhcmFtZXRlcnMudHJhbnNpdGlvbiwgdGhpcy50cmFuc2l0aW9uKSwgcGFyYW1ldGVycy5ub3cpO1xuICAgIH1cblxuICAgIHVudHJhbnNpdGlvbmVkKCk6IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZSh0aGlzLnByb3BlcnR5LCB0aGlzLnZhbHVlLCBudWxsLCB7fSwgMCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICB9XG59XG5cbi8qKlxuICogQSBoZWxwZXIgdHlwZTogZ2l2ZW4gYW4gb2JqZWN0IHR5cGUgYFByb3BlcnRpZXNgIHdob3NlIHZhbHVlcyBhcmUgZWFjaCBvZiB0eXBlIGBQcm9wZXJ0eTxULCBSPmAsIGl0IGNhbGN1bGF0ZXNcbiAqIGFuIG9iamVjdCB0eXBlIHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIG9mIHR5cGUgYFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZTxULCBSPmAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzPFByb3BzOiBPYmplY3Q+XG4gICAgPSAkRXhhY3Q8JE9iak1hcDxQcm9wcywgPFQsIFI+KHA6IFByb3BlcnR5PFQsIFI+KSA9PiBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWU8VCwgUj4+PlxuXG4vKipcbiAqIGBUcmFuc2l0aW9uYWJsZWAgc3RvcmVzIGEgbWFwIG9mIGFsbCAocHJvcGVydHkgbmFtZSwgYFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZWApIHBhaXJzIGZvciBwYWludCBwcm9wZXJ0aWVzIG9mIGFcbiAqIGdpdmVuIGxheWVyIHR5cGUuIEl0IGNhbiBjYWxjdWxhdGUgdGhlIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZWBzIGZvciBhbGwgb2YgdGhlbSBhdCBvbmNlLCBwcm9kdWNpbmcgYVxuICogYFRyYW5zaXRpb25pbmdgIGluc3RhbmNlIGZvciB0aGUgc2FtZSBzZXQgb2YgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNpdGlvbmFibGU8UHJvcHM6IE9iamVjdD4ge1xuICAgIF9wcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPjtcbiAgICBfdmFsdWVzOiBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzPFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+KSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSAoT2JqZWN0LmNyZWF0ZShwcm9wZXJ0aWVzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzKTogYW55KTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZTxTOiBzdHJpbmcsIFQ+KG5hbWU6IFMpOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiB8IHZvaWQge1xuICAgICAgICByZXR1cm4gY2xvbmUodGhpcy5fdmFsdWVzW25hbWVdLnZhbHVlLnZhbHVlKTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZTxTOiBzdHJpbmcsIFQ+KG5hbWU6IFMsIHZhbHVlOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiB8IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXSA9IG5ldyBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUodGhpcy5fdmFsdWVzW25hbWVdLnByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG8gbm90IF9yZW1vdmVfIGFuIG93biBwcm9wZXJ0eSBpbiB0aGUgY2FzZSB3aGVyZSBhIHZhbHVlIGlzIGJlaW5nIHJlc2V0XG4gICAgICAgIC8vIHRvIHRoZSBkZWZhdWx0OiB0aGUgdHJhbnNpdGlvbiBtaWdodCBzdGlsbCBiZSBub24tZGVmYXVsdC5cbiAgICAgICAgdGhpcy5fdmFsdWVzW25hbWVdLnZhbHVlID0gbmV3IFByb3BlcnR5VmFsdWUodGhpcy5fdmFsdWVzW25hbWVdLnByb3BlcnR5LCB2YWx1ZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGNsb25lKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgZ2V0VHJhbnNpdGlvbjxTOiBzdHJpbmc+KG5hbWU6IFMpOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbiB8IHZvaWQge1xuICAgICAgICByZXR1cm4gY2xvbmUodGhpcy5fdmFsdWVzW25hbWVdLnRyYW5zaXRpb24pO1xuICAgIH1cblxuICAgIHNldFRyYW5zaXRpb248Uzogc3RyaW5nPihuYW1lOiBTLCB2YWx1ZTogVHJhbnNpdGlvblNwZWNpZmljYXRpb24gfCB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBuZXcgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlKHRoaXMuX3ZhbHVlc1tuYW1lXS5wcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWVzW25hbWVdLnRyYW5zaXRpb24gPSBjbG9uZSh2YWx1ZSkgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb24gPSB0aGlzLmdldFRyYW5zaXRpb24ocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtgJHtwcm9wZXJ0eX0tdHJhbnNpdGlvbmBdID0gdHJhbnNpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRyYW5zaXRpb25lZChwYXJhbWV0ZXJzOiBUcmFuc2l0aW9uUGFyYW1ldGVycywgcHJpb3I6IFRyYW5zaXRpb25pbmc8UHJvcHM+KTogVHJhbnNpdGlvbmluZzxQcm9wcz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgVHJhbnNpdGlvbmluZyh0aGlzLl9wcm9wZXJ0aWVzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5fdmFsdWVzW3Byb3BlcnR5XSA9IHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0udHJhbnNpdGlvbmVkKHBhcmFtZXRlcnMsIHByaW9yLl92YWx1ZXNbcHJvcGVydHldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHVudHJhbnNpdGlvbmVkKCk6IFRyYW5zaXRpb25pbmc8UHJvcHM+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRyYW5zaXRpb25pbmcodGhpcy5fcHJvcGVydGllcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ZhbHVlc1twcm9wZXJ0eV0gPSB0aGlzLl92YWx1ZXNbcHJvcGVydHldLnVudHJhbnNpdGlvbmVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbi8vIC0tLS0tLS0gVHJhbnNpdGlvbmluZyAtLS0tLS0tXG5cbi8qKlxuICogYFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlYCBpbXBsZW1lbnRzIHRoZSBmaXJzdCBvZiB0d28gaW50ZXJtZWRpYXRlIHN0ZXBzIGluIHRoZSBldmFsdWF0aW9uIGNoYWluIG9mIGEgcGFpbnRcbiAqIHByb3BlcnR5IHZhbHVlLiBJbiB0aGlzIHN0ZXAsIHRyYW5zaXRpb25zIGJldHdlZW4gb2xkIGFuZCBuZXcgdmFsdWVzIGFyZSBoYW5kbGVkOiBhcyBsb25nIGFzIHRoZSB0cmFuc2l0aW9uIGlzIGluXG4gKiBwcm9ncmVzcywgYFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlYCBtYWludGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHByaW9yIHZhbHVlLCBhbmQgaW50ZXJwb2xhdGVzIGJldHdlZW4gaXQgYW5kXG4gKiB0aGUgbmV3IHZhbHVlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHRpbWUgYW5kIHRoZSBjb25maWd1cmVkIHRyYW5zaXRpb24gZHVyYXRpb24gYW5kIGRlbGF5LiBUaGUgcHJvZHVjdCBpcyB0aGUgbmV4dFxuICogc3RlcCBpbiB0aGUgZXZhbHVhdGlvbiBjaGFpbjogdGhlIFwicG9zc2libHkgZXZhbHVhdGVkXCIgcmVzdWx0IHR5cGUgYFJgLiBTZWUgYmVsb3cgZm9yIG1vcmUgb24gdGhpcyBjb25jZXB0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+IHtcbiAgICBwcm9wZXJ0eTogUHJvcGVydHk8VCwgUj47XG4gICAgdmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj47XG4gICAgcHJpb3I6ID9UcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPjtcbiAgICBiZWdpbjogVGltZVBvaW50O1xuICAgIGVuZDogVGltZVBvaW50O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IFByb3BlcnR5PFQsIFI+LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+LFxuICAgICAgICAgICAgICAgIHByaW9yOiA/VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj4sXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogVHJhbnNpdGlvblNwZWNpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgbm93OiBUaW1lUG9pbnQpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuYmVnaW4gPSBub3cgKyB0cmFuc2l0aW9uLmRlbGF5IHx8IDA7XG4gICAgICAgIHRoaXMuZW5kID0gdGhpcy5iZWdpbiArIHRyYW5zaXRpb24uZHVyYXRpb24gfHwgMDtcbiAgICAgICAgaWYgKHByb3BlcnR5LnNwZWNpZmljYXRpb24udHJhbnNpdGlvbiAmJiAodHJhbnNpdGlvbi5kZWxheSB8fCB0cmFuc2l0aW9uLmR1cmF0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5wcmlvciA9IHByaW9yO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KTogUiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IHBhcmFtZXRlcnMubm93IHx8IDA7XG4gICAgICAgIGNvbnN0IGZpbmFsVmFsdWUgPSB0aGlzLnZhbHVlLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgY29uc3QgcHJpb3IgPSB0aGlzLnByaW9yO1xuICAgICAgICBpZiAoIXByaW9yKSB7XG4gICAgICAgICAgICAvLyBObyBwcmlvciB2YWx1ZS5cbiAgICAgICAgICAgIHJldHVybiBmaW5hbFZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKG5vdyA+IHRoaXMuZW5kKSB7XG4gICAgICAgICAgICAvLyBUcmFuc2l0aW9uIGZyb20gcHJpb3IgdmFsdWUgaXMgbm93IGNvbXBsZXRlLlxuICAgICAgICAgICAgdGhpcy5wcmlvciA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gZmluYWxWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlLmlzRGF0YURyaXZlbigpKSB7XG4gICAgICAgICAgICAvLyBUcmFuc2l0aW9ucyB0byBkYXRhLWRyaXZlbiBwcm9wZXJ0aWVzIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAgICAgICAgICAgLy8gV2Ugc25hcCBpbW1lZGlhdGVseSB0byB0aGUgZGF0YS1kcml2ZW4gdmFsdWUgc28gdGhhdCwgd2hlbiB3ZSBwZXJmb3JtIGxheW91dCxcbiAgICAgICAgICAgIC8vIHdlIHNlZSB0aGUgZGF0YS1kcml2ZW4gZnVuY3Rpb24gYW5kIGNhbiB1c2UgaXQgdG8gcG9wdWxhdGUgdmVydGV4IGJ1ZmZlcnMuXG4gICAgICAgICAgICB0aGlzLnByaW9yID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBmaW5hbFZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKG5vdyA8IHRoaXMuYmVnaW4pIHtcbiAgICAgICAgICAgIC8vIFRyYW5zaXRpb24gaGFzbid0IHN0YXJ0ZWQgeWV0LlxuICAgICAgICAgICAgcmV0dXJuIHByaW9yLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEludGVycG9sYXRlIGJldHdlZW4gcmVjdXJzaXZlbHktY2FsY3VsYXRlZCBwcmlvciB2YWx1ZSBhbmQgZmluYWwuXG4gICAgICAgICAgICBjb25zdCB0ID0gKG5vdyAtIHRoaXMuYmVnaW4pIC8gKHRoaXMuZW5kIC0gdGhpcy5iZWdpbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5pbnRlcnBvbGF0ZShwcmlvci5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyksIGZpbmFsVmFsdWUsIGVhc2VDdWJpY0luT3V0KHQpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlOiBnaXZlbiBhbiBvYmplY3QgdHlwZSBgUHJvcGVydGllc2Agd2hvc2UgdmFsdWVzIGFyZSBlYWNoIG9mIHR5cGUgYFByb3BlcnR5PFQsIFI+YCwgaXQgY2FsY3VsYXRlc1xuICogYW4gb2JqZWN0IHR5cGUgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgb2YgdHlwZSBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj5gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnR5cGUgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPFByb3BzOiBPYmplY3Q+XG4gICAgPSAkRXhhY3Q8JE9iak1hcDxQcm9wcywgPFQsIFI+KHA6IFByb3BlcnR5PFQsIFI+KSA9PiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPj4+XG5cbi8qKlxuICogYFRyYW5zaXRpb25pbmdgIHN0b3JlcyBhIG1hcCBvZiBhbGwgKHByb3BlcnR5IG5hbWUsIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZWApIHBhaXJzIGZvciBwYWludCBwcm9wZXJ0aWVzIG9mIGFcbiAqIGdpdmVuIGxheWVyIHR5cGUuIEl0IGNhbiBjYWxjdWxhdGUgdGhlIHBvc3NpYmx5LWV2YWx1YXRlZCB2YWx1ZXMgZm9yIGFsbCBvZiB0aGVtIGF0IG9uY2UsIHByb2R1Y2luZyBhXG4gKiBgUG9zc2libHlFdmFsdWF0ZWRgIGluc3RhbmNlIGZvciB0aGUgc2FtZSBzZXQgb2YgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNpdGlvbmluZzxQcm9wczogT2JqZWN0PiB7XG4gICAgX3Byb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+O1xuICAgIF92YWx1ZXM6IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPikge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gKE9iamVjdC5jcmVhdGUocHJvcGVydGllcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzKTogYW55KTtcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogUG9zc2libHlFdmFsdWF0ZWQ8UHJvcHM+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFBvc3NpYmx5RXZhbHVhdGVkKHRoaXMuX3Byb3BlcnRpZXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgcmVzdWx0Ll92YWx1ZXNbcHJvcGVydHldID0gdGhpcy5fdmFsdWVzW3Byb3BlcnR5XS5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZXNbcHJvcGVydHldLnByaW9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLy8gLS0tLS0tLSBMYXlvdXQgLS0tLS0tLVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBvZiB0eXBlIGBQcm9wZXJ0eVZhbHVlPFQsIFI+YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG50eXBlIFByb3BlcnR5VmFsdWVzPFByb3BzOiBPYmplY3Q+XG4gICAgPSAkRXhhY3Q8JE9iak1hcDxQcm9wcywgPFQsIFI+KHA6IFByb3BlcnR5PFQsIFI+KSA9PiBQcm9wZXJ0eVZhbHVlPFQsIFI+Pj5cblxuLyoqXG4gKiBCZWNhdXNlIGxheW91dCBwcm9wZXJ0aWVzIGFyZSBub3QgdHJhbnNpdGlvbmFibGUsIHRoZXkgaGF2ZSBhIHNpbXBsZXIgcmVwcmVzZW50YXRpb24gYW5kIGV2YWx1YXRpb24gY2hhaW4gdGhhblxuICogcGFpbnQgcHJvcGVydGllczogYFByb3BlcnR5VmFsdWVgcyBhcmUgcG9zc2libHkgZXZhbHVhdGVkLCBwcm9kdWNpbmcgcG9zc2libHkgZXZhbHVhdGVkIHZhbHVlcywgd2hpY2ggYXJlIHRoZW5cbiAqIGZ1bGx5IGV2YWx1YXRlZC5cbiAqXG4gKiBgTGF5b3V0YCBzdG9yZXMgYSBtYXAgb2YgYWxsIChwcm9wZXJ0eSBuYW1lLCBgUHJvcGVydHlWYWx1ZWApIHBhaXJzIGZvciBsYXlvdXQgcHJvcGVydGllcyBvZiBhXG4gKiBnaXZlbiBsYXllciB0eXBlLiBJdCBjYW4gY2FsY3VsYXRlIHRoZSBwb3NzaWJseS1ldmFsdWF0ZWQgdmFsdWVzIGZvciBhbGwgb2YgdGhlbSBhdCBvbmNlLCBwcm9kdWNpbmcgYVxuICogYFBvc3NpYmx5RXZhbHVhdGVkYCBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgc2V0IG9mIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIExheW91dDxQcm9wczogT2JqZWN0PiB7XG4gICAgX3Byb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+O1xuICAgIF92YWx1ZXM6IFByb3BlcnR5VmFsdWVzPFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+KSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSAoT2JqZWN0LmNyZWF0ZShwcm9wZXJ0aWVzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlcyk6IGFueSk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWU8Uzogc3RyaW5nPihuYW1lOiBTKSB7XG4gICAgICAgIHJldHVybiBjbG9uZSh0aGlzLl92YWx1ZXNbbmFtZV0udmFsdWUpO1xuICAgIH1cblxuICAgIHNldFZhbHVlPFM6IHN0cmluZz4obmFtZTogUywgdmFsdWU6ICopIHtcbiAgICAgICAgdGhpcy5fdmFsdWVzW25hbWVdID0gbmV3IFByb3BlcnR5VmFsdWUodGhpcy5fdmFsdWVzW25hbWVdLnByb3BlcnR5LCB2YWx1ZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGNsb25lKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBQb3NzaWJseUV2YWx1YXRlZDxQcm9wcz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUG9zc2libHlFdmFsdWF0ZWQodGhpcy5fcHJvcGVydGllcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ZhbHVlc1twcm9wZXJ0eV0gPSB0aGlzLl92YWx1ZXNbcHJvcGVydHldLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLy8gLS0tLS0tLSBQb3NzaWJseUV2YWx1YXRlZCAtLS0tLS0tXG5cbi8qKlxuICogXCJQb3NzaWJseSBldmFsdWF0ZWQgdmFsdWVcIiBpcyBhbiBpbnRlcm1lZGlhdGUgc3RhZ2UgaW4gdGhlIGV2YWx1YXRpb24gY2hhaW4gZm9yIGJvdGggcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0eVxuICogdmFsdWVzLiBUaGUgcHVycG9zZSBvZiB0aGlzIHN0YWdlIGlzIHRvIG9wdGltaXplIGF3YXkgdW5uZWNlc3NhcnkgcmVjYWxjdWxhdGlvbnMgZm9yIGRhdGEtZHJpdmVuIHByb3BlcnRpZXMuIENvZGVcbiAqIHdoaWNoIHVzZXMgZGF0YS1kcml2ZW4gcHJvcGVydHkgdmFsdWVzIG11c3QgYXNzdW1lIHRoYXQgdGhlIHZhbHVlIGlzIGRlcGVuZGVudCBvbiBmZWF0dXJlIGRhdGEsIGFuZCByZXF1ZXN0IHRoYXQgaXRcbiAqIGJlIGV2YWx1YXRlZCBmb3IgZWFjaCBmZWF0dXJlLiBCdXQgd2hlbiB0aGF0IHByb3BlcnR5IHZhbHVlIGlzIGluIGZhY3QgYSBjb25zdGFudCBvciBjYW1lcmEgZnVuY3Rpb24sIHRoZSBjYWxjdWxhdGlvblxuICogd2lsbCBub3QgYWN0dWFsbHkgZGVwZW5kIG9uIHRoZSBmZWF0dXJlLCBhbmQgd2UgY2FuIGJlbmVmaXQgZnJvbSByZXR1cm5pbmcgdGhlIHByaW9yIHJlc3VsdCBvZiBoYXZpbmcgZG9uZSB0aGVcbiAqIGV2YWx1YXRpb24gb25jZSwgYWhlYWQgb2YgdGltZSwgaW4gYW4gaW50ZXJtZWRpYXRlIHN0ZXAgd2hvc2UgaW5wdXRzIGFyZSBqdXN0IHRoZSB2YWx1ZSBhbmQgXCJnbG9iYWxcIiBwYXJhbWV0ZXJzXG4gKiBzdWNoIGFzIGN1cnJlbnQgem9vbSBsZXZlbC5cbiAqXG4gKiBgUG9zc2libHlFdmFsdWF0ZWRWYWx1ZWAgcmVwcmVzZW50cyB0aGUgdGhyZWUgcG9zc2libGUgb3V0Y29tZXMgb2YgdGhpcyBzdGVwOiBpZiB0aGUgaW5wdXQgdmFsdWUgd2FzIGEgY29uc3RhbnQgb3JcbiAqIGNhbWVyYSBleHByZXNzaW9uLCB0aGVuIHRoZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHJlc3VsdCBpcyBhIGNvbnN0YW50IHZhbHVlLiBPdGhlcndpc2UsIHRoZSBpbnB1dCB2YWx1ZSB3YXMgZWl0aGVyXG4gKiBhIHNvdXJjZSBvciBjb21wb3NpdGUgZXhwcmVzc2lvbiwgYW5kIHdlIG11c3QgZGVmZXIgZmluYWwgZXZhbHVhdGlvbiB1bnRpbCBzdXBwbGllZCBhIGZlYXR1cmUuIFdlIHNlcGFyYXRlXG4gKiB0aGUgc291cmNlIGFuZCBjb21wb3NpdGUgY2FzZXMgYmVjYXVzZSB0aGV5IGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5IHdoZW4gZ2VuZXJhdGluZyBHTCBhdHRyaWJ1dGVzLCBidWZmZXJzLCBhbmRcbiAqIHVuaWZvcm1zLlxuICpcbiAqIE5vdGUgdGhhdCBgUG9zc2libHlFdmFsdWF0ZWRWYWx1ZWAgKGFuZCBgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlYCwgYmVsb3cpIGFyZSBfbm90XyB1c2VkIGZvciBwcm9wZXJ0aWVzIHRoYXRcbiAqIGRvIG5vdCBhbGxvdyBkYXRhLWRyaXZlbiB2YWx1ZXMuIEZvciBzdWNoIHByb3BlcnRpZXMsIHdlIGtub3cgdGhhdCB0aGUgXCJwb3NzaWJseSBldmFsdWF0ZWRcIiByZXN1bHQgaXMgYWx3YXlzIGEgY29uc3RhbnRcbiAqIHNjYWxhciB2YWx1ZS4gU2VlIGJlbG93LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnR5cGUgUG9zc2libHlFdmFsdWF0ZWRWYWx1ZTxUPiA9XG4gICAgfCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IFR9XG4gICAgfCBTb3VyY2VFeHByZXNzaW9uXG4gICAgfCBDb21wb3NpdGVFeHByZXNzaW9uO1xuXG4vKipcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgIGlzIHVzZWQgZm9yIGRhdGEtZHJpdmVuIHBhaW50IGFuZCBsYXlvdXQgcHJvcGVydHkgdmFsdWVzLiBJdCBob2xkcyBhXG4gKiBgUG9zc2libHlFdmFsdWF0ZWRWYWx1ZWAgYW5kIHRoZSBgR2xvYmFsUHJvcGVydGllc2AgdGhhdCB3ZXJlIHVzZWQgdG8gZ2VuZXJhdGUgaXQuIFlvdSdyZSBub3QgYWxsb3dlZCB0byBzdXBwbHlcbiAqIGEgZGlmZmVyZW50IHNldCBvZiBgR2xvYmFsUHJvcGVydGllc2Agd2hlbiBwZXJmb3JtaW5nIHRoZSBmaW5hbCBldmFsdWF0aW9uIGJlY2F1c2UgdGhleSB3b3VsZCBiZSBpZ25vcmVkIGluIHRoZVxuICogY2FzZSB3aGVyZSB0aGUgaW5wdXQgdmFsdWUgd2FzIGEgY29uc3RhbnQgb3IgY2FtZXJhIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4ge1xuICAgIHByb3BlcnR5OiBEYXRhRHJpdmVuUHJvcGVydHk8VD47XG4gICAgdmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkVmFsdWU8VD47XG4gICAgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogRGF0YURyaXZlblByb3BlcnR5PFQ+LCB2YWx1ZTogUG9zc2libHlFdmFsdWF0ZWRWYWx1ZTxUPiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgaXNDb25zdGFudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUua2luZCA9PT0gJ2NvbnN0YW50JztcbiAgICB9XG5cbiAgICBjb25zdGFudE9yKHZhbHVlOiBUKTogVCB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlLnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHkuZXZhbHVhdGUodGhpcy52YWx1ZSwgdGhpcy5wYXJhbWV0ZXJzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMsIGFuZCB2YWx1ZXMgb2YgdHlwZSBgUmAuXG4gKlxuICogRm9yIHByb3BlcnRpZXMgdGhhdCBkb24ndCBhbGxvdyBkYXRhLWRyaXZlbiB2YWx1ZXMsIGBSYCBpcyBhIHNjYWxhciB0eXBlIHN1Y2ggYXMgYG51bWJlcmAsIGBzdHJpbmdgLCBvciBgQ29sb3JgLlxuICogRm9yIGRhdGEtZHJpdmVuIHByb3BlcnRpZXMsIGl0IGlzIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgLiBDcml0aWNhbGx5LCB0aGUgdHlwZSBkZWZpbml0aW9ucyBhcmUgc2V0IHVwXG4gKiBpbiBhIHdheSB0aGF0IGFsbG93cyBmbG93IHRvIGtub3cgd2hpY2ggb2YgdGhlc2UgdHdvIGNhc2VzIGFwcGxpZXMgZm9yIGFueSBnaXZlbiBwcm9wZXJ0eSBuYW1lLCBhbmQgaWYgeW91IGF0dGVtcHRcbiAqIHRvIHVzZSBhIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgIGFzIGlmIGl0IHdhcyBhIHNjYWxhciwgb3IgdmljZSB2ZXJzYSwgeW91IHdpbGwgZ2V0IGEgdHlwZSBlcnJvci4gKEhvd2V2ZXIsXG4gKiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBjYXNlIGluIHdoaWNoIGZsb3cgZmFpbHMgdG8gcHJvZHVjZSBhIHR5cGUgZXJyb3IgdGhhdCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mOiBpbiBhIGNvbnRleHQgc3VjaFxuICogYXMgYGxheWVyLnBhaW50LmdldCgnZm9vLW9wYWNpdHknKSA9PT0gMGAsIGlmIGBmb28tb3BhY2l0eWAgaXMgZGF0YS1kcml2ZW4sIHRoYW4gdGhlIGxlZnQtaGFuZCBzaWRlIGlzIG9mIHR5cGVcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPmAsIGJ1dCBmbG93IHdpbGwgbm90IGNvbXBsYWluIGFib3V0IGNvbXBhcmluZyB0aGlzIHRvIGEgbnVtYmVyIHVzaW5nIGA9PT1gLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yMzU5LilcbiAqXG4gKiBUaGVyZSdzIGFsc28gYSB0aGlyZCwgc3BlY2lhbCBjYXNlIHBvc3NpYmxpdHkgZm9yIGBSYDogZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGl0J3MgYD9Dcm9zc0ZhZGVkPFQ+YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG50eXBlIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFI+PlxuXG4vKipcbiAqIGBQb3NzaWJseUV2YWx1YXRlZGAgc3RvcmVzIGEgbWFwIG9mIGFsbCAocHJvcGVydHkgbmFtZSwgYFJgKSBwYWlycyBmb3IgcGFpbnQgb3IgbGF5b3V0IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb3NzaWJseUV2YWx1YXRlZDxQcm9wczogT2JqZWN0PiB7XG4gICAgX3Byb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+O1xuICAgIF92YWx1ZXM6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4pIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IChPYmplY3QuY3JlYXRlKHByb3BlcnRpZXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzKTogYW55KTtcbiAgICB9XG5cbiAgICBnZXQ8Uzogc3RyaW5nPihuYW1lOiBTKTogJEVsZW1lbnRUeXBlPFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM+LCBTPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZXNbbmFtZV07XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yIHByb3BlcnRpZXMgdGhhdCBkbyBub3QgcGVybWl0IGRhdGEtZHJpdmVuIChzb3VyY2Ugb3IgY29tcG9zaXRlKSBleHByZXNzaW9ucy5cbiAqIFRoaXMgcmVzdHJpY3Rpb24gYWxsb3dzIHVzIHRvIGRlY2xhcmUgc3RhdGljYWxseSB0aGF0IHRoZSByZXN1bHQgb2YgcG9zc2libHkgZXZhbHVhdGluZyB0aGlzIGtpbmQgb2YgcHJvcGVydHlcbiAqIGlzIGluIGZhY3QgYWx3YXlzIHRoZSBzY2FsYXIgdHlwZSBgVGAsIGFuZCBjYW4gYmUgdXNlZCB3aXRob3V0IGZ1cnRoZXIgZXZhbHVhdGluZyB0aGUgdmFsdWUgb24gYSBwZXItZmVhdHVyZSBiYXNpcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgRGF0YUNvbnN0YW50UHJvcGVydHk8VD4gaW1wbGVtZW50cyBQcm9wZXJ0eTxULCBUPiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLnNwZWNpZmljYXRpb24gPSBzcGVjaWZpY2F0aW9uO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgVD4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKTogVCB7XG4gICAgICAgIGFzc2VydCghdmFsdWUuaXNEYXRhRHJpdmVuKCkpO1xuICAgICAgICByZXR1cm4gdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZShhOiBULCBiOiBULCB0OiBudW1iZXIpOiBUIHtcbiAgICAgICAgY29uc3QgaW50ZXJwOiA/KGE6IFQsIGI6IFQsIHQ6IG51bWJlcikgPT4gVCA9IChpbnRlcnBvbGF0ZTogYW55KVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07XG4gICAgICAgIGlmIChpbnRlcnApIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcnAoYSwgYiwgdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBgUHJvcGVydHlgIGZvciBwcm9wZXJ0aWVzIHRoYXQgcGVybWl0IGRhdGEtZHJpdmVuIChzb3VyY2Ugb3IgY29tcG9zaXRlKSBleHByZXNzaW9ucy5cbiAqIFRoZSByZXN1bHQgb2YgcG9zc2libHkgZXZhbHVhdGluZyB0aGlzIGtpbmQgb2YgcHJvcGVydHkgaXMgYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPmA7IG9idGFpbmluZ1xuICogYSBzY2FsYXIgdmFsdWUgYFRgIHJlcXVpcmVzIGZ1cnRoZXIgZXZhbHVhdGlvbiBvbiBhIHBlci1mZWF0dXJlIGJhc2lzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhRHJpdmVuUHJvcGVydHk8VD4gaW1wbGVtZW50cyBQcm9wZXJ0eTxULCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcbiAgICBvdmVycmlkZXM6ID9PYmplY3Q7XG5cbiAgICBjb25zdHJ1Y3RvcihzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbiwgb3ZlcnJpZGVzPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzID0gb3ZlcnJpZGVzO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+PiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4ge1xuICAgICAgICBpZiAodmFsdWUuZXhwcmVzc2lvbi5raW5kID09PSAnY29uc3RhbnQnIHx8IHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NhbWVyYScpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzLCAobnVsbDogYW55KSwge30sIGF2YWlsYWJsZUltYWdlcyl9LCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHZhbHVlLmV4cHJlc3Npb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+LFxuICAgICAgICAgICAgICAgIGI6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPixcbiAgICAgICAgICAgICAgICB0OiBudW1iZXIpOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4ge1xuICAgICAgICAvLyBJZiBlaXRoZXIgcG9zc2libHktZXZhbHVhdGVkIHZhbHVlIGlzIG5vbi1jb25zdGFudCwgZ2l2ZSB1cDogd2UgYXJlbid0IGFibGUgdG8gaW50ZXJwb2xhdGUgZGF0YS1kcml2ZW4gdmFsdWVzLlxuICAgICAgICBpZiAoYS52YWx1ZS5raW5kICE9PSAnY29uc3RhbnQnIHx8IGIudmFsdWUua2luZCAhPT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFjayBzb2xlbHkgZm9yIGZpbGwtb3V0bGluZS1jb2xvci4gVGhlIHVuZGVmaW5lZCB2YWx1ZSBpcyBzdWJzZXF1ZW50bHkgaGFuZGxlZCBpblxuICAgICAgICAvLyBGaWxsU3R5bGVMYXllciNyZWNhbGN1bGF0ZSwgd2hpY2ggc2V0cyBmaWxsLW91dGxpbmUtY29sb3IgdG8gdGhlIGZpbGwtY29sb3IgdmFsdWUgaWYgdGhlIGZvcm1lclxuICAgICAgICAvLyBpcyBhIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSBjb250YWluaW5nIGEgY29uc3RhbnQgdW5kZWZpbmVkIHZhbHVlLiBJbiBhZGRpdGlvbiB0byB0aGVcbiAgICAgICAgLy8gcmV0dXJuIHZhbHVlIGhlcmUsIHRoZSBvdGhlciBzb3VyY2Ugb2YgYSBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUgY29udGFpbmluZyBhIGNvbnN0YW50XG4gICAgICAgIC8vIHVuZGVmaW5lZCB2YWx1ZSBpcyB0aGUgXCJkZWZhdWx0IHZhbHVlXCIgZm9yIGZpbGwtb3V0bGluZS1jb2xvciBoZWxkIGluXG4gICAgICAgIC8vIGBQcm9wZXJ0aWVzI2RlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlc2AsIHdoaWNoIHNlcnZlcyBhcyB0aGUgcHJvdG90eXBlIG9mXG4gICAgICAgIC8vIGBQb3NzaWJseUV2YWx1YXRlZCNfdmFsdWVzYC5cbiAgICAgICAgaWYgKGEudmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBiLnZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogKHVuZGVmaW5lZDogYW55KX0sIGEucGFyYW1ldGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnRlcnA6ID8oYTogVCwgYjogVCwgdDogbnVtYmVyKSA9PiBUID0gKGludGVycG9sYXRlOiBhbnkpW3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtcbiAgICAgICAgaWYgKGludGVycCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiBpbnRlcnAoYS52YWx1ZS52YWx1ZSwgYi52YWx1ZS52YWx1ZSwgdCl9LCBhLnBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmFsdWF0ZSh2YWx1ZTogUG9zc2libHlFdmFsdWF0ZWRWYWx1ZTxUPiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogVCB7XG4gICAgICAgIGlmICh2YWx1ZS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuZXZhbHVhdGUocGFyYW1ldGVycywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yICBkYXRhIGRyaXZlbiBgbGluZS1wYXR0ZXJuYCB3aGljaCBhcmUgdHJhbnNpdGlvbmVkIGJ5IGNyb3NzLWZhZGluZ1xuICogcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBjbGFzcyBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5PFQ+IGV4dGVuZHMgRGF0YURyaXZlblByb3BlcnR5PD9Dcm9zc0ZhZGVkPFQ+PiB7XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHZhbHVlOiBQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+LCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8P0Nyb3NzRmFkZWQ8VD4+PiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8P0Nyb3NzRmFkZWQ8VD4+IHtcbiAgICAgICAgaWYgKHZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogdW5kZWZpbmVkfSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUuZXhwcmVzc2lvbi5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBldmFsdWF0ZWRWYWx1ZSA9IHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUocGFyYW1ldGVycywgKG51bGw6IGFueSksIHt9LCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgY29uc3QgaXNJbWFnZUV4cHJlc3Npb24gPSB2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUgPT09ICdpbWFnZSc7XG4gICAgICAgICAgICBjb25zdCBjb25zdGFudFZhbHVlID0gaXNJbWFnZUV4cHJlc3Npb24gJiYgdHlwZW9mIGV2YWx1YXRlZFZhbHVlICE9PSAnc3RyaW5nJyA/IGV2YWx1YXRlZFZhbHVlLm5hbWUgOiBldmFsdWF0ZWRWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0YW50ID0gdGhpcy5fY2FsY3VsYXRlKGNvbnN0YW50VmFsdWUsIGNvbnN0YW50VmFsdWUsIGNvbnN0YW50VmFsdWUsIHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiBjb25zdGFudH0sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NhbWVyYScpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbWVyYVZhbCA9IHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogcGFyYW1ldGVycy56b29tIC0gMS4wfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHBhcmFtZXRlcnMuem9vbX0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiBwYXJhbWV0ZXJzLnpvb20gKyAxLjB9KSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IGNhbWVyYVZhbH0sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc291cmNlIG9yIGNvbXBvc2l0ZSBleHByZXNzaW9uXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB2YWx1ZS5leHByZXNzaW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV2YWx1YXRlKHZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPD9Dcm9zc0ZhZGVkPFQ+PiwgZ2xvYmFsczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogP0Nyb3NzRmFkZWQ8VD4ge1xuICAgICAgICBpZiAodmFsdWUua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0YW50ID0gdmFsdWUuZXZhbHVhdGUoZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShjb25zdGFudCwgY29uc3RhbnQsIGNvbnN0YW50LCBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pIC0gMS4wfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pICsgMS4wfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxjdWxhdGUobWluOiBULCBtaWQ6IFQsIG1heDogVCwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiBDcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgY29uc3QgeiA9IHBhcmFtZXRlcnMuem9vbTtcbiAgICAgICAgcmV0dXJuIHogPiBwYXJhbWV0ZXJzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbSA/IHtmcm9tOiBtaW4sIHRvOiBtaWR9IDoge2Zyb206IG1heCwgdG86IG1pZH07XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+Pik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4ge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59XG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yIGAqLXBhdHRlcm5gIGFuZCBgbGluZS1kYXNoYXJyYXlgLCB3aGljaCBhcmUgdHJhbnNpdGlvbmVkIGJ5IGNyb3NzLWZhZGluZ1xuICogcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgQ3Jvc3NGYWRlZFByb3BlcnR5PFQ+IGltcGxlbWVudHMgUHJvcGVydHk8VCwgP0Nyb3NzRmFkZWQ8VD4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCA/Q3Jvc3NGYWRlZDxUPj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogP0Nyb3NzRmFkZWQ8VD4ge1xuICAgICAgICBpZiAodmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5leHByZXNzaW9uLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0YW50ID0gdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzLCAobnVsbDogYW55KSwge30sIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FsY3VsYXRlKGNvbnN0YW50LCBjb25zdGFudCwgY29uc3RhbnQsIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzZXJ0KCF2YWx1ZS5pc0RhdGFEcml2ZW4oKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FsY3VsYXRlKFxuICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKE1hdGguZmxvb3IocGFyYW1ldGVycy56b29tIC0gMS4wKSwgcGFyYW1ldGVycykpLFxuICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKE1hdGguZmxvb3IocGFyYW1ldGVycy56b29tKSwgcGFyYW1ldGVycykpLFxuICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKE1hdGguZmxvb3IocGFyYW1ldGVycy56b29tICsgMS4wKSwgcGFyYW1ldGVycykpLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2NhbGN1bGF0ZShtaW46IFQsIG1pZDogVCwgbWF4OiBULCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycyk6ID9Dcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgY29uc3QgeiA9IHBhcmFtZXRlcnMuem9vbTtcbiAgICAgICAgcmV0dXJuIHogPiBwYXJhbWV0ZXJzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbSA/IHtmcm9tOiBtaW4sIHRvOiBtaWR9IDoge2Zyb206IG1heCwgdG86IG1pZH07XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogP0Nyb3NzRmFkZWQ8VD4pOiA/Q3Jvc3NGYWRlZDxUPiB7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBgUHJvcGVydHlgIGZvciBgaGVhdG1hcC1jb2xvcmAgYW5kIGBsaW5lLWdyYWRpZW50YC4gSW50ZXJwb2xhdGlvbiBpcyBhIG5vLW9wLCBhbmRcbiAqIGV2YWx1YXRpb24gcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgaW4gb3JkZXIgdG8gaW5kaWNhdGUgaXRzIHByZXNlbmNlLCBidXQgdGhlIHJlYWxcbiAqIGV2YWx1YXRpb24gaGFwcGVucyBpbiBTdHlsZUxheWVyIGNsYXNzZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgY2xhc3MgQ29sb3JSYW1wUHJvcGVydHkgaW1wbGVtZW50cyBQcm9wZXJ0eTxDb2xvciwgYm9vbGVhbj4ge1xuICAgIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uO1xuXG4gICAgY29uc3RydWN0b3Ioc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy5zcGVjaWZpY2F0aW9uID0gc3BlY2lmaWNhdGlvbjtcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHZhbHVlOiBQcm9wZXJ0eVZhbHVlPENvbG9yLCBib29sZWFuPiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzLCAobnVsbDogYW55KSwge30sIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxufVxuXG4vKipcbiAqIGBQcm9wZXJ0aWVzYCBob2xkcyBvYmplY3RzIGNvbnRhaW5pbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBsYXlvdXQgb3IgcGFpbnQgcHJvcGVydHkgc2V0IG9mIGEgZ2l2ZW5cbiAqIGxheWVyIHR5cGUuIFRoZXNlIG9iamVjdHMgYXJlIGltbXV0YWJsZSwgYW5kIHRoZXkgYXJlIHVzZWQgYXMgdGhlIHByb3RvdHlwZXMgZm9yIHRoZSBgX3ZhbHVlc2AgbWVtYmVycyBvZlxuICogYFRyYW5zaXRpb25hYmxlYCwgYFRyYW5zaXRpb25pbmdgLCBgTGF5b3V0YCwgYW5kIGBQb3NzaWJseUV2YWx1YXRlZGAuIFRoaXMgYWxsb3dzIHRoZXNlIGNsYXNzZXMgdG8gYXZvaWRcbiAqIGRvaW5nIHdvcmsgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGEgcHJvcGVydHkgaGFzIG5vIGV4cGxpY2l0IHZhbHVlIHNldCBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gdGFrZVxuICogb24gdGhlIGRlZmF1bHQgdmFsdWU6IHVzaW5nIGBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpYCwgdGhleSBjYW4gaXRlcmF0ZSBvdmVyXG4gKiBvbmx5IHRoZSBfb3duXyBwcm9wZXJ0aWVzIG9mIGBfdmFsdWVzYCwgc2tpcHBpbmcgcmVwZWF0ZWQgY2FsY3VsYXRpb24gb2YgdHJhbnNpdGlvbnMgYW5kIHBvc3NpYmxlL2ZpbmFsXG4gKiBldmFsdWF0aW9ucyBmb3IgZGVmYXVsdHMsIHRoZSByZXN1bHQgb2Ygd2hpY2ggd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFByb3BlcnRpZXM8UHJvcHM6IE9iamVjdD4ge1xuICAgIHByb3BlcnRpZXM6IFByb3BzO1xuICAgIGRlZmF1bHRQcm9wZXJ0eVZhbHVlczogUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuICAgIGRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzOiBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzPFByb3BzPjtcbiAgICBkZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuICAgIGRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlczogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG4gICAgb3ZlcnJpZGFibGVQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcHMpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXMgPSAoe306IGFueSk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXMgPSAoe306IGFueSk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXMgPSAoe306IGFueSk7XG4gICAgICAgIHRoaXMub3ZlcnJpZGFibGVQcm9wZXJ0aWVzID0gKFtdOiBhbnkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BlcnRpZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKHByb3Auc3BlY2lmaWNhdGlvbi5vdmVycmlkYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGFibGVQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFByb3BlcnR5VmFsdWUgPSB0aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgIG5ldyBQcm9wZXJ0eVZhbHVlKHByb3AsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlID0gdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgIG5ldyBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUocHJvcCk7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXNbcHJvcGVydHldID1cbiAgICAgICAgICAgICAgICBkZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlLnVudHJhbnNpdGlvbmVkKCk7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlc1twcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0eVZhbHVlLnBvc3NpYmx5RXZhbHVhdGUoKHt9OiBhbnkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0RhdGFEcml2ZW5Qcm9wZXJ0eScsIERhdGFEcml2ZW5Qcm9wZXJ0eSk7XG5yZWdpc3RlcignRGF0YUNvbnN0YW50UHJvcGVydHknLCBEYXRhQ29uc3RhbnRQcm9wZXJ0eSk7XG5yZWdpc3RlcignQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eScsIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkpO1xucmVnaXN0ZXIoJ0Nyb3NzRmFkZWRQcm9wZXJ0eScsIENyb3NzRmFkZWRQcm9wZXJ0eSk7XG5yZWdpc3RlcignQ29sb3JSYW1wUHJvcGVydHknLCBDb2xvclJhbXBQcm9wZXJ0eSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2VuZHNXaXRoLCBmaWx0ZXJPYmplY3R9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcbmltcG9ydCB7XG4gICAgdmFsaWRhdGVTdHlsZSxcbiAgICB2YWxpZGF0ZUxheW91dFByb3BlcnR5LFxuICAgIHZhbGlkYXRlUGFpbnRQcm9wZXJ0eSxcbiAgICBlbWl0VmFsaWRhdGlvbkVycm9yc1xufSBmcm9tICcuL3ZhbGlkYXRlX3N0eWxlJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7TGF5b3V0LCBUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUHJvcGVydGllcywgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZUZpbHRlcn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgdHlwZSB7VHJhbnNpdGlvblBhcmFtZXRlcnMsIFByb3BlcnR5VmFsdWV9IGZyb20gJy4vcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uUGFyYW1ldGVycywge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtcbiAgICBMYXllclNwZWNpZmljYXRpb24sXG4gICAgRmlsdGVyU3BlY2lmaWNhdGlvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcbmltcG9ydCB0eXBlIHtDdXN0b21MYXllckludGVyZmFjZX0gZnJvbSAnLi9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSB7U3R5bGVTZXR0ZXJPcHRpb25zfSBmcm9tICcuL3N0eWxlJztcblxuY29uc3QgVFJBTlNJVElPTl9TVUZGSVggPSAnLXRyYW5zaXRpb24nO1xuXG5jbGFzcyBTdHlsZUxheWVyIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtZXRhZGF0YTogbWl4ZWQ7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIHNvdXJjZUxheWVyOiA/c3RyaW5nO1xuICAgIG1pbnpvb206ID9udW1iZXI7XG4gICAgbWF4em9vbTogP251bWJlcjtcbiAgICBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24gfCB2b2lkO1xuICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB8ICdub25lJyB8IHZvaWQ7XG4gICAgX2Nyb3NzZmFkZVBhcmFtZXRlcnM6IENyb3NzZmFkZVBhcmFtZXRlcnM7XG5cbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxhbnk+O1xuICAgICtsYXlvdXQ6IG1peGVkO1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPGFueT47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxhbnk+O1xuICAgICtwYWludDogbWl4ZWQ7XG5cbiAgICBfZmVhdHVyZUZpbHRlcjogRmVhdHVyZUZpbHRlcjtcblxuICAgICtxdWVyeVJhZGl1czogKGJ1Y2tldDogQnVja2V0KSA9PiBudW1iZXI7XG4gICAgK3F1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU6IChxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KSA9PiBib29sZWFuIHwgbnVtYmVyO1xuXG4gICAgK29uQWRkOiA/KG1hcDogTWFwKSA9PiB2b2lkO1xuICAgICtvblJlbW92ZTogPyhtYXA6IE1hcCkgPT4gdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24gfCBDdXN0b21MYXllckludGVyZmFjZSwgcHJvcGVydGllczogJFJlYWRPbmx5PHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPCo+LCBwYWludD86IFByb3BlcnRpZXM8Kj59Pikge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuaWQgPSBsYXllci5pZDtcbiAgICAgICAgdGhpcy50eXBlID0gbGF5ZXIudHlwZTtcbiAgICAgICAgdGhpcy5fZmVhdHVyZUZpbHRlciA9ICgpID0+IHRydWU7XG5cbiAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdjdXN0b20nKSByZXR1cm47XG5cbiAgICAgICAgbGF5ZXIgPSAoKGxheWVyOiBhbnkpOiBMYXllclNwZWNpZmljYXRpb24pO1xuXG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBsYXllci5tZXRhZGF0YTtcbiAgICAgICAgdGhpcy5taW56b29tID0gbGF5ZXIubWluem9vbTtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gbGF5ZXIubWF4em9vbTtcblxuICAgICAgICBpZiAobGF5ZXIudHlwZSAhPT0gJ2JhY2tncm91bmQnKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZSA9IGxheWVyLnNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlTGF5ZXIgPSBsYXllclsnc291cmNlLWxheWVyJ107XG4gICAgICAgICAgICB0aGlzLmZpbHRlciA9IGxheWVyLmZpbHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxheW91dCkge1xuICAgICAgICAgICAgdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQgPSBuZXcgTGF5b3V0KHByb3BlcnRpZXMubGF5b3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLnBhaW50KSB7XG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50ID0gbmV3IFRyYW5zaXRpb25hYmxlKHByb3BlcnRpZXMucGFpbnQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVyLnBhaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWludFByb3BlcnR5KHByb3BlcnR5LCBsYXllci5wYWludFtwcm9wZXJ0eV0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gbGF5ZXIubGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMYXlvdXRQcm9wZXJ0eShwcm9wZXJ0eSwgbGF5ZXIubGF5b3V0W3Byb3BlcnR5XSwge3ZhbGlkYXRlOiBmYWxzZX0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnVudHJhbnNpdGlvbmVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3Jvc3NmYWRlUGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBnZXRMYXlvdXRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICd2aXNpYmlsaXR5Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJpbGl0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZShuYW1lKTtcbiAgICB9XG5cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgbGF5ZXJzLiR7dGhpcy5pZH0ubGF5b3V0LiR7bmFtZX1gO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlTGF5b3V0UHJvcGVydHksIGtleSwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09ICd2aXNpYmlsaXR5Jykge1xuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0UGFpbnRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGVuZHNXaXRoKG5hbWUsIFRSQU5TSVRJT05fU1VGRklYKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VHJhbnNpdGlvbihuYW1lLnNsaWNlKDAsIC1UUkFOU0lUSU9OX1NVRkZJWC5sZW5ndGgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFZhbHVlKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UGFpbnRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBtaXhlZCwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBsYXllcnMuJHt0aGlzLmlkfS5wYWludC4ke25hbWV9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVBhaW50UHJvcGVydHksIGtleSwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVuZHNXaXRoKG5hbWUsIFRSQU5TSVRJT05fU1VGRklYKSkge1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRUcmFuc2l0aW9uKG5hbWUuc2xpY2UoMCwgLVRSQU5TSVRJT05fU1VGRklYLmxlbmd0aCksICh2YWx1ZTogYW55KSB8fCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbmFibGUgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzRmFkZWRQcm9wZXJ0eSA9IHRyYW5zaXRpb25hYmxlLnByb3BlcnR5LnNwZWNpZmljYXRpb25bXCJwcm9wZXJ0eS10eXBlXCJdID09PSAnY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4nO1xuICAgICAgICAgICAgY29uc3Qgd2FzRGF0YURyaXZlbiA9IHRyYW5zaXRpb25hYmxlLnZhbHVlLmlzRGF0YURyaXZlbigpO1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0cmFuc2l0aW9uYWJsZS52YWx1ZTtcblxuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZShuYW1lKTtcblxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbbmFtZV0udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBpc0RhdGFEcml2ZW4gPSBuZXdWYWx1ZS5pc0RhdGFEcml2ZW4oKTtcblxuICAgICAgICAgICAgLy8gaWYgYSBjcm9zcy1mYWRlZCB2YWx1ZSBpcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmV3IGljb25zIGdldCBhZGRlZCB0byBlYWNoIHRpbGUncyBpY29uQXRsYXNcbiAgICAgICAgICAgIC8vIHNvIGEgY2FsbCB0byBfdXBkYXRlTGF5ZXIgaXMgbmVjZXNzYXJ5LCBhbmQgd2UgcmV0dXJuIHRydWUgZnJvbSB0aGlzIGZ1bmN0aW9uIHNvIGl0IGdldHMgY2FsbGVkIGluXG4gICAgICAgICAgICAvLyBTdHlsZSNzZXRQYWludFByb3BlcnR5XG4gICAgICAgICAgICByZXR1cm4gaXNEYXRhRHJpdmVuIHx8IHdhc0RhdGFEcml2ZW4gfHwgaXNDcm9zc0ZhZGVkUHJvcGVydHkgfHwgdGhpcy5faGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGUoXzogc3RyaW5nKSB7XG4gICAgICAgIC8vIE5vLW9wOyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZXJpdmVkIGNsYXNzZXMuXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZTxULCBSPihuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+LCBuZXdWYWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPik6IGJvb2xlYW4ge1xuICAgICAgICAvLyBOby1vcDsgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNIaWRkZW4oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm1pbnpvb20gJiYgem9vbSA8IHRoaXMubWluem9vbSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLm1heHpvb20gJiYgem9vbSA+PSB0aGlzLm1heHpvb20pIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmlsaXR5ID09PSAnbm9uZSc7XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50ID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC50cmFuc2l0aW9uZWQocGFyYW1ldGVycywgdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50KTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Lmhhc1RyYW5zaXRpb24oKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmdldENyb3NzZmFkZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nyb3NzZmFkZVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl91bmV2YWx1YXRlZExheW91dCkge1xuICAgICAgICAgICAgKHRoaXM6IGFueSkubGF5b3V0ID0gdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXM6IGFueSkucGFpbnQgPSB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0OiBhbnkgPSB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLmlkLFxuICAgICAgICAgICAgJ3R5cGUnOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICAnc291cmNlJzogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAnc291cmNlLWxheWVyJzogdGhpcy5zb3VyY2VMYXllcixcbiAgICAgICAgICAgICdtZXRhZGF0YSc6IHRoaXMubWV0YWRhdGEsXG4gICAgICAgICAgICAnbWluem9vbSc6IHRoaXMubWluem9vbSxcbiAgICAgICAgICAgICdtYXh6b29tJzogdGhpcy5tYXh6b29tLFxuICAgICAgICAgICAgJ2ZpbHRlcic6IHRoaXMuZmlsdGVyLFxuICAgICAgICAgICAgJ2xheW91dCc6IHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0ICYmIHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgJ3BhaW50JzogdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludCAmJiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNlcmlhbGl6ZSgpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMudmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgb3V0cHV0LmxheW91dCA9IG91dHB1dC5sYXlvdXQgfHwge307XG4gICAgICAgICAgICBvdXRwdXQubGF5b3V0LnZpc2liaWxpdHkgPSB0aGlzLnZpc2liaWxpdHk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyT2JqZWN0KG91dHB1dCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIShrZXkgPT09ICdsYXlvdXQnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSAmJlxuICAgICAgICAgICAgICAgICEoa2V5ID09PSAncGFpbnQnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKHZhbGlkYXRlOiBGdW5jdGlvbiwga2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IG1peGVkLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnZhbGlkYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZS5jYWxsKHZhbGlkYXRlU3R5bGUsIHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGxheWVyVHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgb2JqZWN0S2V5OiBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjQwN1xuICAgICAgICAgICAgc3R5bGU6IHtnbHlwaHM6IHRydWUsIHNwcml0ZTogdHJ1ZX1cbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlzM0QoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc1RpbGVDbGlwcGVkKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFzT2Zmc2NyZWVuUGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJlc2l6ZSgpIHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIGlzU3RhdGVEZXBlbmRlbnQoKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gKHRoaXM6IGFueSkucGFpbnQuX3ZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAodGhpczogYW55KS5wYWludC5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUpIHx8ICFzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbih2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKHZhbHVlLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnIHx8IHZhbHVlLnZhbHVlLmtpbmQgPT09ICdjb21wb3NpdGUnKSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLmlzU3RhdGVEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuLy8gTm90ZTogYWxsIFwic2l6ZXNcIiBhcmUgbWVhc3VyZWQgaW4gYnl0ZXNcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNmZXJhYmxlfSBmcm9tICcuLi90eXBlcy90cmFuc2ZlcmFibGUnO1xuXG5jb25zdCB2aWV3VHlwZXMgPSB7XG4gICAgJ0ludDgnOiBJbnQ4QXJyYXksXG4gICAgJ1VpbnQ4JzogVWludDhBcnJheSxcbiAgICAnSW50MTYnOiBJbnQxNkFycmF5LFxuICAgICdVaW50MTYnOiBVaW50MTZBcnJheSxcbiAgICAnSW50MzInOiBJbnQzMkFycmF5LFxuICAgICdVaW50MzInOiBVaW50MzJBcnJheSxcbiAgICAnRmxvYXQzMic6IEZsb2F0MzJBcnJheVxufTtcblxuZXhwb3J0IHR5cGUgVmlld1R5cGUgPSAkS2V5czx0eXBlb2Ygdmlld1R5cGVzPjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3Qge1xuICAgIF9wb3MxOiBudW1iZXI7XG4gICAgX3BvczI6IG51bWJlcjtcbiAgICBfcG9zNDogbnVtYmVyO1xuICAgIF9wb3M4OiBudW1iZXI7XG4gICAgK19zdHJ1Y3RBcnJheTogU3RydWN0QXJyYXk7XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlIHByb3RvdHlwZSBvZiBzdWIgY2xhc3Nlcy5cbiAgICBzaXplOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cnVjdEFycmF5fSBzdHJ1Y3RBcnJheSBUaGUgU3RydWN0QXJyYXkgdGhlIHN0cnVjdCBpcyBzdG9yZWQgaW5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBzdHJ1Y3QgaW4gdGhlIFN0cnVjdEFycmF5LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc3RydWN0QXJyYXk6IFN0cnVjdEFycmF5LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgICh0aGlzOiBhbnkpLl9zdHJ1Y3RBcnJheSA9IHN0cnVjdEFycmF5O1xuICAgICAgICB0aGlzLl9wb3MxID0gaW5kZXggKiB0aGlzLnNpemU7XG4gICAgICAgIHRoaXMuX3BvczIgPSB0aGlzLl9wb3MxIC8gMjtcbiAgICAgICAgdGhpcy5fcG9zNCA9IHRoaXMuX3BvczEgLyA0O1xuICAgICAgICB0aGlzLl9wb3M4ID0gdGhpcy5fcG9zMSAvIDg7XG4gICAgfVxufVxuXG5jb25zdCBERUZBVUxUX0NBUEFDSVRZID0gMTI4O1xuY29uc3QgUkVTSVpFX01VTFRJUExJRVIgPSA1O1xuXG5leHBvcnQgdHlwZSBTdHJ1Y3RBcnJheU1lbWJlciA9IHtcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdHlwZTogVmlld1R5cGUsXG4gICAgY29tcG9uZW50czogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyXG59O1xuXG5leHBvcnQgdHlwZSBTdHJ1Y3RBcnJheUxheW91dCA9IHtcbiAgICBtZW1iZXJzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4sXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIGFsaWdubWVudDogP251bWJlclxufVxuXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkU3RydWN0QXJyYXkgPSB7XG4gICAgbGVuZ3RoOiBudW1iZXIsXG4gICAgYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyXG59O1xuXG4vKipcbiAqIGBTdHJ1Y3RBcnJheWAgcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gb3ZlciBgQXJyYXlCdWZmZXJgIGFuZCBgVHlwZWRBcnJheWBcbiAqIG1ha2luZyBpdCBiZWhhdmUgbGlrZSBhbiBhcnJheSBvZiB0eXBlZCBzdHJ1Y3RzLlxuICpcbiAqIENvbmNlcHR1YWxseSwgYSBTdHJ1Y3RBcnJheSBpcyBjb21wcmlzZWQgb2YgZWxlbWVudHMsIGkuZS4sIGluc3RhbmNlcyBvZiBpdHNcbiAqIGFzc29jaWF0ZWQgc3RydWN0IHR5cGUuIEVhY2ggcGFydGljdWxhciBzdHJ1Y3QgdHlwZSwgdG9nZXRoZXIgd2l0aCBhblxuICogYWxpZ25tZW50IHNpemUsIGRldGVybWluZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYSBTdHJ1Y3RBcnJheSB3aG9zZSBlbGVtZW50c1xuICogYXJlIG9mIHRoYXQgdHlwZS4gIFRodXMsIGZvciBlYWNoIHN1Y2ggbGF5b3V0IHRoYXQgd2UgbmVlZCwgd2UgaGF2ZVxuICogYSBjb3Jyc2Vwb25kaW5nIFN0cnVjdEFycmF5TGF5b3V0IGNsYXNzLCBpbmhlcml0aW5nIGZyb20gU3RydWN0QXJyYXkgYW5kXG4gKiBpbXBsZW1lbnRpbmcgYGVtcGxhY2VCYWNrKClgIGFuZCBgX3JlZnJlc2hWaWV3cygpYC5cbiAqXG4gKiBJbiBzb21lIGNhc2VzLCB3aGVyZSB3ZSBuZWVkIHRvIGFjY2VzcyBwYXJ0aWN1bGFyIGVsZW1lbnRzIG9mIGEgU3RydWN0QXJyYXksXG4gKiB3ZSBpbXBsZW1lbnQgYSBtb3JlIHNwZWNpZmljIHN1YmNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBvbmUgb2YgdGhlXG4gKiBTdHJ1Y3RBcnJheUxheW91dHMgYW5kIGFkZHMgYSBgZ2V0KGkpOiBUYCBhY2Nlc3NvciB0aGF0IHJldHVybnMgYSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgcHJveGllcyBpbnRvIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBzcGFjZSBmb3IgdGhlXG4gKiBpLXRoIGVsZW1lbnQuICBUaGlzIGFmZm9yZHMgdGhlIGNvbnZpZW5jZSBvZiB3b3JraW5nIHdpdGggKHNlZW1pbmdseSkgcGxhaW5cbiAqIEphdmFzY3JpcHQgb2JqZWN0cyB3aXRob3V0IHRoZSBvdmVyaGVhZCBvZiBzZXJpYWxpemluZy9kZXNlcmlhbGl6aW5nIHRoZW1cbiAqIGludG8gQXJyYXlCdWZmZXJzIGZvciBlZmZpY2llbnQgd2ViIHdvcmtlciB0cmFuc2Zlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheSB7XG4gICAgY2FwYWNpdHk6IG51bWJlcjtcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBpc1RyYW5zZmVycmVkOiBib29sZWFuO1xuICAgIGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcjtcbiAgICB1aW50ODogVWludDhBcnJheTtcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGUgcHJvdG90eXBlLlxuICAgIG1lbWJlcnM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBieXRlc1BlckVsZW1lbnQ6IG51bWJlcjtcbiAgICArZW1wbGFjZUJhY2s6IEZ1bmN0aW9uO1xuICAgICtlbXBsYWNlOiBGdW5jdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmlzVHJhbnNmZXJyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYXBhY2l0eSA9IC0xO1xuICAgICAgICB0aGlzLnJlc2l6ZSgwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgYSBTdHJ1Y3RBcnJheSBpbnN0YW5jZS4gIFNlcmlhbGl6ZXMgYm90aCB0aGUgcmF3IGRhdGEgYW5kIHRoZVxuICAgICAqIG1ldGFkYXRhIG5lZWRlZCB0byByZWNvbnN0cnVjdCB0aGUgU3RydWN0QXJyYXkgYmFzZSBjbGFzcyBkdXJpbmdcbiAgICAgKiBkZXNlcmlhbGl6YXRpb24uXG4gICAgICovXG4gICAgc3RhdGljIHNlcmlhbGl6ZShhcnJheTogU3RydWN0QXJyYXksIHRyYW5zZmVyYWJsZXM/OiBBcnJheTxUcmFuc2ZlcmFibGU+KTogU2VyaWFsaXplZFN0cnVjdEFycmF5IHtcbiAgICAgICAgYXNzZXJ0KCFhcnJheS5pc1RyYW5zZmVycmVkKTtcblxuICAgICAgICBhcnJheS5fdHJpbSgpO1xuXG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICBhcnJheS5pc1RyYW5zZmVycmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaChhcnJheS5hcnJheUJ1ZmZlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVuZ3RoOiBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgICBhcnJheUJ1ZmZlcjogYXJyYXkuYXJyYXlCdWZmZXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBTZXJpYWxpemVkU3RydWN0QXJyYXkpIHtcbiAgICAgICAgY29uc3Qgc3RydWN0QXJyYXkgPSBPYmplY3QuY3JlYXRlKHRoaXMucHJvdG90eXBlKTtcbiAgICAgICAgc3RydWN0QXJyYXkuYXJyYXlCdWZmZXIgPSBpbnB1dC5hcnJheUJ1ZmZlcjtcbiAgICAgICAgc3RydWN0QXJyYXkubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICBzdHJ1Y3RBcnJheS5jYXBhY2l0eSA9IGlucHV0LmFycmF5QnVmZmVyLmJ5dGVMZW5ndGggLyBzdHJ1Y3RBcnJheS5ieXRlc1BlckVsZW1lbnQ7XG4gICAgICAgIHN0cnVjdEFycmF5Ll9yZWZyZXNoVmlld3MoKTtcbiAgICAgICAgcmV0dXJuIHN0cnVjdEFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2l6ZSB0aGUgYXJyYXkgdG8gZGlzY2FyZCB1bnVzZWQgY2FwYWNpdHkuXG4gICAgICovXG4gICAgX3RyaW0oKSB7XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gdGhpcy5jYXBhY2l0eSkge1xuICAgICAgICAgICAgdGhpcy5jYXBhY2l0eSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IHRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCwgdGhpcy5sZW5ndGggKiB0aGlzLmJ5dGVzUGVyRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVmlld3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgdG8gMCB3aXRob3V0IGRlLWFsbG9jYXRpbmcgY2FwY2FjaXR5LlxuICAgICAqL1xuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzaXplIHRoZSBhcnJheS5cbiAgICAgKiBJZiBgbmAgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGxlbmd0aCB0aGVuIGFkZGl0aW9uYWwgZWxlbWVudHMgd2l0aCB1bmRlZmluZWQgdmFsdWVzIGFyZSBhZGRlZC5cbiAgICAgKiBJZiBgbmAgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGxlbmd0aCB0aGVuIHRoZSBhcnJheSB3aWxsIGJlIHJlZHVjZWQgdG8gdGhlIGZpcnN0IGBuYCBlbGVtZW50cy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbmV3IHNpemUgb2YgdGhlIGFycmF5LlxuICAgICAqL1xuICAgIHJlc2l6ZShuOiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLmlzVHJhbnNmZXJyZWQpO1xuICAgICAgICB0aGlzLnJlc2VydmUobik7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZSBhIHBsYW5uZWQgaW5jcmVhc2UgaW4gc2l6ZSwgc28gdGhhdCBhbnkgbmVjZXNzYXJ5IGFsbG9jYXRpb24gbWF5XG4gICAgICogYmUgZG9uZSBvbmNlLCBhaGVhZCBvZiB0aW1lLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBhcnJheS5cbiAgICAgKi9cbiAgICByZXNlcnZlKG46IG51bWJlcikge1xuICAgICAgICBpZiAobiA+IHRoaXMuY2FwYWNpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FwYWNpdHkgPSBNYXRoLm1heChuLCBNYXRoLmZsb29yKHRoaXMuY2FwYWNpdHkgKiBSRVNJWkVfTVVMVElQTElFUiksIERFRkFVTFRfQ0FQQUNJVFkpO1xuICAgICAgICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLmNhcGFjaXR5ICogdGhpcy5ieXRlc1BlckVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBvbGRVaW50OEFycmF5ID0gdGhpcy51aW50ODtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hWaWV3cygpO1xuICAgICAgICAgICAgaWYgKG9sZFVpbnQ4QXJyYXkpIHRoaXMudWludDguc2V0KG9sZFVpbnQ4QXJyYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIFR5cGVkQXJyYXkgdmlld3MgZm9yIHRoZSBjdXJyZW50IEFycmF5QnVmZmVyLlxuICAgICAqL1xuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignX3JlZnJlc2hWaWV3cygpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBjb25jcmV0ZSBTdHJ1Y3RBcnJheSBsYXlvdXQnKTtcbiAgICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBsaXN0IG9mIG1lbWJlciBmaWVsZHMsIGNyZWF0ZSBhIGZ1bGwgU3RydWN0QXJyYXlMYXlvdXQsIGluXG4gKiBwYXJ0aWN1bGFyIGNhbGN1bGF0aW5nIHRoZSBjb3JyZWN0IGJ5dGUgb2Zmc2V0IGZvciBlYWNoIGZpZWxkLiAgVGhpcyBkYXRhXG4gKiBpcyB1c2VkIGF0IGJ1aWxkIHRpbWUgdG8gZ2VuZXJhdGUgU3RydWN0QXJyYXlMYXlvdXRfKiNlbXBsYWNlQmFjaygpIGFuZFxuICogb3RoZXIgYWNjZXNzb3JzLCBhbmQgYXQgcnVudGltZSBmb3IgYmluZGluZyB2ZXJ0ZXggYnVmZmVyIGF0dHJpYnV0ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTGF5b3V0KFxuICAgIG1lbWJlcnM6IEFycmF5PHsgbmFtZTogc3RyaW5nLCB0eXBlOiBWaWV3VHlwZSwgK2NvbXBvbmVudHM/OiBudW1iZXIsIH0+LFxuICAgIGFsaWdubWVudDogbnVtYmVyID0gMVxuKTogU3RydWN0QXJyYXlMYXlvdXQge1xuXG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IG1heFNpemUgPSAwO1xuICAgIGNvbnN0IGxheW91dE1lbWJlcnMgPSBtZW1iZXJzLm1hcCgobWVtYmVyKSA9PiB7XG4gICAgICAgIGFzc2VydChtZW1iZXIubmFtZS5sZW5ndGgpO1xuICAgICAgICBjb25zdCB0eXBlU2l6ZSA9IHNpemVPZihtZW1iZXIudHlwZSk7XG4gICAgICAgIGNvbnN0IG1lbWJlck9mZnNldCA9IG9mZnNldCA9IGFsaWduKG9mZnNldCwgTWF0aC5tYXgoYWxpZ25tZW50LCB0eXBlU2l6ZSkpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gbWVtYmVyLmNvbXBvbmVudHMgfHwgMTtcblxuICAgICAgICBtYXhTaXplID0gTWF0aC5tYXgobWF4U2l6ZSwgdHlwZVNpemUpO1xuICAgICAgICBvZmZzZXQgKz0gdHlwZVNpemUgKiBjb21wb25lbnRzO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBtZW1iZXIubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IG1lbWJlci50eXBlLFxuICAgICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICAgIG9mZnNldDogbWVtYmVyT2Zmc2V0LFxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2l6ZSA9IGFsaWduKG9mZnNldCwgTWF0aC5tYXgobWF4U2l6ZSwgYWxpZ25tZW50KSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBtZW1iZXJzOiBsYXlvdXRNZW1iZXJzLFxuICAgICAgICBzaXplLFxuICAgICAgICBhbGlnbm1lbnRcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzaXplT2YodHlwZTogVmlld1R5cGUpOiBudW1iZXIge1xuICAgIHJldHVybiB2aWV3VHlwZXNbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG59XG5cbmZ1bmN0aW9uIGFsaWduKG9mZnNldDogbnVtYmVyLCBzaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmNlaWwob2Zmc2V0IC8gc2l6ZSkgKiBzaXplO1xufVxuXG5leHBvcnQge1N0cnVjdEFycmF5LCBTdHJ1Y3QsIHZpZXdUeXBlcywgY3JlYXRlTGF5b3V0fTtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3RydWN0LWFycmF5cy5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtTdHJ1Y3QsIFN0cnVjdEFycmF5fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyaTQgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0Mmk0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0Mmk0JywgU3RydWN0QXJyYXlMYXlvdXQyaTQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ0aTggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA0O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDRpOC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDRpOCcsIFN0cnVjdEFycmF5TGF5b3V0NGk4KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlsyXVxuICogWzRdOiBJbnQxNls0XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA2O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxMjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJpNGkxMicsIFN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlsyXVxuICogWzRdOiBVaW50OFs0XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA0O1xuICAgICAgICBjb25zdCBvMSA9IGkgKiA4O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyA0XSA9IHYyO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgNV0gPSB2MztcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDZdID0gdjQ7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyA3XSA9IHY1O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0Mmk0dWI4JywgU3RydWN0QXJyYXlMYXlvdXQyaTR1YjgpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQxNls4XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0OHVpMTYgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDg7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNl0gPSB2NjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA3XSA9IHY3O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0OHVpMTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDE2O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0OHVpMTYnLCBTdHJ1Y3RBcnJheUxheW91dDh1aTE2KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNls0XVxuICogWzhdOiBVaW50MTZbNF1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDRpNHVpMTYgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2Nyk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogODtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNF0gPSB2NDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDZdID0gdjY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgN10gPSB2NztcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDRpNHVpMTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDE2O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0NGk0dWkxNicsIFN0cnVjdEFycmF5TGF5b3V0NGk0dWkxNik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogRmxvYXQzMlszXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0M2YxMiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAzO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAyXSA9IHYyO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0M2YxMi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTI7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQzZjEyJywgU3RydWN0QXJyYXlMYXlvdXQzZjEyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50MzJbMV1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDF1bDQgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MzIgPSBuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMTtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MXVsNC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDF1bDQnLCBTdHJ1Y3RBcnJheUxheW91dDF1bDQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzZdXG4gKiBbMTJdOiBVaW50MzJbMV1cbiAqIFsxNl06IFVpbnQxNlsyXVxuICogWzIwXTogSW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMmkyNCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MzIgPSBuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LCB2MTApO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAxMjtcbiAgICAgICAgY29uc3QgbzQgPSBpICogNjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNV0gPSB2NTtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAzXSA9IHY2O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDhdID0gdjc7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgOV0gPSB2ODtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDEwXSA9IHY5O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMTFdID0gdjEwO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAyNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMmkyNCcsIFN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlsyXVxuICogWzRdOiBJbnQxNlsyXVxuICogWzhdOiBJbnQxNlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDY7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICB0aGlzLmludDE2W28yICsgNF0gPSB2NDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTI7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMicsIFN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQ4WzJdXG4gKiBbNF06IEZsb2F0MzJbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8xID0gaSAqIDEyO1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAzO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDFdID0gdjI7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDJdID0gdjM7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxMjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTInLCBTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzJdXG4gKiBbNF06IFVpbnQxNlsyXVxuICogWzhdOiBVaW50MzJbM11cbiAqIFsyMF06IFVpbnQxNlszXVxuICogWzI4XTogRmxvYXQzMlsyXVxuICogWzM2XTogVWludDhbM11cbiAqIFs0MF06IFVpbnQzMlsxXVxuICogWzQ0XTogSW50MTZbMV1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyLCB2MTE6IG51bWJlciwgdjEyOiBudW1iZXIsIHYxMzogbnVtYmVyLCB2MTQ6IG51bWJlciwgdjE1OiBudW1iZXIsIHYxNjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LCB2MTAsIHYxMSwgdjEyLCB2MTMsIHYxNCwgdjE1LCB2MTYpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlciwgdjExOiBudW1iZXIsIHYxMjogbnVtYmVyLCB2MTM6IG51bWJlciwgdjE0OiBudW1iZXIsIHYxNTogbnVtYmVyLCB2MTY6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAyNDtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMTI7XG4gICAgICAgIGNvbnN0IG8xID0gaSAqIDQ4O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDJdID0gdjQ7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgM10gPSB2NTtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyA0XSA9IHY2O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEwXSA9IHY3O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDExXSA9IHY4O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEyXSA9IHY5O1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyA3XSA9IHYxMDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgOF0gPSB2MTE7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAzNl0gPSB2MTI7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAzN10gPSB2MTM7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAzOF0gPSB2MTQ7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMTBdID0gdjE1O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMjJdID0gdjE2O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDQ4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgnLCBTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNls3XVxuICogWzE0XTogVWludDE2WzExXVxuICogWzM2XTogVWludDMyWzFdXG4gKiBbNDBdOiBGbG9hdDMyWzNdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ3aTExdWkxdWwzZjUyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyLCB2MTE6IG51bWJlciwgdjEyOiBudW1iZXIsIHYxMzogbnVtYmVyLCB2MTQ6IG51bWJlciwgdjE1OiBudW1iZXIsIHYxNjogbnVtYmVyLCB2MTc6IG51bWJlciwgdjE4OiBudW1iZXIsIHYxOTogbnVtYmVyLCB2MjA6IG51bWJlciwgdjIxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlciwgdjExOiBudW1iZXIsIHYxMjogbnVtYmVyLCB2MTM6IG51bWJlciwgdjE0OiBudW1iZXIsIHYxNTogbnVtYmVyLCB2MTY6IG51bWJlciwgdjE3OiBudW1iZXIsIHYxODogbnVtYmVyLCB2MTk6IG51bWJlciwgdjIwOiBudW1iZXIsIHYyMTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDI2O1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxMztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNV0gPSB2NTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDZdID0gdjY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgN10gPSB2NztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA4XSA9IHY4O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDldID0gdjk7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTBdID0gdjEwO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDExXSA9IHYxMTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMl0gPSB2MTI7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTNdID0gdjEzO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE0XSA9IHYxNDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxNV0gPSB2MTU7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTZdID0gdjE2O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE3XSA9IHYxNztcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyA5XSA9IHYxODtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMTBdID0gdjE5O1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxMV0gPSB2MjA7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDEyXSA9IHYyMTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDdpMTF1aTF1bDNmNTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDUyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0N2kxMXVpMXVsM2Y1MicsIFN0cnVjdEFycmF5TGF5b3V0N2kxMXVpMXVsM2Y1Mik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogRmxvYXQzMlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MWY0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MWY0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MWY0JywgU3RydWN0QXJyYXlMYXlvdXQxZjQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzNdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQzaTYgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQzaTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQzaTYnLCBTdHJ1Y3RBcnJheUxheW91dDNpNik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDMyWzFdXG4gKiBbNF06IFVpbnQxNlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDI7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDQ7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDNdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCcsIFN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDE2WzNdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQzdWk2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2Mik7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDN1aTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQzdWk2JywgU3RydWN0QXJyYXlMYXlvdXQzdWk2KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJ1aTQgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDI7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MnVpNC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJ1aTQnLCBTdHJ1Y3RBcnJheUxheW91dDJ1aTQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQxNlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MXVpMiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQxdWkyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MXVpMicsIFN0cnVjdEFycmF5TGF5b3V0MXVpMik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogRmxvYXQzMlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MmY4IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMjtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMV0gPSB2MTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJmOC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJmOCcsIFN0cnVjdEFycmF5TGF5b3V0MmY4KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBGbG9hdDMyWzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ0ZjE2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiA0O1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAzXSA9IHYzO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0NGYxNi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQ0ZjE2JywgU3RydWN0QXJyYXlMYXlvdXQ0ZjE2KTtcblxuY2xhc3MgQ29sbGlzaW9uQm94U3RydWN0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfc3RydWN0QXJyYXk6IENvbGxpc2lvbkJveEFycmF5O1xuICAgIGFuY2hvclBvaW50WDogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50WTogbnVtYmVyO1xuICAgIHgxOiBudW1iZXI7XG4gICAgeTE6IG51bWJlcjtcbiAgICB4MjogbnVtYmVyO1xuICAgIHkyOiBudW1iZXI7XG4gICAgZmVhdHVyZUluZGV4OiBudW1iZXI7XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgcmFkaXVzOiBudW1iZXI7XG4gICAgc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yOiBudW1iZXI7XG4gICAgYW5jaG9yUG9pbnQ6IFBvaW50O1xuICAgIGdldCBhbmNob3JQb2ludFgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBzZXQgYW5jaG9yUG9pbnRYKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF0gPSB4OyB9XG4gICAgZ2V0IGFuY2hvclBvaW50WSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIHNldCBhbmNob3JQb2ludFkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXSA9IHg7IH1cbiAgICBnZXQgeDEoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMl07IH1cbiAgICBzZXQgeDEoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAyXSA9IHg7IH1cbiAgICBnZXQgeTEoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBzZXQgeTEoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAzXSA9IHg7IH1cbiAgICBnZXQgeDIoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNF07IH1cbiAgICBzZXQgeDIoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA0XSA9IHg7IH1cbiAgICBnZXQgeTIoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNV07IH1cbiAgICBzZXQgeTIoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA1XSA9IHg7IH1cbiAgICBnZXQgZmVhdHVyZUluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAzXTsgfVxuICAgIHNldCBmZWF0dXJlSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgM10gPSB4OyB9XG4gICAgZ2V0IHNvdXJjZUxheWVySW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDhdOyB9XG4gICAgc2V0IHNvdXJjZUxheWVySW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgOF0gPSB4OyB9XG4gICAgZ2V0IGJ1Y2tldEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA5XTsgfVxuICAgIHNldCBidWNrZXRJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA5XSA9IHg7IH1cbiAgICBnZXQgcmFkaXVzKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIHNldCByYWRpdXMoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxMF0gPSB4OyB9XG4gICAgZ2V0IHNpZ25lZERpc3RhbmNlRnJvbUFuY2hvcigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBzZXQgc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMTFdID0geDsgfVxuICAgIGdldCBhbmNob3JQb2ludCgpIHsgcmV0dXJuIG5ldyBQb2ludCh0aGlzLmFuY2hvclBvaW50WCwgdGhpcy5hbmNob3JQb2ludFkpOyB9XG59XG5cbkNvbGxpc2lvbkJveFN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDI0O1xuXG5leHBvcnQgdHlwZSBDb2xsaXNpb25Cb3ggPSBDb2xsaXNpb25Cb3hTdHJ1Y3Q7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbGxpc2lvbkJveEFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgQ29sbGlzaW9uQm94U3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IENvbGxpc2lvbkJveFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsaXNpb25Cb3hTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0NvbGxpc2lvbkJveEFycmF5JywgQ29sbGlzaW9uQm94QXJyYXkpO1xuXG5jbGFzcyBQbGFjZWRTeW1ib2xTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogUGxhY2VkU3ltYm9sQXJyYXk7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICBnbHlwaFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBudW1HbHlwaHM6IG51bWJlcjtcbiAgICB2ZXJ0ZXhTdGFydEluZGV4OiBudW1iZXI7XG4gICAgbGluZVN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBsaW5lTGVuZ3RoOiBudW1iZXI7XG4gICAgc2VnbWVudDogbnVtYmVyO1xuICAgIGxvd2VyU2l6ZTogbnVtYmVyO1xuICAgIHVwcGVyU2l6ZTogbnVtYmVyO1xuICAgIGxpbmVPZmZzZXRYOiBudW1iZXI7XG4gICAgbGluZU9mZnNldFk6IG51bWJlcjtcbiAgICB3cml0aW5nTW9kZTogbnVtYmVyO1xuICAgIHBsYWNlZE9yaWVudGF0aW9uOiBudW1iZXI7XG4gICAgaGlkZGVuOiBudW1iZXI7XG4gICAgY3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICBhc3NvY2lhdGVkSWNvbkluZGV4OiBudW1iZXI7XG4gICAgZ2V0IGFuY2hvclgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBzZXQgYW5jaG9yWCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdID0geDsgfVxuICAgIGdldCBhbmNob3JZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDFdOyB9XG4gICAgc2V0IGFuY2hvclkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXSA9IHg7IH1cbiAgICBnZXQgZ2x5cGhTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIHNldCBnbHlwaFN0YXJ0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMl0gPSB4OyB9XG4gICAgZ2V0IG51bUdseXBocygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBzZXQgbnVtR2x5cGhzKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDNdID0geDsgfVxuICAgIGdldCB2ZXJ0ZXhTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAyXTsgfVxuICAgIHNldCB2ZXJ0ZXhTdGFydEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDJdID0geDsgfVxuICAgIGdldCBsaW5lU3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgM107IH1cbiAgICBzZXQgbGluZVN0YXJ0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgM10gPSB4OyB9XG4gICAgZ2V0IGxpbmVMZW5ndGgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDRdOyB9XG4gICAgc2V0IGxpbmVMZW5ndGgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgNF0gPSB4OyB9XG4gICAgZ2V0IHNlZ21lbnQoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIHNldCBzZWdtZW50KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXSA9IHg7IH1cbiAgICBnZXQgbG93ZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBzZXQgbG93ZXJTaXplKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDExXSA9IHg7IH1cbiAgICBnZXQgdXBwZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMl07IH1cbiAgICBzZXQgdXBwZXJTaXplKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEyXSA9IHg7IH1cbiAgICBnZXQgbGluZU9mZnNldFgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQgKyA3XTsgfVxuICAgIHNldCBsaW5lT2Zmc2V0WCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgN10gPSB4OyB9XG4gICAgZ2V0IGxpbmVPZmZzZXRZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgOF07IH1cbiAgICBzZXQgbGluZU9mZnNldFkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDhdID0geDsgfVxuICAgIGdldCB3cml0aW5nTW9kZSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzNl07IH1cbiAgICBzZXQgd3JpdGluZ01vZGUoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzNl0gPSB4OyB9XG4gICAgZ2V0IHBsYWNlZE9yaWVudGF0aW9uKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM3XTsgfVxuICAgIHNldCBwbGFjZWRPcmllbnRhdGlvbih4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM3XSA9IHg7IH1cbiAgICBnZXQgaGlkZGVuKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM4XTsgfVxuICAgIHNldCBoaWRkZW4oeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzOF0gPSB4OyB9XG4gICAgZ2V0IGNyb3NzVGlsZUlEKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAxMF07IH1cbiAgICBzZXQgY3Jvc3NUaWxlSUQoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMTBdID0geDsgfVxuICAgIGdldCBhc3NvY2lhdGVkSWNvbkluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDIyXTsgfVxuICAgIHNldCBhc3NvY2lhdGVkSWNvbkluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMjJdID0geDsgfVxufVxuXG5QbGFjZWRTeW1ib2xTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSA0ODtcblxuZXhwb3J0IHR5cGUgUGxhY2VkU3ltYm9sID0gUGxhY2VkU3ltYm9sU3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQbGFjZWRTeW1ib2xBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGxhY2VkU3ltYm9sU3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IFBsYWNlZFN5bWJvbFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQbGFjZWRTeW1ib2xTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1BsYWNlZFN5bWJvbEFycmF5JywgUGxhY2VkU3ltYm9sQXJyYXkpO1xuXG5jbGFzcyBTeW1ib2xJbnN0YW5jZVN0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX3N0cnVjdEFycmF5OiBTeW1ib2xJbnN0YW5jZUFycmF5O1xuICAgIGFuY2hvclg6IG51bWJlcjtcbiAgICBhbmNob3JZOiBudW1iZXI7XG4gICAgcmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBwbGFjZWRJY29uU3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBrZXk6IG51bWJlcjtcbiAgICB0ZXh0Qm94U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHRleHRCb3hFbmRJbmRleDogbnVtYmVyO1xuICAgIHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleDogbnVtYmVyO1xuICAgIGljb25Cb3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgaWNvbkJveEVuZEluZGV4OiBudW1iZXI7XG4gICAgZmVhdHVyZUluZGV4OiBudW1iZXI7XG4gICAgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXM6IG51bWJlcjtcbiAgICBudW1WZXJ0aWNhbEdseXBoVmVydGljZXM6IG51bWJlcjtcbiAgICBudW1JY29uVmVydGljZXM6IG51bWJlcjtcbiAgICBjcm9zc1RpbGVJRDogbnVtYmVyO1xuICAgIHRleHRCb3hTY2FsZTogbnVtYmVyO1xuICAgIHRleHRPZmZzZXQwOiBudW1iZXI7XG4gICAgdGV4dE9mZnNldDE6IG51bWJlcjtcbiAgICBnZXQgYW5jaG9yWCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAwXTsgfVxuICAgIHNldCBhbmNob3JYKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF0gPSB4OyB9XG4gICAgZ2V0IGFuY2hvclkoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMV07IH1cbiAgICBzZXQgYW5jaG9yWSh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDFdID0geDsgfVxuICAgIGdldCByaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIHNldCByaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDJdID0geDsgfVxuICAgIGdldCBjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBzZXQgY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgM10gPSB4OyB9XG4gICAgZ2V0IGxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNF07IH1cbiAgICBzZXQgbGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDRdID0geDsgfVxuICAgIGdldCB2ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA1XTsgfVxuICAgIHNldCB2ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDVdID0geDsgfVxuICAgIGdldCBwbGFjZWRJY29uU3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNl07IH1cbiAgICBzZXQgcGxhY2VkSWNvblN5bWJvbEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNl0gPSB4OyB9XG4gICAgZ2V0IGtleSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgN107IH1cbiAgICBzZXQga2V5KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDddID0geDsgfVxuICAgIGdldCB0ZXh0Qm94U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgOF07IH1cbiAgICBzZXQgdGV4dEJveFN0YXJ0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgOF0gPSB4OyB9XG4gICAgZ2V0IHRleHRCb3hFbmRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgOV07IH1cbiAgICBzZXQgdGV4dEJveEVuZEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDldID0geDsgfVxuICAgIGdldCB2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMF07IH1cbiAgICBzZXQgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMF0gPSB4OyB9XG4gICAgZ2V0IHZlcnRpY2FsVGV4dEJveEVuZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBzZXQgdmVydGljYWxUZXh0Qm94RW5kSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTFdID0geDsgfVxuICAgIGdldCBpY29uQm94U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTJdOyB9XG4gICAgc2V0IGljb25Cb3hTdGFydEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEyXSA9IHg7IH1cbiAgICBnZXQgaWNvbkJveEVuZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxM107IH1cbiAgICBzZXQgaWNvbkJveEVuZEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEzXSA9IHg7IH1cbiAgICBnZXQgZmVhdHVyZUluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxNF07IH1cbiAgICBzZXQgZmVhdHVyZUluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE0XSA9IHg7IH1cbiAgICBnZXQgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE1XTsgfVxuICAgIHNldCBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxNV0gPSB4OyB9XG4gICAgZ2V0IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTZdOyB9XG4gICAgc2V0IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxNl0gPSB4OyB9XG4gICAgZ2V0IG51bUljb25WZXJ0aWNlcygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTddOyB9XG4gICAgc2V0IG51bUljb25WZXJ0aWNlcyh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxN10gPSB4OyB9XG4gICAgZ2V0IGNyb3NzVGlsZUlEKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyA5XTsgfVxuICAgIHNldCBjcm9zc1RpbGVJRCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyA5XSA9IHg7IH1cbiAgICBnZXQgdGV4dEJveFNjYWxlKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTBdOyB9XG4gICAgc2V0IHRleHRCb3hTY2FsZSh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTBdID0geDsgfVxuICAgIGdldCB0ZXh0T2Zmc2V0MCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDExXTsgfVxuICAgIHNldCB0ZXh0T2Zmc2V0MCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTFdID0geDsgfVxuICAgIGdldCB0ZXh0T2Zmc2V0MSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDEyXTsgfVxuICAgIHNldCB0ZXh0T2Zmc2V0MSh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTJdID0geDsgfVxufVxuXG5TeW1ib2xJbnN0YW5jZVN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDUyO1xuXG5leHBvcnQgdHlwZSBTeW1ib2xJbnN0YW5jZSA9IFN5bWJvbEluc3RhbmNlU3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBTeW1ib2xJbnN0YW5jZUFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQ3aTExdWkxdWwzZjUyIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFN5bWJvbEluc3RhbmNlU3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IFN5bWJvbEluc3RhbmNlU3RydWN0IHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLmlzVHJhbnNmZXJyZWQpO1xuICAgICAgICByZXR1cm4gbmV3IFN5bWJvbEluc3RhbmNlU3RydWN0KHRoaXMsIGluZGV4KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xJbnN0YW5jZUFycmF5JywgU3ltYm9sSW5zdGFuY2VBcnJheSk7XG5cbmNsYXNzIEdseXBoT2Zmc2V0U3RydWN0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfc3RydWN0QXJyYXk6IEdseXBoT2Zmc2V0QXJyYXk7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIGdldCBvZmZzZXRYKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMF07IH1cbiAgICBzZXQgb2Zmc2V0WCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMF0gPSB4OyB9XG59XG5cbkdseXBoT2Zmc2V0U3RydWN0LnByb3RvdHlwZS5zaXplID0gNDtcblxuZXhwb3J0IHR5cGUgR2x5cGhPZmZzZXQgPSBHbHlwaE9mZnNldFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgR2x5cGhPZmZzZXRBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0MWY0IHtcbiAgICBnZXRvZmZzZXRYKGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuZmxvYXQzMltpbmRleCAqIDEgKyAwXTsgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgR2x5cGhPZmZzZXRTdHJ1Y3QgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIGluIHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogR2x5cGhPZmZzZXRTdHJ1Y3Qge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaXNUcmFuc2ZlcnJlZCk7XG4gICAgICAgIHJldHVybiBuZXcgR2x5cGhPZmZzZXRTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0dseXBoT2Zmc2V0QXJyYXknLCBHbHlwaE9mZnNldEFycmF5KTtcblxuY2xhc3MgU3ltYm9sTGluZVZlcnRleFN0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX3N0cnVjdEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXk7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjogbnVtYmVyO1xuICAgIGdldCB4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdOyB9XG4gICAgc2V0IHgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAwXSA9IHg7IH1cbiAgICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIHNldCB5KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMV0gPSB4OyB9XG4gICAgZ2V0IHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDJdOyB9XG4gICAgc2V0IHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMl0gPSB4OyB9XG59XG5cblN5bWJvbExpbmVWZXJ0ZXhTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSA2O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xMaW5lVmVydGV4ID0gU3ltYm9sTGluZVZlcnRleFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgU3ltYm9sTGluZVZlcnRleEFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQzaTYge1xuICAgIGdldHgoaW5kZXg6IG51bWJlcikgeyByZXR1cm4gdGhpcy5pbnQxNltpbmRleCAqIDMgKyAwXTsgfVxuICAgIGdldHkoaW5kZXg6IG51bWJlcikgeyByZXR1cm4gdGhpcy5pbnQxNltpbmRleCAqIDMgKyAxXTsgfVxuICAgIGdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuaW50MTZbaW5kZXggKiAzICsgMl07IH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFN5bWJvbExpbmVWZXJ0ZXhTdHJ1Y3QgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIGluIHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogU3ltYm9sTGluZVZlcnRleFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xMaW5lVmVydGV4U3RydWN0KHRoaXMsIGluZGV4KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xMaW5lVmVydGV4QXJyYXknLCBTeW1ib2xMaW5lVmVydGV4QXJyYXkpO1xuXG5jbGFzcyBGZWF0dXJlSW5kZXhTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogRmVhdHVyZUluZGV4QXJyYXk7XG4gICAgZmVhdHVyZUluZGV4OiBudW1iZXI7XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgZ2V0IGZlYXR1cmVJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMF07IH1cbiAgICBzZXQgZmVhdHVyZUluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDBdID0geDsgfVxuICAgIGdldCBzb3VyY2VMYXllckluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIHNldCBzb3VyY2VMYXllckluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDJdID0geDsgfVxuICAgIGdldCBidWNrZXRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBzZXQgYnVja2V0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM10gPSB4OyB9XG59XG5cbkZlYXR1cmVJbmRleFN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDg7XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVJbmRleCA9IEZlYXR1cmVJbmRleFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgRmVhdHVyZUluZGV4QXJyYXkgZXh0ZW5kcyBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgRmVhdHVyZUluZGV4U3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IEZlYXR1cmVJbmRleFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBGZWF0dXJlSW5kZXhTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0ZlYXR1cmVJbmRleEFycmF5JywgRmVhdHVyZUluZGV4QXJyYXkpO1xuXG5leHBvcnQge1xuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NGk4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0OHVpMTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTE2LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M2YxMixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDF1bDQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDdpMTF1aTF1bDNmNTIsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxZjQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQzaTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M3VpNixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJ1aTQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWkyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MmY4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NGYxNixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNCBhcyBQb3NBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDRpOCBhcyBSYXN0ZXJCb3VuZHNBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNCBhcyBDaXJjbGVMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNCBhcyBGaWxsTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIgYXMgRmlsbEV4dHJ1c2lvbkxheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0IGFzIEhlYXRtYXBMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNHViOCBhcyBMaW5lTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ4dWkxNiBhcyBQYXR0ZXJuTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTE2IGFzIFN5bWJvbExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M2YxMiBhcyBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWw0IGFzIFN5bWJvbE9wYWNpdHlBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIGFzIENvbGxpc2lvbkJveExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIgYXMgQ29sbGlzaW9uQ2lyY2xlTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyIGFzIENvbGxpc2lvblZlcnRleEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M3VpNiBhcyBUcmlhbmdsZUluZGV4QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWk0IGFzIExpbmVJbmRleEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MXVpMiBhcyBMaW5lU3RyaXBJbmRleEFycmF5XG59O1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmNvbnN0IGxheW91dCA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3BvcycsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9XG5dLCA0KTtcblxuZXhwb3J0IGRlZmF1bHQgbGF5b3V0O1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGF5b3V0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuaW1wb3J0IHR5cGUgVmVydGV4QXJyYXlPYmplY3QgZnJvbSAnLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QnO1xuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmV4cG9ydCB0eXBlIFNlZ21lbnQgPSB7XG4gICAgc29ydEtleTogbnVtYmVyIHwgdm9pZCxcbiAgICB2ZXJ0ZXhPZmZzZXQ6IG51bWJlcixcbiAgICBwcmltaXRpdmVPZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0ZXhMZW5ndGg6IG51bWJlcixcbiAgICBwcmltaXRpdmVMZW5ndGg6IG51bWJlcixcbiAgICB2YW9zOiB7W3N0cmluZ106IFZlcnRleEFycmF5T2JqZWN0fVxufVxuXG5jbGFzcyBTZWdtZW50VmVjdG9yIHtcbiAgICBzdGF0aWMgTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg6IG51bWJlcjtcbiAgICBzZWdtZW50czogQXJyYXk8U2VnbWVudD47XG5cbiAgICBjb25zdHJ1Y3RvcihzZWdtZW50cz86IEFycmF5PFNlZ21lbnQ+ID0gW10pIHtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IHNlZ21lbnRzO1xuICAgIH1cblxuICAgIHByZXBhcmVTZWdtZW50KG51bVZlcnRpY2VzOiBudW1iZXIsIGxheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheSwgaW5kZXhBcnJheTogU3RydWN0QXJyYXksIHNvcnRLZXk/OiBudW1iZXIpOiBTZWdtZW50IHtcbiAgICAgICAgbGV0IHNlZ21lbnQ6IFNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzW3RoaXMuc2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChudW1WZXJ0aWNlcyA+IFNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgpIHdhcm5PbmNlKGBNYXggdmVydGljZXMgcGVyIHNlZ21lbnQgaXMgJHtTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIfTogYnVja2V0IHJlcXVlc3RlZCAke251bVZlcnRpY2VzfWApO1xuICAgICAgICBpZiAoIXNlZ21lbnQgfHwgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKyBudW1WZXJ0aWNlcyA+IFNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEggfHwgc2VnbWVudC5zb3J0S2V5ICE9PSBzb3J0S2V5KSB7XG4gICAgICAgICAgICBzZWdtZW50ID0gKHtcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQ6IGxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVPZmZzZXQ6IGluZGV4QXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHZlcnRleExlbmd0aDogMCxcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVMZW5ndGg6IDBcbiAgICAgICAgICAgIH06IGFueSk7XG4gICAgICAgICAgICBpZiAoc29ydEtleSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnNvcnRLZXkgPSBzb3J0S2V5O1xuICAgICAgICAgICAgdGhpcy5zZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWdtZW50O1xuICAgIH1cblxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VnbWVudHM7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHRoaXMuc2VnbWVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBpbiBzZWdtZW50LnZhb3MpIHtcbiAgICAgICAgICAgICAgICBzZWdtZW50LnZhb3Nba10uZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHNpbXBsZVNlZ21lbnQodmVydGV4T2Zmc2V0OiBudW1iZXIsIHByaW1pdGl2ZU9mZnNldDogbnVtYmVyLCB2ZXJ0ZXhMZW5ndGg6IG51bWJlciwgcHJpbWl0aXZlTGVuZ3RoOiBudW1iZXIpOiBTZWdtZW50VmVjdG9yIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWdtZW50VmVjdG9yKFt7XG4gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQsXG4gICAgICAgICAgICBwcmltaXRpdmVPZmZzZXQsXG4gICAgICAgICAgICB2ZXJ0ZXhMZW5ndGgsXG4gICAgICAgICAgICBwcmltaXRpdmVMZW5ndGgsXG4gICAgICAgICAgICB2YW9zOiB7fSxcbiAgICAgICAgICAgIHNvcnRLZXk6IDBcbiAgICAgICAgfV0pO1xuICAgIH1cbn1cblxuLypcbiAqIFRoZSBtYXhpbXVtIHNpemUgb2YgYSB2ZXJ0ZXggYXJyYXkuIFRoaXMgbGltaXQgaXMgaW1wb3NlZCBieSBXZWJHTCdzIDE2IGJpdFxuICogYWRkcmVzc2luZyBvZiB2ZXJ0ZXggYnVmZmVycy5cbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqL1xuU2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCA9IE1hdGgucG93KDIsIDE2KSAtIDE7XG5cbnJlZ2lzdGVyKCdTZWdtZW50VmVjdG9yJywgU2VnbWVudFZlY3Rvcik7XG5leHBvcnQgZGVmYXVsdCBTZWdtZW50VmVjdG9yO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuLyoqXG4gKiBQYWNrcyB0d28gbnVtYmVycywgaW50ZXJwcmV0ZWQgYXMgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMsIGludG8gYSBzaW5nbGVcbiAqIGZsb2F0LiAgVW5wYWNrIHRoZW0gaW4gdGhlIHNoYWRlciB1c2luZyB0aGUgYHVucGFja19mbG9hdCgpYCBmdW5jdGlvbixcbiAqIGRlZmluZWQgaW4gX3ByZWx1ZGUudmVydGV4Lmdsc2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFja1VpbnQ4VG9GbG9hdChhOiBudW1iZXIsIGI6IG51bWJlcikge1xuICAgIC8vIGNvZXJjZSBhIGFuZCBiIHRvIDgtYml0IGludHNcbiAgICBhID0gY2xhbXAoTWF0aC5mbG9vcihhKSwgMCwgMjU1KTtcbiAgICBiID0gY2xhbXAoTWF0aC5mbG9vcihiKSwgMCwgMjU1KTtcbiAgICByZXR1cm4gMjU2ICogYSArIGI7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG50eXBlIFNlcmlhbGl6ZWRGZWF0dXJlUG9zaXRpb25NYXAgPSB7XG4gICAgaWRzOiBGbG9hdDY0QXJyYXk7XG4gICAgcG9zaXRpb25zOiBVaW50MzJBcnJheTtcbn07XG5cbnR5cGUgRmVhdHVyZVBvc2l0aW9uID0ge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICBlbmQ6IG51bWJlcjtcbn07XG5cbi8vIEEgdHJhbnNmZXJhYmxlIGRhdGEgc3RydWN0dXJlIHRoYXQgbWFwcyBmZWF0dXJlIGlkcyB0byB0aGVpciBpbmRpY2VzIGFuZCBidWZmZXIgb2Zmc2V0c1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZVBvc2l0aW9uTWFwIHtcbiAgICBpZHM6IEFycmF5PG51bWJlcj47XG4gICAgcG9zaXRpb25zOiBBcnJheTxudW1iZXI+O1xuICAgIGluZGV4ZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pZHMgPSBbXTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5pbmRleGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYWRkKGlkOiBudW1iZXIsIGluZGV4OiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuaWRzLnB1c2goaWQpO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucy5wdXNoKGluZGV4LCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICBnZXRQb3NpdGlvbnMoaWQ6IG51bWJlcik6IEFycmF5PEZlYXR1cmVQb3NpdGlvbj4ge1xuICAgICAgICBhc3NlcnQodGhpcy5pbmRleGVkKTtcblxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoIGZvciB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBpZCBpbiB0aGlzLmlkcztcbiAgICAgICAgLy8gcmVsaWVzIG9uIGlkcy9wb3NpdGlvbnMgYmVpbmcgc29ydGVkIGJ5IGlkLCB3aGljaCBoYXBwZW5zIGluIHNlcmlhbGl6YXRpb25cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgaiA9IHRoaXMuaWRzLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgICAgICAgY29uc3QgbSA9IChpICsgaikgPj4gMTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlkc1ttXSA+PSBpZCkge1xuICAgICAgICAgICAgICAgIGogPSBtO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpID0gbSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLmlkc1tpXSA9PT0gaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wb3NpdGlvbnNbMyAqIGldO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBvc2l0aW9uc1szICogaSArIDFdO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wb3NpdGlvbnNbMyAqIGkgKyAyXTtcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHtpbmRleCwgc3RhcnQsIGVuZH0pO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIHNlcmlhbGl6ZShtYXA6IEZlYXR1cmVQb3NpdGlvbk1hcCwgdHJhbnNmZXJhYmxlczogQXJyYXk8QXJyYXlCdWZmZXI+KTogU2VyaWFsaXplZEZlYXR1cmVQb3NpdGlvbk1hcCB7XG4gICAgICAgIGNvbnN0IGlkcyA9IG5ldyBGbG9hdDY0QXJyYXkobWFwLmlkcyk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBVaW50MzJBcnJheShtYXAucG9zaXRpb25zKTtcblxuICAgICAgICBzb3J0KGlkcywgcG9zaXRpb25zLCAwLCBpZHMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKGlkcy5idWZmZXIsIHBvc2l0aW9ucy5idWZmZXIpO1xuXG4gICAgICAgIHJldHVybiB7aWRzLCBwb3NpdGlvbnN9O1xuICAgIH1cblxuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZShvYmo6IFNlcmlhbGl6ZWRGZWF0dXJlUG9zaXRpb25NYXApOiBGZWF0dXJlUG9zaXRpb25NYXAge1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgRmVhdHVyZVBvc2l0aW9uTWFwKCk7XG4gICAgICAgIC8vIGFmdGVyIHRyYW5zZmVycmluZywgd2Ugb25seSB1c2UgdGhlc2UgYXJyYXlzIHN0YXRpY2FsbHkgKG5vIHB1c2hlcyksXG4gICAgICAgIC8vIHNvIFR5cGVkQXJyYXkgdnMgQXJyYXkgZGlzdGluY3Rpb24gdGhhdCBmbG93IHBvaW50cyBvdXQgZG9lc24ndCBtYXR0ZXJcbiAgICAgICAgbWFwLmlkcyA9IChvYmouaWRzOiBhbnkpO1xuICAgICAgICBtYXAucG9zaXRpb25zID0gKG9iai5wb3NpdGlvbnM6IGFueSk7XG4gICAgICAgIG1hcC5pbmRleGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG59XG5cbi8vIGN1c3RvbSBxdWlja3NvcnQgdGhhdCBzb3J0cyBpZHMsIGluZGljZXMgYW5kIG9mZnNldHMgdG9nZXRoZXIgKGJ5IGlkcylcbmZ1bmN0aW9uIHNvcnQoaWRzLCBwb3NpdGlvbnMsIGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQgPj0gcmlnaHQpIHJldHVybjtcblxuICAgIGNvbnN0IHBpdm90ID0gaWRzWyhsZWZ0ICsgcmlnaHQpID4+IDFdO1xuICAgIGxldCBpID0gbGVmdCAtIDE7XG4gICAgbGV0IGogPSByaWdodCArIDE7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBkbyBpKys7IHdoaWxlIChpZHNbaV0gPCBwaXZvdCk7XG4gICAgICAgIGRvIGotLTsgd2hpbGUgKGlkc1tqXSA+IHBpdm90KTtcbiAgICAgICAgaWYgKGkgPj0gaikgYnJlYWs7XG4gICAgICAgIHN3YXAoaWRzLCBpLCBqKTtcbiAgICAgICAgc3dhcChwb3NpdGlvbnMsIDMgKiBpLCAzICogaik7XG4gICAgICAgIHN3YXAocG9zaXRpb25zLCAzICogaSArIDEsIDMgKiBqICsgMSk7XG4gICAgICAgIHN3YXAocG9zaXRpb25zLCAzICogaSArIDIsIDMgKiBqICsgMik7XG4gICAgfVxuXG4gICAgc29ydChpZHMsIHBvc2l0aW9ucywgbGVmdCwgaik7XG4gICAgc29ydChpZHMsIHBvc2l0aW9ucywgaiArIDEsIHJpZ2h0KTtcbn1cblxuZnVuY3Rpb24gc3dhcChhcnIsIGksIGopIHtcbiAgICBjb25zdCB0bXAgPSBhcnJbaV07XG4gICAgYXJyW2ldID0gYXJyW2pdO1xuICAgIGFycltqXSA9IHRtcDtcbn1cblxucmVnaXN0ZXIoJ0ZlYXR1cmVQb3NpdGlvbk1hcCcsIEZlYXR1cmVQb3NpdGlvbk1hcCk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcblxuZXhwb3J0IHR5cGUgVW5pZm9ybVZhbHVlczxVczogT2JqZWN0PlxuICAgID0gJEV4YWN0PCRPYmpNYXA8VXMsIDxWPih1OiBVbmlmb3JtPFY+KSA9PiBWPj47XG5leHBvcnQgdHlwZSBVbmlmb3JtTG9jYXRpb25zID0ge1tzdHJpbmddOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbn07XG5cbmNsYXNzIFVuaWZvcm08VD4ge1xuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG4gICAgbG9jYXRpb246ID9XZWJHTFVuaWZvcm1Mb2NhdGlvbjtcbiAgICBjdXJyZW50OiBUO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgfVxuXG4gICAgK3NldDogKHY6IFQpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFVuaWZvcm0xaSBleHRlbmRzIFVuaWZvcm08bnVtYmVyPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcbiAgICB9XG5cbiAgICBzZXQodjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnQgIT09IHYpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0xaSh0aGlzLmxvY2F0aW9uLCB2KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTFmIGV4dGVuZHMgVW5pZm9ybTxudW1iZXI+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSAwO1xuICAgIH1cblxuICAgIHNldCh2OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudCAhPT0gdikge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybTFmKHRoaXMubG9jYXRpb24sIHYpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBVbmlmb3JtMmYgZXh0ZW5kcyBVbmlmb3JtPFtudW1iZXIsIG51bWJlcl0+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbMCwgMF07XG4gICAgfVxuXG4gICAgc2V0KHY6IFtudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZbMF0gIT09IHRoaXMuY3VycmVudFswXSB8fCB2WzFdICE9PSB0aGlzLmN1cnJlbnRbMV0pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0yZih0aGlzLmxvY2F0aW9uLCB2WzBdLCB2WzFdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTNmIGV4dGVuZHMgVW5pZm9ybTxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbMCwgMCwgMF07XG4gICAgfVxuXG4gICAgc2V0KHY6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICBpZiAodlswXSAhPT0gdGhpcy5jdXJyZW50WzBdIHx8IHZbMV0gIT09IHRoaXMuY3VycmVudFsxXSB8fCB2WzJdICE9PSB0aGlzLmN1cnJlbnRbMl0pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0zZih0aGlzLmxvY2F0aW9uLCB2WzBdLCB2WzFdLCB2WzJdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTRmIGV4dGVuZHMgVW5pZm9ybTxbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXT4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IFswLCAwLCAwLCAwXTtcbiAgICB9XG5cbiAgICBzZXQodjogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZbMF0gIT09IHRoaXMuY3VycmVudFswXSB8fCB2WzFdICE9PSB0aGlzLmN1cnJlbnRbMV0gfHxcbiAgICAgICAgICAgIHZbMl0gIT09IHRoaXMuY3VycmVudFsyXSB8fCB2WzNdICE9PSB0aGlzLmN1cnJlbnRbM10pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm00Zih0aGlzLmxvY2F0aW9uLCB2WzBdLCB2WzFdLCB2WzJdLCB2WzNdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybUNvbG9yIGV4dGVuZHMgVW5pZm9ybTxDb2xvcj4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IENvbG9yLnRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgIHNldCh2OiBDb2xvcik6IHZvaWQge1xuICAgICAgICBpZiAodi5yICE9PSB0aGlzLmN1cnJlbnQuciB8fCB2LmcgIT09IHRoaXMuY3VycmVudC5nIHx8XG4gICAgICAgICAgICB2LmIgIT09IHRoaXMuY3VycmVudC5iIHx8IHYuYSAhPT0gdGhpcy5jdXJyZW50LmEpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm00Zih0aGlzLmxvY2F0aW9uLCB2LnIsIHYuZywgdi5iLCB2LmEpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCBlbXB0eU1hdDQgPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcbmNsYXNzIFVuaWZvcm1NYXRyaXg0ZiBleHRlbmRzIFVuaWZvcm08RmxvYXQzMkFycmF5PiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gZW1wdHlNYXQ0O1xuICAgIH1cblxuICAgIHNldCh2OiBGbG9hdDMyQXJyYXkpOiB2b2lkIHtcbiAgICAgICAgLy8gVGhlIHZhc3QgbWFqb3JpdHkgb2YgbWF0cml4IGNvbXBhcmlzb25zIHRoYXQgd2lsbCB0cmlwIHRoaXMgc2V0XG4gICAgICAgIC8vIGhhcHBlbiBhdCBpPTEyIG9yIGk9MCwgc28gd2UgY2hlY2sgdGhvc2UgZmlyc3QgdG8gYXZvaWQgbG90cyBvZlxuICAgICAgICAvLyB1bm5lY2Vzc2FyeSBpdGVyYXRpb246XG4gICAgICAgIGlmICh2WzEyXSAhPT0gdGhpcy5jdXJyZW50WzEyXSB8fCB2WzBdICE9PSB0aGlzLmN1cnJlbnRbMF0pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwgZmFsc2UsIHYpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMTY7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZbaV0gIT09IHRoaXMuY3VycmVudFtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMubG9jYXRpb24sIGZhbHNlLCB2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHtcbiAgICBVbmlmb3JtLFxuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm0zZixcbiAgICBVbmlmb3JtNGYsXG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufTtcblxuZXhwb3J0IHR5cGUgVW5pZm9ybUJpbmRpbmdzID0ge1tzdHJpbmddOiBVbmlmb3JtPGFueT59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwYWNrVWludDhUb0Zsb2F0fSBmcm9tICcuLi9zaGFkZXJzL2VuY29kZV9hdHRyaWJ1dGUnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQge3N1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvcHJvcGVydGllcyc7XG5pbXBvcnQge3JlZ2lzdGVyLCBzZXJpYWxpemUsIGRlc2VyaWFsaXplfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtTdHJ1Y3RBcnJheUxheW91dDFmNCwgU3RydWN0QXJyYXlMYXlvdXQyZjgsIFN0cnVjdEFycmF5TGF5b3V0NGYxNiwgUGF0dGVybkxheW91dEFycmF5fSBmcm9tICcuL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgRmVhdHVyZVBvc2l0aW9uTWFwIGZyb20gJy4vZmVhdHVyZV9wb3NpdGlvbl9tYXAnO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybTRmLFxuICAgIHR5cGUgVW5pZm9ybUxvY2F0aW9uc1xufSBmcm9tICcuLi9yZW5kZXIvdW5pZm9ybV9iaW5kaW5nJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlZFN0eWxlTGF5ZXJ9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3R5cGVkX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5LCBTdHJ1Y3RBcnJheU1lbWJlcn0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgRmVhdHVyZSxcbiAgICBGZWF0dXJlU3RhdGUsXG4gICAgR2xvYmFsUHJvcGVydGllcyxcbiAgICBTb3VyY2VFeHByZXNzaW9uLFxuICAgIENvbXBvc2l0ZUV4cHJlc3Npb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmV4cG9ydCB0eXBlIEJpbmRlclVuaWZvcm0gPSB7XG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgYmluZGluZzogVW5pZm9ybTxhbnk+XG59O1xuXG5mdW5jdGlvbiBwYWNrQ29sb3IoY29sb3I6IENvbG9yKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcGFja1VpbnQ4VG9GbG9hdCgyNTUgKiBjb2xvci5yLCAyNTUgKiBjb2xvci5nKSxcbiAgICAgICAgcGFja1VpbnQ4VG9GbG9hdCgyNTUgKiBjb2xvci5iLCAyNTUgKiBjb2xvci5hKVxuICAgIF07XG59XG5cbi8qKlxuICogIGBCaW5kZXJgIGlzIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgdGhlIHN0cmF0ZWdpZXMgZm9yIGNvbnN0cnVjdGluZyxcbiAqICB1cGxvYWRpbmcsIGFuZCBiaW5kaW5nIHBhaW50IHByb3BlcnR5IGRhdGEgYXMgR0xTTCBhdHRyaWJ1dGVzLiBNb3N0IHN0eWxlLVxuICogIHNwZWMgcHJvcGVydGllcyBoYXZlIGEgMToxIHJlbGF0aW9uc2hpcCB0byBzaGFkZXIgYXR0cmlidXRlL3VuaWZvcm1zLCBidXRcbiAqICBzb21lIHJlcXVpcmUgbXVsdGxpcGxlIHZhbHVlcyBwZXIgZmVhdHVyZSB0byBiZSBwYXNzZWQgdG8gdGhlIEdQVSwgYW5kIGluXG4gKiAgdGhvc2UgY2FzZXMgd2UgYmluZCBtdWx0aXBsZSBhdHRyaWJ1dGVzL3VuaWZvcm1zLlxuICpcbiAqICBJdCBoYXMgdGhyZWUgaW1wbGVtZW50YXRpb25zLCBvbmUgZm9yIGVhY2ggb2YgdGhlIHRocmVlIHN0cmF0ZWdpZXMgd2UgdXNlOlxuICpcbiAqICAqIEZvciBfY29uc3RhbnRfIHByb3BlcnRpZXMgLS0gdGhvc2Ugd2hvc2UgdmFsdWUgaXMgYSBjb25zdGFudCwgb3IgdGhlIGNvbnN0YW50XG4gKiAgICByZXN1bHQgb2YgZXZhbHVhdGluZyBhIGNhbWVyYSBleHByZXNzaW9uIGF0IGEgcGFydGljdWxhciBjYW1lcmEgcG9zaXRpb24gLS0gd2VcbiAqICAgIGRvbid0IG5lZWQgYSB2ZXJ0ZXggYXR0cmlidXRlIGJ1ZmZlciwgYW5kIGluc3RlYWQgdXNlIGEgdW5pZm9ybS5cbiAqICAqIEZvciBkYXRhIGV4cHJlc3Npb25zLCB3ZSB1c2UgYSB2ZXJ0ZXggYnVmZmVyIHdpdGggYSBzaW5nbGUgYXR0cmlidXRlIHZhbHVlLFxuICogICAgdGhlIGV2YWx1YXRlZCByZXN1bHQgb2YgdGhlIHNvdXJjZSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIGZlYXR1cmUuXG4gKiAgKiBGb3IgY29tcG9zaXRlIGV4cHJlc3Npb25zLCB3ZSB1c2UgYSB2ZXJ0ZXggYnVmZmVyIHdpdGggdHdvIGF0dHJpYnV0ZXM6IG1pbiBhbmRcbiAqICAgIG1heCB2YWx1ZXMgY292ZXJpbmcgdGhlIHJhbmdlIG9mIHpvb21zIGF0IHdoaWNoIHdlIGV4cGVjdCB0aGUgdGlsZSB0byBiZVxuICogICAgZGlzcGxheWVkLiBUaGVzZSB2YWx1ZXMgYXJlIGNhbGN1bGF0ZWQgYnkgZXZhbHVhdGluZyB0aGUgY29tcG9zaXRlIGV4cHJlc3Npb24gZm9yXG4gKiAgICB0aGUgZ2l2ZW4gZmVhdHVyZSBhdCBzdHJhdGVnaWNhbGx5IGNob3NlbiB6b29tIGxldmVscy4gSW4gYWRkaXRpb24gdG8gdGhpc1xuICogICAgYXR0cmlidXRlIGRhdGEsIHdlIGFsc28gdXNlIGEgdW5pZm9ybSB2YWx1ZSB3aGljaCB0aGUgc2hhZGVyIHVzZXMgdG8gaW50ZXJwb2xhdGVcbiAqICAgIGJldHdlZW4gdGhlIG1pbiBhbmQgbWF4IHZhbHVlIGF0IHRoZSBmaW5hbCBkaXNwbGF5ZWQgem9vbSBsZXZlbC4gVGhlIHVzZSBvZiBhXG4gKiAgICB1bmlmb3JtIGFsbG93cyB1cyB0byBjaGVhcGx5IHVwZGF0ZSB0aGUgdmFsdWUgb24gZXZlcnkgZnJhbWUuXG4gKlxuICogIE5vdGUgdGhhdCB0aGUgc2hhZGVyIHNvdXJjZSB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUgdXNpbmcgYSB1bmlmb3JtIG9yXG4gKiAgYXR0cmlidXRlLiBXZSBkeW5hbWljYWxseSBjb21waWxlIHNoYWRlcnMgYXQgcnVudGltZSB0byBhY2NvbW9kYXRlIHRoaXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5pbnRlcmZhY2UgQmluZGVyPFQ+IHtcbiAgICBtYXhWYWx1ZTogbnVtYmVyO1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheShsZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogdm9pZDtcbiAgICB1cGRhdGVQYWludEFycmF5KHN0YXJ0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pOiB2b2lkO1xuICAgIHVwbG9hZChDb250ZXh0KTogdm9pZDtcbiAgICBkZXN0cm95KCk6IHZvaWQ7XG5cbiAgICBkZWZpbmVzKCk6IEFycmF5PHN0cmluZz47XG4gICAgc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvOiBJbWFnZVBvc2l0aW9uLCBwb3NGcm9tOiBJbWFnZVBvc2l0aW9uKTogdm9pZDtcblxuICAgIHNldFVuaWZvcm1zKGNvbnRleHQ6IENvbnRleHQsIHVuaWZvcm06IFVuaWZvcm08Kj4sIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgIGN1cnJlbnRWYWx1ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+LCB1bmlmb3JtTmFtZTogc3RyaW5nKTogdm9pZDtcblxuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKTogJFNoYXBlPFVuaWZvcm08Kj4+O1xufVxuXG5jbGFzcyBDb25zdGFudEJpbmRlcjxUPiBpbXBsZW1lbnRzIEJpbmRlcjxUPiB7XG4gICAgdmFsdWU6IFQ7XG4gICAgbmFtZXM6IEFycmF5PHN0cmluZz47XG4gICAgbWF4VmFsdWU6IG51bWJlcjtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdW5pZm9ybU5hbWVzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3IodmFsdWU6IFQsIG5hbWVzOiBBcnJheTxzdHJpbmc+LCB0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm5hbWVzID0gbmFtZXM7XG4gICAgICAgIHRoaXMudW5pZm9ybU5hbWVzID0gdGhpcy5uYW1lcy5tYXAobmFtZSA9PiBgdV8ke25hbWV9YCk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMubWF4VmFsdWUgPSAtSW5maW5pdHk7XG4gICAgfVxuXG4gICAgZGVmaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZXMubWFwKG5hbWUgPT4gYCNkZWZpbmUgSEFTX1VOSUZPUk1fdV8ke25hbWV9YCk7XG4gICAgfVxuICAgIHNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucygpIHt9XG4gICAgcG9wdWxhdGVQYWludEFycmF5KCkge31cbiAgICB1cGRhdGVQYWludEFycmF5KCkge31cbiAgICB1cGxvYWQoKSB7fVxuICAgIGRlc3Ryb3koKSB7fVxuXG4gICAgc2V0VW5pZm9ybXMoY29udGV4dDogQ29udGV4dCwgdW5pZm9ybTogVW5pZm9ybTwqPiwgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPik6IHZvaWQge1xuICAgICAgICB1bmlmb3JtLnNldChjdXJyZW50VmFsdWUuY29uc3RhbnRPcih0aGlzLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgZ2V0QmluZGluZyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pOiAkU2hhcGU8VW5pZm9ybTxhbnk+PiB7XG4gICAgICAgIHJldHVybiAodGhpcy50eXBlID09PSAnY29sb3InKSA/XG4gICAgICAgICAgICBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9uKSA6XG4gICAgICAgICAgICBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2VyaWFsaXplKGJpbmRlcjogQ29uc3RhbnRCaW5kZXI8VD4pIHtcbiAgICAgICAgY29uc3Qge3ZhbHVlLCBuYW1lcywgdHlwZX0gPSBiaW5kZXI7XG4gICAgICAgIHJldHVybiB7dmFsdWU6IHNlcmlhbGl6ZSh2YWx1ZSksIG5hbWVzLCB0eXBlfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUoc2VyaWFsaXplZDoge3ZhbHVlOiBULCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nfSkge1xuICAgICAgICBjb25zdCB7dmFsdWUsIG5hbWVzLCB0eXBlfSA9IHNlcmlhbGl6ZWQ7XG4gICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRCaW5kZXIoZGVzZXJpYWxpemUodmFsdWUpLCBuYW1lcywgdHlwZSk7XG4gICAgfVxufVxuXG5jbGFzcyBDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXI8VD4gaW1wbGVtZW50cyBCaW5kZXI8VD4ge1xuICAgIHZhbHVlOiBUO1xuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICBwYXR0ZXJuUG9zaXRpb25zOiB7W3N0cmluZ106ID9BcnJheTxudW1iZXI+fTtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgbWF4VmFsdWU6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBULCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5uYW1lcyA9IG5hbWVzO1xuICAgICAgICB0aGlzLnVuaWZvcm1OYW1lcyA9IHRoaXMubmFtZXMubWFwKG5hbWUgPT4gYHVfJHtuYW1lfWApO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLm1heFZhbHVlID0gLUluZmluaXR5O1xuICAgICAgICB0aGlzLnBhdHRlcm5Qb3NpdGlvbnMgPSB7cGF0dGVyblRvOiBudWxsLCBwYXR0ZXJuRnJvbTogbnVsbH07XG4gICAgfVxuXG4gICAgZGVmaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZXMubWFwKG5hbWUgPT4gYCNkZWZpbmUgSEFTX1VOSUZPUk1fdV8ke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5KCkge31cbiAgICB1cGRhdGVQYWludEFycmF5KCkge31cbiAgICB1cGxvYWQoKSB7fVxuICAgIGRlc3Ryb3koKSB7fVxuXG4gICAgc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvOiBJbWFnZVBvc2l0aW9uLCBwb3NGcm9tOiBJbWFnZVBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMucGF0dGVyblBvc2l0aW9ucy5wYXR0ZXJuVG8gPSBwb3NUby50bGJyO1xuICAgICAgICB0aGlzLnBhdHRlcm5Qb3NpdGlvbnMucGF0dGVybkZyb20gPSBwb3NGcm9tLnRsYnI7XG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybXMoY29udGV4dDogQ29udGV4dCwgdW5pZm9ybTogVW5pZm9ybTwqPiwgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiwgdW5pZm9ybU5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLnBhdHRlcm5Qb3NpdGlvbnM7XG4gICAgICAgIGlmICh1bmlmb3JtTmFtZSA9PT0gXCJ1X3BhdHRlcm5fdG9cIiAmJiBwb3MucGF0dGVyblRvKSB1bmlmb3JtLnNldChwb3MucGF0dGVyblRvKTtcbiAgICAgICAgaWYgKHVuaWZvcm1OYW1lID09PSBcInVfcGF0dGVybl9mcm9tXCIgJiYgcG9zLnBhdHRlcm5Gcm9tKSB1bmlmb3JtLnNldChwb3MucGF0dGVybkZyb20pO1xuICAgIH1cblxuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKTogJFNoYXBlPFVuaWZvcm08YW55Pj4ge1xuICAgICAgICByZXR1cm4gbmV3IFVuaWZvcm00Zihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgfVxufVxuXG5jbGFzcyBTb3VyY2VFeHByZXNzaW9uQmluZGVyPFQ+IGltcGxlbWVudHMgQmluZGVyPFQ+IHtcbiAgICBleHByZXNzaW9uOiBTb3VyY2VFeHByZXNzaW9uO1xuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgbWF4VmFsdWU6IG51bWJlcjtcblxuICAgIHBhaW50VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5O1xuICAgIHBhaW50VmVydGV4QXR0cmlidXRlczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+O1xuICAgIHBhaW50VmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuXG4gICAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogU291cmNlRXhwcmVzc2lvbiwgbmFtZXM6IEFycmF5PHN0cmluZz4sIHR5cGU6IHN0cmluZywgUGFpbnRWZXJ0ZXhBcnJheTogQ2xhc3M8U3RydWN0QXJyYXk+KSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMubmFtZXMgPSBuYW1lcztcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy51bmlmb3JtTmFtZXMgPSB0aGlzLm5hbWVzLm1hcChuYW1lID0+IGBhXyR7bmFtZX1gKTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IC1JbmZpbml0eTtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMgPSBuYW1lcy5tYXAoKG5hbWUpID0+XG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIG5hbWU6IGBhXyR7bmFtZX1gLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdGbG9hdDMyJyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzOiB0eXBlID09PSAnY29sb3InID8gMiA6IDEsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkgPSBuZXcgUGFpbnRWZXJ0ZXhBcnJheSgpO1xuICAgIH1cblxuICAgIGRlZmluZXMoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBzZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMoKSB7fVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5KG5ld0xlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgcGFpbnRBcnJheSA9IHRoaXMucGFpbnRWZXJ0ZXhBcnJheTtcblxuICAgICAgICBjb25zdCBzdGFydCA9IHBhaW50QXJyYXkubGVuZ3RoO1xuICAgICAgICBwYWludEFycmF5LnJlc2VydmUobmV3TGVuZ3RoKTtcblxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoMCksIGZlYXR1cmUsIHt9LCBbXSwgZm9ybWF0dGVkU2VjdGlvbik7XG5cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBwYWNrQ29sb3IodmFsdWUpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgbmV3TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwYWludEFycmF5LmVtcGxhY2VCYWNrKGNvbG9yWzBdLCBjb2xvclsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBuZXdMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhaW50QXJyYXkuZW1wbGFjZUJhY2sodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5tYXhWYWx1ZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgY29uc3QgcGFpbnRBcnJheSA9IHRoaXMucGFpbnRWZXJ0ZXhBcnJheTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IDB9LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gcGFja0NvbG9yKHZhbHVlKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGFpbnRBcnJheS5lbXBsYWNlKGksIGNvbG9yWzBdLCBjb2xvclsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhaW50QXJyYXkuZW1wbGFjZShpLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWUgPSBNYXRoLm1heCh0aGlzLm1heFZhbHVlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEFycmF5ICYmIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIgJiYgdGhpcy5wYWludFZlcnRleEJ1ZmZlci5idWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5wYWludFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSwgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMsIHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFVuaWZvcm1zKGNvbnRleHQ6IENvbnRleHQsIHVuaWZvcm06IFVuaWZvcm08Kj4pOiB2b2lkIHtcbiAgICAgICAgdW5pZm9ybS5zZXQoMCk7XG4gICAgfVxuXG4gICAgZ2V0QmluZGluZyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pOiBVbmlmb3JtMWYge1xuICAgICAgICByZXR1cm4gbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgfVxufVxuXG5jbGFzcyBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyPFQ+IGltcGxlbWVudHMgQmluZGVyPFQ+IHtcbiAgICBleHByZXNzaW9uOiBDb21wb3NpdGVFeHByZXNzaW9uO1xuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXNlSW50ZWdlclpvb206IGJvb2xlYW47XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG1heFZhbHVlOiBudW1iZXI7XG5cbiAgICBwYWludFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheTtcbiAgICBwYWludFZlcnRleEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBwYWludFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IENvbXBvc2l0ZUV4cHJlc3Npb24sIG5hbWVzOiBBcnJheTxzdHJpbmc+LCB0eXBlOiBzdHJpbmcsIHVzZUludGVnZXJab29tOiBib29sZWFuLCB6b29tOiBudW1iZXIsIGxheW91dDogQ2xhc3M8U3RydWN0QXJyYXk+KSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMubmFtZXMgPSBuYW1lcztcbiAgICAgICAgdGhpcy51bmlmb3JtTmFtZXMgPSB0aGlzLm5hbWVzLm1hcChuYW1lID0+IGB1XyR7bmFtZX1fdGApO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLnVzZUludGVnZXJab29tID0gdXNlSW50ZWdlclpvb207XG4gICAgICAgIHRoaXMuem9vbSA9IHpvb207XG4gICAgICAgIHRoaXMubWF4VmFsdWUgPSAtSW5maW5pdHk7XG4gICAgICAgIGNvbnN0IFBhaW50VmVydGV4QXJyYXkgPSBsYXlvdXQ7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzID0gbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGBhXyR7bmFtZX1gLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdGbG9hdDMyJyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzOiB0eXBlID09PSAnY29sb3InID8gNCA6IDIsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5ID0gbmV3IFBhaW50VmVydGV4QXJyYXkoKTtcbiAgICB9XG5cbiAgICBkZWZpbmVzKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKCkge31cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheShuZXdMZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHBhaW50QXJyYXkgPSB0aGlzLnBhaW50VmVydGV4QXJyYXk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWludEFycmF5Lmxlbmd0aDtcbiAgICAgICAgcGFpbnRBcnJheS5yZXNlcnZlKG5ld0xlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBmZWF0dXJlLCB7fSwgW10sIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICBjb25zdCBtYXggPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSArIDEpLCBmZWF0dXJlLCB7fSwgW10sIGZvcm1hdHRlZFNlY3Rpb24pO1xuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbkNvbG9yID0gcGFja0NvbG9yKG1pbik7XG4gICAgICAgICAgICBjb25zdCBtYXhDb2xvciA9IHBhY2tDb2xvcihtYXgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgbmV3TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwYWludEFycmF5LmVtcGxhY2VCYWNrKG1pbkNvbG9yWzBdLCBtaW5Db2xvclsxXSwgbWF4Q29sb3JbMF0sIG1heENvbG9yWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IG5ld0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGFpbnRBcnJheS5lbXBsYWNlQmFjayhtaW4sIG1heCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5tYXhWYWx1ZSwgbWluLCBtYXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgY29uc3QgcGFpbnRBcnJheSA9IHRoaXMucGFpbnRWZXJ0ZXhBcnJheTtcblxuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHRoaXMuem9vbX0sIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogdGhpcy56b29tICsgMX0sIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgY29uc3QgbWluQ29sb3IgPSBwYWNrQ29sb3IobWluKTtcbiAgICAgICAgICAgIGNvbnN0IG1heENvbG9yID0gcGFja0NvbG9yKG1heCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhaW50QXJyYXkuZW1wbGFjZShpLCBtaW5Db2xvclswXSwgbWluQ29sb3JbMV0sIG1heENvbG9yWzBdLCBtYXhDb2xvclsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhaW50QXJyYXkuZW1wbGFjZShpLCBtaW4sIG1heCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5tYXhWYWx1ZSwgbWluLCBtYXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSAmJiB0aGlzLnBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QnVmZmVyICYmIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnBhaW50VmVydGV4QXJyYXksIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLCB0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0aW9uRmFjdG9yKGN1cnJlbnRab29tOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudXNlSW50ZWdlclpvb20pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihNYXRoLmZsb29yKGN1cnJlbnRab29tKSwgdGhpcy56b29tLCB0aGlzLnpvb20gKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihjdXJyZW50Wm9vbSwgdGhpcy56b29tLCB0aGlzLnpvb20gKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFVuaWZvcm1zKGNvbnRleHQ6IENvbnRleHQsIHVuaWZvcm06IFVuaWZvcm08Kj4sXG4gICAgICAgICAgICAgICAgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcyk6IHZvaWQge1xuICAgICAgICB1bmlmb3JtLnNldCh0aGlzLmludGVycG9sYXRpb25GYWN0b3IoZ2xvYmFscy56b29tKSk7XG4gICAgfVxuXG4gICAgZ2V0QmluZGluZyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pOiBVbmlmb3JtMWYge1xuICAgICAgICByZXR1cm4gbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgfVxufVxuXG5jbGFzcyBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyPFQ+IGltcGxlbWVudHMgQmluZGVyPFQ+IHtcbiAgICBleHByZXNzaW9uOiBDb21wb3NpdGVFeHByZXNzaW9uO1xuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXNlSW50ZWdlclpvb206IGJvb2xlYW47XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG1heFZhbHVlOiBudW1iZXI7XG4gICAgbGF5ZXJJZDogc3RyaW5nO1xuXG4gICAgem9vbUluUGFpbnRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXk7XG4gICAgem9vbU91dFBhaW50VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5O1xuICAgIHpvb21JblBhaW50VmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuICAgIHpvb21PdXRQYWludFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcbiAgICBwYWludFZlcnRleEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IENvbXBvc2l0ZUV4cHJlc3Npb24sIG5hbWVzOiBBcnJheTxzdHJpbmc+LCB0eXBlOiBzdHJpbmcsIHVzZUludGVnZXJab29tOiBib29sZWFuLCB6b29tOiBudW1iZXIsIFBhaW50VmVydGV4QXJyYXk6IENsYXNzPFN0cnVjdEFycmF5PiwgbGF5ZXJJZDogc3RyaW5nKSB7XG5cbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5uYW1lcyA9IG5hbWVzO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLnVuaWZvcm1OYW1lcyA9IHRoaXMubmFtZXMubWFwKG5hbWUgPT4gYHVfJHtuYW1lfV90YCk7XG4gICAgICAgIHRoaXMudXNlSW50ZWdlclpvb20gPSB1c2VJbnRlZ2VyWm9vbTtcbiAgICAgICAgdGhpcy56b29tID0gem9vbTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IC1JbmZpbml0eTtcbiAgICAgICAgdGhpcy5sYXllcklkID0gbGF5ZXJJZDtcblxuICAgICAgICB0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcyA9IG5hbWVzLm1hcCgobmFtZSkgPT5cbiAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgbmFtZTogYGFfJHtuYW1lfWAsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1VpbnQxNicsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50czogNCxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5ID0gbmV3IFBhaW50VmVydGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSA9IG5ldyBQYWludFZlcnRleEFycmF5KCk7XG4gICAgfVxuXG4gICAgZGVmaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucygpIHt9XG5cbiAgICBwb3B1bGF0ZVBhaW50QXJyYXkobGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIC8vIFdlIHBvcHVsYXRlIHR3byBwYWludCBhcnJheXMgYmVjYXVzZSwgZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIHdlIGRvbid0IGtub3cgd2hpY2ggZGlyZWN0aW9uXG4gICAgICAgIC8vIHdlJ3JlIGNyb3NzLWZhZGluZyB0byBhdCBsYXlvdXQgdGltZS4gSW4gb3JkZXIgdG8ga2VlcCB2ZXJ0ZXggYXR0cmlidXRlcyB0byBhIG1pbmltdW0gYW5kIG5vdCBwYXNzXG4gICAgICAgIC8vIHVubmVjZXNzYXJ5IHZlcnRleCBkYXRhIHRvIHRoZSBzaGFkZXJzLCB3ZSBkZXRlcm1pbmUgd2hpY2ggdG8gdXBsb2FkIGF0IGRyYXcgdGltZS5cblxuICAgICAgICBjb25zdCB6b29tSW5BcnJheSA9IHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheTtcbiAgICAgICAgY29uc3Qgem9vbU91dEFycmF5ID0gdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheTtcbiAgICAgICAgY29uc3Qge2xheWVySWR9ID0gdGhpcztcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB6b29tSW5BcnJheS5sZW5ndGg7XG5cbiAgICAgICAgem9vbUluQXJyYXkucmVzZXJ2ZShsZW5ndGgpO1xuICAgICAgICB6b29tT3V0QXJyYXkucmVzZXJ2ZShsZW5ndGgpO1xuXG4gICAgICAgIGlmIChpbWFnZVBvc2l0aW9ucyAmJiBmZWF0dXJlLnBhdHRlcm5zICYmIGZlYXR1cmUucGF0dGVybnNbbGF5ZXJJZF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHttaW4sIG1pZCwgbWF4fSA9IGZlYXR1cmUucGF0dGVybnNbbGF5ZXJJZF07XG5cbiAgICAgICAgICAgIGNvbnN0IGltYWdlTWluID0gaW1hZ2VQb3NpdGlvbnNbbWluXTtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlTWlkID0gaW1hZ2VQb3NpdGlvbnNbbWlkXTtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlTWF4ID0gaW1hZ2VQb3NpdGlvbnNbbWF4XTtcblxuICAgICAgICAgICAgaWYgKCFpbWFnZU1pbiB8fCAhaW1hZ2VNaWQgfHwgIWltYWdlTWF4KSByZXR1cm47XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgem9vbUluQXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAgICAgICAgIGltYWdlTWlkLnRsWzBdLCBpbWFnZU1pZC50bFsxXSwgaW1hZ2VNaWQuYnJbMF0sIGltYWdlTWlkLmJyWzFdLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZU1pbi50bFswXSwgaW1hZ2VNaW4udGxbMV0sIGltYWdlTWluLmJyWzBdLCBpbWFnZU1pbi5iclsxXVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICB6b29tT3V0QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAgICAgICAgIGltYWdlTWlkLnRsWzBdLCBpbWFnZU1pZC50bFsxXSwgaW1hZ2VNaWQuYnJbMF0sIGltYWdlTWlkLmJyWzFdLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZU1heC50bFswXSwgaW1hZ2VNYXgudGxbMV0sIGltYWdlTWF4LmJyWzBdLCBpbWFnZU1heC5iclsxXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVQYWludEFycmF5KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgLy8gV2UgcG9wdWxhdGUgdHdvIHBhaW50IGFycmF5cyBiZWNhdXNlLCBmb3IgY3Jvc3MtZmFkZWQgcHJvcGVydGllcywgd2UgZG9uJ3Qga25vdyB3aGljaCBkaXJlY3Rpb25cbiAgICAgICAgLy8gd2UncmUgY3Jvc3MtZmFkaW5nIHRvIGF0IGxheW91dCB0aW1lLiBJbiBvcmRlciB0byBrZWVwIHZlcnRleCBhdHRyaWJ1dGVzIHRvIGEgbWluaW11bSBhbmQgbm90IHBhc3NcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgdmVydGV4IGRhdGEgdG8gdGhlIHNoYWRlcnMsIHdlIGRldGVybWluZSB3aGljaCB0byB1cGxvYWQgYXQgZHJhdyB0aW1lLlxuXG4gICAgICAgIGNvbnN0IHpvb21JbkFycmF5ID0gdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5O1xuICAgICAgICBjb25zdCB6b29tT3V0QXJyYXkgPSB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5O1xuICAgICAgICBjb25zdCB7bGF5ZXJJZH0gPSB0aGlzO1xuXG4gICAgICAgIGlmIChpbWFnZVBvc2l0aW9ucyAmJiBmZWF0dXJlLnBhdHRlcm5zICYmIGZlYXR1cmUucGF0dGVybnNbbGF5ZXJJZF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHttaW4sIG1pZCwgbWF4fSA9IGZlYXR1cmUucGF0dGVybnNbbGF5ZXJJZF07XG4gICAgICAgICAgICBjb25zdCBpbWFnZU1pbiA9IGltYWdlUG9zaXRpb25zW21pbl07XG4gICAgICAgICAgICBjb25zdCBpbWFnZU1pZCA9IGltYWdlUG9zaXRpb25zW21pZF07XG4gICAgICAgICAgICBjb25zdCBpbWFnZU1heCA9IGltYWdlUG9zaXRpb25zW21heF07XG5cbiAgICAgICAgICAgIGlmICghaW1hZ2VNaW4gfHwgIWltYWdlTWlkIHx8ICFpbWFnZU1heCkgcmV0dXJuO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICB6b29tSW5BcnJheS5lbXBsYWNlKGksXG4gICAgICAgICAgICAgICAgICAgIGltYWdlTWlkLnRsWzBdLCBpbWFnZU1pZC50bFsxXSwgaW1hZ2VNaWQuYnJbMF0sIGltYWdlTWlkLmJyWzFdLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZU1pbi50bFswXSwgaW1hZ2VNaW4udGxbMV0sIGltYWdlTWluLmJyWzBdLCBpbWFnZU1pbi5iclsxXVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICB6b29tT3V0QXJyYXkuZW1wbGFjZShpLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZU1pZC50bFswXSwgaW1hZ2VNaWQudGxbMV0sIGltYWdlTWlkLmJyWzBdLCBpbWFnZU1pZC5iclsxXSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VNYXgudGxbMF0sIGltYWdlTWF4LnRsWzFdLCBpbWFnZU1heC5iclswXSwgaW1hZ2VNYXguYnJbMV1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheSAmJiB0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIgJiYgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSAmJiB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LCB0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcywgdGhpcy5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpO1xuICAgICAgICAgICAgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LCB0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcywgdGhpcy5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyKSB0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyKSB0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIH1cblxuICAgIHNldFVuaWZvcm1zKGNvbnRleHQ6IENvbnRleHQsIHVuaWZvcm06IFVuaWZvcm08Kj4pOiB2b2lkIHtcbiAgICAgICAgdW5pZm9ybS5zZXQoMCk7XG4gICAgfVxuXG4gICAgZ2V0QmluZGluZyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pOiAkU2hhcGU8VW5pZm9ybTxhbnk+PiB7XG4gICAgICAgIHJldHVybiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICB9XG59XG5cbi8qKlxuICogUHJvZ3JhbUNvbmZpZ3VyYXRpb24gY29udGFpbnMgdGhlIGxvZ2ljIGZvciBiaW5kaW5nIHN0eWxlIGxheWVyIHByb3BlcnRpZXMgYW5kIHRpbGVcbiAqIGxheWVyIGZlYXR1cmUgZGF0YSBpbnRvIEdMIHByb2dyYW0gdW5pZm9ybXMgYW5kIHZlcnRleCBhdHRyaWJ1dGVzLlxuICpcbiAqIE5vbi1kYXRhLWRyaXZlbiBwcm9wZXJ0eSB2YWx1ZXMgYXJlIGJvdW5kIHRvIHNoYWRlciB1bmlmb3Jtcy4gRGF0YS1kcml2ZW4gcHJvcGVydHlcbiAqIHZhbHVlcyBhcmUgYm91bmQgdG8gdmVydGV4IGF0dHJpYnV0ZXMuIEluIG9yZGVyIHRvIHN1cHBvcnQgYSB1bmlmb3JtIEdMU0wgc3ludGF4IG92ZXJcbiAqIGJvdGgsIFtNYXBib3ggR0wgU2hhZGVyc10oaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtc2hhZGVycykgZGVmaW5lcyBhIGAjcHJhZ21hYFxuICogYWJzdHJhY3Rpb24sIHdoaWNoIFByb2dyYW1Db25maWd1cmF0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBpbXBsZW1lbnRpbmcuIEF0IHJ1bnRpbWUsXG4gKiBpdCBleGFtaW5lcyB0aGUgYXR0cmlidXRlcyBvZiBhIHBhcnRpY3VsYXIgbGF5ZXIsIGNvbWJpbmVzIHRoaXMgd2l0aCBmaXhlZCBrbm93bGVkZ2VcbiAqIGFib3V0IGhvdyBsYXllcnMgb2YgdGhlIHBhcnRpY3VsYXIgdHlwZSBhcmUgaW1wbGVtZW50ZWQsIGFuZCBkZXRlcm1pbmVzIHdoaWNoIHVuaWZvcm1zXG4gKiBhbmQgdmVydGV4IGF0dHJpYnV0ZXMgd2lsbCBiZSByZXF1aXJlZC4gSXQgY2FuIHRoZW4gc3Vic3RpdHV0ZSB0aGUgYXBwcm9wcmlhdGUgdGV4dFxuICogaW50byB0aGUgc2hhZGVyIHNvdXJjZSBjb2RlLCBjcmVhdGUgYW5kIGxpbmsgYSBwcm9ncmFtLCBhbmQgYmluZCB0aGUgdW5pZm9ybXMgYW5kXG4gKiB2ZXJ0ZXggYXR0cmlidXRlcyBpbiBwcmVwYXJhdGlvbiBmb3IgZHJhd2luZy5cbiAqXG4gKiBXaGVuIGEgdmVjdG9yIHRpbGUgaXMgcGFyc2VkLCB0aGlzIHNhbWUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvXG4gKiBwb3B1bGF0ZSB0aGUgYXR0cmlidXRlIGJ1ZmZlcnMgbmVlZGVkIGZvciBkYXRhLWRyaXZlbiBzdHlsaW5nIHVzaW5nIHRoZSB6b29tXG4gKiBsZXZlbCBhbmQgZmVhdHVyZSBwcm9wZXJ0eSBkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2dyYW1Db25maWd1cmF0aW9uIHtcbiAgICBiaW5kZXJzOiB7IFtzdHJpbmddOiBCaW5kZXI8YW55PiB9O1xuICAgIGNhY2hlS2V5OiBzdHJpbmc7XG4gICAgbGF5b3V0QXR0cmlidXRlczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+O1xuXG4gICAgX2J1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj47XG4gICAgX2ZlYXR1cmVNYXA6IEZlYXR1cmVQb3NpdGlvbk1hcDtcbiAgICBfYnVmZmVyT2Zmc2V0OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5iaW5kZXJzID0ge307XG4gICAgICAgIHRoaXMuY2FjaGVLZXkgPSAnJztcbiAgICAgICAgdGhpcy5fYnVmZmVycyA9IFtdO1xuICAgICAgICB0aGlzLl9mZWF0dXJlTWFwID0gbmV3IEZlYXR1cmVQb3NpdGlvbk1hcCgpO1xuICAgICAgICB0aGlzLl9idWZmZXJPZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVEeW5hbWljPExheWVyOiBUeXBlZFN0eWxlTGF5ZXI+KGxheWVyOiBMYXllciwgem9vbTogbnVtYmVyLCBmaWx0ZXJQcm9wZXJ0aWVzOiAoc3RyaW5nKSA9PiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gbGF5ZXIucGFpbnQuX3ZhbHVlcykge1xuICAgICAgICAgICAgaWYgKCFmaWx0ZXJQcm9wZXJ0aWVzKHByb3BlcnR5KSkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGxheWVyLnBhaW50LmdldChwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSkgfHwgIXN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKHZhbHVlLnByb3BlcnR5LnNwZWNpZmljYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuYW1lcyA9IHBhaW50QXR0cmlidXRlTmFtZXMocHJvcGVydHksIGxheWVyLnR5cGUpO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHZhbHVlLnByb3BlcnR5LnNwZWNpZmljYXRpb24udHlwZTtcbiAgICAgICAgICAgIGNvbnN0IHVzZUludGVnZXJab29tID0gdmFsdWUucHJvcGVydHkudXNlSW50ZWdlclpvb207XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzRmFkZWQgPSB2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uWydwcm9wZXJ0eS10eXBlJ10gPT09ICdjcm9zcy1mYWRlZCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnByb3BlcnR5LnNwZWNpZmljYXRpb25bJ3Byb3BlcnR5LXR5cGUnXSA9PT0gJ2Nyb3NzLWZhZGVkLWRhdGEtZHJpdmVuJztcblxuICAgICAgICAgICAgaWYgKGlzQ3Jvc3NGYWRlZCkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYmluZGVyc1twcm9wZXJ0eV0gPSBuZXcgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyKHZhbHVlLnZhbHVlLnZhbHVlLCBuYW1lcywgdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChgL3VfJHtwcm9wZXJ0eX1gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJ1Y3RBcnJheUxheW91dCA9IGxheW91dFR5cGUocHJvcGVydHksIHR5cGUsICdzb3VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5iaW5kZXJzW3Byb3BlcnR5XSA9IG5ldyBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKHZhbHVlLnZhbHVlLCBuYW1lcywgdHlwZSwgdXNlSW50ZWdlclpvb20sIHpvb20sIFN0cnVjdEFycmF5TGF5b3V0LCBsYXllci5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChgL2FfJHtwcm9wZXJ0eX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmJpbmRlcnNbcHJvcGVydHldID0gbmV3IENvbnN0YW50QmluZGVyKHZhbHVlLnZhbHVlLnZhbHVlLCBuYW1lcywgdHlwZSk7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGAvdV8ke3Byb3BlcnR5fWApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS52YWx1ZS5raW5kID09PSAnc291cmNlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdEFycmF5TGF5b3V0ID0gbGF5b3V0VHlwZShwcm9wZXJ0eSwgdHlwZSwgJ3NvdXJjZScpO1xuICAgICAgICAgICAgICAgIHNlbGYuYmluZGVyc1twcm9wZXJ0eV0gPSBuZXcgU291cmNlRXhwcmVzc2lvbkJpbmRlcih2YWx1ZS52YWx1ZSwgbmFtZXMsIHR5cGUsIFN0cnVjdEFycmF5TGF5b3V0KTtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goYC9hXyR7cHJvcGVydHl9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdEFycmF5TGF5b3V0ID0gbGF5b3V0VHlwZShwcm9wZXJ0eSwgdHlwZSwgJ2NvbXBvc2l0ZScpO1xuICAgICAgICAgICAgICAgIHNlbGYuYmluZGVyc1twcm9wZXJ0eV0gPSBuZXcgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcih2YWx1ZS52YWx1ZSwgbmFtZXMsIHR5cGUsIHVzZUludGVnZXJab29tLCB6b29tLCBTdHJ1Y3RBcnJheUxheW91dCk7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGAvel8ke3Byb3BlcnR5fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5jYWNoZUtleSA9IGtleXMuc29ydCgpLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheXMobmV3TGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGluZGV4OiBudW1iZXIsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGJpbmRlci5wb3B1bGF0ZVBhaW50QXJyYXkobmV3TGVuZ3RoLCBmZWF0dXJlLCBpbWFnZVBvc2l0aW9ucywgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZlYXR1cmUuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fZmVhdHVyZU1hcC5hZGQoK2ZlYXR1cmUuaWQsIGluZGV4LCB0aGlzLl9idWZmZXJPZmZzZXQsIG5ld0xlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYnVmZmVyT2Zmc2V0ID0gbmV3TGVuZ3RoO1xuICAgIH1cbiAgICBzZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG86IEltYWdlUG9zaXRpb24sIHBvc0Zyb206IEltYWdlUG9zaXRpb24pIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBiaW5kZXIuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvLCBwb3NGcm9tKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXlzKGZlYXR1cmVTdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgbGF5ZXI6IFR5cGVkU3R5bGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGRpcnR5OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gZmVhdHVyZVN0YXRlcykge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25zID0gdGhpcy5fZmVhdHVyZU1hcC5nZXRQb3NpdGlvbnMoK2lkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBwb3Mgb2YgcG9zaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHZ0TGF5ZXIuZmVhdHVyZShwb3MuaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlciBpbnN0YW5jZW9mIENvbnN0YW50QmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb25zdGFudEJpbmRlcikgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYmluZGVyOiBhbnkpLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9BSE06IFJlbW92ZSBhZnRlciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNjI1NVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBsYXllci5wYWludC5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRlcjogYW55KS5leHByZXNzaW9uID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kZXIudXBkYXRlUGFpbnRBcnJheShwb3Muc3RhcnQsIHBvcy5lbmQsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZXNbaWRdLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgIH1cblxuICAgIGRlZmluZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5iaW5kZXJzW3Byb3BlcnR5XS5kZWZpbmVzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCk6IEFycmF5PFZlcnRleEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycztcbiAgICB9XG5cbiAgICBnZXRVbmlmb3Jtcyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBBcnJheTxCaW5kZXJVbmlmb3JtPiB7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1zID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGJpbmRlci51bmlmb3JtTmFtZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kZXIuZ2V0QmluZGluZyhjb250ZXh0LCBsb2NhdGlvbnNbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5wdXNoKHtuYW1lLCBwcm9wZXJ0eSwgYmluZGluZ30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5pZm9ybXM7XG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybXM8UHJvcGVydGllczogT2JqZWN0Pihjb250ZXh0OiBDb250ZXh0LCBiaW5kZXJVbmlmb3JtczogQXJyYXk8QmluZGVyVW5pZm9ybT4sIHByb3BlcnRpZXM6IFBvc3NpYmx5RXZhbHVhdGVkPFByb3BlcnRpZXM+LCBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzKSB7XG4gICAgICAgIC8vIFVuaWZvcm0gc3RhdGUgYmluZGluZ3MgYXJlIG93bmVkIGJ5IHRoZSBQcm9ncmFtLCBidXQgd2Ugc2V0IHRoZW1cbiAgICAgICAgLy8gZnJvbSB3aXRoaW4gdGhlIFByb2dyYW1Db25maWd1cmF0b24ncyBiaW5kZXIgbWVtYmVycy5cbiAgICAgICAgZm9yIChjb25zdCB7bmFtZSwgcHJvcGVydHksIGJpbmRpbmd9IG9mIGJpbmRlclVuaWZvcm1zKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRlcnNbcHJvcGVydHldLnNldFVuaWZvcm1zKGNvbnRleHQsIGJpbmRpbmcsIGdsb2JhbHMsIHByb3BlcnRpZXMuZ2V0KHByb3BlcnR5KSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVQYXR0ZXJuUGFpbnRCdWZmZXJzKGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycykge1xuICAgICAgICBjb25zdCBidWZmZXJzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5WZXJ0ZXhCdWZmZXIgPSBjcm9zc2ZhZGUuZnJvbVNjYWxlID09PSAyID8gYmluZGVyLnpvb21JblBhaW50VmVydGV4QnVmZmVyIDogYmluZGVyLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBpZiAocGF0dGVyblZlcnRleEJ1ZmZlcikgYnVmZmVycy5wdXNoKHBhdHRlcm5WZXJ0ZXhCdWZmZXIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoYmluZGVyIGluc3RhbmNlb2YgU291cmNlRXhwcmVzc2lvbkJpbmRlciB8fFxuICAgICAgICAgICAgICAgIGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIpICYmXG4gICAgICAgICAgICAgICAgYmluZGVyLnBhaW50VmVydGV4QnVmZmVyXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goYmluZGVyLnBhaW50VmVydGV4QnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBidWZmZXJzO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRlcnNbcHJvcGVydHldLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoKGJpbmRlciBpbnN0YW5jZW9mIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIgfHxcbiAgICAgICAgICAgICAgICBiaW5kZXIgaW5zdGFuY2VvZiBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyKSAmJlxuICAgICAgICAgICAgICAgIGJpbmRlci5wYWludFZlcnRleEJ1ZmZlclxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGJpbmRlci5wYWludFZlcnRleEJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYnVmZmVycyA9IGJ1ZmZlcnM7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZGVyc1twcm9wZXJ0eV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQ8TGF5ZXI6IFR5cGVkU3R5bGVMYXllcj4ge1xuICAgIHByb2dyYW1Db25maWd1cmF0aW9uczoge1tzdHJpbmddOiBQcm9ncmFtQ29uZmlndXJhdGlvbn07XG4gICAgbmVlZHNVcGxvYWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXlvdXRBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4sIGxheWVyczogJFJlYWRPbmx5QXJyYXk8TGF5ZXI+LCB6b29tOiBudW1iZXIsIGZpbHRlclByb3BlcnRpZXM6IChzdHJpbmcpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlKSB7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zID0ge307XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tsYXllci5pZF0gPSBQcm9ncmFtQ29uZmlndXJhdGlvbi5jcmVhdGVEeW5hbWljKGxheWVyLCB6b29tLCBmaWx0ZXJQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVyLmlkXS5sYXlvdXRBdHRyaWJ1dGVzID0gbGF5b3V0QXR0cmlidXRlcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5lZWRzVXBsb2FkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5cyhsZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW5kZXg6IG51bWJlciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1trZXldLnBvcHVsYXRlUGFpbnRBcnJheXMobGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwgaW1hZ2VQb3NpdGlvbnMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmVlZHNVcGxvYWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXlzKGZlYXR1cmVTdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgbGF5ZXJzOiAkUmVhZE9ubHlBcnJheTxUeXBlZFN0eWxlTGF5ZXI+LCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICAgICAgdGhpcy5uZWVkc1VwbG9hZCA9IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVyLmlkXS51cGRhdGVQYWludEFycmF5cyhmZWF0dXJlU3RhdGVzLCB2dExheWVyLCBsYXllciwgaW1hZ2VQb3NpdGlvbnMpIHx8IHRoaXMubmVlZHNVcGxvYWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQobGF5ZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tsYXllcklkXTtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMubmVlZHNVcGxvYWQpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tsYXllcklkXS51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZWVkc1VwbG9hZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbbGF5ZXJJZF0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwYWludEF0dHJpYnV0ZU5hbWVzKHByb3BlcnR5LCB0eXBlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlTmFtZUV4Y2VwdGlvbnMgPSB7XG4gICAgICAgICd0ZXh0LW9wYWNpdHknOiBbJ29wYWNpdHknXSxcbiAgICAgICAgJ2ljb24tb3BhY2l0eSc6IFsnb3BhY2l0eSddLFxuICAgICAgICAndGV4dC1jb2xvcic6IFsnZmlsbF9jb2xvciddLFxuICAgICAgICAnaWNvbi1jb2xvcic6IFsnZmlsbF9jb2xvciddLFxuICAgICAgICAndGV4dC1oYWxvLWNvbG9yJzogWydoYWxvX2NvbG9yJ10sXG4gICAgICAgICdpY29uLWhhbG8tY29sb3InOiBbJ2hhbG9fY29sb3InXSxcbiAgICAgICAgJ3RleHQtaGFsby1ibHVyJzogWydoYWxvX2JsdXInXSxcbiAgICAgICAgJ2ljb24taGFsby1ibHVyJzogWydoYWxvX2JsdXInXSxcbiAgICAgICAgJ3RleHQtaGFsby13aWR0aCc6IFsnaGFsb193aWR0aCddLFxuICAgICAgICAnaWNvbi1oYWxvLXdpZHRoJzogWydoYWxvX3dpZHRoJ10sXG4gICAgICAgICdsaW5lLWdhcC13aWR0aCc6IFsnZ2Fwd2lkdGgnXSxcbiAgICAgICAgJ2xpbmUtcGF0dGVybic6IFsncGF0dGVybl90bycsICdwYXR0ZXJuX2Zyb20nXSxcbiAgICAgICAgJ2ZpbGwtcGF0dGVybic6IFsncGF0dGVybl90bycsICdwYXR0ZXJuX2Zyb20nXSxcbiAgICAgICAgJ2ZpbGwtZXh0cnVzaW9uLXBhdHRlcm4nOiBbJ3BhdHRlcm5fdG8nLCAncGF0dGVybl9mcm9tJ10sXG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lRXhjZXB0aW9uc1twcm9wZXJ0eV0gfHxcbiAgICAgICAgW3Byb3BlcnR5LnJlcGxhY2UoYCR7dHlwZX0tYCwgJycpLnJlcGxhY2UoLy0vZywgJ18nKV07XG59XG5cbmZ1bmN0aW9uIGdldExheW91dEV4Y2VwdGlvbihwcm9wZXJ0eSkge1xuICAgIGNvbnN0IHByb3BlcnR5RXhjZXB0aW9ucyA9IHtcbiAgICAgICAgJ2xpbmUtcGF0dGVybic6e1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFBhdHRlcm5MYXlvdXRBcnJheSxcbiAgICAgICAgICAgICdjb21wb3NpdGUnOiBQYXR0ZXJuTGF5b3V0QXJyYXlcbiAgICAgICAgfSxcbiAgICAgICAgJ2ZpbGwtcGF0dGVybic6IHtcbiAgICAgICAgICAgICdzb3VyY2UnOiBQYXR0ZXJuTGF5b3V0QXJyYXksXG4gICAgICAgICAgICAnY29tcG9zaXRlJzogUGF0dGVybkxheW91dEFycmF5XG4gICAgICAgIH0sXG4gICAgICAgICdmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuJzp7XG4gICAgICAgICAgICAnc291cmNlJzogUGF0dGVybkxheW91dEFycmF5LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFBhdHRlcm5MYXlvdXRBcnJheVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9wZXJ0eUV4Y2VwdGlvbnNbcHJvcGVydHldO1xufVxuXG5mdW5jdGlvbiBsYXlvdXRUeXBlKHByb3BlcnR5LCB0eXBlLCBiaW5kZXJUeXBlKSB7XG4gICAgY29uc3QgZGVmYXVsdExheW91dHMgPSB7XG4gICAgICAgICdjb2xvcic6IHtcbiAgICAgICAgICAgICdzb3VyY2UnOiBTdHJ1Y3RBcnJheUxheW91dDJmOCxcbiAgICAgICAgICAgICdjb21wb3NpdGUnOiBTdHJ1Y3RBcnJheUxheW91dDRmMTZcbiAgICAgICAgfSxcbiAgICAgICAgJ251bWJlcic6IHtcbiAgICAgICAgICAgICdzb3VyY2UnOiBTdHJ1Y3RBcnJheUxheW91dDFmNCxcbiAgICAgICAgICAgICdjb21wb3NpdGUnOiBTdHJ1Y3RBcnJheUxheW91dDJmOFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGxheW91dEV4Y2VwdGlvbiA9IGdldExheW91dEV4Y2VwdGlvbihwcm9wZXJ0eSk7XG4gICAgcmV0dXJuICBsYXlvdXRFeGNlcHRpb24gJiYgbGF5b3V0RXhjZXB0aW9uW2JpbmRlclR5cGVdIHx8XG4gICAgICAgIGRlZmF1bHRMYXlvdXRzW3R5cGVdW2JpbmRlclR5cGVdO1xufVxuXG5yZWdpc3RlcignQ29uc3RhbnRCaW5kZXInLCBDb25zdGFudEJpbmRlcik7XG5yZWdpc3RlcignQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyJywgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyKTtcbnJlZ2lzdGVyKCdTb3VyY2VFeHByZXNzaW9uQmluZGVyJywgU291cmNlRXhwcmVzc2lvbkJpbmRlcik7XG5yZWdpc3RlcignQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcicsIENyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIpO1xucmVnaXN0ZXIoJ0NvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXInLCBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyKTtcbnJlZ2lzdGVyKCdQcm9ncmFtQ29uZmlndXJhdGlvbicsIFByb2dyYW1Db25maWd1cmF0aW9uLCB7b21pdDogWydfYnVmZmVycyddfSk7XG5yZWdpc3RlcignUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQnLCBQcm9ncmFtQ29uZmlndXJhdGlvblNldCk7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIFRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgY29vcmRpbmF0ZSBpbiB0aGUgaW50ZXJuYWwgdGlsZSBjb29yZGluYXRlIHN5c3RlbS4gQ29vcmRpbmF0ZXMgb2ZcbiAqIGFsbCBzb3VyY2UgZmVhdHVyZXMgbm9ybWFsaXplZCB0byB0aGlzIGV4dGVudCB1cG9uIGxvYWQuXG4gKlxuICogVGhlIHZhbHVlIGlzIGEgY29uc2VxdWVuY2Ugb2YgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAqIFZlcnRleCBidWZmZXIgc3RvcmUgcG9zaXRpb25zIGFzIHNpZ25lZCAxNiBiaXQgaW50ZWdlcnMuXG4gKiAqIE9uZSBiaXQgaXMgbG9zdCBmb3Igc2lnbmVkbmVzcyB0byBzdXBwb3J0IHRpbGUgYnVmZmVycy5cbiAqICogT25lIGJpdCBpcyBsb3N0IGJlY2F1c2UgdGhlIGxpbmUgdmVydGV4IGJ1ZmZlciB1c2VkIHRvIHBhY2sgMSBiaXQgb2Ygb3RoZXIgZGF0YSBpbnRvIHRoZSBpbnQuXG4gKiAqIE9uZSBiaXQgaXMgbG9zdCB0byBzdXBwb3J0IGZlYXR1cmVzIGV4dGVuZGluZyBwYXN0IHRoZSBleHRlbnQgb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHRpbGUuXG4gKiAqIFRoaXMgbGVhdmVzIHVzIHdpdGggMl4xMyA9IDgxOTJcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJlYWRvbmx5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IDgxOTI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3dhcm5PbmNlLCBjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IEVYVEVOVCBmcm9tICcuL2V4dGVudCc7XG5cbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vLyBUaGVzZSBib3VuZHMgZGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHN1cHBvcnRlZCBjb29yZGluYXRlIHZhbHVlcy5cbi8vIFdoaWxlIHZpc2libGUgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiBbMCwgRVhURU5UXSwgdGlsZXMgbWF5IHRoZW9yZXRpY2FsbHlcbi8vIGNvbnRhaW4gY29yZGluYXRlcyB3aXRoaW4gWy1JbmZpbml0eSwgSW5maW5pdHldLiBPdXIgcmFuZ2UgaXMgbGltaXRlZCBieSB0aGVcbi8vIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjb29yZGluYXRlLlxuZnVuY3Rpb24gY3JlYXRlQm91bmRzKGJpdHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBtaW46IC0xICogTWF0aC5wb3coMiwgYml0cyAtIDEpLFxuICAgICAgICBtYXg6IE1hdGgucG93KDIsIGJpdHMgLSAxKSAtIDFcbiAgICB9O1xufVxuXG5jb25zdCBib3VuZHMgPSBjcmVhdGVCb3VuZHMoMTUpO1xuXG4vKipcbiAqIExvYWRzIGEgZ2VvbWV0cnkgZnJvbSBhIFZlY3RvclRpbGVGZWF0dXJlIGFuZCBzY2FsZXMgaXQgdG8gdGhlIGNvbW1vbiBleHRlbnRcbiAqIHVzZWQgaW50ZXJuYWxseS5cbiAqIEBwYXJhbSB7VmVjdG9yVGlsZUZlYXR1cmV9IGZlYXR1cmVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvYWRHZW9tZXRyeShmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSk6IEFycmF5PEFycmF5PFBvaW50Pj4ge1xuICAgIGNvbnN0IHNjYWxlID0gRVhURU5UIC8gZmVhdHVyZS5leHRlbnQ7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBmZWF0dXJlLmxvYWRHZW9tZXRyeSgpO1xuICAgIGZvciAobGV0IHIgPSAwOyByIDwgZ2VvbWV0cnkubGVuZ3RoOyByKyspIHtcbiAgICAgICAgY29uc3QgcmluZyA9IGdlb21ldHJ5W3JdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHJpbmcubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gcmluZ1twXTtcbiAgICAgICAgICAgIC8vIHJvdW5kIGhlcmUgYmVjYXVzZSBtYXBib3gtZ2wtbmF0aXZlIHVzZXMgaW50ZWdlcnMgdG8gcmVwcmVzZW50XG4gICAgICAgICAgICAvLyBwb2ludHMgYW5kIHdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgdG8gYXZvaWQgcmVuZXJpbmcgZGlmZmVyZW5jZXMuXG4gICAgICAgICAgICBwb2ludC54ID0gTWF0aC5yb3VuZChwb2ludC54ICogc2NhbGUpO1xuICAgICAgICAgICAgcG9pbnQueSA9IE1hdGgucm91bmQocG9pbnQueSAqIHNjYWxlKTtcblxuICAgICAgICAgICAgaWYgKHBvaW50LnggPCBib3VuZHMubWluIHx8IHBvaW50LnggPiBib3VuZHMubWF4IHx8IHBvaW50LnkgPCBib3VuZHMubWluIHx8IHBvaW50LnkgPiBib3VuZHMubWF4KSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoJ0dlb21ldHJ5IGV4Y2VlZHMgYWxsb3dlZCBleHRlbnQsIHJlZHVjZSB5b3VyIHZlY3RvciB0aWxlIGJ1ZmZlciBzaXplJyk7XG4gICAgICAgICAgICAgICAgcG9pbnQueCA9IGNsYW1wKHBvaW50LngsIGJvdW5kcy5taW4sIGJvdW5kcy5tYXgpO1xuICAgICAgICAgICAgICAgIHBvaW50LnkgPSBjbGFtcChwb2ludC55LCBib3VuZHMubWluLCBib3VuZHMubWF4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2VvbWV0cnk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0NpcmNsZUxheW91dEFycmF5fSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB7bWVtYmVycyBhcyBsYXlvdXRBdHRyaWJ1dGVzfSBmcm9tICcuL2NpcmNsZV9hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHtQcm9ncmFtQ29uZmlndXJhdGlvblNldH0gZnJvbSAnLi4vcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7VHJpYW5nbGVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2V4dGVudCc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuaW1wb3J0IHR5cGUgQ2lyY2xlU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgSGVhdG1hcFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmZ1bmN0aW9uIGFkZENpcmNsZVZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgZXh0cnVkZVgsIGV4dHJ1ZGVZKSB7XG4gICAgbGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICh4ICogMikgKyAoKGV4dHJ1ZGVYICsgMSkgLyAyKSxcbiAgICAgICAgKHkgKiAyKSArICgoZXh0cnVkZVkgKyAxKSAvIDIpKTtcbn1cblxuLyoqXG4gKiBDaXJjbGVzIGFyZSByZXByZXNlbnRlZCBieSB0d28gdHJpYW5nbGVzLlxuICpcbiAqIEVhY2ggY29ybmVyIGhhcyBhIHBvcyB0aGF0IGlzIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZSBhbmQgYW4gZXh0cnVzaW9uXG4gKiB2ZWN0b3IgdGhhdCBpcyB3aGVyZSBpdCBwb2ludHMuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDaXJjbGVCdWNrZXQ8TGF5ZXI6IENpcmNsZVN0eWxlTGF5ZXIgfCBIZWF0bWFwU3R5bGVMYXllcj4gaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgbGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgbGF5ZXJzOiBBcnJheTxMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcnM6IEFycmF5PExheWVyPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IENpcmNsZUxheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPExheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgQ2lyY2xlTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzID0gbmV3IFNlZ21lbnRWZWN0b3IoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcyA9IHRoaXMubGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pc1N0YXRlRGVwZW5kZW50KCkpLm1hcCgobCkgPT4gbC5pZCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlTGF5ZXIgPSB0aGlzLmxheWVyc1swXTtcbiAgICAgICAgY29uc3QgYnVja2V0RmVhdHVyZXMgPSBbXTtcbiAgICAgICAgbGV0IGNpcmNsZVNvcnRLZXkgPSBudWxsO1xuXG4gICAgICAgIC8vIEhlYXRtYXAgbGF5ZXJzIGFyZSBoYW5kbGVkIGluIHRoaXMgYnVja2V0IGFuZCBoYXZlIG5vIGV2YWx1YXRlZCBwcm9wZXJ0aWVzLCBzbyB3ZSBjaGVjayBvdXIgYWNjZXNzXG4gICAgICAgIGlmIChzdHlsZUxheWVyLnR5cGUgPT09ICdjaXJjbGUnKSB7XG4gICAgICAgICAgICBjaXJjbGVTb3J0S2V5ID0gKChzdHlsZUxheWVyOiBhbnkpOiBDaXJjbGVTdHlsZUxheWVyKS5sYXlvdXQuZ2V0KCdjaXJjbGUtc29ydC1rZXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qge2ZlYXR1cmUsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSBvZiBmZWF0dXJlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBmZWF0dXJlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRLZXkgPSBjaXJjbGVTb3J0S2V5ID9cbiAgICAgICAgICAgICAgICAgICAgY2lyY2xlU29ydEtleS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkgOlxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlOiBCdWNrZXRGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogZmVhdHVyZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeSxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybnM6IHt9LFxuICAgICAgICAgICAgICAgICAgICBzb3J0S2V5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnB1c2goYnVja2V0RmVhdHVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2lyY2xlU29ydEtleSkge1xuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBpbiB1c2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBidWNrZXRGZWF0dXJlIG9mIGJ1Y2tldEZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSA9IGJ1Y2tldEZlYXR1cmU7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNbaW5kZXhdLmZlYXR1cmU7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShidWNrZXRGZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgpO1xuICAgICAgICAgICAgb3B0aW9ucy5mZWF0dXJlSW5kZXguaW5zZXJ0KGZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleCwgdGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVwbG9hZFBlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy51cGxvYWRlZCB8fCB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZDtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGFkZEZlYXR1cmUoZmVhdHVyZTogQnVja2V0RmVhdHVyZSwgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4ID0gcG9pbnQueDtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gcG9pbnQueTtcblxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBpbmNsdWRlIHBvaW50cyB0aGF0IGFyZSBvdXRzaWRlIHRoZSB0aWxlIGJvdW5kYXJpZXMuXG4gICAgICAgICAgICAgICAgaWYgKHggPCAwIHx8IHggPj0gRVhURU5UIHx8IHkgPCAwIHx8IHkgPj0gRVhURU5UKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgZ2VvbWV0cnkgd2lsbCBiZSBvZiB0aGUgUG9pbnQgdHlwZSwgYW5kIHdlJ2xsIGRlcml2ZVxuICAgICAgICAgICAgICAgIC8vIHR3byB0cmlhbmdsZXMgZnJvbSBpdC5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIMOiwpTCjMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCkFxuICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAzICAgICAyIMOiwpTCglxuICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAgICAgICAgIMOiwpTCglxuICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAwICAgICAxIMOiwpTCglxuICAgICAgICAgICAgICAgIC8vIMOiwpTClMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCmFxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5LCBmZWF0dXJlLnNvcnRLZXkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBhZGRDaXJjbGVWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgLTEsIC0xKTtcbiAgICAgICAgICAgICAgICBhZGRDaXJjbGVWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgMSwgLTEpO1xuICAgICAgICAgICAgICAgIGFkZENpcmNsZVZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCB4LCB5LCAxLCAxKTtcbiAgICAgICAgICAgICAgICBhZGRDaXJjbGVWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgLTEsIDEpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4LCBpbmRleCArIDEsIGluZGV4ICsgMik7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4LCBpbmRleCArIDMsIGluZGV4ICsgMik7XG5cbiAgICAgICAgICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSA0O1xuICAgICAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwge30pO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0NpcmNsZUJ1Y2tldCcsIENpcmNsZUJ1Y2tldCwge29taXQ6IFsnbGF5ZXJzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlQnVja2V0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtpc0NvdW50ZXJDbG9ja3dpc2V9IGZyb20gJy4vdXRpbCc7XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuZXhwb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnQsIHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uLCBwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkTXVsdGlMaW5lLCBwb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24sIGRpc3RUb1NlZ21lbnRTcXVhcmVkLCBwb2x5Z29uSW50ZXJzZWN0c0JveH07XG5cbnR5cGUgTGluZSA9IEFycmF5PFBvaW50PjtcbnR5cGUgTXVsdGlMaW5lID0gQXJyYXk8TGluZT47XG50eXBlIFJpbmcgPSBBcnJheTxQb2ludD47XG50eXBlIFBvbHlnb24gPSBBcnJheTxQb2ludD47XG50eXBlIE11bHRpUG9seWdvbiA9IEFycmF5PFBvbHlnb24+O1xuXG5mdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24ocG9seWdvbkE6IFBvbHlnb24sIHBvbHlnb25COiBQb2x5Z29uKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5Z29uQS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbkIsIHBvbHlnb25BW2ldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5Z29uQi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbkEsIHBvbHlnb25CW2ldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxpbmVJbnRlcnNlY3RzTGluZShwb2x5Z29uQSwgcG9seWdvbkIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNCdWZmZXJlZFBvaW50KHBvbHlnb246IFBvbHlnb24sIHBvaW50OiBQb2ludCwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbiwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAocG9pbnRJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKHBvaW50LCBwb2x5Z29uLCByYWRpdXMpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uKHBvbHlnb246IFBvbHlnb24sIG11bHRpUG9seWdvbjogTXVsdGlQb2x5Z29uKSB7XG5cbiAgICBpZiAocG9seWdvbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG11bHRpUG9seWdvbkNvbnRhaW5zUG9pbnQobXVsdGlQb2x5Z29uLCBwb2x5Z29uWzBdKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBtID0gMDsgbSA8IG11bHRpUG9seWdvbi5sZW5ndGg7IG0rKykge1xuICAgICAgICBjb25zdCByaW5nID0gbXVsdGlQb2x5Z29uW21dO1xuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJpbmcubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChwb2x5Z29uLCByaW5nW25dKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG11bHRpUG9seWdvbkNvbnRhaW5zUG9pbnQobXVsdGlQb2x5Z29uLCBwb2x5Z29uW2ldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBtdWx0aVBvbHlnb24ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgaWYgKGxpbmVJbnRlcnNlY3RzTGluZShwb2x5Z29uLCBtdWx0aVBvbHlnb25ba10pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmUocG9seWdvbjogUG9seWdvbiwgbXVsdGlMaW5lOiBNdWx0aUxpbmUsIHJhZGl1czogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdWx0aUxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbGluZSA9IG11bHRpTGluZVtpXTtcblxuICAgICAgICBpZiAocG9seWdvbi5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW5lLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHBvbHlnb24sIGxpbmVba10pKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lSW50ZXJzZWN0c0J1ZmZlcmVkTGluZShwb2x5Z29uLCBsaW5lLCByYWRpdXMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lSW50ZXJzZWN0c0J1ZmZlcmVkTGluZShsaW5lQTogTGluZSwgbGluZUI6IExpbmUsIHJhZGl1czogbnVtYmVyKSB7XG5cbiAgICBpZiAobGluZUEubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAobGluZUludGVyc2VjdHNMaW5lKGxpbmVBLCBsaW5lQikpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgYW55IHBvaW50IGluIGVpdGhlciBsaW5lIGlzIHdpdGhpbiByYWRpdXMgb2YgdGhlIG90aGVyIGxpbmVcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lQi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHBvaW50SW50ZXJzZWN0c0J1ZmZlcmVkTGluZShsaW5lQltqXSwgbGluZUEsIHJhZGl1cykpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW5lQS5sZW5ndGg7IGsrKykge1xuICAgICAgICBpZiAocG9pbnRJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKGxpbmVBW2tdLCBsaW5lQiwgcmFkaXVzKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lSW50ZXJzZWN0c0xpbmUobGluZUE6IExpbmUsIGxpbmVCOiBMaW5lKSB7XG4gICAgaWYgKGxpbmVBLmxlbmd0aCA9PT0gMCB8fCBsaW5lQi5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVBLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBhMCA9IGxpbmVBW2ldO1xuICAgICAgICBjb25zdCBhMSA9IGxpbmVBW2kgKyAxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lQi5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGIwID0gbGluZUJbal07XG4gICAgICAgICAgICBjb25zdCBiMSA9IGxpbmVCW2ogKyAxXTtcbiAgICAgICAgICAgIGlmIChsaW5lU2VnbWVudEludGVyc2VjdHNMaW5lU2VnbWVudChhMCwgYTEsIGIwLCBiMSkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGluZVNlZ21lbnRJbnRlcnNlY3RzTGluZVNlZ21lbnQoYTA6IFBvaW50LCBhMTogUG9pbnQsIGIwOiBQb2ludCwgYjE6IFBvaW50KSB7XG4gICAgcmV0dXJuIGlzQ291bnRlckNsb2Nrd2lzZShhMCwgYjAsIGIxKSAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGExLCBiMCwgYjEpICYmXG4gICAgICAgIGlzQ291bnRlckNsb2Nrd2lzZShhMCwgYTEsIGIwKSAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGEwLCBhMSwgYjEpO1xufVxuXG5mdW5jdGlvbiBwb2ludEludGVyc2VjdHNCdWZmZXJlZExpbmUocDogUG9pbnQsIGxpbmU6IExpbmUsIHJhZGl1czogbnVtYmVyKSB7XG4gICAgY29uc3QgcmFkaXVzU3F1YXJlZCA9IHJhZGl1cyAqIHJhZGl1cztcblxuICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHAuZGlzdFNxcihsaW5lWzBdKSA8IHJhZGl1c1NxdWFyZWQ7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gRmluZCBsaW5lIHNlZ21lbnRzIHRoYXQgaGF2ZSBhIGRpc3RhbmNlIDw9IHJhZGl1c14yIHRvIHBcbiAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCB3ZSB0cmVhdCB0aGUgbGluZSBhcyBcImNvbnRhaW5pbmcgcG9pbnQgcFwiLlxuICAgICAgICBjb25zdCB2ID0gbGluZVtpIC0gMV0sIHcgPSBsaW5lW2ldO1xuICAgICAgICBpZiAoZGlzdFRvU2VnbWVudFNxdWFyZWQocCwgdiwgdykgPCByYWRpdXNTcXVhcmVkKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTUwMTcyNS8zMzEzNzkuXG5mdW5jdGlvbiBkaXN0VG9TZWdtZW50U3F1YXJlZChwOiBQb2ludCwgdjogUG9pbnQsIHc6IFBvaW50KSB7XG4gICAgY29uc3QgbDIgPSB2LmRpc3RTcXIodyk7XG4gICAgaWYgKGwyID09PSAwKSByZXR1cm4gcC5kaXN0U3FyKHYpO1xuICAgIGNvbnN0IHQgPSAoKHAueCAtIHYueCkgKiAody54IC0gdi54KSArIChwLnkgLSB2LnkpICogKHcueSAtIHYueSkpIC8gbDI7XG4gICAgaWYgKHQgPCAwKSByZXR1cm4gcC5kaXN0U3FyKHYpO1xuICAgIGlmICh0ID4gMSkgcmV0dXJuIHAuZGlzdFNxcih3KTtcbiAgICByZXR1cm4gcC5kaXN0U3FyKHcuc3ViKHYpLl9tdWx0KHQpLl9hZGQodikpO1xufVxuXG4vLyBwb2ludCBpbiBwb2x5Z29uIHJheSBjYXN0aW5nIGFsZ29yaXRobVxuZnVuY3Rpb24gbXVsdGlQb2x5Z29uQ29udGFpbnNQb2ludChyaW5nczogQXJyYXk8UmluZz4sIHA6IFBvaW50KSB7XG4gICAgbGV0IGMgPSBmYWxzZSxcbiAgICAgICAgcmluZywgcDEsIHAyO1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCByaW5ncy5sZW5ndGg7IGsrKykge1xuICAgICAgICByaW5nID0gcmluZ3Nba107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gcmluZy5sZW5ndGggLSAxOyBpIDwgcmluZy5sZW5ndGg7IGogPSBpKyspIHtcbiAgICAgICAgICAgIHAxID0gcmluZ1tpXTtcbiAgICAgICAgICAgIHAyID0gcmluZ1tqXTtcbiAgICAgICAgICAgIGlmICgoKHAxLnkgPiBwLnkpICE9PSAocDIueSA+IHAueSkpICYmIChwLnggPCAocDIueCAtIHAxLngpICogKHAueSAtIHAxLnkpIC8gKHAyLnkgLSBwMS55KSArIHAxLngpKSB7XG4gICAgICAgICAgICAgICAgYyA9ICFjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBwb2x5Z29uQ29udGFpbnNQb2ludChyaW5nOiBSaW5nLCBwOiBQb2ludCkge1xuICAgIGxldCBjID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSByaW5nLmxlbmd0aCAtIDE7IGkgPCByaW5nLmxlbmd0aDsgaiA9IGkrKykge1xuICAgICAgICBjb25zdCBwMSA9IHJpbmdbaV07XG4gICAgICAgIGNvbnN0IHAyID0gcmluZ1tqXTtcbiAgICAgICAgaWYgKCgocDEueSA+IHAueSkgIT09IChwMi55ID4gcC55KSkgJiYgKHAueCA8IChwMi54IC0gcDEueCkgKiAocC55IC0gcDEueSkgLyAocDIueSAtIHAxLnkpICsgcDEueCkpIHtcbiAgICAgICAgICAgIGMgPSAhYztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNCb3gocmluZzogUmluZywgYm94WDE6IG51bWJlciwgYm94WTE6IG51bWJlciwgYm94WDI6IG51bWJlciwgYm94WTI6IG51bWJlcikge1xuICAgIGZvciAoY29uc3QgcCBvZiByaW5nKSB7XG4gICAgICAgIGlmIChib3hYMSA8PSBwLnggJiZcbiAgICAgICAgICAgIGJveFkxIDw9IHAueSAmJlxuICAgICAgICAgICAgYm94WDIgPj0gcC54ICYmXG4gICAgICAgICAgICBib3hZMiA+PSBwLnkpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvcm5lcnMgPSBbXG4gICAgICAgIG5ldyBQb2ludChib3hYMSwgYm94WTEpLFxuICAgICAgICBuZXcgUG9pbnQoYm94WDEsIGJveFkyKSxcbiAgICAgICAgbmV3IFBvaW50KGJveFgyLCBib3hZMiksXG4gICAgICAgIG5ldyBQb2ludChib3hYMiwgYm94WTEpXTtcblxuICAgIGlmIChyaW5nLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb3JuZXIgb2YgY29ybmVycykge1xuICAgICAgICAgICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHJpbmcsIGNvcm5lcikpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaW5nLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBwMSA9IHJpbmdbaV07XG4gICAgICAgIGNvbnN0IHAyID0gcmluZ1tpICsgMV07XG4gICAgICAgIGlmIChlZGdlSW50ZXJzZWN0c0JveChwMSwgcDIsIGNvcm5lcnMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGVkZ2VJbnRlcnNlY3RzQm94KGUxOiBQb2ludCwgZTI6IFBvaW50LCBjb3JuZXJzOiBBcnJheTxQb2ludD4pIHtcbiAgICBjb25zdCB0bCA9IGNvcm5lcnNbMF07XG4gICAgY29uc3QgYnIgPSBjb3JuZXJzWzJdO1xuICAgIC8vIHRoZSBlZGdlIGFuZCBib3ggZG8gbm90IGludGVyc2VjdCBpbiBlaXRoZXIgdGhlIHggb3IgeSBkaW1lbnNpb25zXG4gICAgaWYgKCgoZTEueCA8IHRsLngpICYmIChlMi54IDwgdGwueCkpIHx8XG4gICAgICAgICgoZTEueCA+IGJyLngpICYmIChlMi54ID4gYnIueCkpIHx8XG4gICAgICAgICgoZTEueSA8IHRsLnkpICYmIChlMi55IDwgdGwueSkpIHx8XG4gICAgICAgICgoZTEueSA+IGJyLnkpICYmIChlMi55ID4gYnIueSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBjaGVjayBpZiBhbGwgY29ybmVycyBvZiB0aGUgYm94IGFyZSBvbiB0aGUgc2FtZSBzaWRlIG9mIHRoZSBlZGdlXG4gICAgY29uc3QgZGlyID0gaXNDb3VudGVyQ2xvY2t3aXNlKGUxLCBlMiwgY29ybmVyc1swXSk7XG4gICAgcmV0dXJuIGRpciAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGUxLCBlMiwgY29ybmVyc1sxXSkgfHxcbiAgICAgICAgZGlyICE9PSBpc0NvdW50ZXJDbG9ja3dpc2UoZTEsIGUyLCBjb3JuZXJzWzJdKSB8fFxuICAgICAgICBkaXIgIT09IGlzQ291bnRlckNsb2Nrd2lzZShlMSwgZTIsIGNvcm5lcnNbM10pO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgdHlwZSB7UG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tIFwiLi9wcm9wZXJ0aWVzXCI7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENpcmNsZUJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9jaXJjbGVfYnVja2V0JztcbmltcG9ydCB0eXBlIExpbmVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF4aW11bVBhaW50VmFsdWUocHJvcGVydHk6IHN0cmluZywgbGF5ZXI6IFN0eWxlTGF5ZXIsIGJ1Y2tldDogQ2lyY2xlQnVja2V0PCo+IHwgTGluZUJ1Y2tldCk6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSAoKGxheWVyLnBhaW50OiBhbnkpLmdldChwcm9wZXJ0eSk6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxhbnk+KS52YWx1ZTtcbiAgICBpZiAodmFsdWUua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYmluZGVycyA9IGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKS5iaW5kZXJzO1xuICAgICAgICByZXR1cm4gYmluZGVyc1twcm9wZXJ0eV0ubWF4VmFsdWU7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlRGlzdGFuY2UodHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCh0cmFuc2xhdGVbMF0gKiB0cmFuc2xhdGVbMF0gKyB0cmFuc2xhdGVbMV0gKiB0cmFuc2xhdGVbMV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlQW5jaG9yOiAndmlld3BvcnQnIHwgJ21hcCcsXG4gICAgICAgICAgICAgICAgICAgYmVhcmluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIpIHtcbiAgICBpZiAoIXRyYW5zbGF0ZVswXSAmJiAhdHJhbnNsYXRlWzFdKSB7XG4gICAgICAgIHJldHVybiBxdWVyeUdlb21ldHJ5O1xuICAgIH1cbiAgICBjb25zdCBwdCA9IFBvaW50LmNvbnZlcnQodHJhbnNsYXRlKS5fbXVsdChwaXhlbHNUb1RpbGVVbml0cyk7XG5cbiAgICBpZiAodHJhbnNsYXRlQW5jaG9yID09PSBcInZpZXdwb3J0XCIpIHtcbiAgICAgICAgcHQuX3JvdGF0ZSgtYmVhcmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlcnlHZW9tZXRyeS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwb2ludCA9IHF1ZXJ5R2VvbWV0cnlbaV07XG4gICAgICAgIHRyYW5zbGF0ZWQucHVzaChwb2ludC5zdWIocHQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG59XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSB7fFxuICAgIFwiY2lyY2xlLXNvcnQta2V5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJjaXJjbGUtc29ydC1rZXlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfY2lyY2xlXCJdW1wiY2lyY2xlLXNvcnQta2V5XCJdKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcImNpcmNsZS1yYWRpdXNcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJjaXJjbGUtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImNpcmNsZS1ibHVyXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiY2lyY2xlLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJjaXJjbGUtdHJhbnNsYXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImNpcmNsZS1zdHJva2UtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImNpcmNsZS1yYWRpdXNcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtcmFkaXVzXCJdKSxcbiAgICBcImNpcmNsZS1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1jb2xvclwiXSksXG4gICAgXCJjaXJjbGUtYmx1clwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1ibHVyXCJdKSxcbiAgICBcImNpcmNsZS1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLW9wYWNpdHlcIl0pLFxuICAgIFwiY2lyY2xlLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXRyYW5zbGF0ZVwiXSksXG4gICAgXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFxuICAgIFwiY2lyY2xlLXBpdGNoLXNjYWxlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIl0pLFxuICAgIFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiXSksXG4gICAgXCJjaXJjbGUtc3Ryb2tlLXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXN0cm9rZS13aWR0aFwiXSksXG4gICAgXCJjaXJjbGUtc3Ryb2tlLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXN0cm9rZS1jb2xvclwiXSksXG4gICAgXCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHlcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQsIGxheW91dCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiwgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPlxufT4pO1xuIiwiLyoqXHJcbiAqIENvbW1vbiB1dGlsaXRpZXNcclxuICogQG1vZHVsZSBnbE1hdHJpeFxyXG4gKi9cbi8vIENvbmZpZ3VyYXRpb24gQ29uc3RhbnRzXG5leHBvcnQgdmFyIEVQU0lMT04gPSAwLjAwMDAwMTtcbmV4cG9ydCB2YXIgQVJSQVlfVFlQRSA9IHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnID8gRmxvYXQzMkFycmF5IDogQXJyYXk7XG5leHBvcnQgdmFyIFJBTkRPTSA9IE1hdGgucmFuZG9tO1xuLyoqXHJcbiAqIFNldHMgdGhlIHR5cGUgb2YgYXJyYXkgdXNlZCB3aGVuIGNyZWF0aW5nIG5ldyB2ZWN0b3JzIGFuZCBtYXRyaWNlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge1R5cGV9IHR5cGUgQXJyYXkgdHlwZSwgc3VjaCBhcyBGbG9hdDMyQXJyYXkgb3IgQXJyYXlcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRNYXRyaXhBcnJheVR5cGUodHlwZSkge1xuICBBUlJBWV9UWVBFID0gdHlwZTtcbn1cbnZhciBkZWdyZWUgPSBNYXRoLlBJIC8gMTgwO1xuLyoqXHJcbiAqIENvbnZlcnQgRGVncmVlIFRvIFJhZGlhblxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYSBBbmdsZSBpbiBEZWdyZWVzXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdG9SYWRpYW4oYSkge1xuICByZXR1cm4gYSAqIGRlZ3JlZTtcbn1cbi8qKlxyXG4gKiBUZXN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYXJndW1lbnRzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSB2YWx1ZSwgd2l0aGluIGFuIGFic29sdXRlXHJcbiAqIG9yIHJlbGF0aXZlIHRvbGVyYW5jZSBvZiBnbE1hdHJpeC5FUFNJTE9OIChhbiBhYnNvbHV0ZSB0b2xlcmFuY2UgaXMgdXNlZCBmb3IgdmFsdWVzIGxlc3NcclxuICogdGhhbiBvciBlcXVhbCB0byAxLjAsIGFuZCBhIHJlbGF0aXZlIHRvbGVyYW5jZSBpcyB1c2VkIGZvciBsYXJnZXIgdmFsdWVzKVxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYSBUaGUgZmlyc3QgbnVtYmVyIHRvIHRlc3QuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIFRoZSBzZWNvbmQgbnVtYmVyIHRvIHRlc3QuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBudW1iZXJzIGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSBFUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhKSwgTWF0aC5hYnMoYikpO1xufSIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDJ4MiBNYXRyaXhcclxuICogQG1vZHVsZSBtYXQyXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDIgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gYSBuZXcgMngyIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIG1hdDIgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hdDIgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHJldHVybnMge21hdDJ9IG91dCBBIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyhtMDAsIG0wMSwgbTEwLCBtMTEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTEwO1xuICBvdXRbM10gPSBtMTE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgbWF0MiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIG0wMCwgbTAxLCBtMTAsIG0xMSkge1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTEwO1xuICBvdXRbM10gPSBtMTE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKG91dCwgYSkge1xuICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlXG4gIC8vIHNvbWUgdmFsdWVzXG4gIGlmIChvdXQgPT09IGEpIHtcbiAgICB2YXIgYTEgPSBhWzFdO1xuICAgIG91dFsxXSA9IGFbMl07XG4gICAgb3V0WzJdID0gYTE7XG4gIH0gZWxzZSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzJdO1xuICAgIG91dFsyXSA9IGFbMV07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICB2YXIgZGV0ID0gYTAgKiBhMyAtIGEyICogYTE7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gYTMgKiBkZXQ7XG4gIG91dFsxXSA9IC1hMSAqIGRldDtcbiAgb3V0WzJdID0gLWEyICogZGV0O1xuICBvdXRbM10gPSBhMCAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGpvaW50KG91dCwgYSkge1xuICAvLyBDYWNoaW5nIHRoaXMgdmFsdWUgaXMgbmVzc2VjYXJ5IGlmIG91dCA9PSBhXG4gIHZhciBhMCA9IGFbMF07XG4gIG91dFswXSA9IGFbM107XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gYTA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5hbnQoYSkge1xuICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzJdICogYVsxXTtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcbiAgb3V0WzFdID0gYTEgKiBiMCArIGEzICogYjE7XG4gIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xuICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MiBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCByYWQpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGEwICogYyArIGEyICogcztcbiAgb3V0WzFdID0gYTEgKiBjICsgYTMgKiBzO1xuICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xuICBvdXRbM10gPSBhMSAqIC1zICsgYTMgKiBjO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MiBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIHYpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIHYwID0gdlswXSxcbiAgICAgIHYxID0gdlsxXTtcbiAgb3V0WzBdID0gYTAgKiB2MDtcbiAgb3V0WzFdID0gYTEgKiB2MDtcbiAgb3V0WzJdID0gYTIgKiB2MTtcbiAgb3V0WzNdID0gYTMgKiB2MTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBnaXZlbiBhbmdsZVxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDIuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQyLnJvdGF0ZShkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCBtYXQyIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IHM7XG4gIG91dFsyXSA9IC1zO1xuICBvdXRbM10gPSBjO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciBzY2FsaW5nXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0Mi5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDIuc2NhbGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgbWF0MiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSB2WzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdtYXQyKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpKTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEwsIEQgYW5kIFUgbWF0cmljZXMgKExvd2VyIHRyaWFuZ3VsYXIsIERpYWdvbmFsIGFuZCBVcHBlciB0cmlhbmd1bGFyKSBieSBmYWN0b3JpemluZyB0aGUgaW5wdXQgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gTCB0aGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBEIHRoZSBkaWFnb25hbCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBVIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGlucHV0IG1hdHJpeCB0byBmYWN0b3JpemVcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBMRFUoTCwgRCwgVSwgYSkge1xuICBMWzJdID0gYVsyXSAvIGFbMF07XG4gIFVbMF0gPSBhWzBdO1xuICBVWzFdID0gYVsxXTtcbiAgVVszXSA9IGFbM10gLSBMWzJdICogVVsxXTtcbiAgcmV0dXJuIFtMLCBELCBVXTtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQyJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM107XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSk7XG59XG4vKipcclxuICogTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHRoZSBtYXRyaXggYnkgYSBzY2FsYXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgbWF0cml4J3MgZWxlbWVudHMgYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQyJ3MgYWZ0ZXIgbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYidzIGVsZW1lbnRzIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAyeDMgTWF0cml4XHJcbiAqIEBtb2R1bGUgbWF0MmRcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgbWF0MmQgY29udGFpbnMgc2l4IGVsZW1lbnRzIGRlZmluZWQgYXM6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBjLCB0eCxcclxuICogIGIsIGQsIHR5XVxyXG4gKiA8L3ByZT5cclxuICogVGhpcyBpcyBhIHNob3J0IGZvcm0gZm9yIHRoZSAzeDMgbWF0cml4OlxyXG4gKiA8cHJlPlxyXG4gKiBbYSwgYywgdHgsXHJcbiAqICBiLCBkLCB0eSxcclxuICogIDAsIDAsIDFdXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGUgbGFzdCByb3cgaXMgaWdub3JlZCBzbyB0aGUgYXJyYXkgaXMgc2hvcnRlciBhbmQgb3BlcmF0aW9ucyBhcmUgZmFzdGVyLlxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0MmRcclxuICpcclxuICogQHJldHVybnMge21hdDJkfSBhIG5ldyAyeDMgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNik7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzVdID0gMDtcbiAgfVxuXG4gIG91dFswXSA9IDE7XG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyZCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg2KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MmQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgbWF0MmQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWF0MmQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhIENvbXBvbmVudCBBIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBDb21wb25lbnQgQiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgQ29tcG9uZW50IEMgKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBkIENvbXBvbmVudCBEIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdHggQ29tcG9uZW50IFRYIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdHkgQ29tcG9uZW50IFRZIChpbmRleCA1KVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IEEgbmV3IG1hdDJkXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyhhLCBiLCBjLCBkLCB0eCwgdHkpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDYpO1xuICBvdXRbMF0gPSBhO1xuICBvdXRbMV0gPSBiO1xuICBvdXRbMl0gPSBjO1xuICBvdXRbM10gPSBkO1xuICBvdXRbNF0gPSB0eDtcbiAgb3V0WzVdID0gdHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgbWF0MmQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtOdW1iZXJ9IGEgQ29tcG9uZW50IEEgKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIENvbXBvbmVudCBCIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBDb21wb25lbnQgQyAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IGQgQ29tcG9uZW50IEQgKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eCBDb21wb25lbnQgVFggKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eSBDb21wb25lbnQgVFkgKGluZGV4IDUpXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgYSwgYiwgYywgZCwgdHgsIHR5KSB7XG4gIG91dFswXSA9IGE7XG4gIG91dFsxXSA9IGI7XG4gIG91dFsyXSA9IGM7XG4gIG91dFszXSA9IGQ7XG4gIG91dFs0XSA9IHR4O1xuICBvdXRbNV0gPSB0eTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhYSA9IGFbMF0sXG4gICAgICBhYiA9IGFbMV0sXG4gICAgICBhYyA9IGFbMl0sXG4gICAgICBhZCA9IGFbM107XG4gIHZhciBhdHggPSBhWzRdLFxuICAgICAgYXR5ID0gYVs1XTtcbiAgdmFyIGRldCA9IGFhICogYWQgLSBhYiAqIGFjO1xuXG4gIGlmICghZGV0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkZXQgPSAxLjAgLyBkZXQ7XG4gIG91dFswXSA9IGFkICogZGV0O1xuICBvdXRbMV0gPSAtYWIgKiBkZXQ7XG4gIG91dFsyXSA9IC1hYyAqIGRldDtcbiAgb3V0WzNdID0gYWEgKiBkZXQ7XG4gIG91dFs0XSA9IChhYyAqIGF0eSAtIGFkICogYXR4KSAqIGRldDtcbiAgb3V0WzVdID0gKGFiICogYXR4IC0gYWEgKiBhdHkpICogZGV0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5hbnQoYSkge1xuICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzFdICogYVsyXTtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyZCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM10sXG4gICAgICBiNCA9IGJbNF0sXG4gICAgICBiNSA9IGJbNV07XG4gIG91dFswXSA9IGEwICogYjAgKyBhMiAqIGIxO1xuICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcbiAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XG4gIG91dFszXSA9IGExICogYjIgKyBhMyAqIGIzO1xuICBvdXRbNF0gPSBhMCAqIGI0ICsgYTIgKiBiNSArIGE0O1xuICBvdXRbNV0gPSBhMSAqIGI0ICsgYTMgKiBiNSArIGE1O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQyZCBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCByYWQpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XTtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGEwICogYyArIGEyICogcztcbiAgb3V0WzFdID0gYTEgKiBjICsgYTMgKiBzO1xuICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xuICBvdXRbM10gPSBhMSAqIC1zICsgYTMgKiBjO1xuICBvdXRbNF0gPSBhNDtcbiAgb3V0WzVdID0gYTU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQyZCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIHYpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XTtcbiAgdmFyIHYwID0gdlswXSxcbiAgICAgIHYxID0gdlsxXTtcbiAgb3V0WzBdID0gYTAgKiB2MDtcbiAgb3V0WzFdID0gYTEgKiB2MDtcbiAgb3V0WzJdID0gYTIgKiB2MTtcbiAgb3V0WzNdID0gYTMgKiB2MTtcbiAgb3V0WzRdID0gYTQ7XG4gIG91dFs1XSA9IGE1O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byB0cmFuc2xhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUob3V0LCBhLCB2KSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV07XG4gIHZhciB2MCA9IHZbMF0sXG4gICAgICB2MSA9IHZbMV07XG4gIG91dFswXSA9IGEwO1xuICBvdXRbMV0gPSBhMTtcbiAgb3V0WzJdID0gYTI7XG4gIG91dFszXSA9IGEzO1xuICBvdXRbNF0gPSBhMCAqIHYwICsgYTIgKiB2MSArIGE0O1xuICBvdXRbNV0gPSBhMSAqIHYwICsgYTMgKiB2MSArIGE1O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIGdpdmVuIGFuZ2xlXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0MmQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQyZC5yb3RhdGUoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IG1hdDJkIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSBzO1xuICBvdXRbMl0gPSAtcztcbiAgb3V0WzNdID0gYztcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3Igc2NhbGluZ1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDJkLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0MmQuc2NhbGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IG1hdDJkIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjMn0gdiBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSB2WzFdO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDJkLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0MmQudHJhbnNsYXRlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCBtYXQyZCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVRyYW5zbGF0aW9uKG91dCwgdikge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAxO1xuICBvdXRbNF0gPSB2WzBdO1xuICBvdXRbNV0gPSB2WzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIG1hdHJpeCB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ21hdDJkKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcpJztcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIDEpO1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDJkJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyZH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyZH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIG91dFs0XSA9IGFbNF0gLSBiWzRdO1xuICBvdXRbNV0gPSBhWzVdIC0gYls1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgdGhlIG1hdHJpeCBieSBhIHNjYWxhci5cclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIG1hdHJpeCdzIGVsZW1lbnRzIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICBvdXRbNF0gPSBhWzRdICogYjtcbiAgb3V0WzVdID0gYVs1XSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MmQncyBhZnRlciBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiJ3MgZWxlbWVudHMgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF0gKiBzY2FsZTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQyZH0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM10gJiYgYVs0XSA9PT0gYls0XSAmJiBhWzVdID09PSBiWzVdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXSxcbiAgICAgIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKSAmJiBNYXRoLmFicyhhNCAtIGI0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNCksIE1hdGguYWJzKGI0KSkgJiYgTWF0aC5hYnMoYTUgLSBiNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTUpLCBNYXRoLmFicyhiNSkpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0MmQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDJkLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogM3gzIE1hdHJpeFxyXG4gKiBAbW9kdWxlIG1hdDNcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcclxuICpcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg5KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNV0gPSAwO1xuICAgIG91dFs2XSA9IDA7XG4gICAgb3V0WzddID0gMDtcbiAgfVxuXG4gIG91dFswXSA9IDE7XG4gIG91dFs0XSA9IDE7XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29waWVzIHRoZSB1cHBlci1sZWZ0IDN4MyB2YWx1ZXMgaW50byB0aGUgZ2l2ZW4gbWF0My5cclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyAzeDMgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSAgIHRoZSBzb3VyY2UgNHg0IG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hdDQob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbNF07XG4gIG91dFs0XSA9IGFbNV07XG4gIG91dFs1XSA9IGFbNl07XG4gIG91dFs2XSA9IGFbOF07XG4gIG91dFs3XSA9IGFbOV07XG4gIG91dFs4XSA9IGFbMTBdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0MyBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQzfSBhIG5ldyAzeDMgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOSk7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDMgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hdDMgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAyIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDIgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEyIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDIgcG9zaXRpb24gKGluZGV4IDUpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjAgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggNilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMSBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA3KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIyIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDIgcG9zaXRpb24gKGluZGV4IDgpXHJcbiAqIEByZXR1cm5zIHttYXQzfSBBIG5ldyBtYXQzXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyhtMDAsIG0wMSwgbTAyLCBtMTAsIG0xMSwgbTEyLCBtMjAsIG0yMSwgbTIyKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg5KTtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0wMjtcbiAgb3V0WzNdID0gbTEwO1xuICBvdXRbNF0gPSBtMTE7XG4gIG91dFs1XSA9IG0xMjtcbiAgb3V0WzZdID0gbTIwO1xuICBvdXRbN10gPSBtMjE7XG4gIG91dFs4XSA9IG0yMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBtYXQzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDIgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMCBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTExIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDEgcG9zaXRpb24gKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTIgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggNSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMCBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA2KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIxIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDEgcG9zaXRpb24gKGluZGV4IDcpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjIgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggOClcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIG0wMCwgbTAxLCBtMDIsIG0xMCwgbTExLCBtMTIsIG0yMCwgbTIxLCBtMjIpIHtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0wMjtcbiAgb3V0WzNdID0gbTEwO1xuICBvdXRbNF0gPSBtMTE7XG4gIG91dFs1XSA9IG0xMjtcbiAgb3V0WzZdID0gbTIwO1xuICBvdXRbN10gPSBtMjE7XG4gIG91dFs4XSA9IG0yMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBtYXQzIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAxO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZShvdXQsIGEpIHtcbiAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZSBzb21lIHZhbHVlc1xuICBpZiAob3V0ID09PSBhKSB7XG4gICAgdmFyIGEwMSA9IGFbMV0sXG4gICAgICAgIGEwMiA9IGFbMl0sXG4gICAgICAgIGExMiA9IGFbNV07XG4gICAgb3V0WzFdID0gYVszXTtcbiAgICBvdXRbMl0gPSBhWzZdO1xuICAgIG91dFszXSA9IGEwMTtcbiAgICBvdXRbNV0gPSBhWzddO1xuICAgIG91dFs2XSA9IGEwMjtcbiAgICBvdXRbN10gPSBhMTI7XG4gIH0gZWxzZSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzNdO1xuICAgIG91dFsyXSA9IGFbNl07XG4gICAgb3V0WzNdID0gYVsxXTtcbiAgICBvdXRbNF0gPSBhWzRdO1xuICAgIG91dFs1XSA9IGFbN107XG4gICAgb3V0WzZdID0gYVsyXTtcbiAgICBvdXRbN10gPSBhWzVdO1xuICAgIG91dFs4XSA9IGFbOF07XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEludmVydHMgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdO1xuICB2YXIgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdO1xuICB2YXIgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdO1xuICB2YXIgYjAxID0gYTIyICogYTExIC0gYTEyICogYTIxO1xuICB2YXIgYjExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDtcbiAgdmFyIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHZhciBkZXQgPSBhMDAgKiBiMDEgKyBhMDEgKiBiMTEgKyBhMDIgKiBiMjE7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gYjAxICogZGV0O1xuICBvdXRbMV0gPSAoLWEyMiAqIGEwMSArIGEwMiAqIGEyMSkgKiBkZXQ7XG4gIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xuICBvdXRbM10gPSBiMTEgKiBkZXQ7XG4gIG91dFs0XSA9IChhMjIgKiBhMDAgLSBhMDIgKiBhMjApICogZGV0O1xuICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XG4gIG91dFs2XSA9IGIyMSAqIGRldDtcbiAgb3V0WzddID0gKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApICogZGV0O1xuICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGpvaW50KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdO1xuICB2YXIgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdO1xuICB2YXIgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdO1xuICBvdXRbMF0gPSBhMTEgKiBhMjIgLSBhMTIgKiBhMjE7XG4gIG91dFsxXSA9IGEwMiAqIGEyMSAtIGEwMSAqIGEyMjtcbiAgb3V0WzJdID0gYTAxICogYTEyIC0gYTAyICogYTExO1xuICBvdXRbM10gPSBhMTIgKiBhMjAgLSBhMTAgKiBhMjI7XG4gIG91dFs0XSA9IGEwMCAqIGEyMiAtIGEwMiAqIGEyMDtcbiAgb3V0WzVdID0gYTAyICogYTEwIC0gYTAwICogYTEyO1xuICBvdXRbNl0gPSBhMTAgKiBhMjEgLSBhMTEgKiBhMjA7XG4gIG91dFs3XSA9IGEwMSAqIGEyMCAtIGEwMCAqIGEyMTtcbiAgb3V0WzhdID0gYTAwICogYTExIC0gYTAxICogYTEwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluYW50KGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXTtcbiAgdmFyIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XTtcbiAgdmFyIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XTtcbiAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXTtcbiAgdmFyIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XTtcbiAgdmFyIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XTtcbiAgdmFyIGIwMCA9IGJbMF0sXG4gICAgICBiMDEgPSBiWzFdLFxuICAgICAgYjAyID0gYlsyXTtcbiAgdmFyIGIxMCA9IGJbM10sXG4gICAgICBiMTEgPSBiWzRdLFxuICAgICAgYjEyID0gYls1XTtcbiAgdmFyIGIyMCA9IGJbNl0sXG4gICAgICBiMjEgPSBiWzddLFxuICAgICAgYjIyID0gYls4XTtcbiAgb3V0WzBdID0gYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwO1xuICBvdXRbMV0gPSBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjE7XG4gIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcbiAgb3V0WzNdID0gYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwO1xuICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XG4gIG91dFs1XSA9IGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMjtcbiAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xuICBvdXRbN10gPSBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjE7XG4gIG91dFs4XSA9IGIyMCAqIGEwMiArIGIyMSAqIGExMiArIGIyMiAqIGEyMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2xhdGUgYSBtYXQzIGJ5IHRoZSBnaXZlbiB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB2ZWN0b3IgdG8gdHJhbnNsYXRlIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUob3V0LCBhLCB2KSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV0sXG4gICAgICBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF0sXG4gICAgICB4ID0gdlswXSxcbiAgICAgIHkgPSB2WzFdO1xuICBvdXRbMF0gPSBhMDA7XG4gIG91dFsxXSA9IGEwMTtcbiAgb3V0WzJdID0gYTAyO1xuICBvdXRbM10gPSBhMTA7XG4gIG91dFs0XSA9IGExMTtcbiAgb3V0WzVdID0gYTEyO1xuICBvdXRbNl0gPSB4ICogYTAwICsgeSAqIGExMCArIGEyMDtcbiAgb3V0WzddID0geCAqIGEwMSArIHkgKiBhMTEgKyBhMjE7XG4gIG91dFs4XSA9IHggKiBhMDIgKyB5ICogYTEyICsgYTIyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIHJhZCkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdLFxuICAgICAgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdLFxuICAgICAgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XG4gIG91dFsxXSA9IGMgKiBhMDEgKyBzICogYTExO1xuICBvdXRbMl0gPSBjICogYTAyICsgcyAqIGExMjtcbiAgb3V0WzNdID0gYyAqIGExMCAtIHMgKiBhMDA7XG4gIG91dFs0XSA9IGMgKiBhMTEgLSBzICogYTAxO1xuICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcbiAgb3V0WzZdID0gYTIwO1xuICBvdXRbN10gPSBhMjE7XG4gIG91dFs4XSA9IGEyMjtcbiAgcmV0dXJuIG91dDtcbn1cbjtcbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDMgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCB2KSB7XG4gIHZhciB4ID0gdlswXSxcbiAgICAgIHkgPSB2WzFdO1xuICBvdXRbMF0gPSB4ICogYVswXTtcbiAgb3V0WzFdID0geCAqIGFbMV07XG4gIG91dFsyXSA9IHggKiBhWzJdO1xuICBvdXRbM10gPSB5ICogYVszXTtcbiAgb3V0WzRdID0geSAqIGFbNF07XG4gIG91dFs1XSA9IHkgKiBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDMuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQzLnRyYW5zbGF0ZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjMn0gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21UcmFuc2xhdGlvbihvdXQsIHYpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMTtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gdlswXTtcbiAgb3V0WzddID0gdlsxXTtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBnaXZlbiBhbmdsZVxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDMuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQzLnJvdGF0ZShkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IHM7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IC1zO1xuICBvdXRbNF0gPSBjO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciBzY2FsaW5nXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0My5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDMuc2NhbGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB2WzFdO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcGllcyB0aGUgdmFsdWVzIGZyb20gYSBtYXQyZCBpbnRvIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY29weVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21NYXQyZChvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gYVsyXTtcbiAgb3V0WzRdID0gYVszXTtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gYVs0XTtcbiAgb3V0WzddID0gYVs1XTtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21RdWF0KG91dCwgcSkge1xuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHl4ID0geSAqIHgyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB6eCA9IHogKiB4MjtcbiAgdmFyIHp5ID0geiAqIHkyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICBvdXRbM10gPSB5eCAtIHd6O1xuICBvdXRbNl0gPSB6eCArIHd5O1xuICBvdXRbMV0gPSB5eCArIHd6O1xuICBvdXRbNF0gPSAxIC0geHggLSB6ejtcbiAgb3V0WzddID0genkgLSB3eDtcbiAgb3V0WzJdID0genggLSB3eTtcbiAgb3V0WzVdID0genkgKyB3eDtcbiAgb3V0WzhdID0gMSAtIHh4IC0geXk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuKiBDYWxjdWxhdGVzIGEgM3gzIG5vcm1hbCBtYXRyaXggKHRyYW5zcG9zZSBpbnZlcnNlKSBmcm9tIHRoZSA0eDQgbWF0cml4XHJcbipcclxuKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiogQHBhcmFtIHttYXQ0fSBhIE1hdDQgdG8gZGVyaXZlIHRoZSBub3JtYWwgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbEZyb21NYXQ0KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTtcbiAgdmFyIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcbiAgdmFyIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcbiAgdmFyIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcbiAgdmFyIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcbiAgdmFyIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcbiAgdmFyIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcbiAgdmFyIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcbiAgdmFyIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcbiAgdmFyIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcbiAgdmFyIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcbiAgdmFyIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcbiAgdmFyIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHZhciBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFsxXSA9IChhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcpICogZGV0O1xuICBvdXRbMl0gPSAoYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2KSAqIGRldDtcbiAgb3V0WzNdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFs0XSA9IChhMDAgKiBiMTEgLSBhMDIgKiBiMDggKyBhMDMgKiBiMDcpICogZGV0O1xuICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcbiAgb3V0WzZdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XG4gIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xuICBvdXRbOF0gPSAoYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwKSAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSAyRCBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggV2lkdGggb2YgeW91ciBnbCBjb250ZXh0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgSGVpZ2h0IG9mIGdsIGNvbnRleHRcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2plY3Rpb24ob3V0LCB3aWR0aCwgaGVpZ2h0KSB7XG4gIG91dFswXSA9IDIgLyB3aWR0aDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gLTIgLyBoZWlnaHQ7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IC0xO1xuICBvdXRbN10gPSAxO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdtYXQzKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcsICcgKyBhWzZdICsgJywgJyArIGFbN10gKyAnLCAnICsgYVs4XSArICcpJztcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9iKGEpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhhWzBdLCAyKSArIE1hdGgucG93KGFbMV0sIDIpICsgTWF0aC5wb3coYVsyXSwgMikgKyBNYXRoLnBvdyhhWzNdLCAyKSArIE1hdGgucG93KGFbNF0sIDIpICsgTWF0aC5wb3coYVs1XSwgMikgKyBNYXRoLnBvdyhhWzZdLCAyKSArIE1hdGgucG93KGFbN10sIDIpICsgTWF0aC5wb3coYVs4XSwgMikpO1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XTtcbiAgb3V0WzddID0gYVs3XSArIGJbN107XG4gIG91dFs4XSA9IGFbOF0gKyBiWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyBtYXRyaXggYiBmcm9tIG1hdHJpeCBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIG91dFs0XSA9IGFbNF0gLSBiWzRdO1xuICBvdXRbNV0gPSBhWzVdIC0gYls1XTtcbiAgb3V0WzZdID0gYVs2XSAtIGJbNl07XG4gIG91dFs3XSA9IGFbN10gLSBiWzddO1xuICBvdXRbOF0gPSBhWzhdIC0gYls4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgdGhlIG1hdHJpeCBieSBhIHNjYWxhci5cclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBtYXRyaXgncyBlbGVtZW50cyBieVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICBvdXRbNF0gPSBhWzRdICogYjtcbiAgb3V0WzVdID0gYVs1XSAqIGI7XG4gIG91dFs2XSA9IGFbNl0gKiBiO1xuICBvdXRbN10gPSBhWzddICogYjtcbiAgb3V0WzhdID0gYVs4XSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MydzIGFmdGVyIG11bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIncyBlbGVtZW50cyBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhckFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIG91dFszXSA9IGFbM10gKyBiWzNdICogc2NhbGU7XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdICogc2NhbGU7XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdICogc2NhbGU7XG4gIG91dFs2XSA9IGFbNl0gKyBiWzZdICogc2NhbGU7XG4gIG91dFs3XSA9IGFbN10gKyBiWzddICogc2NhbGU7XG4gIG91dFs4XSA9IGFbOF0gKyBiWzhdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQzfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXSAmJiBhWzRdID09PSBiWzRdICYmIGFbNV0gPT09IGJbNV0gJiYgYVs2XSA9PT0gYls2XSAmJiBhWzddID09PSBiWzddICYmIGFbOF0gPT09IGJbOF07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQzfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XSxcbiAgICAgIGE2ID0gYVs2XSxcbiAgICAgIGE3ID0gYVs3XSxcbiAgICAgIGE4ID0gYVs4XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXSxcbiAgICAgIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XSxcbiAgICAgIGI2ID0gYls2XSxcbiAgICAgIGI3ID0gYls3XSxcbiAgICAgIGI4ID0gYls4XTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKSAmJiBNYXRoLmFicyhhNCAtIGI0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNCksIE1hdGguYWJzKGI0KSkgJiYgTWF0aC5hYnMoYTUgLSBiNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTUpLCBNYXRoLmFicyhiNSkpICYmIE1hdGguYWJzKGE2IC0gYjYpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE2KSwgTWF0aC5hYnMoYjYpKSAmJiBNYXRoLmFicyhhNyAtIGI3KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNyksIE1hdGguYWJzKGI3KSkgJiYgTWF0aC5hYnMoYTggLSBiOCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTgpLCBNYXRoLmFicyhiOCkpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0My5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0My5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0OyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDR4NCBNYXRyaXg8YnI+Rm9ybWF0OiBjb2x1bW4tbWFqb3IsIHdoZW4gdHlwZWQgb3V0IGl0IGxvb2tzIGxpa2Ugcm93LW1ham9yPGJyPlRoZSBtYXRyaWNlcyBhcmUgYmVpbmcgcG9zdCBtdWx0aXBsaWVkLlxyXG4gKiBAbW9kdWxlIG1hdDRcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDRcclxuICpcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgxNik7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gICAgb3V0WzRdID0gMDtcbiAgICBvdXRbNl0gPSAwO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0gMDtcbiAgICBvdXRbOV0gPSAwO1xuICAgIG91dFsxMV0gPSAwO1xuICAgIG91dFsxMl0gPSAwO1xuICAgIG91dFsxM10gPSAwO1xuICAgIG91dFsxNF0gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0NCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBhIG5ldyA0eDQgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMTYpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICBvdXRbOV0gPSBhWzldO1xuICBvdXRbMTBdID0gYVsxMF07XG4gIG91dFsxMV0gPSBhWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdO1xuICBvdXRbMTNdID0gYVsxM107XG4gIG91dFsxNF0gPSBhWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQ0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICBvdXRbOV0gPSBhWzldO1xuICBvdXRbMTBdID0gYVsxMF07XG4gIG91dFsxMV0gPSBhWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdO1xuICBvdXRbMTNdID0gYVsxM107XG4gIG91dFsxNF0gPSBhWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXQ0IHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMiBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAzIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDMgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA1KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEyIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDIgcG9zaXRpb24gKGluZGV4IDYpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTMgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggNylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMCBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA4KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIxIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDEgcG9zaXRpb24gKGluZGV4IDkpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjIgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjMgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzAgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMTIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzEgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMTMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzIgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzMgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTUpXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBBIG5ldyBtYXQ0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyhtMDAsIG0wMSwgbTAyLCBtMDMsIG0xMCwgbTExLCBtMTIsIG0xMywgbTIwLCBtMjEsIG0yMiwgbTIzLCBtMzAsIG0zMSwgbTMyLCBtMzMpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDE2KTtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0wMjtcbiAgb3V0WzNdID0gbTAzO1xuICBvdXRbNF0gPSBtMTA7XG4gIG91dFs1XSA9IG0xMTtcbiAgb3V0WzZdID0gbTEyO1xuICBvdXRbN10gPSBtMTM7XG4gIG91dFs4XSA9IG0yMDtcbiAgb3V0WzldID0gbTIxO1xuICBvdXRbMTBdID0gbTIyO1xuICBvdXRbMTFdID0gbTIzO1xuICBvdXRbMTJdID0gbTMwO1xuICBvdXRbMTNdID0gbTMxO1xuICBvdXRbMTRdID0gbTMyO1xuICBvdXRbMTVdID0gbTMzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIG1hdDQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMiBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAzIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDMgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA1KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEyIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDIgcG9zaXRpb24gKGluZGV4IDYpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTMgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggNylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMCBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA4KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIxIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDEgcG9zaXRpb24gKGluZGV4IDkpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjIgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjMgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzAgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMTIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzEgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMTMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzIgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzMgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTUpXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCBtMDAsIG0wMSwgbTAyLCBtMDMsIG0xMCwgbTExLCBtMTIsIG0xMywgbTIwLCBtMjEsIG0yMiwgbTIzLCBtMzAsIG0zMSwgbTMyLCBtMzMpIHtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0wMjtcbiAgb3V0WzNdID0gbTAzO1xuICBvdXRbNF0gPSBtMTA7XG4gIG91dFs1XSA9IG0xMTtcbiAgb3V0WzZdID0gbTEyO1xuICBvdXRbN10gPSBtMTM7XG4gIG91dFs4XSA9IG0yMDtcbiAgb3V0WzldID0gbTIxO1xuICBvdXRbMTBdID0gbTIyO1xuICBvdXRbMTFdID0gbTIzO1xuICBvdXRbMTJdID0gbTMwO1xuICBvdXRbMTNdID0gbTMxO1xuICBvdXRbMTRdID0gbTMyO1xuICBvdXRbMTVdID0gbTMzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIG1hdDQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDE7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAxO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKG91dCwgYSkge1xuICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXG4gIGlmIChvdXQgPT09IGEpIHtcbiAgICB2YXIgYTAxID0gYVsxXSxcbiAgICAgICAgYTAyID0gYVsyXSxcbiAgICAgICAgYTAzID0gYVszXTtcbiAgICB2YXIgYTEyID0gYVs2XSxcbiAgICAgICAgYTEzID0gYVs3XTtcbiAgICB2YXIgYTIzID0gYVsxMV07XG4gICAgb3V0WzFdID0gYVs0XTtcbiAgICBvdXRbMl0gPSBhWzhdO1xuICAgIG91dFszXSA9IGFbMTJdO1xuICAgIG91dFs0XSA9IGEwMTtcbiAgICBvdXRbNl0gPSBhWzldO1xuICAgIG91dFs3XSA9IGFbMTNdO1xuICAgIG91dFs4XSA9IGEwMjtcbiAgICBvdXRbOV0gPSBhMTI7XG4gICAgb3V0WzExXSA9IGFbMTRdO1xuICAgIG91dFsxMl0gPSBhMDM7XG4gICAgb3V0WzEzXSA9IGExMztcbiAgICBvdXRbMTRdID0gYTIzO1xuICB9IGVsc2Uge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVs0XTtcbiAgICBvdXRbMl0gPSBhWzhdO1xuICAgIG91dFszXSA9IGFbMTJdO1xuICAgIG91dFs0XSA9IGFbMV07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICBvdXRbNl0gPSBhWzldO1xuICAgIG91dFs3XSA9IGFbMTNdO1xuICAgIG91dFs4XSA9IGFbMl07XG4gICAgb3V0WzldID0gYVs2XTtcbiAgICBvdXRbMTBdID0gYVsxMF07XG4gICAgb3V0WzExXSA9IGFbMTRdO1xuICAgIG91dFsxMl0gPSBhWzNdO1xuICAgIG91dFsxM10gPSBhWzddO1xuICAgIG91dFsxNF0gPSBhWzExXTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEludmVydHMgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTtcbiAgdmFyIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcbiAgdmFyIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcbiAgdmFyIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcbiAgdmFyIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcbiAgdmFyIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcbiAgdmFyIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcbiAgdmFyIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcbiAgdmFyIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcbiAgdmFyIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcbiAgdmFyIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcbiAgdmFyIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcbiAgdmFyIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHZhciBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFsxXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xuICBvdXRbMl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcbiAgb3V0WzNdID0gKGEyMiAqIGIwNCAtIGEyMSAqIGIwNSAtIGEyMyAqIGIwMykgKiBkZXQ7XG4gIG91dFs0XSA9IChhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcpICogZGV0O1xuICBvdXRbNV0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcbiAgb3V0WzZdID0gKGEzMiAqIGIwMiAtIGEzMCAqIGIwNSAtIGEzMyAqIGIwMSkgKiBkZXQ7XG4gIG91dFs3XSA9IChhMjAgKiBiMDUgLSBhMjIgKiBiMDIgKyBhMjMgKiBiMDEpICogZGV0O1xuICBvdXRbOF0gPSAoYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2KSAqIGRldDtcbiAgb3V0WzldID0gKGEwMSAqIGIwOCAtIGEwMCAqIGIxMCAtIGEwMyAqIGIwNikgKiBkZXQ7XG4gIG91dFsxMF0gPSAoYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwKSAqIGRldDtcbiAgb3V0WzExXSA9IChhMjEgKiBiMDIgLSBhMjAgKiBiMDQgLSBhMjMgKiBiMDApICogZGV0O1xuICBvdXRbMTJdID0gKGExMSAqIGIwNyAtIGExMCAqIGIwOSAtIGExMiAqIGIwNikgKiBkZXQ7XG4gIG91dFsxM10gPSAoYTAwICogYjA5IC0gYTAxICogYjA3ICsgYTAyICogYjA2KSAqIGRldDtcbiAgb3V0WzE0XSA9IChhMzEgKiBiMDEgLSBhMzAgKiBiMDMgLSBhMzIgKiBiMDApICogZGV0O1xuICBvdXRbMTVdID0gKGEyMCAqIGIwMyAtIGEyMSAqIGIwMSArIGEyMiAqIGIwMCkgKiBkZXQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRqb2ludChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIG91dFswXSA9IGExMSAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgKyBhMzEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKTtcbiAgb3V0WzFdID0gLShhMDEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikpO1xuICBvdXRbMl0gPSBhMDEgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSAtIGExMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGExMyAtIGEwMyAqIGExMik7XG4gIG91dFszXSA9IC0oYTAxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTEgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcbiAgb3V0WzRdID0gLShhMTAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xuICBvdXRbNV0gPSBhMDAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMwICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMik7XG4gIG91dFs2XSA9IC0oYTAwICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcbiAgb3V0WzddID0gYTAwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpO1xuICBvdXRbOF0gPSBhMTAgKiAoYTIxICogYTMzIC0gYTIzICogYTMxKSAtIGEyMCAqIChhMTEgKiBhMzMgLSBhMTMgKiBhMzEpICsgYTMwICogKGExMSAqIGEyMyAtIGExMyAqIGEyMSk7XG4gIG91dFs5XSA9IC0oYTAwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjMgLSBhMDMgKiBhMjEpKTtcbiAgb3V0WzEwXSA9IGEwMCAqIChhMTEgKiBhMzMgLSBhMTMgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMyAtIGEwMyAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKTtcbiAgb3V0WzExXSA9IC0oYTAwICogKGExMSAqIGEyMyAtIGExMyAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcbiAgb3V0WzEyXSA9IC0oYTEwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMyIC0gYTEyICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpKTtcbiAgb3V0WzEzXSA9IGEwMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIyIC0gYTAyICogYTIxKTtcbiAgb3V0WzE0XSA9IC0oYTAwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpKTtcbiAgb3V0WzE1XSA9IGEwMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmFudChhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdO1xuICB2YXIgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xuICB2YXIgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xuICB2YXIgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xuICB2YXIgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xuICB2YXIgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xuICB2YXIgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xuICB2YXIgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xuICB2YXIgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xuICB2YXIgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xuICB2YXIgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xuICB2YXIgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xuICB2YXIgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyOyAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG5cbiAgcmV0dXJuIGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ0c1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdOyAvLyBDYWNoZSBvbmx5IHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIHNlY29uZCBtYXRyaXhcblxuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICBvdXRbMF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzFdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFsyXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbM10gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgYjAgPSBiWzRdO1xuICBiMSA9IGJbNV07XG4gIGIyID0gYls2XTtcbiAgYjMgPSBiWzddO1xuICBvdXRbNF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzVdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFs2XSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbN10gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgYjAgPSBiWzhdO1xuICBiMSA9IGJbOV07XG4gIGIyID0gYlsxMF07XG4gIGIzID0gYlsxMV07XG4gIG91dFs4XSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICBvdXRbOV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgb3V0WzEwXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbMTFdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIGIwID0gYlsxMl07XG4gIGIxID0gYlsxM107XG4gIGIyID0gYlsxNF07XG4gIGIzID0gYlsxNV07XG4gIG91dFsxMl0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzEzXSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbMTRdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gIG91dFsxNV0gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2xhdGUgYSBtYXQ0IGJ5IHRoZSBnaXZlbiB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gdiB2ZWN0b3IgdG8gdHJhbnNsYXRlIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUob3V0LCBhLCB2KSB7XG4gIHZhciB4ID0gdlswXSxcbiAgICAgIHkgPSB2WzFdLFxuICAgICAgeiA9IHZbMl07XG4gIHZhciBhMDAsIGEwMSwgYTAyLCBhMDM7XG4gIHZhciBhMTAsIGExMSwgYTEyLCBhMTM7XG4gIHZhciBhMjAsIGEyMSwgYTIyLCBhMjM7XG5cbiAgaWYgKGEgPT09IG91dCkge1xuICAgIG91dFsxMl0gPSBhWzBdICogeCArIGFbNF0gKiB5ICsgYVs4XSAqIHogKyBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxXSAqIHggKyBhWzVdICogeSArIGFbOV0gKiB6ICsgYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMl0gKiB4ICsgYVs2XSAqIHkgKyBhWzEwXSAqIHogKyBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVszXSAqIHggKyBhWzddICogeSArIGFbMTFdICogeiArIGFbMTVdO1xuICB9IGVsc2Uge1xuICAgIGEwMCA9IGFbMF07XG4gICAgYTAxID0gYVsxXTtcbiAgICBhMDIgPSBhWzJdO1xuICAgIGEwMyA9IGFbM107XG4gICAgYTEwID0gYVs0XTtcbiAgICBhMTEgPSBhWzVdO1xuICAgIGExMiA9IGFbNl07XG4gICAgYTEzID0gYVs3XTtcbiAgICBhMjAgPSBhWzhdO1xuICAgIGEyMSA9IGFbOV07XG4gICAgYTIyID0gYVsxMF07XG4gICAgYTIzID0gYVsxMV07XG4gICAgb3V0WzBdID0gYTAwO1xuICAgIG91dFsxXSA9IGEwMTtcbiAgICBvdXRbMl0gPSBhMDI7XG4gICAgb3V0WzNdID0gYTAzO1xuICAgIG91dFs0XSA9IGExMDtcbiAgICBvdXRbNV0gPSBhMTE7XG4gICAgb3V0WzZdID0gYTEyO1xuICAgIG91dFs3XSA9IGExMztcbiAgICBvdXRbOF0gPSBhMjA7XG4gICAgb3V0WzldID0gYTIxO1xuICAgIG91dFsxMF0gPSBhMjI7XG4gICAgb3V0WzExXSA9IGEyMztcbiAgICBvdXRbMTJdID0gYTAwICogeCArIGExMCAqIHkgKyBhMjAgKiB6ICsgYVsxMl07XG4gICAgb3V0WzEzXSA9IGEwMSAqIHggKyBhMTEgKiB5ICsgYTIxICogeiArIGFbMTNdO1xuICAgIG91dFsxNF0gPSBhMDIgKiB4ICsgYTEyICogeSArIGEyMiAqIHogKyBhWzE0XTtcbiAgICBvdXRbMTVdID0gYTAzICogeCArIGExMyAqIHkgKyBhMjMgKiB6ICsgYVsxNV07XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0NCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMyBub3QgdXNpbmcgdmVjdG9yaXphdGlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdGhlIHZlYzMgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICB2YXIgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXSxcbiAgICAgIHogPSB2WzJdO1xuICBvdXRbMF0gPSBhWzBdICogeDtcbiAgb3V0WzFdID0gYVsxXSAqIHg7XG4gIG91dFsyXSA9IGFbMl0gKiB4O1xuICBvdXRbM10gPSBhWzNdICogeDtcbiAgb3V0WzRdID0gYVs0XSAqIHk7XG4gIG91dFs1XSA9IGFbNV0gKiB5O1xuICBvdXRbNl0gPSBhWzZdICogeTtcbiAgb3V0WzddID0gYVs3XSAqIHk7XG4gIG91dFs4XSA9IGFbOF0gKiB6O1xuICBvdXRbOV0gPSBhWzldICogejtcbiAgb3V0WzEwXSA9IGFbMTBdICogejtcbiAgb3V0WzExXSA9IGFbMTFdICogejtcbiAgb3V0WzEyXSA9IGFbMTJdO1xuICBvdXRbMTNdID0gYVsxM107XG4gIG91dFsxNF0gPSBhWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQ0IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIGdpdmVuIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCByYWQsIGF4aXMpIHtcbiAgdmFyIHggPSBheGlzWzBdLFxuICAgICAgeSA9IGF4aXNbMV0sXG4gICAgICB6ID0gYXhpc1syXTtcbiAgdmFyIGxlbiA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xuICB2YXIgcywgYywgdDtcbiAgdmFyIGEwMCwgYTAxLCBhMDIsIGEwMztcbiAgdmFyIGExMCwgYTExLCBhMTIsIGExMztcbiAgdmFyIGEyMCwgYTIxLCBhMjIsIGEyMztcbiAgdmFyIGIwMCwgYjAxLCBiMDI7XG4gIHZhciBiMTAsIGIxMSwgYjEyO1xuICB2YXIgYjIwLCBiMjEsIGIyMjtcblxuICBpZiAobGVuIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGVuID0gMSAvIGxlbjtcbiAgeCAqPSBsZW47XG4gIHkgKj0gbGVuO1xuICB6ICo9IGxlbjtcbiAgcyA9IE1hdGguc2luKHJhZCk7XG4gIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB0ID0gMSAtIGM7XG4gIGEwMCA9IGFbMF07XG4gIGEwMSA9IGFbMV07XG4gIGEwMiA9IGFbMl07XG4gIGEwMyA9IGFbM107XG4gIGExMCA9IGFbNF07XG4gIGExMSA9IGFbNV07XG4gIGExMiA9IGFbNl07XG4gIGExMyA9IGFbN107XG4gIGEyMCA9IGFbOF07XG4gIGEyMSA9IGFbOV07XG4gIGEyMiA9IGFbMTBdO1xuICBhMjMgPSBhWzExXTsgLy8gQ29uc3RydWN0IHRoZSBlbGVtZW50cyBvZiB0aGUgcm90YXRpb24gbWF0cml4XG5cbiAgYjAwID0geCAqIHggKiB0ICsgYztcbiAgYjAxID0geSAqIHggKiB0ICsgeiAqIHM7XG4gIGIwMiA9IHogKiB4ICogdCAtIHkgKiBzO1xuICBiMTAgPSB4ICogeSAqIHQgLSB6ICogcztcbiAgYjExID0geSAqIHkgKiB0ICsgYztcbiAgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XG4gIGIyMCA9IHggKiB6ICogdCArIHkgKiBzO1xuICBiMjEgPSB5ICogeiAqIHQgLSB4ICogcztcbiAgYjIyID0geiAqIHogKiB0ICsgYzsgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XG4gIG91dFsxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcbiAgb3V0WzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xuICBvdXRbM10gPSBhMDMgKiBiMDAgKyBhMTMgKiBiMDEgKyBhMjMgKiBiMDI7XG4gIG91dFs0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcbiAgb3V0WzVdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xuICBvdXRbNl0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XG4gIG91dFs3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcbiAgb3V0WzhdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xuICBvdXRbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XG4gIG91dFsxMF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XG4gIG91dFsxMV0gPSBhMDMgKiBiMjAgKyBhMTMgKiBiMjEgKyBhMjMgKiBiMjI7XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFggYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVgob3V0LCBhLCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIHZhciBhMTAgPSBhWzRdO1xuICB2YXIgYTExID0gYVs1XTtcbiAgdmFyIGExMiA9IGFbNl07XG4gIHZhciBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XTtcbiAgdmFyIGEyMSA9IGFbOV07XG4gIHZhciBhMjIgPSBhWzEwXTtcbiAgdmFyIGEyMyA9IGFbMTFdO1xuXG4gIGlmIChhICE9PSBvdXQpIHtcbiAgICAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCByb3dzXG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH0gLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG5cbiAgb3V0WzRdID0gYTEwICogYyArIGEyMCAqIHM7XG4gIG91dFs1XSA9IGExMSAqIGMgKyBhMjEgKiBzO1xuICBvdXRbNl0gPSBhMTIgKiBjICsgYTIyICogcztcbiAgb3V0WzddID0gYTEzICogYyArIGEyMyAqIHM7XG4gIG91dFs4XSA9IGEyMCAqIGMgLSBhMTAgKiBzO1xuICBvdXRbOV0gPSBhMjEgKiBjIC0gYTExICogcztcbiAgb3V0WzEwXSA9IGEyMiAqIGMgLSBhMTIgKiBzO1xuICBvdXRbMTFdID0gYTIzICogYyAtIGExMyAqIHM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVZKG91dCwgYSwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYTAwID0gYVswXTtcbiAgdmFyIGEwMSA9IGFbMV07XG4gIHZhciBhMDIgPSBhWzJdO1xuICB2YXIgYTAzID0gYVszXTtcbiAgdmFyIGEyMCA9IGFbOF07XG4gIHZhciBhMjEgPSBhWzldO1xuICB2YXIgYTIyID0gYVsxMF07XG4gIHZhciBhMjMgPSBhWzExXTtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICBvdXRbNl0gPSBhWzZdO1xuICAgIG91dFs3XSA9IGFbN107XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuXG4gIG91dFswXSA9IGEwMCAqIGMgLSBhMjAgKiBzO1xuICBvdXRbMV0gPSBhMDEgKiBjIC0gYTIxICogcztcbiAgb3V0WzJdID0gYTAyICogYyAtIGEyMiAqIHM7XG4gIG91dFszXSA9IGEwMyAqIGMgLSBhMjMgKiBzO1xuICBvdXRbOF0gPSBhMDAgKiBzICsgYTIwICogYztcbiAgb3V0WzldID0gYTAxICogcyArIGEyMSAqIGM7XG4gIG91dFsxMF0gPSBhMDIgKiBzICsgYTIyICogYztcbiAgb3V0WzExXSA9IGEwMyAqIHMgKyBhMjMgKiBjO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGEwMCA9IGFbMF07XG4gIHZhciBhMDEgPSBhWzFdO1xuICB2YXIgYTAyID0gYVsyXTtcbiAgdmFyIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdO1xuICB2YXIgYTExID0gYVs1XTtcbiAgdmFyIGExMiA9IGFbNl07XG4gIHZhciBhMTMgPSBhWzddO1xuXG4gIGlmIChhICE9PSBvdXQpIHtcbiAgICAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xuICAgIG91dFs4XSA9IGFbOF07XG4gICAgb3V0WzldID0gYVs5XTtcbiAgICBvdXRbMTBdID0gYVsxMF07XG4gICAgb3V0WzExXSA9IGFbMTFdO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfSAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cblxuICBvdXRbMF0gPSBhMDAgKiBjICsgYTEwICogcztcbiAgb3V0WzFdID0gYTAxICogYyArIGExMSAqIHM7XG4gIG91dFsyXSA9IGEwMiAqIGMgKyBhMTIgKiBzO1xuICBvdXRbM10gPSBhMDMgKiBjICsgYTEzICogcztcbiAgb3V0WzRdID0gYTEwICogYyAtIGEwMCAqIHM7XG4gIG91dFs1XSA9IGExMSAqIGMgLSBhMDEgKiBzO1xuICBvdXRbNl0gPSBhMTIgKiBjIC0gYTAyICogcztcbiAgb3V0WzddID0gYTEzICogYyAtIGEwMyAqIHM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVRyYW5zbGF0aW9uKG91dCwgdikge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSB2WzBdO1xuICBvdXRbMTNdID0gdlsxXTtcbiAgb3V0WzE0XSA9IHZbMl07XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciBzY2FsaW5nXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQuc2NhbGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSB2WzFdO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gdlsyXTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIGdpdmVuIGFuZ2xlIGFyb3VuZCBhIGdpdmVuIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGUoZGVzdCwgZGVzdCwgcmFkLCBheGlzKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcmFkLCBheGlzKSB7XG4gIHZhciB4ID0gYXhpc1swXSxcbiAgICAgIHkgPSBheGlzWzFdLFxuICAgICAgeiA9IGF4aXNbMl07XG4gIHZhciBsZW4gPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcbiAgdmFyIHMsIGMsIHQ7XG5cbiAgaWYgKGxlbiA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxlbiA9IDEgLyBsZW47XG4gIHggKj0gbGVuO1xuICB5ICo9IGxlbjtcbiAgeiAqPSBsZW47XG4gIHMgPSBNYXRoLnNpbihyYWQpO1xuICBjID0gTWF0aC5jb3MocmFkKTtcbiAgdCA9IDEgLSBjOyAvLyBQZXJmb3JtIHJvdGF0aW9uLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IHggKiB4ICogdCArIGM7XG4gIG91dFsxXSA9IHkgKiB4ICogdCArIHogKiBzO1xuICBvdXRbMl0gPSB6ICogeCAqIHQgLSB5ICogcztcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geCAqIHkgKiB0IC0geiAqIHM7XG4gIG91dFs1XSA9IHkgKiB5ICogdCArIGM7XG4gIG91dFs2XSA9IHogKiB5ICogdCArIHggKiBzO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB4ICogeiAqIHQgKyB5ICogcztcbiAgb3V0WzldID0geSAqIHogKiB0IC0geCAqIHM7XG4gIG91dFsxMF0gPSB6ICogeiAqIHQgKyBjO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFggYXhpc1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnJvdGF0ZVgoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVhSb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTsgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IGM7XG4gIG91dFs2XSA9IHM7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IC1zO1xuICBvdXRbMTBdID0gYztcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBZIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGVZKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21ZUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAtcztcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gcztcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IGM7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWiBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlWihkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tWlJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpOyAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gcztcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gLXM7XG4gIG91dFs1XSA9IGM7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAxO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIHZlYyk7XHJcbiAqICAgICBsZXQgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIHEsIHYpIHtcbiAgLy8gUXVhdGVybmlvbiBtYXRoXG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeHkgPSB4ICogeTI7XG4gIHZhciB4eiA9IHggKiB6MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgeXogPSB5ICogejI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgb3V0WzBdID0gMSAtICh5eSArIHp6KTtcbiAgb3V0WzFdID0geHkgKyB3ejtcbiAgb3V0WzJdID0geHogLSB3eTtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geHkgLSB3ejtcbiAgb3V0WzVdID0gMSAtICh4eCArIHp6KTtcbiAgb3V0WzZdID0geXogKyB3eDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0geHogKyB3eTtcbiAgb3V0WzldID0geXogLSB3eDtcbiAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgZnJvbSBhIGR1YWwgcXVhdC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgTWF0cml4XHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVF1YXQyKG91dCwgYSkge1xuICB2YXIgdHJhbnNsYXRpb24gPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgdmFyIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXSxcbiAgICAgIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XTtcbiAgdmFyIG1hZ25pdHVkZSA9IGJ4ICogYnggKyBieSAqIGJ5ICsgYnogKiBieiArIGJ3ICogYnc7IC8vT25seSBzY2FsZSBpZiBpdCBtYWtlcyBzZW5zZVxuXG4gIGlmIChtYWduaXR1ZGUgPiAwKSB7XG4gICAgdHJhbnNsYXRpb25bMF0gPSAoYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSkgKiAyIC8gbWFnbml0dWRlO1xuICAgIHRyYW5zbGF0aW9uWzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMiAvIG1hZ25pdHVkZTtcbiAgICB0cmFuc2xhdGlvblsyXSA9IChheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4KSAqIDIgLyBtYWduaXR1ZGU7XG4gIH0gZWxzZSB7XG4gICAgdHJhbnNsYXRpb25bMF0gPSAoYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSkgKiAyO1xuICAgIHRyYW5zbGF0aW9uWzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMjtcbiAgICB0cmFuc2xhdGlvblsyXSA9IChheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4KSAqIDI7XG4gIH1cblxuICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIGEsIHRyYW5zbGF0aW9uKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3IgY29tcG9uZW50IG9mIGEgdHJhbnNmb3JtYXRpb25cclxuICogIG1hdHJpeC4gSWYgYSBtYXRyaXggaXMgYnVpbHQgd2l0aCBmcm9tUm90YXRpb25UcmFuc2xhdGlvbixcclxuICogIHRoZSByZXR1cm5lZCB2ZWN0b3Igd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgdHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqICBvcmlnaW5hbGx5IHN1cHBsaWVkLlxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXQgVmVjdG9yIHRvIHJlY2VpdmUgdHJhbnNsYXRpb24gY29tcG9uZW50XHJcbiAqIEBwYXJhbSAge21hdDR9IG1hdCBNYXRyaXggdG8gYmUgZGVjb21wb3NlZCAoaW5wdXQpXHJcbiAqIEByZXR1cm4ge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9uKG91dCwgbWF0KSB7XG4gIG91dFswXSA9IG1hdFsxMl07XG4gIG91dFsxXSA9IG1hdFsxM107XG4gIG91dFsyXSA9IG1hdFsxNF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgc2NhbGluZyBmYWN0b3IgY29tcG9uZW50IG9mIGEgdHJhbnNmb3JtYXRpb25cclxuICogIG1hdHJpeC4gSWYgYSBtYXRyaXggaXMgYnVpbHQgd2l0aCBmcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlXHJcbiAqICB3aXRoIGEgbm9ybWFsaXplZCBRdWF0ZXJuaW9uIHBhcmFtdGVyLCB0aGUgcmV0dXJuZWQgdmVjdG9yIHdpbGwgYmVcclxuICogIHRoZSBzYW1lIGFzIHRoZSBzY2FsaW5nIHZlY3RvclxyXG4gKiAgb3JpZ2luYWxseSBzdXBwbGllZC5cclxuICogQHBhcmFtICB7dmVjM30gb3V0IFZlY3RvciB0byByZWNlaXZlIHNjYWxpbmcgZmFjdG9yIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0gIHttYXQ0fSBtYXQgTWF0cml4IHRvIGJlIGRlY29tcG9zZWQgKGlucHV0KVxyXG4gKiBAcmV0dXJuIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsaW5nKG91dCwgbWF0KSB7XG4gIHZhciBtMTEgPSBtYXRbMF07XG4gIHZhciBtMTIgPSBtYXRbMV07XG4gIHZhciBtMTMgPSBtYXRbMl07XG4gIHZhciBtMjEgPSBtYXRbNF07XG4gIHZhciBtMjIgPSBtYXRbNV07XG4gIHZhciBtMjMgPSBtYXRbNl07XG4gIHZhciBtMzEgPSBtYXRbOF07XG4gIHZhciBtMzIgPSBtYXRbOV07XG4gIHZhciBtMzMgPSBtYXRbMTBdO1xuICBvdXRbMF0gPSBNYXRoLnNxcnQobTExICogbTExICsgbTEyICogbTEyICsgbTEzICogbTEzKTtcbiAgb3V0WzFdID0gTWF0aC5zcXJ0KG0yMSAqIG0yMSArIG0yMiAqIG0yMiArIG0yMyAqIG0yMyk7XG4gIG91dFsyXSA9IE1hdGguc3FydChtMzEgKiBtMzEgKyBtMzIgKiBtMzIgKyBtMzMgKiBtMzMpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBxdWF0ZXJuaW9uIHJlcHJlc2VudGluZyB0aGUgcm90YXRpb25hbCBjb21wb25lbnRcclxuICogIG9mIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBJZiBhIG1hdHJpeCBpcyBidWlsdCB3aXRoXHJcbiAqICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbiwgdGhlIHJldHVybmVkIHF1YXRlcm5pb24gd2lsbCBiZSB0aGVcclxuICogIHNhbWUgYXMgdGhlIHF1YXRlcm5pb24gb3JpZ2luYWxseSBzdXBwbGllZC5cclxuICogQHBhcmFtIHtxdWF0fSBvdXQgUXVhdGVybmlvbiB0byByZWNlaXZlIHRoZSByb3RhdGlvbiBjb21wb25lbnRcclxuICogQHBhcmFtIHttYXQ0fSBtYXQgTWF0cml4IHRvIGJlIGRlY29tcG9zZWQgKGlucHV0KVxyXG4gKiBAcmV0dXJuIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3RhdGlvbihvdXQsIG1hdCkge1xuICAvLyBBbGdvcml0aG0gdGFrZW4gZnJvbSBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvbWF0cml4VG9RdWF0ZXJuaW9uL2luZGV4Lmh0bVxuICB2YXIgdHJhY2UgPSBtYXRbMF0gKyBtYXRbNV0gKyBtYXRbMTBdO1xuICB2YXIgUyA9IDA7XG5cbiAgaWYgKHRyYWNlID4gMCkge1xuICAgIFMgPSBNYXRoLnNxcnQodHJhY2UgKyAxLjApICogMjtcbiAgICBvdXRbM10gPSAwLjI1ICogUztcbiAgICBvdXRbMF0gPSAobWF0WzZdIC0gbWF0WzldKSAvIFM7XG4gICAgb3V0WzFdID0gKG1hdFs4XSAtIG1hdFsyXSkgLyBTO1xuICAgIG91dFsyXSA9IChtYXRbMV0gLSBtYXRbNF0pIC8gUztcbiAgfSBlbHNlIGlmIChtYXRbMF0gPiBtYXRbNV0gJiYgbWF0WzBdID4gbWF0WzEwXSkge1xuICAgIFMgPSBNYXRoLnNxcnQoMS4wICsgbWF0WzBdIC0gbWF0WzVdIC0gbWF0WzEwXSkgKiAyO1xuICAgIG91dFszXSA9IChtYXRbNl0gLSBtYXRbOV0pIC8gUztcbiAgICBvdXRbMF0gPSAwLjI1ICogUztcbiAgICBvdXRbMV0gPSAobWF0WzFdICsgbWF0WzRdKSAvIFM7XG4gICAgb3V0WzJdID0gKG1hdFs4XSArIG1hdFsyXSkgLyBTO1xuICB9IGVsc2UgaWYgKG1hdFs1XSA+IG1hdFsxMF0pIHtcbiAgICBTID0gTWF0aC5zcXJ0KDEuMCArIG1hdFs1XSAtIG1hdFswXSAtIG1hdFsxMF0pICogMjtcbiAgICBvdXRbM10gPSAobWF0WzhdIC0gbWF0WzJdKSAvIFM7XG4gICAgb3V0WzBdID0gKG1hdFsxXSArIG1hdFs0XSkgLyBTO1xuICAgIG91dFsxXSA9IDAuMjUgKiBTO1xuICAgIG91dFsyXSA9IChtYXRbNl0gKyBtYXRbOV0pIC8gUztcbiAgfSBlbHNlIHtcbiAgICBTID0gTWF0aC5zcXJ0KDEuMCArIG1hdFsxMF0gLSBtYXRbMF0gLSBtYXRbNV0pICogMjtcbiAgICBvdXRbM10gPSAobWF0WzFdIC0gbWF0WzRdKSAvIFM7XG4gICAgb3V0WzBdID0gKG1hdFs4XSArIG1hdFsyXSkgLyBTO1xuICAgIG91dFsxXSA9IChtYXRbNl0gKyBtYXRbOV0pIC8gUztcbiAgICBvdXRbMl0gPSAwLjI1ICogUztcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiwgdmVjdG9yIHRyYW5zbGF0aW9uIGFuZCB2ZWN0b3Igc2NhbGVcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIGxldCBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0LnNjYWxlKGRlc3QsIHNjYWxlKVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gcyBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZShvdXQsIHEsIHYsIHMpIHtcbiAgLy8gUXVhdGVybmlvbiBtYXRoXG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeHkgPSB4ICogeTI7XG4gIHZhciB4eiA9IHggKiB6MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgeXogPSB5ICogejI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgdmFyIHN4ID0gc1swXTtcbiAgdmFyIHN5ID0gc1sxXTtcbiAgdmFyIHN6ID0gc1syXTtcbiAgb3V0WzBdID0gKDEgLSAoeXkgKyB6eikpICogc3g7XG4gIG91dFsxXSA9ICh4eSArIHd6KSAqIHN4O1xuICBvdXRbMl0gPSAoeHogLSB3eSkgKiBzeDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gKHh5IC0gd3opICogc3k7XG4gIG91dFs1XSA9ICgxIC0gKHh4ICsgenopKSAqIHN5O1xuICBvdXRbNl0gPSAoeXogKyB3eCkgKiBzeTtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gKHh6ICsgd3kpICogc3o7XG4gIG91dFs5XSA9ICh5eiAtIHd4KSAqIHN6O1xuICBvdXRbMTBdID0gKDEgLSAoeHggKyB5eSkpICogc3o7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uLCB2ZWN0b3IgdHJhbnNsYXRpb24gYW5kIHZlY3RvciBzY2FsZSwgcm90YXRpbmcgYW5kIHNjYWxpbmcgYXJvdW5kIHRoZSBnaXZlbiBvcmlnaW5cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIG9yaWdpbik7XHJcbiAqICAgICBsZXQgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5zY2FsZShkZXN0LCBzY2FsZSlcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIG5lZ2F0aXZlT3JpZ2luKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXQ0fSBxIFJvdGF0aW9uIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHt2ZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IHMgU2NhbGluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBvIFRoZSBvcmlnaW4gdmVjdG9yIGFyb3VuZCB3aGljaCB0byBzY2FsZSBhbmQgcm90YXRlXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlT3JpZ2luKG91dCwgcSwgdiwgcywgbykge1xuICAvLyBRdWF0ZXJuaW9uIG1hdGhcbiAgdmFyIHggPSBxWzBdLFxuICAgICAgeSA9IHFbMV0sXG4gICAgICB6ID0gcVsyXSxcbiAgICAgIHcgPSBxWzNdO1xuICB2YXIgeDIgPSB4ICsgeDtcbiAgdmFyIHkyID0geSArIHk7XG4gIHZhciB6MiA9IHogKyB6O1xuICB2YXIgeHggPSB4ICogeDI7XG4gIHZhciB4eSA9IHggKiB5MjtcbiAgdmFyIHh6ID0geCAqIHoyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB5eiA9IHkgKiB6MjtcbiAgdmFyIHp6ID0geiAqIHoyO1xuICB2YXIgd3ggPSB3ICogeDI7XG4gIHZhciB3eSA9IHcgKiB5MjtcbiAgdmFyIHd6ID0gdyAqIHoyO1xuICB2YXIgc3ggPSBzWzBdO1xuICB2YXIgc3kgPSBzWzFdO1xuICB2YXIgc3ogPSBzWzJdO1xuICB2YXIgb3ggPSBvWzBdO1xuICB2YXIgb3kgPSBvWzFdO1xuICB2YXIgb3ogPSBvWzJdO1xuICB2YXIgb3V0MCA9ICgxIC0gKHl5ICsgenopKSAqIHN4O1xuICB2YXIgb3V0MSA9ICh4eSArIHd6KSAqIHN4O1xuICB2YXIgb3V0MiA9ICh4eiAtIHd5KSAqIHN4O1xuICB2YXIgb3V0NCA9ICh4eSAtIHd6KSAqIHN5O1xuICB2YXIgb3V0NSA9ICgxIC0gKHh4ICsgenopKSAqIHN5O1xuICB2YXIgb3V0NiA9ICh5eiArIHd4KSAqIHN5O1xuICB2YXIgb3V0OCA9ICh4eiArIHd5KSAqIHN6O1xuICB2YXIgb3V0OSA9ICh5eiAtIHd4KSAqIHN6O1xuICB2YXIgb3V0MTAgPSAoMSAtICh4eCArIHl5KSkgKiBzejtcbiAgb3V0WzBdID0gb3V0MDtcbiAgb3V0WzFdID0gb3V0MTtcbiAgb3V0WzJdID0gb3V0MjtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gb3V0NDtcbiAgb3V0WzVdID0gb3V0NTtcbiAgb3V0WzZdID0gb3V0NjtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gb3V0ODtcbiAgb3V0WzldID0gb3V0OTtcbiAgb3V0WzEwXSA9IG91dDEwO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IHZbMF0gKyBveCAtIChvdXQwICogb3ggKyBvdXQ0ICogb3kgKyBvdXQ4ICogb3opO1xuICBvdXRbMTNdID0gdlsxXSArIG95IC0gKG91dDEgKiBveCArIG91dDUgKiBveSArIG91dDkgKiBveik7XG4gIG91dFsxNF0gPSB2WzJdICsgb3ogLSAob3V0MiAqIG94ICsgb3V0NiAqIG95ICsgb3V0MTAgKiBveik7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYSA0eDQgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuICpcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21RdWF0KG91dCwgcSkge1xuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHl4ID0geSAqIHgyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB6eCA9IHogKiB4MjtcbiAgdmFyIHp5ID0geiAqIHkyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICBvdXRbMV0gPSB5eCArIHd6O1xuICBvdXRbMl0gPSB6eCAtIHd5O1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB5eCAtIHd6O1xuICBvdXRbNV0gPSAxIC0geHggLSB6ejtcbiAgb3V0WzZdID0genkgKyB3eDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0genggKyB3eTtcbiAgb3V0WzldID0genkgLSB3eDtcbiAgb3V0WzEwXSA9IDEgLSB4eCAtIHl5O1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgZnJ1c3R1bSBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtOdW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJ1c3R1bShvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XG4gIHZhciBybCA9IDEgLyAocmlnaHQgLSBsZWZ0KTtcbiAgdmFyIHRiID0gMSAvICh0b3AgLSBib3R0b20pO1xuICB2YXIgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICBvdXRbMF0gPSBuZWFyICogMiAqIHJsO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSBuZWFyICogMiAqIHRiO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xuICBvdXRbOV0gPSAodG9wICsgYm90dG9tKSAqIHRiO1xuICBvdXRbMTBdID0gKGZhciArIG5lYXIpICogbmY7XG4gIG91dFsxMV0gPSAtMTtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gZmFyICogbmVhciAqIDIgKiBuZjtcbiAgb3V0WzE1XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLlxyXG4gKiBQYXNzaW5nIG51bGwvdW5kZWZpbmVkL25vIHZhbHVlIGZvciBmYXIgd2lsbCBnZW5lcmF0ZSBpbmZpbml0ZSBwcm9qZWN0aW9uIG1hdHJpeC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gZm92eSBWZXJ0aWNhbCBmaWVsZCBvZiB2aWV3IGluIHJhZGlhbnNcclxuICogQHBhcmFtIHtudW1iZXJ9IGFzcGVjdCBBc3BlY3QgcmF0aW8uIHR5cGljYWxseSB2aWV3cG9ydCB3aWR0aC9oZWlnaHRcclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bSwgY2FuIGJlIG51bGwgb3IgSW5maW5pdHlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcnNwZWN0aXZlKG91dCwgZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpIHtcbiAgdmFyIGYgPSAxLjAgLyBNYXRoLnRhbihmb3Z5IC8gMiksXG4gICAgICBuZjtcbiAgb3V0WzBdID0gZiAvIGFzcGVjdDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gZjtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzExXSA9IC0xO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNV0gPSAwO1xuXG4gIGlmIChmYXIgIT0gbnVsbCAmJiBmYXIgIT09IEluZmluaXR5KSB7XG4gICAgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgICBvdXRbMTRdID0gMiAqIGZhciAqIG5lYXIgKiBuZjtcbiAgfSBlbHNlIHtcbiAgICBvdXRbMTBdID0gLTE7XG4gICAgb3V0WzE0XSA9IC0yICogbmVhcjtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZmllbGQgb2Ygdmlldy5cclxuICogVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBnZW5lcmF0aW5nIHByb2plY3Rpb24gbWF0cmljZXMgdG8gYmUgdXNlZFxyXG4gKiB3aXRoIHRoZSBzdGlsbCBleHBlcmllbWVudGFsIFdlYlZSIEFQSS5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge09iamVjdH0gZm92IE9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiB1cERlZ3JlZXMsIGRvd25EZWdyZWVzLCBsZWZ0RGVncmVlcywgcmlnaHREZWdyZWVzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3KG91dCwgZm92LCBuZWFyLCBmYXIpIHtcbiAgdmFyIHVwVGFuID0gTWF0aC50YW4oZm92LnVwRGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7XG4gIHZhciBkb3duVGFuID0gTWF0aC50YW4oZm92LmRvd25EZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIGxlZnRUYW4gPSBNYXRoLnRhbihmb3YubGVmdERlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgcmlnaHRUYW4gPSBNYXRoLnRhbihmb3YucmlnaHREZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIHhTY2FsZSA9IDIuMCAvIChsZWZ0VGFuICsgcmlnaHRUYW4pO1xuICB2YXIgeVNjYWxlID0gMi4wIC8gKHVwVGFuICsgZG93blRhbik7XG4gIG91dFswXSA9IHhTY2FsZTtcbiAgb3V0WzFdID0gMC4wO1xuICBvdXRbMl0gPSAwLjA7XG4gIG91dFszXSA9IDAuMDtcbiAgb3V0WzRdID0gMC4wO1xuICBvdXRbNV0gPSB5U2NhbGU7XG4gIG91dFs2XSA9IDAuMDtcbiAgb3V0WzddID0gMC4wO1xuICBvdXRbOF0gPSAtKChsZWZ0VGFuIC0gcmlnaHRUYW4pICogeFNjYWxlICogMC41KTtcbiAgb3V0WzldID0gKHVwVGFuIC0gZG93blRhbikgKiB5U2NhbGUgKiAwLjU7XG4gIG91dFsxMF0gPSBmYXIgLyAobmVhciAtIGZhcik7XG4gIG91dFsxMV0gPSAtMS4wO1xuICBvdXRbMTJdID0gMC4wO1xuICBvdXRbMTNdID0gMC4wO1xuICBvdXRbMTRdID0gZmFyICogbmVhciAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzE1XSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBvcnRob2dvbmFsIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0IExlZnQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHJpZ2h0IFJpZ2h0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgVG9wIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG9ydGhvKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgdmFyIGxyID0gMSAvIChsZWZ0IC0gcmlnaHQpO1xuICB2YXIgYnQgPSAxIC8gKGJvdHRvbSAtIHRvcCk7XG4gIHZhciBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gIG91dFswXSA9IC0yICogbHI7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IC0yICogYnQ7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAyICogbmY7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gKGxlZnQgKyByaWdodCkgKiBscjtcbiAgb3V0WzEzXSA9ICh0b3AgKyBib3R0b20pICogYnQ7XG4gIG91dFsxNF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgbG9vay1hdCBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZXllIHBvc2l0aW9uLCBmb2NhbCBwb2ludCwgYW5kIHVwIGF4aXMuXHJcbiAqIElmIHlvdSB3YW50IGEgbWF0cml4IHRoYXQgYWN0dWFsbHkgbWFrZXMgYW4gb2JqZWN0IGxvb2sgYXQgYW5vdGhlciBvYmplY3QsIHlvdSBzaG91bGQgdXNlIHRhcmdldFRvIGluc3RlYWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHt2ZWMzfSBleWUgUG9zaXRpb24gb2YgdGhlIHZpZXdlclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICogQHBhcmFtIHt2ZWMzfSB1cCB2ZWMzIHBvaW50aW5nIHVwXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsb29rQXQob3V0LCBleWUsIGNlbnRlciwgdXApIHtcbiAgdmFyIHgwLCB4MSwgeDIsIHkwLCB5MSwgeTIsIHowLCB6MSwgejIsIGxlbjtcbiAgdmFyIGV5ZXggPSBleWVbMF07XG4gIHZhciBleWV5ID0gZXllWzFdO1xuICB2YXIgZXlleiA9IGV5ZVsyXTtcbiAgdmFyIHVweCA9IHVwWzBdO1xuICB2YXIgdXB5ID0gdXBbMV07XG4gIHZhciB1cHogPSB1cFsyXTtcbiAgdmFyIGNlbnRlcnggPSBjZW50ZXJbMF07XG4gIHZhciBjZW50ZXJ5ID0gY2VudGVyWzFdO1xuICB2YXIgY2VudGVyeiA9IGNlbnRlclsyXTtcblxuICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgZ2xNYXRyaXguRVBTSUxPTiAmJiBNYXRoLmFicyhleWV5IC0gY2VudGVyeSkgPCBnbE1hdHJpeC5FUFNJTE9OICYmIE1hdGguYWJzKGV5ZXogLSBjZW50ZXJ6KSA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gaWRlbnRpdHkob3V0KTtcbiAgfVxuXG4gIHowID0gZXlleCAtIGNlbnRlcng7XG4gIHoxID0gZXlleSAtIGNlbnRlcnk7XG4gIHoyID0gZXlleiAtIGNlbnRlcno7XG4gIGxlbiA9IDEgLyBNYXRoLnNxcnQoejAgKiB6MCArIHoxICogejEgKyB6MiAqIHoyKTtcbiAgejAgKj0gbGVuO1xuICB6MSAqPSBsZW47XG4gIHoyICo9IGxlbjtcbiAgeDAgPSB1cHkgKiB6MiAtIHVweiAqIHoxO1xuICB4MSA9IHVweiAqIHowIC0gdXB4ICogejI7XG4gIHgyID0gdXB4ICogejEgLSB1cHkgKiB6MDtcbiAgbGVuID0gTWF0aC5zcXJ0KHgwICogeDAgKyB4MSAqIHgxICsgeDIgKiB4Mik7XG5cbiAgaWYgKCFsZW4pIHtcbiAgICB4MCA9IDA7XG4gICAgeDEgPSAwO1xuICAgIHgyID0gMDtcbiAgfSBlbHNlIHtcbiAgICBsZW4gPSAxIC8gbGVuO1xuICAgIHgwICo9IGxlbjtcbiAgICB4MSAqPSBsZW47XG4gICAgeDIgKj0gbGVuO1xuICB9XG5cbiAgeTAgPSB6MSAqIHgyIC0gejIgKiB4MTtcbiAgeTEgPSB6MiAqIHgwIC0gejAgKiB4MjtcbiAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcbiAgbGVuID0gTWF0aC5zcXJ0KHkwICogeTAgKyB5MSAqIHkxICsgeTIgKiB5Mik7XG5cbiAgaWYgKCFsZW4pIHtcbiAgICB5MCA9IDA7XG4gICAgeTEgPSAwO1xuICAgIHkyID0gMDtcbiAgfSBlbHNlIHtcbiAgICBsZW4gPSAxIC8gbGVuO1xuICAgIHkwICo9IGxlbjtcbiAgICB5MSAqPSBsZW47XG4gICAgeTIgKj0gbGVuO1xuICB9XG5cbiAgb3V0WzBdID0geDA7XG4gIG91dFsxXSA9IHkwO1xuICBvdXRbMl0gPSB6MDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geDE7XG4gIG91dFs1XSA9IHkxO1xuICBvdXRbNl0gPSB6MTtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0geDI7XG4gIG91dFs5XSA9IHkyO1xuICBvdXRbMTBdID0gejI7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gLSh4MCAqIGV5ZXggKyB4MSAqIGV5ZXkgKyB4MiAqIGV5ZXopO1xuICBvdXRbMTNdID0gLSh5MCAqIGV5ZXggKyB5MSAqIGV5ZXkgKyB5MiAqIGV5ZXopO1xuICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBtYXRyaXggdGhhdCBtYWtlcyBzb21ldGhpbmcgbG9vayBhdCBzb21ldGhpbmcgZWxzZS5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGV5ZSBQb3NpdGlvbiBvZiB0aGUgdmlld2VyXHJcbiAqIEBwYXJhbSB7dmVjM30gY2VudGVyIFBvaW50IHRoZSB2aWV3ZXIgaXMgbG9va2luZyBhdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHVwIHZlYzMgcG9pbnRpbmcgdXBcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRvKG91dCwgZXllLCB0YXJnZXQsIHVwKSB7XG4gIHZhciBleWV4ID0gZXllWzBdLFxuICAgICAgZXlleSA9IGV5ZVsxXSxcbiAgICAgIGV5ZXogPSBleWVbMl0sXG4gICAgICB1cHggPSB1cFswXSxcbiAgICAgIHVweSA9IHVwWzFdLFxuICAgICAgdXB6ID0gdXBbMl07XG4gIHZhciB6MCA9IGV5ZXggLSB0YXJnZXRbMF0sXG4gICAgICB6MSA9IGV5ZXkgLSB0YXJnZXRbMV0sXG4gICAgICB6MiA9IGV5ZXogLSB0YXJnZXRbMl07XG4gIHZhciBsZW4gPSB6MCAqIHowICsgejEgKiB6MSArIHoyICogejI7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gICAgejAgKj0gbGVuO1xuICAgIHoxICo9IGxlbjtcbiAgICB6MiAqPSBsZW47XG4gIH1cblxuICB2YXIgeDAgPSB1cHkgKiB6MiAtIHVweiAqIHoxLFxuICAgICAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyLFxuICAgICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xuICBsZW4gPSB4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDI7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gICAgeDAgKj0gbGVuO1xuICAgIHgxICo9IGxlbjtcbiAgICB4MiAqPSBsZW47XG4gIH1cblxuICBvdXRbMF0gPSB4MDtcbiAgb3V0WzFdID0geDE7XG4gIG91dFsyXSA9IHgyO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB6MSAqIHgyIC0gejIgKiB4MTtcbiAgb3V0WzVdID0gejIgKiB4MCAtIHowICogeDI7XG4gIG91dFs2XSA9IHowICogeDEgLSB6MSAqIHgwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB6MDtcbiAgb3V0WzldID0gejE7XG4gIG91dFsxMF0gPSB6MjtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSBleWV4O1xuICBvdXRbMTNdID0gZXlleTtcbiAgb3V0WzE0XSA9IGV5ZXo7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuO1xuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdtYXQ0KCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcsICcgKyBhWzZdICsgJywgJyArIGFbN10gKyAnLCAnICsgYVs4XSArICcsICcgKyBhWzldICsgJywgJyArIGFbMTBdICsgJywgJyArIGFbMTFdICsgJywgJyArIGFbMTJdICsgJywgJyArIGFbMTNdICsgJywgJyArIGFbMTRdICsgJywgJyArIGFbMTVdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSArIE1hdGgucG93KGFbOV0sIDIpICsgTWF0aC5wb3coYVsxMF0sIDIpICsgTWF0aC5wb3coYVsxMV0sIDIpICsgTWF0aC5wb3coYVsxMl0sIDIpICsgTWF0aC5wb3coYVsxM10sIDIpICsgTWF0aC5wb3coYVsxNF0sIDIpICsgTWF0aC5wb3coYVsxNV0sIDIpKTtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQ0J3NcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl07XG4gIG91dFs3XSA9IGFbN10gKyBiWzddO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XTtcbiAgb3V0WzldID0gYVs5XSArIGJbOV07XG4gIG91dFsxMF0gPSBhWzEwXSArIGJbMTBdO1xuICBvdXRbMTFdID0gYVsxMV0gKyBiWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdICsgYlsxMl07XG4gIG91dFsxM10gPSBhWzEzXSArIGJbMTNdO1xuICBvdXRbMTRdID0gYVsxNF0gKyBiWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdICsgYlsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgb3V0WzRdID0gYVs0XSAtIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gLSBiWzVdO1xuICBvdXRbNl0gPSBhWzZdIC0gYls2XTtcbiAgb3V0WzddID0gYVs3XSAtIGJbN107XG4gIG91dFs4XSA9IGFbOF0gLSBiWzhdO1xuICBvdXRbOV0gPSBhWzldIC0gYls5XTtcbiAgb3V0WzEwXSA9IGFbMTBdIC0gYlsxMF07XG4gIG91dFsxMV0gPSBhWzExXSAtIGJbMTFdO1xuICBvdXRbMTJdID0gYVsxMl0gLSBiWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdIC0gYlsxM107XG4gIG91dFsxNF0gPSBhWzE0XSAtIGJbMTRdO1xuICBvdXRbMTVdID0gYVsxNV0gLSBiWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgdGhlIG1hdHJpeCBieSBhIHNjYWxhci5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBtYXRyaXgncyBlbGVtZW50cyBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICBvdXRbNF0gPSBhWzRdICogYjtcbiAgb3V0WzVdID0gYVs1XSAqIGI7XG4gIG91dFs2XSA9IGFbNl0gKiBiO1xuICBvdXRbN10gPSBhWzddICogYjtcbiAgb3V0WzhdID0gYVs4XSAqIGI7XG4gIG91dFs5XSA9IGFbOV0gKiBiO1xuICBvdXRbMTBdID0gYVsxMF0gKiBiO1xuICBvdXRbMTFdID0gYVsxMV0gKiBiO1xuICBvdXRbMTJdID0gYVsxMl0gKiBiO1xuICBvdXRbMTNdID0gYVsxM10gKiBiO1xuICBvdXRbMTRdID0gYVsxNF0gKiBiO1xuICBvdXRbMTVdID0gYVsxNV0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDQncyBhZnRlciBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiJ3MgZWxlbWVudHMgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXJBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XSAqIHNjYWxlO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XSAqIHNjYWxlO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XSAqIHNjYWxlO1xuICBvdXRbN10gPSBhWzddICsgYls3XSAqIHNjYWxlO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XSAqIHNjYWxlO1xuICBvdXRbOV0gPSBhWzldICsgYls5XSAqIHNjYWxlO1xuICBvdXRbMTBdID0gYVsxMF0gKyBiWzEwXSAqIHNjYWxlO1xuICBvdXRbMTFdID0gYVsxMV0gKyBiWzExXSAqIHNjYWxlO1xuICBvdXRbMTJdID0gYVsxMl0gKyBiWzEyXSAqIHNjYWxlO1xuICBvdXRbMTNdID0gYVsxM10gKyBiWzEzXSAqIHNjYWxlO1xuICBvdXRbMTRdID0gYVsxNF0gKyBiWzE0XSAqIHNjYWxlO1xuICBvdXRbMTVdID0gYVsxNV0gKyBiWzE1XSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM10gJiYgYVs0XSA9PT0gYls0XSAmJiBhWzVdID09PSBiWzVdICYmIGFbNl0gPT09IGJbNl0gJiYgYVs3XSA9PT0gYls3XSAmJiBhWzhdID09PSBiWzhdICYmIGFbOV0gPT09IGJbOV0gJiYgYVsxMF0gPT09IGJbMTBdICYmIGFbMTFdID09PSBiWzExXSAmJiBhWzEyXSA9PT0gYlsxMl0gJiYgYVsxM10gPT09IGJbMTNdICYmIGFbMTRdID09PSBiWzE0XSAmJiBhWzE1XSA9PT0gYlsxNV07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQ0fSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XSxcbiAgICAgIGE2ID0gYVs2XSxcbiAgICAgIGE3ID0gYVs3XTtcbiAgdmFyIGE4ID0gYVs4XSxcbiAgICAgIGE5ID0gYVs5XSxcbiAgICAgIGExMCA9IGFbMTBdLFxuICAgICAgYTExID0gYVsxMV07XG4gIHZhciBhMTIgPSBhWzEyXSxcbiAgICAgIGExMyA9IGFbMTNdLFxuICAgICAgYTE0ID0gYVsxNF0sXG4gICAgICBhMTUgPSBhWzE1XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgdmFyIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XSxcbiAgICAgIGI2ID0gYls2XSxcbiAgICAgIGI3ID0gYls3XTtcbiAgdmFyIGI4ID0gYls4XSxcbiAgICAgIGI5ID0gYls5XSxcbiAgICAgIGIxMCA9IGJbMTBdLFxuICAgICAgYjExID0gYlsxMV07XG4gIHZhciBiMTIgPSBiWzEyXSxcbiAgICAgIGIxMyA9IGJbMTNdLFxuICAgICAgYjE0ID0gYlsxNF0sXG4gICAgICBiMTUgPSBiWzE1XTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKSAmJiBNYXRoLmFicyhhNCAtIGI0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNCksIE1hdGguYWJzKGI0KSkgJiYgTWF0aC5hYnMoYTUgLSBiNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTUpLCBNYXRoLmFicyhiNSkpICYmIE1hdGguYWJzKGE2IC0gYjYpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE2KSwgTWF0aC5hYnMoYjYpKSAmJiBNYXRoLmFicyhhNyAtIGI3KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNyksIE1hdGguYWJzKGI3KSkgJiYgTWF0aC5hYnMoYTggLSBiOCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTgpLCBNYXRoLmFicyhiOCkpICYmIE1hdGguYWJzKGE5IC0gYjkpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE5KSwgTWF0aC5hYnMoYjkpKSAmJiBNYXRoLmFicyhhMTAgLSBiMTApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMCksIE1hdGguYWJzKGIxMCkpICYmIE1hdGguYWJzKGExMSAtIGIxMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTExKSwgTWF0aC5hYnMoYjExKSkgJiYgTWF0aC5hYnMoYTEyIC0gYjEyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTIpLCBNYXRoLmFicyhiMTIpKSAmJiBNYXRoLmFicyhhMTMgLSBiMTMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMyksIE1hdGguYWJzKGIxMykpICYmIE1hdGguYWJzKGExNCAtIGIxNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTE0KSwgTWF0aC5hYnMoYjE0KSkgJiYgTWF0aC5hYnMoYTE1IC0gYjE1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTUpLCBNYXRoLmFicyhiMTUpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAzIERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbW9kdWxlIHZlYzNcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWMzXHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMyBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoeCwgeSwgeikge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzMgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMyB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4LCB5LCB6KSB7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAqIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogRGl2aWRlcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAvIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5jZWlsIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNlaWxcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNlaWwob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguY2VpbChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5jZWlsKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmNlaWwoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5mbG9vciB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBmbG9vclxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvb3Iob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguZmxvb3IoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguZmxvb3IoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguZmxvb3IoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4ob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXgob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5yb3VuZCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byByb3VuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGgucm91bmQoYVswXSk7XG4gIG91dFsxXSA9IE1hdGgucm91bmQoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGgucm91bmQoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIGEgdmVjMyBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWREaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkTGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogejtcbn1cbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKG91dCwgYSkge1xuICBvdXRbMF0gPSAxLjAgLyBhWzBdO1xuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIGxlbiA9IHggKiB4ICsgeSAqIHkgKyB6ICogejtcblxuICBpZiAobGVuID4gMCkge1xuICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICB9XG5cbiAgb3V0WzBdID0gYVswXSAqIGxlbjtcbiAgb3V0WzFdID0gYVsxXSAqIGxlbjtcbiAgb3V0WzJdID0gYVsyXSAqIGxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdO1xufVxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyb3NzKG91dCwgYSwgYikge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdO1xuICB2YXIgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgYnogPSBiWzJdO1xuICBvdXRbMF0gPSBheSAqIGJ6IC0gYXogKiBieTtcbiAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XG4gIG91dFsyXSA9IGF4ICogYnkgLSBheSAqIGJ4O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAob3V0LCBhLCBiLCB0KSB7XG4gIHZhciBheCA9IGFbMF07XG4gIHZhciBheSA9IGFbMV07XG4gIHZhciBheiA9IGFbMl07XG4gIG91dFswXSA9IGF4ICsgdCAqIChiWzBdIC0gYXgpO1xuICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcbiAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBoZXJtaXRlIGludGVycG9sYXRpb24gd2l0aCB0d28gY29udHJvbCBwb2ludHNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBjIHRoZSB0aGlyZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gZCB0aGUgZm91cnRoIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGVybWl0ZShvdXQsIGEsIGIsIGMsIGQsIHQpIHtcbiAgdmFyIGZhY3RvclRpbWVzMiA9IHQgKiB0O1xuICB2YXIgZmFjdG9yMSA9IGZhY3RvclRpbWVzMiAqICgyICogdCAtIDMpICsgMTtcbiAgdmFyIGZhY3RvcjIgPSBmYWN0b3JUaW1lczIgKiAodCAtIDIpICsgdDtcbiAgdmFyIGZhY3RvcjMgPSBmYWN0b3JUaW1lczIgKiAodCAtIDEpO1xuICB2YXIgZmFjdG9yNCA9IGZhY3RvclRpbWVzMiAqICgzIC0gMiAqIHQpO1xuICBvdXRbMF0gPSBhWzBdICogZmFjdG9yMSArIGJbMF0gKiBmYWN0b3IyICsgY1swXSAqIGZhY3RvcjMgKyBkWzBdICogZmFjdG9yNDtcbiAgb3V0WzFdID0gYVsxXSAqIGZhY3RvcjEgKyBiWzFdICogZmFjdG9yMiArIGNbMV0gKiBmYWN0b3IzICsgZFsxXSAqIGZhY3RvcjQ7XG4gIG91dFsyXSA9IGFbMl0gKiBmYWN0b3IxICsgYlsyXSAqIGZhY3RvcjIgKyBjWzJdICogZmFjdG9yMyArIGRbMl0gKiBmYWN0b3I0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgYmV6aWVyIGludGVycG9sYXRpb24gd2l0aCB0d28gY29udHJvbCBwb2ludHNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBjIHRoZSB0aGlyZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gZCB0aGUgZm91cnRoIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYmV6aWVyKG91dCwgYSwgYiwgYywgZCwgdCkge1xuICB2YXIgaW52ZXJzZUZhY3RvciA9IDEgLSB0O1xuICB2YXIgaW52ZXJzZUZhY3RvclRpbWVzVHdvID0gaW52ZXJzZUZhY3RvciAqIGludmVyc2VGYWN0b3I7XG4gIHZhciBmYWN0b3JUaW1lczIgPSB0ICogdDtcbiAgdmFyIGZhY3RvcjEgPSBpbnZlcnNlRmFjdG9yVGltZXNUd28gKiBpbnZlcnNlRmFjdG9yO1xuICB2YXIgZmFjdG9yMiA9IDMgKiB0ICogaW52ZXJzZUZhY3RvclRpbWVzVHdvO1xuICB2YXIgZmFjdG9yMyA9IDMgKiBmYWN0b3JUaW1lczIgKiBpbnZlcnNlRmFjdG9yO1xuICB2YXIgZmFjdG9yNCA9IGZhY3RvclRpbWVzMiAqIHQ7XG4gIG91dFswXSA9IGFbMF0gKiBmYWN0b3IxICsgYlswXSAqIGZhY3RvcjIgKyBjWzBdICogZmFjdG9yMyArIGRbMF0gKiBmYWN0b3I0O1xuICBvdXRbMV0gPSBhWzFdICogZmFjdG9yMSArIGJbMV0gKiBmYWN0b3IyICsgY1sxXSAqIGZhY3RvcjMgKyBkWzFdICogZmFjdG9yNDtcbiAgb3V0WzJdID0gYVsyXSAqIGZhY3RvcjEgKyBiWzJdICogZmFjdG9yMiArIGNbMl0gKiBmYWN0b3IzICsgZFsyXSAqIGZhY3RvcjQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQsIHNjYWxlKSB7XG4gIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xuICB2YXIgciA9IGdsTWF0cml4LlJBTkRPTSgpICogMi4wICogTWF0aC5QSTtcbiAgdmFyIHogPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIuMCAtIDEuMDtcbiAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAgLSB6ICogeikgKiBzY2FsZTtcbiAgb3V0WzBdID0gTWF0aC5jb3MocikgKiB6U2NhbGU7XG4gIG91dFsxXSA9IE1hdGguc2luKHIpICogelNjYWxlO1xuICBvdXRbMl0gPSB6ICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgbWF0NC5cclxuICogNHRoIHZlY3RvciBjb21wb25lbnQgaXMgaW1wbGljaXRseSAnMSdcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07XG4gIHZhciB3ID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTFdICogeiArIG1bMTVdO1xuICB3ID0gdyB8fCAxLjA7XG4gIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xuICBvdXRbMV0gPSAobVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10pIC8gdztcbiAgb3V0WzJdID0gKG1bMl0gKiB4ICsgbVs2XSAqIHkgKyBtWzEwXSAqIHogKyBtWzE0XSkgLyB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDMob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07XG4gIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcbiAgb3V0WzFdID0geCAqIG1bMV0gKyB5ICogbVs0XSArIHogKiBtWzddO1xuICBvdXRbMl0gPSB4ICogbVsyXSArIHkgKiBtWzVdICsgeiAqIG1bOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKiBDYW4gYWxzbyBiZSB1c2VkIGZvciBkdWFsIHF1YXRlcm5pb25zLiAoTXVsdGlwbHkgaXQgd2l0aCB0aGUgcmVhbCBwYXJ0KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVF1YXQob3V0LCBhLCBxKSB7XG4gIC8vIGJlbmNobWFya3M6IGh0dHBzOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9ucy1maXhlZFxuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdO1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdOyAvLyB2YXIgcXZlYyA9IFtxeCwgcXksIHF6XTtcbiAgLy8gdmFyIHV2ID0gdmVjMy5jcm9zcyhbXSwgcXZlYywgYSk7XG5cbiAgdmFyIHV2eCA9IHF5ICogeiAtIHF6ICogeSxcbiAgICAgIHV2eSA9IHF6ICogeCAtIHF4ICogeixcbiAgICAgIHV2eiA9IHF4ICogeSAtIHF5ICogeDsgLy8gdmFyIHV1diA9IHZlYzMuY3Jvc3MoW10sIHF2ZWMsIHV2KTtcblxuICB2YXIgdXV2eCA9IHF5ICogdXZ6IC0gcXogKiB1dnksXG4gICAgICB1dXZ5ID0gcXogKiB1dnggLSBxeCAqIHV2eixcbiAgICAgIHV1dnogPSBxeCAqIHV2eSAtIHF5ICogdXZ4OyAvLyB2ZWMzLnNjYWxlKHV2LCB1diwgMiAqIHcpO1xuXG4gIHZhciB3MiA9IHF3ICogMjtcbiAgdXZ4ICo9IHcyO1xuICB1dnkgKj0gdzI7XG4gIHV2eiAqPSB3MjsgLy8gdmVjMy5zY2FsZSh1dXYsIHV1diwgMik7XG5cbiAgdXV2eCAqPSAyO1xuICB1dXZ5ICo9IDI7XG4gIHV1dnogKj0gMjsgLy8gcmV0dXJuIHZlYzMuYWRkKG91dCwgYSwgdmVjMy5hZGQob3V0LCB1diwgdXV2KSk7XG5cbiAgb3V0WzBdID0geCArIHV2eCArIHV1dng7XG4gIG91dFsxXSA9IHkgKyB1dnkgKyB1dXZ5O1xuICBvdXRbMl0gPSB6ICsgdXZ6ICsgdXV2ejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB4LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWChvdXQsIGEsIGIsIGMpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzBdO1xuICByWzFdID0gcFsxXSAqIE1hdGguY29zKGMpIC0gcFsyXSAqIE1hdGguc2luKGMpO1xuICByWzJdID0gcFsxXSAqIE1hdGguc2luKGMpICsgcFsyXSAqIE1hdGguY29zKGMpOyAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXG5cbiAgb3V0WzBdID0gclswXSArIGJbMF07XG4gIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSByWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB5LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWShvdXQsIGEsIGIsIGMpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzJdICogTWF0aC5zaW4oYykgKyBwWzBdICogTWF0aC5jb3MoYyk7XG4gIHJbMV0gPSBwWzFdO1xuICByWzJdID0gcFsyXSAqIE1hdGguY29zKGMpIC0gcFswXSAqIE1hdGguc2luKGMpOyAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXG5cbiAgb3V0WzBdID0gclswXSArIGJbMF07XG4gIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSByWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB6LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIGIsIGMpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzBdICogTWF0aC5jb3MoYykgLSBwWzFdICogTWF0aC5zaW4oYyk7XG4gIHJbMV0gPSBwWzBdICogTWF0aC5zaW4oYykgKyBwWzFdICogTWF0aC5jb3MoYyk7XG4gIHJbMl0gPSBwWzJdOyAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXG5cbiAgb3V0WzBdID0gclswXSArIGJbMF07XG4gIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSByWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZXQgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIDNEIHZlY3RvcnNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gVGhlIGFuZ2xlIGluIHJhZGlhbnNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhbmdsZShhLCBiKSB7XG4gIHZhciB0ZW1wQSA9IGZyb21WYWx1ZXMoYVswXSwgYVsxXSwgYVsyXSk7XG4gIHZhciB0ZW1wQiA9IGZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XG4gIG5vcm1hbGl6ZSh0ZW1wQSwgdGVtcEEpO1xuICBub3JtYWxpemUodGVtcEIsIHRlbXBCKTtcbiAgdmFyIGNvc2luZSA9IGRvdCh0ZW1wQSwgdGVtcEIpO1xuXG4gIGlmIChjb3NpbmUgPiAxLjApIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIGlmIChjb3NpbmUgPCAtMS4wKSB7XG4gICAgcmV0dXJuIE1hdGguUEk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xuICB9XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMyB0byB6ZXJvXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvKG91dCkge1xuICBvdXRbMF0gPSAwLjA7XG4gIG91dFsxXSA9IDAuMDtcbiAgb3V0WzJdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ3ZlYzMoJyArIGFbMF0gKyAnLCAnICsgYVsxXSArICcsICcgKyBhWzJdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5kaXZpZGV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXYgPSBkaXZpZGU7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGlzdCA9IGRpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5zcXVhcmVkRGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJEaXN0ID0gc3F1YXJlZERpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMzcy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMzLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzNzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSAzO1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgdmVjWzJdID0gYVtpICsgMl07XG4gICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgIGFbaV0gPSB2ZWNbMF07XG4gICAgICBhW2kgKyAxXSA9IHZlY1sxXTtcbiAgICAgIGFbaSArIDJdID0gdmVjWzJdO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9O1xufSgpOyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDQgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBtb2R1bGUgdmVjNFxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzRcclxuICpcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgsIHksIHosIHcpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICBvdXRbM10gPSB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWM0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdyBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgeCwgeSwgeiwgdykge1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICBvdXRbM10gPSB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIG91dFszXSA9IGFbM10gLSBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAqIGJbMl07XG4gIG91dFszXSA9IGFbM10gKiBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAvIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC8gYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmNlaWwgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2VpbFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2VpbChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5jZWlsKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmNlaWwoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguY2VpbChhWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5jZWlsKGFbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguZmxvb3IgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gZmxvb3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb29yKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmZsb29yKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmZsb29yKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmZsb29yKGFbMl0pO1xuICBvdXRbM10gPSBNYXRoLmZsb29yKGFbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWluKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gIG91dFsyXSA9IE1hdGgubWluKGFbMl0sIGJbMl0pO1xuICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1heChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1heChhWzJdLCBiWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5tYXgoYVszXSwgYlszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5yb3VuZCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byByb3VuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGgucm91bmQoYVswXSk7XG4gIG91dFsxXSA9IE1hdGgucm91bmQoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGgucm91bmQoYVsyXSk7XG4gIG91dFszXSA9IE1hdGgucm91bmQoYVszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWM0J3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIG91dFszXSA9IGFbM10gKyBiWzNdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHZhciB3ID0gYlszXSAtIGFbM107XG4gIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWREaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHZhciB3ID0gYlszXSAtIGFbM107XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciB3ID0gYVszXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdyk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkTGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIHcgPSBhWzNdO1xuICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHc7XG59XG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gLWFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIG91dFszXSA9IDEuMCAvIGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICB2YXIgdyA9IGFbM107XG4gIHZhciBsZW4gPSB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcblxuICBpZiAobGVuID4gMCkge1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgfVxuXG4gIG91dFswXSA9IHggKiBsZW47XG4gIG91dFsxXSA9IHkgKiBsZW47XG4gIG91dFsyXSA9IHogKiBsZW47XG4gIG91dFszXSA9IHcgKiBsZW47XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXSArIGFbM10gKiBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGNyb3NzLXByb2R1Y3Qgb2YgdGhyZWUgdmVjdG9ycyBpbiBhIDQtZGltZW5zaW9uYWwgc3BhY2VcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSByZXN1bHQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBVIHRoZSBmaXJzdCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBWIHRoZSBzZWNvbmQgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gVyB0aGUgdGhpcmQgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSByZXN1bHRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcm9zcyhvdXQsIHUsIHYsIHcpIHtcbiAgdmFyIEEgPSB2WzBdICogd1sxXSAtIHZbMV0gKiB3WzBdLFxuICAgICAgQiA9IHZbMF0gKiB3WzJdIC0gdlsyXSAqIHdbMF0sXG4gICAgICBDID0gdlswXSAqIHdbM10gLSB2WzNdICogd1swXSxcbiAgICAgIEQgPSB2WzFdICogd1syXSAtIHZbMl0gKiB3WzFdLFxuICAgICAgRSA9IHZbMV0gKiB3WzNdIC0gdlszXSAqIHdbMV0sXG4gICAgICBGID0gdlsyXSAqIHdbM10gLSB2WzNdICogd1syXTtcbiAgdmFyIEcgPSB1WzBdO1xuICB2YXIgSCA9IHVbMV07XG4gIHZhciBJID0gdVsyXTtcbiAgdmFyIEogPSB1WzNdO1xuICBvdXRbMF0gPSBIICogRiAtIEkgKiBFICsgSiAqIEQ7XG4gIG91dFsxXSA9IC0oRyAqIEYpICsgSSAqIEMgLSBKICogQjtcbiAgb3V0WzJdID0gRyAqIEUgLSBIICogQyArIEogKiBBO1xuICBvdXRbM10gPSAtKEcgKiBEKSArIEggKiBCIC0gSSAqIEE7XG4gIHJldHVybiBvdXQ7XG59XG47XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgdmFyIGF4ID0gYVswXTtcbiAgdmFyIGF5ID0gYVsxXTtcbiAgdmFyIGF6ID0gYVsyXTtcbiAgdmFyIGF3ID0gYVszXTtcbiAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XG4gIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xuICBvdXRbMl0gPSBheiArIHQgKiAoYlsyXSAtIGF6KTtcbiAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQsIHNjYWxlKSB7XG4gIHNjYWxlID0gc2NhbGUgfHwgMS4wOyAvLyBNYXJzYWdsaWEsIEdlb3JnZS4gQ2hvb3NpbmcgYSBQb2ludCBmcm9tIHRoZSBTdXJmYWNlIG9mIGFcbiAgLy8gU3BoZXJlLiBBbm4uIE1hdGguIFN0YXRpc3QuIDQzICgxOTcyKSwgbm8uIDIsIDY0NS0tNjQ2LlxuICAvLyBodHRwOi8vcHJvamVjdGV1Y2xpZC5vcmcvZXVjbGlkLmFvbXMvMTE3NzY5MjY0NDtcblxuICB2YXIgdjEsIHYyLCB2MywgdjQ7XG4gIHZhciBzMSwgczI7XG5cbiAgZG8ge1xuICAgIHYxID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICB2MiA9IGdsTWF0cml4LlJBTkRPTSgpICogMiAtIDE7XG4gICAgczEgPSB2MSAqIHYxICsgdjIgKiB2MjtcbiAgfSB3aGlsZSAoczEgPj0gMSk7XG5cbiAgZG8ge1xuICAgIHYzID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICB2NCA9IGdsTWF0cml4LlJBTkRPTSgpICogMiAtIDE7XG4gICAgczIgPSB2MyAqIHYzICsgdjQgKiB2NDtcbiAgfSB3aGlsZSAoczIgPj0gMSk7XG5cbiAgdmFyIGQgPSBNYXRoLnNxcnQoKDEgLSBzMSkgLyBzMik7XG4gIG91dFswXSA9IHNjYWxlICogdjE7XG4gIG91dFsxXSA9IHNjYWxlICogdjI7XG4gIG91dFsyXSA9IHNjYWxlICogdjMgKiBkO1xuICBvdXRbM10gPSBzY2FsZSAqIHY0ICogZDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWM0IHdpdGggYSBtYXQ0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0NChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXSxcbiAgICAgIHcgPSBhWzNdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSAqIHc7XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdICogdztcbiAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcbiAgb3V0WzNdID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTFdICogeiArIG1bMTVdICogdztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWM0IHdpdGggYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgcXVhdGVybmlvbiB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUXVhdChvdXQsIGEsIHEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTtcbiAgdmFyIHF4ID0gcVswXSxcbiAgICAgIHF5ID0gcVsxXSxcbiAgICAgIHF6ID0gcVsyXSxcbiAgICAgIHF3ID0gcVszXTsgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcblxuICB2YXIgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG4gIHZhciBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcbiAgdmFyIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4O1xuICB2YXIgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6OyAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG5cbiAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcbiAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcbiAgb3V0WzJdID0gaXogKiBxdyArIGl3ICogLXF6ICsgaXggKiAtcXkgLSBpeSAqIC1xeDtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHplcm9cclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHplcm8ob3V0KSB7XG4gIG91dFswXSA9IDAuMDtcbiAgb3V0WzFdID0gMC4wO1xuICBvdXRbMl0gPSAwLjA7XG4gIG91dFszXSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICd2ZWM0KCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWM0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWM0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXZpZGV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXYgPSBkaXZpZGU7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGlzdCA9IGRpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zcXVhcmVkRGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJEaXN0ID0gc3F1YXJlZERpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSA0O1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgdmVjWzJdID0gYVtpICsgMl07XG4gICAgICB2ZWNbM10gPSBhW2kgKyAzXTtcbiAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xuICAgICAgYVtpXSA9IHZlY1swXTtcbiAgICAgIGFbaSArIDFdID0gdmVjWzFdO1xuICAgICAgYVtpICsgMl0gPSB2ZWNbMl07XG4gICAgICBhW2kgKyAzXSA9IHZlY1szXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfTtcbn0oKTsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbmltcG9ydCAqIGFzIG1hdDMgZnJvbSBcIi4vbWF0My5qc1wiO1xuaW1wb3J0ICogYXMgdmVjMyBmcm9tIFwiLi92ZWMzLmpzXCI7XG5pbXBvcnQgKiBhcyB2ZWM0IGZyb20gXCIuL3ZlYzQuanNcIjtcbi8qKlxyXG4gKiBRdWF0ZXJuaW9uXHJcbiAqIEBtb2R1bGUgcXVhdFxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICB9XG5cbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBxdWF0IHRvIHRoZSBpZGVudGl0eSBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDA7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0cyBhIHF1YXQgZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYW5kIHJvdGF0aW9uIGF4aXMsXHJcbiAqIHRoZW4gcmV0dXJucyBpdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyBhcm91bmQgd2hpY2ggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIGluIHJhZGlhbnNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBeGlzQW5nbGUob3V0LCBheGlzLCByYWQpIHtcbiAgcmFkID0gcmFkICogMC41O1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIG91dFswXSA9IHMgKiBheGlzWzBdO1xuICBvdXRbMV0gPSBzICogYXhpc1sxXTtcbiAgb3V0WzJdID0gcyAqIGF4aXNbMl07XG4gIG91dFszXSA9IE1hdGguY29zKHJhZCk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgcm90YXRpb24gYXhpcyBhbmQgYW5nbGUgZm9yIGEgZ2l2ZW5cclxuICogIHF1YXRlcm5pb24uIElmIGEgcXVhdGVybmlvbiBpcyBjcmVhdGVkIHdpdGhcclxuICogIHNldEF4aXNBbmdsZSwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNhbWVcclxuICogIHZhbHVlcyBhcyBwcm92aWRpZWQgaW4gdGhlIG9yaWdpbmFsIHBhcmFtZXRlciBsaXN0XHJcbiAqICBPUiBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB2YWx1ZXMuXHJcbiAqIEV4YW1wbGU6IFRoZSBxdWF0ZXJuaW9uIGZvcm1lZCBieSBheGlzIFswLCAwLCAxXSBhbmRcclxuICogIGFuZ2xlIC05MCBpcyB0aGUgc2FtZSBhcyB0aGUgcXVhdGVybmlvbiBmb3JtZWQgYnlcclxuICogIFswLCAwLCAxXSBhbmQgMjcwLiBUaGlzIG1ldGhvZCBmYXZvcnMgdGhlIGxhdHRlci5cclxuICogQHBhcmFtICB7dmVjM30gb3V0X2F4aXMgIFZlY3RvciByZWNlaXZpbmcgdGhlIGF4aXMgb2Ygcm90YXRpb25cclxuICogQHBhcmFtICB7cXVhdH0gcSAgICAgUXVhdGVybmlvbiB0byBiZSBkZWNvbXBvc2VkXHJcbiAqIEByZXR1cm4ge051bWJlcn0gICAgIEFuZ2xlLCBpbiByYWRpYW5zLCBvZiB0aGUgcm90YXRpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBeGlzQW5nbGUob3V0X2F4aXMsIHEpIHtcbiAgdmFyIHJhZCA9IE1hdGguYWNvcyhxWzNdKSAqIDIuMDtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQgLyAyLjApO1xuXG4gIGlmIChzID4gZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIG91dF9heGlzWzBdID0gcVswXSAvIHM7XG4gICAgb3V0X2F4aXNbMV0gPSBxWzFdIC8gcztcbiAgICBvdXRfYXhpc1syXSA9IHFbMl0gLyBzO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHMgaXMgemVybywgcmV0dXJuIGFueSBheGlzIChubyByb3RhdGlvbiAtIGF4aXMgZG9lcyBub3QgbWF0dGVyKVxuICAgIG91dF9heGlzWzBdID0gMTtcbiAgICBvdXRfYXhpc1sxXSA9IDA7XG4gICAgb3V0X2F4aXNbMl0gPSAwO1xuICB9XG5cbiAgcmV0dXJuIHJhZDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgdmFyIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIGJ6ID0gYlsyXSxcbiAgICAgIGJ3ID0gYlszXTtcbiAgb3V0WzBdID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieTtcbiAgb3V0WzFdID0gYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBiejtcbiAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieDtcbiAgb3V0WzNdID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFggYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVgob3V0LCBhLCByYWQpIHtcbiAgcmFkICo9IDAuNTtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgdmFyIGJ4ID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGJ3ID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYXggKiBidyArIGF3ICogYng7XG4gIG91dFsxXSA9IGF5ICogYncgKyBheiAqIGJ4O1xuICBvdXRbMl0gPSBheiAqIGJ3IC0gYXkgKiBieDtcbiAgb3V0WzNdID0gYXcgKiBidyAtIGF4ICogYng7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVZKG91dCwgYSwgcmFkKSB7XG4gIHJhZCAqPSAwLjU7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIHZhciBieSA9IE1hdGguc2luKHJhZCksXG4gICAgICBidyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGF4ICogYncgLSBheiAqIGJ5O1xuICBvdXRbMV0gPSBheSAqIGJ3ICsgYXcgKiBieTtcbiAgb3V0WzJdID0gYXogKiBidyArIGF4ICogYnk7XG4gIG91dFszXSA9IGF3ICogYncgLSBheSAqIGJ5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIHJhZCkge1xuICByYWQgKj0gMC41O1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnogPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYncgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBheCAqIGJ3ICsgYXkgKiBiejtcbiAgb3V0WzFdID0gYXkgKiBidyAtIGF4ICogYno7XG4gIG91dFsyXSA9IGF6ICogYncgKyBhdyAqIGJ6O1xuICBvdXRbM10gPSBhdyAqIGJ3IC0gYXogKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBXIGNvbXBvbmVudCBvZiBhIHF1YXQgZnJvbSB0aGUgWCwgWSwgYW5kIFogY29tcG9uZW50cy5cclxuICogQXNzdW1lcyB0aGF0IHF1YXRlcm5pb24gaXMgMSB1bml0IGluIGxlbmd0aC5cclxuICogQW55IGV4aXN0aW5nIFcgY29tcG9uZW50IHdpbGwgYmUgaWdub3JlZC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBXIGNvbXBvbmVudCBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlVyhvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgb3V0WzJdID0gejtcbiAgb3V0WzNdID0gTWF0aC5zcXJ0KE1hdGguYWJzKDEuMCAtIHggKiB4IC0geSAqIHkgLSB6ICogeikpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZXJwKG91dCwgYSwgYiwgdCkge1xuICAvLyBiZW5jaG1hcmtzOlxuICAvLyAgICBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXNsZXJwLWltcGxlbWVudGF0aW9uc1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgYnogPSBiWzJdLFxuICAgICAgYncgPSBiWzNdO1xuICB2YXIgb21lZ2EsIGNvc29tLCBzaW5vbSwgc2NhbGUwLCBzY2FsZTE7IC8vIGNhbGMgY29zaW5lXG5cbiAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3OyAvLyBhZGp1c3Qgc2lnbnMgKGlmIG5lY2Vzc2FyeSlcblxuICBpZiAoY29zb20gPCAwLjApIHtcbiAgICBjb3NvbSA9IC1jb3NvbTtcbiAgICBieCA9IC1ieDtcbiAgICBieSA9IC1ieTtcbiAgICBieiA9IC1iejtcbiAgICBidyA9IC1idztcbiAgfSAvLyBjYWxjdWxhdGUgY29lZmZpY2llbnRzXG5cblxuICBpZiAoMS4wIC0gY29zb20gPiBnbE1hdHJpeC5FUFNJTE9OKSB7XG4gICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXG4gICAgb21lZ2EgPSBNYXRoLmFjb3MoY29zb20pO1xuICAgIHNpbm9tID0gTWF0aC5zaW4ob21lZ2EpO1xuICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xuICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcbiAgfSBlbHNlIHtcbiAgICAvLyBcImZyb21cIiBhbmQgXCJ0b1wiIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXG4gICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgIHNjYWxlMCA9IDEuMCAtIHQ7XG4gICAgc2NhbGUxID0gdDtcbiAgfSAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXG5cblxuICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xuICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xuICBvdXRbMl0gPSBzY2FsZTAgKiBheiArIHNjYWxlMSAqIGJ6O1xuICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCkge1xuICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBodHRwOi8vcGxhbm5pbmcuY3MudWl1Yy5lZHUvbm9kZTE5OC5odG1sXG4gIC8vIFRPRE86IENhbGxpbmcgcmFuZG9tIDMgdGltZXMgaXMgcHJvYmFibHkgbm90IHRoZSBmYXN0ZXN0IHNvbHV0aW9uXG4gIHZhciB1MSA9IGdsTWF0cml4LlJBTkRPTSgpO1xuICB2YXIgdTIgPSBnbE1hdHJpeC5SQU5ET00oKTtcbiAgdmFyIHUzID0gZ2xNYXRyaXguUkFORE9NKCk7XG4gIHZhciBzcXJ0MU1pbnVzVTEgPSBNYXRoLnNxcnQoMSAtIHUxKTtcbiAgdmFyIHNxcnRVMSA9IE1hdGguc3FydCh1MSk7XG4gIG91dFswXSA9IHNxcnQxTWludXNVMSAqIE1hdGguc2luKDIuMCAqIE1hdGguUEkgKiB1Mik7XG4gIG91dFsxXSA9IHNxcnQxTWludXNVMSAqIE1hdGguY29zKDIuMCAqIE1hdGguUEkgKiB1Mik7XG4gIG91dFsyXSA9IHNxcnRVMSAqIE1hdGguc2luKDIuMCAqIE1hdGguUEkgKiB1Myk7XG4gIG91dFszXSA9IHNxcnRVMSAqIE1hdGguY29zKDIuMCAqIE1hdGguUEkgKiB1Myk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgaW52ZXJzZSBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBpbnZlcnNlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBkb3QgPSBhMCAqIGEwICsgYTEgKiBhMSArIGEyICogYTIgKyBhMyAqIGEzO1xuICB2YXIgaW52RG90ID0gZG90ID8gMS4wIC8gZG90IDogMDsgLy8gVE9ETzogV291bGQgYmUgZmFzdGVyIHRvIHJldHVybiBbMCwwLDAsMF0gaW1tZWRpYXRlbHkgaWYgZG90ID09IDBcblxuICBvdXRbMF0gPSAtYTAgKiBpbnZEb3Q7XG4gIG91dFsxXSA9IC1hMSAqIGludkRvdDtcbiAgb3V0WzJdID0gLWEyICogaW52RG90O1xuICBvdXRbM10gPSBhMyAqIGludkRvdDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2YgYSBxdWF0XHJcbiAqIElmIHRoZSBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gcXVhdC5pbnZlcnNlIGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgY29uanVnYXRlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qdWdhdGUob3V0LCBhKSB7XG4gIG91dFswXSA9IC1hWzBdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgb3V0WzJdID0gLWFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIHF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gM3gzIHJvdGF0aW9uIG1hdHJpeC5cclxuICpcclxuICogTk9URTogVGhlIHJlc3VsdGFudCBxdWF0ZXJuaW9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyB5b3Ugc2hvdWxkIGJlIHN1cmVcclxuICogdG8gcmVub3JtYWxpemUgdGhlIHF1YXRlcm5pb24geW91cnNlbGYgd2hlcmUgbmVjZXNzYXJ5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHttYXQzfSBtIHJvdGF0aW9uIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21NYXQzKG91dCwgbSkge1xuICAvLyBBbGdvcml0aG0gaW4gS2VuIFNob2VtYWtlJ3MgYXJ0aWNsZSBpbiAxOTg3IFNJR0dSQVBIIGNvdXJzZSBub3Rlc1xuICAvLyBhcnRpY2xlIFwiUXVhdGVybmlvbiBDYWxjdWx1cyBhbmQgRmFzdCBBbmltYXRpb25cIi5cbiAgdmFyIGZUcmFjZSA9IG1bMF0gKyBtWzRdICsgbVs4XTtcbiAgdmFyIGZSb290O1xuXG4gIGlmIChmVHJhY2UgPiAwLjApIHtcbiAgICAvLyB8d3wgPiAxLzIsIG1heSBhcyB3ZWxsIGNob29zZSB3ID4gMS8yXG4gICAgZlJvb3QgPSBNYXRoLnNxcnQoZlRyYWNlICsgMS4wKTsgLy8gMndcblxuICAgIG91dFszXSA9IDAuNSAqIGZSb290O1xuICAgIGZSb290ID0gMC41IC8gZlJvb3Q7IC8vIDEvKDR3KVxuXG4gICAgb3V0WzBdID0gKG1bNV0gLSBtWzddKSAqIGZSb290O1xuICAgIG91dFsxXSA9IChtWzZdIC0gbVsyXSkgKiBmUm9vdDtcbiAgICBvdXRbMl0gPSAobVsxXSAtIG1bM10pICogZlJvb3Q7XG4gIH0gZWxzZSB7XG4gICAgLy8gfHd8IDw9IDEvMlxuICAgIHZhciBpID0gMDtcbiAgICBpZiAobVs0XSA+IG1bMF0pIGkgPSAxO1xuICAgIGlmIChtWzhdID4gbVtpICogMyArIGldKSBpID0gMjtcbiAgICB2YXIgaiA9IChpICsgMSkgJSAzO1xuICAgIHZhciBrID0gKGkgKyAyKSAlIDM7XG4gICAgZlJvb3QgPSBNYXRoLnNxcnQobVtpICogMyArIGldIC0gbVtqICogMyArIGpdIC0gbVtrICogMyArIGtdICsgMS4wKTtcbiAgICBvdXRbaV0gPSAwLjUgKiBmUm9vdDtcbiAgICBmUm9vdCA9IDAuNSAvIGZSb290O1xuICAgIG91dFszXSA9IChtW2ogKiAzICsga10gLSBtW2sgKiAzICsgal0pICogZlJvb3Q7XG4gICAgb3V0W2pdID0gKG1baiAqIDMgKyBpXSArIG1baSAqIDMgKyBqXSkgKiBmUm9vdDtcbiAgICBvdXRba10gPSAobVtrICogMyArIGldICsgbVtpICogMyArIGtdKSAqIGZSb290O1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgcXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiBldWxlciBhbmdsZSB4LCB5LCB6LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHt4fSBBbmdsZSB0byByb3RhdGUgYXJvdW5kIFggYXhpcyBpbiBkZWdyZWVzLlxyXG4gKiBAcGFyYW0ge3l9IEFuZ2xlIHRvIHJvdGF0ZSBhcm91bmQgWSBheGlzIGluIGRlZ3JlZXMuXHJcbiAqIEBwYXJhbSB7en0gQW5nbGUgdG8gcm90YXRlIGFyb3VuZCBaIGF4aXMgaW4gZGVncmVlcy5cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXVsZXIob3V0LCB4LCB5LCB6KSB7XG4gIHZhciBoYWxmVG9SYWQgPSAwLjUgKiBNYXRoLlBJIC8gMTgwLjA7XG4gIHggKj0gaGFsZlRvUmFkO1xuICB5ICo9IGhhbGZUb1JhZDtcbiAgeiAqPSBoYWxmVG9SYWQ7XG4gIHZhciBzeCA9IE1hdGguc2luKHgpO1xuICB2YXIgY3ggPSBNYXRoLmNvcyh4KTtcbiAgdmFyIHN5ID0gTWF0aC5zaW4oeSk7XG4gIHZhciBjeSA9IE1hdGguY29zKHkpO1xuICB2YXIgc3ogPSBNYXRoLnNpbih6KTtcbiAgdmFyIGN6ID0gTWF0aC5jb3Moeik7XG4gIG91dFswXSA9IHN4ICogY3kgKiBjeiAtIGN4ICogc3kgKiBzejtcbiAgb3V0WzFdID0gY3ggKiBzeSAqIGN6ICsgc3ggKiBjeSAqIHN6O1xuICBvdXRbMl0gPSBjeCAqIGN5ICogc3ogLSBzeCAqIHN5ICogY3o7XG4gIG91dFszXSA9IGN4ICogY3kgKiBjeiArIHN4ICogc3kgKiBzejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcXVhdGVuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdxdWF0KCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJyknO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGNsb25lID0gdmVjNC5jbG9uZTtcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBmcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgY29weSA9IHZlYzQuY29weTtcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNldCA9IHZlYzQuc2V0O1xuLyoqXHJcbiAqIEFkZHMgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgYWRkID0gdmVjNC5hZGQ7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogU2NhbGVzIGEgcXVhdCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc2NhbGUgPSB2ZWM0LnNjYWxlO1xuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZG90ID0gdmVjNC5kb3Q7XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVycCA9IHZlYzQubGVycDtcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW5ndGggPSB2ZWM0Lmxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQubGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuID0gbGVuZ3RoO1xuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXVhcmVkTGVuZ3RoID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdGVybmlvbiB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbm9ybWFsaXplID0gdmVjNC5ub3JtYWxpemU7XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcXVhdGVybmlvbnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgVGhlIGZpcnN0IHF1YXRlcm5pb24uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiBUaGUgc2Vjb25kIHF1YXRlcm5pb24uXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IHZhciBleGFjdEVxdWFscyA9IHZlYzQuZXhhY3RFcXVhbHM7XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcXVhdGVybmlvbnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHtxdWF0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCB2YXIgZXF1YWxzID0gdmVjNC5lcXVhbHM7XG4vKipcclxuICogU2V0cyBhIHF1YXRlcm5pb24gdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIG9uZVxyXG4gKiB2ZWN0b3IgdG8gYW5vdGhlci5cclxuICpcclxuICogQm90aCB2ZWN0b3JzIGFyZSBhc3N1bWVkIHRvIGJlIHVuaXQgbGVuZ3RoLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb24uXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgaW5pdGlhbCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IHZhciByb3RhdGlvblRvID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdG1wdmVjMyA9IHZlYzMuY3JlYXRlKCk7XG4gIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwgMCwgMCk7XG4gIHZhciB5VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMSwgMCk7XG4gIHJldHVybiBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XG4gICAgdmFyIGRvdCA9IHZlYzMuZG90KGEsIGIpO1xuXG4gICAgaWYgKGRvdCA8IC0wLjk5OTk5OSkge1xuICAgICAgdmVjMy5jcm9zcyh0bXB2ZWMzLCB4VW5pdFZlYzMsIGEpO1xuICAgICAgaWYgKHZlYzMubGVuKHRtcHZlYzMpIDwgMC4wMDAwMDEpIHZlYzMuY3Jvc3ModG1wdmVjMywgeVVuaXRWZWMzLCBhKTtcbiAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xuICAgICAgc2V0QXhpc0FuZ2xlKG91dCwgdG1wdmVjMywgTWF0aC5QSSk7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcbiAgICAgIG91dFswXSA9IDA7XG4gICAgICBvdXRbMV0gPSAwO1xuICAgICAgb3V0WzJdID0gMDtcbiAgICAgIG91dFszXSA9IDE7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xuICAgICAgb3V0WzBdID0gdG1wdmVjM1swXTtcbiAgICAgIG91dFsxXSA9IHRtcHZlYzNbMV07XG4gICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xuICAgICAgb3V0WzNdID0gMSArIGRvdDtcbiAgICAgIHJldHVybiBub3JtYWxpemUob3V0LCBvdXQpO1xuICAgIH1cbiAgfTtcbn0oKTtcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiB3aXRoIHR3byBjb250cm9sIHBvaW50c1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBjIHRoZSB0aGlyZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gZCB0aGUgZm91cnRoIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxbGVycCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlbXAxID0gY3JlYXRlKCk7XG4gIHZhciB0ZW1wMiA9IGNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKG91dCwgYSwgYiwgYywgZCwgdCkge1xuICAgIHNsZXJwKHRlbXAxLCBhLCBkLCB0KTtcbiAgICBzbGVycCh0ZW1wMiwgYiwgYywgdCk7XG4gICAgc2xlcnAob3V0LCB0ZW1wMSwgdGVtcDIsIDIgKiB0ICogKDEgLSB0KSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcbn0oKTtcbi8qKlxyXG4gKiBTZXRzIHRoZSBzcGVjaWZpZWQgcXVhdGVybmlvbiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlblxyXG4gKiBheGVzLiBFYWNoIGF4aXMgaXMgYSB2ZWMzIGFuZCBpcyBleHBlY3RlZCB0byBiZSB1bml0IGxlbmd0aCBhbmRcclxuICogcGVycGVuZGljdWxhciB0byBhbGwgb3RoZXIgc3BlY2lmaWVkIGF4ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gdmlldyAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIHZpZXdpbmcgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gcmlnaHQgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwicmlnaHRcIiBkaXJlY3Rpb25cclxuICogQHBhcmFtIHt2ZWMzfSB1cCAgICB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgXCJ1cFwiIGRpcmVjdGlvblxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgdmFyIHNldEF4ZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBtYXRyID0gbWF0My5jcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xuICAgIG1hdHJbMF0gPSByaWdodFswXTtcbiAgICBtYXRyWzNdID0gcmlnaHRbMV07XG4gICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xuICAgIG1hdHJbMV0gPSB1cFswXTtcbiAgICBtYXRyWzRdID0gdXBbMV07XG4gICAgbWF0cls3XSA9IHVwWzJdO1xuICAgIG1hdHJbMl0gPSAtdmlld1swXTtcbiAgICBtYXRyWzVdID0gLXZpZXdbMV07XG4gICAgbWF0cls4XSA9IC12aWV3WzJdO1xuICAgIHJldHVybiBub3JtYWxpemUob3V0LCBmcm9tTWF0MyhvdXQsIG1hdHIpKTtcbiAgfTtcbn0oKTsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbmltcG9ydCAqIGFzIHF1YXQgZnJvbSBcIi4vcXVhdC5qc1wiO1xuaW1wb3J0ICogYXMgbWF0NCBmcm9tIFwiLi9tYXQ0LmpzXCI7XG4vKipcclxuICogRHVhbCBRdWF0ZXJuaW9uPGJyPlxyXG4gKiBGb3JtYXQ6IFtyZWFsLCBkdWFsXTxicj5cclxuICogUXVhdGVybmlvbiBmb3JtYXQ6IFhZWlc8YnI+XHJcbiAqIE1ha2Ugc3VyZSB0byBoYXZlIG5vcm1hbGl6ZWQgZHVhbCBxdWF0ZXJuaW9ucywgb3RoZXJ3aXNlIHRoZSBmdW5jdGlvbnMgbWF5IG5vdCB3b3JrIGFzIGludGVuZGVkLjxicj5cclxuICogQG1vZHVsZSBxdWF0MlxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgZHVhbCBxdWF0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gYSBuZXcgZHVhbCBxdWF0ZXJuaW9uIFtyZWFsIC0+IHJvdGF0aW9uLCBkdWFsIC0+IHRyYW5zbGF0aW9uXVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIGRxID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOCk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgZHFbMF0gPSAwO1xuICAgIGRxWzFdID0gMDtcbiAgICBkcVsyXSA9IDA7XG4gICAgZHFbNF0gPSAwO1xuICAgIGRxWzVdID0gMDtcbiAgICBkcVs2XSA9IDA7XG4gICAgZHFbN10gPSAwO1xuICB9XG5cbiAgZHFbM10gPSAxO1xuICByZXR1cm4gZHE7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBxdWF0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdGVybmlvbiB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG5ldyBkdWFsIHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgZHEgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg4KTtcbiAgZHFbMF0gPSBhWzBdO1xuICBkcVsxXSA9IGFbMV07XG4gIGRxWzJdID0gYVsyXTtcbiAgZHFbM10gPSBhWzNdO1xuICBkcVs0XSA9IGFbNF07XG4gIGRxWzVdID0gYVs1XTtcbiAgZHFbNl0gPSBhWzZdO1xuICBkcVs3XSA9IGFbN107XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGR1YWwgcXVhdCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgxIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejEgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcxIFcgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4MiBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geTIgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoyIFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3MiBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG5ldyBkdWFsIHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyh4MSwgeTEsIHoxLCB3MSwgeDIsIHkyLCB6MiwgdzIpIHtcbiAgdmFyIGRxID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOCk7XG4gIGRxWzBdID0geDE7XG4gIGRxWzFdID0geTE7XG4gIGRxWzJdID0gejE7XG4gIGRxWzNdID0gdzE7XG4gIGRxWzRdID0geDI7XG4gIGRxWzVdID0geTI7XG4gIGRxWzZdID0gejI7XG4gIGRxWzddID0gdzI7XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGR1YWwgcXVhdCBmcm9tIHRoZSBnaXZlbiB2YWx1ZXMgKHF1YXQgYW5kIHRyYW5zbGF0aW9uKVxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geDEgWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkxIFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MSBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdzEgVyBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgyIFggY29tcG9uZW50ICh0cmFuc2xhdGlvbilcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkyIFkgY29tcG9uZW50ICh0cmFuc2xhdGlvbilcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoyIFogY29tcG9uZW50ICh0cmFuc2xhdGlvbilcclxuICogQHJldHVybnMge3F1YXQyfSBuZXcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uVmFsdWVzKHgxLCB5MSwgejEsIHcxLCB4MiwgeTIsIHoyKSB7XG4gIHZhciBkcSA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDgpO1xuICBkcVswXSA9IHgxO1xuICBkcVsxXSA9IHkxO1xuICBkcVsyXSA9IHoxO1xuICBkcVszXSA9IHcxO1xuICB2YXIgYXggPSB4MiAqIDAuNSxcbiAgICAgIGF5ID0geTIgKiAwLjUsXG4gICAgICBheiA9IHoyICogMC41O1xuICBkcVs0XSA9IGF4ICogdzEgKyBheSAqIHoxIC0gYXogKiB5MTtcbiAgZHFbNV0gPSBheSAqIHcxICsgYXogKiB4MSAtIGF4ICogejE7XG4gIGRxWzZdID0gYXogKiB3MSArIGF4ICogeTEgLSBheSAqIHgxO1xuICBkcVs3XSA9IC1heCAqIHgxIC0gYXkgKiB5MSAtIGF6ICogejE7XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgZHVhbCBxdWF0IGZyb20gYSBxdWF0ZXJuaW9uIGFuZCBhIHRyYW5zbGF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHQgdHJhbmxhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LCBxLCB0KSB7XG4gIHZhciBheCA9IHRbMF0gKiAwLjUsXG4gICAgICBheSA9IHRbMV0gKiAwLjUsXG4gICAgICBheiA9IHRbMl0gKiAwLjUsXG4gICAgICBieCA9IHFbMF0sXG4gICAgICBieSA9IHFbMV0sXG4gICAgICBieiA9IHFbMl0sXG4gICAgICBidyA9IHFbM107XG4gIG91dFswXSA9IGJ4O1xuICBvdXRbMV0gPSBieTtcbiAgb3V0WzJdID0gYno7XG4gIG91dFszXSA9IGJ3O1xuICBvdXRbNF0gPSBheCAqIGJ3ICsgYXkgKiBieiAtIGF6ICogYnk7XG4gIG91dFs1XSA9IGF5ICogYncgKyBheiAqIGJ4IC0gYXggKiBiejtcbiAgb3V0WzZdID0gYXogKiBidyArIGF4ICogYnkgLSBheSAqIGJ4O1xuICBvdXRbN10gPSAtYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBkdWFsIHF1YXQgZnJvbSBhIHRyYW5zbGF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHQgdHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21UcmFuc2xhdGlvbihvdXQsIHQpIHtcbiAgb3V0WzBdID0gMDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgb3V0WzRdID0gdFswXSAqIDAuNTtcbiAgb3V0WzVdID0gdFsxXSAqIDAuNTtcbiAgb3V0WzZdID0gdFsyXSAqIDAuNTtcbiAgb3V0WzddID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgZHVhbCBxdWF0IGZyb20gYSBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgdGhlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcSkge1xuICBvdXRbMF0gPSBxWzBdO1xuICBvdXRbMV0gPSBxWzFdO1xuICBvdXRbMl0gPSBxWzJdO1xuICBvdXRbM10gPSBxWzNdO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgZHVhbCBxdWF0IGZyb20gYSBtYXRyaXggKDR4NClcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXhcclxuICogQHJldHVybnMge3F1YXQyfSBkdWFsIHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hdDQob3V0LCBhKSB7XG4gIC8vVE9ETyBPcHRpbWl6ZSB0aGlzXG4gIHZhciBvdXRlciA9IHF1YXQuY3JlYXRlKCk7XG4gIG1hdDQuZ2V0Um90YXRpb24ob3V0ZXIsIGEpO1xuICB2YXIgdCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBtYXQ0LmdldFRyYW5zbGF0aW9uKHQsIGEpO1xuICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIG91dGVyLCB0KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgZHVhbCBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIHNvdXJjZSBkdWFsIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBkdWFsIHF1YXQgdG8gdGhlIGlkZW50aXR5IGR1YWwgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDA7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgZHVhbCBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0geDEgWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkxIFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MSBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdzEgVyBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgyIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MiBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejIgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcyIFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIHgxLCB5MSwgejEsIHcxLCB4MiwgeTIsIHoyLCB3Mikge1xuICBvdXRbMF0gPSB4MTtcbiAgb3V0WzFdID0geTE7XG4gIG91dFsyXSA9IHoxO1xuICBvdXRbM10gPSB3MTtcbiAgb3V0WzRdID0geDI7XG4gIG91dFs1XSA9IHkyO1xuICBvdXRbNl0gPSB6MjtcbiAgb3V0WzddID0gdzI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgcmVhbCBwYXJ0IG9mIGEgZHVhbCBxdWF0XHJcbiAqIEBwYXJhbSAge3F1YXR9IG91dCByZWFsIHBhcnRcclxuICogQHBhcmFtICB7cXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm4ge3F1YXR9IHJlYWwgcGFydFxyXG4gKi9cblxuZXhwb3J0IHZhciBnZXRSZWFsID0gcXVhdC5jb3B5O1xuLyoqXHJcbiAqIEdldHMgdGhlIGR1YWwgcGFydCBvZiBhIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0gIHtxdWF0fSBvdXQgZHVhbCBwYXJ0XHJcbiAqIEBwYXJhbSAge3F1YXQyfSBhIER1YWwgUXVhdGVybmlvblxyXG4gKiBAcmV0dXJuIHtxdWF0fSBkdWFsIHBhcnRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREdWFsKG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzRdO1xuICBvdXRbMV0gPSBhWzVdO1xuICBvdXRbMl0gPSBhWzZdO1xuICBvdXRbM10gPSBhWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgcmVhbCBjb21wb25lbnQgb2YgYSBkdWFsIHF1YXQgdG8gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgYSBxdWF0ZXJuaW9uIHJlcHJlc2VudGluZyB0aGUgcmVhbCBwYXJ0XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzZXRSZWFsID0gcXVhdC5jb3B5O1xuLyoqXHJcbiAqIFNldCB0aGUgZHVhbCBjb21wb25lbnQgb2YgYSBkdWFsIHF1YXQgdG8gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgYSBxdWF0ZXJuaW9uIHJlcHJlc2VudGluZyB0aGUgZHVhbCBwYXJ0XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldER1YWwob3V0LCBxKSB7XG4gIG91dFs0XSA9IHFbMF07XG4gIG91dFs1XSA9IHFbMV07XG4gIG91dFs2XSA9IHFbMl07XG4gIG91dFs3XSA9IHFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgdHJhbnNsYXRpb24gb2YgYSBub3JtYWxpemVkIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXQgdHJhbnNsYXRpb25cclxuICogQHBhcmFtICB7cXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uIHRvIGJlIGRlY29tcG9zZWRcclxuICogQHJldHVybiB7dmVjM30gdHJhbnNsYXRpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2xhdGlvbihvdXQsIGEpIHtcbiAgdmFyIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XSxcbiAgICAgIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXTtcbiAgb3V0WzBdID0gKGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnkpICogMjtcbiAgb3V0WzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMjtcbiAgb3V0WzJdID0gKGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngpICogMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2xhdGVzIGEgZHVhbCBxdWF0IGJ5IHRoZSBnaXZlbiB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUob3V0LCBhLCB2KSB7XG4gIHZhciBheDEgPSBhWzBdLFxuICAgICAgYXkxID0gYVsxXSxcbiAgICAgIGF6MSA9IGFbMl0sXG4gICAgICBhdzEgPSBhWzNdLFxuICAgICAgYngxID0gdlswXSAqIDAuNSxcbiAgICAgIGJ5MSA9IHZbMV0gKiAwLjUsXG4gICAgICBiejEgPSB2WzJdICogMC41LFxuICAgICAgYXgyID0gYVs0XSxcbiAgICAgIGF5MiA9IGFbNV0sXG4gICAgICBhejIgPSBhWzZdLFxuICAgICAgYXcyID0gYVs3XTtcbiAgb3V0WzBdID0gYXgxO1xuICBvdXRbMV0gPSBheTE7XG4gIG91dFsyXSA9IGF6MTtcbiAgb3V0WzNdID0gYXcxO1xuICBvdXRbNF0gPSBhdzEgKiBieDEgKyBheTEgKiBiejEgLSBhejEgKiBieTEgKyBheDI7XG4gIG91dFs1XSA9IGF3MSAqIGJ5MSArIGF6MSAqIGJ4MSAtIGF4MSAqIGJ6MSArIGF5MjtcbiAgb3V0WzZdID0gYXcxICogYnoxICsgYXgxICogYnkxIC0gYXkxICogYngxICsgYXoyO1xuICBvdXRbN10gPSAtYXgxICogYngxIC0gYXkxICogYnkxIC0gYXoxICogYnoxICsgYXcyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYXJvdW5kIHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBob3cgZmFyIHNob3VsZCB0aGUgcm90YXRpb24gYmVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVYKG91dCwgYSwgcmFkKSB7XG4gIHZhciBieCA9IC1hWzBdLFxuICAgICAgYnkgPSAtYVsxXSxcbiAgICAgIGJ6ID0gLWFbMl0sXG4gICAgICBidyA9IGFbM10sXG4gICAgICBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN10sXG4gICAgICBheDEgPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5LFxuICAgICAgYXkxID0gYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieixcbiAgICAgIGF6MSA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngsXG4gICAgICBhdzEgPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICBxdWF0LnJvdGF0ZVgob3V0LCBhLCByYWQpO1xuICBieCA9IG91dFswXTtcbiAgYnkgPSBvdXRbMV07XG4gIGJ6ID0gb3V0WzJdO1xuICBidyA9IG91dFszXTtcbiAgb3V0WzRdID0gYXgxICogYncgKyBhdzEgKiBieCArIGF5MSAqIGJ6IC0gYXoxICogYnk7XG4gIG91dFs1XSA9IGF5MSAqIGJ3ICsgYXcxICogYnkgKyBhejEgKiBieCAtIGF4MSAqIGJ6O1xuICBvdXRbNl0gPSBhejEgKiBidyArIGF3MSAqIGJ6ICsgYXgxICogYnkgLSBheTEgKiBieDtcbiAgb3V0WzddID0gYXcxICogYncgLSBheDEgKiBieCAtIGF5MSAqIGJ5IC0gYXoxICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0ZXJuaW9uIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGhvdyBmYXIgc2hvdWxkIHRoZSByb3RhdGlvbiBiZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVkob3V0LCBhLCByYWQpIHtcbiAgdmFyIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXSxcbiAgICAgIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XSxcbiAgICAgIGF4MSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnksXG4gICAgICBheTEgPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6LFxuICAgICAgYXoxID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieCxcbiAgICAgIGF3MSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHF1YXQucm90YXRlWShvdXQsIGEsIHJhZCk7XG4gIGJ4ID0gb3V0WzBdO1xuICBieSA9IG91dFsxXTtcbiAgYnogPSBvdXRbMl07XG4gIGJ3ID0gb3V0WzNdO1xuICBvdXRbNF0gPSBheDEgKiBidyArIGF3MSAqIGJ4ICsgYXkxICogYnogLSBhejEgKiBieTtcbiAgb3V0WzVdID0gYXkxICogYncgKyBhdzEgKiBieSArIGF6MSAqIGJ4IC0gYXgxICogYno7XG4gIG91dFs2XSA9IGF6MSAqIGJ3ICsgYXcxICogYnogKyBheDEgKiBieSAtIGF5MSAqIGJ4O1xuICBvdXRbN10gPSBhdzEgKiBidyAtIGF4MSAqIGJ4IC0gYXkxICogYnkgLSBhejEgKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgZHVhbCBxdWF0IGFyb3VuZCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgaG93IGZhciBzaG91bGQgdGhlIHJvdGF0aW9uIGJlXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIHJhZCkge1xuICB2YXIgYnggPSAtYVswXSxcbiAgICAgIGJ5ID0gLWFbMV0sXG4gICAgICBieiA9IC1hWzJdLFxuICAgICAgYncgPSBhWzNdLFxuICAgICAgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddLFxuICAgICAgYXgxID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSxcbiAgICAgIGF5MSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnosXG4gICAgICBhejEgPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4LFxuICAgICAgYXcxID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcXVhdC5yb3RhdGVaKG91dCwgYSwgcmFkKTtcbiAgYnggPSBvdXRbMF07XG4gIGJ5ID0gb3V0WzFdO1xuICBieiA9IG91dFsyXTtcbiAgYncgPSBvdXRbM107XG4gIG91dFs0XSA9IGF4MSAqIGJ3ICsgYXcxICogYnggKyBheTEgKiBieiAtIGF6MSAqIGJ5O1xuICBvdXRbNV0gPSBheTEgKiBidyArIGF3MSAqIGJ5ICsgYXoxICogYnggLSBheDEgKiBiejtcbiAgb3V0WzZdID0gYXoxICogYncgKyBhdzEgKiBieiArIGF4MSAqIGJ5IC0gYXkxICogYng7XG4gIG91dFs3XSA9IGF3MSAqIGJ3IC0gYXgxICogYnggLSBheTEgKiBieSAtIGF6MSAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYnkgYSBnaXZlbiBxdWF0ZXJuaW9uIChhICogcSlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gcm90YXRlIGJ5XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlQnlRdWF0QXBwZW5kKG91dCwgYSwgcSkge1xuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdLFxuICAgICAgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICBvdXRbMF0gPSBheCAqIHF3ICsgYXcgKiBxeCArIGF5ICogcXogLSBheiAqIHF5O1xuICBvdXRbMV0gPSBheSAqIHF3ICsgYXcgKiBxeSArIGF6ICogcXggLSBheCAqIHF6O1xuICBvdXRbMl0gPSBheiAqIHF3ICsgYXcgKiBxeiArIGF4ICogcXkgLSBheSAqIHF4O1xuICBvdXRbM10gPSBhdyAqIHF3IC0gYXggKiBxeCAtIGF5ICogcXkgLSBheiAqIHF6O1xuICBheCA9IGFbNF07XG4gIGF5ID0gYVs1XTtcbiAgYXogPSBhWzZdO1xuICBhdyA9IGFbN107XG4gIG91dFs0XSA9IGF4ICogcXcgKyBhdyAqIHF4ICsgYXkgKiBxeiAtIGF6ICogcXk7XG4gIG91dFs1XSA9IGF5ICogcXcgKyBhdyAqIHF5ICsgYXogKiBxeCAtIGF4ICogcXo7XG4gIG91dFs2XSA9IGF6ICogcXcgKyBhdyAqIHF6ICsgYXggKiBxeSAtIGF5ICogcXg7XG4gIG91dFs3XSA9IGF3ICogcXcgLSBheCAqIHF4IC0gYXkgKiBxeSAtIGF6ICogcXo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBieSBhIGdpdmVuIHF1YXRlcm5pb24gKHEgKiBhKVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gcm90YXRlIGJ5XHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVCeVF1YXRQcmVwZW5kKG91dCwgcSwgYSkge1xuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdLFxuICAgICAgYnggPSBhWzBdLFxuICAgICAgYnkgPSBhWzFdLFxuICAgICAgYnogPSBhWzJdLFxuICAgICAgYncgPSBhWzNdO1xuICBvdXRbMF0gPSBxeCAqIGJ3ICsgcXcgKiBieCArIHF5ICogYnogLSBxeiAqIGJ5O1xuICBvdXRbMV0gPSBxeSAqIGJ3ICsgcXcgKiBieSArIHF6ICogYnggLSBxeCAqIGJ6O1xuICBvdXRbMl0gPSBxeiAqIGJ3ICsgcXcgKiBieiArIHF4ICogYnkgLSBxeSAqIGJ4O1xuICBvdXRbM10gPSBxdyAqIGJ3IC0gcXggKiBieCAtIHF5ICogYnkgLSBxeiAqIGJ6O1xuICBieCA9IGFbNF07XG4gIGJ5ID0gYVs1XTtcbiAgYnogPSBhWzZdO1xuICBidyA9IGFbN107XG4gIG91dFs0XSA9IHF4ICogYncgKyBxdyAqIGJ4ICsgcXkgKiBieiAtIHF6ICogYnk7XG4gIG91dFs1XSA9IHF5ICogYncgKyBxdyAqIGJ5ICsgcXogKiBieCAtIHF4ICogYno7XG4gIG91dFs2XSA9IHF6ICogYncgKyBxdyAqIGJ6ICsgcXggKiBieSAtIHF5ICogYng7XG4gIG91dFs3XSA9IHF3ICogYncgLSBxeCAqIGJ4IC0gcXkgKiBieSAtIHF6ICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBhcm91bmQgYSBnaXZlbiBheGlzLiBEb2VzIHRoZSBub3JtYWxpc2F0aW9uIGF1dG9tYXRpY2FsbHlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBheGlzIHRoZSBheGlzIHRvIHJvdGF0ZSBhcm91bmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCBob3cgZmFyIHRoZSByb3RhdGlvbiBzaG91bGQgYmVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVBcm91bmRBeGlzKG91dCwgYSwgYXhpcywgcmFkKSB7XG4gIC8vU3BlY2lhbCBjYXNlIGZvciByYWQgPSAwXG4gIGlmIChNYXRoLmFicyhyYWQpIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBjb3B5KG91dCwgYSk7XG4gIH1cblxuICB2YXIgYXhpc0xlbmd0aCA9IE1hdGguc3FydChheGlzWzBdICogYXhpc1swXSArIGF4aXNbMV0gKiBheGlzWzFdICsgYXhpc1syXSAqIGF4aXNbMl0pO1xuICByYWQgPSByYWQgKiAwLjU7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGJ4ID0gcyAqIGF4aXNbMF0gLyBheGlzTGVuZ3RoO1xuICB2YXIgYnkgPSBzICogYXhpc1sxXSAvIGF4aXNMZW5ndGg7XG4gIHZhciBieiA9IHMgKiBheGlzWzJdIC8gYXhpc0xlbmd0aDtcbiAgdmFyIGJ3ID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGF4MSA9IGFbMF0sXG4gICAgICBheTEgPSBhWzFdLFxuICAgICAgYXoxID0gYVsyXSxcbiAgICAgIGF3MSA9IGFbM107XG4gIG91dFswXSA9IGF4MSAqIGJ3ICsgYXcxICogYnggKyBheTEgKiBieiAtIGF6MSAqIGJ5O1xuICBvdXRbMV0gPSBheTEgKiBidyArIGF3MSAqIGJ5ICsgYXoxICogYnggLSBheDEgKiBiejtcbiAgb3V0WzJdID0gYXoxICogYncgKyBhdzEgKiBieiArIGF4MSAqIGJ5IC0gYXkxICogYng7XG4gIG91dFszXSA9IGF3MSAqIGJ3IC0gYXgxICogYnggLSBheTEgKiBieSAtIGF6MSAqIGJ6O1xuICB2YXIgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddO1xuICBvdXRbNF0gPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5O1xuICBvdXRbNV0gPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6O1xuICBvdXRbNl0gPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4O1xuICBvdXRbN10gPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIGR1YWwgcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl07XG4gIG91dFs3XSA9IGFbN10gKyBiWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIGR1YWwgcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBheDAgPSBhWzBdLFxuICAgICAgYXkwID0gYVsxXSxcbiAgICAgIGF6MCA9IGFbMl0sXG4gICAgICBhdzAgPSBhWzNdLFxuICAgICAgYngxID0gYls0XSxcbiAgICAgIGJ5MSA9IGJbNV0sXG4gICAgICBiejEgPSBiWzZdLFxuICAgICAgYncxID0gYls3XSxcbiAgICAgIGF4MSA9IGFbNF0sXG4gICAgICBheTEgPSBhWzVdLFxuICAgICAgYXoxID0gYVs2XSxcbiAgICAgIGF3MSA9IGFbN10sXG4gICAgICBieDAgPSBiWzBdLFxuICAgICAgYnkwID0gYlsxXSxcbiAgICAgIGJ6MCA9IGJbMl0sXG4gICAgICBidzAgPSBiWzNdO1xuICBvdXRbMF0gPSBheDAgKiBidzAgKyBhdzAgKiBieDAgKyBheTAgKiBiejAgLSBhejAgKiBieTA7XG4gIG91dFsxXSA9IGF5MCAqIGJ3MCArIGF3MCAqIGJ5MCArIGF6MCAqIGJ4MCAtIGF4MCAqIGJ6MDtcbiAgb3V0WzJdID0gYXowICogYncwICsgYXcwICogYnowICsgYXgwICogYnkwIC0gYXkwICogYngwO1xuICBvdXRbM10gPSBhdzAgKiBidzAgLSBheDAgKiBieDAgLSBheTAgKiBieTAgLSBhejAgKiBiejA7XG4gIG91dFs0XSA9IGF4MCAqIGJ3MSArIGF3MCAqIGJ4MSArIGF5MCAqIGJ6MSAtIGF6MCAqIGJ5MSArIGF4MSAqIGJ3MCArIGF3MSAqIGJ4MCArIGF5MSAqIGJ6MCAtIGF6MSAqIGJ5MDtcbiAgb3V0WzVdID0gYXkwICogYncxICsgYXcwICogYnkxICsgYXowICogYngxIC0gYXgwICogYnoxICsgYXkxICogYncwICsgYXcxICogYnkwICsgYXoxICogYngwIC0gYXgxICogYnowO1xuICBvdXRbNl0gPSBhejAgKiBidzEgKyBhdzAgKiBiejEgKyBheDAgKiBieTEgLSBheTAgKiBieDEgKyBhejEgKiBidzAgKyBhdzEgKiBiejAgKyBheDEgKiBieTAgLSBheTEgKiBieDA7XG4gIG91dFs3XSA9IGF3MCAqIGJ3MSAtIGF4MCAqIGJ4MSAtIGF5MCAqIGJ5MSAtIGF6MCAqIGJ6MSArIGF3MSAqIGJ3MCAtIGF4MSAqIGJ4MCAtIGF5MSAqIGJ5MCAtIGF6MSAqIGJ6MDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogU2NhbGVzIGEgZHVhbCBxdWF0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgZHVhbCBxdWF0IGJ5XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgb3V0WzRdID0gYVs0XSAqIGI7XG4gIG91dFs1XSA9IGFbNV0gKiBiO1xuICBvdXRbNl0gPSBhWzZdICogYjtcbiAgb3V0WzddID0gYVs3XSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIGR1YWwgcXVhdCdzIChUaGUgZG90IHByb2R1Y3Qgb2YgdGhlIHJlYWwgcGFydHMpXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZG90ID0gcXVhdC5kb3Q7XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBkdWFsIHF1YXRzJ3NcclxuICogTk9URTogVGhlIHJlc3VsdGluZyBkdWFsIHF1YXRlcm5pb25zIHdvbid0IGFsd2F5cyBiZSBub3JtYWxpemVkIChUaGUgZXJyb3IgaXMgbW9zdCBub3RpY2VhYmxlIHdoZW4gdCA9IDAuNSlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0XHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAob3V0LCBhLCBiLCB0KSB7XG4gIHZhciBtdCA9IDEgLSB0O1xuICBpZiAoZG90KGEsIGIpIDwgMCkgdCA9IC10O1xuICBvdXRbMF0gPSBhWzBdICogbXQgKyBiWzBdICogdDtcbiAgb3V0WzFdID0gYVsxXSAqIG10ICsgYlsxXSAqIHQ7XG4gIG91dFsyXSA9IGFbMl0gKiBtdCArIGJbMl0gKiB0O1xuICBvdXRbM10gPSBhWzNdICogbXQgKyBiWzNdICogdDtcbiAgb3V0WzRdID0gYVs0XSAqIG10ICsgYls0XSAqIHQ7XG4gIG91dFs1XSA9IGFbNV0gKiBtdCArIGJbNV0gKiB0O1xuICBvdXRbNl0gPSBhWzZdICogbXQgKyBiWzZdICogdDtcbiAgb3V0WzddID0gYVs3XSAqIG10ICsgYls3XSAqIHQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgaW52ZXJzZSBvZiBhIGR1YWwgcXVhdC4gSWYgdGhleSBhcmUgbm9ybWFsaXplZCwgY29uanVnYXRlIGlzIGNoZWFwZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0IHRvIGNhbGN1bGF0ZSBpbnZlcnNlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgc3FsZW4gPSBzcXVhcmVkTGVuZ3RoKGEpO1xuICBvdXRbMF0gPSAtYVswXSAvIHNxbGVuO1xuICBvdXRbMV0gPSAtYVsxXSAvIHNxbGVuO1xuICBvdXRbMl0gPSAtYVsyXSAvIHNxbGVuO1xuICBvdXRbM10gPSBhWzNdIC8gc3FsZW47XG4gIG91dFs0XSA9IC1hWzRdIC8gc3FsZW47XG4gIG91dFs1XSA9IC1hWzVdIC8gc3FsZW47XG4gIG91dFs2XSA9IC1hWzZdIC8gc3FsZW47XG4gIG91dFs3XSA9IGFbN10gLyBzcWxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2YgYSBkdWFsIHF1YXRcclxuICogSWYgdGhlIGR1YWwgcXVhdGVybmlvbiBpcyBub3JtYWxpemVkLCB0aGlzIGZ1bmN0aW9uIGlzIGZhc3RlciB0aGFuIHF1YXQyLmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHF1YXQgdG8gY2FsY3VsYXRlIGNvbmp1Z2F0ZSBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmp1Z2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gLWFbNF07XG4gIG91dFs1XSA9IC1hWzVdO1xuICBvdXRbNl0gPSAtYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBkdWFsIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXQgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuZ3RoID0gcXVhdC5sZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Mi5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSBkdWFsIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXQgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxdWFyZWRMZW5ndGggPSBxdWF0LnNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Mi5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSBkdWFsIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciBtYWduaXR1ZGUgPSBzcXVhcmVkTGVuZ3RoKGEpO1xuXG4gIGlmIChtYWduaXR1ZGUgPiAwKSB7XG4gICAgbWFnbml0dWRlID0gTWF0aC5zcXJ0KG1hZ25pdHVkZSk7XG4gICAgdmFyIGEwID0gYVswXSAvIG1hZ25pdHVkZTtcbiAgICB2YXIgYTEgPSBhWzFdIC8gbWFnbml0dWRlO1xuICAgIHZhciBhMiA9IGFbMl0gLyBtYWduaXR1ZGU7XG4gICAgdmFyIGEzID0gYVszXSAvIG1hZ25pdHVkZTtcbiAgICB2YXIgYjAgPSBhWzRdO1xuICAgIHZhciBiMSA9IGFbNV07XG4gICAgdmFyIGIyID0gYVs2XTtcbiAgICB2YXIgYjMgPSBhWzddO1xuICAgIHZhciBhX2RvdF9iID0gYTAgKiBiMCArIGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMztcbiAgICBvdXRbMF0gPSBhMDtcbiAgICBvdXRbMV0gPSBhMTtcbiAgICBvdXRbMl0gPSBhMjtcbiAgICBvdXRbM10gPSBhMztcbiAgICBvdXRbNF0gPSAoYjAgLSBhMCAqIGFfZG90X2IpIC8gbWFnbml0dWRlO1xuICAgIG91dFs1XSA9IChiMSAtIGExICogYV9kb3RfYikgLyBtYWduaXR1ZGU7XG4gICAgb3V0WzZdID0gKGIyIC0gYTIgKiBhX2RvdF9iKSAvIG1hZ25pdHVkZTtcbiAgICBvdXRbN10gPSAoYjMgLSBhMyAqIGFfZG90X2IpIC8gbWFnbml0dWRlO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZHVhbCBxdWF0ZW5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXRlcm5pb24gdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVhbCBxdWF0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdxdWF0MignICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcsICcgKyBhWzRdICsgJywgJyArIGFbNV0gKyAnLCAnICsgYVs2XSArICcsICcgKyBhWzddICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGR1YWwgcXVhdGVybmlvbnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBkdWFsIHF1YXRlcm5pb24uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBkdWFsIHF1YXRlcm5pb24uXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBkdWFsIHF1YXRlcm5pb25zIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM10gJiYgYVs0XSA9PT0gYls0XSAmJiBhWzVdID09PSBiWzVdICYmIGFbNl0gPT09IGJbNl0gJiYgYVs3XSA9PT0gYls3XTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBkdWFsIHF1YXRlcm5pb25zIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZmlyc3QgZHVhbCBxdWF0LlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBiIHRoZSBzZWNvbmQgZHVhbCBxdWF0LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgZHVhbCBxdWF0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdLFxuICAgICAgYTYgPSBhWzZdLFxuICAgICAgYTcgPSBhWzddO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdLFxuICAgICAgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdLFxuICAgICAgYjYgPSBiWzZdLFxuICAgICAgYjcgPSBiWzddO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpICYmIE1hdGguYWJzKGE0IC0gYjQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE0KSwgTWF0aC5hYnMoYjQpKSAmJiBNYXRoLmFicyhhNSAtIGI1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNSksIE1hdGguYWJzKGI1KSkgJiYgTWF0aC5hYnMoYTYgLSBiNikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTYpLCBNYXRoLmFicyhiNikpICYmIE1hdGguYWJzKGE3IC0gYjcpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE3KSwgTWF0aC5hYnMoYjcpKTtcbn0iLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAyIERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbW9kdWxlIHZlYzJcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWMyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgyKTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgyKTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzIgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgsIHkpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDIpO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzIgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgeCwgeSkge1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAvIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5jZWlsIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNlaWxcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNlaWwob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguY2VpbChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5jZWlsKGFbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguZmxvb3IgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gZmxvb3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb29yKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmZsb29yKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmZsb29yKGFbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWluKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXgob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLnJvdW5kIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIHJvdW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5yb3VuZChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5yb3VuZChhWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICB5ID0gYlsxXSAtIGFbMV07XG4gIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZERpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXSxcbiAgICAgIHkgPSBiWzFdIC0gYVsxXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWRMZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XG59XG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKG91dCwgYSkge1xuICBvdXRbMF0gPSAxLjAgLyBhWzBdO1xuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIHZhciBsZW4gPSB4ICogeCArIHkgKiB5O1xuXG4gIGlmIChsZW4gPiAwKSB7XG4gICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gIH1cblxuICBvdXRbMF0gPSBhWzBdICogbGVuO1xuICBvdXRbMV0gPSBhWzFdICogbGVuO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRvdChhLCBiKSB7XG4gIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO1xufVxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICogTm90ZSB0aGF0IHRoZSBjcm9zcyBwcm9kdWN0IG11c3QgYnkgZGVmaW5pdGlvbiBwcm9kdWNlIGEgM0QgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcm9zcyhvdXQsIGEsIGIpIHtcbiAgdmFyIHogPSBhWzBdICogYlsxXSAtIGFbMV0gKiBiWzBdO1xuICBvdXRbMF0gPSBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSB6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAob3V0LCBhLCBiLCB0KSB7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV07XG4gIG91dFswXSA9IGF4ICsgdCAqIChiWzBdIC0gYXgpO1xuICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCwgc2NhbGUpIHtcbiAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XG4gIHZhciByID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xuICBvdXRbMF0gPSBNYXRoLmNvcyhyKSAqIHNjYWxlO1xuICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0Mn0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDIob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5O1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bM10gKiB5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MmQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzNdICogeSArIG1bNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0M1xyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQzfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MyhvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVszXSAqIHkgKyBtWzZdO1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQ0XHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzAnXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQ0KG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bMTJdO1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bNV0gKiB5ICsgbVsxM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlIGEgMkQgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IFRoZSByZWNlaXZpbmcgdmVjMlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgVGhlIHZlYzIgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIGIsIGMpIHtcbiAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuICB2YXIgcDAgPSBhWzBdIC0gYlswXSxcbiAgICAgIHAxID0gYVsxXSAtIGJbMV0sXG4gICAgICBzaW5DID0gTWF0aC5zaW4oYyksXG4gICAgICBjb3NDID0gTWF0aC5jb3MoYyk7IC8vcGVyZm9ybSByb3RhdGlvbiBhbmQgdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSBwMCAqIGNvc0MgLSBwMSAqIHNpbkMgKyBiWzBdO1xuICBvdXRbMV0gPSBwMCAqIHNpbkMgKyBwMSAqIGNvc0MgKyBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gMkQgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFuZ2xlKGEsIGIpIHtcbiAgdmFyIHgxID0gYVswXSxcbiAgICAgIHkxID0gYVsxXSxcbiAgICAgIHgyID0gYlswXSxcbiAgICAgIHkyID0gYlsxXTtcbiAgdmFyIGxlbjEgPSB4MSAqIHgxICsgeTEgKiB5MTtcblxuICBpZiAobGVuMSA+IDApIHtcbiAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xuICAgIGxlbjEgPSAxIC8gTWF0aC5zcXJ0KGxlbjEpO1xuICB9XG5cbiAgdmFyIGxlbjIgPSB4MiAqIHgyICsgeTIgKiB5MjtcblxuICBpZiAobGVuMiA+IDApIHtcbiAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xuICAgIGxlbjIgPSAxIC8gTWF0aC5zcXJ0KGxlbjIpO1xuICB9XG5cbiAgdmFyIGNvc2luZSA9ICh4MSAqIHgyICsgeTEgKiB5MikgKiBsZW4xICogbGVuMjtcblxuICBpZiAoY29zaW5lID4gMS4wKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAoY29zaW5lIDwgLTEuMCkge1xuICAgIHJldHVybiBNYXRoLlBJO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBNYXRoLmFjb3MoY29zaW5lKTtcbiAgfVxufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzIgdG8gemVyb1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gemVybyhvdXQpIHtcbiAgb3V0WzBdID0gMC4wO1xuICBvdXRbMV0gPSAwLjA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiAndmVjMignICsgYVswXSArICcsICcgKyBhWzFdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgZXhhY3RseSBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWMyfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpdiA9IGRpdmlkZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuZGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXN0ID0gZGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckRpc3QgPSBzcXVhcmVkRGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMycy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMyLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzJzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSAyO1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XG4gICAgICBhW2ldID0gdmVjWzBdO1xuICAgICAgYVtpICsgMV0gPSB2ZWNbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH07XG59KCk7IiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgQ2lyY2xlQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2NpcmNsZV9idWNrZXQnO1xuaW1wb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnR9IGZyb20gJy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7Z2V0TWF4aW11bVBhaW50VmFsdWUsIHRyYW5zbGF0ZURpc3RhbmNlLCB0cmFuc2xhdGV9IGZyb20gJy4uL3F1ZXJ5X3V0aWxzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vY2lyY2xlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgTGF5b3V0LCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5pbXBvcnQge3ZlYzR9IGZyb20gJ2dsLW1hdHJpeCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7QnVja2V0LCBCdWNrZXRQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0UHJvcHMsIFBhaW50UHJvcHN9IGZyb20gJy4vY2lyY2xlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIENpcmNsZVN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVCdWNrZXQocGFyYW1ldGVyczogQnVja2V0UGFyYW1ldGVyczwqPikge1xuICAgICAgICByZXR1cm4gbmV3IENpcmNsZUJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cyhidWNrZXQ6IEJ1Y2tldCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGNpcmNsZUJ1Y2tldDogQ2lyY2xlQnVja2V0PENpcmNsZVN0eWxlTGF5ZXI+ID0gKGJ1Y2tldDogYW55KTtcbiAgICAgICAgcmV0dXJuIGdldE1heGltdW1QYWludFZhbHVlKCdjaXJjbGUtcmFkaXVzJywgdGhpcywgY2lyY2xlQnVja2V0KSArXG4gICAgICAgICAgICBnZXRNYXhpbXVtUGFpbnRWYWx1ZSgnY2lyY2xlLXN0cm9rZS13aWR0aCcsIHRoaXMsIGNpcmNsZUJ1Y2tldCkgK1xuICAgICAgICAgICAgdHJhbnNsYXRlRGlzdGFuY2UodGhpcy5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUnKSk7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQb2x5Z29uID0gdHJhbnNsYXRlKHF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICB0cmFuc2Zvcm0uYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gdGhpcy5wYWludC5nZXQoJ2NpcmNsZS1yYWRpdXMnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBzdHJva2UgPSB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXN0cm9rZS13aWR0aCcpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IHNpemUgID0gcmFkaXVzICsgc3Ryb2tlO1xuXG4gICAgICAgIC8vIEZvciBwaXRjaC1hbGlnbm1lbnQ6IG1hcCwgY29tcGFyZSBmZWF0dXJlIGdlb21ldHJ5IHRvIHF1ZXJ5IGdlb21ldHJ5IGluIHRoZSBwbGFuZSBvZiB0aGUgdGlsZVxuICAgICAgICAvLyAvLyBPdGhlcndpc2UsIGNvbXBhcmUgZ2VvbWV0cnkgaW4gdGhlIHBsYW5lIG9mIHRoZSB2aWV3cG9ydFxuICAgICAgICAvLyAvLyBBIGNpcmNsZSB3aXRoIGZpeGVkIHNjYWxpbmcgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0IGdldHMgbGFyZ2VyIGluIHRpbGUgc3BhY2UgYXMgaXQgbW92ZXMgaW50byB0aGUgZGlzdGFuY2VcbiAgICAgICAgLy8gLy8gQSBjaXJjbGUgd2l0aCBmaXhlZCBzY2FsaW5nIHJlbGF0aXZlIHRvIHRoZSBtYXAgZ2V0cyBzbWFsbGVyIGluIHZpZXdwb3J0IHNwYWNlIGFzIGl0IG1vdmVzIGludG8gdGhlIGRpc3RhbmNlXG4gICAgICAgIGNvbnN0IGFsaWduV2l0aE1hcCA9IHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFBvbHlnb24gPSBhbGlnbldpdGhNYXAgPyB0cmFuc2xhdGVkUG9seWdvbiA6IHByb2plY3RRdWVyeUdlb21ldHJ5KHRyYW5zbGF0ZWRQb2x5Z29uLCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU2l6ZSA9IGFsaWduV2l0aE1hcCA/IHNpemUgKiBwaXhlbHNUb1RpbGVVbml0cyA6IHNpemU7XG5cbiAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHJpbmcpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUG9pbnQgPSBhbGlnbldpdGhNYXAgPyBwb2ludCA6IHByb2plY3RQb2ludChwb2ludCwgcGl4ZWxQb3NNYXRyaXgpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGFkanVzdGVkU2l6ZSA9IHRyYW5zZm9ybWVkU2l6ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRDZW50ZXIgPSB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIFtwb2ludC54LCBwb2ludC55LCAwLCAxXSwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLXNjYWxlJykgPT09ICd2aWV3cG9ydCcgJiYgdGhpcy5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTaXplICo9IHByb2plY3RlZENlbnRlclszXSAvIHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1zY2FsZScpID09PSAnbWFwJyAmJiB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLWFsaWdubWVudCcpID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkanVzdGVkU2l6ZSAqPSB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHByb2plY3RlZENlbnRlclszXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocG9seWdvbkludGVyc2VjdHNCdWZmZXJlZFBvaW50KHRyYW5zZm9ybWVkUG9seWdvbiwgdHJhbnNmb3JtZWRQb2ludCwgYWRqdXN0ZWRTaXplKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcm9qZWN0UG9pbnQocDogUG9pbnQsIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpIHtcbiAgICBjb25zdCBwb2ludCA9IHZlYzQudHJhbnNmb3JtTWF0NChbXSwgW3AueCwgcC55LCAwLCAxXSwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgIHJldHVybiBuZXcgUG9pbnQocG9pbnRbMF0gLyBwb2ludFszXSwgcG9pbnRbMV0gLyBwb2ludFszXSk7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RRdWVyeUdlb21ldHJ5KHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiwgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSkge1xuICAgIHJldHVybiBxdWVyeUdlb21ldHJ5Lm1hcCgocCkgPT4ge1xuICAgICAgICByZXR1cm4gcHJvamVjdFBvaW50KHAsIHBpeGVsUG9zTWF0cml4KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDaXJjbGVCdWNrZXQgZnJvbSAnLi9jaXJjbGVfYnVja2V0JztcblxuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuaW1wb3J0IHR5cGUgSGVhdG1hcFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcic7XG5cbmNsYXNzIEhlYXRtYXBCdWNrZXQgZXh0ZW5kcyBDaXJjbGVCdWNrZXQ8SGVhdG1hcFN0eWxlTGF5ZXI+IHtcbiAgICAvLyBOZWVkZWQgZm9yIGZsb3cgdG8gYWNjZXB0IG9taXQ6IFsnbGF5ZXJzJ10gYmVsb3csIGR1ZSB0b1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy80MjYyXG4gICAgbGF5ZXJzOiBBcnJheTxIZWF0bWFwU3R5bGVMYXllcj47XG59XG5cbnJlZ2lzdGVyKCdIZWF0bWFwQnVja2V0JywgSGVhdG1hcEJ1Y2tldCwge29taXQ6IFsnbGF5ZXJzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgSGVhdG1hcEJ1Y2tldDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuZXhwb3J0IHR5cGUgU2l6ZSA9IHtcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyXG59O1xuXG50eXBlIFBvaW50ID0ge1xuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXJcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUltYWdlKGltYWdlOiAqLCB7d2lkdGgsIGhlaWdodH06IFNpemUsIGNoYW5uZWxzOiBudW1iZXIsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogY2hhbm5lbHMpO1xuICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChkYXRhLmxlbmd0aCAhPT0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscykge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWlzbWF0Y2hlZCBpbWFnZSBzaXplJyk7XG4gICAgfVxuICAgIGltYWdlLndpZHRoID0gd2lkdGg7XG4gICAgaW1hZ2UuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGltYWdlLmRhdGEgPSBkYXRhO1xuICAgIHJldHVybiBpbWFnZTtcbn1cblxuZnVuY3Rpb24gcmVzaXplSW1hZ2UoaW1hZ2U6ICosIHt3aWR0aCwgaGVpZ2h0fTogU2l6ZSwgY2hhbm5lbHM6IG51bWJlcikge1xuICAgIGlmICh3aWR0aCA9PT0gaW1hZ2Uud2lkdGggJiYgaGVpZ2h0ID09PSBpbWFnZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0ltYWdlID0gY3JlYXRlSW1hZ2Uoe30sIHt3aWR0aCwgaGVpZ2h0fSwgY2hhbm5lbHMpO1xuXG4gICAgY29weUltYWdlKGltYWdlLCBuZXdJbWFnZSwge3g6IDAsIHk6IDB9LCB7eDogMCwgeTogMH0sIHtcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKGltYWdlLndpZHRoLCB3aWR0aCksXG4gICAgICAgIGhlaWdodDogTWF0aC5taW4oaW1hZ2UuaGVpZ2h0LCBoZWlnaHQpXG4gICAgfSwgY2hhbm5lbHMpO1xuXG4gICAgaW1hZ2Uud2lkdGggPSB3aWR0aDtcbiAgICBpbWFnZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgaW1hZ2UuZGF0YSA9IG5ld0ltYWdlLmRhdGE7XG59XG5cbmZ1bmN0aW9uIGNvcHlJbWFnZShzcmNJbWc6ICosIGRzdEltZzogKiwgc3JjUHQ6IFBvaW50LCBkc3RQdDogUG9pbnQsIHNpemU6IFNpemUsIGNoYW5uZWxzOiBudW1iZXIpIHtcbiAgICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZHN0SW1nO1xuICAgIH1cblxuICAgIGlmIChzaXplLndpZHRoID4gc3JjSW1nLndpZHRoIHx8XG4gICAgICAgIHNpemUuaGVpZ2h0ID4gc3JjSW1nLmhlaWdodCB8fFxuICAgICAgICBzcmNQdC54ID4gc3JjSW1nLndpZHRoIC0gc2l6ZS53aWR0aCB8fFxuICAgICAgICBzcmNQdC55ID4gc3JjSW1nLmhlaWdodCAtIHNpemUuaGVpZ2h0KSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHNpemUud2lkdGggPiBkc3RJbWcud2lkdGggfHxcbiAgICAgICAgc2l6ZS5oZWlnaHQgPiBkc3RJbWcuaGVpZ2h0IHx8XG4gICAgICAgIGRzdFB0LnggPiBkc3RJbWcud2lkdGggLSBzaXplLndpZHRoIHx8XG4gICAgICAgIGRzdFB0LnkgPiBkc3RJbWcuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weScpO1xuICAgIH1cblxuICAgIGNvbnN0IHNyY0RhdGEgPSBzcmNJbWcuZGF0YTtcbiAgICBjb25zdCBkc3REYXRhID0gZHN0SW1nLmRhdGE7XG5cbiAgICBhc3NlcnQoc3JjRGF0YSAhPT0gZHN0RGF0YSk7XG5cbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgY29uc3Qgc3JjT2Zmc2V0ID0gKChzcmNQdC55ICsgeSkgKiBzcmNJbWcud2lkdGggKyBzcmNQdC54KSAqIGNoYW5uZWxzO1xuICAgICAgICBjb25zdCBkc3RPZmZzZXQgPSAoKGRzdFB0LnkgKyB5KSAqIGRzdEltZy53aWR0aCArIGRzdFB0LngpICogY2hhbm5lbHM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZS53aWR0aCAqIGNoYW5uZWxzOyBpKyspIHtcbiAgICAgICAgICAgIGRzdERhdGFbZHN0T2Zmc2V0ICsgaV0gPSBzcmNEYXRhW3NyY09mZnNldCArIGldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRzdEltZztcbn1cblxuZXhwb3J0IGNsYXNzIEFscGhhSW1hZ2Uge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgZGF0YTogVWludDhBcnJheTtcblxuICAgIGNvbnN0cnVjdG9yKHNpemU6IFNpemUsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgY3JlYXRlSW1hZ2UodGhpcywgc2l6ZSwgMSwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmVzaXplKHNpemU6IFNpemUpIHtcbiAgICAgICAgcmVzaXplSW1hZ2UodGhpcywgc2l6ZSwgMSk7XG4gICAgfVxuXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxwaGFJbWFnZSh7d2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHR9LCBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29weShzcmNJbWc6IEFscGhhSW1hZ2UsIGRzdEltZzogQWxwaGFJbWFnZSwgc3JjUHQ6IFBvaW50LCBkc3RQdDogUG9pbnQsIHNpemU6IFNpemUpIHtcbiAgICAgICAgY29weUltYWdlKHNyY0ltZywgZHN0SW1nLCBzcmNQdCwgZHN0UHQsIHNpemUsIDEpO1xuICAgIH1cbn1cblxuLy8gTm90IHByZW11bHRpcGxpZWQsIGJlY2F1c2UgSW1hZ2VEYXRhIGlzIG5vdCBwcmVtdWx0aXBsaWVkLlxuLy8gVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIG11c3QgYmUgdXNlZCB3aGVuIHVwbG9hZGluZyB0byBhIHRleHR1cmUuXG5leHBvcnQgY2xhc3MgUkdCQUltYWdlIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuXG4gICAgLy8gZGF0YSBtdXN0IGJlIGEgVWludDhBcnJheSBpbnN0ZWFkIG9mIFVpbnQ4Q2xhbXBlZEFycmF5IGJlY2F1c2UgdGV4SW1hZ2UyRCBkb2VzIG5vdFxuICAgIC8vIHN1cHBvcnQgVWludDhDbGFtcGVkQXJyYXkgaW4gYWxsIGJyb3dzZXJzXG4gICAgZGF0YTogVWludDhBcnJheTtcblxuICAgIGNvbnN0cnVjdG9yKHNpemU6IFNpemUsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgY3JlYXRlSW1hZ2UodGhpcywgc2l6ZSwgNCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmVzaXplKHNpemU6IFNpemUpIHtcbiAgICAgICAgcmVzaXplSW1hZ2UodGhpcywgc2l6ZSwgNCk7XG4gICAgfVxuXG4gICAgcmVwbGFjZShkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXksIGNvcHk/OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0KGRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHR9LCBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29weShzcmNJbWc6IFJHQkFJbWFnZSB8IEltYWdlRGF0YSwgZHN0SW1nOiBSR0JBSW1hZ2UsIHNyY1B0OiBQb2ludCwgZHN0UHQ6IFBvaW50LCBzaXplOiBTaXplKSB7XG4gICAgICAgIGNvcHlJbWFnZShzcmNJbWcsIGRzdEltZywgc3JjUHQsIGRzdFB0LCBzaXplLCA0KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdBbHBoYUltYWdlJywgQWxwaGFJbWFnZSk7XG5yZWdpc3RlcignUkdCQUltYWdlJywgUkdCQUltYWdlKTtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiaGVhdG1hcC1yYWRpdXNcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJoZWF0bWFwLXdlaWdodFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhlYXRtYXAtaW50ZW5zaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJoZWF0bWFwLWNvbG9yXCI6IENvbG9yUmFtcFByb3BlcnR5LFxuICAgIFwiaGVhdG1hcC1vcGFjaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJoZWF0bWFwLXJhZGl1c1wiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hlYXRtYXBcIl1bXCJoZWF0bWFwLXJhZGl1c1wiXSksXG4gICAgXCJoZWF0bWFwLXdlaWdodFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hlYXRtYXBcIl1bXCJoZWF0bWFwLXdlaWdodFwiXSksXG4gICAgXCJoZWF0bWFwLWludGVuc2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtaW50ZW5zaXR5XCJdKSxcbiAgICBcImhlYXRtYXAtY29sb3JcIjogbmV3IENvbG9yUmFtcFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hlYXRtYXBcIl1bXCJoZWF0bWFwLWNvbG9yXCJdKSxcbiAgICBcImhlYXRtYXAtb3BhY2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtb3BhY2l0eVwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4vaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9pbmRleCc7XG5cbi8qKlxuICogR2l2ZW4gYW4gZXhwcmVzc2lvbiB0aGF0IHNob3VsZCBldmFsdWF0ZSB0byBhIGNvbG9yIHJhbXAsIHJldHVyblxuICogYSAyNTZ4MSBweCBSR0JBIGltYWdlIHJlcHJlc2VudGluZyB0aGF0IHJhbXAgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJDb2xvclJhbXAoZXhwcmVzc2lvbjogU3R5bGVQcm9wZXJ0eUV4cHJlc3Npb24sIGNvbG9yUmFtcEV2YWx1YXRpb25QYXJhbWV0ZXI6IHN0cmluZyk6IFJHQkFJbWFnZSB7XG4gICAgY29uc3QgY29sb3JSYW1wRGF0YSA9IG5ldyBVaW50OEFycmF5KDI1NiAqIDQpO1xuICAgIGNvbnN0IGV2YWx1YXRpb25HbG9iYWxzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgMjU2OyBpKyssIGogKz0gNCkge1xuICAgICAgICBldmFsdWF0aW9uR2xvYmFsc1tjb2xvclJhbXBFdmFsdWF0aW9uUGFyYW1ldGVyXSA9IGkgLyAyNTU7XG4gICAgICAgIGNvbnN0IHB4Q29sb3IgPSBleHByZXNzaW9uLmV2YWx1YXRlKChldmFsdWF0aW9uR2xvYmFsczogYW55KSk7XG4gICAgICAgIC8vIHRoZSBjb2xvcnMgYXJlIGJlaW5nIHVucHJlbXVsdGlwbGllZCBiZWNhdXNlIENvbG9yIHVzZXNcbiAgICAgICAgLy8gcHJlbXVsdGlwbGllZCB2YWx1ZXMsIGFuZCB0aGUgVGV4dHVyZSBjbGFzcyBleHBlY3RzIHVucHJlbXVsdGlwbGllZCBvbmVzXG4gICAgICAgIGNvbG9yUmFtcERhdGFbaiArIDBdID0gTWF0aC5mbG9vcihweENvbG9yLnIgKiAyNTUgLyBweENvbG9yLmEpO1xuICAgICAgICBjb2xvclJhbXBEYXRhW2ogKyAxXSA9IE1hdGguZmxvb3IocHhDb2xvci5nICogMjU1IC8gcHhDb2xvci5hKTtcbiAgICAgICAgY29sb3JSYW1wRGF0YVtqICsgMl0gPSBNYXRoLmZsb29yKHB4Q29sb3IuYiAqIDI1NSAvIHB4Q29sb3IuYSk7XG4gICAgICAgIGNvbG9yUmFtcERhdGFbaiArIDNdID0gTWF0aC5mbG9vcihweENvbG9yLmEgKiAyNTUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUkdCQUltYWdlKHt3aWR0aDogMjU2LCBoZWlnaHQ6IDF9LCBjb2xvclJhbXBEYXRhKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IEhlYXRtYXBCdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvaGVhdG1hcF9idWNrZXQnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uLy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9oZWF0bWFwX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHJlbmRlckNvbG9yUmFtcCBmcm9tICcuLi8uLi91dGlsL2NvbG9yX3JhbXAnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBUZXh0dXJlIGZyb20gJy4uLy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCB0eXBlIEZyYW1lYnVmZmVyIGZyb20gJy4uLy4uL2dsL2ZyYW1lYnVmZmVyJztcbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2hlYXRtYXBfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgSGVhdG1hcFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcblxuICAgIGhlYXRtYXBGYm86ID9GcmFtZWJ1ZmZlcjtcbiAgICBjb2xvclJhbXA6IFJHQkFJbWFnZTtcbiAgICBjb2xvclJhbXBUZXh0dXJlOiA/VGV4dHVyZTtcblxuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNyZWF0ZUJ1Y2tldChvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIZWF0bWFwQnVja2V0KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSBjb2xvciByYW1wIHRleHR1cmUgaXMgZ2VuZXJhdGVkIGZvciBkZWZhdWx0IGhlYXRtYXAgY29sb3IgdG9vXG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpO1xuICAgIH1cblxuICAgIF9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdoZWF0bWFwLWNvbG9yJykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlQ29sb3JSYW1wKCkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWydoZWF0bWFwLWNvbG9yJ10udmFsdWUuZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5jb2xvclJhbXAgPSByZW5kZXJDb2xvclJhbXAoZXhwcmVzc2lvbiwgJ2hlYXRtYXBEZW5zaXR5Jyk7XG4gICAgICAgIHRoaXMuY29sb3JSYW1wVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVzaXplKCkge1xuICAgICAgICBpZiAodGhpcy5oZWF0bWFwRmJvKSB7XG4gICAgICAgICAgICB0aGlzLmhlYXRtYXBGYm8uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5oZWF0bWFwRmJvID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXJ5UmFkaXVzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUoKTogYm9vbGVhbiAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFzT2Zmc2NyZWVuUGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFpbnQuZ2V0KCdoZWF0bWFwLW9wYWNpdHknKSAhPT0gMCAmJiB0aGlzLnZpc2liaWxpdHkgIT09ICdub25lJztcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYXRtYXBTdHlsZUxheWVyO1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PENvbG9yPixcbiAgICBcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Q29sb3I+LFxuICAgIFwiaGlsbHNoYWRlLWFjY2VudC1jb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGlsbHNoYWRlXCJdW1wiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIl0pLFxuICAgIFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCJdKSxcbiAgICBcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIl0pLFxuICAgIFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGlsbHNoYWRlXCJdW1wiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiXSksXG4gICAgXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCJdKSxcbiAgICBcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9oaWxsc2hhZGVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2hpbGxzaGFkZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBIaWxsc2hhZGVTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgaGFzT2Zmc2NyZWVuUGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFpbnQuZ2V0KCdoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uJykgIT09IDAgJiYgdGhpcy52aXNpYmlsaXR5ICE9PSAnbm9uZSc7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIaWxsc2hhZGVTdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmNvbnN0IGxheW91dCA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3BvcycsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9XG5dLCA0KTtcblxuZXhwb3J0IGRlZmF1bHQgbGF5b3V0O1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGF5b3V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUgfHwgb3V0ZXJOb2RlLm5leHQgPT09IG91dGVyTm9kZS5wcmV2KSByZXR1cm4gdHJpYW5nbGVzO1xuXG4gICAgdmFyIG1pblgsIG1pblksIG1heFgsIG1heFksIHgsIHksIGludlNpemU7XG5cbiAgICBpZiAoaGFzSG9sZXMpIG91dGVyTm9kZSA9IGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSk7XG5cbiAgICAvLyBpZiB0aGUgc2hhcGUgaXMgbm90IHRvbyBzaW1wbGUsIHdlJ2xsIHVzZSB6LW9yZGVyIGN1cnZlIGhhc2ggbGF0ZXI7IGNhbGN1bGF0ZSBwb2x5Z29uIGJib3hcbiAgICBpZiAoZGF0YS5sZW5ndGggPiA4MCAqIGRpbSkge1xuICAgICAgICBtaW5YID0gbWF4WCA9IGRhdGFbMF07XG4gICAgICAgIG1pblkgPSBtYXhZID0gZGF0YVsxXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gZGltOyBpIDwgb3V0ZXJMZW47IGkgKz0gZGltKSB7XG4gICAgICAgICAgICB4ID0gZGF0YVtpXTtcbiAgICAgICAgICAgIHkgPSBkYXRhW2kgKyAxXTtcbiAgICAgICAgICAgIGlmICh4IDwgbWluWCkgbWluWCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA8IG1pblkpIG1pblkgPSB5O1xuICAgICAgICAgICAgaWYgKHggPiBtYXhYKSBtYXhYID0geDtcbiAgICAgICAgICAgIGlmICh5ID4gbWF4WSkgbWF4WSA9IHk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtaW5YLCBtaW5ZIGFuZCBpbnZTaXplIGFyZSBsYXRlciB1c2VkIHRvIHRyYW5zZm9ybSBjb29yZHMgaW50byBpbnRlZ2VycyBmb3Igei1vcmRlciBjYWxjdWxhdGlvblxuICAgICAgICBpbnZTaXplID0gTWF0aC5tYXgobWF4WCAtIG1pblgsIG1heFkgLSBtaW5ZKTtcbiAgICAgICAgaW52U2l6ZSA9IGludlNpemUgIT09IDAgPyAxIC8gaW52U2l6ZSA6IDA7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIGksIGxhc3Q7XG5cbiAgICBpZiAoY2xvY2t3aXNlID09PSAoc2lnbmVkQXJlYShkYXRhLCBzdGFydCwgZW5kLCBkaW0pID4gMCkpIHtcbiAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gZW5kIC0gZGltOyBpID49IHN0YXJ0OyBpIC09IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH1cblxuICAgIGlmIChsYXN0ICYmIGVxdWFscyhsYXN0LCBsYXN0Lm5leHQpKSB7XG4gICAgICAgIHJlbW92ZU5vZGUobGFzdCk7XG4gICAgICAgIGxhc3QgPSBsYXN0Lm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSBicmVhaztcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgaW52U2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIGludlNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChpbnZTaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0ZXggbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0pO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCAyKTtcblxuICAgICAgICAgICAgLy8gYXMgYSBsYXN0IHJlc29ydCwgdHJ5IHNwbGl0dGluZyB0aGUgcmVtYWluaW5nIHBvbHlnb24gaW50byB0d29cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMikge1xuICAgICAgICAgICAgICAgIHNwbGl0RWFyY3V0KGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gY2hlY2sgd2hldGhlciBhIHBvbHlnb24gbm9kZSBmb3JtcyBhIHZhbGlkIGVhciB3aXRoIGFkamFjZW50IG5vZGVzXG5mdW5jdGlvbiBpc0VhcihlYXIpIHtcbiAgICB2YXIgYSA9IGVhci5wcmV2LFxuICAgICAgICBiID0gZWFyLFxuICAgICAgICBjID0gZWFyLm5leHQ7XG5cbiAgICBpZiAoYXJlYShhLCBiLCBjKSA+PSAwKSByZXR1cm4gZmFsc2U7IC8vIHJlZmxleCwgY2FuJ3QgYmUgYW4gZWFyXG5cbiAgICAvLyBub3cgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgb3RoZXIgcG9pbnRzIGluc2lkZSB0aGUgcG90ZW50aWFsIGVhclxuICAgIHZhciBwID0gZWFyLm5leHQubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBlYXIucHJldikge1xuICAgICAgICBpZiAocG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIGludlNpemUpIHtcbiAgICB2YXIgYSA9IGVhci5wcmV2LFxuICAgICAgICBiID0gZWFyLFxuICAgICAgICBjID0gZWFyLm5leHQ7XG5cbiAgICBpZiAoYXJlYShhLCBiLCBjKSA+PSAwKSByZXR1cm4gZmFsc2U7IC8vIHJlZmxleCwgY2FuJ3QgYmUgYW4gZWFyXG5cbiAgICAvLyB0cmlhbmdsZSBiYm94OyBtaW4gJiBtYXggYXJlIGNhbGN1bGF0ZWQgbGlrZSB0aGlzIGZvciBzcGVlZFxuICAgIHZhciBtaW5UWCA9IGEueCA8IGIueCA/IChhLnggPCBjLnggPyBhLnggOiBjLngpIDogKGIueCA8IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1pblRZID0gYS55IDwgYi55ID8gKGEueSA8IGMueSA/IGEueSA6IGMueSkgOiAoYi55IDwgYy55ID8gYi55IDogYy55KSxcbiAgICAgICAgbWF4VFggPSBhLnggPiBiLnggPyAoYS54ID4gYy54ID8gYS54IDogYy54KSA6IChiLnggPiBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtYXhUWSA9IGEueSA+IGIueSA/IChhLnkgPiBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA+IGMueSA/IGIueSA6IGMueSk7XG5cbiAgICAvLyB6LW9yZGVyIHJhbmdlIGZvciB0aGUgY3VycmVudCB0cmlhbmdsZSBiYm94O1xuICAgIHZhciBtaW5aID0gek9yZGVyKG1pblRYLCBtaW5UWSwgbWluWCwgbWluWSwgaW52U2l6ZSksXG4gICAgICAgIG1heFogPSB6T3JkZXIobWF4VFgsIG1heFRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblxuICAgIHZhciBwID0gZWFyLnByZXZaLFxuICAgICAgICBuID0gZWFyLm5leHRaO1xuXG4gICAgLy8gbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gYm90aCBkaXJlY3Rpb25zXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblogJiYgbiAmJiBuLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAucHJldlo7XG5cbiAgICAgICAgaWYgKG4gIT09IGVhci5wcmV2ICYmIG4gIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgbi54LCBuLnkpICYmXG4gICAgICAgICAgICBhcmVhKG4ucHJldiwgbiwgbi5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIG4gPSBuLm5leHRaO1xuICAgIH1cblxuICAgIC8vIGxvb2sgZm9yIHJlbWFpbmluZyBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIC8vIGxvb2sgZm9yIHJlbWFpbmluZyBwb2ludHMgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgd2hpbGUgKG4gJiYgbi56IDw9IG1heFopIHtcbiAgICAgICAgaWYgKG4gIT09IGVhci5wcmV2ICYmIG4gIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgbi54LCBuLnkpICYmXG4gICAgICAgICAgICBhcmVhKG4ucHJldiwgbiwgbi5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIG4gPSBuLm5leHRaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgaWYgKCFlcXVhbHMoYSwgYikgJiYgaW50ZXJzZWN0cyhhLCBwLCBwLm5leHQsIGIpICYmIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSkge1xuXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChhLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gocC5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGIuaSAvIGRpbSk7XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSB0d28gbm9kZXMgaW52b2x2ZWRcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocCk7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHAubmV4dCk7XG5cbiAgICAgICAgICAgIHAgPSBzdGFydCA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gZmlsdGVyUG9pbnRzKHApO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55ICYmIHAubmV4dC55ICE9PSBwLnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIGlmICh4ID09PSBoeCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaHkgPT09IHAueSkgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoeSA9PT0gcC5uZXh0LnkpIHJldHVybiBwLm5leHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChoeCA9PT0gcXgpIHJldHVybiBtOyAvLyBob2xlIHRvdWNoZXMgb3V0ZXIgc2VnbWVudDsgcGljayBsZWZ0bW9zdCBlbmRwb2ludFxuXG4gICAgLy8gbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgb2YgaG9sZSBwb2ludCwgc2VnbWVudCBpbnRlcnNlY3Rpb24gYW5kIGVuZHBvaW50O1xuICAgIC8vIGlmIHRoZXJlIGFyZSBubyBwb2ludHMgZm91bmQsIHdlIGhhdmUgYSB2YWxpZCBjb25uZWN0aW9uO1xuICAgIC8vIG90aGVyd2lzZSBjaG9vc2UgdGhlIHBvaW50IG9mIHRoZSBtaW5pbXVtIGFuZ2xlIHdpdGggdGhlIHJheSBhcyBjb25uZWN0aW9uIHBvaW50XG5cbiAgICB2YXIgc3RvcCA9IG0sXG4gICAgICAgIG14ID0gbS54LFxuICAgICAgICBteSA9IG0ueSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtO1xuXG4gICAgZG8ge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBteCAmJiBoeCAhPT0gcC54ICYmXG4gICAgICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGh5IDwgbXkgPyBoeCA6IHF4LCBoeSwgbXgsIG15LCBoeSA8IG15ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmIChsb2NhbGx5SW5zaWRlKHAsIGhvbGUpICYmXG4gICAgICAgICAgICAgICAgKHRhbiA8IHRhbk1pbiB8fCAodGFuID09PSB0YW5NaW4gJiYgKHAueCA+IG0ueCB8fCAocC54ID09PSBtLnggJiYgc2VjdG9yQ29udGFpbnNTZWN0b3IobSwgcCkpKSkpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdG9wKTtcblxuICAgIHJldHVybiBtO1xufVxuXG4vLyB3aGV0aGVyIHNlY3RvciBpbiB2ZXJ0ZXggbSBjb250YWlucyBzZWN0b3IgaW4gdmVydGV4IHAgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXNcbmZ1bmN0aW9uIHNlY3RvckNvbnRhaW5zU2VjdG9yKG0sIHApIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoYXJlYShtLnByZXYsIG0sIHAucHJldikgPCAwIHx8IGFyZWEocC5wcmV2LCBtLCBtLm5leHQpIDwgMCkgJiZcbiAgICAgICAgKGFyZWEobS5wcmV2LCBtLCBwLm5leHQpIDwgMCB8fCBhcmVhKHAubmV4dCwgbSwgbS5uZXh0KSA8IDApXG4gICAgKTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIGludlNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxU2l6ZSA9IGluU2l6ZTtcblxuICAgICAgICAgICAgd2hpbGUgKHBTaXplID4gMCB8fCAocVNpemUgPiAwICYmIHEpKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAocFNpemUgIT09IDAgJiYgKHFTaXplID09PSAwIHx8ICFxIHx8IHAueiA8PSBxLnopKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBpbnZlcnNlIG9mIHRoZSBsb25nZXIgc2lkZSBvZiBkYXRhIGJib3hcbmZ1bmN0aW9uIHpPcmRlcih4LCB5LCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG4gICAgLy8gY29vcmRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIG5vbi1uZWdhdGl2ZSAxNS1iaXQgaW50ZWdlciByYW5nZVxuICAgIHggPSAzMjc2NyAqICh4IC0gbWluWCkgKiBpbnZTaXplO1xuICAgIHkgPSAzMjc2NyAqICh5IC0gbWluWSkgKiBpbnZTaXplO1xuXG4gICAgeCA9ICh4IHwgKHggPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB4ID0gKHggfCAoeCA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHggPSAoeCB8ICh4IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeCA9ICh4IHwgKHggPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHkgPSAoeSB8ICh5IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeSA9ICh5IHwgKHkgPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB5ID0gKHkgfCAoeSA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHkgPSAoeSB8ICh5IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICByZXR1cm4geCB8ICh5IDw8IDEpO1xufVxuXG4vLyBmaW5kIHRoZSBsZWZ0bW9zdCBub2RlIG9mIGEgcG9seWdvbiByaW5nXG5mdW5jdGlvbiBnZXRMZWZ0bW9zdChzdGFydCkge1xuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGxlZnRtb3N0ID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC54IDwgbGVmdG1vc3QueCB8fCAocC54ID09PSBsZWZ0bW9zdC54ICYmIHAueSA8IGxlZnRtb3N0LnkpKSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiYgLy8gZG9uZXMndCBpbnRlcnNlY3Qgb3RoZXIgZWRnZXNcbiAgICAgICAgICAgKGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYikgJiYgLy8gbG9jYWxseSB2aXNpYmxlXG4gICAgICAgICAgICAoYXJlYShhLnByZXYsIGEsIGIucHJldikgfHwgYXJlYShhLCBiLnByZXYsIGIpKSB8fCAvLyBkb2VzIG5vdCBjcmVhdGUgb3Bwb3NpdGUtZmFjaW5nIHNlY3RvcnNcbiAgICAgICAgICAgIGVxdWFscyhhLCBiKSAmJiBhcmVhKGEucHJldiwgYSwgYS5uZXh0KSA+IDAgJiYgYXJlYShiLnByZXYsIGIsIGIubmV4dCkgPiAwKTsgLy8gc3BlY2lhbCB6ZXJvLWxlbmd0aCBjYXNlXG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgdmFyIG8xID0gc2lnbihhcmVhKHAxLCBxMSwgcDIpKTtcbiAgICB2YXIgbzIgPSBzaWduKGFyZWEocDEsIHExLCBxMikpO1xuICAgIHZhciBvMyA9IHNpZ24oYXJlYShwMiwgcTIsIHAxKSk7XG4gICAgdmFyIG80ID0gc2lnbihhcmVhKHAyLCBxMiwgcTEpKTtcblxuICAgIGlmIChvMSAhPT0gbzIgJiYgbzMgIT09IG80KSByZXR1cm4gdHJ1ZTsgLy8gZ2VuZXJhbCBjYXNlXG5cbiAgICBpZiAobzEgPT09IDAgJiYgb25TZWdtZW50KHAxLCBwMiwgcTEpKSByZXR1cm4gdHJ1ZTsgLy8gcDEsIHExIGFuZCBwMiBhcmUgY29sbGluZWFyIGFuZCBwMiBsaWVzIG9uIHAxcTFcbiAgICBpZiAobzIgPT09IDAgJiYgb25TZWdtZW50KHAxLCBxMiwgcTEpKSByZXR1cm4gdHJ1ZTsgLy8gcDEsIHExIGFuZCBxMiBhcmUgY29sbGluZWFyIGFuZCBxMiBsaWVzIG9uIHAxcTFcbiAgICBpZiAobzMgPT09IDAgJiYgb25TZWdtZW50KHAyLCBwMSwgcTIpKSByZXR1cm4gdHJ1ZTsgLy8gcDIsIHEyIGFuZCBwMSBhcmUgY29sbGluZWFyIGFuZCBwMSBsaWVzIG9uIHAycTJcbiAgICBpZiAobzQgPT09IDAgJiYgb25TZWdtZW50KHAyLCBxMSwgcTIpKSByZXR1cm4gdHJ1ZTsgLy8gcDIsIHEyIGFuZCBxMSBhcmUgY29sbGluZWFyIGFuZCBxMSBsaWVzIG9uIHAycTJcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gZm9yIGNvbGxpbmVhciBwb2ludHMgcCwgcSwgciwgY2hlY2sgaWYgcG9pbnQgcSBsaWVzIG9uIHNlZ21lbnQgcHJcbmZ1bmN0aW9uIG9uU2VnbWVudChwLCBxLCByKSB7XG4gICAgcmV0dXJuIHEueCA8PSBNYXRoLm1heChwLngsIHIueCkgJiYgcS54ID49IE1hdGgubWluKHAueCwgci54KSAmJiBxLnkgPD0gTWF0aC5tYXgocC55LCByLnkpICYmIHEueSA+PSBNYXRoLm1pbihwLnksIHIueSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24obnVtKSB7XG4gICAgcmV0dXJuIG51bSA+IDAgPyAxIDogbnVtIDwgMCA/IC0xIDogMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgcC5uZXh0LnkgIT09IHAueSAmJlxuICAgICAgICAgICAgICAgIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGV4IGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRleCBub2RlcyBpbiBhIHBvbHlnb24gcmluZ1xuICAgIHRoaXMucHJldiA9IG51bGw7XG4gICAgdGhpcy5uZXh0ID0gbnVsbDtcblxuICAgIC8vIHotb3JkZXIgY3VydmUgdmFsdWVcbiAgICB0aGlzLnogPSBudWxsO1xuXG4gICAgLy8gcHJldmlvdXMgYW5kIG5leHQgbm9kZXMgaW4gei1vcmRlclxuICAgIHRoaXMucHJldlogPSBudWxsO1xuICAgIHRoaXMubmV4dFogPSBudWxsO1xuXG4gICAgLy8gaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyBhIHN0ZWluZXIgcG9pbnRcbiAgICB0aGlzLnN0ZWluZXIgPSBmYWxzZTtcbn1cblxuLy8gcmV0dXJuIGEgcGVyY2VudGFnZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHBvbHlnb24gYXJlYSBhbmQgaXRzIHRyaWFuZ3VsYXRpb24gYXJlYTtcbi8vIHVzZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIG9mIHRyaWFuZ3VsYXRpb25cbmVhcmN1dC5kZXZpYXRpb24gPSBmdW5jdGlvbiAoZGF0YSwgaG9sZUluZGljZXMsIGRpbSwgdHJpYW5nbGVzKSB7XG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoO1xuICAgIHZhciBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcblxuICAgIHZhciBwb2x5Z29uQXJlYSA9IE1hdGguYWJzKHNpZ25lZEFyZWEoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSkpO1xuICAgIGlmIChoYXNIb2xlcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaG9sZUluZGljZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICAgICAgdmFyIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBwb2x5Z29uQXJlYSAtPSBNYXRoLmFicyhzaWduZWRBcmVhKGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHRyaWFuZ2xlc0FyZWEgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgdmFyIGEgPSB0cmlhbmdsZXNbaV0gKiBkaW07XG4gICAgICAgIHZhciBiID0gdHJpYW5nbGVzW2kgKyAxXSAqIGRpbTtcbiAgICAgICAgdmFyIGMgPSB0cmlhbmdsZXNbaSArIDJdICogZGltO1xuICAgICAgICB0cmlhbmdsZXNBcmVhICs9IE1hdGguYWJzKFxuICAgICAgICAgICAgKGRhdGFbYV0gLSBkYXRhW2NdKSAqIChkYXRhW2IgKyAxXSAtIGRhdGFbYSArIDFdKSAtXG4gICAgICAgICAgICAoZGF0YVthXSAtIGRhdGFbYl0pICogKGRhdGFbYyArIDFdIC0gZGF0YVthICsgMV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9seWdvbkFyZWEgPT09IDAgJiYgdHJpYW5nbGVzQXJlYSA9PT0gMCA/IDAgOlxuICAgICAgICBNYXRoLmFicygodHJpYW5nbGVzQXJlYSAtIHBvbHlnb25BcmVhKSAvIHBvbHlnb25BcmVhKTtcbn07XG5cbmZ1bmN0aW9uIHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSB7XG4gICAgdmFyIHN1bSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG59XG5cbi8vIHR1cm4gYSBwb2x5Z29uIGluIGEgbXVsdGktZGltZW5zaW9uYWwgYXJyYXkgZm9ybSAoZS5nLiBhcyBpbiBHZW9KU09OKSBpbnRvIGEgZm9ybSBFYXJjdXQgYWNjZXB0c1xuZWFyY3V0LmZsYXR0ZW4gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBkaW0gPSBkYXRhWzBdWzBdLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0ID0ge3ZlcnRpY2VzOiBbXSwgaG9sZXM6IFtdLCBkaW1lbnNpb25zOiBkaW19LFxuICAgICAgICBob2xlSW5kZXggPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGF0YVtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkaW07IGQrKykgcmVzdWx0LnZlcnRpY2VzLnB1c2goZGF0YVtpXVtqXVtkXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICBob2xlSW5kZXggKz0gZGF0YVtpIC0gMV0ubGVuZ3RoO1xuICAgICAgICAgICAgcmVzdWx0LmhvbGVzLnB1c2goaG9sZUluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVpY2tzZWxlY3QoYXJyLCBrLCBsZWZ0LCByaWdodCwgY29tcGFyZSkge1xuICAgIHF1aWNrc2VsZWN0U3RlcChhcnIsIGssIGxlZnQgfHwgMCwgcmlnaHQgfHwgKGFyci5sZW5ndGggLSAxKSwgY29tcGFyZSB8fCBkZWZhdWx0Q29tcGFyZSk7XG59XG5cbmZ1bmN0aW9uIHF1aWNrc2VsZWN0U3RlcChhcnIsIGssIGxlZnQsIHJpZ2h0LCBjb21wYXJlKSB7XG5cbiAgICB3aGlsZSAocmlnaHQgPiBsZWZ0KSB7XG4gICAgICAgIGlmIChyaWdodCAtIGxlZnQgPiA2MDApIHtcbiAgICAgICAgICAgIHZhciBuID0gcmlnaHQgLSBsZWZ0ICsgMTtcbiAgICAgICAgICAgIHZhciBtID0gayAtIGxlZnQgKyAxO1xuICAgICAgICAgICAgdmFyIHogPSBNYXRoLmxvZyhuKTtcbiAgICAgICAgICAgIHZhciBzID0gMC41ICogTWF0aC5leHAoMiAqIHogLyAzKTtcbiAgICAgICAgICAgIHZhciBzZCA9IDAuNSAqIE1hdGguc3FydCh6ICogcyAqIChuIC0gcykgLyBuKSAqIChtIC0gbiAvIDIgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgICAgIHZhciBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gbSAqIHMgLyBuICsgc2QpKTtcbiAgICAgICAgICAgIHZhciBuZXdSaWdodCA9IE1hdGgubWluKHJpZ2h0LCBNYXRoLmZsb29yKGsgKyAobiAtIG0pICogcyAvIG4gKyBzZCkpO1xuICAgICAgICAgICAgcXVpY2tzZWxlY3RTdGVwKGFyciwgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGNvbXBhcmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHQgPSBhcnJba107XG4gICAgICAgIHZhciBpID0gbGVmdDtcbiAgICAgICAgdmFyIGogPSByaWdodDtcblxuICAgICAgICBzd2FwKGFyciwgbGVmdCwgayk7XG4gICAgICAgIGlmIChjb21wYXJlKGFycltyaWdodF0sIHQpID4gMCkgc3dhcChhcnIsIGxlZnQsIHJpZ2h0KTtcblxuICAgICAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgICAgICAgIHN3YXAoYXJyLCBpLCBqKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKGFycltpXSwgdCkgPCAwKSBpKys7XG4gICAgICAgICAgICB3aGlsZSAoY29tcGFyZShhcnJbal0sIHQpID4gMCkgai0tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBhcmUoYXJyW2xlZnRdLCB0KSA9PT0gMCkgc3dhcChhcnIsIGxlZnQsIGopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIHN3YXAoYXJyLCBqLCByaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA8PSBrKSBsZWZ0ID0gaiArIDE7XG4gICAgICAgIGlmIChrIDw9IGopIHJpZ2h0ID0gaiAtIDE7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzd2FwKGFyciwgaSwgaikge1xuICAgIHZhciB0bXAgPSBhcnJbaV07XG4gICAgYXJyW2ldID0gYXJyW2pdO1xuICAgIGFycltqXSA9IHRtcDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBxdWlja3NlbGVjdCBmcm9tICdxdWlja3NlbGVjdCc7XG5cbmltcG9ydCB7Y2FsY3VsYXRlU2lnbmVkQXJlYX0gZnJvbSAnLi91dGlsJztcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbi8vIGNsYXNzaWZpZXMgYW4gYXJyYXkgb2YgcmluZ3MgaW50byBwb2x5Z29ucyB3aXRoIG91dGVyIHJpbmdzIGFuZCBob2xlc1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xhc3NpZnlSaW5ncyhyaW5nczogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgbWF4UmluZ3M6IG51bWJlcikge1xuICAgIGNvbnN0IGxlbiA9IHJpbmdzLmxlbmd0aDtcblxuICAgIGlmIChsZW4gPD0gMSkgcmV0dXJuIFtyaW5nc107XG5cbiAgICBjb25zdCBwb2x5Z29ucyA9IFtdO1xuICAgIGxldCBwb2x5Z29uLFxuICAgICAgICBjY3c7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFyZWEgPSBjYWxjdWxhdGVTaWduZWRBcmVhKHJpbmdzW2ldKTtcbiAgICAgICAgaWYgKGFyZWEgPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIChyaW5nc1tpXTogYW55KS5hcmVhID0gTWF0aC5hYnMoYXJlYSk7XG5cbiAgICAgICAgaWYgKGNjdyA9PT0gdW5kZWZpbmVkKSBjY3cgPSBhcmVhIDwgMDtcblxuICAgICAgICBpZiAoY2N3ID09PSBhcmVhIDwgMCkge1xuICAgICAgICAgICAgaWYgKHBvbHlnb24pIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG4gICAgICAgICAgICBwb2x5Z29uID0gW3JpbmdzW2ldXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKHBvbHlnb246IGFueSkucHVzaChyaW5nc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBvbHlnb24pIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG5cbiAgICAvLyBFYXJjdXQgcGVyZm9ybWFuY2UgZGVncmFkZXMgd2l0aCB0aGUgIyBvZiByaW5ncyBpbiBhIHBvbHlnb24uIEZvciB0aGlzXG4gICAgLy8gcmVhc29uLCB3ZSBsaW1pdCBzdHJpcCBvdXQgYWxsIGJ1dCB0aGUgYG1heFJpbmdzYCBsYXJnZXN0IHJpbmdzLlxuICAgIGlmIChtYXhSaW5ncyA+IDEpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwb2x5Z29ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHBvbHlnb25zW2pdLmxlbmd0aCA8PSBtYXhSaW5ncykgY29udGludWU7XG4gICAgICAgICAgICBxdWlja3NlbGVjdChwb2x5Z29uc1tqXSwgbWF4UmluZ3MsIDEsIHBvbHlnb25zW2pdLmxlbmd0aCAtIDEsIGNvbXBhcmVBcmVhcyk7XG4gICAgICAgICAgICBwb2x5Z29uc1tqXSA9IHBvbHlnb25zW2pdLnNsaWNlKDAsIG1heFJpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb2x5Z29ucztcbn1cblxuZnVuY3Rpb24gY29tcGFyZUFyZWFzKGEsIGIpIHtcbiAgICByZXR1cm4gYi5hcmVhIC0gYS5hcmVhO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIEZpbGxTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgRmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgTGluZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcic7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuXG50eXBlIFBhdHRlcm5TdHlsZUxheWVycyA9XG4gICAgQXJyYXk8TGluZVN0eWxlTGF5ZXI+IHxcbiAgICBBcnJheTxGaWxsU3R5bGVMYXllcj4gfFxuICAgIEFycmF5PEZpbGxFeHRydXNpb25TdHlsZUxheWVyPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1BhdHRlcm4odHlwZTogc3RyaW5nLCBsYXllcnM6IFBhdHRlcm5TdHlsZUxheWVycywgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBvcHRpb25zLnBhdHRlcm5EZXBlbmRlbmNpZXM7XG4gICAgbGV0IGhhc1BhdHRlcm4gPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldChgJHt0eXBlfS1wYXR0ZXJuYCk7XG4gICAgICAgIGlmICghcGF0dGVyblByb3BlcnR5LmlzQ29uc3RhbnQoKSkge1xuICAgICAgICAgICAgaGFzUGF0dGVybiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25zdGFudFBhdHRlcm4gPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcihudWxsKTtcbiAgICAgICAgaWYgKGNvbnN0YW50UGF0dGVybikge1xuICAgICAgICAgICAgaGFzUGF0dGVybiA9IHRydWU7XG4gICAgICAgICAgICBwYXR0ZXJuc1tjb25zdGFudFBhdHRlcm4udG9dID0gIHRydWU7XG4gICAgICAgICAgICBwYXR0ZXJuc1tjb25zdGFudFBhdHRlcm4uZnJvbV0gPSAgdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNQYXR0ZXJuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUGF0dGVybkRlcGVuZGVuY2llcyh0eXBlOiBzdHJpbmcsIGxheWVyczogUGF0dGVyblN0eWxlTGF5ZXJzLCBwYXR0ZXJuRmVhdHVyZTogQnVja2V0RmVhdHVyZSwgem9vbTogbnVtYmVyLCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBwYXR0ZXJucyA9IG9wdGlvbnMucGF0dGVybkRlcGVuZGVuY2llcztcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHkgPSBsYXllci5wYWludC5nZXQoYCR7dHlwZX0tcGF0dGVybmApO1xuXG4gICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eVZhbHVlID0gcGF0dGVyblByb3BlcnR5LnZhbHVlO1xuICAgICAgICBpZiAocGF0dGVyblByb3BlcnR5VmFsdWUua2luZCAhPT0gXCJjb25zdGFudFwiKSB7XG4gICAgICAgICAgICBsZXQgbWluID0gcGF0dGVyblByb3BlcnR5VmFsdWUuZXZhbHVhdGUoe3pvb206IHpvb20gLSAxfSwgcGF0dGVybkZlYXR1cmUsIHt9LCBvcHRpb25zLmF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICBsZXQgbWlkID0gcGF0dGVyblByb3BlcnR5VmFsdWUuZXZhbHVhdGUoe3pvb219LCBwYXR0ZXJuRmVhdHVyZSwge30sIG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgIGxldCBtYXggPSBwYXR0ZXJuUHJvcGVydHlWYWx1ZS5ldmFsdWF0ZSh7em9vbTogem9vbSArIDF9LCBwYXR0ZXJuRmVhdHVyZSwge30sIG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgIG1pbiA9IG1pbiAmJiBtaW4ubmFtZSA/IG1pbi5uYW1lIDogbWluO1xuICAgICAgICAgICAgbWlkID0gbWlkICYmIG1pZC5uYW1lID8gbWlkLm5hbWUgOiBtaWQ7XG4gICAgICAgICAgICBtYXggPSBtYXggJiYgbWF4Lm5hbWUgPyBtYXgubmFtZSA6IG1heDtcbiAgICAgICAgICAgIC8vIGFkZCB0byBwYXR0ZXJuRGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBwYXR0ZXJuc1ttaW5dID0gdHJ1ZTtcbiAgICAgICAgICAgIHBhdHRlcm5zW21pZF0gPSB0cnVlO1xuICAgICAgICAgICAgcGF0dGVybnNbbWF4XSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIHNhdmUgZm9yIGxheW91dFxuICAgICAgICAgICAgcGF0dGVybkZlYXR1cmUucGF0dGVybnNbbGF5ZXIuaWRdID0ge21pbiwgbWlkLCBtYXh9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXR0ZXJuRmVhdHVyZTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RmlsbExheW91dEFycmF5fSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB7bWVtYmVycyBhcyBsYXlvdXRBdHRyaWJ1dGVzfSBmcm9tICcuL2ZpbGxfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9zZWdtZW50JztcbmltcG9ydCB7UHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXR9IGZyb20gJy4uL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0xpbmVJbmRleEFycmF5LCBUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IGVhcmN1dCBmcm9tICdlYXJjdXQnO1xuaW1wb3J0IGNsYXNzaWZ5UmluZ3MgZnJvbSAnLi4vLi4vdXRpbC9jbGFzc2lmeV9yaW5ncyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5jb25zdCBFQVJDVVRfTUFYX1JJTkdTID0gNTAwO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCB7aGFzUGF0dGVybiwgYWRkUGF0dGVybkRlcGVuZGVuY2llc30gZnJvbSAnLi9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuaW1wb3J0IHR5cGUgRmlsbFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmNsYXNzIEZpbGxCdWNrZXQgaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgbGF5ZXJzOiBBcnJheTxGaWxsU3R5bGVMYXllcj47XG4gICAgbGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcnM6IEFycmF5PEZpbGxTdHlsZUxheWVyPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHBhdHRlcm5GZWF0dXJlczogQXJyYXk8QnVja2V0RmVhdHVyZT47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogRmlsbExheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXkyOiBMaW5lSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PEZpbGxTdHlsZUxheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBzZWdtZW50czI6IFNlZ21lbnRWZWN0b3I7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPEZpbGxTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhdHRlcm5GZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgRmlsbExheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5MiA9IG5ldyBMaW5lSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChsYXlvdXRBdHRyaWJ1dGVzLCBvcHRpb25zLmxheWVycywgb3B0aW9ucy56b29tKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMyID0gbmV3IFNlZ21lbnRWZWN0b3IoKTtcbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gaGFzUGF0dGVybignZmlsbCcsIHRoaXMubGF5ZXJzLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZmlsbFNvcnRLZXkgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQuZ2V0KCdmaWxsLXNvcnQta2V5Jyk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmVzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBmZWF0dXJlKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuICAgICAgICAgICAgY29uc3Qgc29ydEtleSA9IGZpbGxTb3J0S2V5ID9cbiAgICAgICAgICAgICAgICBmaWxsU29ydEtleS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgb3B0aW9ucy5hdmFpbGFibGVJbWFnZXMpIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGZlYXR1cmUuaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIHBhdHRlcm5zOiB7fSxcbiAgICAgICAgICAgICAgICBzb3J0S2V5XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBidWNrZXRGZWF0dXJlcy5wdXNoKGJ1Y2tldEZlYXR1cmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGxTb3J0S2V5KSB7XG4gICAgICAgICAgICBidWNrZXRGZWF0dXJlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gYS5zb3J0S2V5IGlzIGFsd2F5cyBhIG51bWJlciB3aGVuIGluIHVzZVxuICAgICAgICAgICAgICAgIHJldHVybiAoKGEuc29ydEtleTogYW55KTogbnVtYmVyKSAtICgoYi5zb3J0S2V5OiBhbnkpOiBudW1iZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGJ1Y2tldEZlYXR1cmUgb2YgYnVja2V0RmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHtnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9ID0gYnVja2V0RmVhdHVyZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5GZWF0dXJlID0gYWRkUGF0dGVybkRlcGVuZGVuY2llcygnZmlsbCcsIHRoaXMubGF5ZXJzLCBidWNrZXRGZWF0dXJlLCB0aGlzLnpvb20sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIC8vIHBhdHRlcm4gZmVhdHVyZXMgYXJlIGFkZGVkIG9ubHkgb25jZSB0aGUgcGF0dGVybiBpcyBsb2FkZWQgaW50byB0aGUgaW1hZ2UgYXRsYXNcbiAgICAgICAgICAgICAgICAvLyBzbyBhcmUgc3RvcmVkIGR1cmluZyBwb3B1bGF0ZSB1bnRpbCBsYXRlciB1cGRhdGVkIHdpdGggcG9zaXRpb25zIGJ5IHRpbGUgd29ya2VyIGluIGFkZEZlYXR1cmVzXG4gICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJuRmVhdHVyZXMucHVzaChwYXR0ZXJuRmVhdHVyZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShidWNrZXRGZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzW2luZGV4XS5mZWF0dXJlO1xuICAgICAgICAgICAgb3B0aW9ucy5mZWF0dXJlSW5kZXguaW5zZXJ0KGZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleCwgdGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZXMob3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgdGhpcy5wYXR0ZXJuRmVhdHVyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShmZWF0dXJlLCBmZWF0dXJlLmdlb21ldHJ5LCBmZWF0dXJlLmluZGV4LCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlcjIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheTIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyMi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlKGZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBpbmRleDogbnVtYmVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBvbHlnb24gb2YgY2xhc3NpZnlSaW5ncyhnZW9tZXRyeSwgRUFSQ1VUX01BWF9SSU5HUykpIHtcbiAgICAgICAgICAgIGxldCBudW1WZXJ0aWNlcyA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcG9seWdvbikge1xuICAgICAgICAgICAgICAgIG51bVZlcnRpY2VzICs9IHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0cmlhbmdsZVNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KG51bVZlcnRpY2VzLCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICAgICAgY29uc3QgdHJpYW5nbGVJbmRleCA9IHRyaWFuZ2xlU2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaG9sZUluZGljZXMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBpZiAocmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJpbmcgIT09IHBvbHlnb25bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaG9sZUluZGljZXMucHVzaChmbGF0dGVuZWQubGVuZ3RoIC8gMik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbGluZVNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzMi5wcmVwYXJlU2VnbWVudChyaW5nLmxlbmd0aCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5Mik7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZUluZGV4ID0gbGluZVNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhyaW5nWzBdLngsIHJpbmdbMF0ueSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayhsaW5lSW5kZXggKyByaW5nLmxlbmd0aCAtIDEsIGxpbmVJbmRleCk7XG4gICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocmluZ1swXS54KTtcbiAgICAgICAgICAgICAgICBmbGF0dGVuZWQucHVzaChyaW5nWzBdLnkpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socmluZ1tpXS54LCByaW5nW2ldLnkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKGxpbmVJbmRleCArIGkgLSAxLCBsaW5lSW5kZXggKyBpKTtcbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocmluZ1tpXS54KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocmluZ1tpXS55KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsaW5lU2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gcmluZy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgbGluZVNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZWFyY3V0KGZsYXR0ZW5lZCwgaG9sZUluZGljZXMpO1xuICAgICAgICAgICAgYXNzZXJ0KGluZGljZXMubGVuZ3RoICUgMyA9PT0gMCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbaV0sXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2kgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbaSArIDJdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJpYW5nbGVTZWdtZW50LnZlcnRleExlbmd0aCArPSBudW1WZXJ0aWNlcztcbiAgICAgICAgICAgIHRyaWFuZ2xlU2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gaW5kaWNlcy5sZW5ndGggLyAzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGluZGV4LCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignRmlsbEJ1Y2tldCcsIEZpbGxCdWNrZXQsIHtvbWl0OiBbJ2xheWVycycsICdwYXR0ZXJuRmVhdHVyZXMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaWxsQnVja2V0O1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiZmlsbC1zb3J0LWtleVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9maWxsXCJdW1wiZmlsbC1zb3J0LWtleVwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJmaWxsLWFudGlhbGlhc1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImZpbGwtb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImZpbGwtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtb3V0bGluZS1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiZmlsbC10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJmaWxsLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJmaWxsLXBhdHRlcm5cIjogQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eTxSZXNvbHZlZEltYWdlPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImZpbGwtYW50aWFsaWFzXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsXCJdW1wiZmlsbC1hbnRpYWxpYXNcIl0pLFxuICAgIFwiZmlsbC1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtb3BhY2l0eVwiXSksXG4gICAgXCJmaWxsLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtY29sb3JcIl0pLFxuICAgIFwiZmlsbC1vdXRsaW5lLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtb3V0bGluZS1jb2xvclwiXSksXG4gICAgXCJmaWxsLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtdHJhbnNsYXRlXCJdKSxcbiAgICBcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJmaWxsLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtcGF0dGVyblwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBGaWxsQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0JztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb259IGZyb20gJy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7dHJhbnNsYXRlRGlzdGFuY2UsIHRyYW5zbGF0ZX0gZnJvbSAnLi4vcXVlcnlfdXRpbHMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9maWxsX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgTGF5b3V0LCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7QnVja2V0UGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0UHJvcHMsIFBhaW50UHJvcHN9IGZyb20gJy4vZmlsbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgRmlsbFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHN1cGVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgY29uc3Qgb3V0bGluZUNvbG9yID0gdGhpcy5wYWludC5fdmFsdWVzWydmaWxsLW91dGxpbmUtY29sb3InXTtcbiAgICAgICAgaWYgKG91dGxpbmVDb2xvci52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnICYmIG91dGxpbmVDb2xvci52YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnBhaW50Ll92YWx1ZXNbJ2ZpbGwtb3V0bGluZS1jb2xvciddID0gdGhpcy5wYWludC5fdmFsdWVzWydmaWxsLWNvbG9yJ107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVCdWNrZXQocGFyYW1ldGVyczogQnVja2V0UGFyYW1ldGVyczwqPikge1xuICAgICAgICByZXR1cm4gbmV3IEZpbGxCdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZURpc3RhbmNlKHRoaXMucGFpbnQuZ2V0KCdmaWxsLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnZmlsbC10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICB0cmFuc2Zvcm0uYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uKHRyYW5zbGF0ZWRQb2x5Z29uLCBnZW9tZXRyeSk7XG4gICAgfVxuXG4gICAgaXNUaWxlQ2xpcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxsU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBsYXlvdXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCAgICAgICAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2Ffbm9ybWFsX2VkJywgICAgY29tcG9uZW50czogNCwgdHlwZTogJ0ludDE2J30sXG5dLCA0KTtcblxuZXhwb3J0IGRlZmF1bHQgbGF5b3V0O1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGF5b3V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9pbnQgPSByZXF1aXJlKCdAbWFwYm94L3BvaW50LWdlb21ldHJ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVjdG9yVGlsZUZlYXR1cmU7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGVGZWF0dXJlKHBiZiwgZW5kLCBleHRlbnQsIGtleXMsIHZhbHVlcykge1xuICAgIC8vIFB1YmxpY1xuICAgIHRoaXMucHJvcGVydGllcyA9IHt9O1xuICAgIHRoaXMuZXh0ZW50ID0gZXh0ZW50O1xuICAgIHRoaXMudHlwZSA9IDA7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fcGJmID0gcGJmO1xuICAgIHRoaXMuX2dlb21ldHJ5ID0gLTE7XG4gICAgdGhpcy5fa2V5cyA9IGtleXM7XG4gICAgdGhpcy5fdmFsdWVzID0gdmFsdWVzO1xuXG4gICAgcGJmLnJlYWRGaWVsZHMocmVhZEZlYXR1cmUsIHRoaXMsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGZWF0dXJlKHRhZywgZmVhdHVyZSwgcGJmKSB7XG4gICAgaWYgKHRhZyA9PSAxKSBmZWF0dXJlLmlkID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT0gMikgcmVhZFRhZyhwYmYsIGZlYXR1cmUpO1xuICAgIGVsc2UgaWYgKHRhZyA9PSAzKSBmZWF0dXJlLnR5cGUgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PSA0KSBmZWF0dXJlLl9nZW9tZXRyeSA9IHBiZi5wb3M7XG59XG5cbmZ1bmN0aW9uIHJlYWRUYWcocGJmLCBmZWF0dXJlKSB7XG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zO1xuXG4gICAgd2hpbGUgKHBiZi5wb3MgPCBlbmQpIHtcbiAgICAgICAgdmFyIGtleSA9IGZlYXR1cmUuX2tleXNbcGJmLnJlYWRWYXJpbnQoKV0sXG4gICAgICAgICAgICB2YWx1ZSA9IGZlYXR1cmUuX3ZhbHVlc1twYmYucmVhZFZhcmludCgpXTtcbiAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG59XG5cblZlY3RvclRpbGVGZWF0dXJlLnR5cGVzID0gWydVbmtub3duJywgJ1BvaW50JywgJ0xpbmVTdHJpbmcnLCAnUG9seWdvbiddO1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUubG9hZEdlb21ldHJ5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBiZiA9IHRoaXMuX3BiZjtcbiAgICBwYmYucG9zID0gdGhpcy5fZ2VvbWV0cnk7XG5cbiAgICB2YXIgZW5kID0gcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3MsXG4gICAgICAgIGNtZCA9IDEsXG4gICAgICAgIGxlbmd0aCA9IDAsXG4gICAgICAgIHggPSAwLFxuICAgICAgICB5ID0gMCxcbiAgICAgICAgbGluZXMgPSBbXSxcbiAgICAgICAgbGluZTtcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdmFyIGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICAgICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICAgICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICAgICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcblxuICAgICAgICAgICAgaWYgKGNtZCA9PT0gMSkgeyAvLyBtb3ZlVG9cbiAgICAgICAgICAgICAgICBpZiAobGluZSkgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgICAgICAgICBsaW5lID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxpbmUucHVzaChuZXcgUG9pbnQoeCwgeSkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY21kID09PSA3KSB7XG5cbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwbmlrLXZlY3Rvci10aWxlL2lzc3Vlcy85MFxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBsaW5lLnB1c2gobGluZVswXS5jbG9uZSgpKTsgLy8gY2xvc2VQb2x5Z29uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb21tYW5kICcgKyBjbWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7XG5cbiAgICByZXR1cm4gbGluZXM7XG59O1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUuYmJveCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYmYgPSB0aGlzLl9wYmY7XG4gICAgcGJmLnBvcyA9IHRoaXMuX2dlb21ldHJ5O1xuXG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zLFxuICAgICAgICBjbWQgPSAxLFxuICAgICAgICBsZW5ndGggPSAwLFxuICAgICAgICB4ID0gMCxcbiAgICAgICAgeSA9IDAsXG4gICAgICAgIHgxID0gSW5maW5pdHksXG4gICAgICAgIHgyID0gLUluZmluaXR5LFxuICAgICAgICB5MSA9IEluZmluaXR5LFxuICAgICAgICB5MiA9IC1JbmZpbml0eTtcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdmFyIGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICAgICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICAgICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICAgICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICAgICAgICAgIGlmICh4IDwgeDEpIHgxID0geDtcbiAgICAgICAgICAgIGlmICh4ID4geDIpIHgyID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgeTEpIHkxID0geTtcbiAgICAgICAgICAgIGlmICh5ID4geTIpIHkyID0geTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNtZCAhPT0gNykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGNvbW1hbmQgJyArIGNtZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW3gxLCB5MSwgeDIsIHkyXTtcbn07XG5cblZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04gPSBmdW5jdGlvbih4LCB5LCB6KSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLmV4dGVudCAqIE1hdGgucG93KDIsIHopLFxuICAgICAgICB4MCA9IHRoaXMuZXh0ZW50ICogeCxcbiAgICAgICAgeTAgPSB0aGlzLmV4dGVudCAqIHksXG4gICAgICAgIGNvb3JkcyA9IHRoaXMubG9hZEdlb21ldHJ5KCksXG4gICAgICAgIHR5cGUgPSBWZWN0b3JUaWxlRmVhdHVyZS50eXBlc1t0aGlzLnR5cGVdLFxuICAgICAgICBpLCBqO1xuXG4gICAgZnVuY3Rpb24gcHJvamVjdChsaW5lKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHAgPSBsaW5lW2pdLCB5MiA9IDE4MCAtIChwLnkgKyB5MCkgKiAzNjAgLyBzaXplO1xuICAgICAgICAgICAgbGluZVtqXSA9IFtcbiAgICAgICAgICAgICAgICAocC54ICsgeDApICogMzYwIC8gc2l6ZSAtIDE4MCxcbiAgICAgICAgICAgICAgICAzNjAgLyBNYXRoLlBJICogTWF0aC5hdGFuKE1hdGguZXhwKHkyICogTWF0aC5QSSAvIDE4MCkpIC0gOTBcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgIGNhc2UgMTpcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBjb29yZHNbaV1bMF07XG4gICAgICAgIH1cbiAgICAgICAgY29vcmRzID0gcG9pbnRzO1xuICAgICAgICBwcm9qZWN0KGNvb3Jkcyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAyOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwcm9qZWN0KGNvb3Jkc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDM6XG4gICAgICAgIGNvb3JkcyA9IGNsYXNzaWZ5UmluZ3MoY29vcmRzKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkc1tpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHByb2plY3QoY29vcmRzW2ldW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY29vcmRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb29yZHMgPSBjb29yZHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9ICdNdWx0aScgKyB0eXBlO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZHNcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllczogdGhpcy5wcm9wZXJ0aWVzXG4gICAgfTtcblxuICAgIGlmICgnaWQnIGluIHRoaXMpIHtcbiAgICAgICAgcmVzdWx0LmlkID0gdGhpcy5pZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gY2xhc3NpZmllcyBhbiBhcnJheSBvZiByaW5ncyBpbnRvIHBvbHlnb25zIHdpdGggb3V0ZXIgcmluZ3MgYW5kIGhvbGVzXG5cbmZ1bmN0aW9uIGNsYXNzaWZ5UmluZ3MocmluZ3MpIHtcbiAgICB2YXIgbGVuID0gcmluZ3MubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA8PSAxKSByZXR1cm4gW3JpbmdzXTtcblxuICAgIHZhciBwb2x5Z29ucyA9IFtdLFxuICAgICAgICBwb2x5Z29uLFxuICAgICAgICBjY3c7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBhcmVhID0gc2lnbmVkQXJlYShyaW5nc1tpXSk7XG4gICAgICAgIGlmIChhcmVhID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoY2N3ID09PSB1bmRlZmluZWQpIGNjdyA9IGFyZWEgPCAwO1xuXG4gICAgICAgIGlmIChjY3cgPT09IGFyZWEgPCAwKSB7XG4gICAgICAgICAgICBpZiAocG9seWdvbikgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgIHBvbHlnb24gPSBbcmluZ3NbaV1dO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2x5Z29uLnB1c2gocmluZ3NbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwb2x5Z29uKSBwb2x5Z29ucy5wdXNoKHBvbHlnb24pO1xuXG4gICAgcmV0dXJuIHBvbHlnb25zO1xufVxuXG5mdW5jdGlvbiBzaWduZWRBcmVhKHJpbmcpIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcmluZy5sZW5ndGgsIGogPSBsZW4gLSAxLCBwMSwgcDI7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgcDEgPSByaW5nW2ldO1xuICAgICAgICBwMiA9IHJpbmdbal07XG4gICAgICAgIHN1bSArPSAocDIueCAtIHAxLngpICogKHAxLnkgKyBwMi55KTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZlY3RvclRpbGVGZWF0dXJlID0gcmVxdWlyZSgnLi92ZWN0b3J0aWxlZmVhdHVyZS5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvclRpbGVMYXllcjtcblxuZnVuY3Rpb24gVmVjdG9yVGlsZUxheWVyKHBiZiwgZW5kKSB7XG4gICAgLy8gUHVibGljXG4gICAgdGhpcy52ZXJzaW9uID0gMTtcbiAgICB0aGlzLm5hbWUgPSBudWxsO1xuICAgIHRoaXMuZXh0ZW50ID0gNDA5NjtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fcGJmID0gcGJmO1xuICAgIHRoaXMuX2tleXMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICB0aGlzLl9mZWF0dXJlcyA9IFtdO1xuXG4gICAgcGJmLnJlYWRGaWVsZHMocmVhZExheWVyLCB0aGlzLCBlbmQpO1xuXG4gICAgdGhpcy5sZW5ndGggPSB0aGlzLl9mZWF0dXJlcy5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIHJlYWRMYXllcih0YWcsIGxheWVyLCBwYmYpIHtcbiAgICBpZiAodGFnID09PSAxNSkgbGF5ZXIudmVyc2lvbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSAxKSBsYXllci5uYW1lID0gcGJmLnJlYWRTdHJpbmcoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDUpIGxheWVyLmV4dGVudCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSAyKSBsYXllci5fZmVhdHVyZXMucHVzaChwYmYucG9zKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDMpIGxheWVyLl9rZXlzLnB1c2gocGJmLnJlYWRTdHJpbmcoKSk7XG4gICAgZWxzZSBpZiAodGFnID09PSA0KSBsYXllci5fdmFsdWVzLnB1c2gocmVhZFZhbHVlTWVzc2FnZShwYmYpKTtcbn1cblxuZnVuY3Rpb24gcmVhZFZhbHVlTWVzc2FnZShwYmYpIHtcbiAgICB2YXIgdmFsdWUgPSBudWxsLFxuICAgICAgICBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcztcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIHZhciB0YWcgPSBwYmYucmVhZFZhcmludCgpID4+IDM7XG5cbiAgICAgICAgdmFsdWUgPSB0YWcgPT09IDEgPyBwYmYucmVhZFN0cmluZygpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gMiA/IHBiZi5yZWFkRmxvYXQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDMgPyBwYmYucmVhZERvdWJsZSgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNCA/IHBiZi5yZWFkVmFyaW50NjQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDUgPyBwYmYucmVhZFZhcmludCgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNiA/IHBiZi5yZWFkU1ZhcmludCgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNyA/IHBiZi5yZWFkQm9vbGVhbigpIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbi8vIHJldHVybiBmZWF0dXJlIGBpYCBmcm9tIHRoaXMgbGF5ZXIgYXMgYSBgVmVjdG9yVGlsZUZlYXR1cmVgXG5WZWN0b3JUaWxlTGF5ZXIucHJvdG90eXBlLmZlYXR1cmUgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gdGhpcy5fZmVhdHVyZXMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ2ZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcycpO1xuXG4gICAgdGhpcy5fcGJmLnBvcyA9IHRoaXMuX2ZlYXR1cmVzW2ldO1xuXG4gICAgdmFyIGVuZCA9IHRoaXMuX3BiZi5yZWFkVmFyaW50KCkgKyB0aGlzLl9wYmYucG9zO1xuICAgIHJldHVybiBuZXcgVmVjdG9yVGlsZUZlYXR1cmUodGhpcy5fcGJmLCBlbmQsIHRoaXMuZXh0ZW50LCB0aGlzLl9rZXlzLCB0aGlzLl92YWx1ZXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZlY3RvclRpbGVMYXllciA9IHJlcXVpcmUoJy4vdmVjdG9ydGlsZWxheWVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVjdG9yVGlsZTtcblxuZnVuY3Rpb24gVmVjdG9yVGlsZShwYmYsIGVuZCkge1xuICAgIHRoaXMubGF5ZXJzID0gcGJmLnJlYWRGaWVsZHMocmVhZFRpbGUsIHt9LCBlbmQpO1xufVxuXG5mdW5jdGlvbiByZWFkVGlsZSh0YWcsIGxheWVycywgcGJmKSB7XG4gICAgaWYgKHRhZyA9PT0gMykge1xuICAgICAgICB2YXIgbGF5ZXIgPSBuZXcgVmVjdG9yVGlsZUxheWVyKHBiZiwgcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3MpO1xuICAgICAgICBpZiAobGF5ZXIubGVuZ3RoKSBsYXllcnNbbGF5ZXIubmFtZV0gPSBsYXllcjtcbiAgICB9XG59XG5cbiIsIm1vZHVsZS5leHBvcnRzLlZlY3RvclRpbGUgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlLmpzJyk7XG5tb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlRmVhdHVyZSA9IHJlcXVpcmUoJy4vbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzJyk7XG5tb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlTGF5ZXIgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlbGF5ZXIuanMnKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RmlsbEV4dHJ1c2lvbkxheW91dEFycmF5fSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB7bWVtYmVycyBhcyBsYXlvdXRBdHRyaWJ1dGVzfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9leHRlbnQnO1xuaW1wb3J0IGVhcmN1dCBmcm9tICdlYXJjdXQnO1xuaW1wb3J0IG12dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmNvbnN0IHZlY3RvclRpbGVGZWF0dXJlVHlwZXMgPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXM7XG5pbXBvcnQgY2xhc3NpZnlSaW5ncyBmcm9tICcuLi8uLi91dGlsL2NsYXNzaWZ5X3JpbmdzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmNvbnN0IEVBUkNVVF9NQVhfUklOR1MgPSA1MDA7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHtoYXNQYXR0ZXJuLCBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzfSBmcm9tICcuL3BhdHRlcm5fYnVja2V0X2ZlYXR1cmVzJztcbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5cbmltcG9ydCB0eXBlIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuY29uc3QgRkFDVE9SID0gTWF0aC5wb3coMiwgMTMpO1xuXG5mdW5jdGlvbiBhZGRWZXJ0ZXgodmVydGV4QXJyYXksIHgsIHksIG54LCBueSwgbnosIHQsIGUpIHtcbiAgICB2ZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgLy8gYV9wb3NcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgLy8gYV9ub3JtYWxfZWQ6IDMtY29tcG9uZW50IG5vcm1hbCBhbmQgMS1jb21wb25lbnQgZWRnZWRpc3RhbmNlXG4gICAgICAgIE1hdGguZmxvb3IobnggKiBGQUNUT1IpICogMiArIHQsXG4gICAgICAgIG55ICogRkFDVE9SICogMixcbiAgICAgICAgbnogKiBGQUNUT1IgKiAyLFxuICAgICAgICAvLyBlZGdlZGlzdGFuY2UgKHVzZWQgZm9yIHdyYXBwaW5nIHBhdHRlcm5zIGFyb3VuZCBleHRydXNpb24gc2lkZXMpXG4gICAgICAgIE1hdGgucm91bmQoZSlcbiAgICApO1xufVxuXG5jbGFzcyBGaWxsRXh0cnVzaW9uQnVja2V0IGltcGxlbWVudHMgQnVja2V0IHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVyczogQXJyYXk8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+O1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxGaWxsRXh0cnVzaW9uU3R5bGVMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGxheW91dFZlcnRleEFycmF5OiBGaWxsRXh0cnVzaW9uTGF5b3V0QXJyYXk7XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PEZpbGxFeHRydXNpb25TdHlsZUxheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICB1cGxvYWRlZDogYm9vbGVhbjtcbiAgICBmZWF0dXJlczogQXJyYXk8QnVja2V0RmVhdHVyZT47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPEZpbGxFeHRydXNpb25TdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgRmlsbEV4dHJ1c2lvbkxheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMgPSB0aGlzLmxheWVycy5maWx0ZXIoKGwpID0+IGwuaXNTdGF0ZURlcGVuZGVudCgpKS5tYXAoKGwpID0+IGwuaWQpO1xuXG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBbXTtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gaGFzUGF0dGVybignZmlsbC1leHRydXNpb24nLCB0aGlzLmxheWVycywgb3B0aW9ucyk7XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBmZWF0dXJlKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuXG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuRmVhdHVyZTogQnVja2V0RmVhdHVyZSA9IHtcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgcGF0dGVybnM6IHt9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZlYXR1cmUuaWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybkZlYXR1cmUuaWQgPSBmZWF0dXJlLmlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKGFkZFBhdHRlcm5EZXBlbmRlbmNpZXMoJ2ZpbGwtZXh0cnVzaW9uJywgdGhpcy5sYXllcnMsIHBhdHRlcm5GZWF0dXJlLCB0aGlzLnpvb20sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKHBhdHRlcm5GZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3B0aW9ucy5mZWF0dXJlSW5kZXguaW5zZXJ0KGZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleCwgdGhpcy5pbmRleCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlcyhvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiB0aGlzLmZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnl9ID0gZmVhdHVyZTtcbiAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShmZWF0dXJlLCBnZW9tZXRyeSwgZmVhdHVyZS5pbmRleCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5zdGF0ZURlcGVuZGVudExheWVycywgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB1cGxvYWRQZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudXBsb2FkZWQgfHwgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQ7XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnVwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIGxheW91dEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIHRoaXMudXBsb2FkZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlKGZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBpbmRleDogbnVtYmVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBvbHlnb24gb2YgY2xhc3NpZnlSaW5ncyhnZW9tZXRyeSwgRUFSQ1VUX01BWF9SSU5HUykpIHtcbiAgICAgICAgICAgIGxldCBudW1WZXJ0aWNlcyA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcG9seWdvbikge1xuICAgICAgICAgICAgICAgIG51bVZlcnRpY2VzICs9IHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc0VudGlyZWx5T3V0c2lkZShyaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgZWRnZURpc3RhbmNlID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcmluZy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwMSA9IHJpbmdbcF07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcDIgPSByaW5nW3AgLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0JvdW5kYXJ5RWRnZShwMSwgcDIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQudmVydGV4TGVuZ3RoICsgNCA+IFNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJwID0gcDEuc3ViKHAyKS5fcGVycCgpLl91bml0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IHAyLmRpc3QocDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlRGlzdGFuY2UgKyBkaXN0ID4gMzI3NjgpIGVkZ2VEaXN0YW5jZSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgcDEueCwgcDEueSwgcGVycC54LCBwZXJwLnksIDAsIDAsIGVkZ2VEaXN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHAxLngsIHAxLnksIHBlcnAueCwgcGVycC55LCAwLCAxLCBlZGdlRGlzdGFuY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZURpc3RhbmNlICs9IGRpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgcDIueCwgcDIueSwgcGVycC54LCBwZXJwLnksIDAsIDAsIGVkZ2VEaXN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHAyLngsIHAyLnksIHBlcnAueCwgcGVycC55LCAwLCAxLCBlZGdlRGlzdGFuY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm90dG9tUmlnaHQgPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOiwpTCjMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCkFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAwICAxIMOiwpTCgiBDb3VudGVyLWNsb2Nrd2lzZSB3aW5kaW5nIG9yZGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAgICAgIMOiwpTCgiBUcmlhbmdsZSAxOiAwID0+IDIgPT4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAyICAzIMOiwpTCgiBUcmlhbmdsZSAyOiAxID0+IDIgPT4gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOiwpTClMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCmFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhib3R0b21SaWdodCwgYm90dG9tUmlnaHQgKyAyLCBib3R0b21SaWdodCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhib3R0b21SaWdodCArIDEsIGJvdHRvbVJpZ2h0ICsgMiwgYm90dG9tUmlnaHQgKyAzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQudmVydGV4TGVuZ3RoICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQudmVydGV4TGVuZ3RoICsgbnVtVmVydGljZXMgPiBTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQobnVtVmVydGljZXMsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vT25seSB0cmlhbmd1bGF0ZSBhbmQgZHJhdyB0aGUgYXJlYSBvZiB0aGUgZmVhdHVyZSBpZiBpdCBpcyBhIHBvbHlnb25cbiAgICAgICAgICAgIC8vT3RoZXIgZmVhdHVyZSB0eXBlcyAoZS5nLiBMaW5lU3RyaW5nKSBkbyBub3QgaGF2ZSBhcmVhLCBzbyB0cmlhbmd1bGF0aW9uIGlzIHBvaW50bGVzcyAvIHVuZGVmaW5lZFxuICAgICAgICAgICAgaWYgKHZlY3RvclRpbGVGZWF0dXJlVHlwZXNbZmVhdHVyZS50eXBlXSAhPT0gJ1BvbHlnb24nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGhvbGVJbmRpY2VzID0gW107XG4gICAgICAgICAgICBjb25zdCB0cmlhbmdsZUluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyaW5nICE9PSBwb2x5Z29uWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvbGVJbmRpY2VzLnB1c2goZmxhdHRlbmVkLmxlbmd0aCAvIDIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcmluZ1tpXTtcblxuICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgcC54LCBwLnksIDAsIDAsIDEsIDEsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHAueCk7XG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHAueSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZWFyY3V0KGZsYXR0ZW5lZCwgaG9sZUluZGljZXMpO1xuICAgICAgICAgICAgYXNzZXJ0KGluZGljZXMubGVuZ3RoICUgMyA9PT0gMCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kaWNlcy5sZW5ndGg7IGogKz0gMykge1xuICAgICAgICAgICAgICAgIC8vIENvdW50ZXItY2xvY2t3aXNlIHdpbmRpbmcgb3JkZXIuXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbaiArIDJdLFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tqICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSBpbmRpY2VzLmxlbmd0aCAvIDM7XG4gICAgICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSBudW1WZXJ0aWNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGluZGV4LCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignRmlsbEV4dHJ1c2lvbkJ1Y2tldCcsIEZpbGxFeHRydXNpb25CdWNrZXQsIHtvbWl0OiBbJ2xheWVycycsICdmZWF0dXJlcyddfSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGxFeHRydXNpb25CdWNrZXQ7XG5cbmZ1bmN0aW9uIGlzQm91bmRhcnlFZGdlKHAxLCBwMikge1xuICAgIHJldHVybiAocDEueCA9PT0gcDIueCAmJiAocDEueCA8IDAgfHwgcDEueCA+IEVYVEVOVCkpIHx8XG4gICAgICAgIChwMS55ID09PSBwMi55ICYmIChwMS55IDwgMCB8fCBwMS55ID4gRVhURU5UKSk7XG59XG5cbmZ1bmN0aW9uIGlzRW50aXJlbHlPdXRzaWRlKHJpbmcpIHtcbiAgICByZXR1cm4gcmluZy5ldmVyeShwID0+IHAueCA8IDApIHx8XG4gICAgICAgIHJpbmcuZXZlcnkocCA9PiBwLnggPiBFWFRFTlQpIHx8XG4gICAgICAgIHJpbmcuZXZlcnkocCA9PiBwLnkgPCAwKSB8fFxuICAgICAgICByaW5nLmV2ZXJ5KHAgPT4gcC55ID4gRVhURU5UKTtcbn1cbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCI6IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHRcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWNvbG9yXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24taGVpZ2h0XCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWJhc2VcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWJhc2VcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IEZpbGxFeHRydXNpb25CdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0JztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNQb2x5Z29uLCBwb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbn0gZnJvbSAnLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IHt0cmFuc2xhdGVEaXN0YW5jZSwgdHJhbnNsYXRlfSBmcm9tICcuLi9xdWVyeV91dGlscyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHt2ZWM0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsbEV4dHJ1c2lvbkJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRlRGlzdGFuY2UodGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBpczNEKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpOiBib29sZWFuIHwgbnVtYmVyIHtcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMpO1xuXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1oZWlnaHQnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLWJhc2UnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkgPSBwcm9qZWN0UXVlcnlHZW9tZXRyeSh0cmFuc2xhdGVkUG9seWdvbiwgcGl4ZWxQb3NNYXRyaXgsIHRyYW5zZm9ybSwgMCk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdGVkID0gcHJvamVjdEV4dHJ1c2lvbihnZW9tZXRyeSwgYmFzZSwgaGVpZ2h0LCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IHByb2plY3RlZEJhc2UgPSBwcm9qZWN0ZWRbMF07XG4gICAgICAgIGNvbnN0IHByb2plY3RlZFRvcCA9IHByb2plY3RlZFsxXTtcbiAgICAgICAgcmV0dXJuIGNoZWNrSW50ZXJzZWN0aW9uKHByb2plY3RlZEJhc2UsIHByb2plY3RlZFRvcCwgcHJvamVjdGVkUXVlcnlHZW9tZXRyeSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkb3QoYSwgYikge1xuICAgIHJldHVybiBhLnggKiBiLnggKyBhLnkgKiBiLnk7XG59XG5cbmZ1bmN0aW9uIGdldEludGVyc2VjdGlvbkRpc3RhbmNlKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiwgcHJvamVjdGVkRmFjZTogQXJyYXk8UG9pbnQ+KSB7XG5cbiAgICBpZiAocHJvamVjdGVkUXVlcnlHZW9tZXRyeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gRm9yIHBvaW50IHF1ZXJpZXMgY2FsY3VsYXRlIHRoZSB6IGF0IHdoaWNoIHRoZSBwb2ludCBpbnRlcnNlY3RzIHRoZSBmYWNlXG4gICAgICAgIC8vIHVzaW5nIGJhcnljZW50cmljIGNvb3JkaW5hdGVzLlxuXG4gICAgICAgIC8vIEZpbmQgdGhlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzIG9mIHRoZSBwcm9qZWN0ZWQgcG9pbnQgd2l0aGluIHRoZSBmaXJzdFxuICAgICAgICAvLyB0cmlhbmdsZSBvZiB0aGUgZmFjZSwgdXNpbmcgb25seSB0aGUgeHkgcGxhbmUuIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIHRoZVxuICAgICAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmaXJzdCB0cmlhbmdsZSBiZWNhdXNlIGFsbCB0aGUgdHJpYW5nbGVzIGluIHRoZSBmYWNlXG4gICAgICAgIC8vIGFyZSBpbiB0aGUgc2FtZSBwbGFuZS5cbiAgICAgICAgY29uc3QgYSA9IHByb2plY3RlZEZhY2VbMF07XG4gICAgICAgIGNvbnN0IGIgPSBwcm9qZWN0ZWRGYWNlWzFdO1xuICAgICAgICBjb25zdCBjID0gcHJvamVjdGVkRmFjZVszXTtcbiAgICAgICAgY29uc3QgcCA9IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnlbMF07XG5cbiAgICAgICAgY29uc3QgYWIgPSBiLnN1YihhKTtcbiAgICAgICAgY29uc3QgYWMgPSBjLnN1YihhKTtcbiAgICAgICAgY29uc3QgYXAgPSBwLnN1YihhKTtcblxuICAgICAgICBjb25zdCBkb3RBQkFCID0gZG90KGFiLCBhYik7XG4gICAgICAgIGNvbnN0IGRvdEFCQUMgPSBkb3QoYWIsIGFjKTtcbiAgICAgICAgY29uc3QgZG90QUNBQyA9IGRvdChhYywgYWMpO1xuICAgICAgICBjb25zdCBkb3RBUEFCID0gZG90KGFwLCBhYik7XG4gICAgICAgIGNvbnN0IGRvdEFQQUMgPSBkb3QoYXAsIGFjKTtcbiAgICAgICAgY29uc3QgZGVub20gPSBkb3RBQkFCICogZG90QUNBQyAtIGRvdEFCQUMgKiBkb3RBQkFDO1xuICAgICAgICBjb25zdCB2ID0gKGRvdEFDQUMgKiBkb3RBUEFCIC0gZG90QUJBQyAqIGRvdEFQQUMpIC8gZGVub207XG4gICAgICAgIGNvbnN0IHcgPSAoZG90QUJBQiAqIGRvdEFQQUMgLSBkb3RBQkFDICogZG90QVBBQikgLyBkZW5vbTtcbiAgICAgICAgY29uc3QgdSA9IDEgLSB2IC0gdztcblxuICAgICAgICAvLyBVc2UgdGhlIGJhcnljZW50cmljIHdlaWdodGluZyBhbG9uZyB3aXRoIHRoZSBvcmlnaW5hbCB0cmlhbmdsZSB6IGNvb3JkaW5hdGVzIHRvIGdldCB0aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9uLlxuICAgICAgICByZXR1cm4gYS56ICogdSArIGIueiAqIHYgKyBjLnogKiB3O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlIGNvdW50cyBhcyBjbG9zZXN0IGlzIGxlc3MgY2xlYXIgd2hlbiB0aGUgcXVlcnkgaXMgYSBib3guIFRoaXNcbiAgICAgICAgLy8gcmV0dXJucyB0aGUgZGlzdGFuY2UgdG8gdGhlIG5lYXJlc3QgcG9pbnQgb24gdGhlIGZhY2UsIHdoZXRoZXIgaXQgaXNcbiAgICAgICAgLy8gd2l0aGluIHRoZSBxdWVyeSBvciBub3QuIEl0IGNvdWxkIGJlIG1vcmUgY29ycmVjdCB0byByZXR1cm4gdGhlXG4gICAgICAgIC8vIGRpc3RhbmNlIHRvIHRoZSBjbG9zZXN0IHBvaW50IHdpdGhpbiB0aGUgcXVlcnkgYm94IGJ1dCB0aGlzIHdvdWxkIGJlXG4gICAgICAgIC8vIG1vcmUgY29tcGxpY2F0ZWQgYW5kIGV4cGVuc2l2ZSB0byBjYWxjdWxhdGUgd2l0aCBsaXR0bGUgYmVuZWZpdC5cbiAgICAgICAgbGV0IGNsb3Nlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvamVjdGVkRmFjZSkge1xuICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gTWF0aC5taW4oY2xvc2VzdERpc3RhbmNlLCBwLnopO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9zZXN0RGlzdGFuY2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0ludGVyc2VjdGlvbihwcm9qZWN0ZWRCYXNlOiBBcnJheTxQb2ludD4sIHByb2plY3RlZFRvcDogQXJyYXk8UG9pbnQ+LCBwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4pIHtcbiAgICBsZXQgY2xvc2VzdERpc3RhbmNlID0gSW5maW5pdHk7XG5cbiAgICBpZiAocG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb24ocHJvamVjdGVkUXVlcnlHZW9tZXRyeSwgcHJvamVjdGVkVG9wKSkge1xuICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBnZXRJbnRlcnNlY3Rpb25EaXN0YW5jZShwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5LCBwcm9qZWN0ZWRUb3BbMF0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IHIgPSAwOyByIDwgcHJvamVjdGVkVG9wLmxlbmd0aDsgcisrKSB7XG4gICAgICAgIGNvbnN0IHJpbmdUb3AgPSBwcm9qZWN0ZWRUb3Bbcl07XG4gICAgICAgIGNvbnN0IHJpbmdCYXNlID0gcHJvamVjdGVkQmFzZVtyXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCByaW5nVG9wLmxlbmd0aCAtIDE7IHArKykge1xuICAgICAgICAgICAgY29uc3QgdG9wQSA9IHJpbmdUb3BbcF07XG4gICAgICAgICAgICBjb25zdCB0b3BCID0gcmluZ1RvcFtwICsgMV07XG4gICAgICAgICAgICBjb25zdCBiYXNlQSA9IHJpbmdCYXNlW3BdO1xuICAgICAgICAgICAgY29uc3QgYmFzZUIgPSByaW5nQmFzZVtwICsgMV07XG4gICAgICAgICAgICBjb25zdCBmYWNlID0gW3RvcEEsIHRvcEIsIGJhc2VCLCBiYXNlQSwgdG9wQV07XG4gICAgICAgICAgICBpZiAocG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnksIGZhY2UpKSB7XG4gICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gTWF0aC5taW4oY2xvc2VzdERpc3RhbmNlLCBnZXRJbnRlcnNlY3Rpb25EaXN0YW5jZShwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5LCBmYWNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvc2VzdERpc3RhbmNlID09PSBJbmZpbml0eSA/IGZhbHNlIDogY2xvc2VzdERpc3RhbmNlO1xufVxuXG4vKlxuICogUHJvamVjdCB0aGUgZ2VvbWV0cnkgdXNpbmcgbWF0cml4IGBtYC4gVGhpcyBpcyBlc3NlbnRpYWxseSBkb2luZ1xuICogYHZlYzQudHJhbnNmb3JtTWF0NChbXSwgW3AueCwgcC55LCB6LCAxXSwgbSlgIGJ1dCB0aGUgbXVsdGlwbGljYXRpb25cbiAqIGlzIGlubGluZWQgc28gdGhhdCBwYXJ0cyBvZiB0aGUgcHJvamVjdGlvbiB0aGF0IGFyZSB0aGUgc2FtZSBhY3Jvc3NcbiAqIGRpZmZlcmVudCBwb2ludHMgY2FuIG9ubHkgYmUgZG9uZSBvbmNlLiBUaGlzIHByb2R1Y2VkIGEgbWVhc3VyYWJsZVxuICogcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHByb2plY3RFeHRydXNpb24oZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sIHpCYXNlOiBudW1iZXIsIHpUb3A6IG51bWJlciwgbTogRmxvYXQzMkFycmF5KSB7XG4gICAgY29uc3QgcHJvamVjdGVkQmFzZSA9IFtdO1xuICAgIGNvbnN0IHByb2plY3RlZFRvcCA9IFtdO1xuXG4gICAgY29uc3QgYmFzZVhaID0gbVs4XSAqIHpCYXNlO1xuICAgIGNvbnN0IGJhc2VZWiA9IG1bOV0gKiB6QmFzZTtcbiAgICBjb25zdCBiYXNlWlogPSBtWzEwXSAqIHpCYXNlO1xuICAgIGNvbnN0IGJhc2VXWiA9IG1bMTFdICogekJhc2U7XG4gICAgY29uc3QgdG9wWFogPSBtWzhdICogelRvcDtcbiAgICBjb25zdCB0b3BZWiA9IG1bOV0gKiB6VG9wO1xuICAgIGNvbnN0IHRvcFpaID0gbVsxMF0gKiB6VG9wO1xuICAgIGNvbnN0IHRvcFdaID0gbVsxMV0gKiB6VG9wO1xuXG4gICAgZm9yIChjb25zdCByIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgIGNvbnN0IHJpbmdCYXNlID0gW107XG4gICAgICAgIGNvbnN0IHJpbmdUb3AgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHIpIHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBwLng7XG4gICAgICAgICAgICBjb25zdCB5ID0gcC55O1xuXG4gICAgICAgICAgICBjb25zdCBzWCA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcbiAgICAgICAgICAgIGNvbnN0IHNZID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bMTNdO1xuICAgICAgICAgICAgY29uc3Qgc1ogPSBtWzJdICogeCArIG1bNl0gKiB5ICsgbVsxNF07XG4gICAgICAgICAgICBjb25zdCBzVyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzE1XTtcblxuICAgICAgICAgICAgY29uc3QgYmFzZVggPSBzWCArIGJhc2VYWjtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VZID0gc1kgKyBiYXNlWVo7XG4gICAgICAgICAgICBjb25zdCBiYXNlWiA9IHNaICsgYmFzZVpaO1xuICAgICAgICAgICAgY29uc3QgYmFzZVcgPSBzVyArIGJhc2VXWjtcblxuICAgICAgICAgICAgY29uc3QgdG9wWCA9IHNYICsgdG9wWFo7XG4gICAgICAgICAgICBjb25zdCB0b3BZID0gc1kgKyB0b3BZWjtcbiAgICAgICAgICAgIGNvbnN0IHRvcFogPSBzWiArIHRvcFpaO1xuICAgICAgICAgICAgY29uc3QgdG9wVyA9IHNXICsgdG9wV1o7XG5cbiAgICAgICAgICAgIGNvbnN0IGIgPSBuZXcgUG9pbnQoYmFzZVggLyBiYXNlVywgYmFzZVkgLyBiYXNlVyk7XG4gICAgICAgICAgICBiLnogPSBiYXNlWiAvIGJhc2VXO1xuICAgICAgICAgICAgcmluZ0Jhc2UucHVzaChiKTtcblxuICAgICAgICAgICAgY29uc3QgdCA9IG5ldyBQb2ludCh0b3BYIC8gdG9wVywgdG9wWSAvIHRvcFcpO1xuICAgICAgICAgICAgdC56ID0gdG9wWiAvIHRvcFc7XG4gICAgICAgICAgICByaW5nVG9wLnB1c2godCk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvamVjdGVkQmFzZS5wdXNoKHJpbmdCYXNlKTtcbiAgICAgICAgcHJvamVjdGVkVG9wLnB1c2gocmluZ1RvcCk7XG4gICAgfVxuICAgIHJldHVybiBbcHJvamVjdGVkQmFzZSwgcHJvamVjdGVkVG9wXTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFF1ZXJ5R2VvbWV0cnkocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LCBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSwgejogbnVtYmVyKSB7XG4gICAgY29uc3QgcHJvamVjdGVkUXVlcnlHZW9tZXRyeSA9IFtdO1xuICAgIGZvciAoY29uc3QgcCBvZiBxdWVyeUdlb21ldHJ5KSB7XG4gICAgICAgIGNvbnN0IHYgPSBbcC54LCBwLnksIHosIDFdO1xuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodiwgdiwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgICAgICBwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5LnB1c2gobmV3IFBvaW50KHZbMF0gLyB2WzNdLCB2WzFdIC8gdlszXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvamVjdGVkUXVlcnlHZW9tZXRyeTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuY29uc3QgbGluZUxheW91dEF0dHJpYnV0ZXMgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3Nfbm9ybWFsJywgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX2RhdGEnLCBjb21wb25lbnRzOiA0LCB0eXBlOiAnVWludDgnfVxuXSwgNCk7XG5cbmV4cG9ydCBkZWZhdWx0IGxpbmVMYXlvdXRBdHRyaWJ1dGVzO1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGluZUxheW91dEF0dHJpYnV0ZXM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0xpbmVMYXlvdXRBcnJheX0gZnJvbSAnLi4vYXJyYXlfdHlwZXMnO1xuXG5pbXBvcnQge21lbWJlcnMgYXMgbGF5b3V0QXR0cmlidXRlc30gZnJvbSAnLi9saW5lX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9leHRlbnQnO1xuaW1wb3J0IG12dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmNvbnN0IHZlY3RvclRpbGVGZWF0dXJlVHlwZXMgPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXM7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHtoYXNQYXR0ZXJuLCBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzfSBmcm9tICcuL3BhdHRlcm5fYnVja2V0X2ZlYXR1cmVzJztcbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBMaW5lU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge1NlZ21lbnR9IGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuLy8gTk9URSBPTiBFWFRSVURFIFNDQUxFOlxuLy8gc2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3Igc28gdGhhdCB0aGUgbm9ybWFsIGxlbmd0aCBpcyB0aGlzIHZhbHVlLlxuLy8gY29udGFpbnMgdGhlIFwidGV4dHVyZVwiIG5vcm1hbHMgKC0xLi4xKS4gdGhpcyBpcyBkaXN0aW5jdCBmcm9tIHRoZSBleHRydWRlXG4vLyBub3JtYWxzIGZvciBsaW5lIGpvaW5zLCBiZWNhdXNlIHRoZSB4LXZhbHVlIHJlbWFpbnMgMCBmb3IgdGhlIHRleHR1cmVcbi8vIG5vcm1hbCBhcnJheSwgd2hpbGUgdGhlIGV4dHJ1ZGUgbm9ybWFsIGFjdHVhbGx5IG1vdmVzIHRoZSB2ZXJ0ZXggdG8gY3JlYXRlXG4vLyB0aGUgYWN1dGUvYmV2ZWxsZWQgbGluZSBqb2luLlxuY29uc3QgRVhUUlVERV9TQ0FMRSA9IDYzO1xuXG4vKlxuICogU2hhcnAgY29ybmVycyBjYXVzZSBkYXNoZWQgbGluZXMgdG8gdGlsdCBiZWNhdXNlIHRoZSBkaXN0YW5jZSBhbG9uZyB0aGUgbGluZVxuICogaXMgdGhlIHNhbWUgYXQgYm90aCB0aGUgaW5uZXIgYW5kIG91dGVyIGNvcm5lcnMuIFRvIGltcHJvdmUgdGhlIGFwcGVhcmFuY2Ugb2ZcbiAqIGRhc2hlZCBsaW5lcyB3ZSBhZGQgZXh0cmEgcG9pbnRzIG5lYXIgc2hhcnAgY29ybmVycyBzbyB0aGF0IGEgc21hbGxlciBwYXJ0XG4gKiBvZiB0aGUgbGluZSBpcyB0aWx0ZWQuXG4gKlxuICogQ09TX0hBTEZfU0hBUlBfQ09STkVSIGNvbnRyb2xzIGhvdyBzaGFycCBhIGNvcm5lciBoYXMgdG8gYmUgZm9yIHVzIHRvIGFkZCBhblxuICogZXh0cmEgdmVydGV4LiBUaGUgZGVmYXVsdCBpcyA3NSBkZWdyZWVzLlxuICpcbiAqIFRoZSBuZXdseSBjcmVhdGVkIHZlcnRpY2VzIGFyZSBwbGFjZWQgU0hBUlBfQ09STkVSX09GRlNFVCBwaXhlbHMgZnJvbSB0aGUgY29ybmVyLlxuICovXG5jb25zdCBDT1NfSEFMRl9TSEFSUF9DT1JORVIgPSBNYXRoLmNvcyg3NSAvIDIgKiAoTWF0aC5QSSAvIDE4MCkpO1xuY29uc3QgU0hBUlBfQ09STkVSX09GRlNFVCA9IDE1O1xuXG4vLyBBbmdsZSBwZXIgdHJpYW5nbGUgZm9yIGFwcHJveGltYXRpbmcgcm91bmQgbGluZSBqb2lucy5cbmNvbnN0IERFR19QRVJfVFJJQU5HTEUgPSAyMDtcblxuLy8gVGhlIG51bWJlciBvZiBiaXRzIHRoYXQgaXMgdXNlZCB0byBzdG9yZSB0aGUgbGluZSBkaXN0YW5jZSBpbiB0aGUgYnVmZmVyLlxuY29uc3QgTElORV9ESVNUQU5DRV9CVUZGRVJfQklUUyA9IDE1O1xuXG4vLyBXZSBkb24ndCBoYXZlIGVub3VnaCBiaXRzIGZvciB0aGUgbGluZSBkaXN0YW5jZSBhcyB3ZSdkIGxpa2UgdG8gaGF2ZSwgc29cbi8vIHVzZSB0aGlzIHZhbHVlIHRvIHNjYWxlIHRoZSBsaW5lIGRpc3RhbmNlIChpbiB0aWxlIHVuaXRzKSBkb3duIHRvIGEgc21hbGxlclxuLy8gdmFsdWUuIFRoaXMgbGV0cyB1cyBzdG9yZSBsb25nZXIgZGlzdGFuY2VzIHdoaWxlIHNhY3JpZmljaW5nIHByZWNpc2lvbi5cbmNvbnN0IExJTkVfRElTVEFOQ0VfU0NBTEUgPSAxIC8gMjtcblxuLy8gVGhlIG1heGltdW0gbGluZSBkaXN0YW5jZSwgaW4gdGlsZSB1bml0cywgdGhhdCBmaXRzIGluIHRoZSBidWZmZXIuXG5jb25zdCBNQVhfTElORV9ESVNUQU5DRSA9IE1hdGgucG93KDIsIExJTkVfRElTVEFOQ0VfQlVGRkVSX0JJVFMgLSAxKSAvIExJTkVfRElTVEFOQ0VfU0NBTEU7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTGluZUJ1Y2tldCBpbXBsZW1lbnRzIEJ1Y2tldCB7XG4gICAgZGlzdGFuY2U6IG51bWJlcjtcbiAgICB0b3RhbERpc3RhbmNlOiBudW1iZXI7XG4gICAgc2NhbGVkRGlzdGFuY2U6IG51bWJlcjtcbiAgICBjbGlwU3RhcnQ6IG51bWJlcjtcbiAgICBjbGlwRW5kOiBudW1iZXI7XG5cbiAgICBlMTogbnVtYmVyO1xuICAgIGUyOiBudW1iZXI7XG5cbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVyczogQXJyYXk8TGluZVN0eWxlTGF5ZXI+O1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxhbnk+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgcGF0dGVybkZlYXR1cmVzOiBBcnJheTxCdWNrZXRGZWF0dXJlPjtcblxuICAgIGxheW91dFZlcnRleEFycmF5OiBMaW5lTGF5b3V0QXJyYXk7XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PExpbmVTdHlsZUxheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICB1cGxvYWRlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJ1Y2tldFBhcmFtZXRlcnM8TGluZVN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHRoaXMuem9vbSA9IG9wdGlvbnMuem9vbTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGluZyA9IG9wdGlvbnMub3ZlcnNjYWxpbmc7XG4gICAgICAgIHRoaXMubGF5ZXJzID0gb3B0aW9ucy5sYXllcnM7XG4gICAgICAgIHRoaXMubGF5ZXJJZHMgPSB0aGlzLmxheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIuaWQpO1xuICAgICAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleDtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGF0dGVybkZlYXR1cmVzID0gW107XG5cbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSA9IG5ldyBMaW5lTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChsYXlvdXRBdHRyaWJ1dGVzLCBvcHRpb25zLmxheWVycywgb3B0aW9ucy56b29tKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gaGFzUGF0dGVybignbGluZScsIHRoaXMubGF5ZXJzLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGluZVNvcnRLZXkgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQuZ2V0KCdsaW5lLXNvcnQta2V5Jyk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmVzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBmZWF0dXJlKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuICAgICAgICAgICAgY29uc3Qgc29ydEtleSA9IGxpbmVTb3J0S2V5ID9cbiAgICAgICAgICAgICAgICBsaW5lU29ydEtleS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkgOlxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgY29uc3QgYnVja2V0RmVhdHVyZTogQnVja2V0RmVhdHVyZSA9IHtcbiAgICAgICAgICAgICAgICBpZDogZmVhdHVyZS5pZCxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgdHlwZTogZmVhdHVyZS50eXBlLFxuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnksXG4gICAgICAgICAgICAgICAgcGF0dGVybnM6IHt9LFxuICAgICAgICAgICAgICAgIHNvcnRLZXlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnB1c2goYnVja2V0RmVhdHVyZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluZVNvcnRLZXkpIHtcbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBhLnNvcnRLZXkgaXMgYWx3YXlzIGEgbnVtYmVyIHdoZW4gaW4gdXNlXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoYS5zb3J0S2V5OiBhbnkpOiBudW1iZXIpIC0gKChiLnNvcnRLZXk6IGFueSk6IG51bWJlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYnVja2V0RmVhdHVyZSBvZiBidWNrZXRGZWF0dXJlcykge1xuICAgICAgICAgICAgY29uc3Qge2dlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gPSBidWNrZXRGZWF0dXJlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybkJ1Y2tldEZlYXR1cmUgPSBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzKCdsaW5lJywgdGhpcy5sYXllcnMsIGJ1Y2tldEZlYXR1cmUsIHRoaXMuem9vbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gcGF0dGVybiBmZWF0dXJlcyBhcmUgYWRkZWQgb25seSBvbmNlIHRoZSBwYXR0ZXJuIGlzIGxvYWRlZCBpbnRvIHRoZSBpbWFnZSBhdGxhc1xuICAgICAgICAgICAgICAgIC8vIHNvIGFyZSBzdG9yZWQgZHVyaW5nIHBvcHVsYXRlIHVudGlsIGxhdGVyIHVwZGF0ZWQgd2l0aCBwb3NpdGlvbnMgYnkgdGlsZSB3b3JrZXIgaW4gYWRkRmVhdHVyZXNcbiAgICAgICAgICAgICAgICB0aGlzLnBhdHRlcm5GZWF0dXJlcy5wdXNoKHBhdHRlcm5CdWNrZXRGZWF0dXJlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwge30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNbaW5kZXhdLmZlYXR1cmU7XG4gICAgICAgICAgICBvcHRpb25zLmZlYXR1cmVJbmRleC5pbnNlcnQoZmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4LCB0aGlzLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlcyhvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiB0aGlzLnBhdHRlcm5GZWF0dXJlcykge1xuICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGZlYXR1cmUsIGZlYXR1cmUuZ2VvbWV0cnksIGZlYXR1cmUuaW5kZXgsIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB1cGxvYWRQZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudXBsb2FkZWQgfHwgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQ7XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnVwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIGxheW91dEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIHRoaXMudXBsb2FkZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlKGZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBpbmRleDogbnVtYmVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIGNvbnN0IGpvaW4gPSBsYXlvdXQuZ2V0KCdsaW5lLWpvaW4nKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgICAgIGNvbnN0IGNhcCA9IGxheW91dC5nZXQoJ2xpbmUtY2FwJyk7XG4gICAgICAgIGNvbnN0IG1pdGVyTGltaXQgPSBsYXlvdXQuZ2V0KCdsaW5lLW1pdGVyLWxpbWl0Jyk7XG4gICAgICAgIGNvbnN0IHJvdW5kTGltaXQgPSBsYXlvdXQuZ2V0KCdsaW5lLXJvdW5kLWxpbWl0Jyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFkZExpbmUobGluZSwgZmVhdHVyZSwgam9pbiwgY2FwLCBtaXRlckxpbWl0LCByb3VuZExpbWl0LCBpbmRleCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkTGluZSh2ZXJ0aWNlczogQXJyYXk8UG9pbnQ+LCBmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBqb2luOiBzdHJpbmcsIGNhcDogc3RyaW5nLCBtaXRlckxpbWl0OiBudW1iZXIsIHJvdW5kTGltaXQ6IG51bWJlciwgaW5kZXg6IG51bWJlciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9IDA7XG4gICAgICAgIHRoaXMuc2NhbGVkRGlzdGFuY2UgPSAwO1xuICAgICAgICB0aGlzLnRvdGFsRGlzdGFuY2UgPSAwO1xuXG4gICAgICAgIGlmICghIWZlYXR1cmUucHJvcGVydGllcyAmJlxuICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCdtYXBib3hfY2xpcF9zdGFydCcpICYmXG4gICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ21hcGJveF9jbGlwX2VuZCcpKSB7XG5cbiAgICAgICAgICAgIHRoaXMuY2xpcFN0YXJ0ID0gK2ZlYXR1cmUucHJvcGVydGllc1snbWFwYm94X2NsaXBfc3RhcnQnXTtcbiAgICAgICAgICAgIHRoaXMuY2xpcEVuZCA9ICtmZWF0dXJlLnByb3BlcnRpZXNbJ21hcGJveF9jbGlwX2VuZCddO1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIGRpc3RhbmNlLCBpbiB0aWxlIHVuaXRzLCBvZiB0aGlzIHRpbGVkIGxpbmUgZmVhdHVyZVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsRGlzdGFuY2UgKz0gdmVydGljZXNbaV0uZGlzdCh2ZXJ0aWNlc1tpICsgMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNQb2x5Z29uID0gdmVjdG9yVGlsZUZlYXR1cmVUeXBlc1tmZWF0dXJlLnR5cGVdID09PSAnUG9seWdvbic7XG5cbiAgICAgICAgLy8gSWYgdGhlIGxpbmUgaGFzIGR1cGxpY2F0ZSB2ZXJ0aWNlcyBhdCB0aGUgZW5kcywgYWRqdXN0IHN0YXJ0L2xlbmd0aCB0byByZW1vdmUgdGhlbS5cbiAgICAgICAgbGV0IGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGxlbiA+PSAyICYmIHZlcnRpY2VzW2xlbiAtIDFdLmVxdWFscyh2ZXJ0aWNlc1tsZW4gLSAyXSkpIHtcbiAgICAgICAgICAgIGxlbi0tO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaXJzdCA9IDA7XG4gICAgICAgIHdoaWxlIChmaXJzdCA8IGxlbiAtIDEgJiYgdmVydGljZXNbZmlyc3RdLmVxdWFscyh2ZXJ0aWNlc1tmaXJzdCArIDFdKSkge1xuICAgICAgICAgICAgZmlyc3QrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElnbm9yZSBpbnZhbGlkIGdlb21ldHJ5LlxuICAgICAgICBpZiAobGVuIDwgKGlzUG9seWdvbiA/IDMgOiAyKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChqb2luID09PSAnYmV2ZWwnKSBtaXRlckxpbWl0ID0gMS4wNTtcblxuICAgICAgICBjb25zdCBzaGFycENvcm5lck9mZnNldCA9IFNIQVJQX0NPUk5FUl9PRkZTRVQgKiAoRVhURU5UIC8gKDUxMiAqIHRoaXMub3ZlcnNjYWxpbmcpKTtcblxuICAgICAgICAvLyB3ZSBjb3VsZCBiZSBtb3JlIHByZWNpc2UsIGJ1dCBpdCB3b3VsZCBvbmx5IHNhdmUgYSBuZWdsaWdpYmxlIGFtb3VudCBvZiBzcGFjZVxuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChsZW4gKiAxMCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcblxuICAgICAgICBsZXQgY3VycmVudFZlcnRleDtcbiAgICAgICAgbGV0IHByZXZWZXJ0ZXggPSAoKHVuZGVmaW5lZDogYW55KTogUG9pbnQpO1xuICAgICAgICBsZXQgbmV4dFZlcnRleCA9ICgodW5kZWZpbmVkOiBhbnkpOiBQb2ludCk7XG4gICAgICAgIGxldCBwcmV2Tm9ybWFsID0gKCh1bmRlZmluZWQ6IGFueSk6IFBvaW50KTtcbiAgICAgICAgbGV0IG5leHROb3JtYWwgPSAoKHVuZGVmaW5lZDogYW55KTogUG9pbnQpO1xuXG4gICAgICAgIC8vIHRoZSBsYXN0IHR3byB2ZXJ0aWNlcyBhZGRlZFxuICAgICAgICB0aGlzLmUxID0gdGhpcy5lMiA9IC0xO1xuXG4gICAgICAgIGlmIChpc1BvbHlnb24pIHtcbiAgICAgICAgICAgIGN1cnJlbnRWZXJ0ZXggPSB2ZXJ0aWNlc1tsZW4gLSAyXTtcbiAgICAgICAgICAgIG5leHROb3JtYWwgPSB2ZXJ0aWNlc1tmaXJzdF0uc3ViKGN1cnJlbnRWZXJ0ZXgpLl91bml0KCkuX3BlcnAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBmaXJzdDsgaSA8IGxlbjsgaSsrKSB7XG5cbiAgICAgICAgICAgIG5leHRWZXJ0ZXggPSBpc1BvbHlnb24gJiYgaSA9PT0gbGVuIC0gMSA/XG4gICAgICAgICAgICAgICAgdmVydGljZXNbZmlyc3QgKyAxXSA6IC8vIGlmIHRoZSBsaW5lIGlzIGNsb3NlZCwgd2UgdHJlYXQgdGhlIGxhc3QgdmVydGV4IGxpa2UgdGhlIGZpcnN0XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaSArIDFdOyAvLyBqdXN0IHRoZSBuZXh0IHZlcnRleFxuXG4gICAgICAgICAgICAvLyBpZiB0d28gY29uc2VjdXRpdmUgdmVydGljZXMgZXhpc3QsIHNraXAgdGhlIGN1cnJlbnQgb25lXG4gICAgICAgICAgICBpZiAobmV4dFZlcnRleCAmJiB2ZXJ0aWNlc1tpXS5lcXVhbHMobmV4dFZlcnRleCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAobmV4dE5vcm1hbCkgcHJldk5vcm1hbCA9IG5leHROb3JtYWw7XG4gICAgICAgICAgICBpZiAoY3VycmVudFZlcnRleCkgcHJldlZlcnRleCA9IGN1cnJlbnRWZXJ0ZXg7XG5cbiAgICAgICAgICAgIGN1cnJlbnRWZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBub3JtYWwgdG93YXJkcyB0aGUgbmV4dCB2ZXJ0ZXggaW4gdGhpcyBsaW5lLiBJbiBjYXNlXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBuZXh0IHZlcnRleCwgcHJldGVuZCB0aGF0IHRoZSBsaW5lIGlzIGNvbnRpbnVpbmcgc3RyYWlnaHQsXG4gICAgICAgICAgICAvLyBtZWFuaW5nIHRoYXQgd2UgYXJlIGp1c3QgdXNpbmcgdGhlIHByZXZpb3VzIG5vcm1hbC5cbiAgICAgICAgICAgIG5leHROb3JtYWwgPSBuZXh0VmVydGV4ID8gbmV4dFZlcnRleC5zdWIoY3VycmVudFZlcnRleCkuX3VuaXQoKS5fcGVycCgpIDogcHJldk5vcm1hbDtcblxuICAgICAgICAgICAgLy8gSWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIHByZXZpb3VzIG5vcm1hbCwgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIGFcbiAgICAgICAgICAgIC8vIG5vbi1jbG9zZWQgbGluZSwgc28gd2UncmUgZG9pbmcgYSBzdHJhaWdodCBcImpvaW5cIi5cbiAgICAgICAgICAgIHByZXZOb3JtYWwgPSBwcmV2Tm9ybWFsIHx8IG5leHROb3JtYWw7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB0aGUgbm9ybWFsIG9mIHRoZSBqb2luIGV4dHJ1c2lvbi4gSXQgaXMgdGhlIGFuZ2xlIGJpc2VjdG9yXG4gICAgICAgICAgICAvLyBvZiB0aGUgc2VnbWVudHMgYmV0d2VlbiB0aGUgcHJldmlvdXMgbGluZSBhbmQgdGhlIG5leHQgbGluZS5cbiAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIDE4MMOCwrAgYW5nbGVzLCB0aGUgcHJldiBhbmQgbmV4dCBub3JtYWxzIGNhbmNlbCBlYWNoIG90aGVyIG91dDpcbiAgICAgICAgICAgIC8vIHByZXZOb3JtYWwgKyBuZXh0Tm9ybWFsID0gKDAsIDApLCBpdHMgbWFnbml0dWRlIGlzIDAsIHNvIHRoZSB1bml0IHZlY3RvciB3b3VsZCBiZVxuICAgICAgICAgICAgLy8gdW5kZWZpbmVkLiBJbiB0aGF0IGNhc2UsIHdlJ3JlIGtlZXBpbmcgdGhlIGpvaW5Ob3JtYWwgYXQgKDAsIDApLCBzbyB0aGF0IHRoZSBjb3NIYWxmQW5nbGVcbiAgICAgICAgICAgIC8vIGJlbG93IHdpbGwgYWxzbyBiZWNvbWUgMCBhbmQgbWl0ZXJMZW5ndGggd2lsbCBiZWNvbWUgSW5maW5pdHkuXG4gICAgICAgICAgICBsZXQgam9pbk5vcm1hbCA9IHByZXZOb3JtYWwuYWRkKG5leHROb3JtYWwpO1xuICAgICAgICAgICAgaWYgKGpvaW5Ob3JtYWwueCAhPT0gMCB8fCBqb2luTm9ybWFsLnkgIT09IDApIHtcbiAgICAgICAgICAgICAgICBqb2luTm9ybWFsLl91bml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiAgam9pbk5vcm1hbCAgICAgcHJldk5vcm1hbFxuICAgICAgICAgICAgICogICAgICAgICAgICAgw6LChsKWICAgICAgw6LChsKRXG4gICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAuX19fX19fX18uIHByZXZWZXJ0ZXhcbiAgICAgICAgICAgICAqICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAqIG5leHROb3JtYWwgIMOiwobCkCAgfCAgY3VycmVudFZlcnRleFxuICAgICAgICAgICAgICogICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICogICAgIG5leHRWZXJ0ZXggIVxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAvLyBjYWxjdWxhdGUgY29zaW5lcyBvZiB0aGUgYW5nbGUgKGFuZCBpdHMgaGFsZikgdXNpbmcgZG90IHByb2R1Y3RcbiAgICAgICAgICAgIGNvbnN0IGNvc0FuZ2xlID0gcHJldk5vcm1hbC54ICogbmV4dE5vcm1hbC54ICsgcHJldk5vcm1hbC55ICogbmV4dE5vcm1hbC55O1xuICAgICAgICAgICAgY29uc3QgY29zSGFsZkFuZ2xlID0gam9pbk5vcm1hbC54ICogbmV4dE5vcm1hbC54ICsgam9pbk5vcm1hbC55ICogbmV4dE5vcm1hbC55O1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgbWl0ZXIgKHRoZSByYXRpbyBvZiB0aGUgbWl0ZXIgdG8gdGhlIHdpZHRoKVxuICAgICAgICAgICAgLy8gYXMgdGhlIGludmVyc2Ugb2YgY29zaW5lIG9mIHRoZSBhbmdsZSBiZXR3ZWVuIG5leHQgYW5kIGpvaW4gbm9ybWFsc1xuICAgICAgICAgICAgY29uc3QgbWl0ZXJMZW5ndGggPSBjb3NIYWxmQW5nbGUgIT09IDAgPyAxIC8gY29zSGFsZkFuZ2xlIDogSW5maW5pdHk7XG5cbiAgICAgICAgICAgIC8vIGFwcHJveGltYXRlIGFuZ2xlIGZyb20gY29zaW5lXG4gICAgICAgICAgICBjb25zdCBhcHByb3hBbmdsZSA9IDIgKiBNYXRoLnNxcnQoMiAtIDIgKiBjb3NIYWxmQW5nbGUpO1xuXG4gICAgICAgICAgICBjb25zdCBpc1NoYXJwQ29ybmVyID0gY29zSGFsZkFuZ2xlIDwgQ09TX0hBTEZfU0hBUlBfQ09STkVSICYmIHByZXZWZXJ0ZXggJiYgbmV4dFZlcnRleDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVUdXJuc0xlZnQgPSBwcmV2Tm9ybWFsLnggKiBuZXh0Tm9ybWFsLnkgLSBwcmV2Tm9ybWFsLnkgKiBuZXh0Tm9ybWFsLnggPiAwO1xuXG4gICAgICAgICAgICBpZiAoaXNTaGFycENvcm5lciAmJiBpID4gZmlyc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2U2VnbWVudExlbmd0aCA9IGN1cnJlbnRWZXJ0ZXguZGlzdChwcmV2VmVydGV4KTtcbiAgICAgICAgICAgICAgICBpZiAocHJldlNlZ21lbnRMZW5ndGggPiAyICogc2hhcnBDb3JuZXJPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UHJldlZlcnRleCA9IGN1cnJlbnRWZXJ0ZXguc3ViKGN1cnJlbnRWZXJ0ZXguc3ViKHByZXZWZXJ0ZXgpLl9tdWx0KHNoYXJwQ29ybmVyT2Zmc2V0IC8gcHJldlNlZ21lbnRMZW5ndGgpLl9yb3VuZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEaXN0YW5jZShwcmV2VmVydGV4LCBuZXdQcmV2VmVydGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KG5ld1ByZXZWZXJ0ZXgsIHByZXZOb3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2VmVydGV4ID0gbmV3UHJldlZlcnRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRoZSBqb2luIGlmIGEgbWlkZGxlIHZlcnRleCwgb3RoZXJ3aXNlIHRoZSBjYXAuXG4gICAgICAgICAgICBjb25zdCBtaWRkbGVWZXJ0ZXggPSBwcmV2VmVydGV4ICYmIG5leHRWZXJ0ZXg7XG4gICAgICAgICAgICBsZXQgY3VycmVudEpvaW4gPSBtaWRkbGVWZXJ0ZXggPyBqb2luIDogaXNQb2x5Z29uID8gJ2J1dHQnIDogY2FwO1xuXG4gICAgICAgICAgICBpZiAobWlkZGxlVmVydGV4ICYmIGN1cnJlbnRKb2luID09PSAncm91bmQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pdGVyTGVuZ3RoIDwgcm91bmRMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Sm9pbiA9ICdtaXRlcic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtaXRlckxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRKb2luID0gJ2Zha2Vyb3VuZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdtaXRlcicgJiYgbWl0ZXJMZW5ndGggPiBtaXRlckxpbWl0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEpvaW4gPSAnYmV2ZWwnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdiZXZlbCcpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgbWF4aW11bSBleHRydWRlIGxlbmd0aCBpcyAxMjggLyA2MyA9IDIgdGltZXMgdGhlIHdpZHRoIG9mIHRoZSBsaW5lXG4gICAgICAgICAgICAgICAgLy8gc28gaWYgbWl0ZXJMZW5ndGggPj0gMiB3ZSBuZWVkIHRvIGRyYXcgYSBkaWZmZXJlbnQgdHlwZSBvZiBiZXZlbCBoZXJlLlxuICAgICAgICAgICAgICAgIGlmIChtaXRlckxlbmd0aCA+IDIpIGN1cnJlbnRKb2luID0gJ2ZsaXBiZXZlbCc7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbWl0ZXJMZW5ndGggaXMgcmVhbGx5IHNtYWxsIGFuZCB0aGUgbGluZSBiZXZlbCB3b3VsZG4ndCBiZSB2aXNpYmxlLFxuICAgICAgICAgICAgICAgIC8vIGp1c3QgZHJhdyBhIG1pdGVyIGpvaW4gdG8gc2F2ZSBhIHRyaWFuZ2xlLlxuICAgICAgICAgICAgICAgIGlmIChtaXRlckxlbmd0aCA8IG1pdGVyTGltaXQpIGN1cnJlbnRKb2luID0gJ21pdGVyJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhvdyBmYXIgYWxvbmcgdGhlIGxpbmUgdGhlIGN1cnJlbnRWZXJ0ZXggaXNcbiAgICAgICAgICAgIGlmIChwcmV2VmVydGV4KSB0aGlzLnVwZGF0ZURpc3RhbmNlKHByZXZWZXJ0ZXgsIGN1cnJlbnRWZXJ0ZXgpO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdtaXRlcicpIHtcblxuICAgICAgICAgICAgICAgIGpvaW5Ob3JtYWwuX211bHQobWl0ZXJMZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Sm9pbiA9PT0gJ2ZsaXBiZXZlbCcpIHtcbiAgICAgICAgICAgICAgICAvLyBtaXRlciBpcyB0b28gYmlnLCBmbGlwIHRoZSBkaXJlY3Rpb24gdG8gbWFrZSBhIGJldmVsZWQgam9pblxuXG4gICAgICAgICAgICAgICAgaWYgKG1pdGVyTGVuZ3RoID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFsbW9zdCBwYXJhbGxlbCBsaW5lc1xuICAgICAgICAgICAgICAgICAgICBqb2luTm9ybWFsID0gbmV4dE5vcm1hbC5tdWx0KC0xKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJldmVsTGVuZ3RoID0gbWl0ZXJMZW5ndGggKiBwcmV2Tm9ybWFsLmFkZChuZXh0Tm9ybWFsKS5tYWcoKSAvIHByZXZOb3JtYWwuc3ViKG5leHROb3JtYWwpLm1hZygpO1xuICAgICAgICAgICAgICAgICAgICBqb2luTm9ybWFsLl9wZXJwKCkuX211bHQoYmV2ZWxMZW5ndGggKiAobGluZVR1cm5zTGVmdCA/IC0xIDogMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgam9pbk5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIGpvaW5Ob3JtYWwubXVsdCgtMSksIDAsIDAsIHNlZ21lbnQpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAnYmV2ZWwnIHx8IGN1cnJlbnRKb2luID09PSAnZmFrZXJvdW5kJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IC1NYXRoLnNxcnQobWl0ZXJMZW5ndGggKiBtaXRlckxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldEEgPSBsaW5lVHVybnNMZWZ0ID8gb2Zmc2V0IDogMDtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRCID0gbGluZVR1cm5zTGVmdCA/IDAgOiBvZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAvLyBDbG9zZSBwcmV2aW91cyBzZWdtZW50IHdpdGggYSBiZXZlbFxuICAgICAgICAgICAgICAgIGlmIChwcmV2VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBwcmV2Tm9ybWFsLCBvZmZzZXRBLCBvZmZzZXRCLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdmYWtlcm91bmQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBqb2luIGFuZ2xlIGlzIHNoYXJwIGVub3VnaCB0aGF0IGEgcm91bmQgam9pbiB3b3VsZCBiZSB2aXNpYmxlLlxuICAgICAgICAgICAgICAgICAgICAvLyBCZXZlbCBqb2lucyBmaWxsIHRoZSBnYXAgYmV0d2VlbiBzZWdtZW50cyB3aXRoIGEgc2luZ2xlIHBpZSBzbGljZSB0cmlhbmdsZS5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgcm91bmQgam9pbiBieSBhZGRpbmcgbXVsdGlwbGUgcGllIHNsaWNlcy4gVGhlIGpvaW4gaXNuJ3QgYWN0dWFsbHkgcm91bmQsIGJ1dFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCBsb29rcyBsaWtlIGl0IGlzIGF0IHRoZSBzaXplcyB3ZSByZW5kZXIgbGluZXMgYXQuXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gcGljayB0aGUgbnVtYmVyIG9mIHRyaWFuZ2xlcyBmb3IgYXBwcm94aW1hdGluZyByb3VuZCBqb2luIGJ5IGJhc2VkIG9uIHRoZSBhbmdsZSBiZXR3ZWVuIG5vcm1hbHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgucm91bmQoKGFwcHJveEFuZ2xlICogMTgwIC8gTWF0aC5QSSkgLyBERUdfUEVSX1RSSUFOR0xFKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBtID0gMTsgbSA8IG47IG0rKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSBtIC8gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICE9PSAwLjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcHByb3hpbWF0ZSBzcGhlcmljYWwgaW50ZXJwb2xhdGlvbiBodHRwczovL29ic2VydmFibGVocS5jb20vQG1vdXJuZXIvYXBwcm94aW1hdGluZy1nZW9tZXRyaWMtc2xlcnBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0MiA9IHQgLSAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQSA9IDEuMDkwNCArIGNvc0FuZ2xlICogKC0zLjI0NTIgKyBjb3NBbmdsZSAqICgzLjU1NjQ1IC0gY29zQW5nbGUgKiAxLjQzNTE5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQiA9IDAuODQ4MDEzICsgY29zQW5nbGUgKiAoLTEuMDYwMjEgKyBjb3NBbmdsZSAqIDAuMjE1NjM4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdCArIHQgKiB0MiAqICh0IC0gMSkgKiAoQSAqIHQyICogdDIgKyBCKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJ1ZGUgPSBuZXh0Tm9ybWFsLnN1YihwcmV2Tm9ybWFsKS5fbXVsdCh0KS5fYWRkKHByZXZOb3JtYWwpLl91bml0KCkuX211bHQobGluZVR1cm5zTGVmdCA/IC0xIDogMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEhhbGZWZXJ0ZXgoY3VycmVudFZlcnRleCwgZXh0cnVkZS54LCBleHRydWRlLnksIGZhbHNlLCBsaW5lVHVybnNMZWZ0LCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IG5leHQgc2VnbWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgbmV4dE5vcm1hbCwgLW9mZnNldEEsIC1vZmZzZXRCLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEpvaW4gPT09ICdidXR0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLCAwLCAwLCBzZWdtZW50KTsgLy8gYnV0dCBjYXBcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Sm9pbiA9PT0gJ3NxdWFyZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBwcmV2VmVydGV4ID8gMSA6IC0xOyAvLyBjbG9zaW5nIG9yIHN0YXJ0aW5nIHNxdWFyZSBjYXBcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgam9pbk5vcm1hbCwgb2Zmc2V0LCBvZmZzZXQsIHNlZ21lbnQpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAncm91bmQnKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJldlZlcnRleCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSBwcmV2aW91cyBzZWdtZW50IHdpdGggYnV0dFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgcHJldk5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHJvdW5kIGNhcCBvciBsaW5lam9pbiBhdCBlbmQgb2Ygc2VnbWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgcHJldk5vcm1hbCwgMSwgMSwgc2VnbWVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCByb3VuZCBjYXAgYmVmb3JlIGZpcnN0IHNlZ21lbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIG5leHROb3JtYWwsIC0xLCAtMSwgc2VnbWVudCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgbmV4dCBzZWdtZW50IHdpdGggYSBidXR0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBuZXh0Tm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1NoYXJwQ29ybmVyICYmIGkgPCBsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFNlZ21lbnRMZW5ndGggPSBjdXJyZW50VmVydGV4LmRpc3QobmV4dFZlcnRleCk7XG4gICAgICAgICAgICAgICAgaWYgKG5leHRTZWdtZW50TGVuZ3RoID4gMiAqIHNoYXJwQ29ybmVyT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0N1cnJlbnRWZXJ0ZXggPSBjdXJyZW50VmVydGV4LmFkZChuZXh0VmVydGV4LnN1YihjdXJyZW50VmVydGV4KS5fbXVsdChzaGFycENvcm5lck9mZnNldCAvIG5leHRTZWdtZW50TGVuZ3RoKS5fcm91bmQoKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzdGFuY2UoY3VycmVudFZlcnRleCwgbmV3Q3VycmVudFZlcnRleCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChuZXdDdXJyZW50VmVydGV4LCBuZXh0Tm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZlcnRleCA9IG5ld0N1cnJlbnRWZXJ0ZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCwgZmVhdHVyZSwgaW5kZXgsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdHdvIHZlcnRpY2VzIHRvIHRoZSBidWZmZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHAgdGhlIGxpbmUgdmVydGV4IHRvIGFkZCBidWZmZXIgdmVydGljZXMgZm9yXG4gICAgICogQHBhcmFtIG5vcm1hbCB2ZXJ0ZXggbm9ybWFsXG4gICAgICogQHBhcmFtIGVuZExlZnQgZXh0cnVkZSB0byBzaGlmdCB0aGUgbGVmdCB2ZXJ0ZXggYWxvbmcgdGhlIGxpbmVcbiAgICAgKiBAcGFyYW0gZW5kUmlnaHQgZXh0cnVkZSB0byBzaGlmdCB0aGUgbGVmdCB2ZXJ0ZXggYWxvbmcgdGhlIGxpbmVcbiAgICAgKiBAcGFyYW0gc2VnbWVudCB0aGUgc2VnbWVudCBvYmplY3QgdG8gYWRkIHRoZSB2ZXJ0ZXggdG9cbiAgICAgKiBAcGFyYW0gcm91bmQgd2hldGhlciB0aGlzIGlzIGEgcm91bmQgY2FwXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBhZGRDdXJyZW50VmVydGV4KHA6IFBvaW50LCBub3JtYWw6IFBvaW50LCBlbmRMZWZ0OiBudW1iZXIsIGVuZFJpZ2h0OiBudW1iZXIsIHNlZ21lbnQ6IFNlZ21lbnQsIHJvdW5kOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgLy8gbGVmdCBhbmQgcmlnaHQgZXh0cnVkZSB2ZWN0b3JzLCBwZXJwZW5kaWN1bGFybHkgc2hpZnRlZCBieSBlbmRMZWZ0L2VuZFJpZ2h0XG4gICAgICAgIGNvbnN0IGxlZnRYID0gbm9ybWFsLnggKyBub3JtYWwueSAqIGVuZExlZnQ7XG4gICAgICAgIGNvbnN0IGxlZnRZID0gbm9ybWFsLnkgLSBub3JtYWwueCAqIGVuZExlZnQ7XG4gICAgICAgIGNvbnN0IHJpZ2h0WCA9IC1ub3JtYWwueCArIG5vcm1hbC55ICogZW5kUmlnaHQ7XG4gICAgICAgIGNvbnN0IHJpZ2h0WSA9IC1ub3JtYWwueSAtIG5vcm1hbC54ICogZW5kUmlnaHQ7XG5cbiAgICAgICAgdGhpcy5hZGRIYWxmVmVydGV4KHAsIGxlZnRYLCBsZWZ0WSwgcm91bmQsIGZhbHNlLCBlbmRMZWZ0LCBzZWdtZW50KTtcbiAgICAgICAgdGhpcy5hZGRIYWxmVmVydGV4KHAsIHJpZ2h0WCwgcmlnaHRZLCByb3VuZCwgdHJ1ZSwgLWVuZFJpZ2h0LCBzZWdtZW50KTtcblxuICAgICAgICAvLyBUaGVyZSBpcyBhIG1heGltdW0gXCJkaXN0YW5jZSBhbG9uZyB0aGUgbGluZVwiIHRoYXQgd2UgY2FuIHN0b3JlIGluIHRoZSBidWZmZXJzLlxuICAgICAgICAvLyBXaGVuIHdlIGdldCBjbG9zZSB0byB0aGUgZGlzdGFuY2UsIHJlc2V0IGl0IHRvIHplcm8gYW5kIGFkZCB0aGUgdmVydGV4IGFnYWluIHdpdGhcbiAgICAgICAgLy8gYSBkaXN0YW5jZSBvZiB6ZXJvLiBUaGUgbWF4IGRpc3RhbmNlIGlzIGRldGVybWluZWQgYnkgdGhlIG51bWJlciBvZiBiaXRzIHdlIGFsbG9jYXRlXG4gICAgICAgIC8vIHRvIGBsaW5lc29mYXJgLlxuICAgICAgICBpZiAodGhpcy5kaXN0YW5jZSA+IE1BWF9MSU5FX0RJU1RBTkNFIC8gMiAmJiB0aGlzLnRvdGFsRGlzdGFuY2UgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2UgPSAwO1xuICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsIG5vcm1hbCwgZW5kTGVmdCwgZW5kUmlnaHQsIHNlZ21lbnQsIHJvdW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEhhbGZWZXJ0ZXgoe3gsIHl9OiBQb2ludCwgZXh0cnVkZVg6IG51bWJlciwgZXh0cnVkZVk6IG51bWJlciwgcm91bmQ6IGJvb2xlYW4sIHVwOiBib29sZWFuLCBkaXI6IG51bWJlciwgc2VnbWVudDogU2VnbWVudCkge1xuICAgICAgICAvLyBzY2FsZSBkb3duIHNvIHRoYXQgd2UgY2FuIHN0b3JlIGxvbmdlciBkaXN0YW5jZXMgd2hpbGUgc2FjcmlmaWNpbmcgcHJlY2lzaW9uLlxuICAgICAgICBjb25zdCBsaW5lc29mYXIgPSB0aGlzLnNjYWxlZERpc3RhbmNlICogTElORV9ESVNUQU5DRV9TQ0FMRTtcblxuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAgICAgLy8gYV9wb3Nfbm9ybWFsXG4gICAgICAgICAgICAvLyBFbmNvZGUgcm91bmQvdXAgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHNcbiAgICAgICAgICAgICh4IDw8IDEpICsgKHJvdW5kID8gMSA6IDApLFxuICAgICAgICAgICAgKHkgPDwgMSkgKyAodXAgPyAxIDogMCksXG4gICAgICAgICAgICAvLyBhX2RhdGFcbiAgICAgICAgICAgIC8vIGFkZCAxMjggdG8gc3RvcmUgYSBieXRlIGluIGFuIHVuc2lnbmVkIGJ5dGVcbiAgICAgICAgICAgIE1hdGgucm91bmQoRVhUUlVERV9TQ0FMRSAqIGV4dHJ1ZGVYKSArIDEyOCxcbiAgICAgICAgICAgIE1hdGgucm91bmQoRVhUUlVERV9TQ0FMRSAqIGV4dHJ1ZGVZKSArIDEyOCxcbiAgICAgICAgICAgIC8vIEVuY29kZSB0aGUgLTEvMC8xIGRpcmVjdGlvbiB2YWx1ZSBpbnRvIHRoZSBmaXJzdCB0d28gYml0cyBvZiAueiBvZiBhX2RhdGEuXG4gICAgICAgICAgICAvLyBDb21iaW5lIGl0IHdpdGggdGhlIGxvd2VyIDYgYml0cyBvZiBgbGluZXNvZmFyYCAoc2hpZnRlZCBieSAyIGJpdGVzIHRvIG1ha2VcbiAgICAgICAgICAgIC8vIHJvb20gZm9yIHRoZSBkaXJlY3Rpb24gdmFsdWUpLiBUaGUgdXBwZXIgOCBiaXRzIG9mIGBsaW5lc29mYXJgIGFyZSBwbGFjZWQgaW5cbiAgICAgICAgICAgIC8vIHRoZSBgd2AgY29tcG9uZW50LlxuICAgICAgICAgICAgKChkaXIgPT09IDAgPyAwIDogKGRpciA8IDAgPyAtMSA6IDEpKSArIDEpIHwgKChsaW5lc29mYXIgJiAweDNGKSA8PCAyKSxcbiAgICAgICAgICAgIGxpbmVzb2ZhciA+PiA2KTtcblxuICAgICAgICBjb25zdCBlID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGgrKztcbiAgICAgICAgaWYgKHRoaXMuZTEgPj0gMCAmJiB0aGlzLmUyID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh0aGlzLmUxLCB0aGlzLmUyLCBlKTtcbiAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwKSB7XG4gICAgICAgICAgICB0aGlzLmUyID0gZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZTEgPSBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlRGlzdGFuY2UocHJldjogUG9pbnQsIG5leHQ6IFBvaW50KSB7XG4gICAgICAgIHRoaXMuZGlzdGFuY2UgKz0gcHJldi5kaXN0KG5leHQpO1xuXG4gICAgICAgIC8vIEtub3dpbmcgdGhlIHJhdGlvIG9mIHRoZSBmdWxsIGxpbmVzdHJpbmcgY292ZXJlZCBieSB0aGlzIHRpbGVkIGZlYXR1cmUsIGFzIHdlbGxcbiAgICAgICAgLy8gYXMgdGhlIHRvdGFsIGRpc3RhbmNlIChpbiB0aWxlIHVuaXRzKSBvZiB0aGlzIHRpbGVkIGZlYXR1cmUsIGFuZCB0aGUgZGlzdGFuY2VcbiAgICAgICAgLy8gKGluIHRpbGUgdW5pdHMpIG9mIHRoZSBjdXJyZW50IHZlcnRleCwgd2UgY2FuIGRldGVybWluZSB0aGUgcmVsYXRpdmUgZGlzdGFuY2VcbiAgICAgICAgLy8gb2YgdGhpcyB2ZXJ0ZXggYWxvbmcgdGhlIGZ1bGwgbGluZXN0cmluZyBmZWF0dXJlIGFuZCBzY2FsZSBpdCB0byBbMCwgMl4xNSlcbiAgICAgICAgdGhpcy5zY2FsZWREaXN0YW5jZSA9IHRoaXMudG90YWxEaXN0YW5jZSA+IDAgP1xuICAgICAgICAgICAgKHRoaXMuY2xpcFN0YXJ0ICsgKHRoaXMuY2xpcEVuZCAtIHRoaXMuY2xpcFN0YXJ0KSAqIHRoaXMuZGlzdGFuY2UgLyB0aGlzLnRvdGFsRGlzdGFuY2UpICAqIChNQVhfTElORV9ESVNUQU5DRSAtIDEpIDpcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2U7XG4gICAgfVxufVxuXG5yZWdpc3RlcignTGluZUJ1Y2tldCcsIExpbmVCdWNrZXQsIHtvbWl0OiBbJ2xheWVycycsICdwYXR0ZXJuRmVhdHVyZXMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBMaW5lQnVja2V0O1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSB7fFxuICAgIFwibGluZS1jYXBcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJidXR0XCIgfCBcInJvdW5kXCIgfCBcInNxdWFyZVwiPixcbiAgICBcImxpbmUtam9pblwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJiZXZlbFwiIHwgXCJyb3VuZFwiIHwgXCJtaXRlclwiPixcbiAgICBcImxpbmUtbWl0ZXItbGltaXRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtcm91bmQtbGltaXRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtc29ydC1rZXlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImxpbmUtY2FwXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfbGluZVwiXVtcImxpbmUtY2FwXCJdKSxcbiAgICBcImxpbmUtam9pblwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9saW5lXCJdW1wibGluZS1qb2luXCJdKSxcbiAgICBcImxpbmUtbWl0ZXItbGltaXRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9saW5lXCJdW1wibGluZS1taXRlci1saW1pdFwiXSksXG4gICAgXCJsaW5lLXJvdW5kLWxpbWl0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfbGluZVwiXVtcImxpbmUtcm91bmQtbGltaXRcIl0pLFxuICAgIFwibGluZS1zb3J0LWtleVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9saW5lXCJdW1wibGluZS1zb3J0LWtleVwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJsaW5lLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJsaW5lLXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcImxpbmUtd2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLWdhcC13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtb2Zmc2V0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1ibHVyXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1kYXNoYXJyYXlcIjogQ3Jvc3NGYWRlZFByb3BlcnR5PEFycmF5PG51bWJlcj4+LFxuICAgIFwibGluZS1wYXR0ZXJuXCI6IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJsaW5lLWdyYWRpZW50XCI6IENvbG9yUmFtcFByb3BlcnR5LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwibGluZS1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtb3BhY2l0eVwiXSksXG4gICAgXCJsaW5lLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtY29sb3JcIl0pLFxuICAgIFwibGluZS10cmFuc2xhdGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLXRyYW5zbGF0ZVwiXSksXG4gICAgXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFxuICAgIFwibGluZS13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLXdpZHRoXCJdKSxcbiAgICBcImxpbmUtZ2FwLXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtZ2FwLXdpZHRoXCJdKSxcbiAgICBcImxpbmUtb2Zmc2V0XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtb2Zmc2V0XCJdKSxcbiAgICBcImxpbmUtYmx1clwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLWJsdXJcIl0pLFxuICAgIFwibGluZS1kYXNoYXJyYXlcIjogbmV3IENyb3NzRmFkZWRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1kYXNoYXJyYXlcIl0pLFxuICAgIFwibGluZS1wYXR0ZXJuXCI6IG5ldyBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLXBhdHRlcm5cIl0pLFxuICAgIFwibGluZS1ncmFkaWVudFwiOiBuZXcgQ29sb3JSYW1wUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtZ3JhZGllbnRcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQsIGxheW91dCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiwgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5pbXBvcnQgTGluZUJ1Y2tldCBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldC9saW5lX2J1Y2tldCc7XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQge3BvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmV9IGZyb20gJy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7Z2V0TWF4aW11bVBhaW50VmFsdWUsIHRyYW5zbGF0ZURpc3RhbmNlLCB0cmFuc2xhdGV9IGZyb20gJy4uL3F1ZXJ5X3V0aWxzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vbGluZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgcmVuZGVyQ29sb3JSYW1wIGZyb20gJy4uLy4uL3V0aWwvY29sb3JfcmFtcCc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBMYXlvdXQsIFBvc3NpYmx5RXZhbHVhdGVkLCBEYXRhRHJpdmVuUHJvcGVydHl9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldCwgQnVja2V0UGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUge0xheW91dFByb3BzLCBQYWludFByb3BzfSBmcm9tICcuL2xpbmVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBUZXh0dXJlIGZyb20gJy4uLy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBMaW5lRmxvb3J3aWR0aFByb3BlcnR5IGV4dGVuZHMgRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4ge1xuICAgIHVzZUludGVnZXJab29tOiB0cnVlO1xuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZSwgcGFyYW1ldGVycykge1xuICAgICAgICBwYXJhbWV0ZXJzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKE1hdGguZmxvb3IocGFyYW1ldGVycy56b29tKSwge1xuICAgICAgICAgICAgbm93OiBwYXJhbWV0ZXJzLm5vdyxcbiAgICAgICAgICAgIGZhZGVEdXJhdGlvbjogcGFyYW1ldGVycy5mYWRlRHVyYXRpb24sXG4gICAgICAgICAgICB6b29tSGlzdG9yeTogcGFyYW1ldGVycy56b29tSGlzdG9yeSxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHBhcmFtZXRlcnMudHJhbnNpdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnBvc3NpYmx5RXZhbHVhdGUodmFsdWUsIHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKHZhbHVlLCBnbG9iYWxzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgZ2xvYmFscyA9IGV4dGVuZCh7fSwgZ2xvYmFscywge3pvb206IE1hdGguZmxvb3IoZ2xvYmFscy56b29tKX0pO1xuICAgICAgICByZXR1cm4gc3VwZXIuZXZhbHVhdGUodmFsdWUsIGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgfVxufVxuXG5jb25zdCBsaW5lRmxvb3J3aWR0aFByb3BlcnR5ID0gbmV3IExpbmVGbG9vcndpZHRoUHJvcGVydHkocHJvcGVydGllcy5wYWludC5wcm9wZXJ0aWVzWydsaW5lLXdpZHRoJ10uc3BlY2lmaWNhdGlvbik7XG5saW5lRmxvb3J3aWR0aFByb3BlcnR5LnVzZUludGVnZXJab29tID0gdHJ1ZTtcblxuY2xhc3MgTGluZVN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBncmFkaWVudDogP1JHQkFJbWFnZTtcbiAgICBncmFkaWVudFRleHR1cmU6ID9UZXh0dXJlO1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAobmFtZSA9PT0gJ2xpbmUtZ3JhZGllbnQnKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFkaWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZUdyYWRpZW50KCkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWydsaW5lLWdyYWRpZW50J10udmFsdWUuZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5ncmFkaWVudCA9IHJlbmRlckNvbG9yUmFtcChleHByZXNzaW9uLCAnbGluZVByb2dyZXNzJyk7XG4gICAgICAgIHRoaXMuZ3JhZGllbnRUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHN1cGVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgKHRoaXMucGFpbnQuX3ZhbHVlczogYW55KVsnbGluZS1mbG9vcndpZHRoJ10gPVxuICAgICAgICAgICAgbGluZUZsb29yd2lkdGhQcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlKHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5fdmFsdWVzWydsaW5lLXdpZHRoJ10udmFsdWUsIHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUJ1Y2tldChwYXJhbWV0ZXJzOiBCdWNrZXRQYXJhbWV0ZXJzPCo+KSB7XG4gICAgICAgIHJldHVybiBuZXcgTGluZUJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cyhidWNrZXQ6IEJ1Y2tldCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGxpbmVCdWNrZXQ6IExpbmVCdWNrZXQgPSAoYnVja2V0OiBhbnkpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGdldExpbmVXaWR0aChcbiAgICAgICAgICAgIGdldE1heGltdW1QYWludFZhbHVlKCdsaW5lLXdpZHRoJywgdGhpcywgbGluZUJ1Y2tldCksXG4gICAgICAgICAgICBnZXRNYXhpbXVtUGFpbnRWYWx1ZSgnbGluZS1nYXAtd2lkdGgnLCB0aGlzLCBsaW5lQnVja2V0KSk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGdldE1heGltdW1QYWludFZhbHVlKCdsaW5lLW9mZnNldCcsIHRoaXMsIGxpbmVCdWNrZXQpO1xuICAgICAgICByZXR1cm4gd2lkdGggLyAyICsgTWF0aC5hYnMob2Zmc2V0KSArIHRyYW5zbGF0ZURpc3RhbmNlKHRoaXMucGFpbnQuZ2V0KCdsaW5lLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2xpbmUtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICB0cmFuc2Zvcm0uYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgY29uc3QgaGFsZldpZHRoID0gcGl4ZWxzVG9UaWxlVW5pdHMgLyAyICogZ2V0TGluZVdpZHRoKFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2xpbmUtd2lkdGgnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2xpbmUtZ2FwLXdpZHRoJykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSB0aGlzLnBhaW50LmdldCgnbGluZS1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBpZiAobGluZU9mZnNldCkge1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSBvZmZzZXRMaW5lKGdlb21ldHJ5LCBsaW5lT2Zmc2V0ICogcGl4ZWxzVG9UaWxlVW5pdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmUodHJhbnNsYXRlZFBvbHlnb24sIGdlb21ldHJ5LCBoYWxmV2lkdGgpO1xuICAgIH1cblxuICAgIGlzVGlsZUNsaXBwZWQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluZVN0eWxlTGF5ZXI7XG5cbmZ1bmN0aW9uIGdldExpbmVXaWR0aChsaW5lV2lkdGgsIGxpbmVHYXBXaWR0aCkge1xuICAgIGlmIChsaW5lR2FwV2lkdGggPiAwKSB7XG4gICAgICAgIHJldHVybiBsaW5lR2FwV2lkdGggKyAyICogbGluZVdpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsaW5lV2lkdGg7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBvZmZzZXRMaW5lKHJpbmdzLCBvZmZzZXQpIHtcbiAgICBjb25zdCBuZXdSaW5ncyA9IFtdO1xuICAgIGNvbnN0IHplcm8gPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCByaW5ncy5sZW5ndGg7IGsrKykge1xuICAgICAgICBjb25zdCByaW5nID0gcmluZ3Nba107XG4gICAgICAgIGNvbnN0IG5ld1JpbmcgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gcmluZ1tpIC0gMV07XG4gICAgICAgICAgICBjb25zdCBiID0gcmluZ1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSByaW5nW2kgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGFUb0IgPSBpID09PSAwID8gemVybyA6IGIuc3ViKGEpLl91bml0KCkuX3BlcnAoKTtcbiAgICAgICAgICAgIGNvbnN0IGJUb0MgPSBpID09PSByaW5nLmxlbmd0aCAtIDEgPyB6ZXJvIDogYy5zdWIoYikuX3VuaXQoKS5fcGVycCgpO1xuICAgICAgICAgICAgY29uc3QgZXh0cnVkZSA9IGFUb0IuX2FkZChiVG9DKS5fdW5pdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBjb3NIYWxmQW5nbGUgPSBleHRydWRlLnggKiBiVG9DLnggKyBleHRydWRlLnkgKiBiVG9DLnk7XG4gICAgICAgICAgICBleHRydWRlLl9tdWx0KDEgLyBjb3NIYWxmQW5nbGUpO1xuXG4gICAgICAgICAgICBuZXdSaW5nLnB1c2goZXh0cnVkZS5fbXVsdChvZmZzZXQpLl9hZGQoYikpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JpbmdzLnB1c2gobmV3UmluZyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdSaW5ncztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmV4cG9ydCBjb25zdCBzeW1ib2xMYXlvdXRBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zX29mZnNldCcsICBjb21wb25lbnRzOiA0LCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2FfZGF0YScsICAgICAgICBjb21wb25lbnRzOiA0LCB0eXBlOiAnVWludDE2J31cbl0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1pY0xheW91dEF0dHJpYnV0ZXMgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wcm9qZWN0ZWRfcG9zJywgY29tcG9uZW50czogMywgdHlwZTogJ0Zsb2F0MzInfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBwbGFjZW1lbnRPcGFjaXR5QXR0cmlidXRlcyA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX2ZhZGVfb3BhY2l0eScsIGNvbXBvbmVudHM6IDEsIHR5cGU6ICdVaW50MzInfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25WZXJ0ZXhBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcGxhY2VkJywgY29tcG9uZW50czogMiwgdHlwZTogJ1VpbnQ4J30sXG4gICAge25hbWU6ICdhX3NoaWZ0JywgY29tcG9uZW50czogMiwgdHlwZTogJ0Zsb2F0MzInfVxuXSk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25Cb3ggPSBjcmVhdGVMYXlvdXQoW1xuICAgIC8vIHRoZSBib3ggaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBhbmNob3IgcG9pbnRcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclBvaW50WCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yUG9pbnRZJ30sXG5cbiAgICAvLyBkaXN0YW5jZXMgdG8gdGhlIGVkZ2VzIGZyb20gdGhlIGFuY2hvclxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneDEnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3kxJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd4Mid9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneTInfSxcblxuICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmVhdHVyZSBpbiB0aGUgb3JpZ2luYWwgdmVjdG9ydGlsZVxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ2ZlYXR1cmVJbmRleCd9LFxuICAgIC8vIHRoZSBzb3VyY2UgbGF5ZXIgdGhlIGZlYXR1cmUgYXBwZWFycyBpblxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3NvdXJjZUxheWVySW5kZXgnfSxcbiAgICAvLyB0aGUgYnVja2V0IHRoZSBmZWF0dXJlIGFwcGVhcnMgaW5cbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdidWNrZXRJbmRleCd9LFxuXG4gICAgLy8gY29sbGlzaW9uIGNpcmNsZXMgZm9yIGxpbmVzIHN0b3JlIHRoZWlyIGRpc3RhbmNlIHRvIHRoZSBhbmNob3IgaW4gdGlsZSB1bml0c1xuICAgIC8vIHNvIHRoYXQgdGhleSBjYW4gYmUgaWdub3JlZCBpZiB0aGUgcHJvamVjdGVkIGxhYmVsIGRvZXNuJ3QgZXh0ZW5kIGludG9cbiAgICAvLyB0aGUgYm94IGFyZWFcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3JhZGl1cyd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yJ31cbl0pO1xuXG5leHBvcnQgY29uc3QgY29sbGlzaW9uQm94TGF5b3V0ID0gY3JlYXRlTGF5b3V0KFsgLy8gdXNlZCB0byByZW5kZXIgY29sbGlzaW9uIGJveGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXNcbiAgICB7bmFtZTogJ2FfcG9zJywgICAgICAgIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9hbmNob3JfcG9zJywgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX2V4dHJ1ZGUnLCAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25DaXJjbGVMYXlvdXQgPSBjcmVhdGVMYXlvdXQoWyAvLyB1c2VkIHRvIHJlbmRlciBjb2xsaXNpb24gY2lyY2xlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzXG4gICAge25hbWU6ICdhX3BvcycsICAgICAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2FfYW5jaG9yX3BvcycsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9leHRydWRlJywgICAgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J31cbl0sIDQpO1xuXG5leHBvcnQgY29uc3QgcGxhY2VtZW50ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclknfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdnbHlwaFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1HbHlwaHMnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICd2ZXJ0ZXhTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MzInLCBuYW1lOiAnbGluZVN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdsaW5lTGVuZ3RoJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnc2VnbWVudCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2xvd2VyU2l6ZSd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3VwcGVyU2l6ZSd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICdsaW5lT2Zmc2V0WCd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICdsaW5lT2Zmc2V0WSd9LFxuICAgIHt0eXBlOiAnVWludDgnLCBuYW1lOiAnd3JpdGluZ01vZGUnfSxcbiAgICB7dHlwZTogJ1VpbnQ4JywgbmFtZTogJ3BsYWNlZE9yaWVudGF0aW9uJ30sXG4gICAge3R5cGU6ICdVaW50OCcsIG5hbWU6ICdoaWRkZW4nfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdjcm9zc1RpbGVJRCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYXNzb2NpYXRlZEljb25JbmRleCd9XG5dKTtcblxuZXhwb3J0IGNvbnN0IHN5bWJvbEluc3RhbmNlID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclknfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3JpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2xlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3ZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdwbGFjZWRJY29uU3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdrZXknfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd0ZXh0Qm94U3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3RleHRCb3hFbmRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3ZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2ljb25Cb3hTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnaWNvbkJveEVuZEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnZmVhdHVyZUluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1WZXJ0aWNhbEdseXBoVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1JY29uVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdjcm9zc1RpbGVJRCd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICd0ZXh0Qm94U2NhbGUnfSxcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBjb21wb25lbnRzOiAyLCBuYW1lOiAndGV4dE9mZnNldCd9XG5dKTtcblxuZXhwb3J0IGNvbnN0IGdseXBoT2Zmc2V0ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBuYW1lOiAnb2Zmc2V0WCd9XG5dKTtcblxuZXhwb3J0IGNvbnN0IGxpbmVWZXJ0ZXggPSBjcmVhdGVMYXlvdXQoW1xuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneSd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAndGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3InfVxuXSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BsdWdpbiBhcyBydGxUZXh0UGx1Z2lufSBmcm9tICcuLi9zb3VyY2UvcnRsX3RleHRfcGx1Z2luJztcblxuaW1wb3J0IHR5cGUgU3ltYm9sU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmV9IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UZXh0KHRleHQ6IHN0cmluZywgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsIGZlYXR1cmU6IEZlYXR1cmUpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXRyYW5zZm9ybScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICBpZiAodHJhbnNmb3JtID09PSAndXBwZXJjYXNlJykge1xuICAgICAgICB0ZXh0ID0gdGV4dC50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgIH0gZWxzZSBpZiAodHJhbnNmb3JtID09PSAnbG93ZXJjYXNlJykge1xuICAgICAgICB0ZXh0ID0gdGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmIChydGxUZXh0UGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZykge1xuICAgICAgICB0ZXh0ID0gcnRsVGV4dFBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmcodGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRleHQ6IEZvcm1hdHRlZCwgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsIGZlYXR1cmU6IEZlYXR1cmUpOiBGb3JtYXR0ZWQge1xuICAgIHRleHQuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgICAgc2VjdGlvbi50ZXh0ID0gdHJhbnNmb3JtVGV4dChzZWN0aW9uLnRleHQsIGxheWVyLCBmZWF0dXJlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGV4dDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtTeW1ib2xGZWF0dXJlfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGZlYXR1cmVzOiBBcnJheTxTeW1ib2xGZWF0dXJlPik6IEFycmF5PFN5bWJvbEZlYXR1cmU+IHtcbiAgICBjb25zdCBsZWZ0SW5kZXg6IHtbc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuICAgIGNvbnN0IHJpZ2h0SW5kZXg6IHtbc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuICAgIGNvbnN0IG1lcmdlZEZlYXR1cmVzID0gW107XG4gICAgbGV0IG1lcmdlZEluZGV4ID0gMDtcblxuICAgIGZ1bmN0aW9uIGFkZChrKSB7XG4gICAgICAgIG1lcmdlZEZlYXR1cmVzLnB1c2goZmVhdHVyZXNba10pO1xuICAgICAgICBtZXJnZWRJbmRleCsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlRnJvbVJpZ2h0KGxlZnRLZXk6IHN0cmluZywgcmlnaHRLZXk6IHN0cmluZywgZ2VvbSkge1xuICAgICAgICBjb25zdCBpID0gcmlnaHRJbmRleFtsZWZ0S2V5XTtcbiAgICAgICAgZGVsZXRlIHJpZ2h0SW5kZXhbbGVmdEtleV07XG4gICAgICAgIHJpZ2h0SW5kZXhbcmlnaHRLZXldID0gaTtcblxuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXS5wb3AoKTtcbiAgICAgICAgbWVyZ2VkRmVhdHVyZXNbaV0uZ2VvbWV0cnlbMF0gPSBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXS5jb25jYXQoZ2VvbVswXSk7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlRnJvbUxlZnQobGVmdEtleTogc3RyaW5nLCByaWdodEtleTogc3RyaW5nLCBnZW9tKSB7XG4gICAgICAgIGNvbnN0IGkgPSBsZWZ0SW5kZXhbcmlnaHRLZXldO1xuICAgICAgICBkZWxldGUgbGVmdEluZGV4W3JpZ2h0S2V5XTtcbiAgICAgICAgbGVmdEluZGV4W2xlZnRLZXldID0gaTtcblxuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXS5zaGlmdCgpO1xuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXSA9IGdlb21bMF0uY29uY2F0KG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdKTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0S2V5KHRleHQsIGdlb20sIG9uUmlnaHQpIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBvblJpZ2h0ID8gZ2VvbVswXVtnZW9tWzBdLmxlbmd0aCAtIDFdIDogZ2VvbVswXVswXTtcbiAgICAgICAgcmV0dXJuIGAke3RleHR9OiR7cG9pbnQueH06JHtwb2ludC55fWA7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBmZWF0dXJlcy5sZW5ndGg7IGsrKykge1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNba107XG4gICAgICAgIGNvbnN0IGdlb20gPSBmZWF0dXJlLmdlb21ldHJ5O1xuICAgICAgICBjb25zdCB0ZXh0ID0gZmVhdHVyZS50ZXh0ID8gZmVhdHVyZS50ZXh0LnRvU3RyaW5nKCkgOiBudWxsO1xuXG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgYWRkKGspO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZWZ0S2V5ID0gZ2V0S2V5KHRleHQsIGdlb20pLFxuICAgICAgICAgICAgcmlnaHRLZXkgPSBnZXRLZXkodGV4dCwgZ2VvbSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKChsZWZ0S2V5IGluIHJpZ2h0SW5kZXgpICYmIChyaWdodEtleSBpbiBsZWZ0SW5kZXgpICYmIChyaWdodEluZGV4W2xlZnRLZXldICE9PSBsZWZ0SW5kZXhbcmlnaHRLZXldKSkge1xuICAgICAgICAgICAgLy8gZm91bmQgbGluZXMgd2l0aCB0aGUgc2FtZSB0ZXh0IGFkamFjZW50IHRvIGJvdGggZW5kcyBvZiB0aGUgY3VycmVudCBsaW5lLCBtZXJnZSBhbGwgdGhyZWVcbiAgICAgICAgICAgIGNvbnN0IGogPSBtZXJnZUZyb21MZWZ0KGxlZnRLZXksIHJpZ2h0S2V5LCBnZW9tKTtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBtZXJnZUZyb21SaWdodChsZWZ0S2V5LCByaWdodEtleSwgbWVyZ2VkRmVhdHVyZXNbal0uZ2VvbWV0cnkpO1xuXG4gICAgICAgICAgICBkZWxldGUgbGVmdEluZGV4W2xlZnRLZXldO1xuICAgICAgICAgICAgZGVsZXRlIHJpZ2h0SW5kZXhbcmlnaHRLZXldO1xuXG4gICAgICAgICAgICByaWdodEluZGV4W2dldEtleSh0ZXh0LCBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeSwgdHJ1ZSldID0gaTtcbiAgICAgICAgICAgIG1lcmdlZEZlYXR1cmVzW2pdLmdlb21ldHJ5ID0gKG51bGw6IGFueSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChsZWZ0S2V5IGluIHJpZ2h0SW5kZXgpIHtcbiAgICAgICAgICAgIC8vIGZvdW5kIG1lcmdlYWJsZSBsaW5lIGFkamFjZW50IHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBsaW5lLCBtZXJnZVxuICAgICAgICAgICAgbWVyZ2VGcm9tUmlnaHQobGVmdEtleSwgcmlnaHRLZXksIGdlb20pO1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmlnaHRLZXkgaW4gbGVmdEluZGV4KSB7XG4gICAgICAgICAgICAvLyBmb3VuZCBtZXJnZWFibGUgbGluZSBhZGphY2VudCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUsIG1lcmdlXG4gICAgICAgICAgICBtZXJnZUZyb21MZWZ0KGxlZnRLZXksIHJpZ2h0S2V5LCBnZW9tKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbm8gYWRqYWNlbnQgbGluZXMsIGFkZCBhcyBhIG5ldyBpdGVtXG4gICAgICAgICAgICBhZGQoayk7XG4gICAgICAgICAgICBsZWZ0SW5kZXhbbGVmdEtleV0gPSBtZXJnZWRJbmRleCAtIDE7XG4gICAgICAgICAgICByaWdodEluZGV4W3JpZ2h0S2V5XSA9IG1lcmdlZEluZGV4IC0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWRGZWF0dXJlcy5maWx0ZXIoKGYpID0+IGYuZ2VvbWV0cnkpO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24sXG59IGZyb20gJy4vc2NyaXB0X2RldGVjdGlvbic7XG5cbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXAgPSB7XG4gICAgJyEnOiAnw6/CuMKVJyxcbiAgICAnIyc6ICfDr8K8woMnLFxuICAgICckJzogJ8OvwrzChCcsXG4gICAgJyUnOiAnw6/CvMKFJyxcbiAgICAnJic6ICfDr8K8woYnLFxuICAgICcoJzogJ8OvwrjCtScsXG4gICAgJyknOiAnw6/CuMK2JyxcbiAgICAnKic6ICfDr8K8woonLFxuICAgICcrJzogJ8OvwrzCiycsXG4gICAgJywnOiAnw6/CuMKQJyxcbiAgICAnLSc6ICfDr8K4wrInLFxuICAgICcuJzogJ8OjwoPCuycsXG4gICAgJy8nOiAnw6/CvMKPJyxcbiAgICAnOic6ICfDr8K4wpMnLFxuICAgICc7JzogJ8OvwrjClCcsXG4gICAgJzwnOiAnw6/CuMK/JyxcbiAgICAnPSc6ICfDr8K8wp0nLFxuICAgICc+JzogJ8OvwrnCgCcsXG4gICAgJz8nOiAnw6/CuMKWJyxcbiAgICAnQCc6ICfDr8K8wqAnLFxuICAgICdbJzogJ8OvwrnChycsXG4gICAgJ1xcXFwnOiAnw6/CvMK8JyxcbiAgICAnXSc6ICfDr8K5wognLFxuICAgICdeJzogJ8OvwrzCvicsXG4gICAgJ18nOiAnw6/CuMKzJyxcbiAgICAnYCc6ICfDr8K9woAnLFxuICAgICd7JzogJ8OvwrjCtycsXG4gICAgJ3wnOiAnw6LCgMKVJyxcbiAgICAnfSc6ICfDr8K4wrgnLFxuICAgICd+JzogJ8Ovwr3CnicsXG4gICAgJ8OCwqInOiAnw6/Cv8KgJyxcbiAgICAnw4LCoyc6ICfDr8K/wqEnLFxuICAgICfDgsKlJzogJ8Ovwr/CpScsXG4gICAgJ8OCwqYnOiAnw6/Cv8KkJyxcbiAgICAnw4LCrCc6ICfDr8K/wqInLFxuICAgICfDgsKvJzogJ8Ovwr/CoycsXG4gICAgJ8OiwoDCkyc6ICfDr8K4wrInLFxuICAgICfDosKAwpQnOiAnw6/CuMKxJyxcbiAgICAnw6LCgMKYJzogJ8OvwrnCgycsXG4gICAgJ8OiwoDCmSc6ICfDr8K5woQnLFxuICAgICfDosKAwpwnOiAnw6/CucKBJyxcbiAgICAnw6LCgMKdJzogJ8OvwrnCgicsXG4gICAgJ8OiwoDCpic6ICfDr8K4wpknLFxuICAgICfDosKAwqcnOiAnw6PCg8K7JyxcbiAgICAnw6LCgsKpJzogJ8Ovwr/CpicsXG4gICAgJ8OjwoDCgSc6ICfDr8K4wpEnLFxuICAgICfDo8KAwoInOiAnw6/CuMKSJyxcbiAgICAnw6PCgMKIJzogJ8OvwrjCvycsXG4gICAgJ8OjwoDCiSc6ICfDr8K5woAnLFxuICAgICfDo8KAwoonOiAnw6/CuMK9JyxcbiAgICAnw6PCgMKLJzogJ8OvwrjCvicsXG4gICAgJ8OjwoDCjCc6ICfDr8K5woEnLFxuICAgICfDo8KAwo0nOiAnw6/CucKCJyxcbiAgICAnw6PCgMKOJzogJ8OvwrnCgycsXG4gICAgJ8OjwoDCjyc6ICfDr8K5woQnLFxuICAgICfDo8KAwpAnOiAnw6/CuMK7JyxcbiAgICAnw6PCgMKRJzogJ8OvwrjCvCcsXG4gICAgJ8OjwoDClCc6ICfDr8K4wrknLFxuICAgICfDo8KAwpUnOiAnw6/CuMK6JyxcbiAgICAnw6PCgMKWJzogJ8OvwrjClycsXG4gICAgJ8OjwoDClyc6ICfDr8K4wpgnLFxuICAgICfDr8K8woEnOiAnw6/CuMKVJyxcbiAgICAnw6/CvMKIJzogJ8OvwrjCtScsXG4gICAgJ8OvwrzCiSc6ICfDr8K4wrYnLFxuICAgICfDr8K8wownOiAnw6/CuMKQJyxcbiAgICAnw6/CvMKNJzogJ8OvwrjCsicsXG4gICAgJ8OvwrzCjic6ICfDo8KDwrsnLFxuICAgICfDr8K8wponOiAnw6/CuMKTJyxcbiAgICAnw6/CvMKbJzogJ8OvwrjClCcsXG4gICAgJ8OvwrzCnCc6ICfDr8K4wr8nLFxuICAgICfDr8K8wp4nOiAnw6/CucKAJyxcbiAgICAnw6/CvMKfJzogJ8OvwrjClicsXG4gICAgJ8OvwrzCuyc6ICfDr8K5wocnLFxuICAgICfDr8K8wr0nOiAnw6/CucKIJyxcbiAgICAnw6/CvMK/JzogJ8OvwrjCsycsXG4gICAgJ8Ovwr3Cmyc6ICfDr8K4wrcnLFxuICAgICfDr8K9wpwnOiAnw6LCgMKVJyxcbiAgICAnw6/CvcKdJzogJ8OvwrjCuCcsXG4gICAgJ8Ovwr3Cnyc6ICfDr8K4wrUnLFxuICAgICfDr8K9wqAnOiAnw6/CuMK2JyxcbiAgICAnw6/CvcKhJzogJ8OvwrjCkicsXG4gICAgJ8Ovwr3Coic6ICfDr8K5woEnLFxuICAgICfDr8K9wqMnOiAnw6/CucKCJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVydGljYWxpemVQdW5jdHVhdGlvbihpbnB1dDogc3RyaW5nKSB7XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuZXh0Q2hhckNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkgKyAxKSB8fCBudWxsO1xuICAgICAgICBjb25zdCBwcmV2Q2hhckNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkgLSAxKSB8fCBudWxsO1xuXG4gICAgICAgIGNvbnN0IGNhblJlcGxhY2VQdW5jdHVhdGlvbiA9IChcbiAgICAgICAgICAgICghbmV4dENoYXJDb2RlIHx8ICFjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24obmV4dENoYXJDb2RlKSB8fCB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbaW5wdXRbaSArIDFdXSkgJiZcbiAgICAgICAgICAgICghcHJldkNoYXJDb2RlIHx8ICFjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24ocHJldkNoYXJDb2RlKSB8fCB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbaW5wdXRbaSAtIDFdXSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2FuUmVwbGFjZVB1bmN0dWF0aW9uICYmIHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcFtpbnB1dFtpXV0pIHtcbiAgICAgICAgICAgIG91dHB1dCArPSB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbaW5wdXRbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0ICs9IGlucHV0W2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbn1cblxuIiwiLy8gQGZsb3dcbi8vIE9ORV9FTSBjb25zdGFudCB1c2VkIHRvIGdvIGJldHdlZW4gXCJlbVwiIHVuaXRzIHVzZWQgaW4gc3R5bGUgc3BlYyBhbmQgXCJwb2ludHNcIiB1c2VkIGludGVybmFsbHkgZm9yIGxheW91dFxuXG5leHBvcnQgZGVmYXVsdCAyNDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gICAgY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uLFxuICAgIGNoYXJBbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nLFxuICAgIGNoYXJJbkNvbXBsZXhTaGFwaW5nU2NyaXB0XG59IGZyb20gJy4uL3V0aWwvc2NyaXB0X2RldGVjdGlvbic7XG5pbXBvcnQgdmVydGljYWxpemVQdW5jdHVhdGlvbiBmcm9tICcuLi91dGlsL3ZlcnRpY2FsaXplX3B1bmN0dWF0aW9uJztcbmltcG9ydCB7cGx1Z2luIGFzIHJ0bFRleHRQbHVnaW59IGZyb20gJy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuaW1wb3J0IE9ORV9FTSBmcm9tICcuL29uZV9lbSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmNvbnN0IFdyaXRpbmdNb2RlID0ge1xuICAgIGhvcml6b250YWw6IDEsXG4gICAgdmVydGljYWw6IDIsXG4gICAgaG9yaXpvbnRhbE9ubHk6IDNcbn07XG5cbmV4cG9ydCB7c2hhcGVUZXh0LCBzaGFwZUljb24sIGZpdEljb25Ub1RleHQsIGdldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGV9O1xuXG4vLyBUaGUgcG9zaXRpb24gb2YgYSBnbHlwaCByZWxhdGl2ZSB0byB0aGUgdGV4dCdzIGFuY2hvciBwb2ludC5cbmV4cG9ydCB0eXBlIFBvc2l0aW9uZWRHbHlwaCA9IHtcbiAgICBnbHlwaDogbnVtYmVyLFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgdmVydGljYWw6IGJvb2xlYW4sXG4gICAgc2NhbGU6IG51bWJlcixcbiAgICBmb250U3RhY2s6IHN0cmluZyxcbiAgICBzZWN0aW9uSW5kZXg6IG51bWJlclxufTtcblxuLy8gQSBjb2xsZWN0aW9uIG9mIHBvc2l0aW9uZWQgZ2x5cGhzIGFuZCBzb21lIG1ldGFkYXRhXG5leHBvcnQgdHlwZSBTaGFwaW5nID0ge1xuICAgIHBvc2l0aW9uZWRHbHlwaHM6IEFycmF5PFBvc2l0aW9uZWRHbHlwaD4sXG4gICAgdG9wOiBudW1iZXIsXG4gICAgYm90dG9tOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIHJpZ2h0OiBudW1iZXIsXG4gICAgd3JpdGluZ01vZGU6IDEgfCAyLFxuICAgIGxpbmVDb3VudDogbnVtYmVyLFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICB5T2Zmc2V0OiBudW1iZXIsXG59O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xBbmNob3IgPSAnY2VudGVyJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nIHwgJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnO1xuZXhwb3J0IHR5cGUgVGV4dEp1c3RpZnkgPSAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG5cbmNsYXNzIFRhZ2dlZFN0cmluZyB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHNlY3Rpb25JbmRleDogQXJyYXk8bnVtYmVyPiAvLyBtYXBzIGVhY2ggY2hhcmFjdGVyIGluICd0ZXh0JyB0byBpdHMgY29ycmVzcG9uZGluZyBlbnRyeSBpbiAnc2VjdGlvbnMnXG4gICAgc2VjdGlvbnM6IEFycmF5PHsgc2NhbGU6IG51bWJlciwgZm9udFN0YWNrOiBzdHJpbmcgfT5cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRleHQgPSBcIlwiO1xuICAgICAgICB0aGlzLnNlY3Rpb25JbmRleCA9IFtdO1xuICAgICAgICB0aGlzLnNlY3Rpb25zID0gW107XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21GZWF0dXJlKHRleHQ6IEZvcm1hdHRlZCwgZGVmYXVsdEZvbnRTdGFjazogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0LnNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGV4dC5zZWN0aW9uc1tpXTtcbiAgICAgICAgICAgIHJlc3VsdC5zZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzY2FsZTogc2VjdGlvbi5zY2FsZSB8fCAxLFxuICAgICAgICAgICAgICAgIGZvbnRTdGFjazogc2VjdGlvbi5mb250U3RhY2sgfHwgZGVmYXVsdEZvbnRTdGFja1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHQudGV4dCArPSBzZWN0aW9uLnRleHQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNlY3Rpb24udGV4dC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZWN0aW9uSW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGxlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBnZXRTZWN0aW9uKGluZGV4OiBudW1iZXIpOiB7IHNjYWxlOiBudW1iZXIsIGZvbnRTdGFjazogc3RyaW5nIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWN0aW9uc1t0aGlzLnNlY3Rpb25JbmRleFtpbmRleF1dO1xuICAgIH1cblxuICAgIGdldFNlY3Rpb25JbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4W2luZGV4XTtcbiAgICB9XG5cbiAgICBnZXRDaGFyQ29kZShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICB9XG5cbiAgICB2ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKCkge1xuICAgICAgICB0aGlzLnRleHQgPSB2ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKHRoaXMudGV4dCk7XG4gICAgfVxuXG4gICAgdHJpbSgpIHtcbiAgICAgICAgbGV0IGJlZ2lubmluZ1doaXRlc3BhY2UgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDtcbiAgICAgICAgICAgIGkgPCB0aGlzLnRleHQubGVuZ3RoICYmIHdoaXRlc3BhY2VbdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSldO1xuICAgICAgICAgICAgaSsrKSB7XG4gICAgICAgICAgICBiZWdpbm5pbmdXaGl0ZXNwYWNlKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRyYWlsaW5nV2hpdGVzcGFjZSA9IHRoaXMudGV4dC5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnRleHQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGkgPj0gMCAmJiBpID49IGJlZ2lubmluZ1doaXRlc3BhY2UgJiYgd2hpdGVzcGFjZVt0aGlzLnRleHQuY2hhckNvZGVBdChpKV07XG4gICAgICAgICAgICBpLS0pIHtcbiAgICAgICAgICAgIHRyYWlsaW5nV2hpdGVzcGFjZS0tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMudGV4dC5zdWJzdHJpbmcoYmVnaW5uaW5nV2hpdGVzcGFjZSwgdHJhaWxpbmdXaGl0ZXNwYWNlKTtcbiAgICAgICAgdGhpcy5zZWN0aW9uSW5kZXggPSB0aGlzLnNlY3Rpb25JbmRleC5zbGljZShiZWdpbm5pbmdXaGl0ZXNwYWNlLCB0cmFpbGluZ1doaXRlc3BhY2UpO1xuICAgIH1cblxuICAgIHN1YnN0cmluZyhzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFRhZ2dlZFN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN1YnN0cmluZyA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgc3Vic3RyaW5nLnRleHQgPSB0aGlzLnRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgICAgICBzdWJzdHJpbmcuc2VjdGlvbkluZGV4ID0gdGhpcy5zZWN0aW9uSW5kZXguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgIHN1YnN0cmluZy5zZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnM7XG4gICAgICAgIHJldHVybiBzdWJzdHJpbmc7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9XG5cbiAgICBnZXRNYXhTY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4LnJlZHVjZSgobWF4LCBpbmRleCkgPT4gTWF0aC5tYXgobWF4LCB0aGlzLnNlY3Rpb25zW2luZGV4XS5zY2FsZSksIDApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYnJlYWtMaW5lcyhpbnB1dDogVGFnZ2VkU3RyaW5nLCBsaW5lQnJlYWtQb2ludHM6IEFycmF5PG51bWJlcj4pOiBBcnJheTxUYWdnZWRTdHJpbmc+IHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIGNvbnN0IHRleHQgPSBpbnB1dC50ZXh0O1xuICAgIGxldCBzdGFydCA9IDA7XG4gICAgZm9yIChjb25zdCBsaW5lQnJlYWsgb2YgbGluZUJyZWFrUG9pbnRzKSB7XG4gICAgICAgIGxpbmVzLnB1c2goaW5wdXQuc3Vic3RyaW5nKHN0YXJ0LCBsaW5lQnJlYWspKTtcbiAgICAgICAgc3RhcnQgPSBsaW5lQnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgbGluZXMucHVzaChpbnB1dC5zdWJzdHJpbmcoc3RhcnQsIHRleHQubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcztcbn1cblxuZnVuY3Rpb24gc2hhcGVUZXh0KHRleHQ6IEZvcm1hdHRlZCxcbiAgICAgICAgICAgICAgICAgICBnbHlwaHM6IHtbc3RyaW5nXToge1tudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGb250U3RhY2s6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0QW5jaG9yOiBTeW1ib2xBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgdGV4dEp1c3RpZnk6IFRleHRKdXN0aWZ5LFxuICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgd3JpdGluZ01vZGU6IDEgfCAyLFxuICAgICAgICAgICAgICAgICAgIGFsbG93VmVydGljYWxQbGFjZW1lbnQ6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgc3ltYm9sUGxhY2VtZW50OiBzdHJpbmcpOiBTaGFwaW5nIHwgZmFsc2Uge1xuICAgIGNvbnN0IGxvZ2ljYWxJbnB1dCA9IFRhZ2dlZFN0cmluZy5mcm9tRmVhdHVyZSh0ZXh0LCBkZWZhdWx0Rm9udFN0YWNrKTtcblxuICAgIGlmICh3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwpIHtcbiAgICAgICAgbG9naWNhbElucHV0LnZlcnRpY2FsaXplUHVuY3R1YXRpb24oKTtcbiAgICB9XG5cbiAgICBsZXQgbGluZXM6IEFycmF5PFRhZ2dlZFN0cmluZz47XG5cbiAgICBjb25zdCB7cHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0LCBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9ID0gcnRsVGV4dFBsdWdpbjtcbiAgICBpZiAocHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0ICYmIGxvZ2ljYWxJbnB1dC5zZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gQmlkaSBkb2Vzbid0IGhhdmUgdG8gYmUgc3R5bGUtYXdhcmVcbiAgICAgICAgbGluZXMgPSBbXTtcbiAgICAgICAgY29uc3QgdW50YWdnZWRMaW5lcyA9XG4gICAgICAgICAgICBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQobG9naWNhbElucHV0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lTGluZUJyZWFrcyhsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaHMsIHN5bWJvbFBsYWNlbWVudCkpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdW50YWdnZWRMaW5lcykge1xuICAgICAgICAgICAgY29uc3QgdGFnZ2VkTGluZSA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUudGV4dCA9IGxpbmU7XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnNlY3Rpb25zID0gbG9naWNhbElucHV0LnNlY3Rpb25zO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGFnZ2VkTGluZS5zZWN0aW9uSW5kZXgucHVzaCgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVzLnB1c2godGFnZ2VkTGluZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dCkge1xuICAgICAgICAvLyBOZWVkIHZlcnNpb24gb2YgbWFwYm94LWdsLXJ0bC10ZXh0IHdpdGggc3R5bGUgc3VwcG9ydCBmb3IgY29tYmluaW5nIFJUTCB0ZXh0XG4gICAgICAgIC8vIHdpdGggZm9ybWF0dGluZ1xuICAgICAgICBsaW5lcyA9IFtdO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRMaW5lcyA9XG4gICAgICAgICAgICBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQobG9naWNhbElucHV0LnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbElucHV0LnNlY3Rpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVMaW5lQnJlYWtzKGxvZ2ljYWxJbnB1dCwgc3BhY2luZywgbWF4V2lkdGgsIGdseXBocywgc3ltYm9sUGxhY2VtZW50KSk7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBwcm9jZXNzZWRMaW5lcykge1xuICAgICAgICAgICAgY29uc3QgdGFnZ2VkTGluZSA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUudGV4dCA9IGxpbmVbMF07XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnNlY3Rpb25JbmRleCA9IGxpbmVbMV07XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnNlY3Rpb25zID0gbG9naWNhbElucHV0LnNlY3Rpb25zO1xuICAgICAgICAgICAgbGluZXMucHVzaCh0YWdnZWRMaW5lKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVzID0gYnJlYWtMaW5lcyhsb2dpY2FsSW5wdXQsIGRldGVybWluZUxpbmVCcmVha3MobG9naWNhbElucHV0LCBzcGFjaW5nLCBtYXhXaWR0aCwgZ2x5cGhzLCBzeW1ib2xQbGFjZW1lbnQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbmVkR2x5cGhzID0gW107XG4gICAgY29uc3Qgc2hhcGluZyA9IHtcbiAgICAgICAgcG9zaXRpb25lZEdseXBocyxcbiAgICAgICAgdGV4dDogbG9naWNhbElucHV0LnRvU3RyaW5nKCksXG4gICAgICAgIHRvcDogdHJhbnNsYXRlWzFdLFxuICAgICAgICBib3R0b206IHRyYW5zbGF0ZVsxXSxcbiAgICAgICAgbGVmdDogdHJhbnNsYXRlWzBdLFxuICAgICAgICByaWdodDogdHJhbnNsYXRlWzBdLFxuICAgICAgICB3cml0aW5nTW9kZSxcbiAgICAgICAgbGluZUNvdW50OiBsaW5lcy5sZW5ndGgsXG4gICAgICAgIHlPZmZzZXQ6IC0xNyAvLyB0aGUgeSBvZmZzZXQgKnNob3VsZCogYmUgcGFydCBvZiB0aGUgZm9udCBtZXRhZGF0YVxuICAgIH07XG5cbiAgICBzaGFwZUxpbmVzKHNoYXBpbmcsIGdseXBocywgbGluZXMsIGxpbmVIZWlnaHQsIHRleHRBbmNob3IsIHRleHRKdXN0aWZ5LCB3cml0aW5nTW9kZSwgc3BhY2luZywgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCk7XG4gICAgaWYgKCFwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHNoYXBpbmc7XG59XG5cbi8vIHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8zODBcbi8qIGVzbGludCBuby11c2VsZXNzLWNvbXB1dGVkLWtleTogMCAqL1xuXG5jb25zdCB3aGl0ZXNwYWNlOiB7W251bWJlcl06IGJvb2xlYW59ID0ge1xuICAgIFsweDA5XTogdHJ1ZSwgLy8gdGFiXG4gICAgWzB4MGFdOiB0cnVlLCAvLyBuZXdsaW5lXG4gICAgWzB4MGJdOiB0cnVlLCAvLyB2ZXJ0aWNhbCB0YWJcbiAgICBbMHgwY106IHRydWUsIC8vIGZvcm0gZmVlZFxuICAgIFsweDBkXTogdHJ1ZSwgLy8gY2FycmlhZ2UgcmV0dXJuXG4gICAgWzB4MjBdOiB0cnVlLCAvLyBzcGFjZVxufTtcblxuY29uc3QgYnJlYWthYmxlOiB7W251bWJlcl06IGJvb2xlYW59ID0ge1xuICAgIFsweDBhXTogICB0cnVlLCAvLyBuZXdsaW5lXG4gICAgWzB4MjBdOiAgIHRydWUsIC8vIHNwYWNlXG4gICAgWzB4MjZdOiAgIHRydWUsIC8vIGFtcGVyc2FuZFxuICAgIFsweDI4XTogICB0cnVlLCAvLyBsZWZ0IHBhcmVudGhlc2lzXG4gICAgWzB4MjldOiAgIHRydWUsIC8vIHJpZ2h0IHBhcmVudGhlc2lzXG4gICAgWzB4MmJdOiAgIHRydWUsIC8vIHBsdXMgc2lnblxuICAgIFsweDJkXTogICB0cnVlLCAvLyBoeXBoZW4tbWludXNcbiAgICBbMHgyZl06ICAgdHJ1ZSwgLy8gc29saWR1c1xuICAgIFsweGFkXTogICB0cnVlLCAvLyBzb2Z0IGh5cGhlblxuICAgIFsweGI3XTogICB0cnVlLCAvLyBtaWRkbGUgZG90XG4gICAgWzB4MjAwYl06IHRydWUsIC8vIHplcm8td2lkdGggc3BhY2VcbiAgICBbMHgyMDEwXTogdHJ1ZSwgLy8gaHlwaGVuXG4gICAgWzB4MjAxM106IHRydWUsIC8vIGVuIGRhc2hcbiAgICBbMHgyMDI3XTogdHJ1ZSAgLy8gaW50ZXJwdW5jdFxuICAgIC8vIE1hbnkgb3RoZXIgY2hhcmFjdGVycyBtYXkgYmUgcmVhc29uYWJsZSBicmVha3BvaW50c1xuICAgIC8vIENvbnNpZGVyIFwibmV1dHJhbCBvcmllbnRhdGlvblwiIGNoYXJhY3RlcnMgYXQgc2NyaXB0RGV0ZWN0aW9uLmNoYXJIYXNOZXV0cmFsVmVydGljYWxPcmllbnRhdGlvblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMzY1OFxufTtcblxuZnVuY3Rpb24gZGV0ZXJtaW5lQXZlcmFnZUxpbmVXaWR0aChsb2dpY2FsSW5wdXQ6IFRhZ2dlZFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0pIHtcbiAgICBsZXQgdG90YWxXaWR0aCA9IDA7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbG9naWNhbElucHV0Lmxlbmd0aCgpOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBsb2dpY2FsSW5wdXQuZ2V0U2VjdGlvbihpbmRleCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGdseXBoTWFwW3NlY3Rpb24uZm9udFN0YWNrXTtcbiAgICAgICAgY29uc3QgZ2x5cGggPSBwb3NpdGlvbnMgJiYgcG9zaXRpb25zW2xvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpbmRleCldO1xuICAgICAgICBpZiAoIWdseXBoKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIHRvdGFsV2lkdGggKz0gZ2x5cGgubWV0cmljcy5hZHZhbmNlICogc2VjdGlvbi5zY2FsZSArIHNwYWNpbmc7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZUNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHRvdGFsV2lkdGggLyBtYXhXaWR0aCkpO1xuICAgIHJldHVybiB0b3RhbFdpZHRoIC8gbGluZUNvdW50O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVCYWRuZXNzKGxpbmVXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5hbHR5OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdEJyZWFrOiBib29sZWFuKSB7XG4gICAgY29uc3QgcmFnZ2VkbmVzcyA9IE1hdGgucG93KGxpbmVXaWR0aCAtIHRhcmdldFdpZHRoLCAyKTtcbiAgICBpZiAoaXNMYXN0QnJlYWspIHtcbiAgICAgICAgLy8gRmF2b3IgZmluYWxzIGxpbmVzIHNob3J0ZXIgdGhhbiBhdmVyYWdlIG92ZXIgbG9uZ2VyIHRoYW4gYXZlcmFnZVxuICAgICAgICBpZiAobGluZVdpZHRoIDwgdGFyZ2V0V2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiByYWdnZWRuZXNzIC8gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByYWdnZWRuZXNzICogMjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByYWdnZWRuZXNzICsgTWF0aC5hYnMocGVuYWx0eSkgKiBwZW5hbHR5O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVQZW5hbHR5KGNvZGVQb2ludDogbnVtYmVyLCBuZXh0Q29kZVBvaW50OiBudW1iZXIsIHBlbmFsaXphYmxlSWRlb2dyYXBoaWNCcmVhazogYm9vbGVhbikge1xuICAgIGxldCBwZW5hbHR5ID0gMDtcbiAgICAvLyBGb3JjZSBicmVhayBvbiBuZXdsaW5lXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gMHgwYSkge1xuICAgICAgICBwZW5hbHR5IC09IDEwMDAwO1xuICAgIH1cbiAgICAvLyBQZW5hbGl6ZSBicmVha3MgYmV0d2VlbiBjaGFyYWN0ZXJzIHRoYXQgYWxsb3cgaWRlb2dyYXBoaWMgYnJlYWtpbmcgYmVjYXVzZVxuICAgIC8vIHRoZXkgYXJlIGxlc3MgcHJlZmVyYWJsZSB0aGFuIGJyZWFrcyBhdCBzcGFjZXMgKG9yIHplcm8gd2lkdGggc3BhY2VzKS5cbiAgICBpZiAocGVuYWxpemFibGVJZGVvZ3JhcGhpY0JyZWFrKSB7XG4gICAgICAgIHBlbmFsdHkgKz0gMTUwO1xuICAgIH1cblxuICAgIC8vIFBlbmFsaXplIG9wZW4gcGFyZW50aGVzaXMgYXQgZW5kIG9mIGxpbmVcbiAgICBpZiAoY29kZVBvaW50ID09PSAweDI4IHx8IGNvZGVQb2ludCA9PT0gMHhmZjA4KSB7XG4gICAgICAgIHBlbmFsdHkgKz0gNTA7XG4gICAgfVxuXG4gICAgLy8gUGVuYWxpemUgY2xvc2UgcGFyZW50aGVzaXMgYXQgYmVnaW5uaW5nIG9mIGxpbmVcbiAgICBpZiAobmV4dENvZGVQb2ludCA9PT0gMHgyOSB8fCBuZXh0Q29kZVBvaW50ID09PSAweGZmMDkpIHtcbiAgICAgICAgcGVuYWx0eSArPSA1MDtcbiAgICB9XG4gICAgcmV0dXJuIHBlbmFsdHk7XG59XG5cbnR5cGUgQnJlYWsgPSB7XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICB4OiBudW1iZXIsXG4gICAgcHJpb3JCcmVhazogP0JyZWFrLFxuICAgIGJhZG5lc3M6IG51bWJlclxufTtcblxuZnVuY3Rpb24gZXZhbHVhdGVCcmVhayhicmVha0luZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrWDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxCcmVha3M6IEFycmF5PEJyZWFrPixcbiAgICAgICAgICAgICAgICAgICAgICAgcGVuYWx0eTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3RCcmVhazogYm9vbGVhbik6IEJyZWFrIHtcbiAgICAvLyBXZSBjb3VsZCBza2lwIGV2YWx1YXRpbmcgYnJlYWtzIHdoZXJlIHRoZSBsaW5lIGxlbmd0aCAoYnJlYWtYIC0gcHJpb3JCcmVhay54KSA+IG1heFdpZHRoXG4gICAgLy8gIC4uLmJ1dCBpbiBmYWN0IHdlIGFsbG93IGxpbmVzIGxvbmdlciB0aGFuIG1heFdpZHRoIChpZiB0aGVyZSdzIG5vIGJyZWFrIHBvaW50cylcbiAgICAvLyAgLi4uYW5kIHdoZW4gdGFyZ2V0V2lkdGggYW5kIG1heFdpZHRoIGFyZSBjbG9zZSwgc3RyaWN0bHkgZW5mb3JjaW5nIG1heFdpZHRoIGNhbiBnaXZlXG4gICAgLy8gICAgIG1vcmUgbG9wc2lkZWQgcmVzdWx0cy5cblxuICAgIGxldCBiZXN0UHJpb3JCcmVhazogP0JyZWFrID0gbnVsbDtcbiAgICBsZXQgYmVzdEJyZWFrQmFkbmVzcyA9IGNhbGN1bGF0ZUJhZG5lc3MoYnJlYWtYLCB0YXJnZXRXaWR0aCwgcGVuYWx0eSwgaXNMYXN0QnJlYWspO1xuXG4gICAgZm9yIChjb25zdCBwb3RlbnRpYWxCcmVhayBvZiBwb3RlbnRpYWxCcmVha3MpIHtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoID0gYnJlYWtYIC0gcG90ZW50aWFsQnJlYWsueDtcbiAgICAgICAgY29uc3QgYnJlYWtCYWRuZXNzID1cbiAgICAgICAgICAgIGNhbGN1bGF0ZUJhZG5lc3MobGluZVdpZHRoLCB0YXJnZXRXaWR0aCwgcGVuYWx0eSwgaXNMYXN0QnJlYWspICsgcG90ZW50aWFsQnJlYWsuYmFkbmVzcztcbiAgICAgICAgaWYgKGJyZWFrQmFkbmVzcyA8PSBiZXN0QnJlYWtCYWRuZXNzKSB7XG4gICAgICAgICAgICBiZXN0UHJpb3JCcmVhayA9IHBvdGVudGlhbEJyZWFrO1xuICAgICAgICAgICAgYmVzdEJyZWFrQmFkbmVzcyA9IGJyZWFrQmFkbmVzcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGluZGV4OiBicmVha0luZGV4LFxuICAgICAgICB4OiBicmVha1gsXG4gICAgICAgIHByaW9yQnJlYWs6IGJlc3RQcmlvckJyZWFrLFxuICAgICAgICBiYWRuZXNzOiBiZXN0QnJlYWtCYWRuZXNzXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbGVhc3RCYWRCcmVha3MobGFzdExpbmVCcmVhazogP0JyZWFrKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgaWYgKCFsYXN0TGluZUJyZWFrKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGxlYXN0QmFkQnJlYWtzKGxhc3RMaW5lQnJlYWsucHJpb3JCcmVhaykuY29uY2F0KGxhc3RMaW5lQnJlYWsuaW5kZXgpO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVMaW5lQnJlYWtzKGxvZ2ljYWxJbnB1dDogVGFnZ2VkU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W3N0cmluZ106IHtbbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sUGxhY2VtZW50OiBzdHJpbmcpOiBBcnJheTxudW1iZXI+IHtcbiAgICBpZiAoc3ltYm9sUGxhY2VtZW50ICE9PSAncG9pbnQnKVxuICAgICAgICByZXR1cm4gW107XG5cbiAgICBpZiAoIWxvZ2ljYWxJbnB1dClcbiAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgcG90ZW50aWFsTGluZUJyZWFrcyA9IFtdO1xuICAgIGNvbnN0IHRhcmdldFdpZHRoID0gZGV0ZXJtaW5lQXZlcmFnZUxpbmVXaWR0aChsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaE1hcCk7XG5cbiAgICBjb25zdCBoYXNTZXJ2ZXJTdWdnZXN0ZWRCcmVha3BvaW50cyA9IGxvZ2ljYWxJbnB1dC50ZXh0LmluZGV4T2YoXCJcXHUyMDBiXCIpID49IDA7XG5cbiAgICBsZXQgY3VycmVudFggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2dpY2FsSW5wdXQubGVuZ3RoKCk7IGkrKykge1xuICAgICAgICBjb25zdCBzZWN0aW9uID0gbG9naWNhbElucHV0LmdldFNlY3Rpb24oaSk7XG4gICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGxvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gZ2x5cGhNYXBbc2VjdGlvbi5mb250U3RhY2tdO1xuICAgICAgICBjb25zdCBnbHlwaCA9IHBvc2l0aW9ucyAmJiBwb3NpdGlvbnNbY29kZVBvaW50XTtcblxuICAgICAgICBpZiAoZ2x5cGggJiYgIXdoaXRlc3BhY2VbY29kZVBvaW50XSlcbiAgICAgICAgICAgIGN1cnJlbnRYICs9IGdseXBoLm1ldHJpY3MuYWR2YW5jZSAqIHNlY3Rpb24uc2NhbGUgKyBzcGFjaW5nO1xuXG4gICAgICAgIC8vIElkZW9ncmFwaGljIGNoYXJhY3RlcnMsIHNwYWNlcywgYW5kIHdvcmQtYnJlYWtpbmcgcHVuY3R1YXRpb24gdGhhdCBvZnRlbiBhcHBlYXIgd2l0aG91dFxuICAgICAgICAvLyBzdXJyb3VuZGluZyBzcGFjZXMuXG4gICAgICAgIGlmICgoaSA8IGxvZ2ljYWxJbnB1dC5sZW5ndGgoKSAtIDEpKSB7XG4gICAgICAgICAgICBjb25zdCBpZGVvZ3JhcGhpY0JyZWFrID0gY2hhckFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcoY29kZVBvaW50KTtcbiAgICAgICAgICAgIGlmIChicmVha2FibGVbY29kZVBvaW50XSB8fCBpZGVvZ3JhcGhpY0JyZWFrKSB7XG5cbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlQnJlYWsoXG4gICAgICAgICAgICAgICAgICAgICAgICBpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUGVuYWx0eShjb2RlUG9pbnQsIGxvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpICsgMSksIGlkZW9ncmFwaGljQnJlYWsgJiYgaGFzU2VydmVyU3VnZ2VzdGVkQnJlYWtwb2ludHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsZWFzdEJhZEJyZWFrcyhcbiAgICAgICAgZXZhbHVhdGVCcmVhayhcbiAgICAgICAgICAgIGxvZ2ljYWxJbnB1dC5sZW5ndGgoKSxcbiAgICAgICAgICAgIGN1cnJlbnRYLFxuICAgICAgICAgICAgdGFyZ2V0V2lkdGgsXG4gICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRydWUpKTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5jaG9yQWxpZ25tZW50KGFuY2hvcjogU3ltYm9sQW5jaG9yKSB7XG4gICAgbGV0IGhvcml6b250YWxBbGlnbiA9IDAuNSwgdmVydGljYWxBbGlnbiA9IDAuNTtcblxuICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgaG9yaXpvbnRhbEFsaWduID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAndG9wLWxlZnQnOlxuICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgaG9yaXpvbnRhbEFsaWduID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICBjYXNlICdib3R0b20nOlxuICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICB2ZXJ0aWNhbEFsaWduID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgdmVydGljYWxBbGlnbiA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufTtcbn1cblxuZnVuY3Rpb24gc2hhcGVMaW5lcyhzaGFwaW5nOiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVzOiBBcnJheTxUYWdnZWRTdHJpbmc+LFxuICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbmNob3I6IFN5bWJvbEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgdGV4dEp1c3RpZnk6IFRleHRKdXN0aWZ5LFxuICAgICAgICAgICAgICAgICAgICB3cml0aW5nTW9kZTogMSB8IDIsXG4gICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbikge1xuXG4gICAgbGV0IHggPSAwO1xuICAgIGxldCB5ID0gc2hhcGluZy55T2Zmc2V0O1xuXG4gICAgbGV0IG1heExpbmVMZW5ndGggPSAwO1xuICAgIGNvbnN0IHBvc2l0aW9uZWRHbHlwaHMgPSBzaGFwaW5nLnBvc2l0aW9uZWRHbHlwaHM7XG5cbiAgICBjb25zdCBqdXN0aWZ5ID1cbiAgICAgICAgdGV4dEp1c3RpZnkgPT09ICdyaWdodCcgPyAxIDpcbiAgICAgICAgdGV4dEp1c3RpZnkgPT09ICdsZWZ0JyA/IDAgOiAwLjU7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgbGluZS50cmltKCk7XG5cbiAgICAgICAgY29uc3QgbGluZU1heFNjYWxlID0gbGluZS5nZXRNYXhTY2FsZSgpO1xuXG4gICAgICAgIGlmICghbGluZS5sZW5ndGgoKSkge1xuICAgICAgICAgICAgeSArPSBsaW5lSGVpZ2h0OyAvLyBTdGlsbCBuZWVkIGEgbGluZSBmZWVkIGFmdGVyIGVtcHR5IGxpbmVcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZVN0YXJ0SW5kZXggPSBwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCgpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBsaW5lLmdldFNlY3Rpb24oaSk7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSBsaW5lLmdldFNlY3Rpb25JbmRleChpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGxpbmUuZ2V0Q2hhckNvZGUoaSk7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBiYXNlbGluZSwgYnV0IHNpbmNlIHdlJ3JlIGxheWluZyBvdXRcbiAgICAgICAgICAgIC8vIGF0IDI0IHBvaW50cywgd2UgY2FuIGNhbGN1bGF0ZSBob3cgbXVjaCBpdCB3aWxsIG1vdmUgd2hlblxuICAgICAgICAgICAgLy8gd2Ugc2NhbGUgdXAgb3IgZG93bi5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VsaW5lT2Zmc2V0ID0gKGxpbmVNYXhTY2FsZSAtIHNlY3Rpb24uc2NhbGUpICogMjQ7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBnbHlwaE1hcFtzZWN0aW9uLmZvbnRTdGFja107XG4gICAgICAgICAgICBjb25zdCBnbHlwaCA9IHBvc2l0aW9ucyAmJiBwb3NpdGlvbnNbY29kZVBvaW50XTtcblxuICAgICAgICAgICAgaWYgKCFnbHlwaCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICh3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbCB8fFxuICAgICAgICAgICAgICAgIC8vIERvbid0IHZlcnRpY2FsaXplIGdseXBocyB0aGF0IGhhdmUgbm8gdXByaWdodCBvcmllbnRhdGlvbiBpZiB2ZXJ0aWNhbCBwbGFjZW1lbnQgaXMgZGlzYWJsZWQuXG4gICAgICAgICAgICAgICAgKCFhbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICFjaGFySGFzVXByaWdodFZlcnRpY2FsT3JpZW50YXRpb24oY29kZVBvaW50KSkgfHxcbiAgICAgICAgICAgICAgICAvLyBJZiB2ZXJ0aWNhbCBwbGFjZW1lbnQgaXMgZWJhYmxlZCwgZG9uJ3QgdmVydGljYWxpemUgZ2x5cGhzIHRoYXRcbiAgICAgICAgICAgICAgICAvLyBhcmUgZnJvbSBjb21wbGV4IHRleHQgbGF5b3V0IHNjcmlwdCwgb3Igd2hpdGVzcGFjZXMuXG4gICAgICAgICAgICAgICAgKGFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgKHdoaXRlc3BhY2VbY29kZVBvaW50XSB8fCBjaGFySW5Db21wbGV4U2hhcGluZ1NjcmlwdChjb2RlUG9pbnQpKSkpIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmVkR2x5cGhzLnB1c2goe2dseXBoOiBjb2RlUG9pbnQsIHgsIHk6IHkgKyBiYXNlbGluZU9mZnNldCwgdmVydGljYWw6IGZhbHNlLCBzY2FsZTogc2VjdGlvbi5zY2FsZSwgZm9udFN0YWNrOiBzZWN0aW9uLmZvbnRTdGFjaywgc2VjdGlvbkluZGV4fSk7XG4gICAgICAgICAgICAgICAgeCArPSBnbHlwaC5tZXRyaWNzLmFkdmFuY2UgKiBzZWN0aW9uLnNjYWxlICsgc3BhY2luZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25lZEdseXBocy5wdXNoKHtnbHlwaDogY29kZVBvaW50LCB4LCB5OiB5ICsgYmFzZWxpbmVPZmZzZXQsIHZlcnRpY2FsOiB0cnVlLCBzY2FsZTogc2VjdGlvbi5zY2FsZSwgZm9udFN0YWNrOiBzZWN0aW9uLmZvbnRTdGFjaywgc2VjdGlvbkluZGV4fSk7XG4gICAgICAgICAgICAgICAgeCArPSBPTkVfRU0gKiBzZWN0aW9uLnNjYWxlICsgc3BhY2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkganVzdGlmeSBpZiB3ZSBwbGFjZWQgYXQgbGVhc3Qgb25lIGdseXBoXG4gICAgICAgIGlmIChwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aCAhPT0gbGluZVN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSB4IC0gc3BhY2luZztcbiAgICAgICAgICAgIG1heExpbmVMZW5ndGggPSBNYXRoLm1heChsaW5lTGVuZ3RoLCBtYXhMaW5lTGVuZ3RoKTtcblxuICAgICAgICAgICAganVzdGlmeUxpbmUocG9zaXRpb25lZEdseXBocywgZ2x5cGhNYXAsIGxpbmVTdGFydEluZGV4LCBwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aCAtIDEsIGp1c3RpZnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgeCA9IDA7XG4gICAgICAgIHkgKz0gbGluZUhlaWdodCAqIGxpbmVNYXhTY2FsZTtcbiAgICB9XG5cbiAgICBjb25zdCB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufSA9IGdldEFuY2hvckFsaWdubWVudCh0ZXh0QW5jaG9yKTtcbiAgICBhbGlnbihwb3NpdGlvbmVkR2x5cGhzLCBqdXN0aWZ5LCBob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ24sIG1heExpbmVMZW5ndGgsIGxpbmVIZWlnaHQsIGxpbmVzLmxlbmd0aCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGJvdW5kaW5nIGJveFxuICAgIGNvbnN0IGhlaWdodCA9IHkgLSBzaGFwaW5nLnlPZmZzZXQ7XG5cbiAgICBzaGFwaW5nLnRvcCArPSAtdmVydGljYWxBbGlnbiAqIGhlaWdodDtcbiAgICBzaGFwaW5nLmJvdHRvbSA9IHNoYXBpbmcudG9wICsgaGVpZ2h0O1xuICAgIHNoYXBpbmcubGVmdCArPSAtaG9yaXpvbnRhbEFsaWduICogbWF4TGluZUxlbmd0aDtcbiAgICBzaGFwaW5nLnJpZ2h0ID0gc2hhcGluZy5sZWZ0ICsgbWF4TGluZUxlbmd0aDtcbn1cblxuLy8ganVzdGlmeSByaWdodCA9IDEsIGxlZnQgPSAwLCBjZW50ZXIgPSAwLjVcbmZ1bmN0aW9uIGp1c3RpZnlMaW5lKHBvc2l0aW9uZWRHbHlwaHM6IEFycmF5PFBvc2l0aW9uZWRHbHlwaD4sXG4gICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgICBzdGFydDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgZW5kOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5OiAxIHwgMCB8IDAuNSkge1xuICAgIGlmICghanVzdGlmeSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgbGFzdFBvc2l0aW9uZWRHbHlwaCA9IHBvc2l0aW9uZWRHbHlwaHNbZW5kXTtcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBnbHlwaE1hcFtsYXN0UG9zaXRpb25lZEdseXBoLmZvbnRTdGFja107XG4gICAgY29uc3QgZ2x5cGggPSBwb3NpdGlvbnMgJiYgcG9zaXRpb25zW2xhc3RQb3NpdGlvbmVkR2x5cGguZ2x5cGhdO1xuICAgIGlmIChnbHlwaCkge1xuICAgICAgICBjb25zdCBsYXN0QWR2YW5jZSA9IGdseXBoLm1ldHJpY3MuYWR2YW5jZSAqIGxhc3RQb3NpdGlvbmVkR2x5cGguc2NhbGU7XG4gICAgICAgIGNvbnN0IGxpbmVJbmRlbnQgPSAocG9zaXRpb25lZEdseXBoc1tlbmRdLnggKyBsYXN0QWR2YW5jZSkgKiBqdXN0aWZ5O1xuXG4gICAgICAgIGZvciAobGV0IGogPSBzdGFydDsgaiA8PSBlbmQ7IGorKykge1xuICAgICAgICAgICAgcG9zaXRpb25lZEdseXBoc1tqXS54IC09IGxpbmVJbmRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFsaWduKHBvc2l0aW9uZWRHbHlwaHM6IEFycmF5PFBvc2l0aW9uZWRHbHlwaD4sXG4gICAgICAgICAgICAgICBqdXN0aWZ5OiBudW1iZXIsXG4gICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ246IG51bWJlcixcbiAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IG51bWJlcixcbiAgICAgICAgICAgICAgIG1heExpbmVMZW5ndGg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVDb3VudDogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2hpZnRYID0gKGp1c3RpZnkgLSBob3Jpem9udGFsQWxpZ24pICogbWF4TGluZUxlbmd0aDtcbiAgICBjb25zdCBzaGlmdFkgPSAoLXZlcnRpY2FsQWxpZ24gKiBsaW5lQ291bnQgKyAwLjUpICogbGluZUhlaWdodDtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcG9zaXRpb25lZEdseXBocy5sZW5ndGg7IGorKykge1xuICAgICAgICBwb3NpdGlvbmVkR2x5cGhzW2pdLnggKz0gc2hpZnRYO1xuICAgICAgICBwb3NpdGlvbmVkR2x5cGhzW2pdLnkgKz0gc2hpZnRZO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgUG9zaXRpb25lZEljb24gPSB7XG4gICAgaW1hZ2U6IEltYWdlUG9zaXRpb24sXG4gICAgdG9wOiBudW1iZXIsXG4gICAgYm90dG9tOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIHJpZ2h0OiBudW1iZXJcbn07XG5cbmZ1bmN0aW9uIHNoYXBlSWNvbihpbWFnZTogSW1hZ2VQb3NpdGlvbiwgaWNvbk9mZnNldDogW251bWJlciwgbnVtYmVyXSwgaWNvbkFuY2hvcjogU3ltYm9sQW5jaG9yKTogUG9zaXRpb25lZEljb24ge1xuICAgIGNvbnN0IHtob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ259ID0gZ2V0QW5jaG9yQWxpZ25tZW50KGljb25BbmNob3IpO1xuICAgIGNvbnN0IGR4ID0gaWNvbk9mZnNldFswXTtcbiAgICBjb25zdCBkeSA9IGljb25PZmZzZXRbMV07XG4gICAgY29uc3QgeDEgPSBkeCAtIGltYWdlLmRpc3BsYXlTaXplWzBdICogaG9yaXpvbnRhbEFsaWduO1xuICAgIGNvbnN0IHgyID0geDEgKyBpbWFnZS5kaXNwbGF5U2l6ZVswXTtcbiAgICBjb25zdCB5MSA9IGR5IC0gaW1hZ2UuZGlzcGxheVNpemVbMV0gKiB2ZXJ0aWNhbEFsaWduO1xuICAgIGNvbnN0IHkyID0geTEgKyBpbWFnZS5kaXNwbGF5U2l6ZVsxXTtcbiAgICByZXR1cm4ge2ltYWdlLCB0b3A6IHkxLCBib3R0b206IHkyLCBsZWZ0OiB4MSwgcmlnaHQ6IHgyfTtcbn1cblxuZnVuY3Rpb24gZml0SWNvblRvVGV4dChzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiwgc2hhcGVkVGV4dDogU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgdGV4dEZpdDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciBdLFxuICAgICAgICAgICAgICAgICAgICAgICBpY29uT2Zmc2V0OiBbIG51bWJlciwgbnVtYmVyIF0sIGZvbnRTY2FsZTogbnVtYmVyKTogUG9zaXRpb25lZEljb24ge1xuICAgIGFzc2VydCh0ZXh0Rml0ICE9PSAnbm9uZScpO1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhZGRpbmcpICYmIHBhZGRpbmcubGVuZ3RoID09PSA0KTtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShpY29uT2Zmc2V0KSAmJiBpY29uT2Zmc2V0Lmxlbmd0aCA9PT0gMik7XG5cbiAgICBjb25zdCBpbWFnZSA9IHNoYXBlZEljb24uaW1hZ2U7XG5cbiAgICAvLyBXZSBkb24ndCByZXNwZWN0IHRoZSBpY29uLWFuY2hvciwgYmVjYXVzZSBpY29uLXRleHQtZml0IGlzIHNldC4gSW5zdGVhZCxcbiAgICAvLyB0aGUgaWNvbiB3aWxsIGJlIGNlbnRlcmVkIG9uIHRoZSB0ZXh0LCB0aGVuIHN0cmV0Y2hlZCBpbiB0aGUgZ2l2ZW5cbiAgICAvLyBkaW1lbnNpb25zLlxuXG4gICAgY29uc3QgdGV4dExlZnQgPSBzaGFwZWRUZXh0LmxlZnQgKiBmb250U2NhbGU7XG4gICAgY29uc3QgdGV4dFJpZ2h0ID0gc2hhcGVkVGV4dC5yaWdodCAqIGZvbnRTY2FsZTtcblxuICAgIGxldCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQ7XG4gICAgaWYgKHRleHRGaXQgPT09ICd3aWR0aCcgfHwgdGV4dEZpdCA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIC8vIFN0cmV0Y2hlZCBob3Jpem9udGFsbHkgdG8gdGhlIHRleHQgd2lkdGhcbiAgICAgICAgbGVmdCA9IGljb25PZmZzZXRbMF0gKyB0ZXh0TGVmdCAtIHBhZGRpbmdbM107XG4gICAgICAgIHJpZ2h0ID0gaWNvbk9mZnNldFswXSArIHRleHRSaWdodCArIHBhZGRpbmdbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2VudGVyZWQgb24gdGhlIHRleHRcbiAgICAgICAgbGVmdCA9IGljb25PZmZzZXRbMF0gKyAodGV4dExlZnQgKyB0ZXh0UmlnaHQgLSBpbWFnZS5kaXNwbGF5U2l6ZVswXSkgLyAyO1xuICAgICAgICByaWdodCA9IGxlZnQgKyBpbWFnZS5kaXNwbGF5U2l6ZVswXTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0VG9wID0gc2hhcGVkVGV4dC50b3AgKiBmb250U2NhbGU7XG4gICAgY29uc3QgdGV4dEJvdHRvbSA9IHNoYXBlZFRleHQuYm90dG9tICogZm9udFNjYWxlO1xuICAgIGlmICh0ZXh0Rml0ID09PSAnaGVpZ2h0JyB8fCB0ZXh0Rml0ID09PSAnYm90aCcpIHtcbiAgICAgICAgLy8gU3RyZXRjaGVkIHZlcnRpY2FsbHkgdG8gdGhlIHRleHQgaGVpZ2h0XG4gICAgICAgIHRvcCA9IGljb25PZmZzZXRbMV0gKyB0ZXh0VG9wIC0gcGFkZGluZ1swXTtcbiAgICAgICAgYm90dG9tID0gaWNvbk9mZnNldFsxXSArIHRleHRCb3R0b20gKyBwYWRkaW5nWzJdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENlbnRlcmVkIG9uIHRoZSB0ZXh0XG4gICAgICAgIHRvcCA9IGljb25PZmZzZXRbMV0gKyAodGV4dFRvcCArIHRleHRCb3R0b20gLSBpbWFnZS5kaXNwbGF5U2l6ZVsxXSkgLyAyO1xuICAgICAgICBib3R0b20gPSB0b3AgKyBpbWFnZS5kaXNwbGF5U2l6ZVsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2ltYWdlLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnR9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5jbGFzcyBBbmNob3IgZXh0ZW5kcyBQb2ludCB7XG4gICAgYW5nbGU6IGFueTtcbiAgICBzZWdtZW50OiBudW1iZXIgfCB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IoeDogbnVtYmVyLCB5OiBudW1iZXIsIGFuZ2xlOiBudW1iZXIsIHNlZ21lbnQ/OiBudW1iZXIpIHtcbiAgICAgICAgc3VwZXIoeCwgeSk7XG4gICAgICAgIHRoaXMuYW5nbGUgPSBhbmdsZTtcbiAgICAgICAgaWYgKHNlZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZWdtZW50ID0gc2VnbWVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFuY2hvcih0aGlzLngsIHRoaXMueSwgdGhpcy5hbmdsZSwgdGhpcy5zZWdtZW50KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdBbmNob3InLCBBbmNob3IpO1xuXG5leHBvcnQgZGVmYXVsdCBBbmNob3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBJbnRlcnBvbGF0ZSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHtjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5pbXBvcnQgdHlwZSB7UHJvcGVydHlWYWx1ZSwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtJbnRlcnBvbGF0aW9uVHlwZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlJztcblxuY29uc3QgU0laRV9QQUNLX0ZBQ1RPUiA9IDI1NjtcblxuZXhwb3J0IHtnZXRTaXplRGF0YSwgZXZhbHVhdGVTaXplRm9yRmVhdHVyZSwgZXZhbHVhdGVTaXplRm9yWm9vbSwgU0laRV9QQUNLX0ZBQ1RPUn07XG5cbmV4cG9ydCB0eXBlIFNpemVEYXRhID0ge1xuICAgIGtpbmQ6ICdjb25zdGFudCcsXG4gICAgbGF5b3V0U2l6ZTogbnVtYmVyXG59IHwge1xuICAgIGtpbmQ6ICdzb3VyY2UnXG59IHwge1xuICAgIGtpbmQ6ICdjYW1lcmEnLFxuICAgIG1pblpvb206IG51bWJlcixcbiAgICBtYXhab29tOiBudW1iZXIsXG4gICAgbWluU2l6ZTogbnVtYmVyLFxuICAgIG1heFNpemU6IG51bWJlcixcbiAgICBpbnRlcnBvbGF0aW9uVHlwZTogP0ludGVycG9sYXRpb25UeXBlXG59IHwge1xuICAgIGtpbmQ6ICdjb21wb3NpdGUnLFxuICAgIG1pblpvb206IG51bWJlcixcbiAgICBtYXhab29tOiBudW1iZXIsXG4gICAgaW50ZXJwb2xhdGlvblR5cGU6ID9JbnRlcnBvbGF0aW9uVHlwZVxufTtcblxuLy8gRm9yIHt0ZXh0LGljb259LXNpemUsIGdldCB0aGUgYnVja2V0LWxldmVsIGRhdGEgdGhhdCB3aWxsIGJlIG5lZWRlZCBieVxuLy8gdGhlIHBhaW50ZXIgdG8gc2V0IHN5bWJvbC1zaXplLXJlbGF0ZWQgdW5pZm9ybXNcbmZ1bmN0aW9uIGdldFNpemVEYXRhKHRpbGVab29tOiBudW1iZXIsIHZhbHVlOiBQcm9wZXJ0eVZhbHVlPG51bWJlciwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4+KTogU2l6ZURhdGEge1xuICAgIGNvbnN0IHtleHByZXNzaW9ufSA9IHZhbHVlO1xuXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICBjb25zdCBsYXlvdXRTaXplID0gZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGlsZVpvb20gKyAxKSk7XG4gICAgICAgIHJldHVybiB7a2luZDogJ2NvbnN0YW50JywgbGF5b3V0U2l6ZX07XG5cbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgcmV0dXJuIHtraW5kOiAnc291cmNlJ307XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7em9vbVN0b3BzLCBpbnRlcnBvbGF0aW9uVHlwZX0gPSBleHByZXNzaW9uO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBjb3ZlcmluZyB6b29tIHN0b3BzIGZvciB6b29tLWRlcGVuZGVudCB2YWx1ZXNcbiAgICAgICAgbGV0IGxvd2VyID0gMDtcbiAgICAgICAgd2hpbGUgKGxvd2VyIDwgem9vbVN0b3BzLmxlbmd0aCAmJiB6b29tU3RvcHNbbG93ZXJdIDw9IHRpbGVab29tKSBsb3dlcisrO1xuICAgICAgICBsb3dlciA9IE1hdGgubWF4KDAsIGxvd2VyIC0gMSk7XG4gICAgICAgIGxldCB1cHBlciA9IGxvd2VyO1xuICAgICAgICB3aGlsZSAodXBwZXIgPCB6b29tU3RvcHMubGVuZ3RoICYmIHpvb21TdG9wc1t1cHBlcl0gPCB0aWxlWm9vbSArIDEpIHVwcGVyKys7XG4gICAgICAgIHVwcGVyID0gTWF0aC5taW4oem9vbVN0b3BzLmxlbmd0aCAtIDEsIHVwcGVyKTtcblxuICAgICAgICBjb25zdCBtaW5ab29tID0gem9vbVN0b3BzW2xvd2VyXTtcbiAgICAgICAgY29uc3QgbWF4Wm9vbSA9IHpvb21TdG9wc1t1cHBlcl07XG5cbiAgICAgICAgLy8gV2UnZCBsaWtlIHRvIGJlIGFibGUgdG8gdXNlIENhbWVyYUV4cHJlc3Npb24gb3IgQ29tcG9zaXRlRXhwcmVzc2lvbiBpbiB0aGVzZVxuICAgICAgICAvLyByZXR1cm4gdHlwZXMgcmF0aGVyIHRoYW4gRXhwcmVzc2lvblNwZWNpZmljYXRpb24sIGJ1dCB0aGUgZm9ybWVyIGFyZSBub3RcbiAgICAgICAgLy8gdHJhbnNmZXJyYWJsZSBhY3Jvc3MgV2ViIFdvcmtlciBib3VuZGFyaWVzLlxuICAgICAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHtraW5kOiAnY29tcG9zaXRlJywgbWluWm9vbSwgbWF4Wm9vbSwgaW50ZXJwb2xhdGlvblR5cGV9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm9yIGNhbWVyYSBmdW5jdGlvbnMsIGFsc28gc2F2ZSBvZmYgdGhlIGZ1bmN0aW9uIHZhbHVlc1xuICAgICAgICAvLyBldmFsdWF0ZWQgYXQgdGhlIGNvdmVyaW5nIHpvb20gbGV2ZWxzXG4gICAgICAgIGNvbnN0IG1pblNpemUgPSBleHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtaW5ab29tKSk7XG4gICAgICAgIGNvbnN0IG1heFNpemUgPSBleHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtYXhab29tKSk7XG5cbiAgICAgICAgcmV0dXJuIHtraW5kOiAnY2FtZXJhJywgbWluWm9vbSwgbWF4Wm9vbSwgbWluU2l6ZSwgbWF4U2l6ZSwgaW50ZXJwb2xhdGlvblR5cGV9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVTaXplRm9yRmVhdHVyZShzaXplRGF0YTogU2l6ZURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1U2l6ZSwgdVNpemVUfTogeyB1U2l6ZTogbnVtYmVyLCB1U2l6ZVQ6IG51bWJlciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bG93ZXJTaXplLCB1cHBlclNpemV9OiB7IGxvd2VyU2l6ZTogbnVtYmVyLCB1cHBlclNpemU6IG51bWJlcn0pIHtcbiAgICBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgcmV0dXJuIGxvd2VyU2l6ZSAvIFNJWkVfUEFDS19GQUNUT1I7XG4gICAgfSBlbHNlIGlmIChzaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGUobG93ZXJTaXplIC8gU0laRV9QQUNLX0ZBQ1RPUiwgdXBwZXJTaXplIC8gU0laRV9QQUNLX0ZBQ1RPUiwgdVNpemVUKTtcbiAgICB9XG4gICAgcmV0dXJuIHVTaXplO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZVNpemVGb3Jab29tKHNpemVEYXRhOiBTaXplRGF0YSwgem9vbTogbnVtYmVyKSB7XG4gICAgbGV0IHVTaXplVCA9IDA7XG4gICAgbGV0IHVTaXplID0gMDtcblxuICAgIGlmIChzaXplRGF0YS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgIHVTaXplID0gc2l6ZURhdGEubGF5b3V0U2l6ZTtcblxuICAgIH0gZWxzZSBpZiAoc2l6ZURhdGEua2luZCAhPT0gJ3NvdXJjZScpIHtcbiAgICAgICAgY29uc3Qge2ludGVycG9sYXRpb25UeXBlLCBtaW5ab29tLCBtYXhab29tfSA9IHNpemVEYXRhO1xuXG4gICAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGNvdWxkIGdldCB0aGUgZXhhY3QgdmFsdWUgb2YgdGhlIGNhbWVyYSBmdW5jdGlvblxuICAgICAgICAvLyBhdCB6ID0gdHIuem9vbSwgd2UgaW50ZW50aW9uYWxseSBkbyBub3Q6IGluc3RlYWQsIHdlIGludGVycG9sYXRlXG4gICAgICAgIC8vIGJldHdlZW4gdGhlIGNhbWVyYSBmdW5jdGlvbiB2YWx1ZXMgYXQgYSBwYWlyIG9mIHpvb20gc3RvcHMgY292ZXJpbmdcbiAgICAgICAgLy8gW3RpbGVab29tLCB0aWxlWm9vbSArIDFdIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGlzXG4gICAgICAgIC8vIHJlc3RyaWN0aW9uIG9uIGNvbXBvc2l0ZSBmdW5jdGlvbnNcbiAgICAgICAgY29uc3QgdCA9ICFpbnRlcnBvbGF0aW9uVHlwZSA/IDAgOiBjbGFtcChcbiAgICAgICAgICAgIEludGVycG9sYXRlLmludGVycG9sYXRpb25GYWN0b3IoaW50ZXJwb2xhdGlvblR5cGUsIHpvb20sIG1pblpvb20sIG1heFpvb20pLCAwLCAxKTtcblxuICAgICAgICBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ2NhbWVyYScpIHtcbiAgICAgICAgICAgIHVTaXplID0gaW50ZXJwb2xhdGUoc2l6ZURhdGEubWluU2l6ZSwgc2l6ZURhdGEubWF4U2l6ZSwgdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1U2l6ZVQgPSB0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHt1U2l6ZVQsIHVTaXplfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7c3ltYm9sTGF5b3V0QXR0cmlidXRlcyxcbiAgICBjb2xsaXNpb25WZXJ0ZXhBdHRyaWJ1dGVzLFxuICAgIGNvbGxpc2lvbkJveExheW91dCxcbiAgICBjb2xsaXNpb25DaXJjbGVMYXlvdXQsXG4gICAgZHluYW1pY0xheW91dEF0dHJpYnV0ZXNcbn0gZnJvbSAnLi9zeW1ib2xfYXR0cmlidXRlcyc7XG5cbmltcG9ydCB7U3ltYm9sTGF5b3V0QXJyYXksXG4gICAgU3ltYm9sRHluYW1pY0xheW91dEFycmF5LFxuICAgIFN5bWJvbE9wYWNpdHlBcnJheSxcbiAgICBDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSxcbiAgICBDb2xsaXNpb25DaXJjbGVMYXlvdXRBcnJheSxcbiAgICBDb2xsaXNpb25WZXJ0ZXhBcnJheSxcbiAgICBQbGFjZWRTeW1ib2xBcnJheSxcbiAgICBTeW1ib2xJbnN0YW5jZUFycmF5LFxuICAgIEdseXBoT2Zmc2V0QXJyYXksXG4gICAgU3ltYm9sTGluZVZlcnRleEFycmF5XG59IGZyb20gJy4uL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXksIExpbmVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0cmFuc2Zvcm1UZXh0IGZyb20gJy4uLy4uL3N5bWJvbC90cmFuc2Zvcm1fdGV4dCc7XG5pbXBvcnQgbWVyZ2VMaW5lcyBmcm9tICcuLi8uLi9zeW1ib2wvbWVyZ2VsaW5lcyc7XG5pbXBvcnQge2FsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGV9IGZyb20gJy4uLy4uL3V0aWwvc2NyaXB0X2RldGVjdGlvbic7XG5pbXBvcnQge1dyaXRpbmdNb2RlfSBmcm9tICcuLi8uLi9zeW1ib2wvc2hhcGluZyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IG12dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmNvbnN0IHZlY3RvclRpbGVGZWF0dXJlVHlwZXMgPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXM7XG5pbXBvcnQge3ZlcnRpY2FsaXplZENoYXJhY3Rlck1hcH0gZnJvbSAnLi4vLi4vdXRpbC92ZXJ0aWNhbGl6ZV9wdW5jdHVhdGlvbic7XG5pbXBvcnQgQW5jaG9yIGZyb20gJy4uLy4uL3N5bWJvbC9hbmNob3InO1xuaW1wb3J0IHtnZXRTaXplRGF0YX0gZnJvbSAnLi4vLi4vc3ltYm9sL3N5bWJvbF9zaXplJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgQnVja2V0LFxuICAgIEJ1Y2tldFBhcmFtZXRlcnMsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7Q29sbGlzaW9uQm94QXJyYXksIENvbGxpc2lvbkJveCwgU3ltYm9sSW5zdGFuY2V9IGZyb20gJy4uL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIHtTdHJ1Y3RBcnJheSwgU3RydWN0QXJyYXlNZW1iZXJ9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcbmltcG9ydCBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtTeW1ib2xRdWFkfSBmcm9tICcuLi8uLi9zeW1ib2wvcXVhZHMnO1xuaW1wb3J0IHR5cGUge1NpemVEYXRhfSBmcm9tICcuLi8uLi9zeW1ib2wvc3ltYm9sX3NpemUnO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmV4cG9ydCB0eXBlIFNpbmdsZUNvbGxpc2lvbkJveCA9IHtcbiAgICB4MTogbnVtYmVyO1xuICAgIHkxOiBudW1iZXI7XG4gICAgeDI6IG51bWJlcjtcbiAgICB5MjogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50WDogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50WTogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQ29sbGlzaW9uQXJyYXlzID0ge1xuICAgIHRleHRCb3g/OiBTaW5nbGVDb2xsaXNpb25Cb3g7XG4gICAgdmVydGljYWxUZXh0Qm94PzogU2luZ2xlQ29sbGlzaW9uQm94O1xuICAgIGljb25Cb3g/OiBTaW5nbGVDb2xsaXNpb25Cb3g7XG4gICAgdGV4dENpcmNsZXM/OiBBcnJheTxudW1iZXI+O1xuICAgIHRleHRGZWF0dXJlSW5kZXg/OiBudW1iZXI7XG4gICAgdmVydGljYWxUZXh0RmVhdHVyZUluZGV4PzogbnVtYmVyO1xuICAgIGljb25GZWF0dXJlSW5kZXg/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xGZWF0dXJlID0ge3xcbiAgICBzb3J0S2V5OiBudW1iZXIgfCB2b2lkLFxuICAgIHRleHQ6IEZvcm1hdHRlZCB8IHZvaWQsXG4gICAgaWNvbjogUmVzb2x2ZWRJbWFnZSB8IHZvaWQsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgcHJvcGVydGllczogT2JqZWN0LFxuICAgIHR5cGU6ICdQb2ludCcgfCAnTGluZVN0cmluZycgfCAnUG9seWdvbicsXG4gICAgaWQ/OiBhbnlcbnx9O1xuXG4vLyBPcGFjaXR5IGFycmF5cyBhcmUgZnJlcXVlbnRseSB1cGRhdGVkIGJ1dCBkb24ndCBjb250YWluIGEgbG90IG9mIGluZm9ybWF0aW9uLCBzbyB3ZSBwYWNrIHRoZW1cbi8vIHRpZ2h0LiBFYWNoIFVpbnQzMiBpcyBhY3R1YWxseSBmb3VyIGR1cGxpY2F0ZSBVaW50OHMgZm9yIHRoZSBmb3VyIGNvcm5lcnMgb2YgYSBnbHlwaFxuLy8gNyBiaXRzIGFyZSBmb3IgdGhlIGN1cnJlbnQgb3BhY2l0eSwgYW5kIHRoZSBsb3dlc3QgYml0IGlzIHRoZSB0YXJnZXQgb3BhY2l0eVxuXG4vLyBhY3R1YWxseSBkZWZpbmVkIGluIHN5bWJvbF9hdHRyaWJ1dGVzLmpzXG4vLyBjb25zdCBwbGFjZW1lbnRPcGFjaXR5QXR0cmlidXRlcyA9IFtcbi8vICAgICB7IG5hbWU6ICdhX2ZhZGVfb3BhY2l0eScsIGNvbXBvbmVudHM6IDEsIHR5cGU6ICdVaW50MzInIH1cbi8vIF07XG5jb25zdCBzaGFkZXJPcGFjaXR5QXR0cmlidXRlcyA9IFtcbiAgICB7bmFtZTogJ2FfZmFkZV9vcGFjaXR5JywgY29tcG9uZW50czogMSwgdHlwZTogJ1VpbnQ4Jywgb2Zmc2V0OiAwfVxuXTtcblxuZnVuY3Rpb24gYWRkVmVydGV4KGFycmF5LCBhbmNob3JYLCBhbmNob3JZLCBveCwgb3ksIHR4LCB0eSwgc2l6ZVZlcnRleCkge1xuICAgIGFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAvLyBhX3Bvc19vZmZzZXRcbiAgICAgICAgYW5jaG9yWCxcbiAgICAgICAgYW5jaG9yWSxcbiAgICAgICAgTWF0aC5yb3VuZChveCAqIDMyKSxcbiAgICAgICAgTWF0aC5yb3VuZChveSAqIDMyKSxcblxuICAgICAgICAvLyBhX2RhdGFcbiAgICAgICAgdHgsIC8vIHggY29vcmRpbmF0ZSBvZiBzeW1ib2wgb24gZ2x5cGggYXRsYXMgdGV4dHVyZVxuICAgICAgICB0eSwgLy8geSBjb29yZGluYXRlIG9mIHN5bWJvbCBvbiBnbHlwaCBhdGxhcyB0ZXh0dXJlXG4gICAgICAgIHNpemVWZXJ0ZXggPyBzaXplVmVydGV4WzBdIDogMCxcbiAgICAgICAgc2l6ZVZlcnRleCA/IHNpemVWZXJ0ZXhbMV0gOiAwXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gYWRkRHluYW1pY0F0dHJpYnV0ZXMoZHluYW1pY0xheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheSwgcDogUG9pbnQsIGFuZ2xlOiBudW1iZXIpIHtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbn1cblxuZXhwb3J0IGNsYXNzIFN5bWJvbEJ1ZmZlcnMge1xuICAgIGxheW91dFZlcnRleEFycmF5OiBTeW1ib2xMYXlvdXRBcnJheTtcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG5cbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PFN5bWJvbFN0eWxlTGF5ZXI+O1xuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuXG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5OiBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXk7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgb3BhY2l0eVZlcnRleEFycmF5OiBTeW1ib2xPcGFjaXR5QXJyYXk7XG4gICAgb3BhY2l0eVZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXk6IENvbGxpc2lvblZlcnRleEFycmF5O1xuICAgIGNvbGxpc2lvblZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgcGxhY2VkU3ltYm9sQXJyYXk6IFBsYWNlZFN5bWJvbEFycmF5O1xuXG4gICAgY29uc3RydWN0b3IocHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxTeW1ib2xTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IFN5bWJvbExheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBwcm9ncmFtQ29uZmlndXJhdGlvbnM7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSA9IG5ldyBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QXJyYXkgPSBuZXcgU3ltYm9sT3BhY2l0eUFycmF5KCk7XG4gICAgICAgIHRoaXMucGxhY2VkU3ltYm9sQXJyYXkgPSBuZXcgUGxhY2VkU3ltYm9sQXJyYXkoKTtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCwgZHluYW1pY0luZGV4QnVmZmVyOiBib29sZWFuLCB1cGxvYWQ/OiBib29sZWFuLCB1cGRhdGU/OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh1cGxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgc3ltYm9sTGF5b3V0QXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSwgZHluYW1pY0luZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LCBkeW5hbWljTGF5b3V0QXR0cmlidXRlcy5tZW1iZXJzLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMub3BhY2l0eVZlcnRleEFycmF5LCBzaGFkZXJPcGFjaXR5QXR0cmlidXRlcywgdHJ1ZSk7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgcGVyZm9ybWFuY2UgaGFjayBzbyB0aGF0IHdlIGNhbiB3cml0ZSB0byBvcGFjaXR5VmVydGV4QXJyYXkgd2l0aCB1aW50MzJzXG4gICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGUgc2hhZGVycyByZWFkIHVpbnQ4c1xuICAgICAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLml0ZW1TaXplID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBsb2FkIHx8IHVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1N5bWJvbEJ1ZmZlcnMnLCBTeW1ib2xCdWZmZXJzKTtcblxuY2xhc3MgQ29sbGlzaW9uQnVmZmVycyB7XG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5O1xuICAgIGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheSB8IExpbmVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuXG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXk6IENvbGxpc2lvblZlcnRleEFycmF5O1xuICAgIGNvbGxpc2lvblZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgY29uc3RydWN0b3IoTGF5b3V0QXJyYXk6IENsYXNzPFN0cnVjdEFycmF5PixcbiAgICAgICAgICAgICAgICBsYXlvdXRBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4sXG4gICAgICAgICAgICAgICAgSW5kZXhBcnJheTogQ2xhc3M8VHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXk+KSB7XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5sYXlvdXRBdHRyaWJ1dGVzID0gbGF5b3V0QXR0cmlidXRlcztcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IEluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXkgPSBuZXcgQ29sbGlzaW9uVmVydGV4QXJyYXkoKTtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMubGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXR0cmlidXRlcy5tZW1iZXJzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignQ29sbGlzaW9uQnVmZmVycycsIENvbGxpc2lvbkJ1ZmZlcnMpO1xuXG4vKipcbiAqIFVubGlrZSBvdGhlciBidWNrZXRzLCB3aGljaCBzaW1wbHkgaW1wbGVtZW50ICNhZGRGZWF0dXJlIHdpdGggdHlwZS1zcGVjaWZpY1xuICogbG9naWMgZm9yIChlc3NlbnRpYWxseSkgdHJpYW5ndWxhdGluZyBmZWF0dXJlIGdlb21ldHJpZXMsIFN5bWJvbEJ1Y2tldFxuICogcmVxdWlyZXMgc3BlY2lhbGl6ZWQgYmVoYXZpb3I6XG4gKlxuICogMS4gV29ya2VyVGlsZSNwYXJzZSgpLCB0aGUgbG9naWNhbCBvd25lciBvZiB0aGUgYnVja2V0IGNyZWF0aW9uIHByb2Nlc3MsXG4gKiAgICBjYWxscyBTeW1ib2xCdWNrZXQjcG9wdWxhdGUoKSwgd2hpY2ggcmVzb2x2ZXMgdGV4dCBhbmQgaWNvbiB0b2tlbnMgb25cbiAqICAgIGVhY2ggZmVhdHVyZSwgYWRkcyBlYWNoIGdseXBocyBhbmQgc3ltYm9scyBuZWVkZWQgdG8gdGhlIHBhc3NlZC1pblxuICogICAgY29sbGVjdGlvbnMgb3B0aW9ucy5nbHlwaERlcGVuZGVuY2llcyBhbmQgb3B0aW9ucy5pY29uRGVwZW5kZW5jaWVzLCBhbmRcbiAqICAgIHN0b3JlcyB0aGUgZmVhdHVyZSBkYXRhIGZvciB1c2UgaW4gc3Vic2VxdWVudCBzdGVwICh0aGlzLmZlYXR1cmVzKS5cbiAqXG4gKiAyLiBXb3JrZXJUaWxlIGFzeW5jaHJvbm91c2x5IHJlcXVlc3RzIGZyb20gdGhlIG1haW4gdGhyZWFkIGFsbCBvZiB0aGUgZ2x5cGhzXG4gKiAgICBhbmQgaWNvbnMgbmVlZGVkIChieSB0aGlzIGJ1Y2tldCBhbmQgYW55IG90aGVycykuIFdoZW4gZ2x5cGhzIGFuZCBpY29uc1xuICogICAgaGF2ZSBiZWVuIHJlY2VpdmVkLCB0aGUgV29ya2VyVGlsZSBjcmVhdGVzIGEgQ29sbGlzaW9uSW5kZXggYW5kIGludm9rZXM6XG4gKlxuICogMy4gcGVyZm9ybVN5bWJvbExheW91dChidWNrZXQsIHN0YWNrcywgaWNvbnMpIHBlcmZvcm0gdGV4dHMgc2hhcGluZyBhbmRcbiAqICAgIGxheW91dCBvbiBhIFN5bWJvbCBCdWNrZXQuIFRoaXMgc3RlcCBwb3B1bGF0ZXM6XG4gKiAgICAgIGB0aGlzLnN5bWJvbEluc3RhbmNlc2A6IG1ldGFkYXRhIG9uIGdlbmVyYXRlZCBzeW1ib2xzXG4gKiAgICAgIGB0aGlzLmNvbGxpc2lvbkJveEFycmF5YDogY29sbGlzaW9uIGRhdGEgZm9yIHVzZSBieSBmb3JlZ3JvdW5kXG4gKiAgICAgIGB0aGlzLnRleHRgOiBTeW1ib2xCdWZmZXJzIGZvciB0ZXh0IHN5bWJvbHNcbiAqICAgICAgYHRoaXMuaWNvbnNgOiBTeW1ib2xCdWZmZXJzIGZvciBpY29uc1xuICogICAgICBgdGhpcy5pY29uQ29sbGlzaW9uQm94YDogRGVidWcgU3ltYm9sQnVmZmVycyBmb3IgaWNvbiBjb2xsaXNpb24gYm94ZXNcbiAqICAgICAgYHRoaXMudGV4dENvbGxpc2lvbkJveGA6IERlYnVnIFN5bWJvbEJ1ZmZlcnMgZm9yIHRleHQgY29sbGlzaW9uIGJveGVzXG4gKiAgICAgIGB0aGlzLmljb25Db2xsaXNpb25DaXJjbGVgOiBEZWJ1ZyBTeW1ib2xCdWZmZXJzIGZvciBpY29uIGNvbGxpc2lvbiBjaXJjbGVzXG4gKiAgICAgIGB0aGlzLnRleHRDb2xsaXNpb25DaXJjbGVgOiBEZWJ1ZyBTeW1ib2xCdWZmZXJzIGZvciB0ZXh0IGNvbGxpc2lvbiBjaXJjbGVzXG4gKiAgICBUaGUgcmVzdWx0cyBhcmUgc2VudCB0byB0aGUgZm9yZWdyb3VuZCBmb3IgcmVuZGVyaW5nXG4gKlxuICogNC4gcGVyZm9ybVN5bWJvbFBsYWNlbWVudChidWNrZXQsIGNvbGxpc2lvbkluZGV4KSBpcyBydW4gb24gdGhlIGZvcmVncm91bmQsXG4gKiAgICBhbmQgdXNlcyB0aGUgQ29sbGlzaW9uSW5kZXggYWxvbmcgd2l0aCBjdXJyZW50IGNhbWVyYSBzZXR0aW5ncyB0byBkZXRlcm1pbmVcbiAqICAgIHdoaWNoIHN5bWJvbHMgY2FuIGFjdHVhbGx5IHNob3cgb24gdGhlIG1hcC4gQ29sbGlkZWQgc3ltYm9scyBhcmUgaGlkZGVuXG4gKiAgICB1c2luZyBhIGR5bmFtaWMgXCJPcGFjaXR5VmVydGV4QXJyYXlcIi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTeW1ib2xCdWNrZXQgaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIHN0YXRpYyBNQVhfR0xZUEhTOiBudW1iZXI7XG4gICAgc3RhdGljIGFkZER5bmFtaWNBdHRyaWJ1dGVzOiB0eXBlb2YgYWRkRHluYW1pY0F0dHJpYnV0ZXM7XG5cbiAgICBjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXk7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgbGF5ZXJzOiBBcnJheTxTeW1ib2xTdHlsZUxheWVyPjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8U3ltYm9sU3R5bGVMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGluZGV4OiBudW1iZXI7XG4gICAgc2RmSWNvbnM6IGJvb2xlYW47XG4gICAgaWNvbnNOZWVkTGluZWFyOiBib29sZWFuO1xuICAgIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcjtcbiAgICBqdXN0UmVsb2FkZWQ6IGJvb2xlYW47XG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcblxuICAgIHRleHRTaXplRGF0YTogU2l6ZURhdGE7XG4gICAgaWNvblNpemVEYXRhOiBTaXplRGF0YTtcblxuICAgIGdseXBoT2Zmc2V0QXJyYXk6IEdseXBoT2Zmc2V0QXJyYXk7XG4gICAgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXk7XG4gICAgZmVhdHVyZXM6IEFycmF5PFN5bWJvbEZlYXR1cmU+O1xuICAgIHN5bWJvbEluc3RhbmNlczogU3ltYm9sSW5zdGFuY2VBcnJheTtcbiAgICBjb2xsaXNpb25BcnJheXM6IEFycmF5PENvbGxpc2lvbkFycmF5cz47XG4gICAgcGl4ZWxSYXRpbzogbnVtYmVyO1xuICAgIHRpbGVQaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgY29tcGFyZVRleHQ6IHtbc3RyaW5nXTogQXJyYXk8UG9pbnQ+fTtcbiAgICBmYWRlU3RhcnRUaW1lOiBudW1iZXI7XG4gICAgc29ydEZlYXR1cmVzQnlLZXk6IGJvb2xlYW47XG4gICAgc29ydEZlYXR1cmVzQnlZOiBib29sZWFuO1xuICAgIHNvcnRlZEFuZ2xlOiBudW1iZXI7XG4gICAgZmVhdHVyZVNvcnRPcmRlcjogQXJyYXk8bnVtYmVyPjtcblxuICAgIHRleHQ6IFN5bWJvbEJ1ZmZlcnM7XG4gICAgaWNvbjogU3ltYm9sQnVmZmVycztcbiAgICB0ZXh0Q29sbGlzaW9uQm94OiBDb2xsaXNpb25CdWZmZXJzO1xuICAgIGljb25Db2xsaXNpb25Cb3g6IENvbGxpc2lvbkJ1ZmZlcnM7XG4gICAgdGV4dENvbGxpc2lvbkNpcmNsZTogQ29sbGlzaW9uQnVmZmVycztcbiAgICBpY29uQ29sbGlzaW9uQ2lyY2xlOiBDb2xsaXNpb25CdWZmZXJzO1xuICAgIHVwbG9hZGVkOiBib29sZWFuO1xuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcjtcbiAgICBzb3VyY2VJRDogc3RyaW5nO1xuICAgIHN5bWJvbEluc3RhbmNlSW5kZXhlczogQXJyYXk8bnVtYmVyPjtcbiAgICB3cml0aW5nTW9kZXM6IEFycmF5PG51bWJlcj47XG4gICAgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbjtcbiAgICBoYXNQYWludE92ZXJyaWRlczogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJ1Y2tldFBhcmFtZXRlcnM8U3ltYm9sU3R5bGVMYXllcj4pIHtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25Cb3hBcnJheSA9IG9wdGlvbnMuY29sbGlzaW9uQm94QXJyYXk7XG4gICAgICAgIHRoaXMuem9vbSA9IG9wdGlvbnMuem9vbTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGluZyA9IG9wdGlvbnMub3ZlcnNjYWxpbmc7XG4gICAgICAgIHRoaXMubGF5ZXJzID0gb3B0aW9ucy5sYXllcnM7XG4gICAgICAgIHRoaXMubGF5ZXJJZHMgPSB0aGlzLmxheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIuaWQpO1xuICAgICAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleDtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID0gb3B0aW9ucy5waXhlbFJhdGlvO1xuICAgICAgICB0aGlzLnNvdXJjZUxheWVySW5kZXggPSBvcHRpb25zLnNvdXJjZUxheWVySW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc1BhaW50T3ZlcnJpZGVzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmxheWVyc1swXTtcbiAgICAgICAgY29uc3QgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXMgPSBsYXllci5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlcztcblxuICAgICAgICB0aGlzLnRleHRTaXplRGF0YSA9IGdldFNpemVEYXRhKHRoaXMuem9vbSwgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddKTtcbiAgICAgICAgdGhpcy5pY29uU2l6ZURhdGEgPSBnZXRTaXplRGF0YSh0aGlzLnpvb20sIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWydpY29uLXNpemUnXSk7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0ID0gdGhpcy5sYXllcnNbMF0ubGF5b3V0O1xuICAgICAgICBjb25zdCBzb3J0S2V5ID0gbGF5b3V0LmdldCgnc3ltYm9sLXNvcnQta2V5Jyk7XG4gICAgICAgIGNvbnN0IHpPcmRlciA9IGxheW91dC5nZXQoJ3N5bWJvbC16LW9yZGVyJyk7XG4gICAgICAgIHRoaXMuc29ydEZlYXR1cmVzQnlLZXkgPSB6T3JkZXIgIT09ICd2aWV3cG9ydC15JyAmJiBzb3J0S2V5LmNvbnN0YW50T3IoMSkgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgek9yZGVyQnlWaWV3cG9ydFkgPSB6T3JkZXIgPT09ICd2aWV3cG9ydC15JyB8fCAoek9yZGVyID09PSAnYXV0bycgJiYgIXRoaXMuc29ydEZlYXR1cmVzQnlLZXkpO1xuICAgICAgICB0aGlzLnNvcnRGZWF0dXJlc0J5WSA9IHpPcmRlckJ5Vmlld3BvcnRZICYmIChsYXlvdXQuZ2V0KCd0ZXh0LWFsbG93LW92ZXJsYXAnKSB8fCBsYXlvdXQuZ2V0KCdpY29uLWFsbG93LW92ZXJsYXAnKSB8fFxuICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1pZ25vcmUtcGxhY2VtZW50JykgfHwgbGF5b3V0LmdldCgnaWNvbi1pZ25vcmUtcGxhY2VtZW50JykpO1xuXG4gICAgICAgIGlmIChsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgPT09ICdwb2ludCcpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGluZ01vZGVzID0gbGF5b3V0LmdldCgndGV4dC13cml0aW5nLW1vZGUnKS5tYXAod20gPT4gV3JpdGluZ01vZGVbd21dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcyA9IHRoaXMubGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pc1N0YXRlRGVwZW5kZW50KCkpLm1hcCgobCkgPT4gbC5pZCk7XG5cbiAgICAgICAgdGhpcy5zb3VyY2VJRCA9IG9wdGlvbnMuc291cmNlSUQ7XG4gICAgfVxuXG4gICAgY3JlYXRlQXJyYXlzKCkge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIHRoaXMuaGFzUGFpbnRPdmVycmlkZXMgPSBTeW1ib2xTdHlsZUxheWVyLmhhc1BhaW50T3ZlcnJpZGVzKGxheW91dCk7XG5cbiAgICAgICAgdGhpcy50ZXh0ID0gbmV3IFN5bWJvbEJ1ZmZlcnMobmV3IFByb2dyYW1Db25maWd1cmF0aW9uU2V0KHN5bWJvbExheW91dEF0dHJpYnV0ZXMubWVtYmVycywgdGhpcy5sYXllcnMsIHRoaXMuem9vbSwgcHJvcGVydHkgPT4gL150ZXh0Ly50ZXN0KHByb3BlcnR5KSkpO1xuICAgICAgICB0aGlzLmljb24gPSBuZXcgU3ltYm9sQnVmZmVycyhuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQoc3ltYm9sTGF5b3V0QXR0cmlidXRlcy5tZW1iZXJzLCB0aGlzLmxheWVycywgdGhpcy56b29tLCBwcm9wZXJ0eSA9PiAvXmljb24vLnRlc3QocHJvcGVydHkpKSk7XG5cbiAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQm94ID0gbmV3IENvbGxpc2lvbkJ1ZmZlcnMoQ29sbGlzaW9uQm94TGF5b3V0QXJyYXksIGNvbGxpc2lvbkJveExheW91dC5tZW1iZXJzLCBMaW5lSW5kZXhBcnJheSk7XG4gICAgICAgIHRoaXMuaWNvbkNvbGxpc2lvbkJveCA9IG5ldyBDb2xsaXNpb25CdWZmZXJzKENvbGxpc2lvbkJveExheW91dEFycmF5LCBjb2xsaXNpb25Cb3hMYXlvdXQubWVtYmVycywgTGluZUluZGV4QXJyYXkpO1xuICAgICAgICB0aGlzLnRleHRDb2xsaXNpb25DaXJjbGUgPSBuZXcgQ29sbGlzaW9uQnVmZmVycyhDb2xsaXNpb25DaXJjbGVMYXlvdXRBcnJheSwgY29sbGlzaW9uQ2lyY2xlTGF5b3V0Lm1lbWJlcnMsIFRyaWFuZ2xlSW5kZXhBcnJheSk7XG4gICAgICAgIHRoaXMuaWNvbkNvbGxpc2lvbkNpcmNsZSA9IG5ldyBDb2xsaXNpb25CdWZmZXJzKENvbGxpc2lvbkNpcmNsZUxheW91dEFycmF5LCBjb2xsaXNpb25DaXJjbGVMYXlvdXQubWVtYmVycywgVHJpYW5nbGVJbmRleEFycmF5KTtcblxuICAgICAgICB0aGlzLmdseXBoT2Zmc2V0QXJyYXkgPSBuZXcgR2x5cGhPZmZzZXRBcnJheSgpO1xuICAgICAgICB0aGlzLmxpbmVWZXJ0ZXhBcnJheSA9IG5ldyBTeW1ib2xMaW5lVmVydGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5zeW1ib2xJbnN0YW5jZXMgPSBuZXcgU3ltYm9sSW5zdGFuY2VBcnJheSgpO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUdseXBoRGVwZW5kZW5jaWVzKHRleHQ6IHN0cmluZywgc3RhY2s6IHtbbnVtYmVyXTogYm9vbGVhbn0sIHRleHRBbG9uZ0xpbmU6IGJvb2xlYW4sIGFsbG93VmVydGljYWxQbGFjZW1lbnQ6IGJvb2xlYW4sIGRvZXNBbGxvd1ZlcnRpY2FsV3JpdGluZ01vZGU6IGJvb2xlYW4pIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdGFja1t0ZXh0LmNoYXJDb2RlQXQoaSldID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICgodGV4dEFsb25nTGluZSB8fCBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50KSAmJiBkb2VzQWxsb3dWZXJ0aWNhbFdyaXRpbmdNb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxDaGFyID0gdmVydGljYWxpemVkQ2hhcmFjdGVyTWFwW3RleHQuY2hhckF0KGkpXTtcbiAgICAgICAgICAgICAgICBpZiAodmVydGljYWxDaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrW3ZlcnRpY2FsQ2hhci5jaGFyQ29kZUF0KDApXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5sYXllcnNbMF07XG4gICAgICAgIGNvbnN0IGxheW91dCA9IGxheWVyLmxheW91dDtcblxuICAgICAgICBjb25zdCB0ZXh0Rm9udCA9IGxheW91dC5nZXQoJ3RleHQtZm9udCcpO1xuICAgICAgICBjb25zdCB0ZXh0RmllbGQgPSBsYXlvdXQuZ2V0KCd0ZXh0LWZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGljb25JbWFnZSA9IGxheW91dC5nZXQoJ2ljb24taW1hZ2UnKTtcbiAgICAgICAgY29uc3QgaGFzVGV4dCA9XG4gICAgICAgICAgICAodGV4dEZpZWxkLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcgfHwgdGV4dEZpZWxkLnZhbHVlLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAgICh0ZXh0Rm9udC52YWx1ZS5raW5kICE9PSAnY29uc3RhbnQnIHx8IHRleHRGb250LnZhbHVlLnZhbHVlLmxlbmd0aCA+IDApO1xuICAgICAgICAvLyB3ZSBzaG91bGQgYWx3YXlzIHJlc29sdmUgdGhlIGljb24taW1hZ2UgdmFsdWUgaWYgdGhlIHByb3BlcnR5IHdhcyBkZWZpbmVkIGluIHRoZSBzdHlsZVxuICAgICAgICAvLyB0aGlzIGFsbG93cyB1cyB0byBmaXJlIHRoZSBzdHlsZWltYWdlbWlzc2luZyBldmVudCBpZiBpbWFnZSBldmFsdWF0aW9uIHJldHVybnMgbnVsbFxuICAgICAgICAvLyB0aGUgb25seSB3YXkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBudWxsIHJldHVybmVkIGZyb20gYSBjb2FsZXNjZSBzdGF0ZW1lbnQgd2l0aCBubyB2YWxpZCBpbWFnZXNcbiAgICAgICAgLy8gYW5kIG51bGwgcmV0dXJuZWQgYmVjYXVzZSBpY29uLWltYWdlIHdhc24ndCBkZWZpbmVkIGlzIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90IGljb25JbWFnZS5wYXJhbWV0ZXJzIGlzIGFuIGVtcHR5IG9iamVjdFxuICAgICAgICBjb25zdCBoYXNJY29uID0gaWNvbkltYWdlLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcgfHwgISFpY29uSW1hZ2UudmFsdWUudmFsdWUgfHwgT2JqZWN0LmtleXMoaWNvbkltYWdlLnBhcmFtZXRlcnMpLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IHN5bWJvbFNvcnRLZXkgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtc29ydC1rZXknKTtcblxuICAgICAgICB0aGlzLmZlYXR1cmVzID0gW107XG5cbiAgICAgICAgaWYgKCFoYXNUZXh0ICYmICFoYXNJY29uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpY29ucyA9IG9wdGlvbnMuaWNvbkRlcGVuZGVuY2llcztcbiAgICAgICAgY29uc3Qgc3RhY2tzID0gb3B0aW9ucy5nbHlwaERlcGVuZGVuY2llcztcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlSW1hZ2VzID0gb3B0aW9ucy5hdmFpbGFibGVJbWFnZXM7XG4gICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXMgPSBuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy56b29tKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHtmZWF0dXJlLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gb2YgZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGlmICghbGF5ZXIuX2ZlYXR1cmVGaWx0ZXIoZ2xvYmFsUHJvcGVydGllcywgZmVhdHVyZSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHRleHQ6IEZvcm1hdHRlZCB8IHZvaWQ7XG4gICAgICAgICAgICBpZiAoaGFzVGV4dCkge1xuICAgICAgICAgICAgICAgIC8vIEV4cHJlc3Npb24gZXZhbHVhdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgY29lcmNlIHRvIEZvcm1hdHRlZFxuICAgICAgICAgICAgICAgIC8vIGJ1dCBwbGFpbiBzdHJpbmcgdG9rZW4gZXZhbHVhdGlvbiBza2lwcyB0aGF0IHBhdGh3YXkgc28gZG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiBoZXJlLlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkVG9rZW5zID0gbGF5ZXIuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKCd0ZXh0LWZpZWxkJywgZmVhdHVyZSwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gdHJhbnNmb3JtVGV4dChyZXNvbHZlZFRva2VucyBpbnN0YW5jZW9mIEZvcm1hdHRlZCA/XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVG9rZW5zIDpcbiAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGVkLmZyb21TdHJpbmcocmVzb2x2ZWRUb2tlbnMpLFxuICAgICAgICAgICAgICAgICAgICBsYXllciwgZmVhdHVyZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpY29uOiBSZXNvbHZlZEltYWdlIHwgdm9pZDtcbiAgICAgICAgICAgIGlmIChoYXNJY29uKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiBldmFsdWF0aW9uIHdpbGwgYXV0b21hdGljYWxseSBjb2VyY2UgdG8gSW1hZ2VcbiAgICAgICAgICAgICAgICAvLyBidXQgcGxhaW4gc3RyaW5nIHRva2VuIGV2YWx1YXRpb24gc2tpcHMgdGhhdCBwYXRod2F5IHNvIGRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnNpb24gaGVyZS5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFRva2VucyA9IGxheWVyLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygnaWNvbi1pbWFnZScsIGZlYXR1cmUsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkVG9rZW5zIGluc3RhbmNlb2YgUmVzb2x2ZWRJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICBpY29uID0gcmVzb2x2ZWRUb2tlbnM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcmVzb2x2ZWRUb2tlbnMgfHwgdHlwZW9mIHJlc29sdmVkVG9rZW5zID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBpY29uID0gUmVzb2x2ZWRJbWFnZS5mcm9tU3RyaW5nKHtuYW1lOiByZXNvbHZlZFRva2VucywgYXZhaWxhYmxlOiBmYWxzZX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGljb24gPSBSZXNvbHZlZEltYWdlLmZyb21TdHJpbmcocmVzb2x2ZWRUb2tlbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0ZXh0ICYmICFpY29uKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvcnRLZXkgPSB0aGlzLnNvcnRGZWF0dXJlc0J5S2V5ID9cbiAgICAgICAgICAgICAgICBzeW1ib2xTb3J0S2V5LmV2YWx1YXRlKGZlYXR1cmUsIHt9KSA6XG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCBzeW1ib2xGZWF0dXJlOiBTeW1ib2xGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgaWNvbixcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBsb2FkR2VvbWV0cnkoZmVhdHVyZSksXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IHZlY3RvclRpbGVGZWF0dXJlVHlwZXNbZmVhdHVyZS50eXBlXSxcbiAgICAgICAgICAgICAgICBzb3J0S2V5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmZWF0dXJlLmlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHN5bWJvbEZlYXR1cmUuaWQgPSBmZWF0dXJlLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKHN5bWJvbEZlYXR1cmUpO1xuXG4gICAgICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIGljb25zW2ljb24ubmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTdGFjayA9IHRleHRGb250LmV2YWx1YXRlKGZlYXR1cmUsIHt9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dEFsb25nTGluZSA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnICYmIGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JztcbiAgICAgICAgICAgICAgICB0aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQgPSB0aGlzLndyaXRpbmdNb2RlcyAmJiB0aGlzLndyaXRpbmdNb2Rlcy5pbmRleE9mKFdyaXRpbmdNb2RlLnZlcnRpY2FsKSA+PSAwO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0ZXh0LnNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvZXNBbGxvd1ZlcnRpY2FsV3JpdGluZ01vZGUgPSBhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlKHRleHQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25Gb250ID0gc2VjdGlvbi5mb250U3RhY2sgfHwgZm9udFN0YWNrO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uU3RhY2sgPSBzdGFja3Nbc2VjdGlvbkZvbnRdID0gc3RhY2tzW3NlY3Rpb25Gb250XSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVHbHlwaERlcGVuZGVuY2llcyhzZWN0aW9uLnRleHQsIHNlY3Rpb25TdGFjaywgdGV4dEFsb25nTGluZSwgdGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50LCBkb2VzQWxsb3dWZXJ0aWNhbFdyaXRpbmdNb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpID09PSAnbGluZScpIHtcbiAgICAgICAgICAgIC8vIE1lcmdlIGFkamFjZW50IGxpbmVzIHdpdGggdGhlIHNhbWUgdGV4dCB0byBpbXByb3ZlIGxhYmVsbGluZy5cbiAgICAgICAgICAgIC8vIEl0J3MgYmV0dGVyIHRvIHBsYWNlIGxhYmVscyBvbiBvbmUgbG9uZyBsaW5lIHRoYW4gb24gbWFueSBzaG9ydCBzZWdtZW50cy5cbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMgPSBtZXJnZUxpbmVzKHRoaXMuZmVhdHVyZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBzb3J0RmVhdHVyZXNCeUtleSBpcyB0cnVlXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoYS5zb3J0S2V5OiBhbnkpOiBudW1iZXIpIC0gKChiLnNvcnRLZXk6IGFueSk6IG51bWJlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5sYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMubGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB1cGxvYWRQZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudXBsb2FkZWQgfHwgdGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCB8fCB0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQm94LnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgICAgIHRoaXMuaWNvbkNvbGxpc2lvbkJveC51cGxvYWQoY29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLnRleHRDb2xsaXNpb25DaXJjbGUudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQ2lyY2xlLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRleHQudXBsb2FkKGNvbnRleHQsIHRoaXMuc29ydEZlYXR1cmVzQnlZLCAhdGhpcy51cGxvYWRlZCwgdGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCk7XG4gICAgICAgIHRoaXMuaWNvbi51cGxvYWQoY29udGV4dCwgdGhpcy5zb3J0RmVhdHVyZXNCeVksICF0aGlzLnVwbG9hZGVkLCB0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkKTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy50ZXh0LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pY29uLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQm94LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQm94LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQ2lyY2xlLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQ2lyY2xlLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRUb0xpbmVWZXJ0ZXhBcnJheShhbmNob3I6IEFuY2hvciwgbGluZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGxpbmVTdGFydEluZGV4ID0gdGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICBpZiAoYW5jaG9yLnNlZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHN1bUZvcndhcmRMZW5ndGggPSBhbmNob3IuZGlzdChsaW5lW2FuY2hvci5zZWdtZW50ICsgMV0pO1xuICAgICAgICAgICAgbGV0IHN1bUJhY2t3YXJkTGVuZ3RoID0gYW5jaG9yLmRpc3QobGluZVthbmNob3Iuc2VnbWVudF0pO1xuICAgICAgICAgICAgY29uc3QgdmVydGljZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBhbmNob3Iuc2VnbWVudCArIDE7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB7eDogbGluZVtpXS54LCB5OiBsaW5lW2ldLnksIHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOiBzdW1Gb3J3YXJkTGVuZ3RofTtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IGxpbmUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBzdW1Gb3J3YXJkTGVuZ3RoICs9IGxpbmVbaSArIDFdLmRpc3QobGluZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGFuY2hvci5zZWdtZW50IHx8IDA7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB7eDogbGluZVtpXS54LCB5OiBsaW5lW2ldLnksIHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOiBzdW1CYWNrd2FyZExlbmd0aH07XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bUJhY2t3YXJkTGVuZ3RoICs9IGxpbmVbaSAtIDFdLmRpc3QobGluZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGV4ID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVmVydGV4QXJyYXkuZW1wbGFjZUJhY2sodmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5lU3RhcnRJbmRleCxcbiAgICAgICAgICAgIGxpbmVMZW5ndGg6IHRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aCAtIGxpbmVTdGFydEluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkU3ltYm9scyhhcnJheXM6IFN5bWJvbEJ1ZmZlcnMsXG4gICAgICAgICAgICAgICBxdWFkczogQXJyYXk8U3ltYm9sUXVhZD4sXG4gICAgICAgICAgICAgICBzaXplVmVydGV4OiBhbnksXG4gICAgICAgICAgICAgICBsaW5lT2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgYWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlOiBhbnksXG4gICAgICAgICAgICAgICBsYWJlbEFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgbGluZVN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVMZW5ndGg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGFzc29jaWF0ZWRJY29uSW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpbmRleEFycmF5ID0gYXJyYXlzLmluZGV4QXJyYXk7XG4gICAgICAgIGNvbnN0IGxheW91dFZlcnRleEFycmF5ID0gYXJyYXlzLmxheW91dFZlcnRleEFycmF5O1xuICAgICAgICBjb25zdCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkgPSBhcnJheXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5O1xuXG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBhcnJheXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCAqIHF1YWRzLmxlbmd0aCwgYXJyYXlzLmxheW91dFZlcnRleEFycmF5LCBhcnJheXMuaW5kZXhBcnJheSwgZmVhdHVyZS5zb3J0S2V5KTtcbiAgICAgICAgY29uc3QgZ2x5cGhPZmZzZXRBcnJheVN0YXJ0ID0gdGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgdmVydGV4U3RhcnRJbmRleCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IGFuZ2xlID0gKHRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiB3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwpID8gTWF0aC5QSSAvIDIgOiAwO1xuXG4gICAgICAgIGNvbnN0IGFkZFN5bWJvbCA9IChzeW1ib2w6IFN5bWJvbFF1YWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRsID0gc3ltYm9sLnRsLFxuICAgICAgICAgICAgICAgIHRyID0gc3ltYm9sLnRyLFxuICAgICAgICAgICAgICAgIGJsID0gc3ltYm9sLmJsLFxuICAgICAgICAgICAgICAgIGJyID0gc3ltYm9sLmJyLFxuICAgICAgICAgICAgICAgIHRleCA9IHN5bWJvbC50ZXg7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgIGNvbnN0IHkgPSBzeW1ib2wuZ2x5cGhPZmZzZXRbMV07XG4gICAgICAgICAgICBhZGRWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGxhYmVsQW5jaG9yLngsIGxhYmVsQW5jaG9yLnksIHRsLngsIHkgKyB0bC55LCB0ZXgueCwgdGV4LnksIHNpemVWZXJ0ZXgpO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCB0ci54LCB5ICsgdHIueSwgdGV4LnggKyB0ZXgudywgdGV4LnksIHNpemVWZXJ0ZXgpO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCBibC54LCB5ICsgYmwueSwgdGV4LngsIHRleC55ICsgdGV4LmgsIHNpemVWZXJ0ZXgpO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCBici54LCB5ICsgYnIueSwgdGV4LnggKyB0ZXgudywgdGV4LnkgKyB0ZXguaCwgc2l6ZVZlcnRleCk7XG5cbiAgICAgICAgICAgIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgbGFiZWxBbmNob3IsIGFuZ2xlKTtcblxuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCwgaW5kZXggKyAxLCBpbmRleCArIDIpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCArIDEsIGluZGV4ICsgMiwgaW5kZXggKyAzKTtcblxuICAgICAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gNDtcbiAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDI7XG5cbiAgICAgICAgICAgIHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5lbXBsYWNlQmFjayhzeW1ib2wuZ2x5cGhPZmZzZXRbMF0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChmZWF0dXJlLnRleHQgJiYgZmVhdHVyZS50ZXh0LnNlY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGZlYXR1cmUudGV4dC5zZWN0aW9ucztcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUGFpbnRPdmVycmlkZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudFNlY3Rpb25JbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3B1bGF0ZVBhaW50QXJyYXlGb3JTZWN0aW9uID0gKHNlY3Rpb25JbmRleD86IG51bWJlciwgbGFzdFNlY3Rpb246IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTZWN0aW9uSW5kZXggIT09IHVuZGVmaW5lZCAmJiAoY3VycmVudFNlY3Rpb25JbmRleCAhPT0gc2VjdGlvbkluZGV4IHx8IGxhc3RTZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKGFycmF5cy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGZlYXR1cmUuaW5kZXgsIHt9LCBzZWN0aW9uc1tjdXJyZW50U2VjdGlvbkluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlY3Rpb25JbmRleCA9IHNlY3Rpb25JbmRleDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzeW1ib2wgb2YgcXVhZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVQYWludEFycmF5Rm9yU2VjdGlvbihzeW1ib2wuc2VjdGlvbkluZGV4LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN5bWJvbChzeW1ib2wpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFBvcHVsYXRlIHBhaW50IGFycmF5cyBmb3IgdGhlIGxhc3Qgc2VjdGlvbi5cbiAgICAgICAgICAgICAgICBwb3B1bGF0ZVBhaW50QXJyYXlGb3JTZWN0aW9uKGN1cnJlbnRTZWN0aW9uSW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbCBvZiBxdWFkcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTeW1ib2woc3ltYm9sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJyYXlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKGFycmF5cy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGZlYXR1cmUuaW5kZXgsIHt9LCBzZWN0aW9uc1swXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ltYm9sIG9mIHF1YWRzKSB7XG4gICAgICAgICAgICAgICAgYWRkU3ltYm9sKHN5bWJvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcnJheXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXMoYXJyYXlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCwgZmVhdHVyZSwgZmVhdHVyZS5pbmRleCwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlzLnBsYWNlZFN5bWJvbEFycmF5LmVtcGxhY2VCYWNrKGxhYmVsQW5jaG9yLngsIGxhYmVsQW5jaG9yLnksXG4gICAgICAgICAgICBnbHlwaE9mZnNldEFycmF5U3RhcnQsIHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGggLSBnbHlwaE9mZnNldEFycmF5U3RhcnQsIHZlcnRleFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUxlbmd0aCwgKGxhYmVsQW5jaG9yLnNlZ21lbnQ6IGFueSksXG4gICAgICAgICAgICBzaXplVmVydGV4ID8gc2l6ZVZlcnRleFswXSA6IDAsIHNpemVWZXJ0ZXggPyBzaXplVmVydGV4WzFdIDogMCxcbiAgICAgICAgICAgIGxpbmVPZmZzZXRbMF0sIGxpbmVPZmZzZXRbMV0sXG4gICAgICAgICAgICB3cml0aW5nTW9kZSxcbiAgICAgICAgICAgIC8vIHBsYWNlZE9yaWVudGF0aW9uIGlzIG51bGwgaW5pdGlhbGx5OyB3aWxsIGJlIHVwZGF0ZWQgdG8gaG9yaXpvbnRhbCgxKS92ZXJ0aWNhbCgyKSBpZiBwbGFjZWRcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAoZmFsc2U6IGFueSksXG4gICAgICAgICAgICAvLyBUaGUgY3Jvc3NUaWxlSUQgaXMgb25seSBmaWxsZWQvdXNlZCBvbiB0aGUgZm9yZWdyb3VuZCBmb3IgZHluYW1pYyB0ZXh0IGFuY2hvcnNcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBhc3NvY2lhdGVkSWNvbkluZGV4XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXk6IFN0cnVjdEFycmF5LCBwb2ludDogUG9pbnQsIGFuY2hvclg6IG51bWJlciwgYW5jaG9yWTogbnVtYmVyLCBleHRydWRlOiBQb2ludCkge1xuICAgICAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjaygwLCAwKTtcbiAgICAgICAgcmV0dXJuIGxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAgICAgLy8gcG9zXG4gICAgICAgICAgICBwb2ludC54LFxuICAgICAgICAgICAgcG9pbnQueSxcbiAgICAgICAgICAgIC8vIGFfYW5jaG9yX3Bvc1xuICAgICAgICAgICAgYW5jaG9yWCxcbiAgICAgICAgICAgIGFuY2hvclksXG4gICAgICAgICAgICAvLyBleHRydWRlXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGV4dHJ1ZGUueCksXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGV4dHJ1ZGUueSkpO1xuICAgIH1cblxuICAgIGFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgYXJyYXlzOiBDb2xsaXNpb25CdWZmZXJzLCBib3hBbmNob3JQb2ludDogUG9pbnQsIHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgaXNDaXJjbGU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IGFycmF5cy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LCBhcnJheXMubGF5b3V0VmVydGV4QXJyYXksIGFycmF5cy5pbmRleEFycmF5KTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICBjb25zdCBsYXlvdXRWZXJ0ZXhBcnJheSA9IGFycmF5cy5sYXlvdXRWZXJ0ZXhBcnJheTtcbiAgICAgICAgY29uc3QgY29sbGlzaW9uVmVydGV4QXJyYXkgPSBhcnJheXMuY29sbGlzaW9uVmVydGV4QXJyYXk7XG5cbiAgICAgICAgY29uc3QgYW5jaG9yWCA9IHN5bWJvbEluc3RhbmNlLmFuY2hvclg7XG4gICAgICAgIGNvbnN0IGFuY2hvclkgPSBzeW1ib2xJbnN0YW5jZS5hbmNob3JZO1xuXG4gICAgICAgIHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBcnJheSwgYm94QW5jaG9yUG9pbnQsIGFuY2hvclgsIGFuY2hvclksIG5ldyBQb2ludCh4MSwgeTEpKTtcbiAgICAgICAgdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGNvbGxpc2lvblZlcnRleEFycmF5LCBib3hBbmNob3JQb2ludCwgYW5jaG9yWCwgYW5jaG9yWSwgbmV3IFBvaW50KHgyLCB5MSkpO1xuICAgICAgICB0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXksIGJveEFuY2hvclBvaW50LCBhbmNob3JYLCBhbmNob3JZLCBuZXcgUG9pbnQoeDIsIHkyKSk7XG4gICAgICAgIHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBcnJheSwgYm94QW5jaG9yUG9pbnQsIGFuY2hvclgsIGFuY2hvclksIG5ldyBQb2ludCh4MSwgeTIpKTtcblxuICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSA0O1xuICAgICAgICBpZiAoaXNDaXJjbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheSA9IChhcnJheXMuaW5kZXhBcnJheTogYW55KTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMSwgaW5kZXggKyAyKTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMiwgaW5kZXggKyAzKTtcblxuICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4QXJyYXk6IExpbmVJbmRleEFycmF5ID0gKGFycmF5cy5pbmRleEFycmF5OiBhbnkpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCwgaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXggKyAxLCBpbmRleCArIDIpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCArIDIsIGluZGV4ICsgMyk7XG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4ICsgMywgaW5kZXgpO1xuXG4gICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSA0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgaXNUZXh0OiBib29sZWFuKSB7XG4gICAgICAgIGZvciAobGV0IGIgPSBzdGFydEluZGV4OyBiIDwgZW5kSW5kZXg7IGIrKykge1xuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAodGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQoYik6IGFueSk7XG4gICAgICAgICAgICBjb25zdCB4MSA9IGJveC54MTtcbiAgICAgICAgICAgIGNvbnN0IHkxID0gYm94LnkxO1xuICAgICAgICAgICAgY29uc3QgeDIgPSBib3gueDI7XG4gICAgICAgICAgICBjb25zdCB5MiA9IGJveC55MjtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIHJhZGl1cyA+IDAsIHRoaXMgY29sbGlzaW9uIGJveCBpcyBhY3R1YWxseSBhIGNpcmNsZVxuICAgICAgICAgICAgLy8gVGhlIGRhdGEgd2UgYWRkIHRvIHRoZSBidWZmZXJzIGlzIGV4YWN0bHkgdGhlIHNhbWUsIGJ1dCB3ZSdsbCByZW5kZXIgd2l0aCBhIGRpZmZlcmVudCBzaGFkZXIuXG4gICAgICAgICAgICBjb25zdCBpc0NpcmNsZSA9IGJveC5yYWRpdXMgPiAwO1xuICAgICAgICAgICAgdGhpcy5hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRpY2VzKHgxLCB5MSwgeDIsIHkyLCBpc0NpcmNsZSA/XG4gICAgICAgICAgICAgICAgKGlzVGV4dCA/IHRoaXMudGV4dENvbGxpc2lvbkNpcmNsZSA6IHRoaXMuaWNvbkNvbGxpc2lvbkNpcmNsZSkgOiAoaXNUZXh0ID8gdGhpcy50ZXh0Q29sbGlzaW9uQm94IDogdGhpcy5pY29uQ29sbGlzaW9uQm94KSxcbiAgICAgICAgICAgICAgICBib3guYW5jaG9yUG9pbnQsIHN5bWJvbEluc3RhbmNlLCBpc0NpcmNsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycygpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3ltYm9sSW5zdGFuY2UudGV4dEJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLnRleHRCb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LCBzeW1ib2xJbnN0YW5jZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3ltYm9sSW5zdGFuY2UuaWNvbkJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLmljb25Cb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZXNlIGZsYXQgYXJyYXlzIGFyZSBtZWFudCB0byBiZSBxdWlja2VyIHRvIGl0ZXJhdGUgb3ZlciB0aGFuIHRoZSBzb3VyY2VcbiAgICAvLyBDb2xsaXNpb25Cb3hBcnJheVxuICAgIF9kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzRm9yU3ltYm9sKGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSwgdGV4dFN0YXJ0SW5kZXg6IG51bWJlciwgdGV4dEVuZEluZGV4OiBudW1iZXIsIHZlcnRpY2FsVGV4dFN0YXJ0SW5kZXg6IG51bWJlciwgdmVydGljYWxUZXh0RW5kSW5kZXg6IG51bWJlciwgaWNvblN0YXJ0SW5kZXg6IG51bWJlciwgaWNvbkVuZEluZGV4OiBudW1iZXIpOiBDb2xsaXNpb25BcnJheXMge1xuICAgICAgICBjb25zdCBjb2xsaXNpb25BcnJheXMgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgayA9IHRleHRTdGFydEluZGV4OyBrIDwgdGV4dEVuZEluZGV4OyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJveDogQ29sbGlzaW9uQm94ID0gKGNvbGxpc2lvbkJveEFycmF5LmdldChrKTogYW55KTtcbiAgICAgICAgICAgIGlmIChib3gucmFkaXVzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnRleHRCb3ggPSB7eDE6IGJveC54MSwgeTE6IGJveC55MSwgeDI6IGJveC54MiwgeTI6IGJveC55MiwgYW5jaG9yUG9pbnRYOiBib3guYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFk6IGJveC5hbmNob3JQb2ludFl9O1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4ID0gYm94LmZlYXR1cmVJbmRleDtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gT25seSBvbmUgYm94IGFsbG93ZWQgcGVyIGluc3RhbmNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghY29sbGlzaW9uQXJyYXlzLnRleHRDaXJjbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy50ZXh0Q2lyY2xlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCA9IGJveC5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZWQgPSAxOyAvLyBNYXkgYmUgdXBkYXRlZCBhdCBjb2xsaXNpb24gZGV0ZWN0aW9uIHRpbWVcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudGV4dENpcmNsZXMucHVzaChib3guYW5jaG9yUG9pbnRYLCBib3guYW5jaG9yUG9pbnRZLCBib3gucmFkaXVzLCBib3guc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yLCB1c2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrID0gdmVydGljYWxUZXh0U3RhcnRJbmRleDsgayA8IHZlcnRpY2FsVGV4dEVuZEluZGV4OyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJveDogQ29sbGlzaW9uQm94ID0gKGNvbGxpc2lvbkJveEFycmF5LmdldChrKTogYW55KTtcbiAgICAgICAgICAgIGlmIChib3gucmFkaXVzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveCA9IHt4MTogYm94LngxLCB5MTogYm94LnkxLCB4MjogYm94LngyLCB5MjogYm94LnkyLCBhbmNob3JQb2ludFg6IGJveC5hbmNob3JQb2ludFgsIGFuY2hvclBvaW50WTogYm94LmFuY2hvclBvaW50WX07XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCA9IGJveC5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIE9ubHkgb25lIGJveCBhbGxvd2VkIHBlciBpbnN0YW5jZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGsgPSBpY29uU3RhcnRJbmRleDsgayA8IGljb25FbmRJbmRleDsgaysrKSB7XG4gICAgICAgICAgICAvLyBBbiBpY29uIGNhbiBvbmx5IGhhdmUgb25lIGJveCBub3csIHNvIHRoaXMgaW5kZXhpbmcgaXMgYSBiaXQgdmVzdGlnaWFsLi4uXG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9IChjb2xsaXNpb25Cb3hBcnJheS5nZXQoayk6IGFueSk7XG4gICAgICAgICAgICBpZiAoYm94LnJhZGl1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy5pY29uQm94ID0ge3gxOiBib3gueDEsIHkxOiBib3gueTEsIHgyOiBib3gueDIsIHkyOiBib3gueTIsIGFuY2hvclBvaW50WDogYm94LmFuY2hvclBvaW50WCwgYW5jaG9yUG9pbnRZOiBib3guYW5jaG9yUG9pbnRZfTtcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMuaWNvbkZlYXR1cmVJbmRleCA9IGJveC5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIE9ubHkgb25lIGJveCBhbGxvd2VkIHBlciBpbnN0YW5jZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsaXNpb25BcnJheXM7XG4gICAgfVxuXG4gICAgZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25BcnJheXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkFycmF5cy5wdXNoKHRoaXMuX2Rlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXNGb3JTeW1ib2woXG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudGV4dEJveEVuZEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxUZXh0Qm94RW5kSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuaWNvbkJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuaWNvbkJveEVuZEluZGV4XG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1RleHREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzSWNvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dENvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pY29uQ29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzVGV4dENvbGxpc2lvbkNpcmNsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRDb2xsaXNpb25DaXJjbGUuc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNJY29uQ29sbGlzaW9uQ2lyY2xlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvbkNvbGxpc2lvbkNpcmNsZS5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGFkZEluZGljZXNGb3JQbGFjZWRUZXh0U3ltYm9sKHBsYWNlZFRleHRTeW1ib2xJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlZFN5bWJvbCA9IHRoaXMudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQocGxhY2VkVGV4dFN5bWJvbEluZGV4KTtcblxuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHBsYWNlZFN5bWJvbC52ZXJ0ZXhTdGFydEluZGV4ICsgcGxhY2VkU3ltYm9sLm51bUdseXBocyAqIDQ7XG4gICAgICAgIGZvciAobGV0IHZlcnRleEluZGV4ID0gcGxhY2VkU3ltYm9sLnZlcnRleFN0YXJ0SW5kZXg7IHZlcnRleEluZGV4IDwgZW5kSW5kZXg7IHZlcnRleEluZGV4ICs9IDQpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHZlcnRleEluZGV4LCB2ZXJ0ZXhJbmRleCArIDEsIHZlcnRleEluZGV4ICsgMik7XG4gICAgICAgICAgICB0aGlzLnRleHQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh2ZXJ0ZXhJbmRleCArIDEsIHZlcnRleEluZGV4ICsgMiwgdmVydGV4SW5kZXggKyAzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNvcnRlZFN5bWJvbEluZGV4ZXMoYW5nbGU6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5zb3J0ZWRBbmdsZSA9PT0gYW5nbGUgJiYgdGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgY29uc3QgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICBjb25zdCByb3RhdGVkWXMgPSBbXTtcbiAgICAgICAgY29uc3QgZmVhdHVyZUluZGV4ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChpKTtcbiAgICAgICAgICAgIHJvdGF0ZWRZcy5wdXNoKE1hdGgucm91bmQoc2luICogc3ltYm9sSW5zdGFuY2UuYW5jaG9yWCArIGNvcyAqIHN5bWJvbEluc3RhbmNlLmFuY2hvclkpIHwgMCk7XG4gICAgICAgICAgICBmZWF0dXJlSW5kZXhlcy5wdXNoKHN5bWJvbEluc3RhbmNlLmZlYXR1cmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQuc29ydCgoYUluZGV4LCBiSW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAocm90YXRlZFlzW2FJbmRleF0gLSByb3RhdGVkWXNbYkluZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAoZmVhdHVyZUluZGV4ZXNbYkluZGV4XSAtIGZlYXR1cmVJbmRleGVzW2FJbmRleF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHNvcnRGZWF0dXJlcyhhbmdsZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5zb3J0RmVhdHVyZXNCeVkpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuc29ydGVkQW5nbGUgPT09IGFuZ2xlKSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIGN1cnJlbnQgYXBwcm9hY2ggdG8gc29ydGluZyBkb2Vzbid0IHNvcnQgYWNyb3NzIHNlZ21lbnRzIHNvIGRvbid0IHRyeS5cbiAgICAgICAgLy8gU29ydGluZyB3aXRoaW4gc2VnbWVudHMgc2VwYXJhdGVseSBzZWVtZWQgbm90IHRvIGJlIHdvcnRoIHRoZSBjb21wbGV4aXR5LlxuICAgICAgICBpZiAodGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDEgfHwgdGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDEpIHJldHVybjtcblxuICAgICAgICAvLyBJZiB0aGUgc3ltYm9scyBhcmUgYWxsb3dlZCB0byBvdmVybGFwIHNvcnQgdGhlbSBieSB0aGVpciB2ZXJ0aWNhbCBzY3JlZW4gcG9zaXRpb24uXG4gICAgICAgIC8vIFRoZSBpbmRleCBhcnJheSBidWZmZXIgaXMgcmV3cml0dGVuIHRvIHJlZmVyZW5jZSB0aGUgKHVuY2hhbmdlZCkgdmVydGljZXMgaW4gdGhlXG4gICAgICAgIC8vIHNvcnRlZCBvcmRlci5cblxuICAgICAgICAvLyBUbyBhdm9pZCBzb3J0aW5nIHRoZSBhY3R1YWwgc3ltYm9sSW5zdGFuY2UgYXJyYXkgd2Ugc29ydCBhbiBhcnJheSBvZiBpbmRleGVzLlxuICAgICAgICB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcyA9IHRoaXMuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyhhbmdsZSk7XG4gICAgICAgIHRoaXMuc29ydGVkQW5nbGUgPSBhbmdsZTtcblxuICAgICAgICB0aGlzLnRleHQuaW5kZXhBcnJheS5jbGVhcigpO1xuICAgICAgICB0aGlzLmljb24uaW5kZXhBcnJheS5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMuZmVhdHVyZVNvcnRPcmRlciA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVTb3J0T3JkZXIucHVzaChzeW1ib2xJbnN0YW5jZS5mZWF0dXJlSW5kZXgpO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgICAgIF0uZm9yRWFjaCgoaW5kZXgsIGksIGFycmF5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhZGQgYSBnaXZlbiBpbmRleCB0aGUgZmlyc3QgdGltZSBpdCBzaG93cyB1cCxcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBkdXBsaWNhdGUgb3BhY2l0eSBlbnRyaWVzIHdoZW4gbXVsdGlwbGUganVzdGlmaWNhdGlvbnNcbiAgICAgICAgICAgICAgICAvLyBzaGFyZSB0aGUgc2FtZSBnbHlwaHMuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgYXJyYXkuaW5kZXhPZihpbmRleCkgPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkVGV4dFN5bWJvbChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkVGV4dFN5bWJvbChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBsYWNlZEljb24gPSB0aGlzLmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKHBsYWNlZEljb24ubnVtR2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGV4SW5kZXggPSBwbGFjZWRJY29uLnZlcnRleFN0YXJ0SW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5pY29uLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodmVydGV4SW5kZXgsIHZlcnRleEluZGV4ICsgMSwgdmVydGV4SW5kZXggKyAyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmljb24uaW5kZXhBcnJheS5lbXBsYWNlQmFjayh2ZXJ0ZXhJbmRleCArIDEsIHZlcnRleEluZGV4ICsgMiwgdmVydGV4SW5kZXggKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRleHQuaW5kZXhCdWZmZXIpIHRoaXMudGV4dC5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMudGV4dC5pbmRleEFycmF5KTtcbiAgICAgICAgaWYgKHRoaXMuaWNvbi5pbmRleEJ1ZmZlcikgdGhpcy5pY29uLmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5pY29uLmluZGV4QXJyYXkpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1N5bWJvbEJ1Y2tldCcsIFN5bWJvbEJ1Y2tldCwge1xuICAgIG9taXQ6IFsnbGF5ZXJzJywgJ2NvbGxpc2lvbkJveEFycmF5JywgJ2ZlYXR1cmVzJywgJ2NvbXBhcmVUZXh0J11cbn0pO1xuXG4vLyB0aGlzIGNvbnN0YW50IGlzIGJhc2VkIG9uIHRoZSBzaXplIG9mIFN0cnVjdEFycmF5IGluZGV4ZXMgdXNlZCBpbiBhIHN5bWJvbFxuLy8gYnVja2V0LS1uYW1lbHksIGdseXBoT2Zmc2V0QXJyYXlTdGFydFxuLy8gZWcgdGhlIG1heCB2YWxpZCBVSW50MTYgaXMgNjUsNTM1XG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI5MDcgZm9yIG1vdGl2YXRpb25cbi8vIGxpbmVTdGFydEluZGV4IGFuZCB0ZXh0Qm94U3RhcnRJbmRleCBjb3VsZCBwb3RlbnRpYWxseSBiZSBjb25jZXJuc1xuLy8gYnV0IHdlIGV4cGVjdCB0aGVyZSB0byBiZSBtYW55IGZld2VyIGJveGVzL2xpbmVzIHRoYW4gZ2x5cGhzXG5TeW1ib2xCdWNrZXQuTUFYX0dMWVBIUyA9IDY1NTM1O1xuXG5TeW1ib2xCdWNrZXQuYWRkRHluYW1pY0F0dHJpYnV0ZXMgPSBhZGREeW5hbWljQXR0cmlidXRlcztcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sQnVja2V0O1xuZXhwb3J0IHthZGREeW5hbWljQXR0cmlidXRlc307XG4iLCIvLyBAZmxvd1xuZXhwb3J0IGRlZmF1bHQgcmVzb2x2ZVRva2VucztcblxuLyoqXG4gKiBSZXBsYWNlIHRva2VucyBpbiBhIHN0cmluZyB0ZW1wbGF0ZSB3aXRoIHZhbHVlcyBpbiBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyBhIGtleS92YWx1ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0b2tlbnMgYW5kIHJlcGxhY2VtZW50c1xuICogQHBhcmFtIHRleHQgdGhlIHRlbXBsYXRlIHN0cmluZ1xuICogQHJldHVybnMgdGhlIHRlbXBsYXRlIHdpdGggdG9rZW5zIHJlcGxhY2VkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXNvbHZlVG9rZW5zKHByb3BlcnRpZXM6IHsrW3N0cmluZ106IG1peGVkfSwgdGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC97KFtee31dKyl9L2csIChtYXRjaCwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGtleSBpbiBwcm9wZXJ0aWVzID8gU3RyaW5nKHByb3BlcnRpZXNba2V5XSkgOiAnJztcbiAgICB9KTtcbn1cbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB7XG4gICAgQ29sb3JUeXBlXG59IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIExheW91dFByb3BzID0ge3xcbiAgICBcInN5bWJvbC1wbGFjZW1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJwb2ludFwiIHwgXCJsaW5lXCIgfCBcImxpbmUtY2VudGVyXCI+LFxuICAgIFwic3ltYm9sLXNwYWNpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInN5bWJvbC1hdm9pZC1lZGdlc1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcInN5bWJvbC1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInN5bWJvbC16LW9yZGVyXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwiYXV0b1wiIHwgXCJ2aWV3cG9ydC15XCIgfCBcInNvdXJjZVwiPixcbiAgICBcImljb24tYWxsb3ctb3ZlcmxhcFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImljb24taWdub3JlLXBsYWNlbWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImljb24tb3B0aW9uYWxcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiIHwgXCJhdXRvXCI+LFxuICAgIFwiaWNvbi1zaXplXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi10ZXh0LWZpdFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm5vbmVcIiB8IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgfCBcImJvdGhcIj4sXG4gICAgXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiaWNvbi1pbWFnZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJpY29uLXJvdGF0ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24tcGFkZGluZ1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi1rZWVwLXVwcmlnaHRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJpY29uLW9mZnNldFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJpY29uLWFuY2hvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJjZW50ZXJcIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcInRvcC1sZWZ0XCIgfCBcInRvcC1yaWdodFwiIHwgXCJib3R0b20tbGVmdFwiIHwgXCJib3R0b20tcmlnaHRcIj4sXG4gICAgXCJpY29uLXBpdGNoLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiIHwgXCJhdXRvXCI+LFxuICAgIFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIiB8IFwiYXV0b1wiPixcbiAgICBcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCIgfCBcImF1dG9cIj4sXG4gICAgXCJ0ZXh0LWZpZWxkXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxGb3JtYXR0ZWQ+LFxuICAgIFwidGV4dC1mb250XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxBcnJheTxzdHJpbmc+PixcbiAgICBcInRleHQtc2l6ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtbWF4LXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1saW5lLWhlaWdodFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1sZXR0ZXItc3BhY2luZ1wiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtanVzdGlmeVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJhdXRvXCIgfCBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCI+LFxuICAgIFwidGV4dC1yYWRpYWwtb2Zmc2V0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC12YXJpYWJsZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8QXJyYXk8XCJjZW50ZXJcIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcInRvcC1sZWZ0XCIgfCBcInRvcC1yaWdodFwiIHwgXCJib3R0b20tbGVmdFwiIHwgXCJib3R0b20tcmlnaHRcIj4+LFxuICAgIFwidGV4dC1hbmNob3JcIjogRGF0YURyaXZlblByb3BlcnR5PFwiY2VudGVyXCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiIHwgXCJ0b3AtbGVmdFwiIHwgXCJ0b3AtcmlnaHRcIiB8IFwiYm90dG9tLWxlZnRcIiB8IFwiYm90dG9tLXJpZ2h0XCI+LFxuICAgIFwidGV4dC1tYXgtYW5nbGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtd3JpdGluZy1tb2RlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PEFycmF5PFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiPj4sXG4gICAgXCJ0ZXh0LXJvdGF0ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtcGFkZGluZ1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1rZWVwLXVwcmlnaHRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJ0ZXh0LXRyYW5zZm9ybVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJub25lXCIgfCBcInVwcGVyY2FzZVwiIHwgXCJsb3dlcmNhc2VcIj4sXG4gICAgXCJ0ZXh0LW9mZnNldFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJ0ZXh0LW9wdGlvbmFsXCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxufH07XG5cbmNvbnN0IGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJzeW1ib2wtcGxhY2VtZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLXBsYWNlbWVudFwiXSksXG4gICAgXCJzeW1ib2wtc3BhY2luZ1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC1zcGFjaW5nXCJdKSxcbiAgICBcInN5bWJvbC1hdm9pZC1lZGdlc1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC1hdm9pZC1lZGdlc1wiXSksXG4gICAgXCJzeW1ib2wtc29ydC1rZXlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLXNvcnQta2V5XCJdKSxcbiAgICBcInN5bWJvbC16LW9yZGVyXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLXotb3JkZXJcIl0pLFxuICAgIFwiaWNvbi1hbGxvdy1vdmVybGFwXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1hbGxvdy1vdmVybGFwXCJdKSxcbiAgICBcImljb24taWdub3JlLXBsYWNlbWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24taWdub3JlLXBsYWNlbWVudFwiXSksXG4gICAgXCJpY29uLW9wdGlvbmFsXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1vcHRpb25hbFwiXSksXG4gICAgXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tcm90YXRpb24tYWxpZ25tZW50XCJdKSxcbiAgICBcImljb24tc2l6ZVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXNpemVcIl0pLFxuICAgIFwiaWNvbi10ZXh0LWZpdFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tdGV4dC1maXRcIl0pLFxuICAgIFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCJdKSxcbiAgICBcImljb24taW1hZ2VcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1pbWFnZVwiXSksXG4gICAgXCJpY29uLXJvdGF0ZVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXJvdGF0ZVwiXSksXG4gICAgXCJpY29uLXBhZGRpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXBhZGRpbmdcIl0pLFxuICAgIFwiaWNvbi1rZWVwLXVwcmlnaHRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLWtlZXAtdXByaWdodFwiXSksXG4gICAgXCJpY29uLW9mZnNldFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLW9mZnNldFwiXSksXG4gICAgXCJpY29uLWFuY2hvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLWFuY2hvclwiXSksXG4gICAgXCJpY29uLXBpdGNoLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tcGl0Y2gtYWxpZ25tZW50XCJdKSxcbiAgICBcInRleHQtcGl0Y2gtYWxpZ25tZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1waXRjaC1hbGlnbm1lbnRcIl0pLFxuICAgIFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiXSksXG4gICAgXCJ0ZXh0LWZpZWxkXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtZmllbGRcIl0pLFxuICAgIFwidGV4dC1mb250XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtZm9udFwiXSksXG4gICAgXCJ0ZXh0LXNpemVcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1zaXplXCJdKSxcbiAgICBcInRleHQtbWF4LXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtbWF4LXdpZHRoXCJdKSxcbiAgICBcInRleHQtbGluZS1oZWlnaHRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWxpbmUtaGVpZ2h0XCJdKSxcbiAgICBcInRleHQtbGV0dGVyLXNwYWNpbmdcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1sZXR0ZXItc3BhY2luZ1wiXSksXG4gICAgXCJ0ZXh0LWp1c3RpZnlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1qdXN0aWZ5XCJdKSxcbiAgICBcInRleHQtcmFkaWFsLW9mZnNldFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXJhZGlhbC1vZmZzZXRcIl0pLFxuICAgIFwidGV4dC12YXJpYWJsZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXZhcmlhYmxlLWFuY2hvclwiXSksXG4gICAgXCJ0ZXh0LWFuY2hvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWFuY2hvclwiXSksXG4gICAgXCJ0ZXh0LW1heC1hbmdsZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtbWF4LWFuZ2xlXCJdKSxcbiAgICBcInRleHQtd3JpdGluZy1tb2RlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC13cml0aW5nLW1vZGVcIl0pLFxuICAgIFwidGV4dC1yb3RhdGVcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1yb3RhdGVcIl0pLFxuICAgIFwidGV4dC1wYWRkaW5nXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1wYWRkaW5nXCJdKSxcbiAgICBcInRleHQta2VlcC11cHJpZ2h0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1rZWVwLXVwcmlnaHRcIl0pLFxuICAgIFwidGV4dC10cmFuc2Zvcm1cIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC10cmFuc2Zvcm1cIl0pLFxuICAgIFwidGV4dC1vZmZzZXRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1vZmZzZXRcIl0pLFxuICAgIFwidGV4dC1hbGxvdy1vdmVybGFwXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1hbGxvdy1vdmVybGFwXCJdKSxcbiAgICBcInRleHQtaWdub3JlLXBsYWNlbWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtaWdub3JlLXBsYWNlbWVudFwiXSksXG4gICAgXCJ0ZXh0LW9wdGlvbmFsXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1vcHRpb25hbFwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJpY29uLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJpY29uLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJpY29uLWhhbG8tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImljb24taGFsby13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24taGFsby1ibHVyXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJpY29uLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJ0ZXh0LW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJ0ZXh0LWhhbG8tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcInRleHQtaGFsby13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtaGFsby1ibHVyXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJpY29uLW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLW9wYWNpdHlcIl0pLFxuICAgIFwiaWNvbi1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24tY29sb3JcIl0pLFxuICAgIFwiaWNvbi1oYWxvLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi1oYWxvLWNvbG9yXCJdKSxcbiAgICBcImljb24taGFsby13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24taGFsby13aWR0aFwiXSksXG4gICAgXCJpY29uLWhhbG8tYmx1clwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24taGFsby1ibHVyXCJdKSxcbiAgICBcImljb24tdHJhbnNsYXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLXRyYW5zbGF0ZVwiXSksXG4gICAgXCJpY29uLXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24tdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJ0ZXh0LW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LW9wYWNpdHlcIl0pLFxuICAgIFwidGV4dC1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtY29sb3JcIl0sIHsgcnVudGltZVR5cGU6IENvbG9yVHlwZSwgZ2V0T3ZlcnJpZGU6IChvKSA9PiBvLnRleHRDb2xvciwgaGFzT3ZlcnJpZGU6IChvKSA9PiAhIW8udGV4dENvbG9yIH0pLFxuICAgIFwidGV4dC1oYWxvLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC1oYWxvLWNvbG9yXCJdKSxcbiAgICBcInRleHQtaGFsby13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtaGFsby13aWR0aFwiXSksXG4gICAgXCJ0ZXh0LWhhbG8tYmx1clwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtaGFsby1ibHVyXCJdKSxcbiAgICBcInRleHQtdHJhbnNsYXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LXRyYW5zbGF0ZVwiXSksXG4gICAgXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtdHJhbnNsYXRlLWFuY2hvclwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtab29tQ29uc3RhbnRFeHByZXNzaW9ufSBmcm9tICcuLi8uLi9leHByZXNzaW9uJztcbmltcG9ydCB7TnVsbFR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7UG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuLi8uLi8uLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdFNlY3Rpb25PdmVycmlkZTxUPiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgZGVmYXVsdFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD47XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZhdWx0VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPikge1xuICAgICAgICBhc3NlcnQoZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcyAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy50eXBlID0gZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcyA/IGRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5vdmVycmlkZXMucnVudGltZVR5cGUgOiBOdWxsVHlwZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBpZiAoY3R4LmZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJyaWRlcyA9IHRoaXMuZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcztcbiAgICAgICAgICAgIGlmIChvdmVycmlkZXMgJiYgb3ZlcnJpZGVzLmhhc092ZXJyaWRlKGN0eC5mb3JtYXR0ZWRTZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdmVycmlkZXMuZ2V0T3ZlcnJpZGUoY3R4LmZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN0eC5mZWF0dXJlICYmIGN0eC5mZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZS5ldmFsdWF0ZShjdHguZmVhdHVyZSwgY3R4LmZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi5kZWZhdWx0O1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZS5pc0NvbnN0YW50KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cHI6IFpvb21Db25zdGFudEV4cHJlc3Npb248J3NvdXJjZSc+ID0gKCh0aGlzLmRlZmF1bHRWYWx1ZS52YWx1ZSk6IGFueSk7XG4gICAgICAgICAgICBmbihleHByLl9zdHlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYW5ub3QgYmUgc3RhdGljYWxseSBldmFsdWF0ZWQsIGFzIHRoZSBvdXRwdXQgZGVwZW5kcyBvbiB0aGUgZXZhbHVhdGlvbiBjb250ZXh0LlxuICAgIHBvc3NpYmxlT3V0cHV0cygpOiBBcnJheTxWYWx1ZSB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5yZWdpc3RlcignRm9ybWF0U2VjdGlvbk92ZXJyaWRlJywgRm9ybWF0U2VjdGlvbk92ZXJyaWRlLCB7b21pdDogWydkZWZhdWx0VmFsdWUnXX0pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgU3ltYm9sQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHJlc29sdmVUb2tlbnMgZnJvbSAnLi4vLi4vdXRpbC9yZXNvbHZlX3Rva2Vucyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL3N5bWJvbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHtcbiAgICBUcmFuc2l0aW9uYWJsZSxcbiAgICBUcmFuc2l0aW9uaW5nLFxuICAgIExheW91dCxcbiAgICBQb3NzaWJseUV2YWx1YXRlZCxcbiAgICBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUsXG4gICAgUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHtcbiAgICBpc0V4cHJlc3Npb24sXG4gICAgU3R5bGVFeHByZXNzaW9uLFxuICAgIFpvb21Db25zdGFudEV4cHJlc3Npb24sXG4gICAgWm9vbURlcGVuZGVudEV4cHJlc3Npb25cbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcblxuaW1wb3J0IHR5cGUge0J1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtMYXlvdXRQcm9wcywgUGFpbnRQcm9wc30gZnJvbSAnLi9zeW1ib2xfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZSwgU291cmNlRXhwcmVzc2lvbiwgQ29tcG9zaXRlRXhwcmVzc2lvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZXhwcmVzc2lvbic7XG5pbXBvcnQge0Zvcm1hdHRlZFR5cGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcyc7XG5pbXBvcnQge3R5cGVPZn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3ZhbHVlcyc7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IEZvcm1hdFNlY3Rpb25PdmVycmlkZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvZm9ybWF0X3NlY3Rpb25fb3ZlcnJpZGUnO1xuaW1wb3J0IEZvcm1hdEV4cHJlc3Npb24gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2Zvcm1hdCc7XG5pbXBvcnQgTGl0ZXJhbCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbGl0ZXJhbCc7XG5cbmNsYXNzIFN5bWJvbFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHN1cGVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgnaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgIT09ICdwb2ludCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWydpY29uLXJvdGF0aW9uLWFsaWdubWVudCddID0gJ21hcCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ2ljb24tcm90YXRpb24tYWxpZ25tZW50J10gPSAndmlld3BvcnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgIT09ICdwb2ludCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWyd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCddID0gJ21hcCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtcm90YXRpb24tYWxpZ25tZW50J10gPSAndmlld3BvcnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdW5zcGVjaWZpZWQsIGAqLXBpdGNoLWFsaWdubWVudGAgaW5oZXJpdHMgYCotcm90YXRpb24tYWxpZ25tZW50YFxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtcGl0Y2gtYWxpZ25tZW50J10gPSB0aGlzLmxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgnaWNvbi1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWydpY29uLXBpdGNoLWFsaWdubWVudCddID0gdGhpcy5sYXlvdXQuZ2V0KCdpY29uLXJvdGF0aW9uLWFsaWdubWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpID09PSAncG9pbnQnKSB7XG4gICAgICAgICAgICBjb25zdCB3cml0aW5nTW9kZXMgPSB0aGlzLmxheW91dC5nZXQoJ3RleHQtd3JpdGluZy1tb2RlJyk7XG4gICAgICAgICAgICBpZiAod3JpdGluZ01vZGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZXMsIHByZXNlcnZpbmcgb3JkZXJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWR1cGVkID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtIG9mIHdyaXRpbmdNb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVkdXBlZC5pbmRleE9mKG0pIDwgMCkgZGVkdXBlZC5wdXNoKG0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWyd0ZXh0LXdyaXRpbmctbW9kZSddID0gZGVkdXBlZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1sndGV4dC13cml0aW5nLW1vZGUnXSA9IFsnaG9yaXpvbnRhbCddO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0UGFpbnRPdmVycmlkZXMoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMobmFtZTogKiwgZmVhdHVyZTogRmVhdHVyZSwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5sYXlvdXQuZ2V0KG5hbWUpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICBjb25zdCB1bmV2YWx1YXRlZCA9IHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXNbbmFtZV07XG4gICAgICAgIGlmICghdW5ldmFsdWF0ZWQuaXNEYXRhRHJpdmVuKCkgJiYgIWlzRXhwcmVzc2lvbih1bmV2YWx1YXRlZC52YWx1ZSkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlVG9rZW5zKGZlYXR1cmUucHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNyZWF0ZUJ1Y2tldChwYXJhbWV0ZXJzOiBCdWNrZXRQYXJhbWV0ZXJzPCo+KSB7XG4gICAgICAgIHJldHVybiBuZXcgU3ltYm9sQnVja2V0KHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHF1ZXJ5UmFkaXVzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUoKTogYm9vbGVhbiB7XG4gICAgICAgIGFzc2VydChmYWxzZSk7IC8vIFNob3VsZCB0YWtlIGEgZGlmZmVyZW50IHBhdGggaW4gRmVhdHVyZUluZGV4XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBfc2V0UGFpbnRPdmVycmlkZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3Qgb3ZlcnJpZGFibGUgb2YgcHJvcGVydGllcy5wYWludC5vdmVycmlkYWJsZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghU3ltYm9sU3R5bGVMYXllci5oYXNQYWludE92ZXJyaWRlKHRoaXMubGF5b3V0LCBvdmVycmlkYWJsZSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG92ZXJyaWRlbiA9IHRoaXMucGFpbnQuZ2V0KG92ZXJyaWRhYmxlKTtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJyaWRlID0gbmV3IEZvcm1hdFNlY3Rpb25PdmVycmlkZShvdmVycmlkZW4pO1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVFeHByZXNzaW9uID0gbmV3IFN0eWxlRXhwcmVzc2lvbihvdmVycmlkZSwgb3ZlcnJpZGVuLnByb3BlcnR5LnNwZWNpZmljYXRpb24pO1xuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBudWxsO1xuICAgICAgICAgICAgaWYgKG92ZXJyaWRlbi52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnIHx8IG92ZXJyaWRlbi52YWx1ZS5raW5kID09PSAnc291cmNlJykge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSAobmV3IFpvb21Db25zdGFudEV4cHJlc3Npb24oJ3NvdXJjZScsIHN0eWxlRXhwcmVzc2lvbik6IFNvdXJjZUV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gKG5ldyBab29tRGVwZW5kZW50RXhwcmVzc2lvbignY29tcG9zaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVuLnZhbHVlLnpvb21TdG9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZW4udmFsdWUuX2ludGVycG9sYXRpb25UeXBlKTogQ29tcG9zaXRlRXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhaW50Ll92YWx1ZXNbb3ZlcnJpZGFibGVdID0gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZShvdmVycmlkZW4ucHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVuLnBhcmFtZXRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZTxULCBSPihuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+LCBuZXdWYWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0IHx8IG9sZFZhbHVlLmlzRGF0YURyaXZlbigpIHx8IG5ld1ZhbHVlLmlzRGF0YURyaXZlbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN5bWJvbFN0eWxlTGF5ZXIuaGFzUGFpbnRPdmVycmlkZSh0aGlzLmxheW91dCwgbmFtZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGhhc1BhaW50T3ZlcnJpZGUobGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz4sIHByb3BlcnR5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRleHRGaWVsZCA9IGxheW91dC5nZXQoJ3RleHQtZmllbGQnKTtcbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0aWVzLnBhaW50LnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgbGV0IGhhc092ZXJyaWRlcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGNoZWNrU2VjdGlvbnMgPSAoc2VjdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5vdmVycmlkZXMgJiYgcHJvcGVydHkub3ZlcnJpZGVzLmhhc092ZXJyaWRlKHNlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc092ZXJyaWRlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRleHRGaWVsZC52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnICYmIHRleHRGaWVsZC52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgY2hlY2tTZWN0aW9ucyh0ZXh0RmllbGQudmFsdWUudmFsdWUuc2VjdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRleHRGaWVsZC52YWx1ZS5raW5kID09PSAnc291cmNlJykge1xuXG4gICAgICAgICAgICBjb25zdCBjaGVja0V4cHJlc3Npb24gPSAoZXhwcmVzc2lvbjogRXhwcmVzc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPdmVycmlkZXMpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgTGl0ZXJhbCAmJiB0eXBlT2YoZXhwcmVzc2lvbi52YWx1ZSkgPT09IEZvcm1hdHRlZFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkOiBGb3JtYXR0ZWQgPSAoKGV4cHJlc3Npb24udmFsdWUpOiBhbnkpO1xuICAgICAgICAgICAgICAgICAgICBjaGVja1NlY3Rpb25zKGZvcm1hdHRlZC5zZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgRm9ybWF0RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBjaGVja1NlY3Rpb25zKGV4cHJlc3Npb24uc2VjdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uZWFjaENoaWxkKGNoZWNrRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZXhwcjogWm9vbUNvbnN0YW50RXhwcmVzc2lvbjwnc291cmNlJz4gPSAoKHRleHRGaWVsZC52YWx1ZSk6IGFueSk7XG4gICAgICAgICAgICBpZiAoZXhwci5fc3R5bGVFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tFeHByZXNzaW9uKGV4cHIuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoYXNPdmVycmlkZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGhhc1BhaW50T3ZlcnJpZGVzKGxheW91dDogUG9zc2libHlFdmFsdWF0ZWQ8TGF5b3V0UHJvcHM+KTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAoY29uc3Qgb3ZlcnJpZGFibGUgb2YgcHJvcGVydGllcy5wYWludC5vdmVycmlkYWJsZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChTeW1ib2xTdHlsZUxheWVyLmhhc1BhaW50T3ZlcnJpZGUobGF5b3V0LCBvdmVycmlkYWJsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2xTdHlsZUxheWVyO1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PENvbG9yPixcbiAgICBcImJhY2tncm91bmQtcGF0dGVyblwiOiBDcm9zc0ZhZGVkUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJiYWNrZ3JvdW5kLW9wYWNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImJhY2tncm91bmQtY29sb3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2JhY2tncm91bmRcIl1bXCJiYWNrZ3JvdW5kLWNvbG9yXCJdKSxcbiAgICBcImJhY2tncm91bmQtcGF0dGVyblwiOiBuZXcgQ3Jvc3NGYWRlZFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2JhY2tncm91bmRcIl1bXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIl0pLFxuICAgIFwiYmFja2dyb3VuZC1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9iYWNrZ3JvdW5kXCJdW1wiYmFja2dyb3VuZC1vcGFjaXR5XCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vYmFja2dyb3VuZF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge1BhaW50UHJvcHN9IGZyb20gJy4vYmFja2dyb3VuZF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBCYWNrZ3JvdW5kU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmFja2dyb3VuZFN0eWxlTGF5ZXI7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcInJhc3Rlci1vcGFjaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItaHVlLXJvdGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwicmFzdGVyLWJyaWdodG5lc3MtbWluXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1zYXR1cmF0aW9uXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItY29udHJhc3RcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1yZXNhbXBsaW5nXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibGluZWFyXCIgfCBcIm5lYXJlc3RcIj4sXG4gICAgXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwicmFzdGVyLW9wYWNpdHlcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1vcGFjaXR5XCJdKSxcbiAgICBcInJhc3Rlci1odWUtcm90YXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItaHVlLXJvdGF0ZVwiXSksXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiXSksXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1icmlnaHRuZXNzLW1heFwiXSksXG4gICAgXCJyYXN0ZXItc2F0dXJhdGlvblwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLXNhdHVyYXRpb25cIl0pLFxuICAgIFwicmFzdGVyLWNvbnRyYXN0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItY29udHJhc3RcIl0pLFxuICAgIFwicmFzdGVyLXJlc2FtcGxpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1yZXNhbXBsaW5nXCJdKSxcbiAgICBcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL3Jhc3Rlcl9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge1BhaW50UHJvcHN9IGZyb20gJy4vcmFzdGVyX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFJhc3RlclN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vLi4vdWkvbWFwJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxudHlwZSBDdXN0b21SZW5kZXJNZXRob2QgPSAoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgbWF0cml4OiBBcnJheTxudW1iZXI+KSA9PiB2b2lkO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY3VzdG9tIHN0eWxlIGxheWVycy4gVGhpcyBpcyBhIHNwZWNpZmljYXRpb24gZm9yXG4gKiBpbXBsZW1lbnRlcnMgdG8gbW9kZWw6IGl0IGlzIG5vdCBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogQ3VzdG9tIGxheWVycyBhbGxvdyBhIHVzZXIgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gdGhlIG1hcCdzIEdMIGNvbnRleHQgdXNpbmcgdGhlIG1hcCdzIGNhbWVyYS5cbiAqIFRoZXNlIGxheWVycyBjYW4gYmUgYWRkZWQgYmV0d2VlbiBhbnkgcmVndWxhciBsYXllcnMgdXNpbmcge0BsaW5rIE1hcCNhZGRMYXllcn0uXG4gKlxuICogQ3VzdG9tIGxheWVycyBtdXN0IGhhdmUgYSB1bmlxdWUgYGlkYCBhbmQgbXVzdCBoYXZlIHRoZSBgdHlwZWAgb2YgYFwiY3VzdG9tXCJgLlxuICogVGhleSBtdXN0IGltcGxlbWVudCBgcmVuZGVyYCBhbmQgbWF5IGltcGxlbWVudCBgcHJlcmVuZGVyYCwgYG9uQWRkYCBhbmQgYG9uUmVtb3ZlYC5cbiAqIFRoZXkgY2FuIHRyaWdnZXIgcmVuZGVyaW5nIHVzaW5nIHtAbGluayBNYXAjdHJpZ2dlclJlcGFpbnR9XG4gKiBhbmQgdGhleSBzaG91bGQgYXBwcm9wcmlhdGVseSBoYW5kbGUge0BsaW5rIE1hcC5ldmVudDp3ZWJnbGNvbnRleHRsb3N0fSBhbmRcbiAqIHtAbGluayBNYXAuZXZlbnQ6d2ViZ2xjb250ZXh0cmVzdG9yZWR9LlxuICpcbiAqIFRoZSBgcmVuZGVyaW5nTW9kZWAgcHJvcGVydHkgY29udHJvbHMgd2hldGhlciB0aGUgbGF5ZXIgaXMgdHJlYXRlZCBhcyBhIGBcIjJkXCJgIG9yIGBcIjNkXCJgIG1hcCBsYXllci4gVXNlOlxuICogLSBgXCJyZW5kZXJpbmdNb2RlXCI6IFwiM2RcImAgdG8gdXNlIHRoZSBkZXB0aCBidWZmZXIgYW5kIHNoYXJlIGl0IHdpdGggb3RoZXIgbGF5ZXJzXG4gKiAtIGBcInJlbmRlcmluZ01vZGVcIjogXCIyZFwiYCB0byBhZGQgYSBsYXllciB3aXRoIG5vIGRlcHRoLiBJZiB5b3UgbmVlZCB0byB1c2UgdGhlIGRlcHRoIGJ1ZmZlciBmb3IgYSBgXCIyZFwiYCBsYXllciB5b3UgbXVzdCB1c2UgYW4gb2Zmc2NyZWVuXG4gKiAgIGZyYW1lYnVmZmVyIGFuZCB7QGxpbmsgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UjcHJlcmVuZGVyfVxuICpcbiAqIEBpbnRlcmZhY2UgQ3VzdG9tTGF5ZXJJbnRlcmZhY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBBIHVuaXF1ZSBsYXllciBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFRoZSBsYXllcidzIHR5cGUuIE11c3QgYmUgYFwiY3VzdG9tXCJgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbmRlcmluZ01vZGUgRWl0aGVyIGBcIjJkXCJgIG9yIGBcIjNkXCJgLiBEZWZhdWx0cyB0byBgXCIyZFwiYC5cbiAqIEBleGFtcGxlXG4gKiAvLyBDdXN0b20gbGF5ZXIgaW1wbGVtZW50ZWQgYXMgRVM2IGNsYXNzXG4gKiBjbGFzcyBOdWxsSXNsYW5kTGF5ZXIge1xuICogICAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgICAgICB0aGlzLmlkID0gJ251bGwtaXNsYW5kJztcbiAqICAgICAgICAgdGhpcy50eXBlID0gJ2N1c3RvbSc7XG4gKiAgICAgICAgIHRoaXMucmVuZGVyaW5nTW9kZSA9ICcyZCc7XG4gKiAgICAgfVxuICpcbiAqICAgICBvbkFkZChtYXAsIGdsKSB7XG4gKiAgICAgICAgIGNvbnN0IHZlcnRleFNvdXJjZSA9IGBcbiAqICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuICogICAgICAgICB2b2lkIG1haW4oKSB7XG4gKiAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNCgwLjUsIDAuNSwgMC4wLCAxLjApO1xuICogICAgICAgICAgICAgZ2xfUG9pbnRTaXplID0gMjAuMDtcbiAqICAgICAgICAgfWA7XG4gKlxuICogICAgICAgICBjb25zdCBmcmFnbWVudFNvdXJjZSA9IGBcbiAqICAgICAgICAgdm9pZCBtYWluKCkge1xuICogICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApO1xuICogICAgICAgICB9YDtcbiAqXG4gKiAgICAgICAgIGNvbnN0IHZlcnRleFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhfU0hBREVSKTtcbiAqICAgICAgICAgZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U291cmNlKTtcbiAqICAgICAgICAgZ2wuY29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xuICogICAgICAgICBjb25zdCBmcmFnbWVudFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIpO1xuICogICAgICAgICBnbC5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U291cmNlKTtcbiAqICAgICAgICAgZ2wuY29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7XG4gKlxuICogICAgICAgICB0aGlzLnByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG4gKiAgICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIHZlcnRleFNoYWRlcik7XG4gKiAgICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcbiAqICAgICAgICAgZ2wubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKTtcbiAqICAgICB9XG4gKlxuICogICAgIHJlbmRlcihnbCwgbWF0cml4KSB7XG4gKiAgICAgICAgIGdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbiAqICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihnbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBcInVfbWF0cml4XCIpLCBmYWxzZSwgbWF0cml4KTtcbiAqICAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiBtYXAub24oJ2xvYWQnLCBmdW5jdGlvbigpIHtcbiAqICAgICBtYXAuYWRkTGF5ZXIobmV3IE51bGxJc2xhbmRMYXllcigpKTtcbiAqIH0pO1xuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBsYXllciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgTWFwIHdpdGgge0BsaW5rIE1hcCNhZGRMYXllcn0uIFRoaXNcbiAqIGdpdmVzIHRoZSBsYXllciBhIGNoYW5jZSB0byBpbml0aWFsaXplIGdsIHJlc291cmNlcyBhbmQgcmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uQWRkXG4gKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBNYXAgdGhpcyBjdXN0b20gbGF5ZXIgd2FzIGp1c3QgYWRkZWQgdG8uXG4gKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIGdsIGNvbnRleHQgZm9yIHRoZSBtYXAuXG4gKi9cblxuLyoqXG4gKiBPcHRpb25hbCBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGxheWVyIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgTWFwIHdpdGgge0BsaW5rIE1hcCNyZW1vdmVMYXllcn0uIFRoaXNcbiAqIGdpdmVzIHRoZSBsYXllciBhIGNoYW5jZSB0byBjbGVhbiB1cCBnbCByZXNvdXJjZXMgYW5kIGV2ZW50IGxpc3RlbmVycy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBDdXN0b21MYXllckludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwIHRoaXMgY3VzdG9tIGxheWVyIHdhcyBqdXN0IGFkZGVkIHRvLlxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBnbCBjb250ZXh0IGZvciB0aGUgbWFwLlxuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCBkdXJpbmcgYSByZW5kZXIgZnJhbWUgdG8gYWxsb3cgYSBsYXllciB0byBwcmVwYXJlIHJlc291cmNlcyBvciByZW5kZXIgaW50byBhIHRleHR1cmUuXG4gKlxuICogVGhlIGxheWVyIGNhbm5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY3VycmVudCBHTCBzdGF0ZSBhbmQgbXVzdCBiaW5kIGEgZnJhbWVidWZmZXIgYmVmb3JlIHJlbmRlcmluZy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBDdXN0b21MYXllckludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBwcmVyZW5kZXJcbiAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgbWFwJ3MgZ2wgY29udGV4dC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gbWF0cml4IFRoZSBtYXAncyBjYW1lcmEgbWF0cml4LiBJdCBwcm9qZWN0cyBzcGhlcmljYWwgbWVyY2F0b3JcbiAqIGNvb3JkaW5hdGVzIHRvIGdsIGNvb3JkaW5hdGVzLiBUaGUgbWVyY2F0b3IgY29vcmRpbmF0ZSBgWzAsIDBdYCByZXByZXNlbnRzIHRoZVxuICogdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtZXJjYXRvciB3b3JsZCBhbmQgYFsxLCAxXWAgcmVwcmVzZW50cyB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci4gV2hlblxuICogdGhlIGByZW5kZXJpbmdNb2RlYCBpcyBgXCIzZFwiYCwgdGhlIHogY29vcmRpbmF0ZSBpcyBjb25mb3JtYWwuIEEgYm94IHdpdGggaWRlbnRpY2FsIHgsIHksIGFuZCB6XG4gKiBsZW5ndGhzIGluIG1lcmNhdG9yIHVuaXRzIHdvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY3ViZS4ge0BsaW5rIE1lcmNhdG9yQ29vcmRpbmF0ZX0uZnJvbUxhdExuZ1xuICogY2FuIGJlIHVzZWQgdG8gcHJvamVjdCBhIGBMbmdMYXRgIHRvIGEgbWVyY2F0b3IgY29vcmRpbmF0ZS5cbiAqL1xuXG4vKipcbiAqIENhbGxlZCBkdXJpbmcgYSByZW5kZXIgZnJhbWUgYWxsb3dpbmcgdGhlIGxheWVyIHRvIGRyYXcgaW50byB0aGUgR0wgY29udGV4dC5cbiAqXG4gKiBUaGUgbGF5ZXIgY2FuIGFzc3VtZSBibGVuZGluZyBhbmQgZGVwdGggc3RhdGUgaXMgc2V0IHRvIGFsbG93IHRoZSBsYXllciB0byBwcm9wZXJseVxuICogYmxlbmQgYW5kIGNsaXAgb3RoZXIgbGF5ZXJzLiBUaGUgbGF5ZXIgY2Fubm90IG1ha2UgYW55IG90aGVyIGFzc3VtcHRpb25zIGFib3V0IHRoZVxuICogY3VycmVudCBHTCBzdGF0ZS5cbiAqXG4gKiBJZiB0aGUgbGF5ZXIgbmVlZHMgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSwgaXQgc2hvdWxkIGltcGxlbWVudCB0aGUgYHByZXJlbmRlcmAgbWV0aG9kXG4gKiB0byBkbyB0aGlzIGFuZCBvbmx5IHVzZSB0aGUgYHJlbmRlcmAgbWV0aG9kIGZvciBkcmF3aW5nIGRpcmVjdGx5IGludG8gdGhlIG1haW4gZnJhbWVidWZmZXIuXG4gKlxuICogVGhlIGJsZW5kIGZ1bmN0aW9uIGlzIHNldCB0byBgZ2wuYmxlbmRGdW5jKGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSlgLiBUaGlzIGV4cGVjdHNcbiAqIGNvbG9ycyB0byBiZSBwcm92aWRlZCBpbiBwcmVtdWx0aXBsaWVkIGFscGhhIGZvcm0gd2hlcmUgdGhlIGByYCwgYGdgIGFuZCBgYmAgdmFsdWVzIGFyZSBhbHJlYWR5XG4gKiBtdWx0aXBsaWVkIGJ5IHRoZSBgYWAgdmFsdWUuIElmIHlvdSBhcmUgdW5hYmxlIHRvIHByb3ZpZGUgY29sb3JzIGluIHByZW11bHRpcGxpZWQgZm9ybSB5b3VcbiAqIG1heSB3YW50IHRvIGNoYW5nZSB0aGUgYmxlbmQgZnVuY3Rpb24gdG9cbiAqIGBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5TUkNfQUxQSEEsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEsIGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSlgLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIHJlbmRlclxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBtYXAncyBnbCBjb250ZXh0LlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBtYXRyaXggVGhlIG1hcCdzIGNhbWVyYSBtYXRyaXguIEl0IHByb2plY3RzIHNwaGVyaWNhbCBtZXJjYXRvclxuICogY29vcmRpbmF0ZXMgdG8gZ2wgY29vcmRpbmF0ZXMuIFRoZSBzcGhlcmljYWwgbWVyY2F0b3IgY29vcmRpbmF0ZSBgWzAsIDBdYCByZXByZXNlbnRzIHRoZVxuICogdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtZXJjYXRvciB3b3JsZCBhbmQgYFsxLCAxXWAgcmVwcmVzZW50cyB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci4gV2hlblxuICogdGhlIGByZW5kZXJpbmdNb2RlYCBpcyBgXCIzZFwiYCwgdGhlIHogY29vcmRpbmF0ZSBpcyBjb25mb3JtYWwuIEEgYm94IHdpdGggaWRlbnRpY2FsIHgsIHksIGFuZCB6XG4gKiBsZW5ndGhzIGluIG1lcmNhdG9yIHVuaXRzIHdvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY3ViZS4ge0BsaW5rIE1lcmNhdG9yQ29vcmRpbmF0ZX0uZnJvbUxhdExuZ1xuICogY2FuIGJlIHVzZWQgdG8gcHJvamVjdCBhIGBMbmdMYXRgIHRvIGEgbWVyY2F0b3IgY29vcmRpbmF0ZS5cbiAqL1xuZXhwb3J0IHR5cGUgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UgPSB7XG4gICAgaWQ6IHN0cmluZyxcbiAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgIHJlbmRlcmluZ01vZGU6IFwiMmRcIiB8IFwiM2RcIixcbiAgICByZW5kZXI6IEN1c3RvbVJlbmRlck1ldGhvZCxcbiAgICBwcmVyZW5kZXI6ID9DdXN0b21SZW5kZXJNZXRob2QsXG4gICAgb25BZGQ6ID8obWFwOiBNYXAsIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpID0+IHZvaWQsXG4gICAgb25SZW1vdmU6ID8obWFwOiBNYXAsIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcihsYXllck9iamVjdDogQ3VzdG9tTGF5ZXJJbnRlcmZhY2UpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBjb25zdCBpZCA9IGxheWVyT2JqZWN0LmlkO1xuXG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYGxheWVycy4ke2lkfTogbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcImlkXCJgXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChsYXllck9iamVjdC5yZW5kZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgbGF5ZXJzLiR7aWR9OiBtaXNzaW5nIHJlcXVpcmVkIG1ldGhvZCBcInJlbmRlclwiYFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXJPYmplY3QucmVuZGVyaW5nTW9kZSAmJlxuICAgICAgICBsYXllck9iamVjdC5yZW5kZXJpbmdNb2RlICE9PSAnMmQnICYmXG4gICAgICAgIGxheWVyT2JqZWN0LnJlbmRlcmluZ01vZGUgIT09ICczZCcpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYGxheWVycy4ke2lkfTogcHJvcGVydHkgXCJyZW5kZXJpbmdNb2RlXCIgbXVzdCBiZSBlaXRoZXIgXCIyZFwiIG9yIFwiM2RcImBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cblxuY2xhc3MgQ3VzdG9tU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuXG4gICAgaW1wbGVtZW50YXRpb246IEN1c3RvbUxheWVySW50ZXJmYWNlO1xuXG4gICAgY29uc3RydWN0b3IoaW1wbGVtZW50YXRpb246IEN1c3RvbUxheWVySW50ZXJmYWNlKSB7XG4gICAgICAgIHN1cGVyKGltcGxlbWVudGF0aW9uLCB7fSk7XG4gICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbjtcbiAgICB9XG5cbiAgICBpczNEKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbXBsZW1lbnRhdGlvbi5yZW5kZXJpbmdNb2RlID09PSAnM2QnO1xuICAgIH1cblxuICAgIGhhc09mZnNjcmVlblBhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmltcGxlbWVudGF0aW9uLnByZXJlbmRlciAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKCkge31cbiAgICB1cGRhdGVUcmFuc2l0aW9ucygpIHt9XG4gICAgaGFzVHJhbnNpdGlvbigpIHt9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGFzc2VydChmYWxzZSwgXCJDdXN0b20gbGF5ZXJzIGNhbm5vdCBiZSBzZXJpYWxpemVkXCIpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIGlmICh0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKSB7XG4gICAgICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKG1hcCwgbWFwLnBhaW50ZXIuY29udGV4dC5nbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlbW92ZShtYXA6IE1hcCkge1xuICAgICAgICBpZiAodGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZSkge1xuICAgICAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZShtYXAsIG1hcC5wYWludGVyLmNvbnRleHQuZ2wpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21TdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGNpcmNsZSBmcm9tICcuL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgaGVhdG1hcCBmcm9tICcuL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGhpbGxzaGFkZSBmcm9tICcuL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgZmlsbCBmcm9tICcuL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGZpbGxFeHRydXNpb24gZnJvbSAnLi9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcic7XG5pbXBvcnQgbGluZSBmcm9tICcuL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHN5bWJvbCBmcm9tICcuL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgYmFja2dyb3VuZCBmcm9tICcuL3N0eWxlX2xheWVyL2JhY2tncm91bmRfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHJhc3RlciBmcm9tICcuL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcic7XG5pbXBvcnQgQ3VzdG9tU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNvbnN0IHN1YmNsYXNzZXMgPSB7XG4gICAgY2lyY2xlLFxuICAgIGhlYXRtYXAsXG4gICAgaGlsbHNoYWRlLFxuICAgIGZpbGwsXG4gICAgJ2ZpbGwtZXh0cnVzaW9uJzogZmlsbEV4dHJ1c2lvbixcbiAgICBsaW5lLFxuICAgIHN5bWJvbCxcbiAgICBiYWNrZ3JvdW5kLFxuICAgIHJhc3RlclxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVMYXllcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uIHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UpIHtcbiAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXN0b21TdHlsZUxheWVyKGxheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IHN1YmNsYXNzZXNbbGF5ZXIudHlwZV0obGF5ZXIpO1xuICAgIH1cbn1cblxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwb3RwYWNrKGJveGVzKSB7XG5cbiAgICAvLyBjYWxjdWxhdGUgdG90YWwgYm94IGFyZWEgYW5kIG1heGltdW0gYm94IHdpZHRoXG4gICAgbGV0IGFyZWEgPSAwO1xuICAgIGxldCBtYXhXaWR0aCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGJveCBvZiBib3hlcykge1xuICAgICAgICBhcmVhICs9IGJveC53ICogYm94Lmg7XG4gICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIGJveC53KTtcbiAgICB9XG5cbiAgICAvLyBzb3J0IHRoZSBib3hlcyBmb3IgaW5zZXJ0aW9uIGJ5IGhlaWdodCwgZGVzY2VuZGluZ1xuICAgIGJveGVzLnNvcnQoKGEsIGIpID0+IGIuaCAtIGEuaCk7XG5cbiAgICAvLyBhaW0gZm9yIGEgc3F1YXJpc2ggcmVzdWx0aW5nIGNvbnRhaW5lcixcbiAgICAvLyBzbGlnaHRseSBhZGp1c3RlZCBmb3Igc3ViLTEwMCUgc3BhY2UgdXRpbGl6YXRpb25cbiAgICBjb25zdCBzdGFydFdpZHRoID0gTWF0aC5tYXgoTWF0aC5jZWlsKE1hdGguc3FydChhcmVhIC8gMC45NSkpLCBtYXhXaWR0aCk7XG5cbiAgICAvLyBzdGFydCB3aXRoIGEgc2luZ2xlIGVtcHR5IHNwYWNlLCB1bmJvdW5kZWQgYXQgdGhlIGJvdHRvbVxuICAgIGNvbnN0IHNwYWNlcyA9IFt7eDogMCwgeTogMCwgdzogc3RhcnRXaWR0aCwgaDogSW5maW5pdHl9XTtcblxuICAgIGxldCB3aWR0aCA9IDA7XG4gICAgbGV0IGhlaWdodCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGJveCBvZiBib3hlcykge1xuICAgICAgICAvLyBsb29rIHRocm91Z2ggc3BhY2VzIGJhY2t3YXJkcyBzbyB0aGF0IHdlIGNoZWNrIHNtYWxsZXIgc3BhY2VzIGZpcnN0XG4gICAgICAgIGZvciAobGV0IGkgPSBzcGFjZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNlID0gc3BhY2VzW2ldO1xuXG4gICAgICAgICAgICAvLyBsb29rIGZvciBlbXB0eSBzcGFjZXMgdGhhdCBjYW4gYWNjb21tb2RhdGUgdGhlIGN1cnJlbnQgYm94XG4gICAgICAgICAgICBpZiAoYm94LncgPiBzcGFjZS53IHx8IGJveC5oID4gc3BhY2UuaCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIGZvdW5kIHRoZSBzcGFjZTsgYWRkIHRoZSBib3ggdG8gaXRzIHRvcC1sZWZ0IGNvcm5lclxuICAgICAgICAgICAgLy8gfC0tLS0tLS18LS0tLS0tLXxcbiAgICAgICAgICAgIC8vIHwgIGJveCAgfCAgICAgICB8XG4gICAgICAgICAgICAvLyB8X19fX19fX3wgICAgICAgfFxuICAgICAgICAgICAgLy8gfCAgICAgICAgIHNwYWNlIHxcbiAgICAgICAgICAgIC8vIHxfX19fX19fX19fX19fX198XG4gICAgICAgICAgICBib3gueCA9IHNwYWNlLng7XG4gICAgICAgICAgICBib3gueSA9IHNwYWNlLnk7XG5cbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgYm94LnkgKyBib3guaCk7XG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBib3gueCArIGJveC53KTtcblxuICAgICAgICAgICAgaWYgKGJveC53ID09PSBzcGFjZS53ICYmIGJveC5oID09PSBzcGFjZS5oKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BhY2UgbWF0Y2hlcyB0aGUgYm94IGV4YWN0bHk7IHJlbW92ZSBpdFxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBzcGFjZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKGkgPCBzcGFjZXMubGVuZ3RoKSBzcGFjZXNbaV0gPSBsYXN0O1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJveC5oID09PSBzcGFjZS5oKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BhY2UgbWF0Y2hlcyB0aGUgYm94IGhlaWdodDsgdXBkYXRlIGl0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgLy8gfC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfFxuICAgICAgICAgICAgICAgIC8vIHwgIGJveCAgfCB1cGRhdGVkIHNwYWNlIHxcbiAgICAgICAgICAgICAgICAvLyB8X19fX19fX3xfX19fX19fX19fX19fX198XG4gICAgICAgICAgICAgICAgc3BhY2UueCArPSBib3gudztcbiAgICAgICAgICAgICAgICBzcGFjZS53IC09IGJveC53O1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJveC53ID09PSBzcGFjZS53KSB7XG4gICAgICAgICAgICAgICAgLy8gc3BhY2UgbWF0Y2hlcyB0aGUgYm94IHdpZHRoOyB1cGRhdGUgaXQgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgICAgICAvLyB8LS0tLS0tLS0tLS0tLS0tfFxuICAgICAgICAgICAgICAgIC8vIHwgICAgICBib3ggICAgICB8XG4gICAgICAgICAgICAgICAgLy8gfF9fX19fX19fX19fX19fX3xcbiAgICAgICAgICAgICAgICAvLyB8IHVwZGF0ZWQgc3BhY2UgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19fX19fX19fX198XG4gICAgICAgICAgICAgICAgc3BhY2UueSArPSBib3guaDtcbiAgICAgICAgICAgICAgICBzcGFjZS5oIC09IGJveC5oO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGUgYm94IHNwbGl0cyB0aGUgc3BhY2UgaW50byB0d28gc3BhY2VzXG4gICAgICAgICAgICAgICAgLy8gfC0tLS0tLS18LS0tLS0tLS0tLS18XG4gICAgICAgICAgICAgICAgLy8gfCAgYm94ICB8IG5ldyBzcGFjZSB8XG4gICAgICAgICAgICAgICAgLy8gfF9fX19fX198X19fX19fX19fX198XG4gICAgICAgICAgICAgICAgLy8gfCB1cGRhdGVkIHNwYWNlICAgICB8XG4gICAgICAgICAgICAgICAgLy8gfF9fX19fX19fX19fX19fX19fX198XG4gICAgICAgICAgICAgICAgc3BhY2VzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB4OiBzcGFjZS54ICsgYm94LncsXG4gICAgICAgICAgICAgICAgICAgIHk6IHNwYWNlLnksXG4gICAgICAgICAgICAgICAgICAgIHc6IHNwYWNlLncgLSBib3gudyxcbiAgICAgICAgICAgICAgICAgICAgaDogYm94LmhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzcGFjZS55ICs9IGJveC5oO1xuICAgICAgICAgICAgICAgIHNwYWNlLmggLT0gYm94Lmg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHc6IHdpZHRoLCAvLyBjb250YWluZXIgd2lkdGhcbiAgICAgICAgaDogaGVpZ2h0LCAvLyBjb250YWluZXIgaGVpZ2h0XG4gICAgICAgIGZpbGw6IChhcmVhIC8gKHdpZHRoICogaGVpZ2h0KSkgfHwgMCAvLyBzcGFjZSB1dGlsaXphdGlvblxuICAgIH07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHBvdHBhY2sgZnJvbSAncG90cGFjayc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgdHlwZSBJbWFnZU1hbmFnZXIgZnJvbSAnLi9pbWFnZV9tYW5hZ2VyJztcbmltcG9ydCB0eXBlIFRleHR1cmUgZnJvbSAnLi90ZXh0dXJlJztcblxuY29uc3QgcGFkZGluZyA9IDE7XG5cbnR5cGUgUmVjdCA9IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHc6IG51bWJlcixcbiAgICBoOiBudW1iZXJcbn07XG5cbmV4cG9ydCBjbGFzcyBJbWFnZVBvc2l0aW9uIHtcbiAgICBwYWRkZWRSZWN0OiBSZWN0O1xuICAgIHBpeGVsUmF0aW86IG51bWJlcjtcbiAgICB2ZXJzaW9uOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihwYWRkZWRSZWN0OiBSZWN0LCB7cGl4ZWxSYXRpbywgdmVyc2lvbn06IFN0eWxlSW1hZ2UpIHtcbiAgICAgICAgdGhpcy5wYWRkZWRSZWN0ID0gcGFkZGVkUmVjdDtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID0gcGl4ZWxSYXRpbztcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgdGwoKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueCArIHBhZGRpbmcsXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueSArIHBhZGRpbmdcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXQgYnIoKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueCArIHRoaXMucGFkZGVkUmVjdC53IC0gcGFkZGluZyxcbiAgICAgICAgICAgIHRoaXMucGFkZGVkUmVjdC55ICsgdGhpcy5wYWRkZWRSZWN0LmggLSBwYWRkaW5nXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0IHRsYnIoKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRsLmNvbmNhdCh0aGlzLmJyKTtcbiAgICB9XG5cbiAgICBnZXQgZGlzcGxheVNpemUoKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAodGhpcy5wYWRkZWRSZWN0LncgLSBwYWRkaW5nICogMikgLyB0aGlzLnBpeGVsUmF0aW8sXG4gICAgICAgICAgICAodGhpcy5wYWRkZWRSZWN0LmggLSBwYWRkaW5nICogMikgLyB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEltYWdlQXRsYXMge1xuICAgIGltYWdlOiBSR0JBSW1hZ2U7XG4gICAgaWNvblBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufTtcbiAgICBwYXR0ZXJuUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259O1xuICAgIGhhdmVSZW5kZXJDYWxsYmFja3M6IEFycmF5PHN0cmluZz47XG4gICAgdXBsb2FkZWQ6ID9ib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoaWNvbnM6IHtbc3RyaW5nXTogU3R5bGVJbWFnZX0sIHBhdHRlcm5zOiB7W3N0cmluZ106IFN0eWxlSW1hZ2V9KSB7XG4gICAgICAgIGNvbnN0IGljb25Qb3NpdGlvbnMgPSB7fSwgcGF0dGVyblBvc2l0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3MgPSBbXTtcblxuICAgICAgICBjb25zdCBiaW5zID0gW107XG5cbiAgICAgICAgdGhpcy5hZGRJbWFnZXMoaWNvbnMsIGljb25Qb3NpdGlvbnMsIGJpbnMpO1xuICAgICAgICB0aGlzLmFkZEltYWdlcyhwYXR0ZXJucywgcGF0dGVyblBvc2l0aW9ucywgYmlucyk7XG5cbiAgICAgICAgY29uc3Qge3csIGh9ID0gcG90cGFjayhiaW5zKTtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBuZXcgUkdCQUltYWdlKHt3aWR0aDogdyB8fCAxLCBoZWlnaHQ6IGggfHwgMX0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gaWNvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGljb25zW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IGljb25Qb3NpdGlvbnNbaWRdLnBhZGRlZFJlY3Q7XG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCB5OiAwfSwge3g6IGJpbi54ICsgcGFkZGluZywgeTogYmluLnkgKyBwYWRkaW5nfSwgc3JjLmRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBwYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gcGF0dGVybnNbaWRdO1xuICAgICAgICAgICAgY29uc3QgYmluID0gcGF0dGVyblBvc2l0aW9uc1tpZF0ucGFkZGVkUmVjdDtcbiAgICAgICAgICAgIGNvbnN0IHggPSBiaW4ueCArIHBhZGRpbmcsXG4gICAgICAgICAgICAgICAgeSA9IGJpbi55ICsgcGFkZGluZyxcbiAgICAgICAgICAgICAgICB3ID0gc3JjLmRhdGEud2lkdGgsXG4gICAgICAgICAgICAgICAgaCA9IHNyYy5kYXRhLmhlaWdodDtcblxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogMCwgeTogMH0sIHt4LCB5fSwgc3JjLmRhdGEpO1xuICAgICAgICAgICAgLy8gQWRkIDEgcGl4ZWwgd3JhcHBlZCBwYWRkaW5nIG9uIGVhY2ggc2lkZSBvZiB0aGUgaW1hZ2UuXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCB5OiBoIC0gMX0sIHt4LCB5OiB5IC0gMX0sIHt3aWR0aDogdywgaGVpZ2h0OiAxfSk7IC8vIFRcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYy5kYXRhLCBpbWFnZSwge3g6IDAsIHk6ICAgICAwfSwge3gsIHk6IHkgKyBofSwge3dpZHRoOiB3LCBoZWlnaHQ6IDF9KTsgLy8gQlxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogdyAtIDEsIHk6IDB9LCB7eDogeCAtIDEsIHl9LCB7d2lkdGg6IDEsIGhlaWdodDogaH0pOyAvLyBMXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCAgICAgeTogMH0sIHt4OiB4ICsgdywgeX0sIHt3aWR0aDogMSwgaGVpZ2h0OiBofSk7IC8vIFJcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICAgICAgdGhpcy5pY29uUG9zaXRpb25zID0gaWNvblBvc2l0aW9ucztcbiAgICAgICAgdGhpcy5wYXR0ZXJuUG9zaXRpb25zID0gcGF0dGVyblBvc2l0aW9ucztcbiAgICB9XG5cbiAgICBhZGRJbWFnZXMoaW1hZ2VzOiB7W3N0cmluZ106IFN0eWxlSW1hZ2V9LCBwb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGJpbnM6IEFycmF5PFJlY3Q+KSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gaW1hZ2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBpbWFnZXNbaWRdO1xuICAgICAgICAgICAgY29uc3QgYmluID0ge1xuICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICB3OiBzcmMuZGF0YS53aWR0aCArIDIgKiBwYWRkaW5nLFxuICAgICAgICAgICAgICAgIGg6IHNyYy5kYXRhLmhlaWdodCArIDIgKiBwYWRkaW5nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJpbnMucHVzaChiaW4pO1xuICAgICAgICAgICAgcG9zaXRpb25zW2lkXSA9IG5ldyBJbWFnZVBvc2l0aW9uKGJpbiwgc3JjKTtcblxuICAgICAgICAgICAgaWYgKHNyYy5oYXNSZW5kZXJDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBhdGNoVXBkYXRlZEltYWdlcyhpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlciwgdGV4dHVyZTogVGV4dHVyZSkge1xuICAgICAgICBpbWFnZU1hbmFnZXIuZGlzcGF0Y2hSZW5kZXJDYWxsYmFja3ModGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzKTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGltYWdlTWFuYWdlci51cGRhdGVkSW1hZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMuaWNvblBvc2l0aW9uc1tuYW1lXSwgaW1hZ2VNYW5hZ2VyLmdldEltYWdlKG5hbWUpLCB0ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMucGF0Y2hVcGRhdGVkSW1hZ2UodGhpcy5wYXR0ZXJuUG9zaXRpb25zW25hbWVdLCBpbWFnZU1hbmFnZXIuZ2V0SW1hZ2UobmFtZSksIHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGF0Y2hVcGRhdGVkSW1hZ2UocG9zaXRpb246ID9JbWFnZVBvc2l0aW9uLCBpbWFnZTogP1N0eWxlSW1hZ2UsIHRleHR1cmU6IFRleHR1cmUpIHtcbiAgICAgICAgaWYgKCFwb3NpdGlvbiB8fCAhaW1hZ2UpIHJldHVybjtcblxuICAgICAgICBpZiAocG9zaXRpb24udmVyc2lvbiA9PT0gaW1hZ2UudmVyc2lvbikgcmV0dXJuO1xuXG4gICAgICAgIHBvc2l0aW9uLnZlcnNpb24gPSBpbWFnZS52ZXJzaW9uO1xuICAgICAgICBjb25zdCBbeCwgeV0gPSBwb3NpdGlvbi50bDtcbiAgICAgICAgdGV4dHVyZS51cGRhdGUoaW1hZ2UuZGF0YSwgdW5kZWZpbmVkLCB7eCwgeX0pO1xuICAgIH1cblxufVxuXG5yZWdpc3RlcignSW1hZ2VQb3NpdGlvbicsIEltYWdlUG9zaXRpb24pO1xucmVnaXN0ZXIoJ0ltYWdlQXRsYXMnLCBJbWFnZUF0bGFzKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuY29uc3Qge0hUTUxJbWFnZUVsZW1lbnQsIEhUTUxDYW52YXNFbGVtZW50LCBIVE1MVmlkZW9FbGVtZW50LCBJbWFnZURhdGF9ID0gd2luZG93O1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1JHQkFJbWFnZSwgQWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIFRleHR1cmVGb3JtYXQgPVxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdSR0JBJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnQUxQSEEnPjtcbmV4cG9ydCB0eXBlIFRleHR1cmVGaWx0ZXIgPVxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdMSU5FQVInPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdMSU5FQVJfTUlQTUFQX05FQVJFU1QnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdORUFSRVNUJz47XG5leHBvcnQgdHlwZSBUZXh0dXJlV3JhcCA9XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ1JFUEVBVCc+XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0NMQU1QX1RPX0VER0UnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdNSVJST1JFRF9SRVBFQVQnPjtcblxudHlwZSBFbXB0eUltYWdlID0ge1xuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgZGF0YTogbnVsbFxufVxuXG5leHBvcnQgdHlwZSBUZXh0dXJlSW1hZ2UgPVxuICAgIHwgUkdCQUltYWdlXG4gICAgfCBBbHBoYUltYWdlXG4gICAgfCBIVE1MSW1hZ2VFbGVtZW50XG4gICAgfCBIVE1MQ2FudmFzRWxlbWVudFxuICAgIHwgSFRNTFZpZGVvRWxlbWVudFxuICAgIHwgSW1hZ2VEYXRhXG4gICAgfCBFbXB0eUltYWdlO1xuXG5jbGFzcyBUZXh0dXJlIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHNpemU6IFtudW1iZXIsIG51bWJlcl07XG4gICAgdGV4dHVyZTogV2ViR0xUZXh0dXJlO1xuICAgIGZvcm1hdDogVGV4dHVyZUZvcm1hdDtcbiAgICBmaWx0ZXI6ID9UZXh0dXJlRmlsdGVyO1xuICAgIHdyYXA6ID9UZXh0dXJlV3JhcDtcbiAgICB1c2VNaXBtYXA6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBpbWFnZTogVGV4dHVyZUltYWdlLCBmb3JtYXQ6IFRleHR1cmVGb3JtYXQsIG9wdGlvbnM6ID97IHByZW11bHRpcGx5PzogYm9vbGVhbiwgdXNlTWlwbWFwPzogYm9vbGVhbiB9KSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICB0aGlzLnRleHR1cmUgPSBjb250ZXh0LmdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICAgICAgdGhpcy51cGRhdGUoaW1hZ2UsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHVwZGF0ZShpbWFnZTogVGV4dHVyZUltYWdlLCBvcHRpb25zOiA/e3ByZW11bHRpcGx5PzogYm9vbGVhbiwgdXNlTWlwbWFwPzogYm9vbGVhbn0sIHBvc2l0aW9uPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGltYWdlO1xuICAgICAgICBjb25zdCByZXNpemUgPSAoIXRoaXMuc2l6ZSB8fCB0aGlzLnNpemVbMF0gIT09IHdpZHRoIHx8IHRoaXMuc2l6ZVsxXSAhPT0gaGVpZ2h0KSAmJiAhcG9zaXRpb247XG4gICAgICAgIGNvbnN0IHtjb250ZXh0fSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHtnbH0gPSBjb250ZXh0O1xuXG4gICAgICAgIHRoaXMudXNlTWlwbWFwID0gQm9vbGVhbihvcHRpb25zICYmIG9wdGlvbnMudXNlTWlwbWFwKTtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcblxuICAgICAgICBjb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXQoZmFsc2UpO1xuICAgICAgICBjb250ZXh0LnBpeGVsU3RvcmVVbnBhY2suc2V0KDEpO1xuICAgICAgICBjb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCh0aGlzLmZvcm1hdCA9PT0gZ2wuUkdCQSAmJiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5wcmVtdWx0aXBseSAhPT0gZmFsc2UpKTtcblxuICAgICAgICBpZiAocmVzaXplKSB7XG4gICAgICAgICAgICB0aGlzLnNpemUgPSBbd2lkdGgsIGhlaWdodF07XG5cbiAgICAgICAgICAgIGlmIChpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZURhdGEpIHtcbiAgICAgICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgZ2wuVU5TSUdORURfQllURSwgaW1hZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgZ2wuVU5TSUdORURfQllURSwgaW1hZ2UuZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHt4LCB5fSA9IHBvc2l0aW9uIHx8IHt4OiAwLCB5OiAwfTtcbiAgICAgICAgICAgIGlmIChpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZURhdGEpIHtcbiAgICAgICAgICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHgsIHksIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiB0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSkge1xuICAgICAgICAgICAgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kKGZpbHRlcjogVGV4dHVyZUZpbHRlciwgd3JhcDogVGV4dHVyZVdyYXAsIG1pbkZpbHRlcjogP1RleHR1cmVGaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qge2NvbnRleHR9ID0gdGhpcztcbiAgICAgICAgY29uc3Qge2dsfSA9IGNvbnRleHQ7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG5cbiAgICAgICAgaWYgKG1pbkZpbHRlciA9PT0gZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUICYmICF0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSkge1xuICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTElORUFSO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdGhpcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIG1pbkZpbHRlciB8fCBmaWx0ZXIpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod3JhcCAhPT0gdGhpcy53cmFwKSB7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCB3cmFwKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIHdyYXApO1xuICAgICAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU2l6ZVBvd2VyT2ZUd28oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemVbMF0gPT09IHRoaXMuc2l6ZVsxXSAmJiAoTWF0aC5sb2codGhpcy5zaXplWzBdKSAvIE1hdGguTE4yKSAlIDEgPT09IDA7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xuICAgICAgICB0aGlzLnRleHR1cmUgPSAobnVsbDogYW55KTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHR1cmU7XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGJmO1xuXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKTtcblxuZnVuY3Rpb24gUGJmKGJ1Zikge1xuICAgIHRoaXMuYnVmID0gQXJyYXlCdWZmZXIuaXNWaWV3ICYmIEFycmF5QnVmZmVyLmlzVmlldyhidWYpID8gYnVmIDogbmV3IFVpbnQ4QXJyYXkoYnVmIHx8IDApO1xuICAgIHRoaXMucG9zID0gMDtcbiAgICB0aGlzLnR5cGUgPSAwO1xuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5idWYubGVuZ3RoO1xufVxuXG5QYmYuVmFyaW50ICA9IDA7IC8vIHZhcmludDogaW50MzIsIGludDY0LCB1aW50MzIsIHVpbnQ2NCwgc2ludDMyLCBzaW50NjQsIGJvb2wsIGVudW1cblBiZi5GaXhlZDY0ID0gMTsgLy8gNjQtYml0OiBkb3VibGUsIGZpeGVkNjQsIHNmaXhlZDY0XG5QYmYuQnl0ZXMgICA9IDI7IC8vIGxlbmd0aC1kZWxpbWl0ZWQ6IHN0cmluZywgYnl0ZXMsIGVtYmVkZGVkIG1lc3NhZ2VzLCBwYWNrZWQgcmVwZWF0ZWQgZmllbGRzXG5QYmYuRml4ZWQzMiA9IDU7IC8vIDMyLWJpdDogZmxvYXQsIGZpeGVkMzIsIHNmaXhlZDMyXG5cbnZhciBTSElGVF9MRUZUXzMyID0gKDEgPDwgMTYpICogKDEgPDwgMTYpLFxuICAgIFNISUZUX1JJR0hUXzMyID0gMSAvIFNISUZUX0xFRlRfMzI7XG5cblBiZi5wcm90b3R5cGUgPSB7XG5cbiAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5idWYgPSBudWxsO1xuICAgIH0sXG5cbiAgICAvLyA9PT0gUkVBRElORyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgcmVhZEZpZWxkczogZnVuY3Rpb24ocmVhZEZpZWxkLCByZXN1bHQsIGVuZCkge1xuICAgICAgICBlbmQgPSBlbmQgfHwgdGhpcy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5yZWFkVmFyaW50KCksXG4gICAgICAgICAgICAgICAgdGFnID0gdmFsID4+IDMsXG4gICAgICAgICAgICAgICAgc3RhcnRQb3MgPSB0aGlzLnBvcztcblxuICAgICAgICAgICAgdGhpcy50eXBlID0gdmFsICYgMHg3O1xuICAgICAgICAgICAgcmVhZEZpZWxkKHRhZywgcmVzdWx0LCB0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBzdGFydFBvcykgdGhpcy5za2lwKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcmVhZE1lc3NhZ2U6IGZ1bmN0aW9uKHJlYWRGaWVsZCwgcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRGaWVsZHMocmVhZEZpZWxkLCByZXN1bHQsIHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MpO1xuICAgIH0sXG5cbiAgICByZWFkRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkVUludDMyKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRTRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkSW50MzIodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgLy8gNjQtYml0IGludCBoYW5kbGluZyBpcyBiYXNlZCBvbiBnaXRodWIuY29tL2Rwdy9ub2RlLWJ1ZmZlci1tb3JlLWludHMgKE1JVC1saWNlbnNlZClcblxuICAgIHJlYWRGaXhlZDY0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zKSArIHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zICsgNCkgKiBTSElGVF9MRUZUXzMyO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkU0ZpeGVkNjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gcmVhZFVJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MpICsgcmVhZEludDMyKHRoaXMuYnVmLCB0aGlzLnBvcyArIDQpICogU0hJRlRfTEVGVF8zMjtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZEZsb2F0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IGllZWU3NTQucmVhZCh0aGlzLmJ1ZiwgdGhpcy5wb3MsIHRydWUsIDIzLCA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZERvdWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSBpZWVlNzU0LnJlYWQodGhpcy5idWYsIHRoaXMucG9zLCB0cnVlLCA1MiwgOCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRWYXJpbnQ6IGZ1bmN0aW9uKGlzU2lnbmVkKSB7XG4gICAgICAgIHZhciBidWYgPSB0aGlzLmJ1ZixcbiAgICAgICAgICAgIHZhbCwgYjtcblxuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgID0gIGIgJiAweDdmOyAgICAgICAgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCA3OyAgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCAxNDsgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCAyMTsgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zXTsgICB2YWwgfD0gKGIgJiAweDBmKSA8PCAyODtcblxuICAgICAgICByZXR1cm4gcmVhZFZhcmludFJlbWFpbmRlcih2YWwsIGlzU2lnbmVkLCB0aGlzKTtcbiAgICB9LFxuXG4gICAgcmVhZFZhcmludDY0OiBmdW5jdGlvbigpIHsgLy8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2Mi4wLjFcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFZhcmludCh0cnVlKTtcbiAgICB9LFxuXG4gICAgcmVhZFNWYXJpbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbnVtID0gdGhpcy5yZWFkVmFyaW50KCk7XG4gICAgICAgIHJldHVybiBudW0gJSAyID09PSAxID8gKG51bSArIDEpIC8gLTIgOiBudW0gLyAyOyAvLyB6aWd6YWcgZW5jb2RpbmdcbiAgICB9LFxuXG4gICAgcmVhZEJvb2xlYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnJlYWRWYXJpbnQoKSk7XG4gICAgfSxcblxuICAgIHJlYWRTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcyxcbiAgICAgICAgICAgIHN0ciA9IHJlYWRVdGY4KHRoaXMuYnVmLCB0aGlzLnBvcywgZW5kKTtcbiAgICAgICAgdGhpcy5wb3MgPSBlbmQ7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfSxcblxuICAgIHJlYWRCeXRlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLFxuICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsIGVuZCk7XG4gICAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH0sXG5cbiAgICAvLyB2ZXJib3NlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOyBkb2Vzbid0IGFmZmVjdCBnemlwcGVkIHNpemVcblxuICAgIHJlYWRQYWNrZWRWYXJpbnQ6IGZ1bmN0aW9uKGFyciwgaXNTaWduZWQpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkVmFyaW50KGlzU2lnbmVkKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkVmFyaW50KGlzU2lnbmVkKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkU1ZhcmludDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRCb29sZWFuOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEZsb2F0OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRG91YmxlOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRG91YmxlKCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRGaXhlZDMyOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZFNGaXhlZDMyOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRml4ZWQ2NDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRml4ZWQ2NCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRTRml4ZWQ2NDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG5cbiAgICBza2lwOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB2YWwgJiAweDc7XG4gICAgICAgIGlmICh0eXBlID09PSBQYmYuVmFyaW50KSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gPiAweDdmKSB7fVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSBQYmYuQnl0ZXMpIHRoaXMucG9zID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcztcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gUGJmLkZpeGVkMzIpIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFBiZi5GaXhlZDY0KSB0aGlzLnBvcyArPSA4O1xuICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcignVW5pbXBsZW1lbnRlZCB0eXBlOiAnICsgdHlwZSk7XG4gICAgfSxcblxuICAgIC8vID09PSBXUklUSU5HID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICB3cml0ZVRhZzogZnVuY3Rpb24odGFnLCB0eXBlKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoKHRhZyA8PCAzKSB8IHR5cGUpO1xuICAgIH0sXG5cbiAgICByZWFsbG9jOiBmdW5jdGlvbihtaW4pIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDE2O1xuXG4gICAgICAgIHdoaWxlIChsZW5ndGggPCB0aGlzLnBvcyArIG1pbikgbGVuZ3RoICo9IDI7XG5cbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgICAgICAgYnVmLnNldCh0aGlzLmJ1Zik7XG4gICAgICAgICAgICB0aGlzLmJ1ZiA9IGJ1ZjtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5wb3M7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmLnN1YmFycmF5KDAsIHRoaXMubGVuZ3RoKTtcbiAgICB9LFxuXG4gICAgd3JpdGVGaXhlZDMyOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCB2YWwsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVTRml4ZWQzMjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgfSxcblxuICAgIHdyaXRlRml4ZWQ2NDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg4KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsICYgLTEsIHRoaXMucG9zKTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgTWF0aC5mbG9vcih2YWwgKiBTSElGVF9SSUdIVF8zMiksIHRoaXMucG9zICsgNCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgfSxcblxuICAgIHdyaXRlU0ZpeGVkNjQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIHZhbCAmIC0xLCB0aGlzLnBvcyk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIE1hdGguZmxvb3IodmFsICogU0hJRlRfUklHSFRfMzIpLCB0aGlzLnBvcyArIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgIH0sXG5cbiAgICB3cml0ZVZhcmludDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHZhbCA9ICt2YWwgfHwgMDtcblxuICAgICAgICBpZiAodmFsID4gMHhmZmZmZmZmIHx8IHZhbCA8IDApIHtcbiAgICAgICAgICAgIHdyaXRlQmlnVmFyaW50KHZhbCwgdGhpcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG5cbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAgICAgICAgICAgdmFsICYgMHg3ZiAgfCAodmFsID4gMHg3ZiA/IDB4ODAgOiAwKTsgaWYgKHZhbCA8PSAweDdmKSByZXR1cm47XG4gICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+PSA3KSAmIDB4N2YpIHwgKHZhbCA+IDB4N2YgPyAweDgwIDogMCk7IGlmICh2YWwgPD0gMHg3ZikgcmV0dXJuO1xuICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICgodmFsID4+Pj0gNykgJiAweDdmKSB8ICh2YWwgPiAweDdmID8gMHg4MCA6IDApOyBpZiAodmFsIDw9IDB4N2YpIHJldHVybjtcbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAgICh2YWwgPj4+IDcpICYgMHg3ZjtcbiAgICB9LFxuXG4gICAgd3JpdGVTVmFyaW50OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludCh2YWwgPCAwID8gLXZhbCAqIDIgLSAxIDogdmFsICogMik7XG4gICAgfSxcblxuICAgIHdyaXRlQm9vbGVhbjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih2YWwpKTtcbiAgICB9LFxuXG4gICAgd3JpdGVTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICAgICAgdGhpcy5yZWFsbG9jKHN0ci5sZW5ndGggKiA0KTtcblxuICAgICAgICB0aGlzLnBvcysrOyAvLyByZXNlcnZlIDEgYnl0ZSBmb3Igc2hvcnQgc3RyaW5nIGxlbmd0aFxuXG4gICAgICAgIHZhciBzdGFydFBvcyA9IHRoaXMucG9zO1xuICAgICAgICAvLyB3cml0ZSB0aGUgc3RyaW5nIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIgYW5kIHNlZSBob3cgbXVjaCB3YXMgd3JpdHRlblxuICAgICAgICB0aGlzLnBvcyA9IHdyaXRlVXRmOCh0aGlzLmJ1Ziwgc3RyLCB0aGlzLnBvcyk7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgICAgIGlmIChsZW4gPj0gMHg4MCkgbWFrZVJvb21Gb3JFeHRyYUxlbmd0aChzdGFydFBvcywgbGVuLCB0aGlzKTtcblxuICAgICAgICAvLyBmaW5hbGx5LCB3cml0ZSB0aGUgbWVzc2FnZSBsZW5ndGggaW4gdGhlIHJlc2VydmVkIHBsYWNlIGFuZCByZXN0b3JlIHRoZSBwb3NpdGlvblxuICAgICAgICB0aGlzLnBvcyA9IHN0YXJ0UG9zIC0gMTtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChsZW4pO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgfSxcblxuICAgIHdyaXRlRmxvYXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG4gICAgICAgIGllZWU3NTQud3JpdGUodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MsIHRydWUsIDIzLCA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVEb3VibGU6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIGllZWU3NTQud3JpdGUodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MsIHRydWUsIDUyLCA4KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICB9LFxuXG4gICAgd3JpdGVCeXRlczogZnVuY3Rpb24oYnVmZmVyKSB7XG4gICAgICAgIHZhciBsZW4gPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucmVhbGxvYyhsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9IGJ1ZmZlcltpXTtcbiAgICB9LFxuXG4gICAgd3JpdGVSYXdNZXNzYWdlOiBmdW5jdGlvbihmbiwgb2JqKSB7XG4gICAgICAgIHRoaXMucG9zKys7IC8vIHJlc2VydmUgMSBieXRlIGZvciBzaG9ydCBtZXNzYWdlIGxlbmd0aFxuXG4gICAgICAgIC8vIHdyaXRlIHRoZSBtZXNzYWdlIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIgYW5kIHNlZSBob3cgbXVjaCB3YXMgd3JpdHRlblxuICAgICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnBvcztcbiAgICAgICAgZm4ob2JqLCB0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMucG9zIC0gc3RhcnRQb3M7XG5cbiAgICAgICAgaWYgKGxlbiA+PSAweDgwKSBtYWtlUm9vbUZvckV4dHJhTGVuZ3RoKHN0YXJ0UG9zLCBsZW4sIHRoaXMpO1xuXG4gICAgICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSBtZXNzYWdlIGxlbmd0aCBpbiB0aGUgcmVzZXJ2ZWQgcGxhY2UgYW5kIHJlc3RvcmUgdGhlIHBvc2l0aW9uXG4gICAgICAgIHRoaXMucG9zID0gc3RhcnRQb3MgLSAxO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucG9zICs9IGxlbjtcbiAgICB9LFxuXG4gICAgd3JpdGVNZXNzYWdlOiBmdW5jdGlvbih0YWcsIGZuLCBvYmopIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVSYXdNZXNzYWdlKGZuLCBvYmopO1xuICAgIH0sXG5cbiAgICB3cml0ZVBhY2tlZFZhcmludDogICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFZhcmludCwgYXJyKTsgICB9LFxuICAgIHdyaXRlUGFja2VkU1ZhcmludDogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkU1ZhcmludCwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRCb29sZWFuOiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRCb29sZWFuLCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZEZsb2F0OiAgICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEZsb2F0LCBhcnIpOyAgICB9LFxuICAgIHdyaXRlUGFja2VkRG91YmxlOiAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRG91YmxlLCBhcnIpOyAgIH0sXG4gICAgd3JpdGVQYWNrZWRGaXhlZDMyOiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRGaXhlZDMyLCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZFNGaXhlZDMyOiBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFNGaXhlZDMyLCBhcnIpOyB9LFxuICAgIHdyaXRlUGFja2VkRml4ZWQ2NDogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRml4ZWQ2NCwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRTRml4ZWQ2NDogZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRTRml4ZWQ2NCwgYXJyKTsgfSxcblxuICAgIHdyaXRlQnl0ZXNGaWVsZDogZnVuY3Rpb24odGFnLCBidWZmZXIpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVCeXRlcyhidWZmZXIpO1xuICAgIH0sXG4gICAgd3JpdGVGaXhlZDMyRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQzMik7XG4gICAgICAgIHRoaXMud3JpdGVGaXhlZDMyKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNGaXhlZDMyRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQzMik7XG4gICAgICAgIHRoaXMud3JpdGVTRml4ZWQzMih2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVGaXhlZDY0RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVGaXhlZDY0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNGaXhlZDY0RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVTRml4ZWQ2NCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVWYXJpbnRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5WYXJpbnQpO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNWYXJpbnRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5WYXJpbnQpO1xuICAgICAgICB0aGlzLndyaXRlU1ZhcmludCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVTdHJpbmdGaWVsZDogZnVuY3Rpb24odGFnLCBzdHIpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVTdHJpbmcoc3RyKTtcbiAgICB9LFxuICAgIHdyaXRlRmxvYXRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDMyKTtcbiAgICAgICAgdGhpcy53cml0ZUZsb2F0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZURvdWJsZUZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkNjQpO1xuICAgICAgICB0aGlzLndyaXRlRG91YmxlKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZUJvb2xlYW5GaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludEZpZWxkKHRhZywgQm9vbGVhbih2YWwpKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiByZWFkVmFyaW50UmVtYWluZGVyKGwsIHMsIHApIHtcbiAgICB2YXIgYnVmID0gcC5idWYsXG4gICAgICAgIGgsIGI7XG5cbiAgICBiID0gYnVmW3AucG9zKytdOyBoICA9IChiICYgMHg3MCkgPj4gNDsgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAzOyAgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4N2YpIDw8IDEwOyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcbiAgICBiID0gYnVmW3AucG9zKytdOyBoIHw9IChiICYgMHg3ZikgPDwgMTc7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAyNDsgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4MDEpIDw8IDMxOyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcblxuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXMnKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBhY2tlZEVuZChwYmYpIHtcbiAgICByZXR1cm4gcGJmLnR5cGUgPT09IFBiZi5CeXRlcyA/XG4gICAgICAgIHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zIDogcGJmLnBvcyArIDE7XG59XG5cbmZ1bmN0aW9uIHRvTnVtKGxvdywgaGlnaCwgaXNTaWduZWQpIHtcbiAgICBpZiAoaXNTaWduZWQpIHtcbiAgICAgICAgcmV0dXJuIGhpZ2ggKiAweDEwMDAwMDAwMCArIChsb3cgPj4+IDApO1xuICAgIH1cblxuICAgIHJldHVybiAoKGhpZ2ggPj4+IDApICogMHgxMDAwMDAwMDApICsgKGxvdyA+Pj4gMCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmlnVmFyaW50KHZhbCwgcGJmKSB7XG4gICAgdmFyIGxvdywgaGlnaDtcblxuICAgIGlmICh2YWwgPj0gMCkge1xuICAgICAgICBsb3cgID0gKHZhbCAlIDB4MTAwMDAwMDAwKSB8IDA7XG4gICAgICAgIGhpZ2ggPSAodmFsIC8gMHgxMDAwMDAwMDApIHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb3cgID0gfigtdmFsICUgMHgxMDAwMDAwMDApO1xuICAgICAgICBoaWdoID0gfigtdmFsIC8gMHgxMDAwMDAwMDApO1xuXG4gICAgICAgIGlmIChsb3cgXiAweGZmZmZmZmZmKSB7XG4gICAgICAgICAgICBsb3cgPSAobG93ICsgMSkgfCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG93ID0gMDtcbiAgICAgICAgICAgIGhpZ2ggPSAoaGlnaCArIDEpIHwgMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWwgPj0gMHgxMDAwMDAwMDAwMDAwMDAwMCB8fCB2YWwgPCAtMHgxMDAwMDAwMDAwMDAwMDAwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIHZhcmludCBkb2VzblxcJ3QgZml0IGludG8gMTAgYnl0ZXMnKTtcbiAgICB9XG5cbiAgICBwYmYucmVhbGxvYygxMCk7XG5cbiAgICB3cml0ZUJpZ1ZhcmludExvdyhsb3csIGhpZ2gsIHBiZik7XG4gICAgd3JpdGVCaWdWYXJpbnRIaWdoKGhpZ2gsIHBiZik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmlnVmFyaW50TG93KGxvdywgaGlnaCwgcGJmKSB7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zXSAgID0gbG93ICYgMHg3Zjtcbn1cblxuZnVuY3Rpb24gd3JpdGVCaWdWYXJpbnRIaWdoKGhpZ2gsIHBiZikge1xuICAgIHZhciBsc2IgPSAoaGlnaCAmIDB4MDcpIDw8IDQ7XG5cbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gfD0gbHNiICAgICAgICAgfCAoKGhpZ2ggPj4+PSAzKSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3ZiB8ICgoaGlnaCA+Pj49IDcpID8gMHg4MCA6IDApOyBpZiAoIWhpZ2gpIHJldHVybjtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gID0gaGlnaCAmIDB4N2YgfCAoKGhpZ2ggPj4+PSA3KSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3Zjtcbn1cblxuZnVuY3Rpb24gbWFrZVJvb21Gb3JFeHRyYUxlbmd0aChzdGFydFBvcywgbGVuLCBwYmYpIHtcbiAgICB2YXIgZXh0cmFMZW4gPVxuICAgICAgICBsZW4gPD0gMHgzZmZmID8gMSA6XG4gICAgICAgIGxlbiA8PSAweDFmZmZmZiA/IDIgOlxuICAgICAgICBsZW4gPD0gMHhmZmZmZmZmID8gMyA6IE1hdGguZmxvb3IoTWF0aC5sb2cobGVuKSAvIChNYXRoLkxOMiAqIDcpKTtcblxuICAgIC8vIGlmIDEgYnl0ZSBpc24ndCBlbm91Z2ggZm9yIGVuY29kaW5nIG1lc3NhZ2UgbGVuZ3RoLCBzaGlmdCB0aGUgZGF0YSB0byB0aGUgcmlnaHRcbiAgICBwYmYucmVhbGxvYyhleHRyYUxlbik7XG4gICAgZm9yICh2YXIgaSA9IHBiZi5wb3MgLSAxOyBpID49IHN0YXJ0UG9zOyBpLS0pIHBiZi5idWZbaSArIGV4dHJhTGVuXSA9IHBiZi5idWZbaV07XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGFja2VkVmFyaW50KGFyciwgcGJmKSAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVZhcmludChhcnJbaV0pOyAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU1ZhcmludChhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNWYXJpbnQoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRmxvYXQoYXJyLCBwYmYpICAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZsb2F0KGFycltpXSk7ICAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRG91YmxlKGFyciwgcGJmKSAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZURvdWJsZShhcnJbaV0pOyAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkQm9vbGVhbihhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUJvb2xlYW4oYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRml4ZWQzMihhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZpeGVkMzIoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU0ZpeGVkMzIoYXJyLCBwYmYpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNGaXhlZDMyKGFycltpXSk7IH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRml4ZWQ2NChhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZpeGVkNjQoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU0ZpeGVkNjQoYXJyLCBwYmYpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNGaXhlZDY0KGFycltpXSk7IH1cblxuLy8gQnVmZmVyIGNvZGUgYmVsb3cgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlciwgTUlULWxpY2Vuc2VkXG5cbmZ1bmN0aW9uIHJlYWRVSW50MzIoYnVmLCBwb3MpIHtcbiAgICByZXR1cm4gKChidWZbcG9zXSkgfFxuICAgICAgICAoYnVmW3BvcyArIDFdIDw8IDgpIHxcbiAgICAgICAgKGJ1Zltwb3MgKyAyXSA8PCAxNikpICtcbiAgICAgICAgKGJ1Zltwb3MgKyAzXSAqIDB4MTAwMDAwMCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzIoYnVmLCB2YWwsIHBvcykge1xuICAgIGJ1Zltwb3NdID0gdmFsO1xuICAgIGJ1Zltwb3MgKyAxXSA9ICh2YWwgPj4+IDgpO1xuICAgIGJ1Zltwb3MgKyAyXSA9ICh2YWwgPj4+IDE2KTtcbiAgICBidWZbcG9zICsgM10gPSAodmFsID4+PiAyNCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQzMihidWYsIHBvcykge1xuICAgIHJldHVybiAoKGJ1Zltwb3NdKSB8XG4gICAgICAgIChidWZbcG9zICsgMV0gPDwgOCkgfFxuICAgICAgICAoYnVmW3BvcyArIDJdIDw8IDE2KSkgK1xuICAgICAgICAoYnVmW3BvcyArIDNdIDw8IDI0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFV0ZjgoYnVmLCBwb3MsIGVuZCkge1xuICAgIHZhciBzdHIgPSAnJztcbiAgICB2YXIgaSA9IHBvcztcblxuICAgIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgICAgIHZhciBiMCA9IGJ1ZltpXTtcbiAgICAgICAgdmFyIGMgPSBudWxsOyAvLyBjb2RlcG9pbnRcbiAgICAgICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPVxuICAgICAgICAgICAgYjAgPiAweEVGID8gNCA6XG4gICAgICAgICAgICBiMCA+IDB4REYgPyAzIDpcbiAgICAgICAgICAgIGIwID4gMHhCRiA/IDIgOiAxO1xuXG4gICAgICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA+IGVuZCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIGIxLCBiMiwgYjM7XG5cbiAgICAgICAgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChiMCA8IDB4ODApIHtcbiAgICAgICAgICAgICAgICBjID0gYjA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNQZXJTZXF1ZW5jZSA9PT0gMikge1xuICAgICAgICAgICAgYjEgPSBidWZbaSArIDFdO1xuICAgICAgICAgICAgaWYgKChiMSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICAgICAgYyA9IChiMCAmIDB4MUYpIDw8IDB4NiB8IChiMSAmIDB4M0YpO1xuICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4N0YpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDMpIHtcbiAgICAgICAgICAgIGIxID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICAgIGIyID0gYnVmW2kgKyAyXTtcbiAgICAgICAgICAgIGlmICgoYjEgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjIgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSAoYjAgJiAweEYpIDw8IDB4QyB8IChiMSAmIDB4M0YpIDw8IDB4NiB8IChiMiAmIDB4M0YpO1xuICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4N0ZGIHx8IChjID49IDB4RDgwMCAmJiBjIDw9IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDQpIHtcbiAgICAgICAgICAgIGIxID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICAgIGIyID0gYnVmW2kgKyAyXTtcbiAgICAgICAgICAgIGIzID0gYnVmW2kgKyAzXTtcbiAgICAgICAgICAgIGlmICgoYjEgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjIgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjMgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSAoYjAgJiAweEYpIDw8IDB4MTIgfCAoYjEgJiAweDNGKSA8PCAweEMgfCAoYjIgJiAweDNGKSA8PCAweDYgfCAoYjMgJiAweDNGKTtcbiAgICAgICAgICAgICAgICBpZiAoYyA8PSAweEZGRkYgfHwgYyA+PSAweDExMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICBjID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYyA9IDB4RkZGRDtcbiAgICAgICAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoYyA+IDB4RkZGRikge1xuICAgICAgICAgICAgYyAtPSAweDEwMDAwO1xuICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG4gICAgICAgICAgICBjID0gMHhEQzAwIHwgYyAmIDB4M0ZGO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiB3cml0ZVV0ZjgoYnVmLCBzdHIsIHBvcykge1xuICAgIGZvciAodmFyIGkgPSAwLCBjLCBsZWFkOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKTsgLy8gY29kZSBwb2ludFxuXG4gICAgICAgIGlmIChjID4gMHhEN0ZGICYmIGMgPCAweEUwMDApIHtcbiAgICAgICAgICAgIGlmIChsZWFkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGMgPCAweERDMDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4RUY7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJGO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRDtcbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBsZWFkIC0gMHhEODAwIDw8IDEwIHwgYyAtIDB4REMwMCB8IDB4MTAwMDA7XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGMgPiAweERCRkYgfHwgKGkgKyAxID09PSBzdHIubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhFRjtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkY7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJEO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPSBjO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsZWFkKSB7XG4gICAgICAgICAgICBidWZbcG9zKytdID0gMHhFRjtcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJGO1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkQ7XG4gICAgICAgICAgICBsZWFkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IGM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHg2IHwgMHhDMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGMgPCAweDEwMDAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4QyB8IDB4RTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHgxMiB8IDB4RjA7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4QyAmIDB4M0YgfCAweDgwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweDYgJiAweDNGIHwgMHg4MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjICYgMHgzRiB8IDB4ODA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBvcztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7QWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmltcG9ydCBQcm90b2J1ZiBmcm9tICdwYmYnO1xuY29uc3QgYm9yZGVyID0gMztcblxuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGh9IGZyb20gJy4vc3R5bGVfZ2x5cGgnO1xuXG5mdW5jdGlvbiByZWFkRm9udHN0YWNrcyh0YWc6IG51bWJlciwgZ2x5cGhzOiBBcnJheTxTdHlsZUdseXBoPiwgcGJmOiBQcm90b2J1Zikge1xuICAgIGlmICh0YWcgPT09IDEpIHtcbiAgICAgICAgcGJmLnJlYWRNZXNzYWdlKHJlYWRGb250c3RhY2ssIGdseXBocyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFkRm9udHN0YWNrKHRhZzogbnVtYmVyLCBnbHlwaHM6IEFycmF5PFN0eWxlR2x5cGg+LCBwYmY6IFByb3RvYnVmKSB7XG4gICAgaWYgKHRhZyA9PT0gMykge1xuICAgICAgICBjb25zdCB7aWQsIGJpdG1hcCwgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCBhZHZhbmNlfSA9IHBiZi5yZWFkTWVzc2FnZShyZWFkR2x5cGgsIHt9KTtcbiAgICAgICAgZ2x5cGhzLnB1c2goe1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBiaXRtYXA6IG5ldyBBbHBoYUltYWdlKHtcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGggKyAyICogYm9yZGVyLFxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgMiAqIGJvcmRlclxuICAgICAgICAgICAgfSwgYml0bWFwKSxcbiAgICAgICAgICAgIG1ldHJpY3M6IHt3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIGFkdmFuY2V9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVhZEdseXBoKHRhZzogbnVtYmVyLCBnbHlwaDogT2JqZWN0LCBwYmY6IFByb3RvYnVmKSB7XG4gICAgaWYgKHRhZyA9PT0gMSkgZ2x5cGguaWQgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMikgZ2x5cGguYml0bWFwID0gcGJmLnJlYWRCeXRlcygpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMykgZ2x5cGgud2lkdGggPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gNCkgZ2x5cGguaGVpZ2h0ID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDUpIGdseXBoLmxlZnQgPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDYpIGdseXBoLnRvcCA9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gNykgZ2x5cGguYWR2YW5jZSA9IHBiZi5yZWFkVmFyaW50KCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChkYXRhOiBBcnJheUJ1ZmZlciB8IFVpbnQ4QXJyYXkpOiBBcnJheTxTdHlsZUdseXBoPiB7XG4gICAgcmV0dXJuIG5ldyBQcm90b2J1ZihkYXRhKS5yZWFkRmllbGRzKHJlYWRGb250c3RhY2tzLCBbXSk7XG59XG5cbmV4cG9ydCBjb25zdCBHTFlQSF9QQkZfQk9SREVSID0gYm9yZGVyO1xuIiwiLy8gQGZsb3dcblxuLyoqXG4gKiBJbnZva2VzIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIGluIGEgbm9uLWJsb2NraW5nIHdheSB3aGVuIHRyaWdnZXIoKSBpcyBjYWxsZWQuIEludm9jYXRpb24gcmVxdWVzdHNcbiAqIGFyZSBpZ25vcmVkIHVudGlsIHRoZSBmdW5jdGlvbiB3YXMgYWN0dWFsbHkgaW52b2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBUaHJvdHRsZWRJbnZva2VyIHtcbiAgICBfY2hhbm5lbDogTWVzc2FnZUNoYW5uZWw7XG4gICAgX3RyaWdnZXJlZDogYm9vbGVhbjtcbiAgICBfY2FsbGJhY2s6IEZ1bmN0aW9uXG5cbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdGhpcy5fdHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsLnBvcnQyLm9ubWVzc2FnZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyaWdnZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5fdHJpZ2dlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRocm90dGxlZEludm9rZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge3NlcmlhbGl6ZSwgZGVzZXJpYWxpemV9IGZyb20gJy4vd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgVGhyb3R0bGVkSW52b2tlciBmcm9tICcuL3Rocm90dGxlZF9pbnZva2VyJztcblxuaW1wb3J0IHR5cGUge1RyYW5zZmVyYWJsZX0gZnJvbSAnLi4vdHlwZXMvdHJhbnNmZXJhYmxlJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW0FjdG9yIGRlc2lnbiBwYXR0ZXJuXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FjdG9yX21vZGVsKVxuICogdGhhdCBtYWludGFpbnMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFzeW5jaHJvbm91cyB0YXNrcyBhbmQgdGhlIG9iamVjdHNcbiAqIHRoYXQgc3BpbiB0aGVtIG9mZiAtIGluIHRoaXMgY2FzZSwgdGFza3MgbGlrZSBwYXJzaW5nIHBhcnRzIG9mIHN0eWxlcyxcbiAqIG93bmVkIGJ5IHRoZSBzdHlsZXNcbiAqXG4gKiBAcGFyYW0ge1dlYldvcmtlcn0gdGFyZ2V0XG4gKiBAcGFyYW0ge1dlYldvcmtlcn0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG1hcElkIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBNYXAgaW5zdGFuY2UgdXNpbmcgdGhpcyBBY3Rvci5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEFjdG9yIHtcbiAgICB0YXJnZXQ6IGFueTtcbiAgICBwYXJlbnQ6IGFueTtcbiAgICBtYXBJZDogP251bWJlcjtcbiAgICBjYWxsYmFja3M6IHsgbnVtYmVyOiBhbnkgfTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdGFza3M6IHsgbnVtYmVyOiBhbnkgfTtcbiAgICB0YXNrUXVldWU6IEFycmF5PG51bWJlcj47XG4gICAgY2FuY2VsQ2FsbGJhY2tzOiB7IG51bWJlcjogQ2FuY2VsYWJsZSB9O1xuICAgIGludm9rZXI6IFRocm90dGxlZEludm9rZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQ6IGFueSwgcGFyZW50OiBhbnksIG1hcElkOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5tYXBJZCA9IG1hcElkO1xuICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IHt9O1xuICAgICAgICB0aGlzLnRhc2tzID0ge307XG4gICAgICAgIHRoaXMudGFza1F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuY2FuY2VsQ2FsbGJhY2tzID0ge307XG4gICAgICAgIGJpbmRBbGwoWydyZWNlaXZlJywgJ3Byb2Nlc3MnXSwgdGhpcyk7XG4gICAgICAgIHRoaXMuaW52b2tlciA9IG5ldyBUaHJvdHRsZWRJbnZva2VyKHRoaXMucHJvY2Vzcyk7XG4gICAgICAgIHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZW5kcyBhIG1lc3NhZ2UgZnJvbSBhIG1haW4tdGhyZWFkIG1hcCB0byBhIFdvcmtlciBvciBmcm9tIGEgV29ya2VyIGJhY2sgdG9cbiAgICAgKiBhIG1haW4tdGhyZWFkIG1hcCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgbWV0aG9kIHRvIGludm9rZSBvciAnW3NvdXJjZS10eXBlXS5bc291cmNlLW5hbWVdLm5hbWUnIGZvciBhIG1ldGhvZCBvbiBhIFdvcmtlclNvdXJjZS5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0TWFwSWQgQSBwYXJ0aWN1bGFyIG1hcElkIHRvIHdoaWNoIHRvIHNlbmQgdGhpcyBtZXNzYWdlLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2VuZCh0eXBlOiBzdHJpbmcsIGRhdGE6IG1peGVkLCBjYWxsYmFjazogP0Z1bmN0aW9uLCB0YXJnZXRNYXBJZDogP3N0cmluZyk6ID9DYW5jZWxhYmxlIHtcbiAgICAgICAgLy8gV2UncmUgdXNpbmcgYSBzdHJpbmcgSUQgaW5zdGVhZCBvZiBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgYmVpbmcgdXNlZCBhcyBvYmplY3Qga2V5c1xuICAgICAgICAvLyBhbnl3YXksIGFuZCB0aHVzIHN0cmluZ2lmaWVkIGltcGxpY2l0bHkuIFdlIHVzZSByYW5kb20gSURzIGJlY2F1c2UgYW4gYWN0b3IgbWF5IHJlY2VpdmVcbiAgICAgICAgLy8gbWVzc2FnZSBmcm9tIG11bHRpcGxlIG90aGVyIGFjdG9ycyB3aGljaCBjb3VsZCBydW4gaW4gZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiBBXG4gICAgICAgIC8vIGxpbmVhcmx5IGluY3JlYXNpbmcgSUQgY291bGQgcHJvZHVjZSBjb2xsaXNpb25zLlxuICAgICAgICBjb25zdCBpZCA9IE1hdGgucm91bmQoKE1hdGgucmFuZG9tKCkgKiAxZTE4KSkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygwLCAxMCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3NbaWRdID0gY2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmZmVyczogQXJyYXk8VHJhbnNmZXJhYmxlPiA9IFtdO1xuICAgICAgICB0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBoYXNDYWxsYmFjazogISFjYWxsYmFjayxcbiAgICAgICAgICAgIHRhcmdldE1hcElkLFxuICAgICAgICAgICAgc291cmNlTWFwSWQ6IHRoaXMubWFwSWQsXG4gICAgICAgICAgICBkYXRhOiBzZXJpYWxpemUoZGF0YSwgYnVmZmVycylcbiAgICAgICAgfSwgYnVmZmVycyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBjYWxsYmFjayB0byBudWxsIHNvIHRoYXQgaXQgbmV2ZXIgZmlyZXMgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgYWJvcnRlZC5cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJzxjYW5jZWw+JyxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWFwSWQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcElkOiB0aGlzLm1hcElkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVjZWl2ZShtZXNzYWdlOiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1lc3NhZ2UuZGF0YSxcbiAgICAgICAgICAgIGlkID0gZGF0YS5pZDtcblxuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS50YXJnZXRNYXBJZCAmJiB0aGlzLm1hcElkICE9PSBkYXRhLnRhcmdldE1hcElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnPGNhbmNlbD4nKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9yaWdpbmFsIHJlcXVlc3QgZnJvbSB0aGUgcXVldWUuIFRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiBpdFxuICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4ga2lja2VkIG9mZiB5ZXQuIFRoZSBpZCB3aWxsIHJlbWFpbiBpbiB0aGUgcXVldWUsIGJ1dCBiZWNhdXNlXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIHRhc2ssIGl0IHdpbGwgYmUgZHJvcHBlZCBvbmNlIGl0J3MgdGltZSB0byBleGVjdXRlIGl0LlxuICAgICAgICAgICAgZGVsZXRlIHRoaXMudGFza3NbaWRdO1xuICAgICAgICAgICAgY29uc3QgY2FuY2VsID0gdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB0YXNrcyB0aGF0IHdlIG5lZWQgdG8gcHJvY2VzcyBiZWZvcmUgYWN0dWFsbHkgcHJvY2Vzc2luZyB0aGVtLiBUaGlzXG4gICAgICAgICAgICAvLyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgcmVjZWl2aW5nIG1lc3NhZ2VzLCBhbmQgaW4gcGFydGljdWxhcixcbiAgICAgICAgICAgIC8vIDxjYW5jZWw+IG1lc3NhZ2VzLiBTb21lIHRhc2tzIG1heSB0YWtlIGEgd2hpbGUgaW4gdGhlIHdvcmtlciB0aHJlYWQsIHNvIGJlZm9yZVxuICAgICAgICAgICAgLy8gZXhlY3V0aW5nIHRoZSBuZXh0IHRhc2sgaW4gb3VyIHF1ZXVlLCBwb3N0TWVzc2FnZSBwcmVlbXB0cyB0aGlzIGFuZCA8Y2FuY2VsPlxuICAgICAgICAgICAgLy8gbWVzc2FnZXMgY2FuIGJlIHByb2Nlc3NlZC4gV2UncmUgdXNpbmcgYSBNZXNzYWdlQ2hhbm5lbCBvYmplY3QgdG8gZ2V0IHRocm90dGxlIHRoZVxuICAgICAgICAgICAgLy8gcHJvY2VzcygpIGZsb3cgdG8gb25lIGF0IGEgdGltZS5cbiAgICAgICAgICAgIHRoaXMudGFza3NbaWRdID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMudGFza1F1ZXVlLnB1c2goaWQpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VyLnRyaWdnZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3MoKSB7XG4gICAgICAgIGlmICghdGhpcy50YXNrUXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRhc2tRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBjb25zdCB0YXNrID0gdGhpcy50YXNrc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnRhc2tzW2lkXTtcbiAgICAgICAgLy8gU2NoZWR1bGUgYW5vdGhlciBwcm9jZXNzIGNhbGwgaWYgd2Uga25vdyB0aGVyZSdzIG1vcmUgdG8gcHJvY2VzcyBfYmVmb3JlXyBpbnZva2luZyB0aGVcbiAgICAgICAgLy8gY3VycmVudCB0YXNrLiBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IHByb2Nlc3NpbmcgY29udGludWVzIGV2ZW4gaWYgdGhlIGN1cnJlbnQgdGFza1xuICAgICAgICAvLyBkb2Vzbid0IGV4ZWN1dGUgc3VjY2Vzc2Z1bGx5LlxuICAgICAgICBpZiAodGhpcy50YXNrUXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZXIudHJpZ2dlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFzaykge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHRhc2sgSUQgZG9lc24ndCBoYXZlIGFzc29jaWF0ZWQgdGFzayBkYXRhIGFueW1vcmUsIGl0IHdhcyBjYW5jZWxlZC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXNrLnR5cGUgPT09ICc8cmVzcG9uc2U+Jykge1xuICAgICAgICAgICAgLy8gVGhlIGRvbmUoKSBmdW5jdGlvbiBpbiB0aGUgY291bnRlcnBhcnQgaGFzIGJlZW4gY2FsbGVkLCBhbmQgd2UgYXJlIG5vd1xuICAgICAgICAgICAgLy8gZmlyaW5nIHRoZSBjYWxsYmFjayBpbiB0aGUgb3JpZ2luYXRpbmcgYWN0b3IsIGlmIHRoZXJlIGlzIG9uZS5cbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGdldCBhIHJlc3BvbnNlLCBidXQgZG9uJ3QgaGF2ZSBhIGNhbGxiYWNrLCB0aGUgcmVxdWVzdCB3YXMgY2FuY2VsZWQuXG4gICAgICAgICAgICAgICAgaWYgKHRhc2suZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGVzZXJpYWxpemUodGFzay5lcnJvcikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGRlc2VyaWFsaXplKHRhc2suZGF0YSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSB0YXNrLmhhc0NhbGxiYWNrID8gKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBidWZmZXJzOiBBcnJheTxUcmFuc2ZlcmFibGU+ID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJzxyZXNwb25zZT4nLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBJZDogdGhpcy5tYXBJZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVyciA/IHNlcmlhbGl6ZShlcnIpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogc2VyaWFsaXplKGRhdGEsIGJ1ZmZlcnMpXG4gICAgICAgICAgICAgICAgfSwgYnVmZmVycyk7XG4gICAgICAgICAgICB9IDogKF8pID0+IHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IChkZXNlcmlhbGl6ZSh0YXNrLmRhdGEpOiBhbnkpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50W3Rhc2sudHlwZV0pIHtcbiAgICAgICAgICAgICAgICAvLyB0YXNrLnR5cGUgPT0gJ2xvYWRUaWxlJywgJ3JlbW92ZVRpbGUnLCBldGMuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB0aGlzLnBhcmVudFt0YXNrLnR5cGVdKHRhc2suc291cmNlTWFwSWQsIHBhcmFtcywgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIHRhc2sudHlwZSA9PSBzb3VyY2V0eXBlLm1ldGhvZFxuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0YXNrLnR5cGUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY29wZSA9ICh0aGlzLnBhcmVudDogYW55KS5nZXRXb3JrZXJTb3VyY2UodGFzay5zb3VyY2VNYXBJZCwga2V5c1swXSwgcGFyYW1zLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBzY29wZVtrZXlzWzFdXShwYXJhbXMsIGRvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBObyBmdW5jdGlvbiB3YXMgZm91bmQuXG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uICR7dGFzay50eXBlfWApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFjb21wbGV0ZWQgJiYgY2FsbGJhY2sgJiYgY2FsbGJhY2suY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3dzIGNhbmNlbGluZyB0aGUgdGFzayBhcyBsb25nIGFzIGl0IGhhc24ndCBiZWVuIGNvbXBsZXRlZCB5ZXQuXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdID0gY2FsbGJhY2suY2FuY2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlLCBmYWxzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBY3RvcjtcbiIsImV4cG9ydCB7IGdldFVSTCwgZ2V0VGlsZUJCb3gsIGdldE1lcmNDb29yZHMgfTtcblxuXG4vKipcbiAqIGdldFVSTFxuICpcbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgYmFzZVVybCAgQmFzZSB1cmwgb2YgdGhlIFdNUyBzZXJ2ZXJcbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgbGF5ZXIgICAgTGF5ZXIgbmFtZVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB4ICAgICAgICBUaWxlIGNvb3JkaW5hdGUgeFxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB5ICAgICAgICBUaWxlIGNvb3JkaW5hdGUgeVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB6ICAgICAgICBUaWxlIHpvb21cbiAqIEBwYXJhbSAgICB7T2JqZWN0fSAgW29wdGlvbnNdXG4gKiBAcGFyYW0gICAge1N0cmluZ30gIFtvcHRpb25zLmZvcm1hdD0naW1hZ2UvcG5nJ11cbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgW29wdGlvbnMuc2VydmljZT0nV01TJ11cbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgW29wdGlvbnMudmVyc2lvbj0nMS4xLjEnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy5yZXF1ZXN0PSdHZXRNYXAnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy5zcnM9J0VQU0c6Mzg1NyddXG4gKiBAcGFyYW0gICAge051bWJlcn0gIFtvcHRpb25zLndpZHRoPScyNTYnXVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICBbb3B0aW9ucy5oZWlnaHQ9JzI1NiddXG4gKiBAcmV0dXJucyAge1N0cmluZ30gIHVybFxuICogQGV4YW1wbGVcbiAqIHZhciBiYXNlVXJsID0gJ2h0dHA6Ly9nZW9kYXRhLnN0YXRlLm5qLnVzL2ltYWdlcnl3bXMvTmF0dXJhbDIwMTUnO1xuICogdmFyIGxheWVyID0gJ05hdHVyYWwyMDE1JztcbiAqIHZhciB1cmwgPSB3aG9vdHMuZ2V0VVJMKGJhc2VVcmwsIGxheWVyLCAxNTQzMDgsIDE5NzE2NywgMTkpO1xuICovXG5mdW5jdGlvbiBnZXRVUkwoYmFzZVVybCwgbGF5ZXIsIHgsIHksIHosIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHZhciB1cmwgPSBiYXNlVXJsICsgJz8nICsgW1xuICAgICAgICAnYmJveD0nICAgICsgZ2V0VGlsZUJCb3goeCwgeSwgeiksXG4gICAgICAgICdmb3JtYXQ9JyAgKyAob3B0aW9ucy5mb3JtYXQgfHwgJ2ltYWdlL3BuZycpLFxuICAgICAgICAnc2VydmljZT0nICsgKG9wdGlvbnMuc2VydmljZSB8fCAnV01TJyksXG4gICAgICAgICd2ZXJzaW9uPScgKyAob3B0aW9ucy52ZXJzaW9uIHx8ICcxLjEuMScpLFxuICAgICAgICAncmVxdWVzdD0nICsgKG9wdGlvbnMucmVxdWVzdCB8fCAnR2V0TWFwJyksXG4gICAgICAgICdzcnM9JyAgICAgKyAob3B0aW9ucy5zcnMgfHwgJ0VQU0c6Mzg1NycpLFxuICAgICAgICAnd2lkdGg9JyAgICsgKG9wdGlvbnMud2lkdGggfHwgMjU2KSxcbiAgICAgICAgJ2hlaWdodD0nICArIChvcHRpb25zLmhlaWdodCB8fCAyNTYpLFxuICAgICAgICAnbGF5ZXJzPScgICsgbGF5ZXJcbiAgICBdLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiB1cmw7XG59XG5cblxuLyoqXG4gKiBnZXRUaWxlQkJveFxuICpcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeCAgVGlsZSBjb29yZGluYXRlIHhcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeSAgVGlsZSBjb29yZGluYXRlIHlcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeiAgVGlsZSB6b29tXG4gKiBAcmV0dXJucyAge1N0cmluZ30gIFN0cmluZyBvZiB0aGUgYm91bmRpbmcgYm94XG4gKi9cbmZ1bmN0aW9uIGdldFRpbGVCQm94KHgsIHksIHopIHtcbiAgICAvLyBmb3IgR29vZ2xlL09TTSB0aWxlIHNjaGVtZSB3ZSBuZWVkIHRvIGFsdGVyIHRoZSB5XG4gICAgeSA9IChNYXRoLnBvdygyLCB6KSAtIHkgLSAxKTtcblxuICAgIHZhciBtaW4gPSBnZXRNZXJjQ29vcmRzKHggKiAyNTYsIHkgKiAyNTYsIHopLFxuICAgICAgICBtYXggPSBnZXRNZXJjQ29vcmRzKCh4ICsgMSkgKiAyNTYsICh5ICsgMSkgKiAyNTYsIHopO1xuXG4gICAgcmV0dXJuIG1pblswXSArICcsJyArIG1pblsxXSArICcsJyArIG1heFswXSArICcsJyArIG1heFsxXTtcbn1cblxuXG4vKipcbiAqIGdldE1lcmNDb29yZHNcbiAqXG4gKiBAcGFyYW0gICAge051bWJlcn0gIHggIFBpeGVsIGNvb3JkaW5hdGUgeFxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB5ICBQaXhlbCBjb29yZGluYXRlIHlcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeiAgVGlsZSB6b29tXG4gKiBAcmV0dXJucyAge0FycmF5fSAgIFt4LCB5XVxuICovXG5mdW5jdGlvbiBnZXRNZXJjQ29vcmRzKHgsIHksIHopIHtcbiAgICB2YXIgcmVzb2x1dGlvbiA9ICgyICogTWF0aC5QSSAqIDYzNzgxMzcgLyAyNTYpIC8gTWF0aC5wb3coMiwgeiksXG4gICAgICAgIG1lcmNfeCA9ICh4ICogcmVzb2x1dGlvbiAtIDIgKiBNYXRoLlBJICAqIDYzNzgxMzcgLyAyLjApLFxuICAgICAgICBtZXJjX3kgPSAoeSAqIHJlc29sdXRpb24gLSAyICogTWF0aC5QSSAgKiA2Mzc4MTM3IC8gMi4wKTtcblxuICAgIHJldHVybiBbbWVyY194LCBtZXJjX3ldO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdCBmcm9tICcuL2xuZ19sYXQnO1xuXG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi9sbmdfbGF0JztcblxuLyoqXG4gKiBBIGBMbmdMYXRCb3VuZHNgIG9iamVjdCByZXByZXNlbnRzIGEgZ2VvZ3JhcGhpY2FsIGJvdW5kaW5nIGJveCxcbiAqIGRlZmluZWQgYnkgaXRzIHNvdXRod2VzdCBhbmQgbm9ydGhlYXN0IHBvaW50cyBpbiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlLlxuICpcbiAqIElmIG5vIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLCBhIGBudWxsYCBib3VuZGluZyBib3ggaXMgY3JlYXRlZC5cbiAqXG4gKiBOb3RlIHRoYXQgYW55IE1hcGJveCBHTCBtZXRob2QgdGhhdCBhY2NlcHRzIGEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IGFzIGFuIGFyZ3VtZW50IG9yIG9wdGlvblxuICogY2FuIGFsc28gYWNjZXB0IGFuIGBBcnJheWAgb2YgdHdvIHtAbGluayBMbmdMYXRMaWtlfSBjb25zdHJ1Y3RzIGFuZCB3aWxsIHBlcmZvcm0gYW4gaW1wbGljaXQgY29udmVyc2lvbi5cbiAqIFRoaXMgZmxleGlibGUgdHlwZSBpcyBkb2N1bWVudGVkIGFzIHtAbGluayBMbmdMYXRCb3VuZHNMaWtlfS5cbiAqXG4gKiBAcGFyYW0ge0xuZ0xhdExpa2V9IFtzd10gVGhlIHNvdXRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gW25lXSBUaGUgbm9ydGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICogQGV4YW1wbGVcbiAqIHZhciBzdyA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk4NzYsIDQwLjc2NjEpO1xuICogdmFyIG5lID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTM5NywgNDAuODAwMik7XG4gKiB2YXIgbGxiID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhzdywgbmUpO1xuICovXG5jbGFzcyBMbmdMYXRCb3VuZHMge1xuICAgIF9uZTogTG5nTGF0O1xuICAgIF9zdzogTG5nTGF0O1xuXG4gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyB0b28gZmxleGlibGUgdG8gdHlwZS4gSXQgc2hvdWxkIG5vdCBiZSBzbyBmbGV4aWJsZS5cbiAgICBjb25zdHJ1Y3RvcihzdzogYW55LCBuZTogYW55KSB7XG4gICAgICAgIGlmICghc3cpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSBlbHNlIGlmIChuZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTb3V0aFdlc3Qoc3cpLnNldE5vcnRoRWFzdChuZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3cubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFNvdXRoV2VzdChbc3dbMF0sIHN3WzFdXSkuc2V0Tm9ydGhFYXN0KFtzd1syXSwgc3dbM11dKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U291dGhXZXN0KHN3WzBdKS5zZXROb3J0aEVhc3Qoc3dbMV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3hcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gbmVcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXROb3J0aEVhc3QobmU6IExuZ0xhdExpa2UpIHtcbiAgICAgICAgdGhpcy5fbmUgPSBuZSBpbnN0YW5jZW9mIExuZ0xhdCA/IG5ldyBMbmdMYXQobmUubG5nLCBuZS5sYXQpIDogTG5nTGF0LmNvbnZlcnQobmUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHNvdXRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveFxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBzd1xuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFNvdXRoV2VzdChzdzogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9zdyA9IHN3IGluc3RhbmNlb2YgTG5nTGF0ID8gbmV3IExuZ0xhdChzdy5sbmcsIHN3LmxhdCkgOiBMbmdMYXQuY29udmVydChzdyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dGVuZCB0aGUgYm91bmRzIHRvIGluY2x1ZGUgYSBnaXZlbiBMbmdMYXQgb3IgTG5nTGF0Qm91bmRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXR8TG5nTGF0Qm91bmRzfSBvYmogb2JqZWN0IHRvIGV4dGVuZCB0b1xuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IGB0aGlzYFxuICAgICAqL1xuICAgIGV4dGVuZChvYmo6IExuZ0xhdCB8IExuZ0xhdEJvdW5kcykge1xuICAgICAgICBjb25zdCBzdyA9IHRoaXMuX3N3LFxuICAgICAgICAgICAgbmUgPSB0aGlzLl9uZTtcbiAgICAgICAgbGV0IHN3MiwgbmUyO1xuXG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBMbmdMYXQpIHtcbiAgICAgICAgICAgIHN3MiA9IG9iajtcbiAgICAgICAgICAgIG5lMiA9IG9iajtcblxuICAgICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIExuZ0xhdEJvdW5kcykge1xuICAgICAgICAgICAgc3cyID0gb2JqLl9zdztcbiAgICAgICAgICAgIG5lMiA9IG9iai5fbmU7XG5cbiAgICAgICAgICAgIGlmICghc3cyIHx8ICFuZTIpIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5ldmVyeShBcnJheS5pc0FycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQoTG5nTGF0Qm91bmRzLmNvbnZlcnQob2JqKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKExuZ0xhdC5jb252ZXJ0KG9iaikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdyAmJiAhbmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N3ID0gbmV3IExuZ0xhdChzdzIubG5nLCBzdzIubGF0KTtcbiAgICAgICAgICAgIHRoaXMuX25lID0gbmV3IExuZ0xhdChuZTIubG5nLCBuZTIubGF0KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3cubG5nID0gTWF0aC5taW4oc3cyLmxuZywgc3cubG5nKTtcbiAgICAgICAgICAgIHN3LmxhdCA9IE1hdGgubWluKHN3Mi5sYXQsIHN3LmxhdCk7XG4gICAgICAgICAgICBuZS5sbmcgPSBNYXRoLm1heChuZTIubG5nLCBuZS5sbmcpO1xuICAgICAgICAgICAgbmUubGF0ID0gTWF0aC5tYXgobmUyLmxhdCwgbmUubGF0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlIGVxdWlkaXN0YW50IGZyb20gdGhlIGJvdW5kaW5nIGJveCdzIGNvcm5lcnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgYm91bmRpbmcgYm94J3MgY2VudGVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsYiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSk7XG4gICAgICogbGxiLmdldENlbnRlcigpOyAvLyA9IExuZ0xhdCB7bG5nOiAtNzMuOTYzNjUsIGxhdDogNDAuNzgzMTV9XG4gICAgICovXG4gICAgZ2V0Q2VudGVyKCk6IExuZ0xhdCB7XG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0KCh0aGlzLl9zdy5sbmcgKyB0aGlzLl9uZS5sbmcpIC8gMiwgKHRoaXMuX3N3LmxhdCArIHRoaXMuX25lLmxhdCkgLyAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzb3V0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgc291dGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldFNvdXRoV2VzdCgpOiBMbmdMYXQgeyByZXR1cm4gdGhpcy5fc3c7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgbm9ydGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0Tm9ydGhFYXN0KCk6IExuZ0xhdCB7IHJldHVybiB0aGlzLl9uZTsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBub3J0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIG5vcnRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXROb3J0aFdlc3QoKTogTG5nTGF0IHsgcmV0dXJuIG5ldyBMbmdMYXQodGhpcy5nZXRXZXN0KCksIHRoaXMuZ2V0Tm9ydGgoKSk7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgc291dGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBzb3V0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0U291dGhFYXN0KCk6IExuZ0xhdCB7IHJldHVybiBuZXcgTG5nTGF0KHRoaXMuZ2V0RWFzdCgpLCB0aGlzLmdldFNvdXRoKCkpOyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIHdlc3QgZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSB3ZXN0IGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRXZXN0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9zdy5sbmc7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgc291dGggZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBzb3V0aCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0U291dGgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3N3LmxhdDsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBlYXN0IGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgZWFzdCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0RWFzdCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fbmUubG5nOyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIG5vcnRoIGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbm9ydGggZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldE5vcnRoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9uZS5sYXQ7IH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCByZXByZXNlbnRlZCBhcyBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gVGhlIGJvdW5kaW5nIGJveCByZXByZXNlbnRlZCBhcyBhbiBhcnJheSwgY29uc2lzdGluZyBvZiB0aGVcbiAgICAgKiAgIHNvdXRod2VzdCBhbmQgbm9ydGhlYXN0IGNvb3JkaW5hdGVzIG9mIHRoZSBib3VuZGluZyByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbnVtYmVycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbGIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKFstNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl0pO1xuICAgICAqIGxsYi50b0FycmF5KCk7IC8vID0gW1stNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl1dXG4gICAgICovXG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLl9zdy50b0FycmF5KCksIHRoaXMuX25lLnRvQXJyYXkoKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBib3VuZGluZyBib3ggcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYm91bmRpbmcgYm94IHJlcHJlc2VudHMgYXMgYSBzdHJpbmcgb2YgdGhlIGZvcm1hdFxuICAgICAqICAgYCdMbmdMYXRCb3VuZHMoTG5nTGF0KGxuZywgbGF0KSwgTG5nTGF0KGxuZywgbGF0KSknYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbGIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKFstNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl0pO1xuICAgICAqIGxsYi50b1N0cmluZygpOyAvLyA9IFwiTG5nTGF0Qm91bmRzKExuZ0xhdCgtNzMuOTg3NiwgNDAuNzY2MSksIExuZ0xhdCgtNzMuOTM5NywgNDAuODAwMikpXCJcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBMbmdMYXRCb3VuZHMoJHt0aGlzLl9zdy50b1N0cmluZygpfSwgJHt0aGlzLl9uZS50b1N0cmluZygpfSlgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBib3VuZGluZyBib3ggaXMgYW4gZW1wdHkvYG51bGxgLXR5cGUgYm94LlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYm91bmRzIGhhdmUgYmVlbiBkZWZpbmVkLCBvdGhlcndpc2UgZmFsc2UuXG4gICAgICovXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5fc3cgJiYgdGhpcy5fbmUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGFuIGFycmF5IHRvIGEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0LlxuICAgICAqXG4gICAgICogSWYgYSBgTG5nTGF0Qm91bmRzYCBvYmplY3QgaXMgcGFzc2VkIGluLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBJbnRlcm5hbGx5LCB0aGUgZnVuY3Rpb24gY2FsbHMgYExuZ0xhdCNjb252ZXJ0YCB0byBjb252ZXJ0IGFycmF5cyB0byBgTG5nTGF0YCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc0xpa2V9IGlucHV0IEFuIGFycmF5IG9mIHR3byBjb29yZGluYXRlcyB0byBjb252ZXJ0LCBvciBhIGBMbmdMYXRCb3VuZHNgIG9iamVjdCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMge0xuZ0xhdEJvdW5kc30gQSBuZXcgYExuZ0xhdEJvdW5kc2Agb2JqZWN0LCBpZiBhIGNvbnZlcnNpb24gb2NjdXJyZWQsIG9yIHRoZSBvcmlnaW5hbCBgTG5nTGF0Qm91bmRzYCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYXJyID0gW1stNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl1dO1xuICAgICAqIHZhciBsbGIgPSBtYXBib3hnbC5MbmdMYXRCb3VuZHMuY29udmVydChhcnIpO1xuICAgICAqIGxsYjsgICAvLyA9IExuZ0xhdEJvdW5kcyB7X3N3OiBMbmdMYXQge2xuZzogLTczLjk4NzYsIGxhdDogNDAuNzY2MX0sIF9uZTogTG5nTGF0IHtsbmc6IC03My45Mzk3LCBsYXQ6IDQwLjgwMDJ9fVxuICAgICAqL1xuICAgIHN0YXRpYyBjb252ZXJ0KGlucHV0OiBMbmdMYXRCb3VuZHNMaWtlKTogTG5nTGF0Qm91bmRzIHtcbiAgICAgICAgaWYgKCFpbnB1dCB8fCBpbnB1dCBpbnN0YW5jZW9mIExuZ0xhdEJvdW5kcykgcmV0dXJuIGlucHV0O1xuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdEJvdW5kcyhpbnB1dCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEEge0BsaW5rIExuZ0xhdEJvdW5kc30gb2JqZWN0LCBhbiBhcnJheSBvZiB7QGxpbmsgTG5nTGF0TGlrZX0gb2JqZWN0cyBpbiBbc3csIG5lXSBvcmRlcixcbiAqIG9yIGFuIGFycmF5IG9mIG51bWJlcnMgaW4gW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gb3JkZXIuXG4gKlxuICogQHR5cGVkZWYge0xuZ0xhdEJvdW5kcyB8IFtMbmdMYXRMaWtlLCBMbmdMYXRMaWtlXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdfSBMbmdMYXRCb3VuZHNMaWtlXG4gKiBAZXhhbXBsZVxuICogdmFyIHYxID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhcbiAqICAgbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTg3NiwgNDAuNzY2MSksXG4gKiAgIG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjkzOTcsIDQwLjgwMDIpXG4gKiApO1xuICogdmFyIHYyID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhbLTczLjk4NzYsIDQwLjc2NjFdLCBbLTczLjkzOTcsIDQwLjgwMDJdKVxuICogdmFyIHYzID0gW1stNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl1dO1xuICovXG5leHBvcnQgdHlwZSBMbmdMYXRCb3VuZHNMaWtlID0gTG5nTGF0Qm91bmRzIHwgW0xuZ0xhdExpa2UsIExuZ0xhdExpa2VdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCBkZWZhdWx0IExuZ0xhdEJvdW5kcztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7d3JhcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi9sbmdfbGF0X2JvdW5kcyc7XG5cbi8qKlxuICogQSBgTG5nTGF0YCBvYmplY3QgcmVwcmVzZW50cyBhIGdpdmVuIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgY29vcmRpbmF0ZSwgbWVhc3VyZWQgaW4gZGVncmVlcy5cbiAqXG4gKiBNYXBib3ggR0wgdXNlcyBsb25naXR1ZGUsIGxhdGl0dWRlIGNvb3JkaW5hdGUgb3JkZXIgKGFzIG9wcG9zZWQgdG8gbGF0aXR1ZGUsIGxvbmdpdHVkZSkgdG8gbWF0Y2ggR2VvSlNPTi5cbiAqXG4gKiBOb3RlIHRoYXQgYW55IE1hcGJveCBHTCBtZXRob2QgdGhhdCBhY2NlcHRzIGEgYExuZ0xhdGAgb2JqZWN0IGFzIGFuIGFyZ3VtZW50IG9yIG9wdGlvblxuICogY2FuIGFsc28gYWNjZXB0IGFuIGBBcnJheWAgb2YgdHdvIG51bWJlcnMgYW5kIHdpbGwgcGVyZm9ybSBhbiBpbXBsaWNpdCBjb252ZXJzaW9uLlxuICogVGhpcyBmbGV4aWJsZSB0eXBlIGlzIGRvY3VtZW50ZWQgYXMge0BsaW5rIExuZ0xhdExpa2V9LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsbmcgTG9uZ2l0dWRlLCBtZWFzdXJlZCBpbiBkZWdyZWVzLlxuICogQHBhcmFtIHtudW1iZXJ9IGxhdCBMYXRpdHVkZSwgbWVhc3VyZWQgaW4gZGVncmVlcy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45NzQ5LCA0MC43NzM2KTtcbiAqIEBzZWUgW0dldCBjb29yZGluYXRlcyBvZiB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9tb3VzZS1wb3NpdGlvbi8pXG4gKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAvKVxuICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAqIEBzZWUgW0NyZWF0ZSBhIHRpbWVsaW5lIGFuaW1hdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90aW1lbGluZS1hbmltYXRpb24vKVxuICovXG5jbGFzcyBMbmdMYXQge1xuICAgIGxuZzogbnVtYmVyO1xuICAgIGxhdDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IobG5nOiBudW1iZXIsIGxhdDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChpc05hTihsbmcpIHx8IGlzTmFOKGxhdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBMbmdMYXQgb2JqZWN0OiAoJHtsbmd9LCAke2xhdH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sbmcgPSArbG5nO1xuICAgICAgICB0aGlzLmxhdCA9ICtsYXQ7XG4gICAgICAgIGlmICh0aGlzLmxhdCA+IDkwIHx8IHRoaXMubGF0IDwgLTkwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTG5nTGF0IGxhdGl0dWRlIHZhbHVlOiBtdXN0IGJlIGJldHdlZW4gLTkwIGFuZCA5MCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBgTG5nTGF0YCBvYmplY3Qgd2hvc2UgbG9uZ2l0dWRlIGlzIHdyYXBwZWQgdG8gdGhlIHJhbmdlICgtMTgwLCAxODApLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIHdyYXBwZWQgYExuZ0xhdGAgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgyODYuMDI1MSwgNDAuNzczNik7XG4gICAgICogdmFyIHdyYXBwZWQgPSBsbC53cmFwKCk7XG4gICAgICogd3JhcHBlZC5sbmc7IC8vID0gLTczLjk3NDlcbiAgICAgKi9cbiAgICB3cmFwKCkge1xuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdCh3cmFwKHRoaXMubG5nLCAtMTgwLCAxODApLCB0aGlzLmxhdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8bnVtYmVyPn0gVGhlIGNvb3JkaW5hdGVzIHJlcHJlc2V0ZWQgYXMgYW4gYXJyYXkgb2YgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbCA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk3NDksIDQwLjc3MzYpO1xuICAgICAqIGxsLnRvQXJyYXkoKTsgLy8gPSBbLTczLjk3NDksIDQwLjc3MzZdXG4gICAgICovXG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLmxuZywgdGhpcy5sYXRdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvb3JkaW5hdGVzIHJlcHJlc2VudCBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb29yZGluYXRlcyByZXByZXNlbnRlZCBhcyBhIHN0cmluZyBvZiB0aGUgZm9ybWF0IGAnTG5nTGF0KGxuZywgbGF0KSdgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTc0OSwgNDAuNzczNik7XG4gICAgICogbGwudG9TdHJpbmcoKTsgLy8gPSBcIkxuZ0xhdCgtNzMuOTc0OSwgNDAuNzczNilcIlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYExuZ0xhdCgke3RoaXMubG5nfSwgJHt0aGlzLmxhdH0pYDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYExuZ0xhdEJvdW5kc2AgZnJvbSB0aGUgY29vcmRpbmF0ZXMgZXh0ZW5kZWQgYnkgYSBnaXZlbiBgcmFkaXVzYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXVzPTBdIERpc3RhbmNlIGluIG1ldGVycyBmcm9tIHRoZSBjb29yZGluYXRlcyB0byBleHRlbmQgdGhlIGJvdW5kcy5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSBBIG5ldyBgTG5nTGF0Qm91bmRzYCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb29yZGluYXRlcyBleHRlbmRlZCBieSB0aGUgYHJhZGl1c2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45NzQ5LCA0MC43NzM2KTtcbiAgICAgKiBsbC50b0JvdW5kcygxMDApLnRvQXJyYXkoKTsgLy8gPSBbWy03My45NzUwMTg2MjE0MTMyOCwgNDAuNzczNTEwMTY4NDcyMjldLCBbLTczLjk3NDc4MTM3ODU4NjczLCA0MC43NzM2ODk4MzE1Mjc3MV1dXG4gICAgICovXG4gICAgdG9Cb3VuZHMocmFkaXVzPzogbnVtYmVyID0gMCkge1xuICAgICAgICBjb25zdCBlYXJ0aENpcmN1bWZlcmVuY2VJbk1ldGVyc0F0RXF1YXRvciA9IDQwMDc1MDE3O1xuICAgICAgICBjb25zdCBsYXRBY2N1cmFjeSA9IDM2MCAqIHJhZGl1cyAvIGVhcnRoQ2lyY3VtZmVyZW5jZUluTWV0ZXJzQXRFcXVhdG9yLFxuICAgICAgICAgICAgbG5nQWNjdXJhY3kgPSBsYXRBY2N1cmFjeSAvIE1hdGguY29zKChNYXRoLlBJIC8gMTgwKSAqIHRoaXMubGF0KTtcblxuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdEJvdW5kcyhuZXcgTG5nTGF0KHRoaXMubG5nIC0gbG5nQWNjdXJhY3ksIHRoaXMubGF0IC0gbGF0QWNjdXJhY3kpLFxuICAgICAgICAgICAgbmV3IExuZ0xhdCh0aGlzLmxuZyArIGxuZ0FjY3VyYWN5LCB0aGlzLmxhdCArIGxhdEFjY3VyYWN5KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgb3IgYW4gb2JqZWN0IHdpdGggYGxuZ2AgYW5kIGBsYXRgIG9yIGBsb25gIGFuZCBgbGF0YCBwcm9wZXJ0aWVzXG4gICAgICogdG8gYSBgTG5nTGF0YCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBJZiBhIGBMbmdMYXRgIG9iamVjdCBpcyBwYXNzZWQgaW4sIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gaW5wdXQgQW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgb3Igb2JqZWN0IHRvIGNvbnZlcnQsIG9yIGEgYExuZ0xhdGAgb2JqZWN0IHRvIHJldHVybi5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBBIG5ldyBgTG5nTGF0YCBvYmplY3QsIGlmIGEgY29udmVyc2lvbiBvY2N1cnJlZCwgb3IgdGhlIG9yaWdpbmFsIGBMbmdMYXRgIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBhcnIgPSBbLTczLjk3NDksIDQwLjc3MzZdO1xuICAgICAqIHZhciBsbCA9IG1hcGJveGdsLkxuZ0xhdC5jb252ZXJ0KGFycik7XG4gICAgICogbGw7ICAgLy8gPSBMbmdMYXQge2xuZzogLTczLjk3NDksIGxhdDogNDAuNzczNn1cbiAgICAgKi9cbiAgICBzdGF0aWMgY29udmVydChpbnB1dDogTG5nTGF0TGlrZSk6IExuZ0xhdCB7XG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIExuZ0xhdCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSAmJiAoaW5wdXQubGVuZ3RoID09PSAyIHx8IGlucHV0Lmxlbmd0aCA9PT0gMykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTG5nTGF0KE51bWJlcihpbnB1dFswXSksIE51bWJlcihpbnB1dFsxXSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQoXG4gICAgICAgICAgICAgICAgLy8gZmxvdyBjYW4ndCByZWZpbmUgdGhpcyB0byBoYXZlIG9uZSBvZiBsbmcgb3IgbGF0LCBzbyB3ZSBoYXZlIHRvIGNhc3QgdG8gYW55XG4gICAgICAgICAgICAgICAgTnVtYmVyKCdsbmcnIGluIGlucHV0ID8gKGlucHV0OiBhbnkpLmxuZyA6IChpbnB1dDogYW55KS5sb24pLFxuICAgICAgICAgICAgICAgIE51bWJlcihpbnB1dC5sYXQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImBMbmdMYXRMaWtlYCBhcmd1bWVudCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIExuZ0xhdCBpbnN0YW5jZSwgYW4gb2JqZWN0IHtsbmc6IDxsbmc+LCBsYXQ6IDxsYXQ+fSwgYW4gb2JqZWN0IHtsb246IDxsbmc+LCBsYXQ6IDxsYXQ+fSwgb3IgYW4gYXJyYXkgb2YgWzxsbmc+LCA8bGF0Pl1cIik7XG4gICAgfVxufVxuXG4vKipcbiAqIEEge0BsaW5rIExuZ0xhdH0gb2JqZWN0LCBhbiBhcnJheSBvZiB0d28gbnVtYmVycyByZXByZXNlbnRpbmcgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSxcbiAqIG9yIGFuIG9iamVjdCB3aXRoIGBsbmdgIGFuZCBgbGF0YCBvciBgbG9uYCBhbmQgYGxhdGAgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZWRlZiB7TG5nTGF0IHwge2xuZzogbnVtYmVyLCBsYXQ6IG51bWJlcn0gfCB7bG9uOiBudW1iZXIsIGxhdDogbnVtYmVyfSB8IFtudW1iZXIsIG51bWJlcl19IExuZ0xhdExpa2VcbiAqIEBleGFtcGxlXG4gKiB2YXIgdjEgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC0xMjIuNDIwNjc5LCAzNy43NzI1MzcpO1xuICogdmFyIHYyID0gWy0xMjIuNDIwNjc5LCAzNy43NzI1MzddO1xuICogdmFyIHYzID0ge2xvbjogLTEyMi40MjA2NzksIGxhdDogMzcuNzcyNTM3fTtcbiAqL1xuZXhwb3J0IHR5cGUgTG5nTGF0TGlrZSA9IExuZ0xhdCB8IHtsbmc6IG51bWJlciwgbGF0OiBudW1iZXJ9IHwge2xvbjogbnVtYmVyLCBsYXQ6IG51bWJlcn0gfCBbbnVtYmVyLCBudW1iZXJdO1xuXG5leHBvcnQgZGVmYXVsdCBMbmdMYXQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB0eXBlIHtMbmdMYXRMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5cbi8qXG4gKiBUaGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgd29ybGQgaW4gbWV0ZXJzIGF0IHRoZSBlcXVhdG9yLlxuICovXG5jb25zdCBjaXJjdW1mZXJlbmNlQXRFcXVhdG9yID0gMiAqIE1hdGguUEkgKiA2Mzc4MTM3O1xuXG4vKlxuICogVGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIHdvcmxkIGluIG1ldGVycyBhdCB0aGUgZ2l2ZW4gbGF0aXR1ZGUuXG4gKi9cbmZ1bmN0aW9uIGNpcmN1bWZlcmVuY2VBdExhdGl0dWRlKGxhdGl0dWRlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gY2lyY3VtZmVyZW5jZUF0RXF1YXRvciAqIE1hdGguY29zKGxhdGl0dWRlICogTWF0aC5QSSAvIDE4MCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclhmcm9tTG5nKGxuZzogbnVtYmVyKSB7XG4gICAgcmV0dXJuICgxODAgKyBsbmcpIC8gMzYwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JZZnJvbUxhdChsYXQ6IG51bWJlcikge1xuICAgIHJldHVybiAoMTgwIC0gKDE4MCAvIE1hdGguUEkgKiBNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIGxhdCAqIE1hdGguUEkgLyAzNjApKSkpIC8gMzYwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JaZnJvbUFsdGl0dWRlKGFsdGl0dWRlOiBudW1iZXIsIGxhdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFsdGl0dWRlIC8gY2lyY3VtZmVyZW5jZUF0TGF0aXR1ZGUobGF0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxuZ0Zyb21NZXJjYXRvclgoeDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHggKiAzNjAgLSAxODA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRGcm9tTWVyY2F0b3JZKHk6IG51bWJlcikge1xuICAgIGNvbnN0IHkyID0gMTgwIC0geSAqIDM2MDtcbiAgICByZXR1cm4gMzYwIC8gTWF0aC5QSSAqIE1hdGguYXRhbihNYXRoLmV4cCh5MiAqIE1hdGguUEkgLyAxODApKSAtIDkwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWx0aXR1ZGVGcm9tTWVyY2F0b3JaKHo6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHogKiBjaXJjdW1mZXJlbmNlQXRMYXRpdHVkZShsYXRGcm9tTWVyY2F0b3JZKHkpKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIE1lcmNhdG9yIHNjYWxlIGZhY3RvciBmb3IgYSBnaXZlbiBsYXRpdHVkZSwgc2VlXG4gKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NZXJjYXRvcl9wcm9qZWN0aW9uI1NjYWxlX2ZhY3RvclxuICpcbiAqIEF0IHRoZSBlcXVhdG9yIHRoZSBzY2FsZSBmYWN0b3Igd2lsbCBiZSAxLCB3aGljaCBpbmNyZWFzZXMgYXQgaGlnaGVyIGxhdGl0dWRlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbGF0IExhdGl0dWRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBzY2FsZSBmYWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmNhdG9yU2NhbGUobGF0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gMSAvIE1hdGguY29zKGxhdCAqIE1hdGguUEkgLyAxODApO1xufVxuXG4vKipcbiAqIEEgYE1lcmNhdG9yQ29vcmRpbmF0ZWAgb2JqZWN0IHJlcHJlc2VudHMgYSBwcm9qZWN0ZWQgdGhyZWUgZGltZW5zaW9uYWwgcG9zaXRpb24uXG4gKlxuICogYE1lcmNhdG9yQ29vcmRpbmF0ZWAgdXNlcyB0aGUgd2ViIG1lcmNhdG9yIHByb2plY3Rpb24gKFtFUFNHOjM4NTddKGh0dHBzOi8vZXBzZy5pby8zODU3KSkgd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQgdW5pdHM6XG4gKiAtIHRoZSBzaXplIG9mIDEgdW5pdCBpcyB0aGUgd2lkdGggb2YgdGhlIHByb2plY3RlZCB3b3JsZCBpbnN0ZWFkIG9mIHRoZSBcIm1lcmNhdG9yIG1ldGVyXCJcbiAqIC0gdGhlIG9yaWdpbiBvZiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBpcyBhdCB0aGUgbm9ydGgtd2VzdCBjb3JuZXIgaW5zdGVhZCBvZiB0aGUgbWlkZGxlXG4gKlxuICogRm9yIGV4YW1wbGUsIGBNZXJjYXRvckNvb3JkaW5hdGUoMCwgMCwgMClgIGlzIHRoZSBub3J0aC13ZXN0IGNvcm5lciBvZiB0aGUgbWVyY2F0b3Igd29ybGQgYW5kXG4gKiBgTWVyY2F0b3JDb29yZGluYXRlKDEsIDEsIDApYCBpcyB0aGUgc291dGgtZWFzdCBjb3JuZXIuIElmIHlvdSBhcmUgZmFtaWxpYXIgd2l0aFxuICogW3ZlY3RvciB0aWxlc10oaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC92ZWN0b3ItdGlsZS1zcGVjKSBpdCBtYXkgYmUgaGVscGZ1bCB0byB0aGlua1xuICogb2YgdGhlIGNvb3JkaW5hdGUgc3BhY2UgYXMgdGhlIGAwLzAvMGAgdGlsZSB3aXRoIGFuIGV4dGVudCBvZiBgMWAuXG4gKlxuICogVGhlIGB6YCBkaW1lbnNpb24gb2YgYE1lcmNhdG9yQ29vcmRpbmF0ZWAgaXMgY29uZm9ybWFsLiBBIGN1YmUgaW4gdGhlIG1lcmNhdG9yIGNvb3JkaW5hdGUgc3BhY2Ugd291bGQgYmUgcmVuZGVyZWQgYXMgYSBjdWJlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSB4IGNvbXBvbmVudCBvZiB0aGUgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgeSBjb21wb25lbnQgb2YgdGhlIHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IHogVGhlIHogY29tcG9uZW50IG9mIHRoZSBwb3NpdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbnVsbElzbGFuZCA9IG5ldyBtYXBib3hnbC5NZXJjYXRvckNvb3JkaW5hdGUoMC41LCAwLjUsIDApO1xuICpcbiAqIEBzZWUgW0FkZCBhIGN1c3RvbSBzdHlsZSBsYXllcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jdXN0b20tc3R5bGUtbGF5ZXIvKVxuICovXG5jbGFzcyBNZXJjYXRvckNvb3JkaW5hdGUge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgejogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciA9IDApIHtcbiAgICAgICAgdGhpcy54ID0gK3g7XG4gICAgICAgIHRoaXMueSA9ICt5O1xuICAgICAgICB0aGlzLnogPSArejtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9qZWN0IGEgYExuZ0xhdGAgdG8gYSBgTWVyY2F0b3JDb29yZGluYXRlYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gbG5nTGF0TGlrZSBUaGUgbG9jYXRpb24gdG8gcHJvamVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWx0aXR1ZGUgVGhlIGFsdGl0dWRlIGluIG1ldGVycyBvZiB0aGUgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge01lcmNhdG9yQ29vcmRpbmF0ZX0gVGhlIHByb2plY3RlZCBtZXJjYXRvciBjb29yZGluYXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGNvb3JkID0gbWFwYm94Z2wuTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQoeyBsbmc6IDAsIGxhdDogMH0sIDApO1xuICAgICAqIGNvb3JkOyAvLyBNZXJjYXRvckNvb3JkaW5hdGUoMC41LCAwLjUsIDApXG4gICAgICovXG4gICAgc3RhdGljIGZyb21MbmdMYXQobG5nTGF0TGlrZTogTG5nTGF0TGlrZSwgYWx0aXR1ZGU6IG51bWJlciA9IDApIHtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gTG5nTGF0LmNvbnZlcnQobG5nTGF0TGlrZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNZXJjYXRvckNvb3JkaW5hdGUoXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JYZnJvbUxuZyhsbmdMYXQubG5nKSxcbiAgICAgICAgICAgICAgICBtZXJjYXRvcllmcm9tTGF0KGxuZ0xhdC5sYXQpLFxuICAgICAgICAgICAgICAgIG1lcmNhdG9yWmZyb21BbHRpdHVkZShhbHRpdHVkZSwgbG5nTGF0LmxhdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBMbmdMYXRgIGZvciB0aGUgY29vcmRpbmF0ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBgTG5nTGF0YCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgY29vcmQgPSBuZXcgbWFwYm94Z2wuTWVyY2F0b3JDb29yZGluYXRlKDAuNSwgMC41LCAwKTtcbiAgICAgKiB2YXIgbGF0TG5nID0gY29vcmQudG9MbmdMYXQoKTsgLy8gTG5nTGF0KDAsIDApXG4gICAgICovXG4gICAgdG9MbmdMYXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0KFxuICAgICAgICAgICAgICAgIGxuZ0Zyb21NZXJjYXRvclgodGhpcy54KSxcbiAgICAgICAgICAgICAgICBsYXRGcm9tTWVyY2F0b3JZKHRoaXMueSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFsdGl0dWRlIGluIG1ldGVycyBvZiB0aGUgY29vcmRpbmF0ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBhbHRpdHVkZSBpbiBtZXRlcnMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgY29vcmQgPSBuZXcgbWFwYm94Z2wuTWVyY2F0b3JDb29yZGluYXRlKDAsIDAsIDAuMDIpO1xuICAgICAqIGNvb3JkLnRvQWx0aXR1ZGUoKTsgLy8gNjkxNC4yODE5NTYyOTUzMzlcbiAgICAgKi9cbiAgICB0b0FsdGl0dWRlKCkge1xuICAgICAgICByZXR1cm4gYWx0aXR1ZGVGcm9tTWVyY2F0b3JaKHRoaXMueiwgdGhpcy55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkaXN0YW5jZSBvZiAxIG1ldGVyIGluIGBNZXJjYXRvckNvb3JkaW5hdGVgIHVuaXRzIGF0IHRoaXMgbGF0aXR1ZGUuXG4gICAgICpcbiAgICAgKiBGb3IgY29vcmRpbmF0ZXMgaW4gcmVhbCB3b3JsZCB1bml0cyB1c2luZyBtZXRlcnMsIHRoaXMgbmF0dXJhbGx5IHByb3ZpZGVzIHRoZSBzY2FsZVxuICAgICAqIHRvIHRyYW5zZm9ybSBpbnRvIGBNZXJjYXRvckNvb3JkaW5hdGVgcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IERpc3RhbmNlIG9mIDEgbWV0ZXIgaW4gYE1lcmNhdG9yQ29vcmRpbmF0ZWAgdW5pdHMuXG4gICAgICovXG4gICAgbWV0ZXJJbk1lcmNhdG9yQ29vcmRpbmF0ZVVuaXRzKCkge1xuICAgICAgICAvLyAxIG1ldGVyIC8gY2lyY3VtZmVyZW5jZSBhdCBlcXVhdG9yIGluIG1ldGVycyAqIE1lcmNhdG9yIHByb2plY3Rpb24gc2NhbGUgZmFjdG9yIGF0IHRoaXMgbGF0aXR1ZGVcbiAgICAgICAgcmV0dXJuIDEgLyBjaXJjdW1mZXJlbmNlQXRFcXVhdG9yICogbWVyY2F0b3JTY2FsZShsYXRGcm9tTWVyY2F0b3JZKHRoaXMueSkpO1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXJjYXRvckNvb3JkaW5hdGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldFRpbGVCQm94fSBmcm9tICdAbWFwYm94L3dob290cy1qcyc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBNZXJjYXRvckNvb3JkaW5hdGUgZnJvbSAnLi4vZ2VvL21lcmNhdG9yX2Nvb3JkaW5hdGUnO1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5leHBvcnQgY2xhc3MgQ2Fub25pY2FsVGlsZUlEIHtcbiAgICB6OiBudW1iZXI7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBrZXk6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KHogPj0gMCAmJiB6IDw9IDI1KTtcbiAgICAgICAgYXNzZXJ0KHggPj0gMCAmJiB4IDwgTWF0aC5wb3coMiwgeikpO1xuICAgICAgICBhc3NlcnQoeSA+PSAwICYmIHkgPCBNYXRoLnBvdygyLCB6KSk7XG4gICAgICAgIHRoaXMueiA9IHo7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHRoaXMua2V5ID0gY2FsY3VsYXRlS2V5KDAsIHosIHgsIHkpO1xuICAgIH1cblxuICAgIGVxdWFscyhpZDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnogPT09IGlkLnogJiYgdGhpcy54ID09PSBpZC54ICYmIHRoaXMueSA9PT0gaWQueTtcbiAgICB9XG5cbiAgICAvLyBnaXZlbiBhIGxpc3Qgb2YgdXJscywgY2hvb3NlIGEgdXJsIHRlbXBsYXRlIGFuZCByZXR1cm4gYSB0aWxlIFVSTFxuICAgIHVybCh1cmxzOiBBcnJheTxzdHJpbmc+LCBzY2hlbWU6ID9zdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYmJveCA9IGdldFRpbGVCQm94KHRoaXMueCwgdGhpcy55LCB0aGlzLnopO1xuICAgICAgICBjb25zdCBxdWFka2V5ID0gZ2V0UXVhZGtleSh0aGlzLnosIHRoaXMueCwgdGhpcy55KTtcblxuICAgICAgICByZXR1cm4gdXJsc1sodGhpcy54ICsgdGhpcy55KSAlIHVybHMubGVuZ3RoXVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3twcmVmaXh9JywgKHRoaXMueCAlIDE2KS50b1N0cmluZygxNikgKyAodGhpcy55ICUgMTYpLnRvU3RyaW5nKDE2KSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7en0nLCBTdHJpbmcodGhpcy56KSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7eH0nLCBTdHJpbmcodGhpcy54KSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7eX0nLCBTdHJpbmcoc2NoZW1lID09PSAndG1zJyA/IChNYXRoLnBvdygyLCB0aGlzLnopIC0gdGhpcy55IC0gMSkgOiB0aGlzLnkpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3txdWFka2V5fScsIHF1YWRrZXkpXG4gICAgICAgICAgICAucmVwbGFjZSgne2Jib3gtZXBzZy0zODU3fScsIGJib3gpO1xuICAgIH1cblxuICAgIGdldFRpbGVQb2ludChjb29yZDogTWVyY2F0b3JDb29yZGluYXRlKSB7XG4gICAgICAgIGNvbnN0IHRpbGVzQXRab29tID0gTWF0aC5wb3coMiwgdGhpcy56KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgICAgIChjb29yZC54ICogdGlsZXNBdFpvb20gLSB0aGlzLngpICogRVhURU5ULFxuICAgICAgICAgICAgKGNvb3JkLnkgKiB0aWxlc0F0Wm9vbSAtIHRoaXMueSkgKiBFWFRFTlQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVud3JhcHBlZFRpbGVJRCB7XG4gICAgd3JhcDogbnVtYmVyO1xuICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEO1xuICAgIGtleTogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3Iod3JhcDogbnVtYmVyLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICB0aGlzLndyYXAgPSB3cmFwO1xuICAgICAgICB0aGlzLmNhbm9uaWNhbCA9IGNhbm9uaWNhbDtcbiAgICAgICAgdGhpcy5rZXkgPSBjYWxjdWxhdGVLZXkod3JhcCwgY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3ZlcnNjYWxlZFRpbGVJRCB7XG4gICAgb3ZlcnNjYWxlZFo6IG51bWJlcjtcbiAgICB3cmFwOiBudW1iZXI7XG4gICAgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQ7XG4gICAga2V5OiBudW1iZXI7XG4gICAgcG9zTWF0cml4OiBGbG9hdDMyQXJyYXk7XG5cbiAgICBjb25zdHJ1Y3RvcihvdmVyc2NhbGVkWjogbnVtYmVyLCB3cmFwOiBudW1iZXIsIHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KG92ZXJzY2FsZWRaID49IHopO1xuICAgICAgICB0aGlzLm92ZXJzY2FsZWRaID0gb3ZlcnNjYWxlZFo7XG4gICAgICAgIHRoaXMud3JhcCA9IHdyYXA7XG4gICAgICAgIHRoaXMuY2Fub25pY2FsID0gbmV3IENhbm9uaWNhbFRpbGVJRCh6LCAreCwgK3kpO1xuICAgICAgICB0aGlzLmtleSA9IGNhbGN1bGF0ZUtleSh3cmFwLCBvdmVyc2NhbGVkWiwgeCwgeSk7XG4gICAgfVxuXG4gICAgZXF1YWxzKGlkOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJzY2FsZWRaID09PSBpZC5vdmVyc2NhbGVkWiAmJiB0aGlzLndyYXAgPT09IGlkLndyYXAgJiYgdGhpcy5jYW5vbmljYWwuZXF1YWxzKGlkLmNhbm9uaWNhbCk7XG4gICAgfVxuXG4gICAgc2NhbGVkVG8odGFyZ2V0WjogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydCh0YXJnZXRaIDw9IHRoaXMub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCB6RGlmZmVyZW5jZSA9IHRoaXMuY2Fub25pY2FsLnogLSB0YXJnZXRaO1xuICAgICAgICBpZiAodGFyZ2V0WiA+IHRoaXMuY2Fub25pY2FsLnopIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0YXJnZXRaLCB0aGlzLndyYXAsIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHRhcmdldFosIHRoaXMud3JhcCwgdGFyZ2V0WiwgdGhpcy5jYW5vbmljYWwueCA+PiB6RGlmZmVyZW5jZSwgdGhpcy5jYW5vbmljYWwueSA+PiB6RGlmZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0NoaWxkT2YocGFyZW50OiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGlmIChwYXJlbnQud3JhcCAhPT0gdGhpcy53cmFwKSB7XG4gICAgICAgICAgICAvLyBXZSBjYW4ndCBiZSBhIGNoaWxkIGlmIHdlJ3JlIGluIGEgZGlmZmVyZW50IHdvcmxkIGNvcHlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB6RGlmZmVyZW5jZSA9IHRoaXMuY2Fub25pY2FsLnogLSBwYXJlbnQuY2Fub25pY2FsLno7XG4gICAgICAgIC8vIFdlJ3JlIGZpcnN0IHRlc3RpbmcgZm9yIHogPT0gMCwgdG8gYXZvaWQgYSAzMiBiaXQgc2hpZnQsIHdoaWNoIGlzIHVuZGVmaW5lZC5cbiAgICAgICAgcmV0dXJuIHBhcmVudC5vdmVyc2NhbGVkWiA9PT0gMCB8fCAoXG4gICAgICAgICAgICBwYXJlbnQub3ZlcnNjYWxlZFogPCB0aGlzLm92ZXJzY2FsZWRaICYmXG4gICAgICAgICAgICAgICAgcGFyZW50LmNhbm9uaWNhbC54ID09PSAodGhpcy5jYW5vbmljYWwueCA+PiB6RGlmZmVyZW5jZSkgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2Fub25pY2FsLnkgPT09ICh0aGlzLmNhbm9uaWNhbC55ID4+IHpEaWZmZXJlbmNlKSk7XG4gICAgfVxuXG4gICAgY2hpbGRyZW4oc291cmNlTWF4Wm9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJzY2FsZWRaID49IHNvdXJjZU1heFpvb20pIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBhIHNpbmdsZSB0aWxlIGNvb3JkIHJlcHJlc2VudGluZyBhIGFuIG92ZXJzY2FsZWQgdGlsZVxuICAgICAgICAgICAgcmV0dXJuIFtuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aGlzLm92ZXJzY2FsZWRaICsgMSwgdGhpcy53cmFwLCB0aGlzLmNhbm9uaWNhbC56LCB0aGlzLmNhbm9uaWNhbC54LCB0aGlzLmNhbm9uaWNhbC55KV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6ID0gdGhpcy5jYW5vbmljYWwueiArIDE7XG4gICAgICAgIGNvbnN0IHggPSB0aGlzLmNhbm9uaWNhbC54ICogMjtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMuY2Fub25pY2FsLnkgKiAyO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IE92ZXJzY2FsZWRUaWxlSUQoeiwgdGhpcy53cmFwLCB6LCB4LCB5KSxcbiAgICAgICAgICAgIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHosIHRoaXMud3JhcCwgeiwgeCArIDEsIHkpLFxuICAgICAgICAgICAgbmV3IE92ZXJzY2FsZWRUaWxlSUQoeiwgdGhpcy53cmFwLCB6LCB4LCB5ICsgMSksXG4gICAgICAgICAgICBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh6LCB0aGlzLndyYXAsIHosIHggKyAxLCB5ICsgMSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBpc0xlc3NUaGFuKHJoczogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICBpZiAodGhpcy53cmFwIDwgcmhzLndyYXApIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy53cmFwID4gcmhzLndyYXApIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5vdmVyc2NhbGVkWiA8IHJocy5vdmVyc2NhbGVkWikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLm92ZXJzY2FsZWRaID4gcmhzLm92ZXJzY2FsZWRaKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuY2Fub25pY2FsLnggPCByaHMuY2Fub25pY2FsLngpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5jYW5vbmljYWwueCA+IHJocy5jYW5vbmljYWwueCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmNhbm9uaWNhbC55IDwgcmhzLmNhbm9uaWNhbC55KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHdyYXBwZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aGlzLm92ZXJzY2FsZWRaLCAwLCB0aGlzLmNhbm9uaWNhbC56LCB0aGlzLmNhbm9uaWNhbC54LCB0aGlzLmNhbm9uaWNhbC55KTtcbiAgICB9XG5cbiAgICB1bndyYXBUbyh3cmFwOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHRoaXMub3ZlcnNjYWxlZFosIHdyYXAsIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpO1xuICAgIH1cblxuICAgIG92ZXJzY2FsZUZhY3RvcigpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucG93KDIsIHRoaXMub3ZlcnNjYWxlZFogLSB0aGlzLmNhbm9uaWNhbC56KTtcbiAgICB9XG5cbiAgICB0b1Vud3JhcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbndyYXBwZWRUaWxlSUQodGhpcy53cmFwLCB0aGlzLmNhbm9uaWNhbCk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm92ZXJzY2FsZWRafS8ke3RoaXMuY2Fub25pY2FsLnh9LyR7dGhpcy5jYW5vbmljYWwueX1gO1xuICAgIH1cblxuICAgIGdldFRpbGVQb2ludChjb29yZDogTWVyY2F0b3JDb29yZGluYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbm9uaWNhbC5nZXRUaWxlUG9pbnQobmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShjb29yZC54IC0gdGhpcy53cmFwLCBjb29yZC55KSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVLZXkod3JhcDogbnVtYmVyLCB6OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgd3JhcCAqPSAyO1xuICAgIGlmICh3cmFwIDwgMCkgd3JhcCA9IHdyYXAgKiAtMSAtIDE7XG4gICAgY29uc3QgZGltID0gMSA8PCB6O1xuICAgIHJldHVybiAoKGRpbSAqIGRpbSAqIHdyYXAgKyBkaW0gKiB5ICsgeCkgKiAzMikgKyB6O1xufVxuXG5mdW5jdGlvbiBnZXRRdWFka2V5KHosIHgsIHkpIHtcbiAgICBsZXQgcXVhZGtleSA9ICcnLCBtYXNrO1xuICAgIGZvciAobGV0IGkgPSB6OyBpID4gMDsgaS0tKSB7XG4gICAgICAgIG1hc2sgPSAxIDw8IChpIC0gMSk7XG4gICAgICAgIHF1YWRrZXkgKz0gKCh4ICYgbWFzayA/IDEgOiAwKSArICh5ICYgbWFzayA/IDIgOiAwKSk7XG4gICAgfVxuICAgIHJldHVybiBxdWFka2V5O1xufVxuXG5yZWdpc3RlcignQ2Fub25pY2FsVGlsZUlEJywgQ2Fub25pY2FsVGlsZUlEKTtcbnJlZ2lzdGVyKCdPdmVyc2NhbGVkVGlsZUlEJywgT3ZlcnNjYWxlZFRpbGVJRCwge29taXQ6IFsncG9zTWF0cml4J119KTtcbiIsIi8vIEBmbG93XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG4vLyBERU1EYXRhIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGRlY29kaW5nLCBiYWNrZmlsbGluZywgYW5kIHN0b3JpbmcgZWxldmF0aW9uIGRhdGEgZm9yIHByb2Nlc3NpbmcgaW4gdGhlIGhpbGxzaGFkZSBzaGFkZXJzXG4vLyBkYXRhIGNhbiBiZSBwb3B1bGF0ZWQgZWl0aGVyIGZyb20gYSBwbmdyYXcgaW1hZ2UgdGlsZSBvciBmcm9tIHNlcmxpYXplZCBkYXRhIHNlbnQgYmFjayBmcm9tIGEgd29ya2VyLiBXaGVuIGRhdGEgaXMgaW5pdGlhbGx5XG4vLyBsb2FkZWQgZnJvbSBhIGltYWdlIHRpbGUsIHdlIGRlY29kZSB0aGUgcGl4ZWwgdmFsdWVzIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGluZyBmb3JtdWxhLCBidXQgd2Ugc3RvcmUgdGhlXG4vLyBlbGV2YXRpb24gZGF0YSBhcyBhbiBJbnQzMiB2YWx1ZS4gd2UgYWRkIDY1NTM2ICgyXjE2KSB0byBlbGltaW5hdGUgbmVnYXRpdmUgdmFsdWVzIGFuZCBlbmFibGUgdGhlIHVzZSBvZlxuLy8gaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNyZWF0aW5nIHRoZSB0ZXh0dXJlIHVzZWQgaW4gdGhlIGhpbGxzaGFkZVByZXBhcmUgc3RlcC5cblxuLy8gREVNRGF0YSBhbHNvIGhhbmRsZXMgdGhlIGJhY2tmaWxsaW5nIG9mIGRhdGEgZnJvbSBhIHRpbGUncyBuZWlnaGJvcmluZyB0aWxlcy4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSB1c2UgYSBwaXhlbCdzIDhcbi8vIHN1cnJvdW5kaW5nIHBpeGVsIHZhbHVlcyB0byBjb21wdXRlIHRoZSBzbG9wZSBhdCB0aGF0IHBpeGVsLCBhbmQgd2UgY2Fubm90IGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZSBzbG9wZSBhdCBwaXhlbHMgb24gYVxuLy8gdGlsZSdzIGVkZ2Ugd2l0aG91dCBiYWNrZmlsbGluZyBmcm9tIG5laWdoYm9yaW5nIHRpbGVzLlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERU1EYXRhIHtcbiAgICB1aWQ6IHN0cmluZztcbiAgICBkYXRhOiBVaW50MzJBcnJheTtcbiAgICBzdHJpZGU6IG51bWJlcjtcbiAgICBkaW06IG51bWJlcjtcbiAgICBlbmNvZGluZzogXCJtYXBib3hcIiB8IFwidGVycmFyaXVtXCI7XG5cbiAgICAvLyBSR0JBSW1hZ2UgZGF0YSBoYXMgdW5pZm9ybSAxcHggcGFkZGluZyBvbiBhbGwgc2lkZXM6IHNxdWFyZSB0aWxlIGVkZ2Ugc2l6ZSBkZWZpbmVzIHN0cmlkZVxuICAgIC8vIGFuZCBkaW0gaXMgY2FsY3VsYXRlZCBhcyBzdHJpZGUgLSAyLlxuICAgIGNvbnN0cnVjdG9yKHVpZDogc3RyaW5nLCBkYXRhOiBSR0JBSW1hZ2UsIGVuY29kaW5nOiBcIm1hcGJveFwiIHwgXCJ0ZXJyYXJpdW1cIikge1xuICAgICAgICB0aGlzLnVpZCA9IHVpZDtcbiAgICAgICAgaWYgKGRhdGEuaGVpZ2h0ICE9PSBkYXRhLndpZHRoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignREVNIHRpbGVzIG11c3QgYmUgc3F1YXJlJyk7XG4gICAgICAgIGlmIChlbmNvZGluZyAmJiBlbmNvZGluZyAhPT0gXCJtYXBib3hcIiAmJiBlbmNvZGluZyAhPT0gXCJ0ZXJyYXJpdW1cIikgcmV0dXJuIHdhcm5PbmNlKFxuICAgICAgICAgICAgYFwiJHtlbmNvZGluZ31cIiBpcyBub3QgYSB2YWxpZCBlbmNvZGluZyB0eXBlLiBWYWxpZCB0eXBlcyBpbmNsdWRlIFwibWFwYm94XCIgYW5kIFwidGVycmFyaXVtXCIuYFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0cmlkZSA9IGRhdGEuaGVpZ2h0O1xuICAgICAgICBjb25zdCBkaW0gPSB0aGlzLmRpbSA9IGRhdGEuaGVpZ2h0IC0gMjtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IFVpbnQzMkFycmF5KGRhdGEuZGF0YS5idWZmZXIpO1xuICAgICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2RpbmcgfHwgJ21hcGJveCc7XG5cbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgZmxhc2hpbmcgc2VhbXMgYmV0d2VlbiB0aWxlcywgaGVyZSB3ZSBhcmUgaW5pdGlhbGx5IHBvcHVsYXRpbmcgYSAxcHggYm9yZGVyIG9mIHBpeGVscyBhcm91bmQgdGhlIGltYWdlXG4gICAgICAgIC8vIHdpdGggdGhlIGRhdGEgb2YgdGhlIG5lYXJlc3QgcGl4ZWwgZnJvbSB0aGUgaW1hZ2UuIHRoaXMgZGF0YSBpcyBldmVudHVhbGx5IHJlcGxhY2VkIHdoZW4gdGhlIHRpbGUncyBuZWlnaGJvcmluZ1xuICAgICAgICAvLyB0aWxlcyBhcmUgbG9hZGVkIGFuZCB0aGUgYWNjdXJhdGUgZGF0YSBjYW4gYmUgYmFja2ZpbGxlZCB1c2luZyBERU1EYXRhI2JhY2tmaWxsQm9yZGVyXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgZGltOyB4KyspIHtcbiAgICAgICAgICAgIC8vIGxlZnQgdmVydGljYWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KC0xLCB4KV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KDAsIHgpXTtcbiAgICAgICAgICAgIC8vIHJpZ2h0IHZlcnRpY2FsIGJvcmRlclxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0sIHgpXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltIC0gMSwgeCldO1xuICAgICAgICAgICAgLy8gbGVmdCBob3Jpem9udGFsIGJvcmRlclxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCAtMSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCAwKV07XG4gICAgICAgICAgICAvLyByaWdodCBob3Jpem9udGFsIGJvcmRlclxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCBkaW0pXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoeCwgZGltIC0gMSldO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvcm5lcnNcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeCgtMSwgLTEpXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoMCwgMCldO1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSwgLTEpXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltIC0gMSwgMCldO1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KC0xLCBkaW0pXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoMCwgZGltIC0gMSldO1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSwgZGltKV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSAtIDEsIGRpbSAtIDEpXTtcbiAgICB9XG5cbiAgICBnZXQoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5faWR4KHgsIHkpICogNDtcbiAgICAgICAgY29uc3QgdW5wYWNrID0gdGhpcy5lbmNvZGluZyA9PT0gXCJ0ZXJyYXJpdW1cIiA/IHRoaXMuX3VucGFja1RlcnJhcml1bSA6IHRoaXMuX3VucGFja01hcGJveDtcbiAgICAgICAgcmV0dXJuIHVucGFjayhwaXhlbHNbaW5kZXhdLCBwaXhlbHNbaW5kZXggKyAxXSwgcGl4ZWxzW2luZGV4ICsgMl0pO1xuICAgIH1cblxuICAgIGdldFVucGFja1ZlY3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RpbmcgPT09IFwidGVycmFyaXVtXCIgPyBbMjU2LjAsIDEuMCwgMS4wIC8gMjU2LjAsIDMyNzY4LjBdIDogWzY1NTMuNiwgMjUuNiwgMC4xLCAxMDAwMC4wXTtcbiAgICB9XG5cbiAgICBfaWR4KHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh4IDwgLTEgfHwgeCA+PSB0aGlzLmRpbSArIDEgfHwgIHkgPCAtMSB8fCB5ID49IHRoaXMuZGltICsgMSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIERFTSBkYXRhJyk7XG4gICAgICAgIHJldHVybiAoeSArIDEpICogdGhpcy5zdHJpZGUgKyAoeCArIDEpO1xuICAgIH1cblxuICAgIF91bnBhY2tNYXBib3gocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcikge1xuICAgICAgICAvLyB1bnBhY2tpbmcgZm9ybXVsYSBmb3IgbWFwYm94LnRlcnJhaW4tcmdiOlxuICAgICAgICAvLyBodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvYWNjZXNzLWVsZXZhdGlvbi1kYXRhLyNtYXBib3gtdGVycmFpbi1yZ2JcbiAgICAgICAgcmV0dXJuICgociAqIDI1NiAqIDI1NiArIGcgKiAyNTYuMCArIGIpIC8gMTAuMCAtIDEwMDAwLjApO1xuICAgIH1cblxuICAgIF91bnBhY2tUZXJyYXJpdW0ocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcikge1xuICAgICAgICAvLyB1bnBhY2tpbmcgZm9ybXVsYSBmb3IgbWFwemVuIHRlcnJhcml1bTpcbiAgICAgICAgLy8gaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9wdWJsaWMtZGF0YXNldHMvdGVycmFpbi9cbiAgICAgICAgcmV0dXJuICgociAqIDI1NiArIGcgKyBiIC8gMjU2KSAtIDMyNzY4LjApO1xuICAgIH1cblxuICAgIGdldFBpeGVscygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSR0JBSW1hZ2Uoe3dpZHRoOiB0aGlzLnN0cmlkZSwgaGVpZ2h0OiB0aGlzLnN0cmlkZX0sIG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIpKTtcbiAgICB9XG5cbiAgICBiYWNrZmlsbEJvcmRlcihib3JkZXJUaWxlOiBERU1EYXRhLCBkeDogbnVtYmVyLCBkeTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmRpbSAhPT0gYm9yZGVyVGlsZS5kaW0pIHRocm93IG5ldyBFcnJvcignZGVtIGRpbWVuc2lvbiBtaXNtYXRjaCcpO1xuXG4gICAgICAgIGxldCB4TWluID0gZHggKiB0aGlzLmRpbSxcbiAgICAgICAgICAgIHhNYXggPSBkeCAqIHRoaXMuZGltICsgdGhpcy5kaW0sXG4gICAgICAgICAgICB5TWluID0gZHkgKiB0aGlzLmRpbSxcbiAgICAgICAgICAgIHlNYXggPSBkeSAqIHRoaXMuZGltICsgdGhpcy5kaW07XG5cbiAgICAgICAgc3dpdGNoIChkeCkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgeE1pbiA9IHhNYXggLSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHhNYXggPSB4TWluICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChkeSkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgeU1pbiA9IHlNYXggLSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHlNYXggPSB5TWluICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3ggPSAtZHggKiB0aGlzLmRpbTtcbiAgICAgICAgY29uc3Qgb3kgPSAtZHkgKiB0aGlzLmRpbTtcbiAgICAgICAgZm9yIChsZXQgeSA9IHlNaW47IHkgPCB5TWF4OyB5KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IHggPSB4TWluOyB4IDwgeE1heDsgeCsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCB5KV0gPSBib3JkZXJUaWxlLmRhdGFbdGhpcy5faWR4KHggKyBveCwgeSArIG95KV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdERU1EYXRhJywgREVNRGF0YSk7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zJywgdHlwZTogJ0ludDE2JywgY29tcG9uZW50czogMn0sXG4gICAge25hbWU6ICdhX3RleHR1cmVfcG9zJywgdHlwZTogJ0ludDE2JywgY29tcG9uZW50czogMn1cbl0pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5fSBmcm9tICcuL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIFN0eWxlIGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB0eXBlIHtUeXBlZFN0eWxlTGF5ZXJ9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3R5cGVkX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIEZlYXR1cmVJbmRleCBmcm9tICcuL2ZlYXR1cmVfaW5kZXgnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGVzfSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuXG5leHBvcnQgdHlwZSBCdWNrZXRQYXJhbWV0ZXJzPExheWVyOiBUeXBlZFN0eWxlTGF5ZXI+ID0ge1xuICAgIGluZGV4OiBudW1iZXIsXG4gICAgbGF5ZXJzOiBBcnJheTxMYXllcj4sXG4gICAgem9vbTogbnVtYmVyLFxuICAgIHBpeGVsUmF0aW86IG51bWJlcixcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyLFxuICAgIGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSxcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgc291cmNlSUQ6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBQb3B1bGF0ZVBhcmFtZXRlcnMgPSB7XG4gICAgZmVhdHVyZUluZGV4OiBGZWF0dXJlSW5kZXgsXG4gICAgaWNvbkRlcGVuZGVuY2llczoge30sXG4gICAgcGF0dGVybkRlcGVuZGVuY2llczoge30sXG4gICAgZ2x5cGhEZXBlbmRlbmNpZXM6IHt9LFxuICAgIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPlxufVxuXG5leHBvcnQgdHlwZSBJbmRleGVkRmVhdHVyZSA9IHtcbiAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbn1cblxuZXhwb3J0IHR5cGUgQnVja2V0RmVhdHVyZSA9IHt8XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgcHJvcGVydGllczogT2JqZWN0LFxuICAgIHR5cGU6IDEgfCAyIHwgMyxcbiAgICBpZD86IGFueSxcbiAgICArcGF0dGVybnM6IHtbc3RyaW5nXToge1wibWluXCI6IHN0cmluZywgXCJtaWRcIjogc3RyaW5nLCBcIm1heFwiOiBzdHJpbmd9fSxcbiAgICBzb3J0S2V5PzogbnVtYmVyXG58fTtcblxuLyoqXG4gKiBUaGUgYEJ1Y2tldGAgaW50ZXJmYWNlIGlzIHRoZSBzaW5nbGUgcG9pbnQgb2Yga25vd2xlZGdlIGFib3V0IHR1cm5pbmcgdmVjdG9yXG4gKiB0aWxlcyBpbnRvIFdlYkdMIGJ1ZmZlcnMuXG4gKlxuICogYEJ1Y2tldGAgaXMgYW4gYWJzdHJhY3QgaW50ZXJmYWNlLiBBbiBpbXBsZW1lbnRhdGlvbiBleGlzdHMgZm9yIGVhY2ggc3R5bGUgbGF5ZXIgdHlwZS5cbiAqIENyZWF0ZSBhIGJ1Y2tldCB2aWEgdGhlIGBTdHlsZUxheWVyI2NyZWF0ZUJ1Y2tldGAgbWV0aG9kLlxuICpcbiAqIFRoZSBjb25jcmV0ZSBidWNrZXQgdHlwZXMsIHVzaW5nIGxheW91dCBvcHRpb25zIGZyb20gdGhlIHN0eWxlIGxheWVyLFxuICogdHJhbnNmb3JtIGZlYXR1cmUgZ2VvbWV0cmllcyBpbnRvIHZlcnRleCBhbmQgaW5kZXggZGF0YSBmb3IgdXNlIGJ5IHRoZVxuICogdmVydGV4IHNoYWRlci4gIFRoZXkgYWxzbyAodmlhIGBQcm9ncmFtQ29uZmlndXJhdGlvbmApIHVzZSBmZWF0dXJlXG4gKiBwcm9wZXJ0aWVzIGFuZCB0aGUgem9vbSBsZXZlbCB0byBwb3B1bGF0ZSB0aGUgYXR0cmlidXRlcyBuZWVkZWQgZm9yXG4gKiBkYXRhLWRyaXZlbiBzdHlsaW5nLlxuICpcbiAqIEJ1Y2tldHMgYXJlIGRlc2lnbmVkIHRvIGJlIGJ1aWx0IG9uIGEgd29ya2VyIHRocmVhZCBhbmQgdGhlbiBzZXJpYWxpemVkIGFuZFxuICogdHJhbnNmZXJyZWQgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQgZm9yIHJlbmRlcmluZy4gIE9uIHRoZSB3b3JrZXIgc2lkZSwgYVxuICogYnVja2V0J3MgdmVydGV4LCBpbmRleCwgYW5kIGF0dHJpYnV0ZSBkYXRhIGlzIHN0b3JlZCBpbiBgYnVja2V0LmFycmF5czpcbiAqIEFycmF5R3JvdXBgLiAgV2hlbiBhIGJ1Y2tldCdzIGRhdGEgaXMgc2VyaWFsaXplZCBhbmQgc2VudCBiYWNrIHRvIHRoZSBtYWluXG4gKiB0aHJlYWQsIGlzIGdldHMgZGVzZXJpYWxpemVkICh1c2luZyBgbmV3IEJ1Y2tldChzZXJpYWxpemVkQnVja2V0RGF0YSlgLCB3aXRoXG4gKiB0aGUgYXJyYXkgZGF0YSBub3cgc3RvcmVkIGluIGBidWNrZXQuYnVmZmVyczogQnVmZmVyR3JvdXBgLiAgQnVmZmVyR3JvdXBzXG4gKiBob2xkIHRoZSBzYW1lIGRhdGEgYXMgQXJyYXlHcm91cHMsIGJ1dCBhcmUgdHVuZWQgZm9yIGNvbnN1bXB0aW9uIGJ5IFdlYkdMLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0IHtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBoYXNQYXR0ZXJuOiBib29sZWFuO1xuICAgICtsYXllcnM6IEFycmF5PGFueT47XG4gICAgK3N0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxhbnk+O1xuICAgICtzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHBvcHVsYXRlKGZlYXR1cmVzOiBBcnJheTxJbmRleGVkRmVhdHVyZT4sIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycyk6IHZvaWQ7XG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSk6IHZvaWQ7XG4gICAgaXNFbXB0eSgpOiBib29sZWFuO1xuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpOiB2b2lkO1xuICAgIHVwbG9hZFBlbmRpbmcoKTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFJlbGVhc2UgdGhlIFdlYkdMIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlcnMuIE5vdGUgdGhhdCBiZWNhdXNlXG4gICAgICogYnVja2V0cyBhcmUgc2hhcmVkIGJldHdlZW4gbGF5ZXJzIGhhdmluZyB0aGUgc2FtZSBsYXlvdXQgcHJvcGVydGllcywgdGhleVxuICAgICAqIG11c3QgYmUgZGVzdHJveWVkIGluIGdyb3VwcyAoYWxsIGJ1Y2tldHMgZm9yIGEgdGlsZSwgb3IgYWxsIHN5bWJvbCBidWNrZXRzKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZGVzdHJveSgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemUoaW5wdXQ6IEFycmF5PEJ1Y2tldD4sIHN0eWxlOiBTdHlsZSk6IHtbc3RyaW5nXTogQnVja2V0fSB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG5cbiAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSBjYXNlIHdoZXJlIHRoZSBtYXAncyBzdHlsZSBoYXMgYmVlbiBzZXQgdG8gbnVsbCB3aGlsZVxuICAgIC8vIHRoaXMgYnVja2V0IGhhcyBiZWVuIHBhcnNpbmcuXG4gICAgaWYgKCFzdHlsZSkgcmV0dXJuIG91dHB1dDtcblxuICAgIGZvciAoY29uc3QgYnVja2V0IG9mIGlucHV0KSB7XG4gICAgICAgIGNvbnN0IGxheWVycyA9IGJ1Y2tldC5sYXllcklkc1xuICAgICAgICAgICAgLm1hcCgoaWQpID0+IHN0eWxlLmdldExheWVyKGlkKSlcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbG9vayB1cCBTdHlsZUxheWVyIG9iamVjdHMgZnJvbSBsYXllciBpZHMgKHNpbmNlIHdlIGRvbid0XG4gICAgICAgIC8vIHdhbnQgdG8gd2FzdGUgdGltZSBzZXJpYWxpemluZy9jb3B5aW5nIHRoZW0gZnJvbSB0aGUgd29ya2VyKVxuICAgICAgICAoYnVja2V0OiBhbnkpLmxheWVycyA9IGxheWVycztcbiAgICAgICAgaWYgKChidWNrZXQ6IGFueSkuc3RhdGVEZXBlbmRlbnRMYXllcklkcykge1xuICAgICAgICAgICAgKGJ1Y2tldDogYW55KS5zdGF0ZURlcGVuZGVudExheWVycyA9IChidWNrZXQ6IGFueSkuc3RhdGVEZXBlbmRlbnRMYXllcklkcy5tYXAoKGxJZCkgPT4gbGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pZCA9PT0gbElkKVswXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIG91dHB1dFtsYXllci5pZF0gPSBidWNrZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuY2xhc3MgRGljdGlvbmFyeUNvZGVyIHtcbiAgICBfc3RyaW5nVG9OdW1iZXI6IHsgW3N0cmluZ106IG51bWJlciB9O1xuICAgIF9udW1iZXJUb1N0cmluZzogQXJyYXk8c3RyaW5nPjtcblxuICAgIGNvbnN0cnVjdG9yKHN0cmluZ3M6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5fc3RyaW5nVG9OdW1iZXIgPSB7fTtcbiAgICAgICAgdGhpcy5fbnVtYmVyVG9TdHJpbmcgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdzW2ldO1xuICAgICAgICAgICAgdGhpcy5fc3RyaW5nVG9OdW1iZXJbc3RyaW5nXSA9IGk7XG4gICAgICAgICAgICB0aGlzLl9udW1iZXJUb1N0cmluZ1tpXSA9IHN0cmluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuY29kZShzdHJpbmc6IHN0cmluZykge1xuICAgICAgICBhc3NlcnQoc3RyaW5nIGluIHRoaXMuX3N0cmluZ1RvTnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3N0cmluZ107XG4gICAgfVxuXG4gICAgZGVjb2RlKG46IG51bWJlcikge1xuICAgICAgICBhc3NlcnQobiA8IHRoaXMuX251bWJlclRvU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1tuXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpY3Rpb25hcnlDb2RlcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7R2VvSlNPTkdlb21ldHJ5fSBmcm9tICdAbWFwYm94L2dlb2pzb24tdHlwZXMnO1xuXG5jbGFzcyBGZWF0dXJlIHtcbiAgICB0eXBlOiAnRmVhdHVyZSc7XG4gICAgX2dlb21ldHJ5OiA/R2VvSlNPTkdlb21ldHJ5O1xuICAgIHByb3BlcnRpZXM6IHt9O1xuICAgIGlkOiBudW1iZXIgfCBzdHJpbmcgfCB2b2lkO1xuXG4gICAgX3ZlY3RvclRpbGVGZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZTtcblxuICAgIGNvbnN0cnVjdG9yKHZlY3RvclRpbGVGZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSwgejogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnR5cGUgPSAnRmVhdHVyZSc7XG5cbiAgICAgICAgdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUgPSB2ZWN0b3JUaWxlRmVhdHVyZTtcbiAgICAgICAgKHZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl96ID0gejtcbiAgICAgICAgKHZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl94ID0geDtcbiAgICAgICAgKHZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl95ID0geTtcblxuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSB2ZWN0b3JUaWxlRmVhdHVyZS5wcm9wZXJ0aWVzO1xuXG4gICAgICAgIGlmICh2ZWN0b3JUaWxlRmVhdHVyZS5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdmVjdG9yVGlsZUZlYXR1cmUuaWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZ2VvbWV0cnkoKTogP0dlb0pTT05HZW9tZXRyeSB7XG4gICAgICAgIGlmICh0aGlzLl9nZW9tZXRyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9nZW9tZXRyeSA9IHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTihcbiAgICAgICAgICAgICAgICAodGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3gsXG4gICAgICAgICAgICAgICAgKHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl95LFxuICAgICAgICAgICAgICAgICh0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feikuZ2VvbWV0cnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dlb21ldHJ5O1xuICAgIH1cblxuICAgIHNldCBnZW9tZXRyeShnOiA/R2VvSlNPTkdlb21ldHJ5KSB7XG4gICAgICAgIHRoaXMuX2dlb21ldHJ5ID0gZztcbiAgICB9XG5cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5nZW9tZXRyeVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcykge1xuICAgICAgICAgICAgaWYgKGkgPT09ICdfZ2VvbWV0cnknIHx8IGkgPT09ICdfdmVjdG9yVGlsZUZlYXR1cmUnKSBjb250aW51ZTtcbiAgICAgICAgICAgIGpzb25baV0gPSAodGhpczogYW55KVtpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZlYXR1cmU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuXG5leHBvcnQgdHlwZSBGZWF0dXJlU3RhdGVzID0ge1tmZWF0dXJlX2lkOiBzdHJpbmddOiBGZWF0dXJlU3RhdGV9O1xuZXhwb3J0IHR5cGUgTGF5ZXJGZWF0dXJlU3RhdGVzID0ge1tsYXllcjogc3RyaW5nXTogRmVhdHVyZVN0YXRlc307XG5cbi8qKlxuICogU291cmNlRmVhdHVyZVN0YXRlIG1hbmFnZXMgdGhlIHN0YXRlIGFuZCBwZW5kaW5nIGNoYW5nZXNcbiAqIHRvIGZlYXR1cmVzIGluIGEgc291cmNlLCBzZXBhcmF0ZWQgYnkgc291cmNlIGxheWVyLlxuICogc3RhdGVDaGFuZ2VzIGFuZCBkZWxldGVkU3RhdGVzIGJhdGNoIGFsbCBjaGFuZ2VzIHRvIHRoZSB0aWxlICh1cGRhdGVzIGFuZCByZW1vdmVzLCByZXNwZWN0aXZlbHkpXG4gKiBiZXR3ZWVuIGNvYWxlc2NlKCkgZXZlbnRzLiBhZGRGZWF0dXJlU3RhdGUoKSBhbmQgcmVtb3ZlRmVhdHVyZVN0YXRlKCkgYWxzbyB1cGRhdGUgdGhlaXIgY291bnRlcnBhcnQnc1xuICogbGlzdCBvZiBjaGFuZ2VzLCBzdWNoIHRoYXQgY29hbGVzY2UoKSBjYW4gYXBwbHkgdGhlIHByb3BlciBzdGF0ZSBjaGFuZ2VzIHdoaWxlIGFnbm9zdGljIHRvIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLlxuICogSW4gZGVsZXRlZFN0YXRlcywgYWxsIG51bGwncyBkZW5vdGUgY29tcGxldGUgcmVtb3ZhbCBvZiBzdGF0ZSBhdCB0aGF0IHNjb3BlXG4gKiBAcHJpdmF0ZVxuKi9cbmNsYXNzIFNvdXJjZUZlYXR1cmVTdGF0ZSB7XG4gICAgc3RhdGU6IExheWVyRmVhdHVyZVN0YXRlcztcbiAgICBzdGF0ZUNoYW5nZXM6IExheWVyRmVhdHVyZVN0YXRlcztcbiAgICBkZWxldGVkU3RhdGVzOiB7fTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0ge307XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzID0ge307XG4gICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlcyA9IHt9O1xuICAgIH1cblxuICAgIHVwZGF0ZVN0YXRlKHNvdXJjZUxheWVyOiBzdHJpbmcsIGZlYXR1cmVJZDogbnVtYmVyLCBuZXdTdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBTdHJpbmcoZmVhdHVyZUlkKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdID0gdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gfHwge307XG4gICAgICAgIGV4dGVuZCh0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0sIG5ld1N0YXRlKTtcblxuICAgICAgICBpZiAodGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBmdCBpbiB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSkge1xuICAgICAgICAgICAgICAgIGlmIChmdCAhPT0gZmVhdHVyZSkgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmdF0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZURlbGV0aW9uUXVldWVkID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSAmJiB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID09PSBudWxsO1xuICAgICAgICAgICAgaWYgKGZlYXR1cmVEZWxldGlvblF1ZXVlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdTdGF0ZVtwcm9wXSkgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtwcm9wXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWxldGlvbkluUXVldWUgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdICYmIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gJiYgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldID09PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRpb25JblF1ZXVlKSBkZWxldGUgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUZlYXR1cmVTdGF0ZShzb3VyY2VMYXllcjogc3RyaW5nLCBmZWF0dXJlSWQ/OiBudW1iZXIsIGtleT86IHN0cmluZykge1xuICAgICAgICBjb25zdCBzb3VyY2VMYXllckRlbGV0ZWQgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID09PSBudWxsO1xuICAgICAgICBpZiAoc291cmNlTGF5ZXJEZWxldGVkKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IFN0cmluZyhmZWF0dXJlSWQpO1xuXG4gICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdIHx8IHt9O1xuXG4gICAgICAgIGlmIChrZXkgJiYgZmVhdHVyZUlkICE9PSB1bmRlZmluZWQgJiYgZmVhdHVyZUlkID49IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gfHwge307XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmZWF0dXJlSWQgIT09IHVuZGVmaW5lZCAmJiBmZWF0dXJlSWQgPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlSW5RdWV1ZSA9IHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXSAmJiB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV07XG4gICAgICAgICAgICBpZiAodXBkYXRlSW5RdWV1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0pIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV1ba2V5XSA9IG51bGw7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgZ2V0U3RhdGUoc291cmNlTGF5ZXI6IHN0cmluZywgZmVhdHVyZUlkOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IFN0cmluZyhmZWF0dXJlSWQpO1xuICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl0gfHwge307XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0gfHwge307XG5cbiAgICAgICAgY29uc3QgcmVjb25jaWxlZFN0YXRlID0gZXh0ZW5kKHt9LCBiYXNlW2ZlYXR1cmVdLCBjaGFuZ2VzW2ZlYXR1cmVdKTtcblxuICAgICAgICAvL3JldHVybiBlbXB0eSBvYmplY3QgaWYgdGhlIHdob2xlIHNvdXJjZSBsYXllciBpcyBhd2FpdGluZyBkZWxldGlvblxuICAgICAgICBpZiAodGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgICAgICBlbHNlIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlRGVsZXRpb25zID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlSWRdO1xuICAgICAgICAgICAgaWYgKGZlYXR1cmVEZWxldGlvbnMgPT09IG51bGwpIHJldHVybiB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBmZWF0dXJlRGVsZXRpb25zKSBkZWxldGUgcmVjb25jaWxlZFN0YXRlW3Byb3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWNvbmNpbGVkU3RhdGU7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVRpbGVTdGF0ZSh0aWxlOiBUaWxlLCBwYWludGVyOiBhbnkpIHtcbiAgICAgICAgdGlsZS5zZXRGZWF0dXJlU3RhdGUodGhpcy5zdGF0ZSwgcGFpbnRlcik7XG4gICAgfVxuXG4gICAgY29hbGVzY2VDaGFuZ2VzKHRpbGVzOiB7W2FueV06IFRpbGV9LCBwYWludGVyOiBhbnkpIHtcbiAgICAgICAgLy90cmFjayBjaGFuZ2VzIHdpdGggZnVsbCBzdGF0ZSBvYmplY3RzLCBidXQgb25seSBmb3IgZmVhdHVyZXMgdGhhdCBnb3QgbW9kaWZpZWRcbiAgICAgICAgY29uc3QgZmVhdHVyZXNDaGFuZ2VkOiBMYXllckZlYXR1cmVTdGF0ZXMgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZUxheWVyIGluIHRoaXMuc3RhdGVDaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSAgPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyU3RhdGVzID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgaW4gdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSkgdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBleHRlbmQodGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV0sIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSk7XG4gICAgICAgICAgICAgICAgbGF5ZXJTdGF0ZXNbZmVhdHVyZV0gPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlYXR1cmVzQ2hhbmdlZFtzb3VyY2VMYXllcl0gPSBsYXllclN0YXRlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlTGF5ZXIgaW4gdGhpcy5kZWxldGVkU3RhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSAgPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyU3RhdGVzID0ge307XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmdCBpbiB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSkge1xuICAgICAgICAgICAgICAgICAgICBsYXllclN0YXRlc1tmdF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZnRdID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWxldGVXaG9sZUZlYXR1cmVTdGF0ZSA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPT09IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGVXaG9sZUZlYXR1cmVTdGF0ZSkgdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxheWVyU3RhdGVzW2ZlYXR1cmVdID0gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmZWF0dXJlc0NoYW5nZWRbc291cmNlTGF5ZXJdID0gZmVhdHVyZXNDaGFuZ2VkW3NvdXJjZUxheWVyXSB8fCB7fTtcbiAgICAgICAgICAgIGV4dGVuZChmZWF0dXJlc0NoYW5nZWRbc291cmNlTGF5ZXJdLCBsYXllclN0YXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcyA9IHt9O1xuICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXMgPSB7fTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmVhdHVyZXNDaGFuZ2VkKS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGlsZXNbaWRdO1xuICAgICAgICAgICAgdGlsZS5zZXRGZWF0dXJlU3RhdGUoZmVhdHVyZXNDaGFuZ2VkLCBwYWludGVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU291cmNlRmVhdHVyZVN0YXRlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4vZXh0ZW50JztcbmltcG9ydCBmZWF0dXJlRmlsdGVyIGZyb20gJy4uL3N0eWxlLXNwZWMvZmVhdHVyZV9maWx0ZXInO1xuaW1wb3J0IEdyaWQgZnJvbSAnZ3JpZC1pbmRleCc7XG5pbXBvcnQgRGljdGlvbmFyeUNvZGVyIGZyb20gJy4uL3V0aWwvZGljdGlvbmFyeV9jb2Rlcic7XG5pbXBvcnQgdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5pbXBvcnQgUHJvdG9idWYgZnJvbSAncGJmJztcbmltcG9ydCBHZW9KU09ORmVhdHVyZSBmcm9tICcuLi91dGlsL3ZlY3RvcnRpbGVfdG9fZ2VvanNvbic7XG5pbXBvcnQge2FycmF5c0ludGVyc2VjdH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IFNvdXJjZUZlYXR1cmVTdGF0ZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNCb3h9IGZyb20gJy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcblxuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZUZpbHRlcn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmltcG9ydCB7RmVhdHVyZUluZGV4QXJyYXl9IGZyb20gJy4vYXJyYXlfdHlwZXMnO1xuXG50eXBlIFF1ZXJ5UGFyYW1ldGVycyA9IHtcbiAgICBzY2FsZTogbnVtYmVyLFxuICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sXG4gICAgdGlsZVNpemU6IG51bWJlcixcbiAgICBxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgY2FtZXJhUXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgIHF1ZXJ5UGFkZGluZzogbnVtYmVyLFxuICAgIHBhcmFtczoge1xuICAgICAgICBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sXG4gICAgICAgIGxheWVyczogQXJyYXk8c3RyaW5nPixcbiAgICB9XG59XG5cbmNsYXNzIEZlYXR1cmVJbmRleCB7XG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEO1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgejogbnVtYmVyO1xuICAgIGdyaWQ6IEdyaWQ7XG4gICAgZ3JpZDNEOiBHcmlkO1xuICAgIGZlYXR1cmVJbmRleEFycmF5OiBGZWF0dXJlSW5kZXhBcnJheTtcblxuICAgIHJhd1RpbGVEYXRhOiBBcnJheUJ1ZmZlcjtcbiAgICBidWNrZXRMYXllcklEczogQXJyYXk8QXJyYXk8c3RyaW5nPj47XG5cbiAgICB2dExheWVyczoge1tzdHJpbmddOiBWZWN0b3JUaWxlTGF5ZXJ9O1xuICAgIHNvdXJjZUxheWVyQ29kZXI6IERpY3Rpb25hcnlDb2RlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCxcbiAgICAgICAgICAgICAgICBncmlkPzogR3JpZCxcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXhBcnJheT86IEZlYXR1cmVJbmRleEFycmF5KSB7XG4gICAgICAgIHRoaXMudGlsZUlEID0gdGlsZUlEO1xuICAgICAgICB0aGlzLnggPSB0aWxlSUQuY2Fub25pY2FsLng7XG4gICAgICAgIHRoaXMueSA9IHRpbGVJRC5jYW5vbmljYWwueTtcbiAgICAgICAgdGhpcy56ID0gdGlsZUlELmNhbm9uaWNhbC56O1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkIHx8IG5ldyBHcmlkKEVYVEVOVCwgMTYsIDApO1xuICAgICAgICB0aGlzLmdyaWQzRCA9IG5ldyBHcmlkKEVYVEVOVCwgMTYsIDApO1xuICAgICAgICB0aGlzLmZlYXR1cmVJbmRleEFycmF5ID0gZmVhdHVyZUluZGV4QXJyYXkgfHwgbmV3IEZlYXR1cmVJbmRleEFycmF5KCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0KGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgZmVhdHVyZUluZGV4OiBudW1iZXIsIHNvdXJjZUxheWVySW5kZXg6IG51bWJlciwgYnVja2V0SW5kZXg6IG51bWJlciwgaXMzRD86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5mZWF0dXJlSW5kZXhBcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMuZmVhdHVyZUluZGV4QXJyYXkuZW1wbGFjZUJhY2soZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCk7XG5cbiAgICAgICAgY29uc3QgZ3JpZCA9IGlzM0QgPyB0aGlzLmdyaWQzRCA6IHRoaXMuZ3JpZDtcblxuICAgICAgICBmb3IgKGxldCByID0gMDsgciA8IGdlb21ldHJ5Lmxlbmd0aDsgcisrKSB7XG4gICAgICAgICAgICBjb25zdCByaW5nID0gZ2VvbWV0cnlbcl07XG5cbiAgICAgICAgICAgIGNvbnN0IGJib3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcmluZ1tpXTtcbiAgICAgICAgICAgICAgICBiYm94WzBdID0gTWF0aC5taW4oYmJveFswXSwgcC54KTtcbiAgICAgICAgICAgICAgICBiYm94WzFdID0gTWF0aC5taW4oYmJveFsxXSwgcC55KTtcbiAgICAgICAgICAgICAgICBiYm94WzJdID0gTWF0aC5tYXgoYmJveFsyXSwgcC54KTtcbiAgICAgICAgICAgICAgICBiYm94WzNdID0gTWF0aC5tYXgoYmJveFszXSwgcC55KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGJib3hbMF0gPCBFWFRFTlQgJiZcbiAgICAgICAgICAgICAgICBiYm94WzFdIDwgRVhURU5UICYmXG4gICAgICAgICAgICAgICAgYmJveFsyXSA+PSAwICYmXG4gICAgICAgICAgICAgICAgYmJveFszXSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZ3JpZC5pbnNlcnQoa2V5LCBiYm94WzBdLCBiYm94WzFdLCBiYm94WzJdLCBiYm94WzNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRWVExheWVycygpOiB7W3N0cmluZ106IFZlY3RvclRpbGVMYXllcn0ge1xuICAgICAgICBpZiAoIXRoaXMudnRMYXllcnMpIHtcbiAgICAgICAgICAgIHRoaXMudnRMYXllcnMgPSBuZXcgdnQuVmVjdG9yVGlsZShuZXcgUHJvdG9idWYodGhpcy5yYXdUaWxlRGF0YSkpLmxheWVycztcbiAgICAgICAgICAgIHRoaXMuc291cmNlTGF5ZXJDb2RlciA9IG5ldyBEaWN0aW9uYXJ5Q29kZXIodGhpcy52dExheWVycyA/IE9iamVjdC5rZXlzKHRoaXMudnRMYXllcnMpLnNvcnQoKSA6IFsnX2dlb2pzb25UaWxlTGF5ZXInXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudnRMYXllcnM7XG4gICAgfVxuXG4gICAgLy8gRmluZHMgbm9uLXN5bWJvbCBmZWF0dXJlcyBpbiB0aGlzIHRpbGUgYXQgYSBwYXJ0aWN1bGFyIHBvc2l0aW9uLlxuICAgIHF1ZXJ5KGFyZ3M6IFF1ZXJ5UGFyYW1ldGVycywgc3R5bGVMYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn0sIHNvdXJjZUZlYXR1cmVTdGF0ZTogU291cmNlRmVhdHVyZVN0YXRlKToge1tzdHJpbmddOiBBcnJheTx7IGZlYXR1cmVJbmRleDogbnVtYmVyLCBmZWF0dXJlOiBHZW9KU09ORmVhdHVyZSB9Pn0ge1xuICAgICAgICB0aGlzLmxvYWRWVExheWVycygpO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGFyZ3MucGFyYW1zIHx8IHt9LFxuICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHMgPSBFWFRFTlQgLyBhcmdzLnRpbGVTaXplIC8gYXJncy5zY2FsZSxcbiAgICAgICAgICAgIGZpbHRlciA9IGZlYXR1cmVGaWx0ZXIocGFyYW1zLmZpbHRlcik7XG5cbiAgICAgICAgY29uc3QgcXVlcnlHZW9tZXRyeSA9IGFyZ3MucXVlcnlHZW9tZXRyeTtcbiAgICAgICAgY29uc3QgcXVlcnlQYWRkaW5nID0gYXJncy5xdWVyeVBhZGRpbmcgKiBwaXhlbHNUb1RpbGVVbml0cztcblxuICAgICAgICBjb25zdCBib3VuZHMgPSBnZXRCb3VuZHMocXVlcnlHZW9tZXRyeSk7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nID0gdGhpcy5ncmlkLnF1ZXJ5KGJvdW5kcy5taW5YIC0gcXVlcnlQYWRkaW5nLCBib3VuZHMubWluWSAtIHF1ZXJ5UGFkZGluZywgYm91bmRzLm1heFggKyBxdWVyeVBhZGRpbmcsIGJvdW5kcy5tYXhZICsgcXVlcnlQYWRkaW5nKTtcblxuICAgICAgICBjb25zdCBjYW1lcmFCb3VuZHMgPSBnZXRCb3VuZHMoYXJncy5jYW1lcmFRdWVyeUdlb21ldHJ5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmczRCA9IHRoaXMuZ3JpZDNELnF1ZXJ5KFxuICAgICAgICAgICAgICAgIGNhbWVyYUJvdW5kcy5taW5YIC0gcXVlcnlQYWRkaW5nLCBjYW1lcmFCb3VuZHMubWluWSAtIHF1ZXJ5UGFkZGluZywgY2FtZXJhQm91bmRzLm1heFggKyBxdWVyeVBhZGRpbmcsIGNhbWVyYUJvdW5kcy5tYXhZICsgcXVlcnlQYWRkaW5nLFxuICAgICAgICAgICAgICAgIChieDEsIGJ5MSwgYngyLCBieTIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RzQm94KGFyZ3MuY2FtZXJhUXVlcnlHZW9tZXRyeSwgYngxIC0gcXVlcnlQYWRkaW5nLCBieTEgLSBxdWVyeVBhZGRpbmcsIGJ4MiArIHF1ZXJ5UGFkZGluZywgYnkyICsgcXVlcnlQYWRkaW5nKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBtYXRjaGluZzNEKSB7XG4gICAgICAgICAgICBtYXRjaGluZy5wdXNoKGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBtYXRjaGluZy5zb3J0KHRvcERvd25GZWF0dXJlQ29tcGFyYXRvcik7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGxldCBwcmV2aW91c0luZGV4O1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG1hdGNoaW5nLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IG1hdGNoaW5nW2tdO1xuXG4gICAgICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgc2FtZSBmZWF0dXJlIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHByZXZpb3VzSW5kZXgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcHJldmlvdXNJbmRleCA9IGluZGV4O1xuXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMuZmVhdHVyZUluZGV4QXJyYXkuZ2V0KGluZGV4KTtcbiAgICAgICAgICAgIGxldCBmZWF0dXJlR2VvbWV0cnkgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sb2FkTWF0Y2hpbmdGZWF0dXJlKFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICBtYXRjaC5idWNrZXRJbmRleCxcbiAgICAgICAgICAgICAgICBtYXRjaC5zb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIG1hdGNoLmZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgcGFyYW1zLmxheWVycyxcbiAgICAgICAgICAgICAgICBzdHlsZUxheWVycyxcbiAgICAgICAgICAgICAgICAoZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsIHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmZWF0dXJlR2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVHZW9tZXRyeSA9IGxvYWRHZW9tZXRyeShmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZmVhdHVyZVN0YXRlID0ge307XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBgZmVhdHVyZS1zdGF0ZWAgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHJlcXVpcmVzIGZlYXR1cmUgc3RhdGUgdG8gYmUgYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlU3RhdGUgPSBzb3VyY2VGZWF0dXJlU3RhdGUuZ2V0U3RhdGUoc3R5bGVMYXllci5zb3VyY2VMYXllciB8fCAnX2dlb2pzb25UaWxlTGF5ZXInLCBmZWF0dXJlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVMYXllci5xdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnksIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgZmVhdHVyZUdlb21ldHJ5LCB0aGlzLnosIGFyZ3MudHJhbnNmb3JtLCBwaXhlbHNUb1RpbGVVbml0cywgYXJncy5waXhlbFBvc01hdHJpeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgbG9hZE1hdGNoaW5nRmVhdHVyZShcbiAgICAgICAgcmVzdWx0OiB7W3N0cmluZ106IEFycmF5PHsgZmVhdHVyZUluZGV4OiBudW1iZXIsIGZlYXR1cmU6IEdlb0pTT05GZWF0dXJlIH0+fSxcbiAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICBmZWF0dXJlSW5kZXg6IG51bWJlcixcbiAgICAgICAgZmlsdGVyOiBGZWF0dXJlRmlsdGVyLFxuICAgICAgICBmaWx0ZXJMYXllcklEczogQXJyYXk8c3RyaW5nPixcbiAgICAgICAgc3R5bGVMYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn0sXG4gICAgICAgIGludGVyc2VjdGlvblRlc3Q/OiAoZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsIHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIpID0+IGJvb2xlYW4gfCBudW1iZXIpIHtcblxuICAgICAgICBjb25zdCBsYXllcklEcyA9IHRoaXMuYnVja2V0TGF5ZXJJRHNbYnVja2V0SW5kZXhdO1xuICAgICAgICBpZiAoZmlsdGVyTGF5ZXJJRHMgJiYgIWFycmF5c0ludGVyc2VjdChmaWx0ZXJMYXllcklEcywgbGF5ZXJJRHMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyTmFtZSA9IHRoaXMuc291cmNlTGF5ZXJDb2Rlci5kZWNvZGUoc291cmNlTGF5ZXJJbmRleCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gdGhpcy52dExheWVyc1tzb3VyY2VMYXllck5hbWVdO1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gc291cmNlTGF5ZXIuZmVhdHVyZShmZWF0dXJlSW5kZXgpO1xuXG4gICAgICAgIGlmICghZmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWiksIGZlYXR1cmUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGF5ZXJJRHMubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVySUQgPSBsYXllcklEc1tsXTtcblxuICAgICAgICAgICAgaWYgKGZpbHRlckxheWVySURzICYmIGZpbHRlckxheWVySURzLmluZGV4T2YobGF5ZXJJRCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN0eWxlTGF5ZXIgPSBzdHlsZUxheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgIGlmICghc3R5bGVMYXllcikgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblogPSAhaW50ZXJzZWN0aW9uVGVzdCB8fCBpbnRlcnNlY3Rpb25UZXN0KGZlYXR1cmUsIHN0eWxlTGF5ZXIpO1xuICAgICAgICAgICAgaWYgKCFpbnRlcnNlY3Rpb25aKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhcHBsaWVkIGZvciBub24tc3ltYm9sIGZlYXR1cmVzXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdlb2pzb25GZWF0dXJlID0gbmV3IEdlb0pTT05GZWF0dXJlKGZlYXR1cmUsIHRoaXMueiwgdGhpcy54LCB0aGlzLnkpO1xuICAgICAgICAgICAgKGdlb2pzb25GZWF0dXJlOiBhbnkpLmxheWVyID0gc3R5bGVMYXllci5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIGxldCBsYXllclJlc3VsdCA9IHJlc3VsdFtsYXllcklEXTtcbiAgICAgICAgICAgIGlmIChsYXllclJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbGF5ZXJSZXN1bHQgPSByZXN1bHRbbGF5ZXJJRF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxheWVyUmVzdWx0LnB1c2goe2ZlYXR1cmVJbmRleCwgZmVhdHVyZTogZ2VvanNvbkZlYXR1cmUsIGludGVyc2VjdGlvblp9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdpdmVuIGEgc2V0IG9mIHN5bWJvbCBpbmRleGVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9va2VkIHVwLFxuICAgIC8vIHJldHVybiBhIG1hdGNoaW5nIHNldCBvZiBHZW9KU09ORmVhdHVyZXNcbiAgICBsb29rdXBTeW1ib2xGZWF0dXJlcyhzeW1ib2xGZWF0dXJlSW5kZXhlczogQXJyYXk8bnVtYmVyPixcbiAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjOiBGaWx0ZXJTcGVjaWZpY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxheWVySURzOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlTGF5ZXJzOiB7W3N0cmluZ106IFN0eWxlTGF5ZXJ9KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICB0aGlzLmxvYWRWVExheWVycygpO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGZlYXR1cmVGaWx0ZXIoZmlsdGVyU3BlYyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBzeW1ib2xGZWF0dXJlSW5kZXggb2Ygc3ltYm9sRmVhdHVyZUluZGV4ZXMpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1hdGNoaW5nRmVhdHVyZShcbiAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgYnVja2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBzeW1ib2xGZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgIGZpbHRlckxheWVySURzLFxuICAgICAgICAgICAgICAgIHN0eWxlTGF5ZXJzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBoYXNMYXllcihpZDogc3RyaW5nKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRHMgb2YgdGhpcy5idWNrZXRMYXllcklEcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklEIG9mIGxheWVySURzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkID09PSBsYXllcklEKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKFxuICAgICdGZWF0dXJlSW5kZXgnLFxuICAgIEZlYXR1cmVJbmRleCxcbiAgICB7b21pdDogWydyYXdUaWxlRGF0YScsICdzb3VyY2VMYXllckNvZGVyJ119XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBGZWF0dXJlSW5kZXg7XG5cbmZ1bmN0aW9uIGdldEJvdW5kcyhnZW9tZXRyeTogQXJyYXk8UG9pbnQ+KSB7XG4gICAgbGV0IG1pblggPSBJbmZpbml0eTtcbiAgICBsZXQgbWluWSA9IEluZmluaXR5O1xuICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xuICAgIGxldCBtYXhZID0gLUluZmluaXR5O1xuICAgIGZvciAoY29uc3QgcCBvZiBnZW9tZXRyeSkge1xuICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcC54KTtcbiAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHAueSk7XG4gICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBwLngpO1xuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcC55KTtcbiAgICB9XG4gICAgcmV0dXJuIHttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZfTtcbn1cblxuZnVuY3Rpb24gdG9wRG93bkZlYXR1cmVDb21wYXJhdG9yKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGE7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3VuaXF1ZUlkLCBkZWVwRXF1YWwsIHBhcnNlQ2FjaGVDb250cm9sfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtkZXNlcmlhbGl6ZSBhcyBkZXNlcmlhbGl6ZUJ1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IEZlYXR1cmVJbmRleCBmcm9tICcuLi9kYXRhL2ZlYXR1cmVfaW5kZXgnO1xuaW1wb3J0IEdlb0pTT05GZWF0dXJlIGZyb20gJy4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uJztcbmltcG9ydCBmZWF0dXJlRmlsdGVyIGZyb20gJy4uL3N0eWxlLXNwZWMvZmVhdHVyZV9maWx0ZXInO1xuaW1wb3J0IFN5bWJvbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB7UmFzdGVyQm91bmRzQXJyYXksIENvbGxpc2lvbkJveEFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCB7VHJpYW5nbGVJbmRleEFycmF5fSBmcm9tICcuLi9kYXRhL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IFNvdXJjZUZlYXR1cmVTdGF0ZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcblxuY29uc3QgQ0xPQ0tfU0tFV19SRVRSWV9USU1FT1VUID0gMzAwMDA7XG5cbmltcG9ydCB0eXBlIHtCdWNrZXR9IGZyb20gJy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge1dvcmtlclRpbGVSZXN1bHR9IGZyb20gJy4vd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIERFTURhdGEgZnJvbSAnLi4vZGF0YS9kZW1fZGF0YSc7XG5pbXBvcnQgdHlwZSB7QWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQgdHlwZSBJbWFnZUF0bGFzIGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSBJbWFnZU1hbmFnZXIgZnJvbSAnLi4vcmVuZGVyL2ltYWdlX21hbmFnZXInO1xuaW1wb3J0IHR5cGUge01hc2t9IGZyb20gJy4uL3JlbmRlci90aWxlX21hc2snO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIEZyYW1lYnVmZmVyIGZyb20gJy4uL2dsL2ZyYW1lYnVmZmVyJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtMYXllckZlYXR1cmVTdGF0ZXN9IGZyb20gJy4vc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgVGlsZVN0YXRlID1cbiAgICB8ICdsb2FkaW5nJyAgIC8vIFRpbGUgZGF0YSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLlxuICAgIHwgJ2xvYWRlZCcgICAgLy8gVGlsZSBkYXRhIGhhcyBiZWVuIGxvYWRlZC4gVGlsZSBjYW4gYmUgcmVuZGVyZWQuXG4gICAgfCAncmVsb2FkaW5nJyAvLyBUaWxlIGRhdGEgaGFzIGJlZW4gbG9hZGVkIGFuZCBpcyBiZWluZyB1cGRhdGVkLiBUaWxlIGNhbiBiZSByZW5kZXJlZC5cbiAgICB8ICd1bmxvYWRlZCcgIC8vIFRpbGUgZGF0YSBoYXMgYmVlbiBkZWxldGVkLlxuICAgIHwgJ2Vycm9yZWQnICAgLy8gVGlsZSBkYXRhIHdhcyBub3QgbG9hZGVkIGJlY2F1c2Ugb2YgYW4gZXJyb3IuXG4gICAgfCAnZXhwaXJlZCc7ICAvKiBUaWxlIGRhdGEgd2FzIHByZXZpb3VzbHkgbG9hZGVkLCBidXQgaGFzIGV4cGlyZWQgcGVyIGl0c1xuICAgICAgICAgICAgICAgICAgICogSFRUUCBoZWFkZXJzIGFuZCBpcyBpbiB0aGUgcHJvY2VzcyBvZiByZWZyZXNoaW5nLiAqL1xuXG4vKipcbiAqIEEgdGlsZSBvYmplY3QgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgQ29vcmRpbmF0ZSwgd2hpY2ggZGVmaW5lc1xuICogaXRzIHBsYWNlLCBhcyB3ZWxsIGFzIGEgdW5pcXVlIElEIGFuZCBkYXRhIHRyYWNraW5nIGZvciBpdHMgY29udGVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRpbGUge1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICB1aWQ6IG51bWJlcjtcbiAgICB1c2VzOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBidWNrZXRzOiB7W3N0cmluZ106IEJ1Y2tldH07XG4gICAgbGF0ZXN0RmVhdHVyZUluZGV4OiA/RmVhdHVyZUluZGV4O1xuICAgIGxhdGVzdFJhd1RpbGVEYXRhOiA/QXJyYXlCdWZmZXI7XG4gICAgaW1hZ2VBdGxhczogP0ltYWdlQXRsYXM7XG4gICAgaW1hZ2VBdGxhc1RleHR1cmU6IFRleHR1cmU7XG4gICAgZ2x5cGhBdGxhc0ltYWdlOiA/QWxwaGFJbWFnZTtcbiAgICBnbHlwaEF0bGFzVGV4dHVyZTogVGV4dHVyZTtcbiAgICBleHBpcmF0aW9uVGltZTogYW55O1xuICAgIGV4cGlyZWRSZXF1ZXN0Q291bnQ6IG51bWJlcjtcbiAgICBzdGF0ZTogVGlsZVN0YXRlO1xuICAgIHRpbWVBZGRlZDogYW55O1xuICAgIGZhZGVFbmRUaW1lOiBhbnk7XG4gICAgY29sbGlzaW9uQm94QXJyYXk6ID9Db2xsaXNpb25Cb3hBcnJheTtcbiAgICByZWRvV2hlbkRvbmU6IGJvb2xlYW47XG4gICAgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuO1xuICAgIHBsYWNlbWVudFNvdXJjZTogYW55O1xuICAgIGFjdG9yOiA/QWN0b3I7XG4gICAgdnRMYXllcnM6IHtbc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfTtcbiAgICBtYXNrOiBNYXNrO1xuXG4gICAgbmVpZ2hib3JpbmdUaWxlczogP09iamVjdDtcbiAgICBkZW06ID9ERU1EYXRhO1xuICAgIGFib3J0ZWQ6ID9ib29sZWFuO1xuICAgIG1hc2tlZEJvdW5kc0J1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcbiAgICBtYXNrZWRJbmRleEJ1ZmZlcjogP0luZGV4QnVmZmVyO1xuICAgIHNlZ21lbnRzOiA/U2VnbWVudFZlY3RvcjtcbiAgICBuZWVkc0hpbGxzaGFkZVByZXBhcmU6ID9ib29sZWFuO1xuICAgIHJlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuICAgIHRleHR1cmU6IGFueTtcbiAgICBmYm86ID9GcmFtZWJ1ZmZlcjtcbiAgICBkZW1UZXh0dXJlOiA/VGV4dHVyZTtcbiAgICByZWZyZXNoZWRVcG9uRXhwaXJhdGlvbjogYm9vbGVhbjtcbiAgICByZWxvYWRDYWxsYmFjazogYW55O1xuICAgIHJlc291cmNlVGltaW5nOiA/QXJyYXk8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZz47XG4gICAgcXVlcnlQYWRkaW5nOiBudW1iZXI7XG5cbiAgICBzeW1ib2xGYWRlSG9sZFVudGlsOiA/bnVtYmVyO1xuICAgIGhhc1N5bWJvbEJ1Y2tldHM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRFxuICAgICAqIEBwYXJhbSBzaXplXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCBzaXplOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aWxlSUQgPSB0aWxlSUQ7XG4gICAgICAgIHRoaXMudWlkID0gdW5pcXVlSWQoKTtcbiAgICAgICAgdGhpcy51c2VzID0gMDtcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IHNpemU7XG4gICAgICAgIHRoaXMuYnVja2V0cyA9IHt9O1xuICAgICAgICB0aGlzLmV4cGlyYXRpb25UaW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5xdWVyeVBhZGRpbmcgPSAwO1xuICAgICAgICB0aGlzLmhhc1N5bWJvbEJ1Y2tldHMgPSBmYWxzZTtcblxuICAgICAgICAvLyBDb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyBhIHJlc3BvbnNlIHdhcyBhbHJlYWR5IGV4cGlyZWQgd2hlblxuICAgICAgICAvLyByZWNlaXZlZC4gV2UncmUgdXNpbmcgdGhpcyB0byBhZGQgYSBkZWxheSB3aGVuIG1ha2luZyBhIG5ldyByZXF1ZXN0XG4gICAgICAgIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8ga2VlcCByZXRyeWluZyBpbW1lZGlhdGVseSBpbiBjYXNlIG9mIGEgc2VydmVyXG4gICAgICAgIC8vIHNlcnZpbmcgZXhwaXJlZCB0aWxlcy5cbiAgICAgICAgdGhpcy5leHBpcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAgICAgICB0aGlzLnN0YXRlID0gJ2xvYWRpbmcnO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyRmFkZUR1cmF0aW9uKGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZmFkZUVuZFRpbWUgPSBkdXJhdGlvbiArIHRoaXMudGltZUFkZGVkO1xuICAgICAgICBpZiAoZmFkZUVuZFRpbWUgPCBicm93c2VyLm5vdygpKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmZhZGVFbmRUaW1lICYmIGZhZGVFbmRUaW1lIDwgdGhpcy5mYWRlRW5kVGltZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuZmFkZUVuZFRpbWUgPSBmYWRlRW5kVGltZTtcbiAgICB9XG5cbiAgICB3YXNSZXF1ZXN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSAnZXJyb3JlZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ2xvYWRlZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ3JlbG9hZGluZyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBkYXRhIG9iamVjdCB3aXRoIGEgJ2J1ZmZlcnMnIHByb3BlcnR5LCBsb2FkIGl0IGludG9cbiAgICAgKiB0aGlzIHRpbGUncyBlbGVtZW50R3JvdXBzIGFuZCBidWZmZXJzIHByb3BlcnRpZXMgYW5kIHNldCBsb2FkZWRcbiAgICAgKiB0byB0cnVlLiBJZiB0aGUgZGF0YSBpcyBudWxsLCBsaWtlIGluIHRoZSBjYXNlIG9mIGFuIGVtcHR5XG4gICAgICogR2VvSlNPTiB0aWxlLCBuby1vcCBidXQgc3RpbGwgc2V0IGxvYWRlZCB0byB0cnVlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAgICogQHBhcmFtIHBhaW50ZXJcbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9hZFZlY3RvckRhdGEoZGF0YTogV29ya2VyVGlsZVJlc3VsdCwgcGFpbnRlcjogYW55LCBqdXN0UmVsb2FkZWQ6ID9ib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0RhdGEoKSkge1xuICAgICAgICAgICAgdGhpcy51bmxvYWRWZWN0b3JEYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gJ2xvYWRlZCc7XG5cbiAgICAgICAgLy8gZW1wdHkgR2VvSlNPTiB0aWxlXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25Cb3hBcnJheSA9IG5ldyBDb2xsaXNpb25Cb3hBcnJheSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEuZmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCA9IGRhdGEuZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgaWYgKGRhdGEucmF3VGlsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IHZlY3RvciB0aWxlcyBoYXZlIHJhd1RpbGVEYXRhLCBhbmQgdGhleSB3b24ndCB1cGRhdGUgaXQgZm9yXG4gICAgICAgICAgICAgICAgLy8gJ3JlbG9hZFRpbGUnXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RSYXdUaWxlRGF0YSA9IGRhdGEucmF3VGlsZURhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEgPSBkYXRhLnJhd1RpbGVEYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhdGVzdFJhd1RpbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcmF3VGlsZURhdGEgaGFzbid0IHVwZGF0ZWQsIGhvbGQgb250byBhIHBvaW50ZXIgdG8gdGhlIGxhc3RcbiAgICAgICAgICAgICAgICAvLyBvbmUgd2UgcmVjZWl2ZWRcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSA9IHRoaXMubGF0ZXN0UmF3VGlsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Cb3hBcnJheSA9IGRhdGEuY29sbGlzaW9uQm94QXJyYXk7XG4gICAgICAgIHRoaXMuYnVja2V0cyA9IGRlc2VyaWFsaXplQnVja2V0KGRhdGEuYnVja2V0cywgcGFpbnRlci5zdHlsZSk7XG5cbiAgICAgICAgdGhpcy5oYXNTeW1ib2xCdWNrZXRzID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgaWYgKGJ1Y2tldCBpbnN0YW5jZW9mIFN5bWJvbEJ1Y2tldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzU3ltYm9sQnVja2V0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGp1c3RSZWxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuanVzdFJlbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXJ5UGFkZGluZyA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgdGhpcy5xdWVyeVBhZGRpbmcgPSBNYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZywgcGFpbnRlci5zdHlsZS5nZXRMYXllcihpZCkucXVlcnlSYWRpdXMoYnVja2V0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXMgPSBkYXRhLmltYWdlQXRsYXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuZ2x5cGhBdGxhc0ltYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmdseXBoQXRsYXNJbWFnZSA9IGRhdGEuZ2x5cGhBdGxhc0ltYWdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVsZWFzZSBhbnkgZGF0YSBvciBXZWJHTCByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHRpbGUuXG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHVubG9hZFZlY3RvckRhdGEoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICB0aGlzLmJ1Y2tldHNbaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1Y2tldHMgPSB7fTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZUF0bGFzVGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUF0bGFzVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXggPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ3VubG9hZGVkJztcbiAgICB9XG5cbiAgICB1bmxvYWRERU1EYXRhKCkge1xuICAgICAgICB0aGlzLmRlbSA9IG51bGw7XG4gICAgICAgIHRoaXMubmVpZ2hib3JpbmdUaWxlcyA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAndW5sb2FkZWQnO1xuICAgIH1cblxuICAgIGdldEJ1Y2tldChsYXllcjogU3R5bGVMYXllcikge1xuICAgICAgICByZXR1cm4gdGhpcy5idWNrZXRzW2xheWVyLmlkXTtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuYnVja2V0cykge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy5idWNrZXRzW2lkXTtcbiAgICAgICAgICAgIGlmIChidWNrZXQudXBsb2FkUGVuZGluZygpKSB7XG4gICAgICAgICAgICAgICAgYnVja2V0LnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VBdGxhcyAmJiAhdGhpcy5pbWFnZUF0bGFzLnVwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXNUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgdGhpcy5pbWFnZUF0bGFzLmltYWdlLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nbHlwaEF0bGFzSW1hZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLmdseXBoQXRsYXNJbWFnZSwgZ2wuQUxQSEEpO1xuICAgICAgICAgICAgdGhpcy5nbHlwaEF0bGFzSW1hZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJlcGFyZShpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlcikge1xuICAgICAgICBpZiAodGhpcy5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXMucGF0Y2hVcGRhdGVkSW1hZ2VzKGltYWdlTWFuYWdlciwgdGhpcy5pbWFnZUF0bGFzVGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBRdWVyaWVzIG5vbi1zeW1ib2wgZmVhdHVyZXMgcmVuZGVyZWQgZm9yIHRoaXMgdGlsZS5cbiAgICAvLyBTeW1ib2wgZmVhdHVyZXMgYXJlIHF1ZXJpZWQgZ2xvYmFsbHlcbiAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMobGF5ZXJzOiB7W3N0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGZWF0dXJlU3RhdGU6IFNvdXJjZUZlYXR1cmVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmFRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sIGxheWVyczogQXJyYXk8c3RyaW5nPiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4UGl0Y2hTY2FsZUZhY3RvcjogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KToge1tzdHJpbmddOiBBcnJheTx7IGZlYXR1cmVJbmRleDogbnVtYmVyLCBmZWF0dXJlOiBHZW9KU09ORmVhdHVyZSB9Pn0ge1xuICAgICAgICBpZiAoIXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4IHx8ICF0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSlcbiAgICAgICAgICAgIHJldHVybiB7fTtcblxuICAgICAgICByZXR1cm4gdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe1xuICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIGNhbWVyYVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplLFxuICAgICAgICAgICAgcGl4ZWxQb3NNYXRyaXgsXG4gICAgICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBxdWVyeVBhZGRpbmc6IHRoaXMucXVlcnlQYWRkaW5nICogbWF4UGl0Y2hTY2FsZUZhY3RvclxuICAgICAgICB9LCBsYXllcnMsIHNvdXJjZUZlYXR1cmVTdGF0ZSk7XG4gICAgfVxuXG4gICAgcXVlcnlTb3VyY2VGZWF0dXJlcyhyZXN1bHQ6IEFycmF5PEdlb0pTT05GZWF0dXJlPiwgcGFyYW1zOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCB8fCAhdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEpIHJldHVybjtcblxuICAgICAgICBjb25zdCB2dExheWVycyA9IHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LmxvYWRWVExheWVycygpO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gcGFyYW1zID8gcGFyYW1zLnNvdXJjZUxheWVyIDogJyc7XG4gICAgICAgIGNvbnN0IGxheWVyID0gdnRMYXllcnMuX2dlb2pzb25UaWxlTGF5ZXIgfHwgdnRMYXllcnNbc291cmNlTGF5ZXJdO1xuXG4gICAgICAgIGlmICghbGF5ZXIpIHJldHVybjtcblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBmZWF0dXJlRmlsdGVyKHBhcmFtcyAmJiBwYXJhbXMuZmlsdGVyKTtcbiAgICAgICAgY29uc3Qge3osIHgsIHl9ID0gdGhpcy50aWxlSUQuY2Fub25pY2FsO1xuICAgICAgICBjb25zdCBjb29yZCA9IHt6LCB4LCB5fTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbGF5ZXIuZmVhdHVyZShpKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSwgZmVhdHVyZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBnZW9qc29uRmVhdHVyZSA9IG5ldyBHZW9KU09ORmVhdHVyZShmZWF0dXJlLCB6LCB4LCB5KTtcbiAgICAgICAgICAgICAgICAoZ2VvanNvbkZlYXR1cmU6IGFueSkudGlsZSA9IGNvb3JkO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlb2pzb25GZWF0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyTWFzaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VnbWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VnbWVudHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWFza2VkQm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5tYXNrZWRCb3VuZHNCdWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWFza2VkSW5kZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMubWFza2VkSW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubWFza2VkSW5kZXhCdWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRNYXNrKG1hc2s6IE1hc2ssIGNvbnRleHQ6IENvbnRleHQpIHtcblxuICAgICAgICAvLyBkb24ndCByZWRvIGJ1ZmZlciB3b3JrIGlmIHRoZSBtYXNrIGlzIHRoZSBzYW1lO1xuICAgICAgICBpZiAoZGVlcEVxdWFsKHRoaXMubWFzaywgbWFzaykpIHJldHVybjtcblxuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgICB0aGlzLmNsZWFyTWFzaygpO1xuXG4gICAgICAgIC8vIFdlIHdhbnQgdG8gcmVuZGVyIHRoZSBmdWxsIHRpbGUsIGFuZCBrZWVwaW5nIHRoZSBzZWdtZW50cy92ZXJ0aWNlcy9pbmRpY2VzIGVtcHR5IG1lYW5zXG4gICAgICAgIC8vIHVzaW5nIHRoZSBnbG9iYWwgc2hhcmVkIGJ1ZmZlcnMgZm9yIGNvdmVyaW5nIHRoZSBlbnRpcmUgdGlsZS5cbiAgICAgICAgaWYgKGRlZXBFcXVhbChtYXNrLCB7JzAnOiB0cnVlfSkpIHJldHVybjtcblxuICAgICAgICBjb25zdCBtYXNrZWRCb3VuZHNBcnJheSA9IG5ldyBSYXN0ZXJCb3VuZHNBcnJheSgpO1xuICAgICAgICBjb25zdCBpbmRleEFycmF5ID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuXG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgc2VnbWVudCBzbyB0aGF0IHdlIHdpbGwgdXBsb2FkIChlbXB0eSkgYnVmZmVycyBldmVuIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0b1xuICAgICAgICAvLyBkcmF3IGZvciB0aGlzIHRpbGUuXG4gICAgICAgIHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoMCwgbWFza2VkQm91bmRzQXJyYXksIGluZGV4QXJyYXkpO1xuXG4gICAgICAgIGNvbnN0IG1hc2tBcnJheSA9IE9iamVjdC5rZXlzKG1hc2spO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2tBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbWFza0Nvb3JkID0gbWFza1srbWFza0FycmF5W2ldXTtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRleEV4dGVudCA9IEVYVEVOVCA+PiBtYXNrQ29vcmQuejtcbiAgICAgICAgICAgIGNvbnN0IHRsVmVydGV4ID0gbmV3IFBvaW50KG1hc2tDb29yZC54ICogdmVydGV4RXh0ZW50LCBtYXNrQ29vcmQueSAqIHZlcnRleEV4dGVudCk7XG4gICAgICAgICAgICBjb25zdCBiclZlcnRleCA9IG5ldyBQb2ludCh0bFZlcnRleC54ICsgdmVydGV4RXh0ZW50LCB0bFZlcnRleC55ICsgdmVydGV4RXh0ZW50KTtcblxuICAgICAgICAgICAgLy8gbm90IHN1cmUgd2h5IGZsb3cgaXMgY29tcGxhaW5pbmcgaGVyZSBiZWNhdXNlIGl0IGRvZXNuJ3QgY29tcGxhaW4gYXQgTDQwMVxuICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9ICh0aGlzLnNlZ21lbnRzOiBhbnkpLnByZXBhcmVTZWdtZW50KDQsIG1hc2tlZEJvdW5kc0FycmF5LCBpbmRleEFycmF5KTtcblxuICAgICAgICAgICAgbWFza2VkQm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGxWZXJ0ZXgueCwgdGxWZXJ0ZXgueSwgdGxWZXJ0ZXgueCwgdGxWZXJ0ZXgueSk7XG4gICAgICAgICAgICBtYXNrZWRCb3VuZHNBcnJheS5lbXBsYWNlQmFjayhiclZlcnRleC54LCB0bFZlcnRleC55LCBiclZlcnRleC54LCB0bFZlcnRleC55KTtcbiAgICAgICAgICAgIG1hc2tlZEJvdW5kc0FycmF5LmVtcGxhY2VCYWNrKHRsVmVydGV4LngsIGJyVmVydGV4LnksIHRsVmVydGV4LngsIGJyVmVydGV4LnkpO1xuICAgICAgICAgICAgbWFza2VkQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYnJWZXJ0ZXgueCwgYnJWZXJ0ZXgueSwgYnJWZXJ0ZXgueCwgYnJWZXJ0ZXgueSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuICAgICAgICAgICAgLy8gMCwgMSwgMlxuICAgICAgICAgICAgLy8gMSwgMiwgM1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhvZmZzZXQsIG9mZnNldCArIDEsIG9mZnNldCArIDIpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhvZmZzZXQgKyAxLCBvZmZzZXQgKyAyLCBvZmZzZXQgKyAzKTtcblxuICAgICAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gNDtcbiAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKG1hc2tlZEJvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLm1hc2tlZEluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcihpbmRleEFycmF5KTtcbiAgICB9XG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gJ2xvYWRlZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ3JlbG9hZGluZycgfHwgdGhpcy5zdGF0ZSA9PT0gJ2V4cGlyZWQnO1xuICAgIH1cblxuICAgIHBhdHRlcm5zTG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZUF0bGFzICYmICEhT2JqZWN0LmtleXModGhpcy5pbWFnZUF0bGFzLnBhdHRlcm5Qb3NpdGlvbnMpLmxlbmd0aDtcbiAgICB9XG5cbiAgICBzZXRFeHBpcnlEYXRhKGRhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBwcmlvciA9IHRoaXMuZXhwaXJhdGlvblRpbWU7XG5cbiAgICAgICAgaWYgKGRhdGEuY2FjaGVDb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRDQyA9IHBhcnNlQ2FjaGVDb250cm9sKGRhdGEuY2FjaGVDb250cm9sKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRDQ1snbWF4LWFnZSddKSB0aGlzLmV4cGlyYXRpb25UaW1lID0gRGF0ZS5ub3coKSArIHBhcnNlZENDWydtYXgtYWdlJ10gKiAxMDAwO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZXhwaXJlcykge1xuICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uVGltZSA9IG5ldyBEYXRlKGRhdGEuZXhwaXJlcykuZ2V0VGltZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBsZXQgaXNFeHBpcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGlyYXRpb25UaW1lID4gbm93KSB7XG4gICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFwcmlvcikge1xuICAgICAgICAgICAgICAgIGlzRXhwaXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXhwaXJhdGlvblRpbWUgPCBwcmlvcikge1xuICAgICAgICAgICAgICAgIC8vIEV4cGlyaW5nIGRhdGUgaXMgZ29pbmcgYmFja3dhcmRzOlxuICAgICAgICAgICAgICAgIC8vIGZhbGwgYmFjayB0byBleHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuZXhwaXJhdGlvblRpbWUgLSBwcmlvcjtcblxuICAgICAgICAgICAgICAgIGlmICghZGVsdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VydmVyIGlzIHNlcnZpbmcgdGhlIHNhbWUgZXhwaXJlZCByZXNvdXJjZSBvdmVyIGFuZCBvdmVyOiBmYWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIGJhY2sgdG8gZXhwb25lbnRpYWwgYmFja29mZi5cbiAgICAgICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IGVpdGhlciB0aGUgY2xpZW50IG9yIHRoZSBzZXJ2ZXIgY2xvY2sgaXMgd3JvbmcgYW5kXG4gICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBpbnRlcnBvbGF0ZSBhIHZhbGlkIGV4cGlyYXRpb24gZGF0ZSAoZnJvbSB0aGUgY2xpZW50IFBPVilcbiAgICAgICAgICAgICAgICAgICAgLy8gb2JzZXJ2aW5nIGEgbWluaW11bSB0aW1lb3V0LlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGlyYXRpb25UaW1lID0gbm93ICsgTWF0aC5tYXgoZGVsdGEsIENMT0NLX1NLRVdfUkVUUllfVElNRU9VVCk7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0V4cGlyZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQrKztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gJ2V4cGlyZWQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RXhwaXJ5VGltZW91dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTAwMCAqICgxIDw8IE1hdGgubWluKHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCAtIDEsIDMxKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1heCB2YWx1ZSBmb3IgYHNldFRpbWVvdXRgIGltcGxlbWVudGF0aW9ucyBpcyBhIDMyIGJpdCBpbnRlZ2VyOyBjYXAgdGhpcyBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmV4cGlyYXRpb25UaW1lIC0gbmV3IERhdGUoKS5nZXRUaW1lKCksIE1hdGgucG93KDIsIDMxKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RmVhdHVyZVN0YXRlKHN0YXRlczogTGF5ZXJGZWF0dXJlU3RhdGVzLCBwYWludGVyOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCB8fFxuICAgICAgICAgICAgIXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhIHx8XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzdGF0ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdnRMYXllcnMgPSB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5sb2FkVlRMYXllcnMoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuYnVja2V0cykge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy5idWNrZXRzW2lkXTtcbiAgICAgICAgICAgIC8vIEJ1Y2tldHMgYXJlIGdyb3VwZWQgYnkgY29tbW9uIHNvdXJjZS1sYXllclxuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJJZCA9IGJ1Y2tldC5sYXllcnNbMF1bJ3NvdXJjZUxheWVyJ10gfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gdnRMYXllcnNbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllclN0YXRlcyA9IHN0YXRlc1tzb3VyY2VMYXllcklkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlTGF5ZXIgfHwgIXNvdXJjZUxheWVyU3RhdGVzIHx8IE9iamVjdC5rZXlzKHNvdXJjZUxheWVyU3RhdGVzKS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBidWNrZXQudXBkYXRlKHNvdXJjZUxheWVyU3RhdGVzLCBzb3VyY2VMYXllciwgdGhpcy5pbWFnZUF0bGFzICYmIHRoaXMuaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zIHx8IHt9KTtcbiAgICAgICAgICAgIGlmIChwYWludGVyICYmIHBhaW50ZXIuc3R5bGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5UGFkZGluZyA9IE1hdGgubWF4KHRoaXMucXVlcnlQYWRkaW5nLCBwYWludGVyLnN0eWxlLmdldExheWVyKGlkKS5xdWVyeVJhZGl1cyhidWNrZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvbGRpbmdGb3JGYWRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc3ltYm9sRmFkZUZpbmlzaGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbCB8fCB0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWwgPCBicm93c2VyLm5vdygpO1xuICAgIH1cblxuICAgIGNsZWFyRmFkZUhvbGQoKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzZXRIb2xkRHVyYXRpb24oZHVyYXRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWwgPSBicm93c2VyLm5vdygpICsgZHVyYXRpb247XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaWxlO1xuIiwiXG5leHBvcnQgZGVmYXVsdCBbJ3R5cGUnLCAnc291cmNlJywgJ3NvdXJjZS1sYXllcicsICdtaW56b29tJywgJ21heHpvb20nLCAnZmlsdGVyJywgJ2xheW91dCddO1xuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgY2hlY2tNYXhBbmdsZTtcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBBbmNob3IgZnJvbSAnLi9hbmNob3InO1xuXG4vKipcbiAqIExhYmVscyBwbGFjZWQgYXJvdW5kIHJlYWxseSBzaGFycCBhbmdsZXMgYXJlbid0IHJlYWRhYmxlLiBDaGVjayBpZiBhbnlcbiAqIHBhcnQgb2YgdGhlIHBvdGVudGlhbCBsYWJlbCBoYXMgYSBjb21iaW5lZCBhbmdsZSB0aGF0IGlzIHRvbyBiaWcuXG4gKlxuICogQHBhcmFtIGxpbmVcbiAqIEBwYXJhbSBhbmNob3IgVGhlIHBvaW50IG9uIHRoZSBsaW5lIGFyb3VuZCB3aGljaCB0aGUgbGFiZWwgaXMgYW5jaG9yZWQuXG4gKiBAcGFyYW0gbGFiZWxMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgbGFiZWwgaW4gZ2VvbWV0cnkgdW5pdHMuXG4gKiBAcGFyYW0gd2luZG93U2l6ZSBUaGUgY2hlY2sgZmFpbHMgaWYgdGhlIGNvbWJpbmVkIGFuZ2xlcyB3aXRoaW4gYSBwYXJ0IG9mIHRoZSBsaW5lIHRoYXQgaXMgYHdpbmRvd1NpemVgIGxvbmcgaXMgdG9vIGJpZy5cbiAqIEBwYXJhbSBtYXhBbmdsZSBUaGUgbWF4aW11bSBjb21iaW5lZCBhbmdsZSB0aGF0IGFueSB3aW5kb3cgYWxvbmcgdGhlIGxhYmVsIGlzIGFsbG93ZWQgdG8gaGF2ZS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGJlIHBsYWNlZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tNYXhBbmdsZShsaW5lOiBBcnJheTxQb2ludD4sIGFuY2hvcjogQW5jaG9yLCBsYWJlbExlbmd0aDogbnVtYmVyLCB3aW5kb3dTaXplOiBudW1iZXIsIG1heEFuZ2xlOiBudW1iZXIpIHtcblxuICAgIC8vIGhvcml6b250YWwgbGFiZWxzIGFsd2F5cyBwYXNzXG4gICAgaWYgKGFuY2hvci5zZWdtZW50ID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXG4gICAgbGV0IHAgPSBhbmNob3I7XG4gICAgbGV0IGluZGV4ID0gYW5jaG9yLnNlZ21lbnQgKyAxO1xuICAgIGxldCBhbmNob3JEaXN0YW5jZSA9IDA7XG5cbiAgICAvLyBtb3ZlIGJhY2t3YXJkcyBhbG9uZyB0aGUgbGluZSB0byB0aGUgZmlyc3Qgc2VnbWVudCB0aGUgbGFiZWwgYXBwZWFycyBvblxuICAgIHdoaWxlIChhbmNob3JEaXN0YW5jZSA+IC1sYWJlbExlbmd0aCAvIDIpIHtcbiAgICAgICAgaW5kZXgtLTtcblxuICAgICAgICAvLyB0aGVyZSBpc24ndCBlbm91Z2ggcm9vbSBmb3IgdGhlIGxhYmVsIGFmdGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmVcbiAgICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGFuY2hvckRpc3RhbmNlIC09IGxpbmVbaW5kZXhdLmRpc3QocCk7XG4gICAgICAgIHAgPSBsaW5lW2luZGV4XTtcbiAgICB9XG5cbiAgICBhbmNob3JEaXN0YW5jZSArPSBsaW5lW2luZGV4XS5kaXN0KGxpbmVbaW5kZXggKyAxXSk7XG4gICAgaW5kZXgrKztcblxuICAgIC8vIHN0b3JlIHJlY2VudCBjb3JuZXJzIGFuZCB0aGVpciB0b3RhbCBhbmdsZSBkaWZmZXJlbmNlXG4gICAgY29uc3QgcmVjZW50Q29ybmVycyA9IFtdO1xuICAgIGxldCByZWNlbnRBbmdsZURlbHRhID0gMDtcblxuICAgIC8vIG1vdmUgZm9yd2FyZHMgYnkgdGhlIGxlbmd0aCBvZiB0aGUgbGFiZWwgYW5kIGNoZWNrIGFuZ2xlcyBhbG9uZyB0aGUgd2F5XG4gICAgd2hpbGUgKGFuY2hvckRpc3RhbmNlIDwgbGFiZWxMZW5ndGggLyAyKSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBsaW5lW2luZGV4IC0gMV07XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBsaW5lW2luZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGxpbmVbaW5kZXggKyAxXTtcblxuICAgICAgICAvLyB0aGVyZSBpc24ndCBlbm91Z2ggcm9vbSBmb3IgdGhlIGxhYmVsIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBsaW5lXG4gICAgICAgIGlmICghbmV4dCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGxldCBhbmdsZURlbHRhID0gcHJldi5hbmdsZVRvKGN1cnJlbnQpIC0gY3VycmVudC5hbmdsZVRvKG5leHQpO1xuICAgICAgICAvLyByZXN0cmljdCBhbmdsZSB0byAtcGkuLnBpIHJhbmdlXG4gICAgICAgIGFuZ2xlRGVsdGEgPSBNYXRoLmFicygoKGFuZ2xlRGVsdGEgKyAzICogTWF0aC5QSSkgJSAoTWF0aC5QSSAqIDIpKSAtIE1hdGguUEkpO1xuXG4gICAgICAgIHJlY2VudENvcm5lcnMucHVzaCh7XG4gICAgICAgICAgICBkaXN0YW5jZTogYW5jaG9yRGlzdGFuY2UsXG4gICAgICAgICAgICBhbmdsZURlbHRhXG4gICAgICAgIH0pO1xuICAgICAgICByZWNlbnRBbmdsZURlbHRhICs9IGFuZ2xlRGVsdGE7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGNvcm5lcnMgdGhhdCBhcmUgZmFyIGVub3VnaCBhd2F5IGZyb20gdGhlIGxpc3Qgb2YgcmVjZW50IGFuY2hvcnNcbiAgICAgICAgd2hpbGUgKGFuY2hvckRpc3RhbmNlIC0gcmVjZW50Q29ybmVyc1swXS5kaXN0YW5jZSA+IHdpbmRvd1NpemUpIHtcbiAgICAgICAgICAgIHJlY2VudEFuZ2xlRGVsdGEgLT0gcmVjZW50Q29ybmVycy5zaGlmdCgpLmFuZ2xlRGVsdGE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGUgc3VtIG9mIGFuZ2xlcyB3aXRoaW4gdGhlIHdpbmRvdyBhcmVhIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gY2hlY2sgZmFpbHMuXG4gICAgICAgIGlmIChyZWNlbnRBbmdsZURlbHRhID4gbWF4QW5nbGUpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpbmRleCsrO1xuICAgICAgICBhbmNob3JEaXN0YW5jZSArPSBjdXJyZW50LmRpc3QobmV4dCk7XG4gICAgfVxuXG4gICAgLy8gbm8gcGFydCBvZiB0aGUgbGluZSBoYWQgYW4gYW5nbGUgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIGFsbG93ZWQuIGNoZWNrIHBhc3Nlcy5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuXG5pbXBvcnQgQW5jaG9yIGZyb20gJy4uL3N5bWJvbC9hbmNob3InO1xuaW1wb3J0IGNoZWNrTWF4QW5nbGUgZnJvbSAnLi9jaGVja19tYXhfYW5nbGUnO1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtTaGFwaW5nLCBQb3NpdGlvbmVkSWNvbn0gZnJvbSAnLi9zaGFwaW5nJztcblxuZXhwb3J0IHtnZXRBbmNob3JzLCBnZXRDZW50ZXJBbmNob3J9O1xuXG5mdW5jdGlvbiBnZXRMaW5lTGVuZ3RoKGxpbmU6IEFycmF5PFBvaW50Pik6IG51bWJlciB7XG4gICAgbGV0IGxpbmVMZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGluZS5sZW5ndGggLSAxOyBrKyspIHtcbiAgICAgICAgbGluZUxlbmd0aCArPSBsaW5lW2tdLmRpc3QobGluZVtrICsgMV0pO1xuICAgIH1cbiAgICByZXR1cm4gbGluZUxlbmd0aDtcbn1cblxuZnVuY3Rpb24gZ2V0QW5nbGVXaW5kb3dTaXplKHNoYXBlZFRleHQ6ID9TaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNjYWxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBzaGFwZWRUZXh0ID9cbiAgICAgICAgMyAvIDUgKiBnbHlwaFNpemUgKiBib3hTY2FsZSA6XG4gICAgICAgIDA7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXBlZExhYmVsTGVuZ3RoKHNoYXBlZFRleHQ6ID9TaGFwaW5nLCBzaGFwZWRJY29uOiA/UG9zaXRpb25lZEljb24pOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgc2hhcGVkVGV4dCA/IHNoYXBlZFRleHQucmlnaHQgLSBzaGFwZWRUZXh0LmxlZnQgOiAwLFxuICAgICAgICBzaGFwZWRJY29uID8gc2hhcGVkSWNvbi5yaWdodCAtIHNoYXBlZEljb24ubGVmdCA6IDApO1xufVxuXG5mdW5jdGlvbiBnZXRDZW50ZXJBbmNob3IobGluZTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIG1heEFuZ2xlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dDogP1NoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogP1Bvc2l0aW9uZWRJY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNjYWxlOiBudW1iZXIpIHtcbiAgICBjb25zdCBhbmdsZVdpbmRvd1NpemUgPSBnZXRBbmdsZVdpbmRvd1NpemUoc2hhcGVkVGV4dCwgZ2x5cGhTaXplLCBib3hTY2FsZSk7XG4gICAgY29uc3QgbGFiZWxMZW5ndGggPSBnZXRTaGFwZWRMYWJlbExlbmd0aChzaGFwZWRUZXh0LCBzaGFwZWRJY29uKSAqIGJveFNjYWxlO1xuXG4gICAgbGV0IHByZXZEaXN0YW5jZSA9IDA7XG4gICAgY29uc3QgY2VudGVyRGlzdGFuY2UgPSBnZXRMaW5lTGVuZ3RoKGxpbmUpIC8gMjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGggLSAxOyBpKyspIHtcblxuICAgICAgICBjb25zdCBhID0gbGluZVtpXSxcbiAgICAgICAgICAgIGIgPSBsaW5lW2kgKyAxXTtcblxuICAgICAgICBjb25zdCBzZWdtZW50RGlzdGFuY2UgPSBhLmRpc3QoYik7XG5cbiAgICAgICAgaWYgKHByZXZEaXN0YW5jZSArIHNlZ21lbnREaXN0YW5jZSA+IGNlbnRlckRpc3RhbmNlKSB7XG4gICAgICAgICAgICAvLyBUaGUgY2VudGVyIGlzIG9uIHRoaXMgc2VnbWVudFxuICAgICAgICAgICAgY29uc3QgdCA9IChjZW50ZXJEaXN0YW5jZSAtIHByZXZEaXN0YW5jZSkgLyBzZWdtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgeCA9IGludGVycG9sYXRlKGEueCwgYi54LCB0KSxcbiAgICAgICAgICAgICAgICB5ID0gaW50ZXJwb2xhdGUoYS55LCBiLnksIHQpO1xuXG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgQW5jaG9yKHgsIHksIGIuYW5nbGVUbyhhKSwgaSk7XG4gICAgICAgICAgICBhbmNob3IuX3JvdW5kKCk7XG4gICAgICAgICAgICBpZiAoIWFuZ2xlV2luZG93U2l6ZSB8fCBjaGVja01heEFuZ2xlKGxpbmUsIGFuY2hvciwgbGFiZWxMZW5ndGgsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFuY2hvcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJldkRpc3RhbmNlICs9IHNlZ21lbnREaXN0YW5jZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEFuY2hvcnMobGluZTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIG1heEFuZ2xlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHQ6ID9TaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiA/UG9zaXRpb25lZEljb24sXG4gICAgICAgICAgICAgICAgICAgIGdseXBoU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBib3hTY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBvdmVyc2NhbGluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICB0aWxlRXh0ZW50OiBudW1iZXIpIHtcblxuICAgIC8vIFJlc2FtcGxlIGEgbGluZSB0byBnZXQgYW5jaG9yIHBvaW50cyBmb3IgbGFiZWxzIGFuZCBjaGVjayB0aGF0IGVhY2hcbiAgICAvLyBwb3RlbnRpYWwgbGFiZWwgcGFzc2VzIHRleHQtbWF4LWFuZ2xlIGNoZWNrIGFuZCBoYXMgZW5vdWdoIGZyb29tIHRvIGZpdFxuICAgIC8vIG9uIHRoZSBsaW5lLlxuXG4gICAgY29uc3QgYW5nbGVXaW5kb3dTaXplID0gZ2V0QW5nbGVXaW5kb3dTaXplKHNoYXBlZFRleHQsIGdseXBoU2l6ZSwgYm94U2NhbGUpO1xuICAgIGNvbnN0IHNoYXBlZExhYmVsTGVuZ3RoID0gZ2V0U2hhcGVkTGFiZWxMZW5ndGgoc2hhcGVkVGV4dCwgc2hhcGVkSWNvbik7XG4gICAgY29uc3QgbGFiZWxMZW5ndGggPSBzaGFwZWRMYWJlbExlbmd0aCAqIGJveFNjYWxlO1xuXG4gICAgLy8gSXMgdGhlIGxpbmUgY29udGludWVkIGZyb20gb3V0c2lkZSB0aGUgdGlsZSBib3VuZGFyeT9cbiAgICBjb25zdCBpc0xpbmVDb250aW51ZWQgPSBsaW5lWzBdLnggPT09IDAgfHwgbGluZVswXS54ID09PSB0aWxlRXh0ZW50IHx8IGxpbmVbMF0ueSA9PT0gMCB8fCBsaW5lWzBdLnkgPT09IHRpbGVFeHRlbnQ7XG5cbiAgICAvLyBJcyB0aGUgbGFiZWwgbG9uZywgcmVsYXRpdmUgdG8gdGhlIHNwYWNpbmc/XG4gICAgLy8gSWYgc28sIGFkanVzdCB0aGUgc3BhY2luZyBzbyB0aGVyZSBpcyBhbHdheXMgYSBtaW5pbXVtIHNwYWNlIG9mIGBzcGFjaW5nIC8gNGAgYmV0d2VlbiBsYWJlbCBlZGdlcy5cbiAgICBpZiAoc3BhY2luZyAtIGxhYmVsTGVuZ3RoIDwgc3BhY2luZyAvIDQpIHtcbiAgICAgICAgc3BhY2luZyA9IGxhYmVsTGVuZ3RoICsgc3BhY2luZyAvIDQ7XG4gICAgfVxuXG4gICAgLy8gT2Zmc2V0IHRoZSBmaXJzdCBhbmNob3IgYnk6XG4gICAgLy8gRWl0aGVyIGhhbGYgdGhlIGxhYmVsIGxlbmd0aCBwbHVzIGEgZml4ZWQgZXh0cmEgb2Zmc2V0IGlmIHRoZSBsaW5lIGlzIG5vdCBjb250aW51ZWRcbiAgICAvLyBPciBoYWxmIHRoZSBzcGFjaW5nIGlmIHRoZSBsaW5lIGlzIGNvbnRpbnVlZC5cblxuICAgIC8vIEZvciBub24tY29udGludWVkIGxpbmVzLCBhZGQgYSBiaXQgb2YgZml4ZWQgZXh0cmEgb2Zmc2V0IHRvIGF2b2lkIGNvbGxpc2lvbnMgYXQgVCBpbnRlcnNlY3Rpb25zLlxuICAgIGNvbnN0IGZpeGVkRXh0cmFPZmZzZXQgPSBnbHlwaFNpemUgKiAyO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gIWlzTGluZUNvbnRpbnVlZCA/XG4gICAgICAgICgoc2hhcGVkTGFiZWxMZW5ndGggLyAyICsgZml4ZWRFeHRyYU9mZnNldCkgKiBib3hTY2FsZSAqIG92ZXJzY2FsaW5nKSAlIHNwYWNpbmcgOlxuICAgICAgICAoc3BhY2luZyAvIDIgKiBvdmVyc2NhbGluZykgJSBzcGFjaW5nO1xuXG4gICAgcmV0dXJuIHJlc2FtcGxlKGxpbmUsIG9mZnNldCwgc3BhY2luZywgYW5nbGVXaW5kb3dTaXplLCBtYXhBbmdsZSwgbGFiZWxMZW5ndGgsIGlzTGluZUNvbnRpbnVlZCwgZmFsc2UsIHRpbGVFeHRlbnQpO1xufVxuXG5mdW5jdGlvbiByZXNhbXBsZShsaW5lLCBvZmZzZXQsIHNwYWNpbmcsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUsIGxhYmVsTGVuZ3RoLCBpc0xpbmVDb250aW51ZWQsIHBsYWNlQXRNaWRkbGUsIHRpbGVFeHRlbnQpIHtcblxuICAgIGNvbnN0IGhhbGZMYWJlbExlbmd0aCA9IGxhYmVsTGVuZ3RoIC8gMjtcbiAgICBjb25zdCBsaW5lTGVuZ3RoID0gZ2V0TGluZUxlbmd0aChsaW5lKTtcblxuICAgIGxldCBkaXN0YW5jZSA9IDAsXG4gICAgICAgIG1hcmtlZERpc3RhbmNlID0gb2Zmc2V0IC0gc3BhY2luZztcblxuICAgIGxldCBhbmNob3JzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoIC0gMTsgaSsrKSB7XG5cbiAgICAgICAgY29uc3QgYSA9IGxpbmVbaV0sXG4gICAgICAgICAgICBiID0gbGluZVtpICsgMV07XG5cbiAgICAgICAgY29uc3Qgc2VnbWVudERpc3QgPSBhLmRpc3QoYiksXG4gICAgICAgICAgICBhbmdsZSA9IGIuYW5nbGVUbyhhKTtcblxuICAgICAgICB3aGlsZSAobWFya2VkRGlzdGFuY2UgKyBzcGFjaW5nIDwgZGlzdGFuY2UgKyBzZWdtZW50RGlzdCkge1xuICAgICAgICAgICAgbWFya2VkRGlzdGFuY2UgKz0gc3BhY2luZztcblxuICAgICAgICAgICAgY29uc3QgdCA9IChtYXJrZWREaXN0YW5jZSAtIGRpc3RhbmNlKSAvIHNlZ21lbnREaXN0LFxuICAgICAgICAgICAgICAgIHggPSBpbnRlcnBvbGF0ZShhLngsIGIueCwgdCksXG4gICAgICAgICAgICAgICAgeSA9IGludGVycG9sYXRlKGEueSwgYi55LCB0KTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgcG9pbnQgaXMgd2l0aGluIHRoZSB0aWxlIGJvdW5kYXJpZXMgYW5kIHRoYXRcbiAgICAgICAgICAgIC8vIHRoZSBsYWJlbCB3b3VsZCBmaXQgYmVmb3JlIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgbGluZVxuICAgICAgICAgICAgLy8gaWYgcGxhY2VkIGF0IHRoaXMgcG9pbnQuXG4gICAgICAgICAgICBpZiAoeCA+PSAwICYmIHggPCB0aWxlRXh0ZW50ICYmIHkgPj0gMCAmJiB5IDwgdGlsZUV4dGVudCAmJlxuICAgICAgICAgICAgICAgICAgICBtYXJrZWREaXN0YW5jZSAtIGhhbGZMYWJlbExlbmd0aCA+PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlZERpc3RhbmNlICsgaGFsZkxhYmVsTGVuZ3RoIDw9IGxpbmVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgQW5jaG9yKHgsIHksIGFuZ2xlLCBpKTtcbiAgICAgICAgICAgICAgICBhbmNob3IuX3JvdW5kKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWFuZ2xlV2luZG93U2l6ZSB8fCBjaGVja01heEFuZ2xlKGxpbmUsIGFuY2hvciwgbGFiZWxMZW5ndGgsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaChhbmNob3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3RhbmNlICs9IHNlZ21lbnREaXN0O1xuICAgIH1cblxuICAgIGlmICghcGxhY2VBdE1pZGRsZSAmJiAhYW5jaG9ycy5sZW5ndGggJiYgIWlzTGluZUNvbnRpbnVlZCkge1xuICAgICAgICAvLyBUaGUgZmlyc3QgYXR0ZW1wdCBhdCBmaW5kaW5nIGFuY2hvcnMgYXQgd2hpY2ggbGFiZWxzIGNhbiBiZSBwbGFjZWQgZmFpbGVkLlxuICAgICAgICAvLyBUcnkgYWdhaW4sIGJ1dCB0aGlzIHRpbWUganVzdCB0cnkgcGxhY2luZyBvbmUgYW5jaG9yIGF0IHRoZSBtaWRkbGUgb2YgdGhlIGxpbmUuXG4gICAgICAgIC8vIFRoaXMgaGFzIHRoZSBtb3N0IGVmZmVjdCBmb3Igc2hvcnQgbGluZXMgaW4gb3ZlcnNjYWxlZCB0aWxlcywgc2luY2UgdGhlXG4gICAgICAgIC8vIGluaXRpYWwgb2Zmc2V0IHVzZWQgaW4gb3ZlcnNjYWxlZCB0aWxlcyBpcyBjYWxjdWxhdGVkIHRvIGFsaWduIGxhYmVscyB3aXRoIHBvc2l0aW9ucyBpblxuICAgICAgICAvLyBwYXJlbnQgdGlsZXMgaW5zdGVhZCBvZiBwbGFjaW5nIHRoZSBsYWJlbCBhcyBjbG9zZSB0byB0aGUgYmVnaW5uaW5nIGFzIHBvc3NpYmxlLlxuICAgICAgICBhbmNob3JzID0gcmVzYW1wbGUobGluZSwgZGlzdGFuY2UgLyAyLCBzcGFjaW5nLCBhbmdsZVdpbmRvd1NpemUsIG1heEFuZ2xlLCBsYWJlbExlbmd0aCwgaXNMaW5lQ29udGludWVkLCB0cnVlLCB0aWxlRXh0ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYW5jaG9ycztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xpcExpbmU7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGFydCBvZiBhIG11bHRpbGluZSB0aGF0IGludGVyc2VjdHMgd2l0aCB0aGUgcHJvdmlkZWQgcmVjdGFuZ3VsYXIgYm94LlxuICpcbiAqIEBwYXJhbSBsaW5lc1xuICogQHBhcmFtIHgxIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGJveFxuICogQHBhcmFtIHkxIHRoZSB0b3AgZWRnZSBvZiB0aGUgYm94XG4gKiBAcGFyYW0geDIgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGJveFxuICogQHBhcmFtIHkyIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm94XG4gKiBAcmV0dXJucyBsaW5lc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xpcExpbmUobGluZXM6IEFycmF5PEFycmF5PFBvaW50Pj4sIHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpOiBBcnJheTxBcnJheTxQb2ludD4+IHtcbiAgICBjb25zdCBjbGlwcGVkTGluZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2xdO1xuICAgICAgICBsZXQgY2xpcHBlZExpbmU7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgbGV0IHAwID0gbGluZVtpXTtcbiAgICAgICAgICAgIGxldCBwMSA9IGxpbmVbaSArIDFdO1xuXG4gICAgICAgICAgICBpZiAocDAueCA8IHgxICYmIHAxLnggPCB4MSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMC54IDwgeDEpIHtcbiAgICAgICAgICAgICAgICBwMCA9IG5ldyBQb2ludCh4MSwgcDAueSArIChwMS55IC0gcDAueSkgKiAoKHgxIC0gcDAueCkgLyAocDEueCAtIHAwLngpKSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAxLnggPCB4MSkge1xuICAgICAgICAgICAgICAgIHAxID0gbmV3IFBvaW50KHgxLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDEgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHAwLnkgPCB5MSAmJiBwMS55IDwgeTEpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDAueSA8IHkxKSB7XG4gICAgICAgICAgICAgICAgcDAgPSBuZXcgUG9pbnQocDAueCArIChwMS54IC0gcDAueCkgKiAoKHkxIC0gcDAueSkgLyAocDEueSAtIHAwLnkpKSwgeTEpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMS55IDwgeTEpIHtcbiAgICAgICAgICAgICAgICBwMSA9IG5ldyBQb2ludChwMC54ICsgKHAxLnggLSBwMC54KSAqICgoeTEgLSBwMC55KSAvIChwMS55IC0gcDAueSkpLCB5MSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwMC54ID49IHgyICYmIHAxLnggPj0geDIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDAueCA+PSB4Mikge1xuICAgICAgICAgICAgICAgIHAwID0gbmV3IFBvaW50KHgyLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDIgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDEueCA+PSB4Mikge1xuICAgICAgICAgICAgICAgIHAxID0gbmV3IFBvaW50KHgyLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDIgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHAwLnkgPj0geTIgJiYgcDEueSA+PSB5Mikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMC55ID49IHkyKSB7XG4gICAgICAgICAgICAgICAgcDAgPSBuZXcgUG9pbnQocDAueCArIChwMS54IC0gcDAueCkgKiAoKHkyIC0gcDAueSkgLyAocDEueSAtIHAwLnkpKSwgeTIpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMS55ID49IHkyKSB7XG4gICAgICAgICAgICAgICAgcDEgPSBuZXcgUG9pbnQocDAueCArIChwMS54IC0gcDAueCkgKiAoKHkyIC0gcDAueSkgLyAocDEueSAtIHAwLnkpKSwgeTIpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWNsaXBwZWRMaW5lIHx8ICFwMC5lcXVhbHMoY2xpcHBlZExpbmVbY2xpcHBlZExpbmUubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgY2xpcHBlZExpbmUgPSBbcDBdO1xuICAgICAgICAgICAgICAgIGNsaXBwZWRMaW5lcy5wdXNoKGNsaXBwZWRMaW5lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2xpcHBlZExpbmUucHVzaChwMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xpcHBlZExpbmVzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQge0dMWVBIX1BCRl9CT1JERVJ9IGZyb20gJy4uL3N0eWxlL3BhcnNlX2dseXBoX3BiZic7XG5cbmltcG9ydCB0eXBlIEFuY2hvciBmcm9tICcuL2FuY2hvcic7XG5pbXBvcnQgdHlwZSB7UG9zaXRpb25lZEljb24sIFNoYXBpbmd9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtHbHlwaFBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvZ2x5cGhfYXRsYXMnO1xuaW1wb3J0IE9ORV9FTSBmcm9tICcuL29uZV9lbSc7XG5cbi8qKlxuICogQSB0ZXh0dXJlZCBxdWFkIGZvciByZW5kZXJpbmcgYSBzaW5nbGUgaWNvbiBvciBnbHlwaC5cbiAqXG4gKiBUaGUgem9vbSByYW5nZSB0aGUgZ2x5cGggY2FuIGJlIHNob3duIGlzIGRlZmluZWQgYnkgbWluU2NhbGUgYW5kIG1heFNjYWxlLlxuICpcbiAqIEBwYXJhbSB0bCBUaGUgb2Zmc2V0IG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgZnJvbSB0aGUgYW5jaG9yLlxuICogQHBhcmFtIHRyIFRoZSBvZmZzZXQgb2YgdGhlIHRvcCByaWdodCBjb3JuZXIgZnJvbSB0aGUgYW5jaG9yLlxuICogQHBhcmFtIGJsIFRoZSBvZmZzZXQgb2YgdGhlIGJvdHRvbSBsZWZ0IGNvcm5lciBmcm9tIHRoZSBhbmNob3IuXG4gKiBAcGFyYW0gYnIgVGhlIG9mZnNldCBvZiB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBmcm9tIHRoZSBhbmNob3IuXG4gKiBAcGFyYW0gdGV4IFRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCB0eXBlIFN5bWJvbFF1YWQgPSB7XG4gICAgdGw6IFBvaW50LFxuICAgIHRyOiBQb2ludCxcbiAgICBibDogUG9pbnQsXG4gICAgYnI6IFBvaW50LFxuICAgIHRleDoge1xuICAgICAgICB4OiBudW1iZXIsXG4gICAgICAgIHk6IG51bWJlcixcbiAgICAgICAgdzogbnVtYmVyLFxuICAgICAgICBoOiBudW1iZXJcbiAgICB9LFxuICAgIHdyaXRpbmdNb2RlOiBhbnkgfCB2b2lkLFxuICAgIGdseXBoT2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHNlY3Rpb25JbmRleDogbnVtYmVyXG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgcXVhZHMgdXNlZCBmb3IgcmVuZGVyaW5nIGFuIGljb24uXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvblF1YWRzKFxuICAgICAgICAgICAgICAgICAgICAgIHNoYXBlZEljb246IFBvc2l0aW9uZWRJY29uLFxuICAgICAgICAgICAgICAgICAgICAgIGljb25Sb3RhdGU6IG51bWJlcik6IEFycmF5PFN5bWJvbFF1YWQ+IHtcbiAgICBjb25zdCBpbWFnZSA9IHNoYXBlZEljb24uaW1hZ2U7XG5cbiAgICAvLyBJZiB5b3UgaGF2ZSBhIDEwcHggaWNvbiB0aGF0IGlzbid0IHBlcmZlY3RseSBhbGlnbmVkIHRvIHRoZSBwaXhlbCBncmlkIGl0IHdpbGwgY292ZXIgMTEgYWN0dWFsXG4gICAgLy8gcGl4ZWxzLiBUaGUgcXVhZCBuZWVkcyB0byBiZSBwYWRkZWQgdG8gYWNjb3VudCBmb3IgdGhpcywgb3RoZXJ3aXNlIHRoZXknbGwgbG9vayBzbGlnaHRseSBjbGlwcGVkXG4gICAgLy8gb24gb25lIGVkZ2UgaW4gc29tZSBjYXNlcy5cbiAgICBjb25zdCBib3JkZXIgPSAxO1xuXG4gICAgLy8gRXhwYW5kIHRoZSBib3ggdG8gcmVzcGVjdCB0aGUgMSBwaXhlbCBib3JkZXIgaW4gdGhlIGF0bGFzIGltYWdlLiBXZSdyZSB1c2luZyBgaW1hZ2UucGFkZGVkUmVjdCAtIGJvcmRlcmBcbiAgICAvLyBpbnN0ZWFkIG9mIGltYWdlLmRpc3BsYXlTaXplIGJlY2F1c2Ugd2Ugb25seSBwYWQgd2l0aCBvbmUgcGl4ZWwgZm9yIHJldGluYSBpbWFnZXMgYXMgd2VsbCwgYW5kIHRoZVxuICAgIC8vIGRpc3BsYXlTaXplIHVzZXMgdGhlIGxvZ2ljYWwgZGltZW5zaW9ucywgbm90IHRoZSBwaHlzaWNhbCBwaXhlbCBkaW1lbnNpb25zLlxuICAgIGNvbnN0IGljb25XaWR0aCA9IHNoYXBlZEljb24ucmlnaHQgLSBzaGFwZWRJY29uLmxlZnQ7XG4gICAgY29uc3QgZXhwYW5kWCA9IChpY29uV2lkdGggKiBpbWFnZS5wYWRkZWRSZWN0LncgLyAoaW1hZ2UucGFkZGVkUmVjdC53IC0gMiAqIGJvcmRlcikgLSBpY29uV2lkdGgpIC8gMjtcbiAgICBjb25zdCBsZWZ0ID0gc2hhcGVkSWNvbi5sZWZ0IC0gZXhwYW5kWDtcbiAgICBjb25zdCByaWdodCA9IHNoYXBlZEljb24ucmlnaHQgKyBleHBhbmRYO1xuXG4gICAgY29uc3QgaWNvbkhlaWdodCA9IHNoYXBlZEljb24uYm90dG9tIC0gc2hhcGVkSWNvbi50b3A7XG4gICAgY29uc3QgZXhwYW5kWSA9IChpY29uSGVpZ2h0ICogaW1hZ2UucGFkZGVkUmVjdC5oIC8gKGltYWdlLnBhZGRlZFJlY3QuaCAtIDIgKiBib3JkZXIpIC0gaWNvbkhlaWdodCkgLyAyO1xuICAgIGNvbnN0IHRvcCA9IHNoYXBlZEljb24udG9wIC0gZXhwYW5kWTtcbiAgICBjb25zdCBib3R0b20gPSBzaGFwZWRJY29uLmJvdHRvbSArIGV4cGFuZFk7XG5cbiAgICBjb25zdCB0bCA9IG5ldyBQb2ludChsZWZ0LCB0b3ApO1xuICAgIGNvbnN0IHRyID0gbmV3IFBvaW50KHJpZ2h0LCB0b3ApO1xuICAgIGNvbnN0IGJyID0gbmV3IFBvaW50KHJpZ2h0LCBib3R0b20pO1xuICAgIGNvbnN0IGJsID0gbmV3IFBvaW50KGxlZnQsIGJvdHRvbSk7XG5cbiAgICBjb25zdCBhbmdsZSA9IGljb25Sb3RhdGUgKiBNYXRoLlBJIC8gMTgwO1xuXG4gICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgIG1hdHJpeCA9IFtjb3MsIC1zaW4sIHNpbiwgY29zXTtcblxuICAgICAgICB0bC5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICB0ci5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICBibC5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICBici5fbWF0TXVsdChtYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIEljb24gcXVhZCBpcyBwYWRkZWQsIHNvIHRleHR1cmUgY29vcmRpbmF0ZXMgYWxzbyBuZWVkIHRvIGJlIHBhZGRlZC5cbiAgICByZXR1cm4gW3t0bCwgdHIsIGJsLCBiciwgdGV4OiBpbWFnZS5wYWRkZWRSZWN0LCB3cml0aW5nTW9kZTogdW5kZWZpbmVkLCBnbHlwaE9mZnNldDogWzAsIDBdLCBzZWN0aW9uSW5kZXg6IDB9XTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHF1YWRzIHVzZWQgZm9yIHJlbmRlcmluZyBhIHRleHQgbGFiZWwuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2x5cGhRdWFkcyhhbmNob3I6IEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgc2hhcGluZzogU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgIGFsb25nTGluZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7W3N0cmluZ106IHtbbnVtYmVyXTogR2x5cGhQb3NpdGlvbn19LFxuICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50OiBib29sZWFuKTogQXJyYXk8U3ltYm9sUXVhZD4ge1xuXG4gICAgY29uc3QgdGV4dFJvdGF0ZSA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcm90YXRlJykuZXZhbHVhdGUoZmVhdHVyZSwge30pICogTWF0aC5QSSAvIDE4MDtcblxuICAgIGNvbnN0IHBvc2l0aW9uZWRHbHlwaHMgPSBzaGFwaW5nLnBvc2l0aW9uZWRHbHlwaHM7XG4gICAgY29uc3QgcXVhZHMgPSBbXTtcblxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcG9zaXRpb25lZEdseXBocy5sZW5ndGg7IGsrKykge1xuICAgICAgICBjb25zdCBwb3NpdGlvbmVkR2x5cGggPSBwb3NpdGlvbmVkR2x5cGhzW2tdO1xuICAgICAgICBjb25zdCBnbHlwaFBvc2l0aW9ucyA9IHBvc2l0aW9uc1twb3NpdGlvbmVkR2x5cGguZm9udFN0YWNrXTtcbiAgICAgICAgY29uc3QgZ2x5cGggPSBnbHlwaFBvc2l0aW9ucyAmJiBnbHlwaFBvc2l0aW9uc1twb3NpdGlvbmVkR2x5cGguZ2x5cGhdO1xuICAgICAgICBpZiAoIWdseXBoKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCByZWN0ID0gZ2x5cGgucmVjdDtcbiAgICAgICAgaWYgKCFyZWN0KSBjb250aW51ZTtcblxuICAgICAgICAvLyBUaGUgcmVjdHMgaGF2ZSBhbiBhZGRkaXRpb25hbCBidWZmZXIgdGhhdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlaXIgc2l6ZS5cbiAgICAgICAgY29uc3QgZ2x5cGhQYWRkaW5nID0gMS4wO1xuICAgICAgICBjb25zdCByZWN0QnVmZmVyID0gR0xZUEhfUEJGX0JPUkRFUiArIGdseXBoUGFkZGluZztcblxuICAgICAgICBjb25zdCBoYWxmQWR2YW5jZSA9IGdseXBoLm1ldHJpY3MuYWR2YW5jZSAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSAvIDI7XG5cbiAgICAgICAgY29uc3QgZ2x5cGhPZmZzZXQgPSBhbG9uZ0xpbmUgP1xuICAgICAgICAgICAgW3Bvc2l0aW9uZWRHbHlwaC54ICsgaGFsZkFkdmFuY2UsIHBvc2l0aW9uZWRHbHlwaC55XSA6XG4gICAgICAgICAgICBbMCwgMF07XG5cbiAgICAgICAgbGV0IGJ1aWx0SW5PZmZzZXQgPSBhbG9uZ0xpbmUgP1xuICAgICAgICAgICAgWzAsIDBdIDpcbiAgICAgICAgICAgIFtwb3NpdGlvbmVkR2x5cGgueCArIGhhbGZBZHZhbmNlICsgdGV4dE9mZnNldFswXSwgcG9zaXRpb25lZEdseXBoLnkgKyB0ZXh0T2Zmc2V0WzFdXTtcblxuICAgICAgICBjb25zdCByb3RhdGVWZXJ0aWNhbEdseXBoID0gKGFsb25nTGluZSB8fCBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50KSAmJiBwb3NpdGlvbmVkR2x5cGgudmVydGljYWw7XG5cbiAgICAgICAgbGV0IHZlcnRpY2FsaXplZExhYmVsT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICBpZiAocm90YXRlVmVydGljYWxHbHlwaCkge1xuICAgICAgICAgICAgLy8gVmVydGljYWwgUE9JIGxhYmVscyB0aGF0IGFyZSByb3RhdGVkIDkwZGVnIENXIGFuZCB3aG9zZSBnbHlwaHMgbXVzdCBwcmVzZXJ2ZSB1cHJpZ2h0IG9yaWVudGF0aW9uXG4gICAgICAgICAgICAvLyBuZWVkIHRvIGJlIHJvdGF0ZWQgOTBkZWcgQ0NXLiBBZnRlciBhIHF1YWQgaXMgcm90YXRlZCwgaXQgaXMgdHJhbnNsYXRlZCB0byB0aGUgb3JpZ2luYWwgYnVpbHQtaW4gb2Zmc2V0LlxuICAgICAgICAgICAgdmVydGljYWxpemVkTGFiZWxPZmZzZXQgPSBidWlsdEluT2Zmc2V0O1xuICAgICAgICAgICAgYnVpbHRJbk9mZnNldCA9IFswLCAwXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHgxID0gKGdseXBoLm1ldHJpY3MubGVmdCAtIHJlY3RCdWZmZXIpICogcG9zaXRpb25lZEdseXBoLnNjYWxlIC0gaGFsZkFkdmFuY2UgKyBidWlsdEluT2Zmc2V0WzBdO1xuICAgICAgICBjb25zdCB5MSA9ICgtZ2x5cGgubWV0cmljcy50b3AgLSByZWN0QnVmZmVyKSAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSArIGJ1aWx0SW5PZmZzZXRbMV07XG4gICAgICAgIGNvbnN0IHgyID0geDEgKyByZWN0LncgKiBwb3NpdGlvbmVkR2x5cGguc2NhbGU7XG4gICAgICAgIGNvbnN0IHkyID0geTEgKyByZWN0LmggKiBwb3NpdGlvbmVkR2x5cGguc2NhbGU7XG5cbiAgICAgICAgY29uc3QgdGwgPSBuZXcgUG9pbnQoeDEsIHkxKTtcbiAgICAgICAgY29uc3QgdHIgPSBuZXcgUG9pbnQoeDIsIHkxKTtcbiAgICAgICAgY29uc3QgYmwgPSBuZXcgUG9pbnQoeDEsIHkyKTtcbiAgICAgICAgY29uc3QgYnIgPSBuZXcgUG9pbnQoeDIsIHkyKTtcblxuICAgICAgICBpZiAocm90YXRlVmVydGljYWxHbHlwaCkge1xuICAgICAgICAgICAgLy8gVmVydGljYWwtc3VwcG9ydGluZyBnbHlwaHMgYXJlIGxhaWQgb3V0IGluIDI0eDI0IHBvaW50IGJveGVzICgxIHNxdWFyZSBlbSlcbiAgICAgICAgICAgIC8vIEluIGhvcml6b250YWwgb3JpZW50YXRpb24sIHRoZSB5IHZhbHVlcyBmb3IgZ2x5cGhzIGFyZSBiZWxvdyB0aGUgbWlkbGluZVxuICAgICAgICAgICAgLy8gYW5kIHdlIHVzZSBhIFwieU9mZnNldFwiIG9mIC0xNyB0byBwdWxsIHRoZW0gdXAgdG8gdGhlIG1pZGRsZS5cbiAgICAgICAgICAgIC8vIEJ5IHJvdGF0aW5nIGNvdW50ZXItY2xvY2t3aXNlIGFyb3VuZCB0aGUgcG9pbnQgYXQgdGhlIGNlbnRlciBvZiB0aGUgbGVmdFxuICAgICAgICAgICAgLy8gZWRnZSBvZiBhIDI0eDI0IGxheW91dCBib3ggY2VudGVyZWQgYmVsb3cgdGhlIG1pZGxpbmUsIHdlIGFsaWduIHRoZSBjZW50ZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSBnbHlwaHMgd2l0aCB0aGUgaG9yaXpvbnRhbCBtaWRsaW5lLCBzbyB0aGUgeU9mZnNldCBpcyBubyBsb25nZXJcbiAgICAgICAgICAgIC8vIG5lY2Vzc2FyeSwgYnV0IHdlIGFsc28gcHVsbCB0aGUgZ2x5cGggdG8gdGhlIGxlZnQgYWxvbmcgdGhlIHggYXhpcy5cbiAgICAgICAgICAgIC8vIFRoZSB5IGNvb3JkaW5hdGUgaW5jbHVkZXMgYmFzZWxpbmUgeU9mZnNldCwgdGh1cyBuZWVkcyB0byBiZSBhY2NvdW50ZWRcbiAgICAgICAgICAgIC8vIGZvciB3aGVuIGdseXBoIGlzIHJvdGF0ZWQgYW5kIHRyYW5zbGF0ZWQuXG4gICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgUG9pbnQoLWhhbGZBZHZhbmNlLCBoYWxmQWR2YW5jZSAtIHNoYXBpbmcueU9mZnNldCk7XG4gICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFJvdGF0aW9uID0gLU1hdGguUEkgLyAyO1xuXG4gICAgICAgICAgICAvLyB4SGFsZldpZGh0T2Zmc2V0Y29ycmVjdGlvbiBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBmdWxsLXdpZHRoIGFuZCBoYWxmLXdpZHRoXG4gICAgICAgICAgICAvLyBhZHZhbmNlLCBzaG91bGQgYmUgMCBmb3IgZnVsbC13aWR0aCBnbHlwaHMgYW5kIHdpbGwgcHVsbCB1cCBoYWxmLXdpZHRoIGdseXBocy5cbiAgICAgICAgICAgIGNvbnN0IHhIYWxmV2lkaHRPZmZzZXRjb3JyZWN0aW9uID0gT05FX0VNIC8gMiAtIGhhbGZBZHZhbmNlO1xuICAgICAgICAgICAgY29uc3QgeE9mZnNldENvcnJlY3Rpb24gPSBuZXcgUG9pbnQoNSAtIHNoYXBpbmcueU9mZnNldCAtIHhIYWxmV2lkaHRPZmZzZXRjb3JyZWN0aW9uLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0Q29ycmVjdGlvbiA9IG5ldyBQb2ludCguLi52ZXJ0aWNhbGl6ZWRMYWJlbE9mZnNldCk7XG4gICAgICAgICAgICB0bC5fcm90YXRlQXJvdW5kKHZlcnRpY2FsUm90YXRpb24sIGNlbnRlcikuX2FkZCh4T2Zmc2V0Q29ycmVjdGlvbikuX2FkZCh2ZXJ0aWNhbE9mZnNldENvcnJlY3Rpb24pO1xuICAgICAgICAgICAgdHIuX3JvdGF0ZUFyb3VuZCh2ZXJ0aWNhbFJvdGF0aW9uLCBjZW50ZXIpLl9hZGQoeE9mZnNldENvcnJlY3Rpb24pLl9hZGQodmVydGljYWxPZmZzZXRDb3JyZWN0aW9uKTtcbiAgICAgICAgICAgIGJsLl9yb3RhdGVBcm91bmQodmVydGljYWxSb3RhdGlvbiwgY2VudGVyKS5fYWRkKHhPZmZzZXRDb3JyZWN0aW9uKS5fYWRkKHZlcnRpY2FsT2Zmc2V0Q29ycmVjdGlvbik7XG4gICAgICAgICAgICBici5fcm90YXRlQXJvdW5kKHZlcnRpY2FsUm90YXRpb24sIGNlbnRlcikuX2FkZCh4T2Zmc2V0Q29ycmVjdGlvbikuX2FkZCh2ZXJ0aWNhbE9mZnNldENvcnJlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRSb3RhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKHRleHRSb3RhdGUpLFxuICAgICAgICAgICAgICAgIGNvcyA9IE1hdGguY29zKHRleHRSb3RhdGUpLFxuICAgICAgICAgICAgICAgIG1hdHJpeCA9IFtjb3MsIC1zaW4sIHNpbiwgY29zXTtcblxuICAgICAgICAgICAgdGwuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgIHRyLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICBibC5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgYnIuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1YWRzLnB1c2goe3RsLCB0ciwgYmwsIGJyLCB0ZXg6IHJlY3QsIHdyaXRpbmdNb2RlOiBzaGFwaW5nLndyaXRpbmdNb2RlLCBnbHlwaE9mZnNldCwgc2VjdGlvbkluZGV4OiBwb3NpdGlvbmVkR2x5cGguc2VjdGlvbkluZGV4fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YWRzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIEFuY2hvciBmcm9tICcuL2FuY2hvcic7XG5cbi8qKlxuICogQSBDb2xsaXNpb25GZWF0dXJlIHJlcHJlc2VudHMgdGhlIGFyZWEgb2YgdGhlIHRpbGUgY292ZXJlZCBieSBhIHNpbmdsZSBsYWJlbC5cbiAqIEl0IGlzIHVzZWQgd2l0aCBDb2xsaXNpb25JbmRleCB0byBjaGVjayBpZiB0aGUgbGFiZWwgb3ZlcmxhcHMgd2l0aCBhbnlcbiAqIHByZXZpb3VzIGxhYmVscy4gQSBDb2xsaXNpb25GZWF0dXJlIGlzIG1vc3RseSBqdXN0IGEgc2V0IG9mIENvbGxpc2lvbkJveFxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDb2xsaXNpb25GZWF0dXJlIHtcbiAgICBib3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgYm94RW5kSW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIENvbGxpc2lvbkZlYXR1cmUsIGFkZGluZyBpdHMgY29sbGlzaW9uIGJveCBkYXRhIHRvIHRoZSBnaXZlbiBjb2xsaXNpb25Cb3hBcnJheSBpbiB0aGUgcHJvY2Vzcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsaW5lIFRoZSBnZW9tZXRyeSB0aGUgbGFiZWwgaXMgcGxhY2VkIG9uLlxuICAgICAqIEBwYXJhbSBhbmNob3IgVGhlIHBvaW50IGFsb25nIHRoZSBsaW5lIGFyb3VuZCB3aGljaCB0aGUgbGFiZWwgaXMgYW5jaG9yZWQuXG4gICAgICogQHBhcmFtIHNoYXBlZCBUaGUgdGV4dCBvciBpY29uIHNoYXBpbmcgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0gYm94U2NhbGUgQSBtYWdpYyBudW1iZXIgdXNlZCB0byBjb252ZXJ0IGZyb20gZ2x5cGggbWV0cmljcyB1bml0cyB0byBnZW9tZXRyeSB1bml0cy5cbiAgICAgKiBAcGFyYW0gcGFkZGluZyBUaGUgYW1vdW50IG9mIHBhZGRpbmcgdG8gYWRkIGFyb3VuZCB0aGUgbGFiZWwgZWRnZXMuXG4gICAgICogQHBhcmFtIGFsaWduTGluZSBXaGV0aGVyIHRoZSBsYWJlbCBpcyBhbGlnbmVkIHdpdGggdGhlIGxpbmUgb3IgdGhlIHZpZXdwb3J0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgICAgICBsaW5lOiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBBbmNob3IsXG4gICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgc2hhcGVkOiBPYmplY3QsXG4gICAgICAgICAgICAgICAgYm94U2NhbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIG92ZXJzY2FsaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgcm90YXRlOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHkxID0gc2hhcGVkLnRvcCAqIGJveFNjYWxlIC0gcGFkZGluZztcbiAgICAgICAgbGV0IHkyID0gc2hhcGVkLmJvdHRvbSAqIGJveFNjYWxlICsgcGFkZGluZztcbiAgICAgICAgbGV0IHgxID0gc2hhcGVkLmxlZnQgKiBib3hTY2FsZSAtIHBhZGRpbmc7XG4gICAgICAgIGxldCB4MiA9IHNoYXBlZC5yaWdodCAqIGJveFNjYWxlICsgcGFkZGluZztcblxuICAgICAgICB0aGlzLmJveFN0YXJ0SW5kZXggPSBjb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGFsaWduTGluZSkge1xuXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0geTIgLSB5MTtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHgyIC0geDE7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IG1pbmltdW0gYm94IGhlaWdodCB0byBhdm9pZCB2ZXJ5IG1hbnkgc21hbGwgbGFiZWxzXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoMTAgKiBib3hTY2FsZSwgaGVpZ2h0KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZExpbmVDb2xsaXNpb25DaXJjbGVzKGNvbGxpc2lvbkJveEFycmF5LCBsaW5lLCBhbmNob3IsIChhbmNob3Iuc2VnbWVudDogYW55KSwgbGVuZ3RoLCBoZWlnaHQsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgsIG92ZXJzY2FsaW5nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJvdGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yICotcm90YXRlIGluIHBvaW50IGNvbGxpc2lvbiBib3hlc1xuICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNjA3NVxuICAgICAgICAgICAgICAgIC8vIERvZXNuJ3QgYWNjb3VudCBmb3IgaWNvbi10ZXh0LWZpdFxuXG4gICAgICAgICAgICAgICAgY29uc3QgdGwgPSBuZXcgUG9pbnQoeDEsIHkxKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ciA9IG5ldyBQb2ludCh4MiwgeTEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsID0gbmV3IFBvaW50KHgxLCB5Mik7XG4gICAgICAgICAgICAgICAgY29uc3QgYnIgPSBuZXcgUG9pbnQoeDIsIHkyKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZVJhZGlhbnMgPSByb3RhdGUgKiBNYXRoLlBJIC8gMTgwO1xuXG4gICAgICAgICAgICAgICAgdGwuX3JvdGF0ZShyb3RhdGVSYWRpYW5zKTtcbiAgICAgICAgICAgICAgICB0ci5fcm90YXRlKHJvdGF0ZVJhZGlhbnMpO1xuICAgICAgICAgICAgICAgIGJsLl9yb3RhdGUocm90YXRlUmFkaWFucyk7XG4gICAgICAgICAgICAgICAgYnIuX3JvdGF0ZShyb3RhdGVSYWRpYW5zKTtcblxuICAgICAgICAgICAgICAgIC8vIENvbGxpc2lvbiBmZWF0dXJlcyByZXF1aXJlIGFuIFwib24tYXhpc1wiIGdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIC8vIHNvIHRha2UgdGhlIGVudmVsb3BlIG9mIHRoZSByb3RhdGVkIGdlb21ldHJ5XG4gICAgICAgICAgICAgICAgLy8gKG1heSBiZSBxdWl0ZSBsYXJnZSBmb3Igd2lkZSBsYWJlbHMgcm90YXRlZCA0NSBkZWdyZWVzKVxuICAgICAgICAgICAgICAgIHgxID0gTWF0aC5taW4odGwueCwgdHIueCwgYmwueCwgYnIueCk7XG4gICAgICAgICAgICAgICAgeDIgPSBNYXRoLm1heCh0bC54LCB0ci54LCBibC54LCBici54KTtcbiAgICAgICAgICAgICAgICB5MSA9IE1hdGgubWluKHRsLnksIHRyLnksIGJsLnksIGJyLnkpO1xuICAgICAgICAgICAgICAgIHkyID0gTWF0aC5tYXgodGwueSwgdHIueSwgYmwueSwgYnIueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheS5lbXBsYWNlQmFjayhhbmNob3IueCwgYW5jaG9yLnksIHgxLCB5MSwgeDIsIHkyLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIDAsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ib3hFbmRJbmRleCA9IGNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBzZXQgb2YgQ29sbGlzaW9uQm94IG9iamVjdHMgZm9yIGEgbGluZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsYWJlbExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBsYWJlbCBpbiBnZW9tZXRyeSB1bml0cy5cbiAgICAgKiBAcGFyYW0gYW5jaG9yIFRoZSBwb2ludCBhbG9uZyB0aGUgbGluZSBhcm91bmQgd2hpY2ggdGhlIGxhYmVsIGlzIGFuY2hvcmVkLlxuICAgICAqIEBwYXJhbSBib3hTaXplIFRoZSBzaXplIG9mIHRoZSBjb2xsaXNpb24gYm94ZXMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYWRkTGluZUNvbGxpc2lvbkNpcmNsZXMoY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yOiBBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbExlbmd0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnNjYWxpbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBzdGVwID0gYm94U2l6ZSAvIDI7XG4gICAgICAgIGNvbnN0IG5Cb3hlcyA9IE1hdGguZmxvb3IobGFiZWxMZW5ndGggLyBzdGVwKSB8fCAxO1xuICAgICAgICAvLyBXZSBjYWxjdWxhdGUgbGluZSBjb2xsaXNpb24gY2lyY2xlcyBvdXQgdG8gMzAwJSBvZiB3aGF0IHdvdWxkIG5vcm1hbGx5IGJlIG91clxuICAgICAgICAvLyBtYXggc2l6ZSwgdG8gYWxsb3cgY29sbGlzaW9uIGRldGVjdGlvbiB0byB3b3JrIG9uIGxhYmVscyB0aGF0IGV4cGFuZCBhc1xuICAgICAgICAvLyB0aGV5IG1vdmUgaW50byB0aGUgZGlzdGFuY2VcbiAgICAgICAgLy8gVmVydGljYWxseSBvcmllbnRlZCBsYWJlbHMgaW4gdGhlIGRpc3RhbnQgZmllbGQgY2FuIGV4dGVuZCBwYXN0IHRoaXMgcGFkZGluZ1xuICAgICAgICAvLyBUaGlzIGlzIGEgbm90aWNlYWJsZSBwcm9ibGVtIGluIG92ZXJzY2FsZWQgdGlsZXMgd2hlcmUgdGhlIHBpdGNoIDAtYmFzZWRcbiAgICAgICAgLy8gc3ltYm9sIHNwYWNpbmcgd2lsbCBwdXQgbGFiZWxzIHZlcnkgY2xvc2UgdG9nZXRoZXIgaW4gYSBwaXRjaGVkIG1hcC5cbiAgICAgICAgLy8gVG8gcmVkdWNlIHRoZSBjb3N0IG9mIGFkZGluZyBleHRyYSBjb2xsaXNpb24gY2lyY2xlcywgd2Ugc2xvd2x5IGluY3JlYXNlXG4gICAgICAgIC8vIHRoZW0gZm9yIG92ZXJzY2FsZWQgdGlsZXMuXG4gICAgICAgIGNvbnN0IG92ZXJzY2FsaW5nUGFkZGluZ0ZhY3RvciA9IDEgKyAuNCAqIE1hdGgubG9nKG92ZXJzY2FsaW5nKSAvIE1hdGguTE4yO1xuICAgICAgICBjb25zdCBuUGl0Y2hQYWRkaW5nQm94ZXMgPSBNYXRoLmZsb29yKG5Cb3hlcyAqIG92ZXJzY2FsaW5nUGFkZGluZ0ZhY3RvciAvIDIpO1xuXG4gICAgICAgIC8vIG9mZnNldCB0aGUgY2VudGVyIG9mIHRoZSBmaXJzdCBib3ggYnkgaGFsZiBhIGJveCBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZVxuICAgICAgICAvLyBib3ggaXMgYXQgdGhlIGVkZ2Ugb2YgdGhlIGxhYmVsLlxuICAgICAgICBjb25zdCBmaXJzdEJveE9mZnNldCA9IC1ib3hTaXplIC8gMjtcblxuICAgICAgICBsZXQgcCA9IGFuY2hvcjtcbiAgICAgICAgbGV0IGluZGV4ID0gc2VnbWVudCArIDE7XG4gICAgICAgIGxldCBhbmNob3JEaXN0YW5jZSA9IGZpcnN0Qm94T2Zmc2V0O1xuICAgICAgICBjb25zdCBsYWJlbFN0YXJ0RGlzdGFuY2UgPSAtbGFiZWxMZW5ndGggLyAyO1xuICAgICAgICBjb25zdCBwYWRkaW5nU3RhcnREaXN0YW5jZSA9IGxhYmVsU3RhcnREaXN0YW5jZSAtIGxhYmVsTGVuZ3RoIC8gNDtcbiAgICAgICAgLy8gbW92ZSBiYWNrd2FyZHMgYWxvbmcgdGhlIGxpbmUgdG8gdGhlIGZpcnN0IHNlZ21lbnQgdGhlIGxhYmVsIGFwcGVhcnMgb25cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaW5kZXgtLTtcblxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGlmIChhbmNob3JEaXN0YW5jZSA+IGxhYmVsU3RhcnREaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBpc24ndCBlbm91Z2ggcm9vbSBmb3IgdGhlIGxhYmVsIGFmdGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmVcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2tNYXhBbmdsZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGNhdWdodCB0aGlzXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGluZSBkb2Vzbid0IGV4dGVuZCBmYXIgZW5vdWdoIGJhY2sgZm9yIGFsbCBvZiBvdXIgcGFkZGluZyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHdlIGdvdCBmYXIgZW5vdWdoIHRvIHNob3cgdGhlIGxhYmVsIHVuZGVyIG1vc3QgY29uZGl0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuY2hvckRpc3RhbmNlIC09IGxpbmVbaW5kZXhdLmRpc3QocCk7XG4gICAgICAgICAgICAgICAgcCA9IGxpbmVbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChhbmNob3JEaXN0YW5jZSA+IHBhZGRpbmdTdGFydERpc3RhbmNlKTtcblxuICAgICAgICBsZXQgc2VnbWVudExlbmd0aCA9IGxpbmVbaW5kZXhdLmRpc3QobGluZVtpbmRleCArIDFdKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gLW5QaXRjaFBhZGRpbmdCb3hlczsgaSA8IG5Cb3hlcyArIG5QaXRjaFBhZGRpbmdCb3hlczsgaSsrKSB7XG5cbiAgICAgICAgICAgIC8vIHRoZSBkaXN0YW5jZSB0aGUgYm94IHdpbGwgYmUgZnJvbSB0aGUgYW5jaG9yXG4gICAgICAgICAgICBjb25zdCBib3hPZmZzZXQgPSBpICogc3RlcDtcbiAgICAgICAgICAgIGxldCBib3hEaXN0YW5jZVRvQW5jaG9yID0gbGFiZWxTdGFydERpc3RhbmNlICsgYm94T2Zmc2V0O1xuXG4gICAgICAgICAgICAvLyBtYWtlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHBpdGNoIHBhZGRpbmcgYm94ZXMgYmlnZ2VyXG4gICAgICAgICAgICBpZiAoYm94T2Zmc2V0IDwgMCkgYm94RGlzdGFuY2VUb0FuY2hvciArPSBib3hPZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYm94T2Zmc2V0ID4gbGFiZWxMZW5ndGgpIGJveERpc3RhbmNlVG9BbmNob3IgKz0gYm94T2Zmc2V0IC0gbGFiZWxMZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChib3hEaXN0YW5jZVRvQW5jaG9yIDwgYW5jaG9yRGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgbGluZSBkb2Vzbid0IGV4dGVuZCBmYXIgZW5vdWdoIGJhY2sgZm9yIHRoaXMgYm94LCBza2lwIGl0XG4gICAgICAgICAgICAgICAgLy8gKFRoaXMgY291bGQgYWxsb3cgZm9yIGxpbmUgY29sbGlzaW9ucyBvbiBkaXN0YW50IHRpbGVzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0aGUgYm94IGlzIG5vdCBvbiB0aGUgY3VycmVudCBzZWdtZW50LiBNb3ZlIHRvIHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICAgICAgICB3aGlsZSAoYW5jaG9yRGlzdGFuY2UgKyBzZWdtZW50TGVuZ3RoIDwgYm94RGlzdGFuY2VUb0FuY2hvcikge1xuICAgICAgICAgICAgICAgIGFuY2hvckRpc3RhbmNlICs9IHNlZ21lbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzbid0IGVub3VnaCByb29tIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBsaW5lLlxuICAgICAgICAgICAgICAgIGlmIChpbmRleCArIDEgPj0gbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSBsaW5lW2luZGV4XS5kaXN0KGxpbmVbaW5kZXggKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoZSBkaXN0YW5jZSB0aGUgYm94IHdpbGwgYmUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWdtZW50XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50Qm94RGlzdGFuY2UgPSBib3hEaXN0YW5jZVRvQW5jaG9yIC0gYW5jaG9yRGlzdGFuY2U7XG5cbiAgICAgICAgICAgIGNvbnN0IHAwID0gbGluZVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBwMSA9IGxpbmVbaW5kZXggKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGJveEFuY2hvclBvaW50ID0gcDEuc3ViKHAwKS5fdW5pdCgpLl9tdWx0KHNlZ21lbnRCb3hEaXN0YW5jZSkuX2FkZChwMCkuX3JvdW5kKCk7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBib3ggaXMgd2l0aGluIGJveFNpemUgb2YgdGhlIGFuY2hvciwgZm9yY2UgdGhlIGJveCB0byBiZSB1c2VkXG4gICAgICAgICAgICAvLyAoc28gZXZlbiAwLXdpZHRoIGxhYmVscyB1c2UgYXQgbGVhc3Qgb25lIGJveClcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdGhlIC44IG11bHRpcGxpY2F0aW9uIGdpdmVzIHVzIGEgbGl0dGxlIGJpdCBvZiBjb25zZXJ2YXRpdmVcbiAgICAgICAgICAgIC8vIHBhZGRpbmcgaW4gY2hvb3Npbmcgd2hpY2ggYm94ZXMgdG8gdXNlIChzZWUgQ29sbGlzaW9uSW5kZXgjcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcylcbiAgICAgICAgICAgIGNvbnN0IHBhZGRlZEFuY2hvckRpc3RhbmNlID0gTWF0aC5hYnMoYm94RGlzdGFuY2VUb0FuY2hvciAtIGZpcnN0Qm94T2Zmc2V0KSA8IHN0ZXAgP1xuICAgICAgICAgICAgICAgIDAgOlxuICAgICAgICAgICAgICAgIChib3hEaXN0YW5jZVRvQW5jaG9yIC0gZmlyc3RCb3hPZmZzZXQpICogMC44O1xuXG4gICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheS5lbXBsYWNlQmFjayhib3hBbmNob3JQb2ludC54LCBib3hBbmNob3JQb2ludC55LFxuICAgICAgICAgICAgICAgIC1ib3hTaXplIC8gMiwgLWJveFNpemUgLyAyLCBib3hTaXplIC8gMiwgYm94U2l6ZSAvIDIsXG4gICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCxcbiAgICAgICAgICAgICAgICBib3hTaXplIC8gMiwgcGFkZGVkQW5jaG9yRGlzdGFuY2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xsaXNpb25GZWF0dXJlO1xuIiwiXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaW55UXVldWUge1xuICAgIGNvbnN0cnVjdG9yKGRhdGEgPSBbXSwgY29tcGFyZSA9IGRlZmF1bHRDb21wYXJlKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICAgICAgdGhpcy5jb21wYXJlID0gY29tcGFyZTtcblxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gKHRoaXMubGVuZ3RoID4+IDEpIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuX2Rvd24oaSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5kYXRhLnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICAgIHRoaXMuX3VwKHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgcG9wKCkge1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5kYXRhWzBdO1xuICAgICAgICBjb25zdCBib3R0b20gPSB0aGlzLmRhdGEucG9wKCk7XG4gICAgICAgIHRoaXMubGVuZ3RoLS07XG5cbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhWzBdID0gYm90dG9tO1xuICAgICAgICAgICAgdGhpcy5fZG93bigwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b3A7XG4gICAgfVxuXG4gICAgcGVlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVswXTtcbiAgICB9XG5cbiAgICBfdXAocG9zKSB7XG4gICAgICAgIGNvbnN0IHtkYXRhLCBjb21wYXJlfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhW3Bvc107XG5cbiAgICAgICAgd2hpbGUgKHBvcyA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IChwb3MgLSAxKSA+PiAxO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGRhdGFbcGFyZW50XTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIGN1cnJlbnQpID49IDApIGJyZWFrO1xuICAgICAgICAgICAgZGF0YVtwb3NdID0gY3VycmVudDtcbiAgICAgICAgICAgIHBvcyA9IHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbcG9zXSA9IGl0ZW07XG4gICAgfVxuXG4gICAgX2Rvd24ocG9zKSB7XG4gICAgICAgIGNvbnN0IHtkYXRhLCBjb21wYXJlfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGhhbGZMZW5ndGggPSB0aGlzLmxlbmd0aCA+PiAxO1xuICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtwb3NdO1xuXG4gICAgICAgIHdoaWxlIChwb3MgPCBoYWxmTGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgbGVmdCA9IChwb3MgPDwgMSkgKyAxO1xuICAgICAgICAgICAgbGV0IGJlc3QgPSBkYXRhW2xlZnRdO1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgMTtcblxuICAgICAgICAgICAgaWYgKHJpZ2h0IDwgdGhpcy5sZW5ndGggJiYgY29tcGFyZShkYXRhW3JpZ2h0XSwgYmVzdCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgbGVmdCA9IHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJlc3QgPSBkYXRhW3JpZ2h0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21wYXJlKGJlc3QsIGl0ZW0pID49IDApIGJyZWFrO1xuXG4gICAgICAgICAgICBkYXRhW3Bvc10gPSBiZXN0O1xuICAgICAgICAgICAgcG9zID0gbGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbcG9zXSA9IGl0ZW07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFF1ZXVlIGZyb20gJ3RpbnlxdWV1ZSc7XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7ZGlzdFRvU2VnbWVudFNxdWFyZWR9IGZyb20gJy4vaW50ZXJzZWN0aW9uX3Rlc3RzJztcblxuLyoqXG4gKiBGaW5kcyBhbiBhcHByb3hpbWF0aW9uIG9mIGEgcG9seWdvbidzIFBvbGUgT2YgSW5hY2Nlc3NpYmlsaXkgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG9sZV9vZl9pbmFjY2Vzc2liaWxpdHlcbiAqIFRoaXMgaXMgYSBjb3B5IG9mIGh0dHA6Ly9naXRodWIuY29tL21hcGJveC9wb2x5bGFiZWwgYWRhcHRlZCB0byB1c2UgUG9pbnRzXG4gKlxuICogQHBhcmFtIHBvbHlnb25SaW5ncyBmaXJzdCBpdGVtIGluIGFycmF5IGlzIHRoZSBvdXRlciByaW5nIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgdGhlIGxpc3Qgb2YgaG9sZXMsIHNob3VsZCBiZSBhbiBlbGVtZW50IG9mIHRoZSByZXN1bHQgb2YgdXRpbC9jbGFzc2lmeV9yaW5nc1xuICogQHBhcmFtIHByZWNpc2lvbiBTcGVjaWZpZWQgaW4gaW5wdXQgY29vcmRpbmF0ZSB1bml0cy4gSWYgMCByZXR1cm5zIGFmdGVyIGZpcnN0IHJ1biwgaWYgPiAwIHJlcGVhdGVkbHkgbmFycm93cyB0aGUgc2VhcmNoIHNwYWNlIHVudGlsIHRoZSByYWRpdXMgb2YgdGhlIGFyZWEgc2VhcmNoZWQgZm9yIHRoZSBiZXN0IHBvbGUgaXMgbGVzcyB0aGFuIHByZWNpc2lvblxuICogQHBhcmFtIGRlYnVnIFByaW50IHNvbWUgc3RhdGlzdGljcyB0byB0aGUgY29uc29sZSBkdXJpbmcgZXhlY3V0aW9uXG4gKiBAcmV0dXJucyBQb2xlIG9mIEluYWNjZXNzaWJpbGl5LlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBvbHlnb25SaW5nczogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgcHJlY2lzaW9uPzogbnVtYmVyID0gMSwgZGVidWc/OiBib29sZWFuID0gZmFsc2UpOiBQb2ludCB7XG4gICAgLy8gZmluZCB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBvdXRlciByaW5nXG4gICAgbGV0IG1pblggPSBJbmZpbml0eSwgbWluWSA9IEluZmluaXR5LCBtYXhYID0gLUluZmluaXR5LCBtYXhZID0gLUluZmluaXR5O1xuICAgIGNvbnN0IG91dGVyUmluZyA9IHBvbHlnb25SaW5nc1swXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dGVyUmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwID0gb3V0ZXJSaW5nW2ldO1xuICAgICAgICBpZiAoIWkgfHwgcC54IDwgbWluWCkgbWluWCA9IHAueDtcbiAgICAgICAgaWYgKCFpIHx8IHAueSA8IG1pblkpIG1pblkgPSBwLnk7XG4gICAgICAgIGlmICghaSB8fCBwLnggPiBtYXhYKSBtYXhYID0gcC54O1xuICAgICAgICBpZiAoIWkgfHwgcC55ID4gbWF4WSkgbWF4WSA9IHAueTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IG1heFggLSBtaW5YO1xuICAgIGNvbnN0IGhlaWdodCA9IG1heFkgLSBtaW5ZO1xuICAgIGNvbnN0IGNlbGxTaXplID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCk7XG4gICAgbGV0IGggPSBjZWxsU2l6ZSAvIDI7XG5cbiAgICAvLyBhIHByaW9yaXR5IHF1ZXVlIG9mIGNlbGxzIGluIG9yZGVyIG9mIHRoZWlyIFwicG90ZW50aWFsXCIgKG1heCBkaXN0YW5jZSB0byBwb2x5Z29uKVxuICAgIGNvbnN0IGNlbGxRdWV1ZSA9IG5ldyBRdWV1ZShbXSwgY29tcGFyZU1heCk7XG5cbiAgICBpZiAoY2VsbFNpemUgPT09IDApIHJldHVybiBuZXcgUG9pbnQobWluWCwgbWluWSk7XG5cbiAgICAvLyBjb3ZlciBwb2x5Z29uIHdpdGggaW5pdGlhbCBjZWxsc1xuICAgIGZvciAobGV0IHggPSBtaW5YOyB4IDwgbWF4WDsgeCArPSBjZWxsU2l6ZSkge1xuICAgICAgICBmb3IgKGxldCB5ID0gbWluWTsgeSA8IG1heFk7IHkgKz0gY2VsbFNpemUpIHtcbiAgICAgICAgICAgIGNlbGxRdWV1ZS5wdXNoKG5ldyBDZWxsKHggKyBoLCB5ICsgaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0YWtlIGNlbnRyb2lkIGFzIHRoZSBmaXJzdCBiZXN0IGd1ZXNzXG4gICAgbGV0IGJlc3RDZWxsID0gZ2V0Q2VudHJvaWRDZWxsKHBvbHlnb25SaW5ncyk7XG4gICAgbGV0IG51bVByb2JlcyA9IGNlbGxRdWV1ZS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoY2VsbFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAvLyBwaWNrIHRoZSBtb3N0IHByb21pc2luZyBjZWxsIGZyb20gdGhlIHF1ZXVlXG4gICAgICAgIGNvbnN0IGNlbGwgPSBjZWxsUXVldWUucG9wKCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBiZXN0IGNlbGwgaWYgd2UgZm91bmQgYSBiZXR0ZXIgb25lXG4gICAgICAgIGlmIChjZWxsLmQgPiBiZXN0Q2VsbC5kIHx8ICFiZXN0Q2VsbC5kKSB7XG4gICAgICAgICAgICBiZXN0Q2VsbCA9IGNlbGw7XG4gICAgICAgICAgICBpZiAoZGVidWcpIGNvbnNvbGUubG9nKCdmb3VuZCBiZXN0ICVkIGFmdGVyICVkIHByb2JlcycsIE1hdGgucm91bmQoMWU0ICogY2VsbC5kKSAvIDFlNCwgbnVtUHJvYmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvIG5vdCBkcmlsbCBkb3duIGZ1cnRoZXIgaWYgdGhlcmUncyBubyBjaGFuY2Ugb2YgYSBiZXR0ZXIgc29sdXRpb25cbiAgICAgICAgaWYgKGNlbGwubWF4IC0gYmVzdENlbGwuZCA8PSBwcmVjaXNpb24pIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIHNwbGl0IHRoZSBjZWxsIGludG8gZm91ciBjZWxsc1xuICAgICAgICBoID0gY2VsbC5oIC8gMjtcbiAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoY2VsbC5wLnggLSBoLCBjZWxsLnAueSAtIGgsIGgsIHBvbHlnb25SaW5ncykpO1xuICAgICAgICBjZWxsUXVldWUucHVzaChuZXcgQ2VsbChjZWxsLnAueCArIGgsIGNlbGwucC55IC0gaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIGNlbGxRdWV1ZS5wdXNoKG5ldyBDZWxsKGNlbGwucC54IC0gaCwgY2VsbC5wLnkgKyBoLCBoLCBwb2x5Z29uUmluZ3MpKTtcbiAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoY2VsbC5wLnggKyBoLCBjZWxsLnAueSArIGgsIGgsIHBvbHlnb25SaW5ncykpO1xuICAgICAgICBudW1Qcm9iZXMgKz0gNDtcbiAgICB9XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coYG51bSBwcm9iZXM6ICR7bnVtUHJvYmVzfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgYmVzdCBkaXN0YW5jZTogJHtiZXN0Q2VsbC5kfWApO1xuICAgIH1cblxuICAgIHJldHVybiBiZXN0Q2VsbC5wO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTWF4KGEsIGIpIHtcbiAgICByZXR1cm4gYi5tYXggLSBhLm1heDtcbn1cblxuZnVuY3Rpb24gQ2VsbCh4LCB5LCBoLCBwb2x5Z29uKSB7XG4gICAgdGhpcy5wID0gbmV3IFBvaW50KHgsIHkpO1xuICAgIHRoaXMuaCA9IGg7IC8vIGhhbGYgdGhlIGNlbGwgc2l6ZVxuICAgIHRoaXMuZCA9IHBvaW50VG9Qb2x5Z29uRGlzdCh0aGlzLnAsIHBvbHlnb24pOyAvLyBkaXN0YW5jZSBmcm9tIGNlbGwgY2VudGVyIHRvIHBvbHlnb25cbiAgICB0aGlzLm1heCA9IHRoaXMuZCArIHRoaXMuaCAqIE1hdGguU1FSVDI7IC8vIG1heCBkaXN0YW5jZSB0byBwb2x5Z29uIHdpdGhpbiBhIGNlbGxcbn1cblxuLy8gc2lnbmVkIGRpc3RhbmNlIGZyb20gcG9pbnQgdG8gcG9seWdvbiBvdXRsaW5lIChuZWdhdGl2ZSBpZiBwb2ludCBpcyBvdXRzaWRlKVxuZnVuY3Rpb24gcG9pbnRUb1BvbHlnb25EaXN0KHAsIHBvbHlnb24pIHtcbiAgICBsZXQgaW5zaWRlID0gZmFsc2U7XG4gICAgbGV0IG1pbkRpc3RTcSA9IEluZmluaXR5O1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBwb2x5Z29uLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGNvbnN0IHJpbmcgPSBwb2x5Z29uW2tdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByaW5nLmxlbmd0aCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSByaW5nW2ldO1xuICAgICAgICAgICAgY29uc3QgYiA9IHJpbmdbal07XG5cbiAgICAgICAgICAgIGlmICgoYS55ID4gcC55ICE9PSBiLnkgPiBwLnkpICYmXG4gICAgICAgICAgICAgICAgKHAueCA8IChiLnggLSBhLngpICogKHAueSAtIGEueSkgLyAoYi55IC0gYS55KSArIGEueCkpIGluc2lkZSA9ICFpbnNpZGU7XG5cbiAgICAgICAgICAgIG1pbkRpc3RTcSA9IE1hdGgubWluKG1pbkRpc3RTcSwgZGlzdFRvU2VnbWVudFNxdWFyZWQocCwgYSwgYikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChpbnNpZGUgPyAxIDogLTEpICogTWF0aC5zcXJ0KG1pbkRpc3RTcSk7XG59XG5cbi8vIGdldCBwb2x5Z29uIGNlbnRyb2lkXG5mdW5jdGlvbiBnZXRDZW50cm9pZENlbGwocG9seWdvbikge1xuICAgIGxldCBhcmVhID0gMDtcbiAgICBsZXQgeCA9IDA7XG4gICAgbGV0IHkgPSAwO1xuICAgIGNvbnN0IHBvaW50cyA9IHBvbHlnb25bMF07XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHBvaW50cy5sZW5ndGgsIGogPSBsZW4gLSAxOyBpIDwgbGVuOyBqID0gaSsrKSB7XG4gICAgICAgIGNvbnN0IGEgPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IGIgPSBwb2ludHNbal07XG4gICAgICAgIGNvbnN0IGYgPSBhLnggKiBiLnkgLSBiLnggKiBhLnk7XG4gICAgICAgIHggKz0gKGEueCArIGIueCkgKiBmO1xuICAgICAgICB5ICs9IChhLnkgKyBiLnkpICogZjtcbiAgICAgICAgYXJlYSArPSBmICogMztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDZWxsKHggLyBhcmVhLCB5IC8gYXJlYSwgMCwgcG9seWdvbik7XG59XG4iLCIvKipcbiAqIEpTIEltcGxlbWVudGF0aW9uIG9mIE11cm11ckhhc2gzIChyMTM2KSAoYXMgb2YgTWF5IDIwLCAyMDExKVxuICogXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86Z2FyeS5jb3VydEBnbWFpbC5jb21cIj5HYXJ5IENvdXJ0PC9hPlxuICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmFhcHBsZWJ5QGdtYWlsLmNvbVwiPkF1c3RpbiBBcHBsZWJ5PC9hPlxuICogQHNlZSBodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL211cm11cmhhc2gvXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQVNDSUkgb25seVxuICogQHBhcmFtIHtudW1iZXJ9IHNlZWQgUG9zaXRpdmUgaW50ZWdlciBvbmx5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IDMyLWJpdCBwb3NpdGl2ZSBpbnRlZ2VyIGhhc2ggXG4gKi9cblxuZnVuY3Rpb24gbXVybXVyaGFzaDNfMzJfZ2Moa2V5LCBzZWVkKSB7XG5cdHZhciByZW1haW5kZXIsIGJ5dGVzLCBoMSwgaDFiLCBjMSwgYzFiLCBjMiwgYzJiLCBrMSwgaTtcblx0XG5cdHJlbWFpbmRlciA9IGtleS5sZW5ndGggJiAzOyAvLyBrZXkubGVuZ3RoICUgNFxuXHRieXRlcyA9IGtleS5sZW5ndGggLSByZW1haW5kZXI7XG5cdGgxID0gc2VlZDtcblx0YzEgPSAweGNjOWUyZDUxO1xuXHRjMiA9IDB4MWI4NzM1OTM7XG5cdGkgPSAwO1xuXHRcblx0d2hpbGUgKGkgPCBieXRlcykge1xuXHQgIFx0azEgPSBcblx0ICBcdCAgKChrZXkuY2hhckNvZGVBdChpKSAmIDB4ZmYpKSB8XG5cdCAgXHQgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDgpIHxcblx0ICBcdCAgKChrZXkuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYpIHxcblx0ICBcdCAgKChrZXkuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQpO1xuXHRcdCsraTtcblx0XHRcblx0XHRrMSA9ICgoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuXHRcdGsxID0gKGsxIDw8IDE1KSB8IChrMSA+Pj4gMTcpO1xuXHRcdGsxID0gKCgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG5cblx0XHRoMSBePSBrMTtcbiAgICAgICAgaDEgPSAoaDEgPDwgMTMpIHwgKGgxID4+PiAxOSk7XG5cdFx0aDFiID0gKCgoKGgxICYgMHhmZmZmKSAqIDUpICsgKCgoKGgxID4+PiAxNikgKiA1KSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuXHRcdGgxID0gKCgoaDFiICYgMHhmZmZmKSArIDB4NmI2NCkgKyAoKCgoaDFiID4+PiAxNikgKyAweGU2NTQpICYgMHhmZmZmKSA8PCAxNikpO1xuXHR9XG5cdFxuXHRrMSA9IDA7XG5cdFxuXHRzd2l0Y2ggKHJlbWFpbmRlcikge1xuXHRcdGNhc2UgMzogazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXHRcdGNhc2UgMjogazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cdFx0Y2FzZSAxOiBrMSBePSAoa2V5LmNoYXJDb2RlQXQoaSkgJiAweGZmKTtcblx0XHRcblx0XHRrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMxKSArICgoKChrMSA+Pj4gMTYpICogYzEpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcblx0XHRrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcblx0XHRrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcblx0XHRoMSBePSBrMTtcblx0fVxuXHRcblx0aDEgXj0ga2V5Lmxlbmd0aDtcblxuXHRoMSBePSBoMSA+Pj4gMTY7XG5cdGgxID0gKCgoaDEgJiAweGZmZmYpICogMHg4NWViY2E2YikgKyAoKCgoaDEgPj4+IDE2KSAqIDB4ODVlYmNhNmIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcblx0aDEgXj0gaDEgPj4+IDEzO1xuXHRoMSA9ICgoKChoMSAmIDB4ZmZmZikgKiAweGMyYjJhZTM1KSArICgoKChoMSA+Pj4gMTYpICogMHhjMmIyYWUzNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblx0aDEgXj0gaDEgPj4+IDE2O1xuXG5cdHJldHVybiBoMSA+Pj4gMDtcbn1cblxuaWYodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBtb2R1bGUuZXhwb3J0cyA9IG11cm11cmhhc2gzXzMyX2djXG59IiwiLyoqXG4gKiBKUyBJbXBsZW1lbnRhdGlvbiBvZiBNdXJtdXJIYXNoMlxuICogXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86Z2FyeS5jb3VydEBnbWFpbC5jb21cIj5HYXJ5IENvdXJ0PC9hPlxuICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmFhcHBsZWJ5QGdtYWlsLmNvbVwiPkF1c3RpbiBBcHBsZWJ5PC9hPlxuICogQHNlZSBodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL211cm11cmhhc2gvXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgQVNDSUkgb25seVxuICogQHBhcmFtIHtudW1iZXJ9IHNlZWQgUG9zaXRpdmUgaW50ZWdlciBvbmx5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IDMyLWJpdCBwb3NpdGl2ZSBpbnRlZ2VyIGhhc2hcbiAqL1xuXG5mdW5jdGlvbiBtdXJtdXJoYXNoMl8zMl9nYyhzdHIsIHNlZWQpIHtcbiAgdmFyXG4gICAgbCA9IHN0ci5sZW5ndGgsXG4gICAgaCA9IHNlZWQgXiBsLFxuICAgIGkgPSAwLFxuICAgIGs7XG4gIFxuICB3aGlsZSAobCA+PSA0KSB7XG4gIFx0ayA9IFxuICBcdCAgKChzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpKSB8XG4gIFx0ICAoKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4KSB8XG4gIFx0ICAoKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNikgfFxuICBcdCAgKChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQpO1xuICAgIFxuICAgIGsgPSAoKChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGsgPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuICAgIGsgXj0gayA+Pj4gMjQ7XG4gICAgayA9ICgoKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoayA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSk7XG5cblx0aCA9ICgoKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSkgXiBrO1xuXG4gICAgbCAtPSA0O1xuICAgICsraTtcbiAgfVxuICBcbiAgc3dpdGNoIChsKSB7XG4gIGNhc2UgMzogaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG4gIGNhc2UgMjogaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcbiAgY2FzZSAxOiBoIF49IChzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpO1xuICAgICAgICAgIGggPSAoKChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuICB9XG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9ICgoKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSk7XG4gIGggXj0gaCA+Pj4gMTU7XG5cbiAgcmV0dXJuIGggPj4+IDA7XG59XG5cbmlmKHR5cGVvZiBtb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IG11cm11cmhhc2gyXzMyX2djXG59XG4iLCJ2YXIgbXVybXVyMyA9IHJlcXVpcmUoXCIuL211cm11cmhhc2gzX2djLmpzXCIpXG52YXIgbXVybXVyMiA9IHJlcXVpcmUoXCIuL211cm11cmhhc2gyX2djLmpzXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gbXVybXVyM1xubW9kdWxlLmV4cG9ydHMubXVybXVyMyA9IG11cm11cjNcbm1vZHVsZS5leHBvcnRzLm11cm11cjIgPSBtdXJtdXIyXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQW5jaG9yIGZyb20gJy4vYW5jaG9yJztcblxuaW1wb3J0IHtnZXRBbmNob3JzLCBnZXRDZW50ZXJBbmNob3J9IGZyb20gJy4vZ2V0X2FuY2hvcnMnO1xuaW1wb3J0IGNsaXBMaW5lIGZyb20gJy4vY2xpcF9saW5lJztcbmltcG9ydCB7c2hhcGVUZXh0LCBzaGFwZUljb24sIFdyaXRpbmdNb2RlLCBmaXRJY29uVG9UZXh0fSBmcm9tICcuL3NoYXBpbmcnO1xuaW1wb3J0IHtnZXRHbHlwaFF1YWRzLCBnZXRJY29uUXVhZHN9IGZyb20gJy4vcXVhZHMnO1xuaW1wb3J0IENvbGxpc2lvbkZlYXR1cmUgZnJvbSAnLi9jb2xsaXNpb25fZmVhdHVyZSc7XG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtcbiAgICBhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlLFxuICAgIGFsbG93c0xldHRlclNwYWNpbmdcbn0gZnJvbSAnLi4vdXRpbC9zY3JpcHRfZGV0ZWN0aW9uJztcbmltcG9ydCBmaW5kUG9sZU9mSW5hY2Nlc3NpYmlsaXR5IGZyb20gJy4uL3V0aWwvZmluZF9wb2xlX29mX2luYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgY2xhc3NpZnlSaW5ncyBmcm9tICcuLi91dGlsL2NsYXNzaWZ5X3JpbmdzJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IFN5bWJvbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHtTSVpFX1BBQ0tfRkFDVE9SfSBmcm9tICcuL3N5bWJvbF9zaXplJztcbmltcG9ydCBPTkVfRU0gZnJvbSAnLi9vbmVfZW0nO1xuXG5pbXBvcnQgdHlwZSB7U2hhcGluZywgUG9zaXRpb25lZEljb24sIFRleHRKdXN0aWZ5fSBmcm9tICcuL3NoYXBpbmcnO1xuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIHtTeW1ib2xGZWF0dXJlfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaH0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfZ2x5cGgnO1xuaW1wb3J0IHR5cGUgU3ltYm9sU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSB7R2x5cGhQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2dseXBoX2F0bGFzJztcbmltcG9ydCB0eXBlIHtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgbXVybXVyMyBmcm9tICdtdXJtdXJoYXNoLWpzJztcblxuLy8gVGhlIHN5bWJvbCBsYXlvdXQgcHJvY2VzcyBuZWVkcyBgdGV4dC1zaXplYCBldmFsdWF0ZWQgYXQgdXAgdG8gZml2ZSBkaWZmZXJlbnQgem9vbSBsZXZlbHMsIGFuZFxuLy8gYGljb24tc2l6ZWAgYXQgdXAgdG8gdGhyZWU6XG4vL1xuLy8gICAxLiBgdGV4dC1zaXplYCBhdCB0aGUgem9vbSBsZXZlbCBvZiB0aGUgYnVja2V0LiBVc2VkIHRvIGNhbGN1bGF0ZSBhIHBlci1mZWF0dXJlIHNpemUgZm9yIHNvdXJjZSBgdGV4dC1zaXplYFxuLy8gICAgICAgZXhwcmVzc2lvbnMsIGFuZCB0byBjYWxjdWxhdGUgdGhlIGJveCBkaW1lbnNpb25zIGZvciBpY29uLXRleHQtZml0LlxuLy8gICAyLiBgaWNvbi1zaXplYCBhdCB0aGUgem9vbSBsZXZlbCBvZiB0aGUgYnVja2V0LiBVc2VkIHRvIGNhbGN1bGF0ZSBhIHBlci1mZWF0dXJlIHNpemUgZm9yIHNvdXJjZSBgaWNvbi1zaXplYFxuLy8gICAgICAgZXhwcmVzc2lvbnMuXG4vLyAgIDMuIGB0ZXh0LXNpemVgIGFuZCBgaWNvbi1zaXplYCBhdCB0aGUgem9vbSBsZXZlbCBvZiB0aGUgYnVja2V0LCBwbHVzIG9uZS4gVXNlZCB0byBjYWxjdWxhdGUgY29sbGlzaW9uIGJveGVzLlxuLy8gICA0LiBgdGV4dC1zaXplYCBhdCB6b29tIGxldmVsIDE4LiBVc2VkIGZvciBzb21ldGhpbmcgbGluZS1zeW1ib2wtcGxhY2VtZW50LXJlbGF0ZWQuXG4vLyAgIDUuICBGb3IgY29tcG9zaXRlIGAqLXNpemVgIGV4cHJlc3Npb25zOiB0d28gem9vbSBsZXZlbHMgb2YgY3VydmUgc3RvcHMgdGhhdCBcImNvdmVyXCIgdGhlIHpvb20gbGV2ZWwgb2YgdGhlXG4vLyAgICAgICBidWNrZXQuIFRoZXNlIGdvIGludG8gYSB2ZXJ0ZXggYnVmZmVyIGFuZCBhcmUgdXNlZCBieSB0aGUgc2hhZGVyIHRvIGludGVycG9sYXRlIHRoZSBzaXplIGF0IHJlbmRlciB0aW1lLlxuLy9cbi8vICgxKSBhbmQgKDIpIGFyZSBzdG9yZWQgaW4gYGJ1Y2tldC5sYXllcnNbMF0ubGF5b3V0YC4gVGhlIHJlbWFpbmRlciBhcmUgYmVsb3cuXG4vL1xudHlwZSBTaXplcyA9IHtcbiAgICBsYXlvdXRUZXh0U2l6ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4sIC8vICgzKVxuICAgIGxheW91dEljb25TaXplOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPiwgLy8gKDMpXG4gICAgdGV4dE1heFNpemU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCAgICAvLyAoNClcbiAgICBjb21wb3NpdGVUZXh0U2l6ZXM6IFtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPiwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj5dLCAvLyAoNSlcbiAgICBjb21wb3NpdGVJY29uU2l6ZXM6IFtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPiwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj5dLCAvLyAoNSlcbn07XG5cbmV4cG9ydCB0eXBlIFRleHRBbmNob3IgPSAnY2VudGVyJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nIHwgJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnO1xuXG4vLyBUaGUgcmFkaWFsIG9mZnNldCBpcyB0byB0aGUgZWRnZSBvZiB0aGUgdGV4dCBib3hcbi8vIEluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbiwgdGhlIGVkZ2Ugb2YgdGhlIHRleHQgYm94IGlzIHdoZXJlIGdseXBocyBzdGFydFxuLy8gQnV0IGluIHRoZSB2ZXJ0aWNhbCBkaXJlY3Rpb24sIHRoZSBnbHlwaHMgYXBwZWFyIHRvIFwic3RhcnRcIiBhdCB0aGUgYmFzZWxpbmVcbi8vIFdlIGRvbid0IGFjdHVhbGx5IGxvYWQgYmFzZWxpbmUgZGF0YSwgYnV0IHdlIGFzc3VtZSBhbiBvZmZzZXQgb2YgT05FX0VNIC0gMTdcbi8vIChzZWUgXCJ5T2Zmc2V0XCIgaW4gc2hhcGluZy5qcylcbmNvbnN0IGJhc2VsaW5lT2Zmc2V0ID0gNztcbmNvbnN0IElOVkFMSURfVEVYVF9PRkZTRVQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGFuY2hvcjogVGV4dEFuY2hvciwgb2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdKSB7XG5cbiAgICBmdW5jdGlvbiBmcm9tUmFkaWFsT2Zmc2V0KGFuY2hvcjogVGV4dEFuY2hvciwgcmFkaWFsT2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHggPSAwLCB5ID0gMDtcbiAgICAgICAgaWYgKHJhZGlhbE9mZnNldCA8IDApIHJhZGlhbE9mZnNldCA9IDA7IC8vIElnbm9yZSBuZWdhdGl2ZSBvZmZzZXQuXG4gICAgICAgIC8vIHNvbHZlIGZvciByIHdoZXJlIHJeMiArIHJeMiA9IHJhZGlhbE9mZnNldF4yXG4gICAgICAgIGNvbnN0IGh5cG90ZW51c2UgPSByYWRpYWxPZmZzZXQgLyBNYXRoLnNxcnQoMik7XG4gICAgICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgICAgIHkgPSBoeXBvdGVudXNlIC0gYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICAgICAgeSA9IC1oeXBvdGVudXNlICsgYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIHkgPSAtcmFkaWFsT2Zmc2V0ICsgYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIHkgPSByYWRpYWxPZmZzZXQgLSBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgICAgIHggPSAtaHlwb3RlbnVzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgICAgIHggPSBoeXBvdGVudXNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgeCA9IHJhZGlhbE9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICB4ID0gLXJhZGlhbE9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFt4LCB5XTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tVGV4dE9mZnNldChhbmNob3I6IFRleHRBbmNob3IsIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKSB7XG4gICAgICAgIGxldCB4ID0gMCwgeSA9IDA7XG4gICAgICAgIC8vIFVzZSBhYnNvbHV0ZSBvZmZzZXQgdmFsdWVzLlxuICAgICAgICBvZmZzZXRYID0gTWF0aC5hYnMob2Zmc2V0WCk7XG4gICAgICAgIG9mZnNldFkgPSBNYXRoLmFicyhvZmZzZXRZKTtcblxuICAgICAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICB5ID0gb2Zmc2V0WSAtIGJhc2VsaW5lT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIHkgPSAtb2Zmc2V0WSArIGJhc2VsaW5lT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICB4ID0gLW9mZnNldFg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgeCA9IG9mZnNldFg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbeCwgeV07XG4gICAgfVxuXG4gICAgcmV0dXJuIChvZmZzZXRbMV0gIT09IElOVkFMSURfVEVYVF9PRkZTRVQpID8gZnJvbVRleHRPZmZzZXQoYW5jaG9yLCBvZmZzZXRbMF0sIG9mZnNldFsxXSkgOiBmcm9tUmFkaWFsT2Zmc2V0KGFuY2hvciwgb2Zmc2V0WzBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1TeW1ib2xMYXlvdXQoYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W3N0cmluZ106IHtbbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhQb3NpdGlvbnM6IHtbc3RyaW5nXToge1tudW1iZXJdOiBHbHlwaFBvc2l0aW9ufX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlTWFwOiB7W3N0cmluZ106IFN0eWxlSW1hZ2V9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuKSB7XG4gICAgYnVja2V0LmNyZWF0ZUFycmF5cygpO1xuXG4gICAgY29uc3QgdGlsZVNpemUgPSA1MTIgKiBidWNrZXQub3ZlcnNjYWxpbmc7XG4gICAgYnVja2V0LnRpbGVQaXhlbFJhdGlvID0gRVhURU5UIC8gdGlsZVNpemU7XG4gICAgYnVja2V0LmNvbXBhcmVUZXh0ID0ge307XG4gICAgYnVja2V0Lmljb25zTmVlZExpbmVhciA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGF5b3V0ID0gYnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG4gICAgY29uc3QgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXMgPSBidWNrZXQubGF5ZXJzWzBdLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzO1xuXG4gICAgY29uc3Qgc2l6ZXMgPSB7fTtcblxuICAgIGlmIChidWNrZXQudGV4dFNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgIGNvbnN0IHttaW5ab29tLCBtYXhab29tfSA9IGJ1Y2tldC50ZXh0U2l6ZURhdGE7XG4gICAgICAgIHNpemVzLmNvbXBvc2l0ZVRleHRTaXplcyA9IFtcbiAgICAgICAgICAgIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWyd0ZXh0LXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtaW5ab29tKSksXG4gICAgICAgICAgICB1bmV2YWx1YXRlZExheW91dFZhbHVlc1sndGV4dC1zaXplJ10ucG9zc2libHlFdmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMobWF4Wm9vbSkpXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgaWYgKGJ1Y2tldC5pY29uU2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgY29uc3Qge21pblpvb20sIG1heFpvb219ID0gYnVja2V0Lmljb25TaXplRGF0YTtcbiAgICAgICAgc2l6ZXMuY29tcG9zaXRlSWNvblNpemVzID0gW1xuICAgICAgICAgICAgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1pblpvb20pKSxcbiAgICAgICAgICAgIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWydpY29uLXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtYXhab29tKSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBzaXplcy5sYXlvdXRUZXh0U2l6ZSA9IHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWyd0ZXh0LXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhidWNrZXQuem9vbSArIDEpKTtcbiAgICBzaXplcy5sYXlvdXRJY29uU2l6ZSA9IHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWydpY29uLXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhidWNrZXQuem9vbSArIDEpKTtcbiAgICBzaXplcy50ZXh0TWF4U2l6ZSA9IHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWyd0ZXh0LXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycygxOCkpO1xuXG4gICAgY29uc3QgbGluZUhlaWdodCA9IGxheW91dC5nZXQoJ3RleHQtbGluZS1oZWlnaHQnKSAqIE9ORV9FTTtcbiAgICBjb25zdCB0ZXh0QWxvbmdMaW5lID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCcgJiYgbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnO1xuICAgIGNvbnN0IGtlZXBVcHJpZ2h0ID0gbGF5b3V0LmdldCgndGV4dC1rZWVwLXVwcmlnaHQnKTtcblxuICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBidWNrZXQuZmVhdHVyZXMpIHtcbiAgICAgICAgY29uc3QgZm9udHN0YWNrID0gbGF5b3V0LmdldCgndGV4dC1mb250JykuZXZhbHVhdGUoZmVhdHVyZSwge30pLmpvaW4oJywnKTtcbiAgICAgICAgY29uc3QgZ2x5cGhQb3NpdGlvbk1hcCA9IGdseXBoUG9zaXRpb25zO1xuXG4gICAgICAgIGNvbnN0IHNoYXBlZFRleHRPcmllbnRhdGlvbnMgPSB7XG4gICAgICAgICAgICBob3Jpem9udGFsOiB7fSxcbiAgICAgICAgICAgIHZlcnRpY2FsOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGZlYXR1cmUudGV4dDtcbiAgICAgICAgbGV0IHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMF07XG4gICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCB1bmZvcm1hdHRlZFRleHQgPSB0ZXh0LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBzcGFjaW5nID0gbGF5b3V0LmdldCgndGV4dC1sZXR0ZXItc3BhY2luZycpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KSAqIE9ORV9FTTtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNpbmdJZkFsbG93ZWQgPSBhbGxvd3NMZXR0ZXJTcGFjaW5nKHVuZm9ybWF0dGVkVGV4dCkgPyBzcGFjaW5nIDogMDtcblxuICAgICAgICAgICAgY29uc3QgdGV4dEFuY2hvciA9IGxheW91dC5nZXQoJ3RleHQtYW5jaG9yJykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVUZXh0QW5jaG9yID0gbGF5b3V0LmdldCgndGV4dC12YXJpYWJsZS1hbmNob3InKTtcblxuICAgICAgICAgICAgaWYgKCF2YXJpYWJsZVRleHRBbmNob3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYWRpYWxPZmZzZXQgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJhZGlhbC1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgICAgICAgICAgICAgLy8gTGF5ZXJzIHdpdGggdmFyaWFibGUgYW5jaG9ycyB1c2UgdGhlIGB0ZXh0LXJhZGlhbC1vZmZzZXRgIHByb3BlcnR5IGFuZCB0aGUgW3gsIHldIG9mZnNldCB2ZWN0b3JcbiAgICAgICAgICAgICAgICAvLyBpcyBjYWxjdWxhdGVkIGF0IHBsYWNlbWVudCB0aW1lIGluc3RlYWQgb2YgbGF5b3V0IHRpbWVcbiAgICAgICAgICAgICAgICBpZiAocmFkaWFsT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdHlsZSBzcGVjIHNheXMgZG9uJ3QgdXNlIGB0ZXh0LW9mZnNldGAgYW5kIGB0ZXh0LXJhZGlhbC1vZmZzZXRgIHRvZ2V0aGVyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IHNwZWNpZnkgd2hhdCBoYXBwZW5zIGlmIHlvdSB1c2UgYm90aC4gV2UgZ28gd2l0aCB0aGUgcmFkaWFsIG9mZnNldC5cbiAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldCA9IGV2YWx1YXRlVmFyaWFibGVPZmZzZXQodGV4dEFuY2hvciwgW3JhZGlhbE9mZnNldCAqIE9ORV9FTSwgSU5WQUxJRF9URVhUX09GRlNFVF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSAobGF5b3V0LmdldCgndGV4dC1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkubWFwKHQgPT4gdCAqIE9ORV9FTSk6IGFueSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgdGV4dEp1c3RpZnkgPSB0ZXh0QWxvbmdMaW5lID9cbiAgICAgICAgICAgICAgICBcImNlbnRlclwiIDpcbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LWp1c3RpZnknKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbFBsYWNlbWVudCA9IGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKTtcbiAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gc3ltYm9sUGxhY2VtZW50ID09PSAncG9pbnQnID9cbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LW1heC13aWR0aCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KSAqIE9ORV9FTSA6XG4gICAgICAgICAgICAgICAgMDtcblxuICAgICAgICAgICAgY29uc3QgYWRkVmVydGljYWxTaGFwaW5nRm9yUG9pbnRMYWJlbElmTmVlZGVkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlKHVuZm9ybWF0dGVkVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVmVydGljYWwgUE9JIGxhYmVsIHBsYWNlbWVudCBpcyBtZWFudCB0byBiZSB1c2VkIGZvciBzY3JpcHRzIHRoYXQgc3VwcG9ydCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAvLyB3cml0aW5nIG1vZGUsIHRodXMsIGRlZmF1bHQgbGVmdCBqdXN0aWZpY2F0aW9uIGlzIHVzZWQuIElmIExhdGluXG4gICAgICAgICAgICAgICAgICAgIC8vIHNjcmlwdHMgd291bGQgbmVlZCB0byBiZSBzdXBwb3J0ZWQsIHRoaXMgc2hvdWxkIHRha2UgaW50byBhY2NvdW50IG90aGVyIGp1c3RpZmljYXRpb25zLlxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsID0gc2hhcGVUZXh0KHRleHQsIGdseXBoTWFwLCBmb250c3RhY2ssIG1heFdpZHRoLCBsaW5lSGVpZ2h0LCB0ZXh0QW5jaG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZWZ0Jywgc3BhY2luZ0lmQWxsb3dlZCwgdGV4dE9mZnNldCwgV3JpdGluZ01vZGUudmVydGljYWwsIHRydWUsIHN5bWJvbFBsYWNlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gSWYgdGhpcyBsYXllciB1c2VzIHRleHQtdmFyaWFibGUtYW5jaG9yLCBnZW5lcmF0ZSBzaGFwaW5ncyBmb3IgYWxsIGp1c3RpZmljYXRpb24gcG9zc2liaWxpdGllcy5cbiAgICAgICAgICAgIGlmICghdGV4dEFsb25nTGluZSAmJiB2YXJpYWJsZVRleHRBbmNob3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqdXN0aWZpY2F0aW9ucyA9IHRleHRKdXN0aWZ5ID09PSBcImF1dG9cIiA/XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlVGV4dEFuY2hvci5tYXAoYSA9PiBnZXRBbmNob3JKdXN0aWZpY2F0aW9uKGEpKSA6XG4gICAgICAgICAgICAgICAgICAgIFt0ZXh0SnVzdGlmeV07XG5cbiAgICAgICAgICAgICAgICBsZXQgc2luZ2xlTGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwganVzdGlmaWNhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QganVzdGlmaWNhdGlvbjogVGV4dEp1c3RpZnkgPSBqdXN0aWZpY2F0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFtqdXN0aWZpY2F0aW9uXSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc2hhcGluZyBmb3IgdGhlIGZpcnN0IGp1c3RpZmljYXRpb24gd2FzIG9ubHkgYSBzaW5nbGUgbGluZSwgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiByZS11c2UgaXQgZm9yIHRoZSBvdGhlciBqdXN0aWZpY2F0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsW2p1c3RpZmljYXRpb25dID0gc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdXNpbmcgdGV4dC12YXJpYWJsZS1hbmNob3IgZm9yIHRoZSBsYXllciwgd2UgdXNlIGEgY2VudGVyIGFuY2hvciBmb3IgYWxsIHNoYXBpbmdzIGFuZCBhcHBseVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG9mZnNldHMgZm9yIHRoZSBhbmNob3IgaW4gdGhlIHBsYWNlbWVudCBzdGVwLlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcGluZyA9IHNoYXBlVGV4dCh0ZXh0LCBnbHlwaE1hcCwgZm9udHN0YWNrLCBtYXhXaWR0aCwgbGluZUhlaWdodCwgJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZmljYXRpb24sIHNwYWNpbmdJZkFsbG93ZWQsIHRleHRPZmZzZXQsIFdyaXRpbmdNb2RlLmhvcml6b250YWwsIGZhbHNlLCBzeW1ib2xQbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbanVzdGlmaWNhdGlvbl0gPSBzaGFwaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZUxpbmUgPSBzaGFwaW5nLmxpbmVDb3VudCA9PT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFkZFZlcnRpY2FsU2hhcGluZ0ZvclBvaW50TGFiZWxJZk5lZWRlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGV4dEp1c3RpZnkgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRKdXN0aWZ5ID0gZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbih0ZXh0QW5jaG9yKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBIb3Jpem9udGFsIHBvaW50IG9yIGxpbmUgbGFiZWwuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hhcGluZyA9IHNoYXBlVGV4dCh0ZXh0LCBnbHlwaE1hcCwgZm9udHN0YWNrLCBtYXhXaWR0aCwgbGluZUhlaWdodCwgdGV4dEFuY2hvciwgdGV4dEp1c3RpZnksIHNwYWNpbmdJZkFsbG93ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0LCBXcml0aW5nTW9kZS5ob3Jpem9udGFsLCBmYWxzZSwgc3ltYm9sUGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoc2hhcGluZykgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsW3RleHRKdXN0aWZ5XSA9IHNoYXBpbmc7XG5cbiAgICAgICAgICAgICAgICAvLyBWZXJ0aWNhbCBwb2ludCBsYWJlbCAoaWYgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCBpcyBlbmFibGVkKS5cbiAgICAgICAgICAgICAgICBhZGRWZXJ0aWNhbFNoYXBpbmdGb3JQb2ludExhYmVsSWZOZWVkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsaXplZCBsaW5lIGxhYmVsLlxuICAgICAgICAgICAgICAgIGlmIChhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlKHVuZm9ybWF0dGVkVGV4dCkgJiYgdGV4dEFsb25nTGluZSAmJiBrZWVwVXByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsID0gc2hhcGVUZXh0KHRleHQsIGdseXBoTWFwLCBmb250c3RhY2ssIG1heFdpZHRoLCBsaW5lSGVpZ2h0LCB0ZXh0QW5jaG9yLCB0ZXh0SnVzdGlmeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nSWZBbGxvd2VkLCB0ZXh0T2Zmc2V0LCBXcml0aW5nTW9kZS52ZXJ0aWNhbCwgZmFsc2UsIHN5bWJvbFBsYWNlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2hhcGVkSWNvbjtcbiAgICAgICAgaWYgKGZlYXR1cmUuaWNvbiAmJiBmZWF0dXJlLmljb24ubmFtZSkge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBpbWFnZU1hcFtmZWF0dXJlLmljb24ubmFtZV07XG4gICAgICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBzaGFwZWRJY29uID0gc2hhcGVJY29uKFxuICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uc1tmZWF0dXJlLmljb24ubmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwge30pLFxuICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCdpY29uLWFuY2hvcicpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KSk7XG4gICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5zZGZJY29ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5zZGZJY29ucyA9IGltYWdlLnNkZjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1Y2tldC5zZGZJY29ucyAhPT0gaW1hZ2Uuc2RmKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5PbmNlKCdTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbWFnZS5waXhlbFJhdGlvICE9PSBidWNrZXQucGl4ZWxSYXRpbykge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuaWNvbnNOZWVkTGluZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxheW91dC5nZXQoJ2ljb24tcm90YXRlJykuY29uc3RhbnRPcigxKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuaWNvbnNOZWVkTGluZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsKS5sZW5ndGggfHwgc2hhcGVkSWNvbikge1xuICAgICAgICAgICAgYWRkRmVhdHVyZShidWNrZXQsIGZlYXR1cmUsIHNoYXBlZFRleHRPcmllbnRhdGlvbnMsIHNoYXBlZEljb24sIGdseXBoUG9zaXRpb25NYXAsIHNpemVzLCB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93Q29sbGlzaW9uQm94ZXMpIHtcbiAgICAgICAgYnVja2V0LmdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzKCk7XG4gICAgfVxufVxuXG4vLyBDaG9vc2UgdGhlIGp1c3RpZmljYXRpb24gdGhhdCBtYXRjaGVzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIFRleHRBbmNob3JcbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmNob3JKdXN0aWZpY2F0aW9uKGFuY2hvcjogVGV4dEFuY2hvcik6IFRleHRKdXN0aWZ5ICB7XG4gICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICBjYXNlICdyaWdodCc6XG4gICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH1cbiAgICByZXR1cm4gJ2NlbnRlcic7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBmZWF0dXJlIGFuZCBpdHMgc2hhcGVkIHRleHQgYW5kIGljb24gZGF0YSwgYWRkIGEgJ3N5bWJvbFxuICogaW5zdGFuY2UnIGZvciBlYWNoIF9wb3NzaWJsZV8gcGxhY2VtZW50IG9mIHRoZSBzeW1ib2wgZmVhdHVyZS5cbiAqIChBdCByZW5kZXIgdGltZVBsYWNlU3ltYm9scyNwbGFjZSgpIHNlbGVjdHMgd2hpY2ggb2YgdGhlc2UgaW5zdGFuY2VzIHRvXG4gKiBzaG93IG9yIGhpZGUgYmFzZWQgb24gY29sbGlzaW9ucyB3aXRoIHN5bWJvbHMgaW4gb3RoZXIgbGF5ZXJzLilcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZEZlYXR1cmUoYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFN5bWJvbEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnM6IGFueSxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogUG9zaXRpb25lZEljb24gfCB2b2lkLFxuICAgICAgICAgICAgICAgICAgICBnbHlwaFBvc2l0aW9uTWFwOiB7W3N0cmluZ106IHtbbnVtYmVyXTogR2x5cGhQb3NpdGlvbn19LFxuICAgICAgICAgICAgICAgICAgICBzaXplczogU2l6ZXMsXG4gICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICBjb25zdCBsYXlvdXRUZXh0U2l6ZSA9IHNpemVzLmxheW91dFRleHRTaXplLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICBjb25zdCBsYXlvdXRJY29uU2l6ZSA9IHNpemVzLmxheW91dEljb25TaXplLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcblxuICAgIC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxhYmVscyB0aGF0IGp1bXAgYXJvdW5kIHdoZW4gem9vbWluZyB3ZSBuZWVkXG4gICAgLy8gdG8gdXNlIGEgdGV4dC1zaXplIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgZm9yIGFsbCB6b29tIGxldmVscy5cbiAgICAvLyBidWNrZXQgY2FsY3VsYXRlcyB0ZXh0LXNpemUgYXQgYSBoaWdoIHpvb20gbGV2ZWwgc28gdGhhdCBhbGwgdGlsZXMgY2FuXG4gICAgLy8gdXNlIHRoZSBzYW1lIHZhbHVlIHdoZW4gY2FsY3VsYXRpbmcgYW5jaG9yIHBvc2l0aW9ucy5cbiAgICBsZXQgdGV4dE1heFNpemUgPSBzaXplcy50ZXh0TWF4U2l6ZS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgaWYgKHRleHRNYXhTaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dE1heFNpemUgPSBsYXlvdXRUZXh0U2l6ZTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXlvdXQgPSBidWNrZXQubGF5ZXJzWzBdLmxheW91dDtcbiAgICBjb25zdCBpY29uT2Zmc2V0ID0gbGF5b3V0LmdldCgnaWNvbi1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgY29uc3QgZGVmYXVsdEhvcml6b250YWxTaGFwaW5nID0gZ2V0RGVmYXVsdEhvcml6b250YWxTaGFwaW5nKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbCk7XG4gICAgY29uc3QgZ2x5cGhTaXplID0gMjQsXG4gICAgICAgIGZvbnRTY2FsZSA9IGxheW91dFRleHRTaXplIC8gZ2x5cGhTaXplLFxuICAgICAgICB0ZXh0Qm94U2NhbGUgPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gKiBmb250U2NhbGUsXG4gICAgICAgIHRleHRNYXhCb3hTY2FsZSA9IGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyAqIHRleHRNYXhTaXplIC8gZ2x5cGhTaXplLFxuICAgICAgICBpY29uQm94U2NhbGUgPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gKiBsYXlvdXRJY29uU2l6ZSxcbiAgICAgICAgc3ltYm9sTWluRGlzdGFuY2UgPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gKiBsYXlvdXQuZ2V0KCdzeW1ib2wtc3BhY2luZycpLFxuICAgICAgICB0ZXh0UGFkZGluZyA9IGxheW91dC5nZXQoJ3RleHQtcGFkZGluZycpICogYnVja2V0LnRpbGVQaXhlbFJhdGlvLFxuICAgICAgICBpY29uUGFkZGluZyA9IGxheW91dC5nZXQoJ2ljb24tcGFkZGluZycpICogYnVja2V0LnRpbGVQaXhlbFJhdGlvLFxuICAgICAgICB0ZXh0TWF4QW5nbGUgPSBsYXlvdXQuZ2V0KCd0ZXh0LW1heC1hbmdsZScpIC8gMTgwICogTWF0aC5QSSxcbiAgICAgICAgdGV4dEFsb25nTGluZSA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnICYmIGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JyxcbiAgICAgICAgaWNvbkFsb25nTGluZSA9IGxheW91dC5nZXQoJ2ljb24tcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnICYmIGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JyxcbiAgICAgICAgc3ltYm9sUGxhY2VtZW50ID0gbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpLFxuICAgICAgICB0ZXh0UmVwZWF0RGlzdGFuY2UgPSBzeW1ib2xNaW5EaXN0YW5jZSAvIDI7XG5cbiAgICBjb25zdCBpY29uVGV4dEZpdCA9IGxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQnKTtcbiAgICAvLyBBZGp1c3Qgc2hhcGVkIGljb24gc2l6ZSB3aGVuIGljb24tdGV4dC1maXQgaXMgdXNlZC5cbiAgICBpZiAoc2hhcGVkSWNvbiAmJiBpY29uVGV4dEZpdCAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGlmIChkZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcpIHtcbiAgICAgICAgICAgIHNoYXBlZEljb24gPSBmaXRJY29uVG9UZXh0KHNoYXBlZEljb24sIGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZywgaWNvblRleHRGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0LXBhZGRpbmcnKSwgaWNvbk9mZnNldCwgZm9udFNjYWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFkZFN5bWJvbEF0QW5jaG9yID0gKGxpbmUsIGFuY2hvcikgPT4ge1xuICAgICAgICBpZiAoYW5jaG9yLnggPCAwIHx8IGFuY2hvci54ID49IEVYVEVOVCB8fCBhbmNob3IueSA8IDAgfHwgYW5jaG9yLnkgPj0gRVhURU5UKSB7XG4gICAgICAgICAgICAvLyBTeW1ib2wgbGF5ZXJzIGFyZSBkcmF3biBhY3Jvc3MgdGlsZSBib3VuZGFyaWVzLCBXZSBmaWx0ZXIgb3V0IHN5bWJvbHNcbiAgICAgICAgICAgIC8vIG91dHNpZGUgb3VyIHRpbGUgYm91bmRhcmllcyAod2hpY2ggbWF5IGJlIGluY2x1ZGVkIGluIHZlY3RvciB0aWxlIGJ1ZmZlcnMpXG4gICAgICAgICAgICAvLyB0byBwcmV2ZW50IGRvdWJsZS1kcmF3aW5nIHN5bWJvbHMuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhZGRTeW1ib2woYnVja2V0LCBhbmNob3IsIGxpbmUsIHNoYXBlZFRleHRPcmllbnRhdGlvbnMsIHNoYXBlZEljb24sIGJ1Y2tldC5sYXllcnNbMF0sXG4gICAgICAgICAgICBidWNrZXQuY29sbGlzaW9uQm94QXJyYXksIGZlYXR1cmUuaW5kZXgsIGZlYXR1cmUuc291cmNlTGF5ZXJJbmRleCwgYnVja2V0LmluZGV4LFxuICAgICAgICAgICAgdGV4dEJveFNjYWxlLCB0ZXh0UGFkZGluZywgdGV4dEFsb25nTGluZSwgdGV4dE9mZnNldCxcbiAgICAgICAgICAgIGljb25Cb3hTY2FsZSwgaWNvblBhZGRpbmcsIGljb25BbG9uZ0xpbmUsIGljb25PZmZzZXQsXG4gICAgICAgICAgICBmZWF0dXJlLCBnbHlwaFBvc2l0aW9uTWFwLCBzaXplcyk7XG4gICAgfTtcblxuICAgIGlmIChzeW1ib2xQbGFjZW1lbnQgPT09ICdsaW5lJykge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgY2xpcExpbmUoZmVhdHVyZS5nZW9tZXRyeSwgMCwgMCwgRVhURU5ULCBFWFRFTlQpKSB7XG4gICAgICAgICAgICBjb25zdCBhbmNob3JzID0gZ2V0QW5jaG9ycyhcbiAgICAgICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgICAgIHN5bWJvbE1pbkRpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRleHRNYXhBbmdsZSxcbiAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsIHx8IGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZyxcbiAgICAgICAgICAgICAgICBzaGFwZWRJY29uLFxuICAgICAgICAgICAgICAgIGdseXBoU2l6ZSxcbiAgICAgICAgICAgICAgICB0ZXh0TWF4Qm94U2NhbGUsXG4gICAgICAgICAgICAgICAgYnVja2V0Lm92ZXJzY2FsaW5nLFxuICAgICAgICAgICAgICAgIEVYVEVOVFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW5jaG9yIG9mIGFuY2hvcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFwZWRUZXh0ID0gZGVmYXVsdEhvcml6b250YWxTaGFwaW5nO1xuICAgICAgICAgICAgICAgIGlmICghc2hhcGVkVGV4dCB8fCAhYW5jaG9ySXNUb29DbG9zZShidWNrZXQsIHNoYXBlZFRleHQudGV4dCwgdGV4dFJlcGVhdERpc3RhbmNlLCBhbmNob3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKGxpbmUsIGFuY2hvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzeW1ib2xQbGFjZW1lbnQgPT09ICdsaW5lLWNlbnRlcicpIHtcbiAgICAgICAgLy8gTm8gY2xpcHBpbmcsIG11bHRpcGxlIGxpbmVzIHBlciBmZWF0dXJlIGFyZSBhbGxvd2VkXG4gICAgICAgIC8vIFwibGluZXNcIiB3aXRoIG9ubHkgb25lIHBvaW50IGFyZSBpZ25vcmVkIGFzIGluIGNsaXBMaW5lc1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGdldENlbnRlckFuY2hvcihcbiAgICAgICAgICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dE1heEFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsIHx8IGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbixcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhTaXplLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0TWF4Qm94U2NhbGUpO1xuICAgICAgICAgICAgICAgIGlmIChhbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IobGluZSwgYW5jaG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZlYXR1cmUudHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9seWdvbiBvZiBjbGFzc2lmeVJpbmdzKGZlYXR1cmUuZ2VvbWV0cnksIDApKSB7XG4gICAgICAgICAgICAvLyAxNiBoZXJlIHJlcHJlc2VudHMgMiBwaXhlbHNcbiAgICAgICAgICAgIGNvbnN0IHBvaSA9IGZpbmRQb2xlT2ZJbmFjY2Vzc2liaWxpdHkocG9seWdvbiwgMTYpO1xuICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IocG9seWdvblswXSwgbmV3IEFuY2hvcihwb2kueCwgcG9pLnksIDApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmVhdHVyZS50eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM4MDhcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKGxpbmUsIG5ldyBBbmNob3IobGluZVswXS54LCBsaW5lWzBdLnksIDApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmVhdHVyZS50eXBlID09PSAnUG9pbnQnKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9pbnRzIG9mIGZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IoW3BvaW50XSwgbmV3IEFuY2hvcihwb2ludC54LCBwb2ludC55LCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IE1BWF9QQUNLRURfU0laRSA9IDY1NTM1O1xuXG5mdW5jdGlvbiBhZGRUZXh0VmVydGljZXMoYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yOiBQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0OiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyOiBTeW1ib2xTdHlsZUxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbG9uZ0xpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVBcnJheToge2xpbmVTdGFydEluZGV4OiBudW1iZXIsIGxpbmVMZW5ndGg6IG51bWJlcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGluZ01vZGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnRUeXBlczogQXJyYXk8J3ZlcnRpY2FsJyB8ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0Jz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXM6IHtbc3RyaW5nXTogbnVtYmVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFBvc2l0aW9uTWFwOiB7W3N0cmluZ106IHtbbnVtYmVyXTogR2x5cGhQb3NpdGlvbn19LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZEljb25JbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzOiBTaXplcykge1xuICAgIGNvbnN0IGdseXBoUXVhZHMgPSBnZXRHbHlwaFF1YWRzKGFuY2hvciwgc2hhcGVkVGV4dCwgdGV4dE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciwgdGV4dEFsb25nTGluZSwgZmVhdHVyZSwgZ2x5cGhQb3NpdGlvbk1hcCwgYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQpO1xuXG4gICAgY29uc3Qgc2l6ZURhdGEgPSBidWNrZXQudGV4dFNpemVEYXRhO1xuICAgIGxldCB0ZXh0U2l6ZURhdGEgPSBudWxsO1xuXG4gICAgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgIHRleHRTaXplRGF0YSA9IFtcbiAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXNpemUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSlcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHRleHRTaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoYCR7YnVja2V0LmxheWVySWRzWzBdfTogVmFsdWUgZm9yIFwidGV4dC1zaXplXCIgaXMgPj0gMjU2LiBSZWR1Y2UgeW91ciBcInRleHQtc2l6ZVwiLmApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICB0ZXh0U2l6ZURhdGEgPSBbXG4gICAgICAgICAgICBTSVpFX1BBQ0tfRkFDVE9SICogc2l6ZXMuY29tcG9zaXRlVGV4dFNpemVzWzBdLmV2YWx1YXRlKGZlYXR1cmUsIHt9KSxcbiAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBzaXplcy5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUoZmVhdHVyZSwge30pXG4gICAgICAgIF07XG4gICAgICAgIGlmICh0ZXh0U2l6ZURhdGFbMF0gPiBNQVhfUEFDS0VEX1NJWkUgfHwgdGV4dFNpemVEYXRhWzFdID4gTUFYX1BBQ0tFRF9TSVpFKSB7XG4gICAgICAgICAgICB3YXJuT25jZShgJHtidWNrZXQubGF5ZXJJZHNbMF19OiBWYWx1ZSBmb3IgXCJ0ZXh0LXNpemVcIiBpcyA+PSAyNTYuIFJlZHVjZSB5b3VyIFwidGV4dC1zaXplXCIuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBidWNrZXQuYWRkU3ltYm9scyhcbiAgICAgICAgYnVja2V0LnRleHQsXG4gICAgICAgIGdseXBoUXVhZHMsXG4gICAgICAgIHRleHRTaXplRGF0YSxcbiAgICAgICAgdGV4dE9mZnNldCxcbiAgICAgICAgdGV4dEFsb25nTGluZSxcbiAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgd3JpdGluZ01vZGUsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgbGluZUFycmF5LmxpbmVTdGFydEluZGV4LFxuICAgICAgICBsaW5lQXJyYXkubGluZUxlbmd0aCxcbiAgICAgICAgcGxhY2VkSWNvbkluZGV4KTtcblxuICAgIC8vIFRoZSBwbGFjZWRTeW1ib2xBcnJheSBpcyB1c2VkIGF0IHJlbmRlciB0aW1lIGluIGRyYXdUaWxlU3ltYm9sc1xuICAgIC8vIFRoZXNlIGluZGljZXMgYWxsb3cgYWNjZXNzIHRvIHRoZSBhcnJheSBhdCBjb2xsaXNpb24gZGV0ZWN0aW9uIHRpbWVcbiAgICBmb3IgKGNvbnN0IHBsYWNlbWVudFR5cGUgb2YgcGxhY2VtZW50VHlwZXMpIHtcbiAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXNbcGxhY2VtZW50VHlwZV0gPSBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBnbHlwaFF1YWRzLmxlbmd0aCAqIDQ7XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRIb3Jpem9udGFsU2hhcGluZyhob3Jpem9udGFsU2hhcGluZzoge1tUZXh0SnVzdGlmeV06IFNoYXBpbmd9KTogU2hhcGluZyB8IG51bGwge1xuICAgIC8vIFdlIGRvbid0IGNhcmUgd2hpY2ggc2hhcGluZyB3ZSBnZXQgYmVjYXVzZSB0aGlzIGlzIHVzZWQgZm9yIGNvbGxpc2lvbiBwdXJwb3Nlc1xuICAgIC8vIGFuZCBhbGwgdGhlIGp1c3RpZmljYXRpb25zIGhhdmUgdGhlIHNhbWUgY29sbGlzaW9uIGJveFxuICAgIGZvciAoY29uc3QganVzdGlmaWNhdGlvbjogYW55IGluIGhvcml6b250YWxTaGFwaW5nKSB7XG4gICAgICAgIHJldHVybiBob3Jpem9udGFsU2hhcGluZ1tqdXN0aWZpY2F0aW9uXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQWRkIGEgc2luZ2xlIGxhYmVsICYgaWNvbiBwbGFjZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkU3ltYm9sKGJ1Y2tldDogU3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgICAgICAgIGFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgICAgIGxpbmU6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zOiBhbnksXG4gICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogUG9zaXRpb25lZEljb24gfCB2b2lkLFxuICAgICAgICAgICAgICAgICAgIGxheWVyOiBTeW1ib2xTdHlsZUxheWVyLFxuICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0Qm94U2NhbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0UGFkZGluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHRleHRBbG9uZ0xpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICBpY29uQm94U2NhbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBpY29uUGFkZGluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGljb25BbG9uZ0xpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgaWNvbk9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBTeW1ib2xGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgIGdseXBoUG9zaXRpb25NYXA6IHtbc3RyaW5nXToge1tudW1iZXJdOiBHbHlwaFBvc2l0aW9ufX0sXG4gICAgICAgICAgICAgICAgICAgc2l6ZXM6IFNpemVzKSB7XG4gICAgY29uc3QgbGluZUFycmF5ID0gYnVja2V0LmFkZFRvTGluZVZlcnRleEFycmF5KGFuY2hvciwgbGluZSk7XG5cbiAgICBsZXQgdGV4dENvbGxpc2lvbkZlYXR1cmUsIGljb25Db2xsaXNpb25GZWF0dXJlLCB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlO1xuXG4gICAgbGV0IG51bUljb25WZXJ0aWNlcyA9IDA7XG4gICAgbGV0IG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzID0gMDtcbiAgICBsZXQgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID0gMDtcbiAgICBsZXQgcGxhY2VkSWNvblN5bWJvbEluZGV4ID0gLTE7XG4gICAgY29uc3QgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMgPSB7fTtcbiAgICBsZXQga2V5ID0gbXVybXVyMygnJyk7XG5cbiAgICBsZXQgdGV4dE9mZnNldDAgPSAwO1xuICAgIGxldCB0ZXh0T2Zmc2V0MSA9IDA7XG4gICAgaWYgKGxheWVyLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSgndGV4dC1yYWRpYWwtb2Zmc2V0JykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBbdGV4dE9mZnNldDAsIHRleHRPZmZzZXQxXSA9IChsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KS5tYXAodCA9PiB0ICogT05FX0VNKTogYW55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0T2Zmc2V0MCA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcmFkaWFsLW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KSAqIE9ORV9FTTtcbiAgICAgICAgdGV4dE9mZnNldDEgPSBJTlZBTElEX1RFWFRfT0ZGU0VUO1xuICAgIH1cblxuICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsKSB7XG4gICAgICAgIGNvbnN0IHRleHRSb3RhdGlvbiA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcm90YXRlJykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbFRleHRSb3RhdGlvbiA9IHRleHRSb3RhdGlvbiArIDkwLjA7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsU2hhcGluZyA9IHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWw7XG4gICAgICAgIHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUgPSBuZXcgQ29sbGlzaW9uRmVhdHVyZShjb2xsaXNpb25Cb3hBcnJheSwgbGluZSwgYW5jaG9yLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LCB2ZXJ0aWNhbFNoYXBpbmcsIHRleHRCb3hTY2FsZSwgdGV4dFBhZGRpbmcsIHRleHRBbG9uZ0xpbmUsIGJ1Y2tldC5vdmVyc2NhbGluZywgdmVydGljYWxUZXh0Um90YXRpb24pO1xuICAgIH1cblxuICAgIC8vUGxhY2UgaWNvbiBmaXJzdCwgc28gdGV4dCBjYW4gaGF2ZSBhIHJlZmVyZW5jZSB0byBpdHMgaW5kZXggaW4gdGhlIHBsYWNlZCBzeW1ib2wgYXJyYXkuXG4gICAgLy9UZXh0IHN5bWJvbHMgY2FuIGxhemlseSBzaGlmdCBhdCByZW5kZXItdGltZSBiZWNhdXNlIG9mIHZhcmlhYmxlIGFuY2hvciBwbGFjZW1lbnQuXG4gICAgLy9JZiB0aGUgc3R5bGUgc3BlY2lmaWVzIGFuIGBpY29uLXRleHQtZml0YCB0aGVuIHRoZSBpY29uIHdvdWxkIGhhdmUgdG8gc2hpZnQgYWxvbmcgd2l0aCBpdC5cbiAgICAvLyBGb3IgbW9yZSBpbmZvIGNoZWNrIGB1cGRhdGVWYXJpYWJsZUFuY2hvcnNgIGluIGBkcmF3X3N5bWJvbC5qc2AgLlxuICAgIGlmIChzaGFwZWRJY29uKSB7XG4gICAgICAgIGNvbnN0IGljb25Sb3RhdGUgPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXJvdGF0ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICAgICAgY29uc3QgaWNvblF1YWRzID0gZ2V0SWNvblF1YWRzKHNoYXBlZEljb24sIGljb25Sb3RhdGUpO1xuICAgICAgICBpY29uQ29sbGlzaW9uRmVhdHVyZSA9IG5ldyBDb2xsaXNpb25GZWF0dXJlKGNvbGxpc2lvbkJveEFycmF5LCBsaW5lLCBhbmNob3IsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgsIHNoYXBlZEljb24sIGljb25Cb3hTY2FsZSwgaWNvblBhZGRpbmcsIC8qYWxpZ24gYm94ZXMgdG8gbGluZSovZmFsc2UsIGJ1Y2tldC5vdmVyc2NhbGluZywgaWNvblJvdGF0ZSk7XG5cbiAgICAgICAgbnVtSWNvblZlcnRpY2VzID0gaWNvblF1YWRzLmxlbmd0aCAqIDQ7XG5cbiAgICAgICAgY29uc3Qgc2l6ZURhdGEgPSBidWNrZXQuaWNvblNpemVEYXRhO1xuICAgICAgICBsZXQgaWNvblNpemVEYXRhID0gbnVsbDtcblxuICAgICAgICBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgICAgIGljb25TaXplRGF0YSA9IFtcbiAgICAgICAgICAgICAgICBTSVpFX1BBQ0tfRkFDVE9SICogbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1zaXplJykuZXZhbHVhdGUoZmVhdHVyZSwge30pXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGljb25TaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSkge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGAke2J1Y2tldC5sYXllcklkc1swXX06IFZhbHVlIGZvciBcImljb24tc2l6ZVwiIGlzID49IDI1Ni4gUmVkdWNlIHlvdXIgXCJpY29uLXNpemVcIi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICAgICAgaWNvblNpemVEYXRhID0gW1xuICAgICAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBzaXplcy5jb21wb3NpdGVJY29uU2l6ZXNbMF0uZXZhbHVhdGUoZmVhdHVyZSwge30pLFxuICAgICAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBzaXplcy5jb21wb3NpdGVJY29uU2l6ZXNbMV0uZXZhbHVhdGUoZmVhdHVyZSwge30pXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGljb25TaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSB8fCBpY29uU2l6ZURhdGFbMV0gPiBNQVhfUEFDS0VEX1NJWkUpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShgJHtidWNrZXQubGF5ZXJJZHNbMF19OiBWYWx1ZSBmb3IgXCJpY29uLXNpemVcIiBpcyA+PSAyNTYuIFJlZHVjZSB5b3VyIFwiaWNvbi1zaXplXCIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWNrZXQuYWRkU3ltYm9scyhcbiAgICAgICAgICAgIGJ1Y2tldC5pY29uLFxuICAgICAgICAgICAgaWNvblF1YWRzLFxuICAgICAgICAgICAgaWNvblNpemVEYXRhLFxuICAgICAgICAgICAgaWNvbk9mZnNldCxcbiAgICAgICAgICAgIGljb25BbG9uZ0xpbmUsXG4gICAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBsaW5lQXJyYXkubGluZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBsaW5lQXJyYXkubGluZUxlbmd0aCxcbiAgICAgICAgICAgIC8vIFRoZSBpY29uIGl0c2VsZiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgc3ltYm9sIHNpbmNlIHRoZSB0ZXh0IGlzbnQgcGxhY2VkIHlldFxuICAgICAgICAgICAgLTEpO1xuXG4gICAgICAgIHBsYWNlZEljb25TeW1ib2xJbmRleCA9IGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBqdXN0aWZpY2F0aW9uOiBhbnkgaW4gc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsKSB7XG4gICAgICAgIGNvbnN0IHNoYXBpbmcgPSBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbanVzdGlmaWNhdGlvbl07XG5cbiAgICAgICAgaWYgKCF0ZXh0Q29sbGlzaW9uRmVhdHVyZSkge1xuICAgICAgICAgICAga2V5ID0gbXVybXVyMyhzaGFwaW5nLnRleHQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFJvdGF0ZSA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcm90YXRlJykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgICAgICAgICAgLy8gQXMgYSBjb2xsaXNpb24gYXBwcm94aW1hdGlvbiwgd2UgY2FuIHVzZSBlaXRoZXIgdGhlIHZlcnRpY2FsIG9yIGFueSBvZiB0aGUgaG9yaXpvbnRhbCB2ZXJzaW9ucyBvZiB0aGUgZmVhdHVyZVxuICAgICAgICAgICAgLy8gV2UncmUgY291bnRpbmcgb24gYWxsIHZlcnNpb25zIGhhdmluZyBzaW1pbGFyIGRpbWVuc2lvbnNcbiAgICAgICAgICAgIHRleHRDb2xsaXNpb25GZWF0dXJlID0gbmV3IENvbGxpc2lvbkZlYXR1cmUoY29sbGlzaW9uQm94QXJyYXksIGxpbmUsIGFuY2hvciwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCwgc2hhcGluZywgdGV4dEJveFNjYWxlLCB0ZXh0UGFkZGluZywgdGV4dEFsb25nTGluZSwgYnVja2V0Lm92ZXJzY2FsaW5nLCB0ZXh0Um90YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpbmdsZUxpbmUgPSBzaGFwaW5nLmxpbmVDb3VudCA9PT0gMTtcbiAgICAgICAgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMgKz0gYWRkVGV4dFZlcnRpY2VzKFxuICAgICAgICAgICAgYnVja2V0LCBhbmNob3IsIHNoYXBpbmcsIGxheWVyLCB0ZXh0QWxvbmdMaW5lLCBmZWF0dXJlLCB0ZXh0T2Zmc2V0LCBsaW5lQXJyYXksXG4gICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsID8gV3JpdGluZ01vZGUuaG9yaXpvbnRhbCA6IFdyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5LFxuICAgICAgICAgICAgc2luZ2xlTGluZSA/IChPYmplY3Qua2V5cyhzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWwpOiBhbnkpIDogW2p1c3RpZmljYXRpb25dLFxuICAgICAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMsIGdseXBoUG9zaXRpb25NYXAsIHBsYWNlZEljb25TeW1ib2xJbmRleCwgc2l6ZXMpO1xuXG4gICAgICAgIGlmIChzaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsKSB7XG4gICAgICAgIG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyArPSBhZGRUZXh0VmVydGljZXMoXG4gICAgICAgICAgICBidWNrZXQsIGFuY2hvciwgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCwgbGF5ZXIsIHRleHRBbG9uZ0xpbmUsIGZlYXR1cmUsXG4gICAgICAgICAgICB0ZXh0T2Zmc2V0LCBsaW5lQXJyYXksIFdyaXRpbmdNb2RlLnZlcnRpY2FsLCBbJ3ZlcnRpY2FsJ10sIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLCBnbHlwaFBvc2l0aW9uTWFwLCBwbGFjZWRJY29uU3ltYm9sSW5kZXgsIHNpemVzKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0Qm94U3RhcnRJbmRleCA9IHRleHRDb2xsaXNpb25GZWF0dXJlID8gdGV4dENvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgdGV4dEJveEVuZEluZGV4ID0gdGV4dENvbGxpc2lvbkZlYXR1cmUgPyB0ZXh0Q29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4ID0gdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZSA/IHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgdmVydGljYWxUZXh0Qm94RW5kSW5kZXggPSB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlID8gdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICBjb25zdCBpY29uQm94U3RhcnRJbmRleCA9IGljb25Db2xsaXNpb25GZWF0dXJlID8gaWNvbkNvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgaWNvbkJveEVuZEluZGV4ID0gaWNvbkNvbGxpc2lvbkZlYXR1cmUgPyBpY29uQ29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICBpZiAoYnVja2V0LmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoID49IFN5bWJvbEJ1Y2tldC5NQVhfR0xZUEhTKSB3YXJuT25jZShcbiAgICAgICAgXCJUb28gbWFueSBnbHlwaHMgYmVpbmcgcmVuZGVyZWQgaW4gYSB0aWxlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI5MDdcIlxuICAgICk7XG5cbiAgICBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmVtcGxhY2VCYWNrKFxuICAgICAgICBhbmNob3IueCxcbiAgICAgICAgYW5jaG9yLnksXG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLnJpZ2h0ID49IDAgPyBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5yaWdodCA6IC0xLFxuICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5jZW50ZXIgPj0gMCA/IHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLmNlbnRlciA6IC0xLFxuICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5sZWZ0ID49IDAgPyBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5sZWZ0IDogLTEsXG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLnZlcnRpY2FsIHx8IC0xLFxuICAgICAgICBwbGFjZWRJY29uU3ltYm9sSW5kZXgsXG4gICAgICAgIGtleSxcbiAgICAgICAgdGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgIHRleHRCb3hFbmRJbmRleCxcbiAgICAgICAgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCxcbiAgICAgICAgdmVydGljYWxUZXh0Qm94RW5kSW5kZXgsXG4gICAgICAgIGljb25Cb3hTdGFydEluZGV4LFxuICAgICAgICBpY29uQm94RW5kSW5kZXgsXG4gICAgICAgIGZlYXR1cmVJbmRleCxcbiAgICAgICAgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMsXG4gICAgICAgIG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxcbiAgICAgICAgbnVtSWNvblZlcnRpY2VzLFxuICAgICAgICAwLFxuICAgICAgICB0ZXh0Qm94U2NhbGUsXG4gICAgICAgIHRleHRPZmZzZXQwLFxuICAgICAgICB0ZXh0T2Zmc2V0MSk7XG59XG5cbmZ1bmN0aW9uIGFuY2hvcklzVG9vQ2xvc2UoYnVja2V0OiBhbnksIHRleHQ6IHN0cmluZywgcmVwZWF0RGlzdGFuY2U6IG51bWJlciwgYW5jaG9yOiBQb2ludCkge1xuICAgIGNvbnN0IGNvbXBhcmVUZXh0ID0gYnVja2V0LmNvbXBhcmVUZXh0O1xuICAgIGlmICghKHRleHQgaW4gY29tcGFyZVRleHQpKSB7XG4gICAgICAgIGNvbXBhcmVUZXh0W3RleHRdID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3RoZXJBbmNob3JzID0gY29tcGFyZVRleHRbdGV4dF07XG4gICAgICAgIGZvciAobGV0IGsgPSBvdGhlckFuY2hvcnMubGVuZ3RoIC0gMTsgayA+PSAwOyBrLS0pIHtcbiAgICAgICAgICAgIGlmIChhbmNob3IuZGlzdChvdGhlckFuY2hvcnNba10pIDwgcmVwZWF0RGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIHdpdGhpbiByZXBlYXREaXN0YW5jZSBvZiBvbmUgYW5jaG9yLCBzdG9wIGxvb2tpbmdcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiBhbmNob3IgaXMgbm90IHdpdGhpbiByZXBlYXREaXN0YW5jZSBvZiBhbnkgb3RoZXIgYW5jaG9yLCBhZGQgdG8gYXJyYXlcbiAgICBjb21wYXJlVGV4dFt0ZXh0XS5wdXNoKGFuY2hvcik7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwiXG5pbXBvcnQgcmVmUHJvcGVydGllcyBmcm9tICcuL3V0aWwvcmVmX3Byb3BlcnRpZXMnO1xuXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqKSB7XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJyB8fCB0eXBlID09PSAnc3RyaW5nJyB8fCBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwpXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBsZXQgc3RyID0gJ1snO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBvYmopIHtcbiAgICAgICAgICAgIHN0ciArPSBgJHtzdHJpbmdpZnkodmFsKX0sYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7c3RyfV1gO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopLnNvcnQoKTtcblxuICAgIGxldCBzdHIgPSAneyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0ciArPSBgJHtKU09OLnN0cmluZ2lmeShrZXlzW2ldKX06JHtzdHJpbmdpZnkob2JqW2tleXNbaV1dKX0sYDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3N0cn19YDtcbn1cblxuZnVuY3Rpb24gZ2V0S2V5KGxheWVyKSB7XG4gICAgbGV0IGtleSA9ICcnO1xuICAgIGZvciAoY29uc3QgayBvZiByZWZQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGtleSArPSBgLyR7c3RyaW5naWZ5KGxheWVyW2tdKX1gO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBncm91cEJ5TGF5b3V0O1xuXG4vKipcbiAqIEdpdmVuIGFuIGFycmF5IG9mIGxheWVycywgcmV0dXJuIGFuIGFycmF5IG9mIGFycmF5cyBvZiBsYXllcnMgd2hlcmUgYWxsXG4gKiBsYXllcnMgaW4gZWFjaCBncm91cCBoYXZlIGlkZW50aWNhbCBsYXlvdXQtYWZmZWN0aW5nIHByb3BlcnRpZXMuIFRoZXNlXG4gKiBhcmUgdGhlIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGZvcm1lcmx5IHVzZWQgYnkgZXhwbGljaXQgYHJlZmAgbWVjaGFuaXNtXG4gKiBmb3IgbGF5ZXJzOiAndHlwZScsICdzb3VyY2UnLCAnc291cmNlLWxheWVyJywgJ21pbnpvb20nLCAnbWF4em9vbScsXG4gKiAnZmlsdGVyJywgYW5kICdsYXlvdXQnLlxuICpcbiAqIFRoZSBpbnB1dCBpcyBub3QgbW9kaWZpZWQuIFRoZSBvdXRwdXQgbGF5ZXJzIGFyZSByZWZlcmVuY2VzIHRvIHRoZVxuICogaW5wdXQgbGF5ZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5PExheWVyPn0gbGF5ZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gW2NhY2hlZEtleXNdIC0gYW4gb2JqZWN0IHRvIGtlZXAgYWxyZWFkeSBjYWxjdWxhdGVkIGtleXMuXG4gKiBAcmV0dXJucyB7QXJyYXk8QXJyYXk8TGF5ZXI+Pn1cbiAqL1xuZnVuY3Rpb24gZ3JvdXBCeUxheW91dChsYXllcnMsIGNhY2hlZEtleXMpIHtcbiAgICBjb25zdCBncm91cHMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgY29uc3QgayA9IChjYWNoZWRLZXlzICYmIGNhY2hlZEtleXNbbGF5ZXJzW2ldLmlkXSkgfHwgZ2V0S2V5KGxheWVyc1tpXSk7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgY2FjaGUgaWYgdGhlcmUgaXMgb25lXG4gICAgICAgIGlmIChjYWNoZWRLZXlzKVxuICAgICAgICAgICAgY2FjaGVkS2V5c1tsYXllcnNbaV0uaWRdID0gaztcblxuICAgICAgICBsZXQgZ3JvdXAgPSBncm91cHNba107XG4gICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgIGdyb3VwID0gZ3JvdXBzW2tdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZ3JvdXAucHVzaChsYXllcnNbaV0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBrIGluIGdyb3Vwcykge1xuICAgICAgICByZXN1bHQucHVzaChncm91cHNba10pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyJztcbmltcG9ydCBjcmVhdGVTdHlsZUxheWVyIGZyb20gJy4vY3JlYXRlX3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHt2YWx1ZXN9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgZmVhdHVyZUZpbHRlciBmcm9tICcuLi9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyJztcbmltcG9ydCBncm91cEJ5TGF5b3V0IGZyb20gJy4uL3N0eWxlLXNwZWMvZ3JvdXBfYnlfbGF5b3V0JztcblxuaW1wb3J0IHR5cGUge1R5cGVkU3R5bGVMYXllcn0gZnJvbSAnLi9zdHlsZV9sYXllci90eXBlZF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJDb25maWdzID0geyBbc3RyaW5nXTogTGF5ZXJTcGVjaWZpY2F0aW9uIH07XG5leHBvcnQgdHlwZSBGYW1pbHk8TGF5ZXI6IFR5cGVkU3R5bGVMYXllcj4gPSBBcnJheTxMYXllcj47XG5cbmNsYXNzIFN0eWxlTGF5ZXJJbmRleCB7XG4gICAgZmFtaWxpZXNCeVNvdXJjZTogeyBbc291cmNlOiBzdHJpbmddOiB7IFtzb3VyY2VMYXllcjogc3RyaW5nXTogQXJyYXk8RmFtaWx5PCo+PiB9IH07XG4gICAga2V5Q2FjaGU6IHsgW3NvdXJjZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICBfbGF5ZXJDb25maWdzOiBMYXllckNvbmZpZ3M7XG4gICAgX2xheWVyczogeyBbc3RyaW5nXTogU3R5bGVMYXllciB9O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXJDb25maWdzOiA/QXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPikge1xuICAgICAgICB0aGlzLmtleUNhY2hlID0ge307XG4gICAgICAgIGlmIChsYXllckNvbmZpZ3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShsYXllckNvbmZpZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVwbGFjZShsYXllckNvbmZpZ3M6IEFycmF5PExheWVyU3BlY2lmaWNhdGlvbj4pIHtcbiAgICAgICAgdGhpcy5fbGF5ZXJDb25maWdzID0ge307XG4gICAgICAgIHRoaXMuX2xheWVycyA9IHt9O1xuICAgICAgICB0aGlzLnVwZGF0ZShsYXllckNvbmZpZ3MsIFtdKTtcbiAgICB9XG5cbiAgICB1cGRhdGUobGF5ZXJDb25maWdzOiBBcnJheTxMYXllclNwZWNpZmljYXRpb24+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJDb25maWcgb2YgbGF5ZXJDb25maWdzKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXllckNvbmZpZ3NbbGF5ZXJDb25maWcuaWRdID0gbGF5ZXJDb25maWc7XG5cbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVyQ29uZmlnLmlkXSA9IGNyZWF0ZVN0eWxlTGF5ZXIobGF5ZXJDb25maWcpO1xuICAgICAgICAgICAgbGF5ZXIuX2ZlYXR1cmVGaWx0ZXIgPSBmZWF0dXJlRmlsdGVyKGxheWVyLmZpbHRlcik7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXlDYWNoZVtsYXllckNvbmZpZy5pZF0pXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5Q2FjaGVbbGF5ZXJDb25maWcuaWRdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgcmVtb3ZlZElkcykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5Q2FjaGVbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xheWVyQ29uZmlnc1tpZF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmFtaWxpZXNCeVNvdXJjZSA9IHt9O1xuXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IGdyb3VwQnlMYXlvdXQodmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncyksIHRoaXMua2V5Q2FjaGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJDb25maWdzIG9mIGdyb3Vwcykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJzID0gbGF5ZXJDb25maWdzLm1hcCgobGF5ZXJDb25maWcpID0+IHRoaXMuX2xheWVyc1tsYXllckNvbmZpZy5pZF0pO1xuXG4gICAgICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1swXTtcbiAgICAgICAgICAgIGlmIChsYXllci52aXNpYmlsaXR5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc291cmNlSWQgPSBsYXllci5zb3VyY2UgfHwgJyc7XG4gICAgICAgICAgICBsZXQgc291cmNlR3JvdXAgPSB0aGlzLmZhbWlsaWVzQnlTb3VyY2Vbc291cmNlSWRdO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VHcm91cCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZUdyb3VwID0gdGhpcy5mYW1pbGllc0J5U291cmNlW3NvdXJjZUlkXSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllcklkID0gbGF5ZXIuc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgICAgIGxldCBzb3VyY2VMYXllckZhbWlsaWVzID0gc291cmNlR3JvdXBbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZUxheWVyRmFtaWxpZXMpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckZhbWlsaWVzID0gc291cmNlR3JvdXBbc291cmNlTGF5ZXJJZF0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc291cmNlTGF5ZXJGYW1pbGllcy5wdXNoKGxheWVycyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlTGF5ZXJJbmRleDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7QWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHBvdHBhY2sgZnJvbSAncG90cGFjayc7XG5cbmltcG9ydCB0eXBlIHtHbHlwaE1ldHJpY3MsIFN0eWxlR2x5cGh9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcblxuY29uc3QgcGFkZGluZyA9IDE7XG5cbnR5cGUgUmVjdCA9IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHc6IG51bWJlcixcbiAgICBoOiBudW1iZXJcbn07XG5cbmV4cG9ydCB0eXBlIEdseXBoUG9zaXRpb24gPSB7XG4gICAgcmVjdDogUmVjdCxcbiAgICBtZXRyaWNzOiBHbHlwaE1ldHJpY3Ncbn07XG5cbmV4cG9ydCB0eXBlIEdseXBoUG9zaXRpb25zID0geyBbc3RyaW5nXTogeyBbbnVtYmVyXTogR2x5cGhQb3NpdGlvbiB9IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2x5cGhBdGxhcyB7XG4gICAgaW1hZ2U6IEFscGhhSW1hZ2U7XG4gICAgcG9zaXRpb25zOiBHbHlwaFBvc2l0aW9ucztcblxuICAgIGNvbnN0cnVjdG9yKHN0YWNrczogeyBbc3RyaW5nXTogeyBbbnVtYmVyXTogP1N0eWxlR2x5cGggfSB9KSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCBiaW5zID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBzdGFjayBpbiBzdGFja3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGdseXBocyA9IHN0YWNrc1tzdGFja107XG4gICAgICAgICAgICBjb25zdCBzdGFja1Bvc2l0aW9ucyA9IHBvc2l0aW9uc1tzdGFja10gPSB7fTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiBnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcmMgPSBnbHlwaHNbK2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXNyYyB8fCBzcmMuYml0bWFwLndpZHRoID09PSAwIHx8IHNyYy5iaXRtYXAuaGVpZ2h0ID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJpbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICAgICAgdzogc3JjLmJpdG1hcC53aWR0aCArIDIgKiBwYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgICBoOiBzcmMuYml0bWFwLmhlaWdodCArIDIgKiBwYWRkaW5nXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBiaW5zLnB1c2goYmluKTtcbiAgICAgICAgICAgICAgICBzdGFja1Bvc2l0aW9uc1tpZF0gPSB7cmVjdDogYmluLCBtZXRyaWNzOiBzcmMubWV0cmljc307XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7dywgaH0gPSBwb3RwYWNrKGJpbnMpO1xuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBBbHBoYUltYWdlKHt3aWR0aDogdyB8fCAxLCBoZWlnaHQ6IGggfHwgMX0pO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2sgaW4gc3RhY2tzKSB7XG4gICAgICAgICAgICBjb25zdCBnbHlwaHMgPSBzdGFja3Nbc3RhY2tdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGdseXBocykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNyYyA9IGdseXBoc1sraWRdO1xuICAgICAgICAgICAgICAgIGlmICghc3JjIHx8IHNyYy5iaXRtYXAud2lkdGggPT09IDAgfHwgc3JjLmJpdG1hcC5oZWlnaHQgPT09IDApIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbiA9IHBvc2l0aW9uc1tzdGFja11baWRdLnJlY3Q7XG4gICAgICAgICAgICAgICAgQWxwaGFJbWFnZS5jb3B5KHNyYy5iaXRtYXAsIGltYWdlLCB7eDogMCwgeTogMH0sIHt4OiBiaW4ueCArIHBhZGRpbmcsIHk6IGJpbi55ICsgcGFkZGluZ30sIHNyYy5iaXRtYXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdHbHlwaEF0bGFzJywgR2x5cGhBdGxhcyk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRmVhdHVyZUluZGV4IGZyb20gJy4uL2RhdGEvZmVhdHVyZV9pbmRleCc7XG5cbmltcG9ydCB7cGVyZm9ybVN5bWJvbExheW91dH0gZnJvbSAnLi4vc3ltYm9sL3N5bWJvbF9sYXlvdXQnO1xuaW1wb3J0IHtDb2xsaXNpb25Cb3hBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgRGljdGlvbmFyeUNvZGVyIGZyb20gJy4uL3V0aWwvZGljdGlvbmFyeV9jb2Rlcic7XG5pbXBvcnQgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IExpbmVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuaW1wb3J0IEZpbGxCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvZmlsbF9idWNrZXQnO1xuaW1wb3J0IEZpbGxFeHRydXNpb25CdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0JztcbmltcG9ydCB7d2Fybk9uY2UsIG1hcE9iamVjdCwgdmFsdWVzfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IEltYWdlQXRsYXMgZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCBHbHlwaEF0bGFzIGZyb20gJy4uL3JlbmRlci9nbHlwaF9hdGxhcyc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcblxuaW1wb3J0IHR5cGUge0J1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXJJbmRleCBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcl9pbmRleCc7XG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGh9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJUaWxlUGFyYW1ldGVycyxcbiAgICBXb3JrZXJUaWxlQ2FsbGJhY2ssXG59IGZyb20gJy4uL3NvdXJjZS93b3JrZXJfc291cmNlJztcblxuY2xhc3MgV29ya2VyVGlsZSB7XG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEO1xuICAgIHVpZDogc3RyaW5nO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbjtcbiAgICBjb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW47XG4gICAgcmV0dXJuRGVwZW5kZW5jaWVzOiBib29sZWFuO1xuXG4gICAgc3RhdHVzOiAncGFyc2luZycgfCAnZG9uZSc7XG4gICAgZGF0YTogVmVjdG9yVGlsZTtcbiAgICBjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXk7XG5cbiAgICBhYm9ydDogPygpID0+IHZvaWQ7XG4gICAgcmVsb2FkQ2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaztcbiAgICB2ZWN0b3JUaWxlOiBWZWN0b3JUaWxlO1xuXG4gICAgY29uc3RydWN0b3IocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLnRpbGVJRCA9IG5ldyBPdmVyc2NhbGVkVGlsZUlEKHBhcmFtcy50aWxlSUQub3ZlcnNjYWxlZFosIHBhcmFtcy50aWxlSUQud3JhcCwgcGFyYW1zLnRpbGVJRC5jYW5vbmljYWwueiwgcGFyYW1zLnRpbGVJRC5jYW5vbmljYWwueCwgcGFyYW1zLnRpbGVJRC5jYW5vbmljYWwueSk7XG4gICAgICAgIHRoaXMudWlkID0gcGFyYW1zLnVpZDtcbiAgICAgICAgdGhpcy56b29tID0gcGFyYW1zLnpvb207XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBhcmFtcy5waXhlbFJhdGlvO1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gcGFyYW1zLnRpbGVTaXplO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHBhcmFtcy5zb3VyY2U7XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSB0aGlzLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKTtcbiAgICAgICAgdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMgPSBwYXJhbXMuc2hvd0NvbGxpc2lvbkJveGVzO1xuICAgICAgICB0aGlzLmNvbGxlY3RSZXNvdXJjZVRpbWluZyA9ICEhcGFyYW1zLmNvbGxlY3RSZXNvdXJjZVRpbWluZztcbiAgICAgICAgdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXMgPSAhIXBhcmFtcy5yZXR1cm5EZXBlbmRlbmNpZXM7XG4gICAgfVxuXG4gICAgcGFyc2UoZGF0YTogVmVjdG9yVGlsZSwgbGF5ZXJJbmRleDogU3R5bGVMYXllckluZGV4LCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4sIGFjdG9yOiBBY3RvciwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLnN0YXR1cyA9ICdwYXJzaW5nJztcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcblxuICAgICAgICB0aGlzLmNvbGxpc2lvbkJveEFycmF5ID0gbmV3IENvbGxpc2lvbkJveEFycmF5KCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyQ29kZXIgPSBuZXcgRGljdGlvbmFyeUNvZGVyKE9iamVjdC5rZXlzKGRhdGEubGF5ZXJzKS5zb3J0KCkpO1xuXG4gICAgICAgIGNvbnN0IGZlYXR1cmVJbmRleCA9IG5ldyBGZWF0dXJlSW5kZXgodGhpcy50aWxlSUQpO1xuICAgICAgICBmZWF0dXJlSW5kZXguYnVja2V0TGF5ZXJJRHMgPSBbXTtcblxuICAgICAgICBjb25zdCBidWNrZXRzOiB7W3N0cmluZ106IEJ1Y2tldH0gPSB7fTtcblxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgZmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgaWNvbkRlcGVuZGVuY2llczoge30sXG4gICAgICAgICAgICBwYXR0ZXJuRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgICAgICAgIGdseXBoRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgICAgICAgIGF2YWlsYWJsZUltYWdlc1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGxheWVyRmFtaWxpZXMgPSBsYXllckluZGV4LmZhbWlsaWVzQnlTb3VyY2VbdGhpcy5zb3VyY2VdO1xuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZUxheWVySWQgaW4gbGF5ZXJGYW1pbGllcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSBkYXRhLmxheWVyc1tzb3VyY2VMYXllcklkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNvdXJjZUxheWVyLnZlcnNpb24gPT09IDEpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShgVmVjdG9yIHRpbGUgc291cmNlIFwiJHt0aGlzLnNvdXJjZX1cIiBsYXllciBcIiR7c291cmNlTGF5ZXJJZH1cIiBgICtcbiAgICAgICAgICAgICAgICAgICAgYGRvZXMgbm90IHVzZSB2ZWN0b3IgdGlsZSBzcGVjIHYyIGFuZCB0aGVyZWZvcmUgbWF5IGhhdmUgc29tZSByZW5kZXJpbmcgZXJyb3JzLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllckluZGV4ID0gc291cmNlTGF5ZXJDb2Rlci5lbmNvZGUoc291cmNlTGF5ZXJJZCk7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNvdXJjZUxheWVyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBzb3VyY2VMYXllci5mZWF0dXJlKGluZGV4KTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHtmZWF0dXJlLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZhbWlseSBvZiBsYXllckZhbWlsaWVzW3NvdXJjZUxheWVySWRdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBmYW1pbHlbMF07XG5cbiAgICAgICAgICAgICAgICBhc3NlcnQobGF5ZXIuc291cmNlID09PSB0aGlzLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLm1pbnpvb20gJiYgdGhpcy56b29tIDwgTWF0aC5mbG9vcihsYXllci5taW56b29tKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLm1heHpvb20gJiYgdGhpcy56b29tID49IGxheWVyLm1heHpvb20pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci52aXNpYmlsaXR5ID09PSAnbm9uZScpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVMYXllcnMoZmFtaWx5LCB0aGlzLnpvb20sIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidWNrZXQgPSBidWNrZXRzW2xheWVyLmlkXSA9IGxheWVyLmNyZWF0ZUJ1Y2tldCh7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBmZWF0dXJlSW5kZXguYnVja2V0TGF5ZXJJRHMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBsYXllcnM6IGZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgem9vbTogdGhpcy56b29tLFxuICAgICAgICAgICAgICAgICAgICBwaXhlbFJhdGlvOiB0aGlzLnBpeGVsUmF0aW8sXG4gICAgICAgICAgICAgICAgICAgIG92ZXJzY2FsaW5nOiB0aGlzLm92ZXJzY2FsaW5nLFxuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheTogdGhpcy5jb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHRoaXMuc291cmNlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBidWNrZXQucG9wdWxhdGUoZmVhdHVyZXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGZlYXR1cmVJbmRleC5idWNrZXRMYXllcklEcy5wdXNoKGZhbWlseS5tYXAoKGwpID0+IGwuaWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlcnJvcjogP0Vycm9yO1xuICAgICAgICBsZXQgZ2x5cGhNYXA6ID97W3N0cmluZ106IHtbbnVtYmVyXTogP1N0eWxlR2x5cGh9fTtcbiAgICAgICAgbGV0IGljb25NYXA6ID97W3N0cmluZ106IFN0eWxlSW1hZ2V9O1xuICAgICAgICBsZXQgcGF0dGVybk1hcDogP3tbc3RyaW5nXTogU3R5bGVJbWFnZX07XG5cbiAgICAgICAgY29uc3Qgc3RhY2tzID0gbWFwT2JqZWN0KG9wdGlvbnMuZ2x5cGhEZXBlbmRlbmNpZXMsIChnbHlwaHMpID0+IE9iamVjdC5rZXlzKGdseXBocykubWFwKE51bWJlcikpO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoc3RhY2tzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFjdG9yLnNlbmQoJ2dldEdseXBocycsIHt1aWQ6IHRoaXMudWlkLCBzdGFja3N9LCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgbWF5YmVQcmVwYXJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbHlwaE1hcCA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWNvbnMgPSBPYmplY3Qua2V5cyhvcHRpb25zLmljb25EZXBlbmRlbmNpZXMpO1xuICAgICAgICBpZiAoaWNvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhY3Rvci5zZW5kKCdnZXRJbWFnZXMnLCB7aWNvbnN9LCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBpY29uTWFwID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBtYXliZVByZXBhcmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGljb25NYXAgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gT2JqZWN0LmtleXMob3B0aW9ucy5wYXR0ZXJuRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgaWYgKHBhdHRlcm5zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWN0b3Iuc2VuZCgnZ2V0SW1hZ2VzJywge2ljb25zOiBwYXR0ZXJuc30sIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5NYXAgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIG1heWJlUHJlcGFyZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0dGVybk1hcCA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgbWF5YmVQcmVwYXJlLmNhbGwodGhpcyk7XG5cbiAgICAgICAgZnVuY3Rpb24gbWF5YmVQcmVwYXJlKCkge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2x5cGhNYXAgJiYgaWNvbk1hcCAmJiBwYXR0ZXJuTWFwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2x5cGhBdGxhcyA9IG5ldyBHbHlwaEF0bGFzKGdseXBoTWFwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZUF0bGFzID0gbmV3IEltYWdlQXRsYXMoaWNvbk1hcCwgcGF0dGVybk1hcCk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBidWNrZXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IGJ1Y2tldHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldCBpbnN0YW5jZW9mIFN5bWJvbEJ1Y2tldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVMYXllcnMoYnVja2V0LmxheWVycywgdGhpcy56b29tLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybVN5bWJvbExheW91dChidWNrZXQsIGdseXBoTWFwLCBnbHlwaEF0bGFzLnBvc2l0aW9ucywgaWNvbk1hcCwgaW1hZ2VBdGxhcy5pY29uUG9zaXRpb25zLCB0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVja2V0Lmhhc1BhdHRlcm4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChidWNrZXQgaW5zdGFuY2VvZiBMaW5lQnVja2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0IGluc3RhbmNlb2YgRmlsbEJ1Y2tldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldCBpbnN0YW5jZW9mIEZpbGxFeHRydXNpb25CdWNrZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNhbGN1bGF0ZUxheWVycyhidWNrZXQubGF5ZXJzLCB0aGlzLnpvb20sIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuYWRkRmVhdHVyZXMob3B0aW9ucywgaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gJ2RvbmUnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0czogdmFsdWVzKGJ1Y2tldHMpLmZpbHRlcihiID0+ICFiLmlzRW1wdHkoKSksXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXk6IHRoaXMuY29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgICAgIGdseXBoQXRsYXNJbWFnZTogZ2x5cGhBdGxhcy5pbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdGxhcyxcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1c2VkIGZvciBiZW5jaG1hcmtpbmc6XG4gICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB0aGlzLnJldHVybkRlcGVuZGVuY2llcyA/IGdseXBoTWFwIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaWNvbk1hcDogdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXMgPyBpY29uTWFwIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhQb3NpdGlvbnM6IHRoaXMucmV0dXJuRGVwZW5kZW5jaWVzID8gZ2x5cGhBdGxhcy5wb3NpdGlvbnMgOiBudWxsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlY2FsY3VsYXRlTGF5ZXJzKGxheWVyczogJFJlYWRPbmx5QXJyYXk8U3R5bGVMYXllcj4sIHpvb206IG51bWJlciwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgLy8gTGF5ZXJzIGFyZSBzaGFyZWQgYW5kIG1heSBoYXZlIGJlZW4gdXNlZCBieSBhIFdvcmtlclRpbGUgd2l0aCBhIGRpZmZlcmVudCB6b29tLlxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoem9vbSk7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgbGF5ZXIucmVjYWxjdWxhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdvcmtlclRpbGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnN9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbi8vIFdyYXBzIHBlcmZvcm1hbmNlIHRvIGZhY2lsaXRhdGUgdGVzdGluZ1xuLy8gTm90IGluY29ycG9yYXRlZCBpbnRvIGJyb3dzZXIuanMgYmVjYXVzZSB0aGUgbGF0dGVyIGlzIHBvaXNvbm91cyB3aGVuIHVzZWQgb3V0c2lkZSB0aGUgbWFpbiB0aHJlYWRcbmNvbnN0IHBlcmZvcm1hbmNlRXhpc3RzID0gdHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJztcbmNvbnN0IHdyYXBwZXIgPSB7fTtcblxud3JhcHBlci5nZXRFbnRyaWVzQnlOYW1lID0gKHVybDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKHBlcmZvcm1hbmNlRXhpc3RzICYmIHBlcmZvcm1hbmNlICYmIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUpXG4gICAgICAgIHJldHVybiBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHVybCk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG59O1xuXG53cmFwcGVyLm1hcmsgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKHBlcmZvcm1hbmNlRXhpc3RzICYmIHBlcmZvcm1hbmNlICYmIHBlcmZvcm1hbmNlLm1hcmspXG4gICAgICAgIHJldHVybiBwZXJmb3JtYW5jZS5tYXJrKG5hbWUpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xufTtcblxud3JhcHBlci5tZWFzdXJlID0gKG5hbWU6IHN0cmluZywgc3RhcnRNYXJrOiBzdHJpbmcsIGVuZE1hcms6IHN0cmluZykgPT4ge1xuICAgIGlmIChwZXJmb3JtYW5jZUV4aXN0cyAmJiBwZXJmb3JtYW5jZSAmJiBwZXJmb3JtYW5jZS5tZWFzdXJlKVxuICAgICAgICByZXR1cm4gcGVyZm9ybWFuY2UubWVhc3VyZShuYW1lLCBzdGFydE1hcmssIGVuZE1hcmspO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xufTtcblxud3JhcHBlci5jbGVhck1hcmtzID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmIChwZXJmb3JtYW5jZUV4aXN0cyAmJiBwZXJmb3JtYW5jZSAmJiBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKVxuICAgICAgICByZXR1cm4gcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyhuYW1lKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbn07XG5cbndyYXBwZXIuY2xlYXJNZWFzdXJlcyA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAocGVyZm9ybWFuY2VFeGlzdHMgJiYgcGVyZm9ybWFuY2UgJiYgcGVyZm9ybWFuY2UuY2xlYXJNZWFzdXJlcylcbiAgICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMobmFtZSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFNhZmUgd3JhcHBlciBmb3IgdGhlIHBlcmZvcm1hbmNlIHJlc291cmNlIHRpbWluZyBBUEkgaW4gd2ViIHdvcmtlcnMgd2l0aCBncmFjZWZ1bCBkZWdyYWRhdGlvblxuICpcbiAqIEBwYXJhbSB7UmVxdWVzdFBhcmFtZXRlcnN9IHJlcXVlc3RcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBlcmZvcm1hbmNlIHtcbiAgICBfbWFya3M6IHtzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZywgbWVhc3VyZTogc3RyaW5nfTtcblxuICAgIGNvbnN0cnVjdG9yIChyZXF1ZXN0OiBSZXF1ZXN0UGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLl9tYXJrcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBbcmVxdWVzdC51cmwsICdzdGFydCddLmpvaW4oJyMnKSxcbiAgICAgICAgICAgIGVuZDogW3JlcXVlc3QudXJsLCAnZW5kJ10uam9pbignIycpLFxuICAgICAgICAgICAgbWVhc3VyZTogcmVxdWVzdC51cmwudG9TdHJpbmcoKVxuICAgICAgICB9O1xuXG4gICAgICAgIHdyYXBwZXIubWFyayh0aGlzLl9tYXJrcy5zdGFydCk7XG4gICAgfVxuXG4gICAgZmluaXNoKCkge1xuICAgICAgICB3cmFwcGVyLm1hcmsodGhpcy5fbWFya3MuZW5kKTtcbiAgICAgICAgbGV0IHJlc291cmNlVGltaW5nRGF0YSA9IHdyYXBwZXIuZ2V0RW50cmllc0J5TmFtZSh0aGlzLl9tYXJrcy5tZWFzdXJlKTtcblxuICAgICAgICAvLyBmYWxsYmFjayBpZiB3ZWIgd29ya2VyIGltcGxlbWVudGF0aW9uIG9mIHBlcmYuZ2V0RW50cmllc0J5TmFtZSByZXR1cm5zIGVtcHR5XG4gICAgICAgIGlmIChyZXNvdXJjZVRpbWluZ0RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB3cmFwcGVyLm1lYXN1cmUodGhpcy5fbWFya3MubWVhc3VyZSwgdGhpcy5fbWFya3Muc3RhcnQsIHRoaXMuX21hcmtzLmVuZCk7XG4gICAgICAgICAgICByZXNvdXJjZVRpbWluZ0RhdGEgPSB3cmFwcGVyLmdldEVudHJpZXNCeU5hbWUodGhpcy5fbWFya3MubWVhc3VyZSk7XG5cbiAgICAgICAgICAgIC8vIGNsZWFudXBcbiAgICAgICAgICAgIHdyYXBwZXIuY2xlYXJNYXJrcyh0aGlzLl9tYXJrcy5zdGFydCk7XG4gICAgICAgICAgICB3cmFwcGVyLmNsZWFyTWFya3ModGhpcy5fbWFya3MuZW5kKTtcbiAgICAgICAgICAgIHdyYXBwZXIuY2xlYXJNZWFzdXJlcyh0aGlzLl9tYXJrcy5tZWFzdXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNvdXJjZVRpbWluZ0RhdGE7XG4gICAgfVxufVxuXG53cmFwcGVyLlBlcmZvcm1hbmNlID0gUGVyZm9ybWFuY2U7XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEFycmF5QnVmZmVyfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuXG5pbXBvcnQgdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5pbXBvcnQgUHJvdG9idWYgZnJvbSAncGJmJztcbmltcG9ydCBXb3JrZXJUaWxlIGZyb20gJy4vd29ya2VyX3RpbGUnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgcGVyZm9ybWFuY2UgZnJvbSAnLi4vdXRpbC9wZXJmb3JtYW5jZSc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJTb3VyY2UsXG4gICAgV29ya2VyVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyVGlsZUNhbGxiYWNrLFxuICAgIFRpbGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL3NvdXJjZS93b3JrZXJfc291cmNlJztcblxuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVySW5kZXggZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXJfaW5kZXgnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbmV4cG9ydCB0eXBlIExvYWRWZWN0b3JUaWxlUmVzdWx0ID0ge1xuICAgIHZlY3RvclRpbGU6IFZlY3RvclRpbGU7XG4gICAgcmF3RGF0YTogQXJyYXlCdWZmZXI7XG4gICAgZXhwaXJlcz86IGFueTtcbiAgICBjYWNoZUNvbnRyb2w/OiBhbnk7XG4gICAgcmVzb3VyY2VUaW1pbmc/OiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPjtcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIExvYWRWZWN0b3JEYXRhQ2FsbGJhY2tcbiAqIEBwYXJhbSBlcnJvclxuICogQHBhcmFtIHZlY3RvclRpbGVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCB0eXBlIExvYWRWZWN0b3JEYXRhQ2FsbGJhY2sgPSBDYWxsYmFjazw/TG9hZFZlY3RvclRpbGVSZXN1bHQ+O1xuXG5leHBvcnQgdHlwZSBBYm9ydFZlY3RvckRhdGEgPSAoKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgTG9hZFZlY3RvckRhdGEgPSAocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IExvYWRWZWN0b3JEYXRhQ2FsbGJhY2spID0+ID9BYm9ydFZlY3RvckRhdGE7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZFZlY3RvclRpbGUocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IExvYWRWZWN0b3JEYXRhQ2FsbGJhY2spIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gZ2V0QXJyYXlCdWZmZXIocGFyYW1zLnJlcXVlc3QsIChlcnI6ID9FcnJvciwgZGF0YTogP0FycmF5QnVmZmVyLCBjYWNoZUNvbnRyb2w6ID9zdHJpbmcsIGV4cGlyZXM6ID9zdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgICAgICAgICAgdmVjdG9yVGlsZTogbmV3IHZ0LlZlY3RvclRpbGUobmV3IFByb3RvYnVmKGRhdGEpKSxcbiAgICAgICAgICAgICAgICByYXdEYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgIGNhY2hlQ29udHJvbCxcbiAgICAgICAgICAgICAgICBleHBpcmVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBUaGUge0BsaW5rIFdvcmtlclNvdXJjZX0gaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB7QGxpbmsgVmVjdG9yVGlsZVNvdXJjZX0uXG4gKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIGJlIGVhc2lseSByZXVzZWQgdG8gc3VwcG9ydCBjdXN0b20gc291cmNlIHR5cGVzXG4gKiBmb3IgZGF0YSBmb3JtYXRzIHRoYXQgY2FuIGJlIHBhcnNlZC9jb252ZXJ0ZWQgaW50byBhbiBpbi1tZW1vcnkgVmVjdG9yVGlsZVxuICogcmVwcmVzZW50YXRpb24uICBUbyBkbyBzbywgY3JlYXRlIGl0IHdpdGhcbiAqIGBuZXcgVmVjdG9yVGlsZVdvcmtlclNvdXJjZShhY3Rvciwgc3R5bGVMYXllcnMsIGN1c3RvbUxvYWRWZWN0b3JEYXRhRnVuY3Rpb24pYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZWN0b3JUaWxlV29ya2VyU291cmNlIGltcGxlbWVudHMgV29ya2VyU291cmNlIHtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgbGF5ZXJJbmRleDogU3R5bGVMYXllckluZGV4O1xuICAgIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPjtcbiAgICBsb2FkVmVjdG9yRGF0YTogTG9hZFZlY3RvckRhdGE7XG4gICAgbG9hZGluZzogeyBbc3RyaW5nXTogV29ya2VyVGlsZSB9O1xuICAgIGxvYWRlZDogeyBbc3RyaW5nXTogV29ya2VyVGlsZSB9O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIFtsb2FkVmVjdG9yRGF0YV0gT3B0aW9uYWwgbWV0aG9kIGZvciBjdXN0b20gbG9hZGluZyBvZiBhIFZlY3RvclRpbGVcbiAgICAgKiBvYmplY3QgYmFzZWQgb24gcGFyYW1ldGVycyBwYXNzZWQgZnJvbSB0aGUgbWFpbi10aHJlYWQgU291cmNlLiBTZWVcbiAgICAgKiB7QGxpbmsgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSNsb2FkVGlsZX0uIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseVxuICAgICAqIGxvYWRzIHRoZSBwYmYgYXQgYHBhcmFtcy51cmxgLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGFjdG9yOiBBY3RvciwgbGF5ZXJJbmRleDogU3R5bGVMYXllckluZGV4LCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4sIGxvYWRWZWN0b3JEYXRhOiA/TG9hZFZlY3RvckRhdGEpIHtcbiAgICAgICAgdGhpcy5hY3RvciA9IGFjdG9yO1xuICAgICAgICB0aGlzLmxheWVySW5kZXggPSBsYXllckluZGV4O1xuICAgICAgICB0aGlzLmF2YWlsYWJsZUltYWdlcyA9IGF2YWlsYWJsZUltYWdlcztcbiAgICAgICAgdGhpcy5sb2FkVmVjdG9yRGF0YSA9IGxvYWRWZWN0b3JEYXRhIHx8IGxvYWRWZWN0b3JUaWxlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB7fTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjbG9hZFRpbGV9LiBEZWxlZ2F0ZXMgdG9cbiAgICAgKiB7QGxpbmsgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSNsb2FkVmVjdG9yRGF0YX0gKHdoaWNoIGJ5IGRlZmF1bHQgZXhwZWN0c1xuICAgICAqIGEgYHBhcmFtcy51cmxgIHByb3BlcnR5KSBmb3IgZmV0Y2hpbmcgYW5kIHByb2R1Y2luZyBhIFZlY3RvclRpbGUgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvYWRUaWxlKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgdWlkID0gcGFyYW1zLnVpZDtcblxuICAgICAgICBpZiAoIXRoaXMubG9hZGluZylcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHt9O1xuXG4gICAgICAgIGNvbnN0IHBlcmYgPSAocGFyYW1zICYmIHBhcmFtcy5yZXF1ZXN0ICYmIHBhcmFtcy5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZykgP1xuICAgICAgICAgICAgbmV3IHBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlKHBhcmFtcy5yZXF1ZXN0KSA6IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHdvcmtlclRpbGUgPSB0aGlzLmxvYWRpbmdbdWlkXSA9IG5ldyBXb3JrZXJUaWxlKHBhcmFtcyk7XG4gICAgICAgIHdvcmtlclRpbGUuYWJvcnQgPSB0aGlzLmxvYWRWZWN0b3JEYXRhKHBhcmFtcywgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxvYWRpbmdbdWlkXTtcblxuICAgICAgICAgICAgaWYgKGVyciB8fCAhcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXJUaWxlLnN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZFt1aWRdID0gd29ya2VyVGlsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmF3VGlsZURhdGEgPSByZXNwb25zZS5yYXdEYXRhO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVDb250cm9sID0ge307XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXhwaXJlcykgY2FjaGVDb250cm9sLmV4cGlyZXMgPSByZXNwb25zZS5leHBpcmVzO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbCkgY2FjaGVDb250cm9sLmNhY2hlQ29udHJvbCA9IHJlc3BvbnNlLmNhY2hlQ29udHJvbDtcblxuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VUaW1pbmcgPSB7fTtcbiAgICAgICAgICAgIGlmIChwZXJmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VUaW1pbmdEYXRhID0gcGVyZi5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAvLyBpdCdzIG5lY2Vzc2FyeSB0byBldmFsIHRoZSByZXN1bHQgb2YgZ2V0RW50cmllc0J5TmFtZSgpIGhlcmUgdmlhIHBhcnNlL3N0cmluZ2lmeVxuICAgICAgICAgICAgICAgIC8vIGxhdGUgZXZhbHVhdGlvbiBpbiB0aGUgbWFpbiB0aHJlYWQgY2F1c2VzIFR5cGVFcnJvcjogaWxsZWdhbCBpbnZvY2F0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlVGltaW5nRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VUaW1pbmcucmVzb3VyY2VUaW1pbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc291cmNlVGltaW5nRGF0YSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JrZXJUaWxlLnZlY3RvclRpbGUgPSByZXNwb25zZS52ZWN0b3JUaWxlO1xuICAgICAgICAgICAgd29ya2VyVGlsZS5wYXJzZShyZXNwb25zZS52ZWN0b3JUaWxlLCB0aGlzLmxheWVySW5kZXgsIHRoaXMuYXZhaWxhYmxlSW1hZ2VzLCB0aGlzLmFjdG9yLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyIHx8ICFyZXN1bHQpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuXG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmZXJyaW5nIGEgY29weSBvZiByYXdUaWxlRGF0YSBiZWNhdXNlIHRoZSB3b3JrZXIgbmVlZHMgdG8gcmV0YWluIGl0cyBjb3B5LlxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGV4dGVuZCh7cmF3VGlsZURhdGE6IHJhd1RpbGVEYXRhLnNsaWNlKDApfSwgcmVzdWx0LCBjYWNoZUNvbnRyb2wsIHJlc291cmNlVGltaW5nKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB0aGlzLmxvYWRlZCB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkW3VpZF0gPSB3b3JrZXJUaWxlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjcmVsb2FkVGlsZX0uXG4gICAgICovXG4gICAgcmVsb2FkVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMubG9hZGVkLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZCxcbiAgICAgICAgICAgIHZ0U291cmNlID0gdGhpcztcbiAgICAgICAgaWYgKGxvYWRlZCAmJiBsb2FkZWRbdWlkXSkge1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyVGlsZSA9IGxvYWRlZFt1aWRdO1xuICAgICAgICAgICAgd29ya2VyVGlsZS5zaG93Q29sbGlzaW9uQm94ZXMgPSBwYXJhbXMuc2hvd0NvbGxpc2lvbkJveGVzO1xuXG4gICAgICAgICAgICBjb25zdCBkb25lID0gKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbG9hZENhbGxiYWNrID0gd29ya2VyVGlsZS5yZWxvYWRDYWxsYmFjaztcbiAgICAgICAgICAgICAgICBpZiAocmVsb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHdvcmtlclRpbGUucmVsb2FkQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlclRpbGUucGFyc2Uod29ya2VyVGlsZS52ZWN0b3JUaWxlLCB2dFNvdXJjZS5sYXllckluZGV4LCB0aGlzLmF2YWlsYWJsZUltYWdlcywgdnRTb3VyY2UuYWN0b3IsIHJlbG9hZENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICh3b3JrZXJUaWxlLnN0YXR1cyA9PT0gJ3BhcnNpbmcnKSB7XG4gICAgICAgICAgICAgICAgd29ya2VyVGlsZS5yZWxvYWRDYWxsYmFjayA9IGRvbmU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmtlclRpbGUuc3RhdHVzID09PSAnZG9uZScpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm8gdmVjdG9yIHRpbGUgZGF0YSBvbiB0aGUgaW5pdGlhbCBsb2FkLCBkb24ndCB0cnkgYW5kIHJlLXBhcnNlIHRpbGVcbiAgICAgICAgICAgICAgICBpZiAod29ya2VyVGlsZS52ZWN0b3JUaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlclRpbGUucGFyc2Uod29ya2VyVGlsZS52ZWN0b3JUaWxlLCB0aGlzLmxheWVySW5kZXgsIHRoaXMuYXZhaWxhYmxlSW1hZ2VzLCB0aGlzLmFjdG9yLCBkb25lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyB7QGxpbmsgV29ya2VyU291cmNlI2Fib3J0VGlsZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICogQHBhcmFtIHBhcmFtcy51aWQgVGhlIFVJRCBmb3IgdGhpcyB0aWxlLlxuICAgICAqL1xuICAgIGFib3J0VGlsZShwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGxvYWRpbmcgPSB0aGlzLmxvYWRpbmcsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkO1xuICAgICAgICBpZiAobG9hZGluZyAmJiBsb2FkaW5nW3VpZF0gJiYgbG9hZGluZ1t1aWRdLmFib3J0KSB7XG4gICAgICAgICAgICBsb2FkaW5nW3VpZF0uYWJvcnQoKTtcbiAgICAgICAgICAgIGRlbGV0ZSBsb2FkaW5nW3VpZF07XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjcmVtb3ZlVGlsZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICogQHBhcmFtIHBhcmFtcy51aWQgVGhlIFVJRCBmb3IgdGhpcyB0aWxlLlxuICAgICAqL1xuICAgIHJlbW92ZVRpbGUocGFyYW1zOiBUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLmxvYWRlZCxcbiAgICAgICAgICAgIHVpZCA9IHBhcmFtcy51aWQ7XG4gICAgICAgIGlmIChsb2FkZWQgJiYgbG9hZGVkW3VpZF0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBsb2FkZWRbdWlkXTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yVGlsZVdvcmtlclNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBERU1EYXRhIGZyb20gJy4uL2RhdGEvZGVtX2RhdGEnO1xuXG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJERU1UaWxlUGFyYW1ldGVycyxcbiAgICBXb3JrZXJERU1UaWxlQ2FsbGJhY2ssXG4gICAgVGlsZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi93b3JrZXJfc291cmNlJztcblxuY2xhc3MgUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSB7XG4gICAgYWN0b3I6IEFjdG9yO1xuICAgIGxvYWRlZDoge1tzdHJpbmddOiBERU1EYXRhfTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxvYWRlZCA9IHt9O1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHBhcmFtczogV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJERU1UaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qge3VpZCwgZW5jb2RpbmcsIHJhd0ltYWdlRGF0YX0gPSBwYXJhbXM7XG4gICAgICAgIGNvbnN0IGRlbSA9IG5ldyBERU1EYXRhKHVpZCwgcmF3SW1hZ2VEYXRhLCBlbmNvZGluZyk7XG5cbiAgICAgICAgdGhpcy5sb2FkZWQgPSB0aGlzLmxvYWRlZCB8fCB7fTtcbiAgICAgICAgdGhpcy5sb2FkZWRbdWlkXSA9IGRlbTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZGVtKTtcbiAgICB9XG5cbiAgICByZW1vdmVUaWxlKHBhcmFtczogVGlsZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkO1xuICAgICAgICBpZiAobG9hZGVkICYmIGxvYWRlZFt1aWRdKSB7XG4gICAgICAgICAgICBkZWxldGUgbG9hZGVkW3VpZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlckRFTVRpbGVXb3JrZXJTb3VyY2U7XG4iLCJtb2R1bGUuZXhwb3J0cy5SQURJVVMgPSA2Mzc4MTM3O1xubW9kdWxlLmV4cG9ydHMuRkxBVFRFTklORyA9IDEvMjk4LjI1NzIyMzU2Mztcbm1vZHVsZS5leHBvcnRzLlBPTEFSX1JBRElVUyA9IDYzNTY3NTIuMzE0MjtcbiIsInZhciB3Z3M4NCA9IHJlcXVpcmUoJ3dnczg0Jyk7XG5cbm1vZHVsZS5leHBvcnRzLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5tb2R1bGUuZXhwb3J0cy5yaW5nID0gcmluZ0FyZWE7XG5cbmZ1bmN0aW9uIGdlb21ldHJ5KF8pIHtcbiAgICB2YXIgYXJlYSA9IDAsIGk7XG4gICAgc3dpdGNoIChfLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICByZXR1cm4gcG9seWdvbkFyZWEoXy5jb29yZGluYXRlcyk7XG4gICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgXy5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGFyZWEgKz0gcG9seWdvbkFyZWEoXy5jb29yZGluYXRlc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJlYTtcbiAgICAgICAgY2FzZSAnUG9pbnQnOlxuICAgICAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgY2FzZSAnR2VvbWV0cnlDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfLmdlb21ldHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcmVhICs9IGdlb21ldHJ5KF8uZ2VvbWV0cmllc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJlYTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25BcmVhKGNvb3Jkcykge1xuICAgIHZhciBhcmVhID0gMDtcbiAgICBpZiAoY29vcmRzICYmIGNvb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFyZWEgKz0gTWF0aC5hYnMocmluZ0FyZWEoY29vcmRzWzBdKSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmVhIC09IE1hdGguYWJzKHJpbmdBcmVhKGNvb3Jkc1tpXSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmVhO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgYXBwcm94aW1hdGUgYXJlYSBvZiB0aGUgcG9seWdvbiB3ZXJlIGl0IHByb2plY3RlZCBvbnRvXG4gKiAgICAgdGhlIGVhcnRoLiAgTm90ZSB0aGF0IHRoaXMgYXJlYSB3aWxsIGJlIHBvc2l0aXZlIGlmIHJpbmcgaXMgb3JpZW50ZWRcbiAqICAgICBjbG9ja3dpc2UsIG90aGVyd2lzZSBpdCB3aWxsIGJlIG5lZ2F0aXZlLlxuICpcbiAqIFJlZmVyZW5jZTpcbiAqIFJvYmVydC4gRy4gQ2hhbWJlcmxhaW4gYW5kIFdpbGxpYW0gSC4gRHVxdWV0dGUsIFwiU29tZSBBbGdvcml0aG1zIGZvclxuICogICAgIFBvbHlnb25zIG9uIGEgU3BoZXJlXCIsIEpQTCBQdWJsaWNhdGlvbiAwNy0wMywgSmV0IFByb3B1bHNpb25cbiAqICAgICBMYWJvcmF0b3J5LCBQYXNhZGVuYSwgQ0EsIEp1bmUgMjAwNyBodHRwOi8vdHJzLW5ldy5qcGwubmFzYS5nb3YvZHNwYWNlL2hhbmRsZS8yMDE0LzQwNDA5XG4gKlxuICogUmV0dXJuczpcbiAqIHtmbG9hdH0gVGhlIGFwcHJveGltYXRlIHNpZ25lZCBnZW9kZXNpYyBhcmVhIG9mIHRoZSBwb2x5Z29uIGluIHNxdWFyZVxuICogICAgIG1ldGVycy5cbiAqL1xuXG5mdW5jdGlvbiByaW5nQXJlYShjb29yZHMpIHtcbiAgICB2YXIgcDEsIHAyLCBwMywgbG93ZXJJbmRleCwgbWlkZGxlSW5kZXgsIHVwcGVySW5kZXgsIGksXG4gICAgYXJlYSA9IDAsXG4gICAgY29vcmRzTGVuZ3RoID0gY29vcmRzLmxlbmd0aDtcblxuICAgIGlmIChjb29yZHNMZW5ndGggPiAyKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb29yZHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPT09IGNvb3Jkc0xlbmd0aCAtIDIpIHsvLyBpID0gTi0yXG4gICAgICAgICAgICAgICAgbG93ZXJJbmRleCA9IGNvb3Jkc0xlbmd0aCAtIDI7XG4gICAgICAgICAgICAgICAgbWlkZGxlSW5kZXggPSBjb29yZHNMZW5ndGggLTE7XG4gICAgICAgICAgICAgICAgdXBwZXJJbmRleCA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IGNvb3Jkc0xlbmd0aCAtIDEpIHsvLyBpID0gTi0xXG4gICAgICAgICAgICAgICAgbG93ZXJJbmRleCA9IGNvb3Jkc0xlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgbWlkZGxlSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHVwcGVySW5kZXggPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHsgLy8gaSA9IDAgdG8gTi0zXG4gICAgICAgICAgICAgICAgbG93ZXJJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgbWlkZGxlSW5kZXggPSBpKzE7XG4gICAgICAgICAgICAgICAgdXBwZXJJbmRleCA9IGkrMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAxID0gY29vcmRzW2xvd2VySW5kZXhdO1xuICAgICAgICAgICAgcDIgPSBjb29yZHNbbWlkZGxlSW5kZXhdO1xuICAgICAgICAgICAgcDMgPSBjb29yZHNbdXBwZXJJbmRleF07XG4gICAgICAgICAgICBhcmVhICs9ICggcmFkKHAzWzBdKSAtIHJhZChwMVswXSkgKSAqIE1hdGguc2luKCByYWQocDJbMV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZWEgPSBhcmVhICogd2dzODQuUkFESVVTICogd2dzODQuUkFESVVTIC8gMjtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJlYTtcbn1cblxuZnVuY3Rpb24gcmFkKF8pIHtcbiAgICByZXR1cm4gXyAqIE1hdGguUEkgLyAxODA7XG59IiwidmFyIGdlb2pzb25BcmVhID0gcmVxdWlyZSgnQG1hcGJveC9nZW9qc29uLWFyZWEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXdpbmQ7XG5cbmZ1bmN0aW9uIHJld2luZChnaiwgb3V0ZXIpIHtcbiAgICBzd2l0Y2ggKChnaiAmJiBnai50eXBlKSB8fCBudWxsKSB7XG4gICAgICAgIGNhc2UgJ0ZlYXR1cmVDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIGdqLmZlYXR1cmVzID0gZ2ouZmVhdHVyZXMubWFwKGN1cnJ5T3V0ZXIocmV3aW5kLCBvdXRlcikpO1xuICAgICAgICAgICAgcmV0dXJuIGdqO1xuICAgICAgICBjYXNlICdHZW9tZXRyeUNvbGxlY3Rpb24nOlxuICAgICAgICAgICAgZ2ouZ2VvbWV0cmllcyA9IGdqLmdlb21ldHJpZXMubWFwKGN1cnJ5T3V0ZXIocmV3aW5kLCBvdXRlcikpO1xuICAgICAgICAgICAgcmV0dXJuIGdqO1xuICAgICAgICBjYXNlICdGZWF0dXJlJzpcbiAgICAgICAgICAgIGdqLmdlb21ldHJ5ID0gcmV3aW5kKGdqLmdlb21ldHJ5LCBvdXRlcik7XG4gICAgICAgICAgICByZXR1cm4gZ2o7XG4gICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICAgICAgcmV0dXJuIGNvcnJlY3QoZ2osIG91dGVyKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBnajtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGN1cnJ5T3V0ZXIoYSwgYikge1xuICAgIHJldHVybiBmdW5jdGlvbihfKSB7IHJldHVybiBhKF8sIGIpOyB9O1xufVxuXG5mdW5jdGlvbiBjb3JyZWN0KF8sIG91dGVyKSB7XG4gICAgaWYgKF8udHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIF8uY29vcmRpbmF0ZXMgPSBjb3JyZWN0UmluZ3MoXy5jb29yZGluYXRlcywgb3V0ZXIpO1xuICAgIH0gZWxzZSBpZiAoXy50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICBfLmNvb3JkaW5hdGVzID0gXy5jb29yZGluYXRlcy5tYXAoY3VycnlPdXRlcihjb3JyZWN0UmluZ3MsIG91dGVyKSk7XG4gICAgfVxuICAgIHJldHVybiBfO1xufVxuXG5mdW5jdGlvbiBjb3JyZWN0UmluZ3MoXywgb3V0ZXIpIHtcbiAgICBvdXRlciA9ICEhb3V0ZXI7XG4gICAgX1swXSA9IHdpbmQoX1swXSwgb3V0ZXIpO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgXy5sZW5ndGg7IGkrKykge1xuICAgICAgICBfW2ldID0gd2luZChfW2ldLCAhb3V0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gXztcbn1cblxuZnVuY3Rpb24gd2luZChfLCBkaXIpIHtcbiAgICByZXR1cm4gY3coXykgPT09IGRpciA/IF8gOiBfLnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gY3coXykge1xuICAgIHJldHVybiBnZW9qc29uQXJlYS5yaW5nKF8pID49IDA7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCBtdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5jb25zdCB0b0dlb0pTT04gPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTjtcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuXG4vLyBUaGUgZmVhdHVyZSB0eXBlIHVzZWQgYnkgZ2VvanNvbi12dCBhbmQgc3VwZXJjbHVzdGVyLiBTaG91bGQgYmUgZXh0cmFjdGVkIHRvXG4vLyBnbG9iYWwgdHlwZSBhbmQgdXNlZCBpbiBtb2R1bGUgZGVmaW5pdGlvbnMgZm9yIHRob3NlIHR3byBtb2R1bGVzLlxudHlwZSBGZWF0dXJlID0ge1xuICAgIHR5cGU6IDEsXG4gICAgaWQ6IG1peGVkLFxuICAgIHRhZ3M6IHtbc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn0sXG4gICAgZ2VvbWV0cnk6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LFxufSB8IHtcbiAgICB0eXBlOiAyIHwgMyxcbiAgICBpZDogbWl4ZWQsXG4gICAgdGFnczoge1tzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFufSxcbiAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8W251bWJlciwgbnVtYmVyXT4+LFxufVxuXG5jbGFzcyBGZWF0dXJlV3JhcHBlciBpbXBsZW1lbnRzIFZlY3RvclRpbGVGZWF0dXJlIHtcbiAgICBfZmVhdHVyZTogRmVhdHVyZTtcblxuICAgIGV4dGVudDogbnVtYmVyO1xuICAgIHR5cGU6IDEgfCAyIHwgMztcbiAgICBpZDogbnVtYmVyO1xuICAgIHByb3BlcnRpZXM6IHtbc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn07XG5cbiAgICBjb25zdHJ1Y3RvcihmZWF0dXJlOiBGZWF0dXJlKSB7XG4gICAgICAgIHRoaXMuX2ZlYXR1cmUgPSBmZWF0dXJlO1xuXG4gICAgICAgIHRoaXMuZXh0ZW50ID0gRVhURU5UO1xuICAgICAgICB0aGlzLnR5cGUgPSBmZWF0dXJlLnR5cGU7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IGZlYXR1cmUudGFncztcblxuICAgICAgICAvLyBJZiB0aGUgZmVhdHVyZSBoYXMgYSB0b3AtbGV2ZWwgYGlkYCBwcm9wZXJ0eSwgY29weSBpdCBvdmVyLCBidXQgb25seVxuICAgICAgICAvLyBpZiBpdCBjYW4gYmUgY29lcmNlZCB0byBhbiBpbnRlZ2VyLCBiZWNhdXNlIHRoaXMgd3JhcHBlciBpcyB1c2VkIGZvclxuICAgICAgICAvLyBzZXJpYWxpemluZyBnZW9qc29uIGZlYXR1cmUgZGF0YSBpbnRvIHZlY3RvciB0aWxlIFBCRiBkYXRhLCBhbmQgdGhlXG4gICAgICAgIC8vIHZlY3RvciB0aWxlIHNwZWMgb25seSBzdXBwb3J0cyBpbnRlZ2VyIHZhbHVlcyBmb3IgZmVhdHVyZSBpZHMgLS1cbiAgICAgICAgLy8gYWxsb3dpbmcgbm9uLWludGVnZXIgdmFsdWVzIGhlcmUgcmVzdWx0cyBpbiBhIG5vbi1jb21wbGlhbnQgUEJGXG4gICAgICAgIC8vIHRoYXQgY2F1c2VzIGFuIGV4Y2VwdGlvbiB3aGVuIGl0IGlzIHBhcnNlZCB3aXRoIHZlY3Rvci10aWxlLWpzXG4gICAgICAgIGlmICgnaWQnIGluIGZlYXR1cmUgJiYgIWlzTmFOKGZlYXR1cmUuaWQpKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gcGFyc2VJbnQoZmVhdHVyZS5pZCwgMTApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZEdlb21ldHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fZmVhdHVyZS50eXBlID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB0aGlzLl9mZWF0dXJlLmdlb21ldHJ5KSB7XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkucHVzaChbbmV3IFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgdGhpcy5fZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JpbmcgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UmluZy5wdXNoKG5ldyBQb2ludChwb2ludFswXSwgcG9pbnRbMV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkucHVzaChuZXdSaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvR2VvSlNPTih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0b0dlb0pTT04uY2FsbCh0aGlzLCB4LCB5LCB6KTtcbiAgICB9XG59XG5cbmNsYXNzIEdlb0pTT05XcmFwcGVyIGltcGxlbWVudHMgVmVjdG9yVGlsZSwgVmVjdG9yVGlsZUxheWVyIHtcbiAgICBsYXllcnM6IHtbc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZXh0ZW50OiBudW1iZXI7XG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgX2ZlYXR1cmVzOiBBcnJheTxGZWF0dXJlPjtcblxuICAgIGNvbnN0cnVjdG9yKGZlYXR1cmVzOiBBcnJheTxGZWF0dXJlPikge1xuICAgICAgICB0aGlzLmxheWVycyA9IHsnX2dlb2pzb25UaWxlTGF5ZXInOiB0aGlzfTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgdGhpcy5leHRlbnQgPSBFWFRFTlQ7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gZmVhdHVyZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLl9mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgIH1cblxuICAgIGZlYXR1cmUoaTogbnVtYmVyKTogVmVjdG9yVGlsZUZlYXR1cmUge1xuICAgICAgICByZXR1cm4gbmV3IEZlYXR1cmVXcmFwcGVyKHRoaXMuX2ZlYXR1cmVzW2ldKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlb0pTT05XcmFwcGVyO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknKVxudmFyIFZlY3RvclRpbGVGZWF0dXJlID0gcmVxdWlyZSgnQG1hcGJveC92ZWN0b3ItdGlsZScpLlZlY3RvclRpbGVGZWF0dXJlXG5cbm1vZHVsZS5leHBvcnRzID0gR2VvSlNPTldyYXBwZXJcblxuLy8gY29uZm9ybSB0byB2ZWN0b3J0aWxlIGFwaVxuZnVuY3Rpb24gR2VvSlNPTldyYXBwZXIgKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdGhpcy5mZWF0dXJlcyA9IGZlYXR1cmVzXG4gIHRoaXMubGVuZ3RoID0gZmVhdHVyZXMubGVuZ3RoXG59XG5cbkdlb0pTT05XcmFwcGVyLnByb3RvdHlwZS5mZWF0dXJlID0gZnVuY3Rpb24gKGkpIHtcbiAgcmV0dXJuIG5ldyBGZWF0dXJlV3JhcHBlcih0aGlzLmZlYXR1cmVzW2ldLCB0aGlzLm9wdGlvbnMuZXh0ZW50KVxufVxuXG5mdW5jdGlvbiBGZWF0dXJlV3JhcHBlciAoZmVhdHVyZSwgZXh0ZW50KSB7XG4gIHRoaXMuaWQgPSB0eXBlb2YgZmVhdHVyZS5pZCA9PT0gJ251bWJlcicgPyBmZWF0dXJlLmlkIDogdW5kZWZpbmVkXG4gIHRoaXMudHlwZSA9IGZlYXR1cmUudHlwZVxuICB0aGlzLnJhd0dlb21ldHJ5ID0gZmVhdHVyZS50eXBlID09PSAxID8gW2ZlYXR1cmUuZ2VvbWV0cnldIDogZmVhdHVyZS5nZW9tZXRyeVxuICB0aGlzLnByb3BlcnRpZXMgPSBmZWF0dXJlLnRhZ3NcbiAgdGhpcy5leHRlbnQgPSBleHRlbnQgfHwgNDA5NlxufVxuXG5GZWF0dXJlV3JhcHBlci5wcm90b3R5cGUubG9hZEdlb21ldHJ5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmluZ3MgPSB0aGlzLnJhd0dlb21ldHJ5XG4gIHRoaXMuZ2VvbWV0cnkgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcmluZyA9IHJpbmdzW2ldXG4gICAgdmFyIG5ld1JpbmcgPSBbXVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmluZy5sZW5ndGg7IGorKykge1xuICAgICAgbmV3UmluZy5wdXNoKG5ldyBQb2ludChyaW5nW2pdWzBdLCByaW5nW2pdWzFdKSlcbiAgICB9XG4gICAgdGhpcy5nZW9tZXRyeS5wdXNoKG5ld1JpbmcpXG4gIH1cbiAgcmV0dXJuIHRoaXMuZ2VvbWV0cnlcbn1cblxuRmVhdHVyZVdyYXBwZXIucHJvdG90eXBlLmJib3ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5nZW9tZXRyeSkgdGhpcy5sb2FkR2VvbWV0cnkoKVxuXG4gIHZhciByaW5ncyA9IHRoaXMuZ2VvbWV0cnlcbiAgdmFyIHgxID0gSW5maW5pdHlcbiAgdmFyIHgyID0gLUluZmluaXR5XG4gIHZhciB5MSA9IEluZmluaXR5XG4gIHZhciB5MiA9IC1JbmZpbml0eVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcmluZyA9IHJpbmdzW2ldXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBjb29yZCA9IHJpbmdbal1cblxuICAgICAgeDEgPSBNYXRoLm1pbih4MSwgY29vcmQueClcbiAgICAgIHgyID0gTWF0aC5tYXgoeDIsIGNvb3JkLngpXG4gICAgICB5MSA9IE1hdGgubWluKHkxLCBjb29yZC55KVxuICAgICAgeTIgPSBNYXRoLm1heCh5MiwgY29vcmQueSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW3gxLCB5MSwgeDIsIHkyXVxufVxuXG5GZWF0dXJlV3JhcHBlci5wcm90b3R5cGUudG9HZW9KU09OID0gVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTlxuIiwidmFyIFBiZiA9IHJlcXVpcmUoJ3BiZicpXG52YXIgR2VvSlNPTldyYXBwZXIgPSByZXF1aXJlKCcuL2xpYi9nZW9qc29uX3dyYXBwZXInKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZyb21WZWN0b3JUaWxlSnNcbm1vZHVsZS5leHBvcnRzLmZyb21WZWN0b3JUaWxlSnMgPSBmcm9tVmVjdG9yVGlsZUpzXG5tb2R1bGUuZXhwb3J0cy5mcm9tR2VvanNvblZ0ID0gZnJvbUdlb2pzb25WdFxubW9kdWxlLmV4cG9ydHMuR2VvSlNPTldyYXBwZXIgPSBHZW9KU09OV3JhcHBlclxuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHZlY3Rvci10aWxlLWpzLWNyZWF0ZWQgdGlsZSB0byBwYmZcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGlsZVxuICogQHJldHVybiB7QnVmZmVyfSB1bmNvbXByZXNzZWQsIHBiZi1zZXJpYWxpemVkIHRpbGUgZGF0YVxuICovXG5mdW5jdGlvbiBmcm9tVmVjdG9yVGlsZUpzICh0aWxlKSB7XG4gIHZhciBvdXQgPSBuZXcgUGJmKClcbiAgd3JpdGVUaWxlKHRpbGUsIG91dClcbiAgcmV0dXJuIG91dC5maW5pc2goKVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZWQgYSBnZW9qc29uLXZ0LWNyZWF0ZWQgdGlsZSB0byBwYmYuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGxheWVycyAtIEFuIG9iamVjdCBtYXBwaW5nIGxheWVyIG5hbWVzIHRvIGdlb2pzb24tdnQtY3JlYXRlZCB2ZWN0b3IgdGlsZSBvYmplY3RzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gQW4gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIHZlY3Rvci10aWxlIHNwZWNpZmljYXRpb24gdmVyc2lvbiBhbmQgZXh0ZW50IHRoYXQgd2VyZSB1c2VkIHRvIGNyZWF0ZSBgbGF5ZXJzYC5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy52ZXJzaW9uPTFdIC0gVmVyc2lvbiBvZiB2ZWN0b3ItdGlsZSBzcGVjIHVzZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5leHRlbnQ9NDA5Nl0gLSBFeHRlbnQgb2YgdGhlIHZlY3RvciB0aWxlXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHVuY29tcHJlc3NlZCwgcGJmLXNlcmlhbGl6ZWQgdGlsZSBkYXRhXG4gKi9cbmZ1bmN0aW9uIGZyb21HZW9qc29uVnQgKGxheWVycywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgbCA9IHt9XG4gIGZvciAodmFyIGsgaW4gbGF5ZXJzKSB7XG4gICAgbFtrXSA9IG5ldyBHZW9KU09OV3JhcHBlcihsYXllcnNba10uZmVhdHVyZXMsIG9wdGlvbnMpXG4gICAgbFtrXS5uYW1lID0ga1xuICAgIGxba10udmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvblxuICAgIGxba10uZXh0ZW50ID0gb3B0aW9ucy5leHRlbnRcbiAgfVxuICByZXR1cm4gZnJvbVZlY3RvclRpbGVKcyh7bGF5ZXJzOiBsfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVUaWxlICh0aWxlLCBwYmYpIHtcbiAgZm9yICh2YXIga2V5IGluIHRpbGUubGF5ZXJzKSB7XG4gICAgcGJmLndyaXRlTWVzc2FnZSgzLCB3cml0ZUxheWVyLCB0aWxlLmxheWVyc1trZXldKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlTGF5ZXIgKGxheWVyLCBwYmYpIHtcbiAgcGJmLndyaXRlVmFyaW50RmllbGQoMTUsIGxheWVyLnZlcnNpb24gfHwgMSlcbiAgcGJmLndyaXRlU3RyaW5nRmllbGQoMSwgbGF5ZXIubmFtZSB8fCAnJylcbiAgcGJmLndyaXRlVmFyaW50RmllbGQoNSwgbGF5ZXIuZXh0ZW50IHx8IDQwOTYpXG5cbiAgdmFyIGlcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAga2V5czogW10sXG4gICAgdmFsdWVzOiBbXSxcbiAgICBrZXljYWNoZToge30sXG4gICAgdmFsdWVjYWNoZToge31cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBsYXllci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnRleHQuZmVhdHVyZSA9IGxheWVyLmZlYXR1cmUoaSlcbiAgICBwYmYud3JpdGVNZXNzYWdlKDIsIHdyaXRlRmVhdHVyZSwgY29udGV4dClcbiAgfVxuXG4gIHZhciBrZXlzID0gY29udGV4dC5rZXlzXG4gIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgcGJmLndyaXRlU3RyaW5nRmllbGQoMywga2V5c1tpXSlcbiAgfVxuXG4gIHZhciB2YWx1ZXMgPSBjb250ZXh0LnZhbHVlc1xuICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgcGJmLndyaXRlTWVzc2FnZSg0LCB3cml0ZVZhbHVlLCB2YWx1ZXNbaV0pXG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVGZWF0dXJlIChjb250ZXh0LCBwYmYpIHtcbiAgdmFyIGZlYXR1cmUgPSBjb250ZXh0LmZlYXR1cmVcblxuICBpZiAoZmVhdHVyZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcGJmLndyaXRlVmFyaW50RmllbGQoMSwgZmVhdHVyZS5pZClcbiAgfVxuXG4gIHBiZi53cml0ZU1lc3NhZ2UoMiwgd3JpdGVQcm9wZXJ0aWVzLCBjb250ZXh0KVxuICBwYmYud3JpdGVWYXJpbnRGaWVsZCgzLCBmZWF0dXJlLnR5cGUpXG4gIHBiZi53cml0ZU1lc3NhZ2UoNCwgd3JpdGVHZW9tZXRyeSwgZmVhdHVyZSlcbn1cblxuZnVuY3Rpb24gd3JpdGVQcm9wZXJ0aWVzIChjb250ZXh0LCBwYmYpIHtcbiAgdmFyIGZlYXR1cmUgPSBjb250ZXh0LmZlYXR1cmVcbiAgdmFyIGtleXMgPSBjb250ZXh0LmtleXNcbiAgdmFyIHZhbHVlcyA9IGNvbnRleHQudmFsdWVzXG4gIHZhciBrZXljYWNoZSA9IGNvbnRleHQua2V5Y2FjaGVcbiAgdmFyIHZhbHVlY2FjaGUgPSBjb250ZXh0LnZhbHVlY2FjaGVcblxuICBmb3IgKHZhciBrZXkgaW4gZmVhdHVyZS5wcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGtleUluZGV4ID0ga2V5Y2FjaGVba2V5XVxuICAgIGlmICh0eXBlb2Yga2V5SW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KVxuICAgICAga2V5SW5kZXggPSBrZXlzLmxlbmd0aCAtIDFcbiAgICAgIGtleWNhY2hlW2tleV0gPSBrZXlJbmRleFxuICAgIH1cbiAgICBwYmYud3JpdGVWYXJpbnQoa2V5SW5kZXgpXG5cbiAgICB2YXIgdmFsdWUgPSBmZWF0dXJlLnByb3BlcnRpZXNba2V5XVxuICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlXG4gICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICdib29sZWFuJyAmJiB0eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICB9XG4gICAgdmFyIHZhbHVlS2V5ID0gdHlwZSArICc6JyArIHZhbHVlXG4gICAgdmFyIHZhbHVlSW5kZXggPSB2YWx1ZWNhY2hlW3ZhbHVlS2V5XVxuICAgIGlmICh0eXBlb2YgdmFsdWVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxuICAgICAgdmFsdWVJbmRleCA9IHZhbHVlcy5sZW5ndGggLSAxXG4gICAgICB2YWx1ZWNhY2hlW3ZhbHVlS2V5XSA9IHZhbHVlSW5kZXhcbiAgICB9XG4gICAgcGJmLndyaXRlVmFyaW50KHZhbHVlSW5kZXgpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWFuZCAoY21kLCBsZW5ndGgpIHtcbiAgcmV0dXJuIChsZW5ndGggPDwgMykgKyAoY21kICYgMHg3KVxufVxuXG5mdW5jdGlvbiB6aWd6YWcgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAxKSBeIChudW0gPj4gMzEpXG59XG5cbmZ1bmN0aW9uIHdyaXRlR2VvbWV0cnkgKGZlYXR1cmUsIHBiZikge1xuICB2YXIgZ2VvbWV0cnkgPSBmZWF0dXJlLmxvYWRHZW9tZXRyeSgpXG4gIHZhciB0eXBlID0gZmVhdHVyZS50eXBlXG4gIHZhciB4ID0gMFxuICB2YXIgeSA9IDBcbiAgdmFyIHJpbmdzID0gZ2VvbWV0cnkubGVuZ3RoXG4gIGZvciAodmFyIHIgPSAwOyByIDwgcmluZ3M7IHIrKykge1xuICAgIHZhciByaW5nID0gZ2VvbWV0cnlbcl1cbiAgICB2YXIgY291bnQgPSAxXG4gICAgaWYgKHR5cGUgPT09IDEpIHtcbiAgICAgIGNvdW50ID0gcmluZy5sZW5ndGhcbiAgICB9XG4gICAgcGJmLndyaXRlVmFyaW50KGNvbW1hbmQoMSwgY291bnQpKSAvLyBtb3ZldG9cbiAgICAvLyBkbyBub3Qgd3JpdGUgcG9seWdvbiBjbG9zaW5nIHBhdGggYXMgbGluZXRvXG4gICAgdmFyIGxpbmVDb3VudCA9IHR5cGUgPT09IDMgPyByaW5nLmxlbmd0aCAtIDEgOiByaW5nLmxlbmd0aFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpID09PSAxICYmIHR5cGUgIT09IDEpIHtcbiAgICAgICAgcGJmLndyaXRlVmFyaW50KGNvbW1hbmQoMiwgbGluZUNvdW50IC0gMSkpIC8vIGxpbmV0b1xuICAgICAgfVxuICAgICAgdmFyIGR4ID0gcmluZ1tpXS54IC0geFxuICAgICAgdmFyIGR5ID0gcmluZ1tpXS55IC0geVxuICAgICAgcGJmLndyaXRlVmFyaW50KHppZ3phZyhkeCkpXG4gICAgICBwYmYud3JpdGVWYXJpbnQoemlnemFnKGR5KSlcbiAgICAgIHggKz0gZHhcbiAgICAgIHkgKz0gZHlcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IDMpIHtcbiAgICAgIHBiZi53cml0ZVZhcmludChjb21tYW5kKDcsIDEpKSAvLyBjbG9zZXBhdGhcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVWYWx1ZSAodmFsdWUsIHBiZikge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYmYud3JpdGVTdHJpbmdGaWVsZCgxLCB2YWx1ZSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICBwYmYud3JpdGVCb29sZWFuRmllbGQoNywgdmFsdWUpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodmFsdWUgJSAxICE9PSAwKSB7XG4gICAgICBwYmYud3JpdGVEb3VibGVGaWVsZCgzLCB2YWx1ZSlcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgcGJmLndyaXRlU1ZhcmludEZpZWxkKDYsIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBwYmYud3JpdGVWYXJpbnRGaWVsZCg1LCB2YWx1ZSlcbiAgICB9XG4gIH1cbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbGVmdCwgcmlnaHQsIGRlcHRoKSB7XG4gICAgaWYgKHJpZ2h0IC0gbGVmdCA8PSBub2RlU2l6ZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbSA9IChsZWZ0ICsgcmlnaHQpID4+IDE7XG5cbiAgICBzZWxlY3QoaWRzLCBjb29yZHMsIG0sIGxlZnQsIHJpZ2h0LCBkZXB0aCAlIDIpO1xuXG4gICAgc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbGVmdCwgbSAtIDEsIGRlcHRoICsgMSk7XG4gICAgc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbSArIDEsIHJpZ2h0LCBkZXB0aCArIDEpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3QoaWRzLCBjb29yZHMsIGssIGxlZnQsIHJpZ2h0LCBpbmMpIHtcblxuICAgIHdoaWxlIChyaWdodCA+IGxlZnQpIHtcbiAgICAgICAgaWYgKHJpZ2h0IC0gbGVmdCA+IDYwMCkge1xuICAgICAgICAgICAgY29uc3QgbiA9IHJpZ2h0IC0gbGVmdCArIDE7XG4gICAgICAgICAgICBjb25zdCBtID0gayAtIGxlZnQgKyAxO1xuICAgICAgICAgICAgY29uc3QgeiA9IE1hdGgubG9nKG4pO1xuICAgICAgICAgICAgY29uc3QgcyA9IDAuNSAqIE1hdGguZXhwKDIgKiB6IC8gMyk7XG4gICAgICAgICAgICBjb25zdCBzZCA9IDAuNSAqIE1hdGguc3FydCh6ICogcyAqIChuIC0gcykgLyBuKSAqIChtIC0gbiAvIDIgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLm1heChsZWZ0LCBNYXRoLmZsb29yKGsgLSBtICogcyAvIG4gKyBzZCkpO1xuICAgICAgICAgICAgY29uc3QgbmV3UmlnaHQgPSBNYXRoLm1pbihyaWdodCwgTWF0aC5mbG9vcihrICsgKG4gLSBtKSAqIHMgLyBuICsgc2QpKTtcbiAgICAgICAgICAgIHNlbGVjdChpZHMsIGNvb3JkcywgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGluYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ID0gY29vcmRzWzIgKiBrICsgaW5jXTtcbiAgICAgICAgbGV0IGkgPSBsZWZ0O1xuICAgICAgICBsZXQgaiA9IHJpZ2h0O1xuXG4gICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBsZWZ0LCBrKTtcbiAgICAgICAgaWYgKGNvb3Jkc1syICogcmlnaHQgKyBpbmNdID4gdCkgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGxlZnQsIHJpZ2h0KTtcblxuICAgICAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBpLCBqKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIHdoaWxlIChjb29yZHNbMiAqIGkgKyBpbmNdIDwgdCkgaSsrO1xuICAgICAgICAgICAgd2hpbGUgKGNvb3Jkc1syICogaiArIGluY10gPiB0KSBqLS07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29vcmRzWzIgKiBsZWZ0ICsgaW5jXSA9PT0gdCkgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGxlZnQsIGopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBqLCByaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA8PSBrKSBsZWZ0ID0gaiArIDE7XG4gICAgICAgIGlmIChrIDw9IGopIHJpZ2h0ID0gaiAtIDE7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzd2FwSXRlbShpZHMsIGNvb3JkcywgaSwgaikge1xuICAgIHN3YXAoaWRzLCBpLCBqKTtcbiAgICBzd2FwKGNvb3JkcywgMiAqIGksIDIgKiBqKTtcbiAgICBzd2FwKGNvb3JkcywgMiAqIGkgKyAxLCAyICogaiArIDEpO1xufVxuXG5mdW5jdGlvbiBzd2FwKGFyciwgaSwgaikge1xuICAgIGNvbnN0IHRtcCA9IGFycltpXTtcbiAgICBhcnJbaV0gPSBhcnJbal07XG4gICAgYXJyW2pdID0gdG1wO1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByYW5nZShpZHMsIGNvb3JkcywgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgbm9kZVNpemUpIHtcbiAgICBjb25zdCBzdGFjayA9IFswLCBpZHMubGVuZ3RoIC0gMSwgMF07XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IHgsIHk7XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgIGlmIChyaWdodCAtIGxlZnQgPD0gbm9kZVNpemUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICB4ID0gY29vcmRzWzIgKiBpXTtcbiAgICAgICAgICAgICAgICB5ID0gY29vcmRzWzIgKiBpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKHggPj0gbWluWCAmJiB4IDw9IG1heFggJiYgeSA+PSBtaW5ZICYmIHkgPD0gbWF4WSkgcmVzdWx0LnB1c2goaWRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcblxuICAgICAgICB4ID0gY29vcmRzWzIgKiBtXTtcbiAgICAgICAgeSA9IGNvb3Jkc1syICogbSArIDFdO1xuXG4gICAgICAgIGlmICh4ID49IG1pblggJiYgeCA8PSBtYXhYICYmIHkgPj0gbWluWSAmJiB5IDw9IG1heFkpIHJlc3VsdC5wdXNoKGlkc1ttXSk7XG5cbiAgICAgICAgY29uc3QgbmV4dEF4aXMgPSAoYXhpcyArIDEpICUgMjtcblxuICAgICAgICBpZiAoYXhpcyA9PT0gMCA/IG1pblggPD0geCA6IG1pblkgPD0geSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChsZWZ0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSAtIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aXMgPT09IDAgPyBtYXhYID49IHggOiBtYXhZID49IHkpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSArIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChyaWdodCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5leHRBeGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdpdGhpbihpZHMsIGNvb3JkcywgcXgsIHF5LCByLCBub2RlU2l6ZSkge1xuICAgIGNvbnN0IHN0YWNrID0gWzAsIGlkcy5sZW5ndGggLSAxLCAwXTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCByMiA9IHIgKiByO1xuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBheGlzID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICBpZiAocmlnaHQgLSBsZWZ0IDw9IG5vZGVTaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbGVmdDsgaSA8PSByaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNxRGlzdChjb29yZHNbMiAqIGldLCBjb29yZHNbMiAqIGkgKyAxXSwgcXgsIHF5KSA8PSByMikgcmVzdWx0LnB1c2goaWRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcblxuICAgICAgICBjb25zdCB4ID0gY29vcmRzWzIgKiBtXTtcbiAgICAgICAgY29uc3QgeSA9IGNvb3Jkc1syICogbSArIDFdO1xuXG4gICAgICAgIGlmIChzcURpc3QoeCwgeSwgcXgsIHF5KSA8PSByMikgcmVzdWx0LnB1c2goaWRzW21dKTtcblxuICAgICAgICBjb25zdCBuZXh0QXhpcyA9IChheGlzICsgMSkgJSAyO1xuXG4gICAgICAgIGlmIChheGlzID09PSAwID8gcXggLSByIDw9IHggOiBxeSAtIHIgPD0geSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChsZWZ0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSAtIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aXMgPT09IDAgPyBxeCArIHIgPj0geCA6IHF5ICsgciA+PSB5KSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG0gKyAxKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gocmlnaHQpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBzcURpc3QoYXgsIGF5LCBieCwgYnkpIHtcbiAgICBjb25zdCBkeCA9IGF4IC0gYng7XG4gICAgY29uc3QgZHkgPSBheSAtIGJ5O1xuICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cbiIsIlxuaW1wb3J0IHNvcnQgZnJvbSAnLi9zb3J0JztcbmltcG9ydCByYW5nZSBmcm9tICcuL3JhbmdlJztcbmltcG9ydCB3aXRoaW4gZnJvbSAnLi93aXRoaW4nO1xuXG5jb25zdCBkZWZhdWx0R2V0WCA9IHAgPT4gcFswXTtcbmNvbnN0IGRlZmF1bHRHZXRZID0gcCA9PiBwWzFdO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBLREJ1c2gge1xuICAgIGNvbnN0cnVjdG9yKHBvaW50cywgZ2V0WCA9IGRlZmF1bHRHZXRYLCBnZXRZID0gZGVmYXVsdEdldFksIG5vZGVTaXplID0gNjQsIEFycmF5VHlwZSA9IEZsb2F0NjRBcnJheSkge1xuICAgICAgICB0aGlzLm5vZGVTaXplID0gbm9kZVNpemU7XG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgICAgIGNvbnN0IEluZGV4QXJyYXlUeXBlID0gcG9pbnRzLmxlbmd0aCA8IDY1NTM2ID8gVWludDE2QXJyYXkgOiBVaW50MzJBcnJheTtcblxuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLmlkcyA9IG5ldyBJbmRleEFycmF5VHlwZShwb2ludHMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHMgPSBuZXcgQXJyYXlUeXBlKHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWRzW2ldID0gaTtcbiAgICAgICAgICAgIGNvb3Jkc1syICogaV0gPSBnZXRYKHBvaW50c1tpXSk7XG4gICAgICAgICAgICBjb29yZHNbMiAqIGkgKyAxXSA9IGdldFkocG9pbnRzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvcnQoaWRzLCBjb29yZHMsIG5vZGVTaXplLCAwLCBpZHMubGVuZ3RoIC0gMSwgMCk7XG4gICAgfVxuXG4gICAgcmFuZ2UobWluWCwgbWluWSwgbWF4WCwgbWF4WSkge1xuICAgICAgICByZXR1cm4gcmFuZ2UodGhpcy5pZHMsIHRoaXMuY29vcmRzLCBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB0aGlzLm5vZGVTaXplKTtcbiAgICB9XG5cbiAgICB3aXRoaW4oeCwgeSwgcikge1xuICAgICAgICByZXR1cm4gd2l0aGluKHRoaXMuaWRzLCB0aGlzLmNvb3JkcywgeCwgeSwgciwgdGhpcy5ub2RlU2l6ZSk7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgS0RCdXNoIGZyb20gJ2tkYnVzaCc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG1pblpvb206IDAsICAgLy8gbWluIHpvb20gdG8gZ2VuZXJhdGUgY2x1c3RlcnMgb25cbiAgICBtYXhab29tOiAxNiwgIC8vIG1heCB6b29tIGxldmVsIHRvIGNsdXN0ZXIgdGhlIHBvaW50cyBvblxuICAgIHJhZGl1czogNDAsICAgLy8gY2x1c3RlciByYWRpdXMgaW4gcGl4ZWxzXG4gICAgZXh0ZW50OiA1MTIsICAvLyB0aWxlIGV4dGVudCAocmFkaXVzIGlzIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gaXQpXG4gICAgbm9kZVNpemU6IDY0LCAvLyBzaXplIG9mIHRoZSBLRC10cmVlIGxlYWYgbm9kZSwgYWZmZWN0cyBwZXJmb3JtYW5jZVxuICAgIGxvZzogZmFsc2UsICAgLy8gd2hldGhlciB0byBsb2cgdGltaW5nIGluZm9cblxuICAgIC8vIGEgcmVkdWNlIGZ1bmN0aW9uIGZvciBjYWxjdWxhdGluZyBjdXN0b20gY2x1c3RlciBwcm9wZXJ0aWVzXG4gICAgcmVkdWNlOiBudWxsLCAvLyAoYWNjdW11bGF0ZWQsIHByb3BzKSA9PiB7IGFjY3VtdWxhdGVkLnN1bSArPSBwcm9wcy5zdW07IH1cblxuICAgIC8vIHByb3BlcnRpZXMgdG8gdXNlIGZvciBpbmRpdmlkdWFsIHBvaW50cyB3aGVuIHJ1bm5pbmcgdGhlIHJlZHVjZXJcbiAgICBtYXA6IHByb3BzID0+IHByb3BzIC8vIHByb3BzID0+ICh7c3VtOiBwcm9wcy5teV92YWx1ZX0pXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXBlcmNsdXN0ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUoZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy50cmVlcyA9IG5ldyBBcnJheSh0aGlzLm9wdGlvbnMubWF4Wm9vbSArIDEpO1xuICAgIH1cblxuICAgIGxvYWQocG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IHtsb2csIG1pblpvb20sIG1heFpvb20sIG5vZGVTaXplfSA9IHRoaXMub3B0aW9ucztcblxuICAgICAgICBpZiAobG9nKSBjb25zb2xlLnRpbWUoJ3RvdGFsIHRpbWUnKTtcblxuICAgICAgICBjb25zdCB0aW1lcklkID0gYHByZXBhcmUgJHsgIHBvaW50cy5sZW5ndGggIH0gcG9pbnRzYDtcbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lKHRpbWVySWQpO1xuXG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgICAgIC8vIGdlbmVyYXRlIGEgY2x1c3RlciBvYmplY3QgZm9yIGVhY2ggcG9pbnQgYW5kIGluZGV4IGlucHV0IHBvaW50cyBpbnRvIGEgS0QtdHJlZVxuICAgICAgICBsZXQgY2x1c3RlcnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcG9pbnRzW2ldLmdlb21ldHJ5KSBjb250aW51ZTtcbiAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2goY3JlYXRlUG9pbnRDbHVzdGVyKHBvaW50c1tpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJlZXNbbWF4Wm9vbSArIDFdID0gbmV3IEtEQnVzaChjbHVzdGVycywgZ2V0WCwgZ2V0WSwgbm9kZVNpemUsIEZsb2F0MzJBcnJheSk7XG5cbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lRW5kKHRpbWVySWQpO1xuXG4gICAgICAgIC8vIGNsdXN0ZXIgcG9pbnRzIG9uIG1heCB6b29tLCB0aGVuIGNsdXN0ZXIgdGhlIHJlc3VsdHMgb24gcHJldmlvdXMgem9vbSwgZXRjLjtcbiAgICAgICAgLy8gcmVzdWx0cyBpbiBhIGNsdXN0ZXIgaGllcmFyY2h5IGFjcm9zcyB6b29tIGxldmVsc1xuICAgICAgICBmb3IgKGxldCB6ID0gbWF4Wm9vbTsgeiA+PSBtaW5ab29tOyB6LS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9ICtEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgc2V0IG9mIGNsdXN0ZXJzIGZvciB0aGUgem9vbSBhbmQgaW5kZXggdGhlbSB3aXRoIGEgS0QtdHJlZVxuICAgICAgICAgICAgY2x1c3RlcnMgPSB0aGlzLl9jbHVzdGVyKGNsdXN0ZXJzLCB6KTtcbiAgICAgICAgICAgIHRoaXMudHJlZXNbel0gPSBuZXcgS0RCdXNoKGNsdXN0ZXJzLCBnZXRYLCBnZXRZLCBub2RlU2l6ZSwgRmxvYXQzMkFycmF5KTtcblxuICAgICAgICAgICAgaWYgKGxvZykgY29uc29sZS5sb2coJ3olZDogJWQgY2x1c3RlcnMgaW4gJWRtcycsIHosIGNsdXN0ZXJzLmxlbmd0aCwgK0RhdGUubm93KCkgLSBub3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lRW5kKCd0b3RhbCB0aW1lJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZ2V0Q2x1c3RlcnMoYmJveCwgem9vbSkge1xuICAgICAgICBsZXQgbWluTG5nID0gKChiYm94WzBdICsgMTgwKSAlIDM2MCArIDM2MCkgJSAzNjAgLSAxODA7XG4gICAgICAgIGNvbnN0IG1pbkxhdCA9IE1hdGgubWF4KC05MCwgTWF0aC5taW4oOTAsIGJib3hbMV0pKTtcbiAgICAgICAgbGV0IG1heExuZyA9IGJib3hbMl0gPT09IDE4MCA/IDE4MCA6ICgoYmJveFsyXSArIDE4MCkgJSAzNjAgKyAzNjApICUgMzYwIC0gMTgwO1xuICAgICAgICBjb25zdCBtYXhMYXQgPSBNYXRoLm1heCgtOTAsIE1hdGgubWluKDkwLCBiYm94WzNdKSk7XG5cbiAgICAgICAgaWYgKGJib3hbMl0gLSBiYm94WzBdID49IDM2MCkge1xuICAgICAgICAgICAgbWluTG5nID0gLTE4MDtcbiAgICAgICAgICAgIG1heExuZyA9IDE4MDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5MbmcgPiBtYXhMbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGVhc3Rlcm5IZW0gPSB0aGlzLmdldENsdXN0ZXJzKFttaW5MbmcsIG1pbkxhdCwgMTgwLCBtYXhMYXRdLCB6b29tKTtcbiAgICAgICAgICAgIGNvbnN0IHdlc3Rlcm5IZW0gPSB0aGlzLmdldENsdXN0ZXJzKFstMTgwLCBtaW5MYXQsIG1heExuZywgbWF4TGF0XSwgem9vbSk7XG4gICAgICAgICAgICByZXR1cm4gZWFzdGVybkhlbS5jb25jYXQod2VzdGVybkhlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20oem9vbSldO1xuICAgICAgICBjb25zdCBpZHMgPSB0cmVlLnJhbmdlKGxuZ1gobWluTG5nKSwgbGF0WShtYXhMYXQpLCBsbmdYKG1heExuZyksIGxhdFkobWluTGF0KSk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gdHJlZS5wb2ludHNbaWRdO1xuICAgICAgICAgICAgY2x1c3RlcnMucHVzaChjLm51bVBvaW50cyA/IGdldENsdXN0ZXJKU09OKGMpIDogdGhpcy5wb2ludHNbYy5pbmRleF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbHVzdGVycztcbiAgICB9XG5cbiAgICBnZXRDaGlsZHJlbihjbHVzdGVySWQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luSWQgPSBjbHVzdGVySWQgPj4gNTtcbiAgICAgICAgY29uc3Qgb3JpZ2luWm9vbSA9IGNsdXN0ZXJJZCAlIDMyO1xuICAgICAgICBjb25zdCBlcnJvck1zZyA9ICdObyBjbHVzdGVyIHdpdGggdGhlIHNwZWNpZmllZCBpZC4nO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlc1tvcmlnaW5ab29tXTtcbiAgICAgICAgaWYgKCFpbmRleCkgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcblxuICAgICAgICBjb25zdCBvcmlnaW4gPSBpbmRleC5wb2ludHNbb3JpZ2luSWRdO1xuICAgICAgICBpZiAoIW9yaWdpbikgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcblxuICAgICAgICBjb25zdCByID0gdGhpcy5vcHRpb25zLnJhZGl1cyAvICh0aGlzLm9wdGlvbnMuZXh0ZW50ICogTWF0aC5wb3coMiwgb3JpZ2luWm9vbSAtIDEpKTtcbiAgICAgICAgY29uc3QgaWRzID0gaW5kZXgud2l0aGluKG9yaWdpbi54LCBvcmlnaW4ueSwgcik7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gaW5kZXgucG9pbnRzW2lkXTtcbiAgICAgICAgICAgIGlmIChjLnBhcmVudElkID09PSBjbHVzdGVySWQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGMubnVtUG9pbnRzID8gZ2V0Q2x1c3RlckpTT04oYykgOiB0aGlzLnBvaW50c1tjLmluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG5cbiAgICBnZXRMZWF2ZXMoY2x1c3RlcklkLCBsaW1pdCwgb2Zmc2V0KSB7XG4gICAgICAgIGxpbWl0ID0gbGltaXQgfHwgMTA7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgICAgIGNvbnN0IGxlYXZlcyA9IFtdO1xuICAgICAgICB0aGlzLl9hcHBlbmRMZWF2ZXMobGVhdmVzLCBjbHVzdGVySWQsIGxpbWl0LCBvZmZzZXQsIDApO1xuXG4gICAgICAgIHJldHVybiBsZWF2ZXM7XG4gICAgfVxuXG4gICAgZ2V0VGlsZSh6LCB4LCB5KSB7XG4gICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbSh6KV07XG4gICAgICAgIGNvbnN0IHoyID0gTWF0aC5wb3coMiwgeik7XG4gICAgICAgIGNvbnN0IHtleHRlbnQsIHJhZGl1c30gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHAgPSByYWRpdXMgLyBleHRlbnQ7XG4gICAgICAgIGNvbnN0IHRvcCA9ICh5IC0gcCkgLyB6MjtcbiAgICAgICAgY29uc3QgYm90dG9tID0gKHkgKyAxICsgcCkgLyB6MjtcblxuICAgICAgICBjb25zdCB0aWxlID0ge1xuICAgICAgICAgICAgZmVhdHVyZXM6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fYWRkVGlsZUZlYXR1cmVzKFxuICAgICAgICAgICAgdHJlZS5yYW5nZSgoeCAtIHApIC8gejIsIHRvcCwgKHggKyAxICsgcCkgLyB6MiwgYm90dG9tKSxcbiAgICAgICAgICAgIHRyZWUucG9pbnRzLCB4LCB5LCB6MiwgdGlsZSk7XG5cbiAgICAgICAgaWYgKHggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhcbiAgICAgICAgICAgICAgICB0cmVlLnJhbmdlKDEgLSBwIC8gejIsIHRvcCwgMSwgYm90dG9tKSxcbiAgICAgICAgICAgICAgICB0cmVlLnBvaW50cywgejIsIHksIHoyLCB0aWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCA9PT0gejIgLSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRUaWxlRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgdHJlZS5yYW5nZSgwLCB0b3AsIHAgLyB6MiwgYm90dG9tKSxcbiAgICAgICAgICAgICAgICB0cmVlLnBvaW50cywgLTEsIHksIHoyLCB0aWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aWxlLmZlYXR1cmVzLmxlbmd0aCA/IHRpbGUgOiBudWxsO1xuICAgIH1cblxuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKGNsdXN0ZXJJZCkge1xuICAgICAgICBsZXQgY2x1c3Rlclpvb20gPSAoY2x1c3RlcklkICUgMzIpIC0gMTtcbiAgICAgICAgd2hpbGUgKGNsdXN0ZXJab29tIDw9IHRoaXMub3B0aW9ucy5tYXhab29tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oY2x1c3RlcklkKTtcbiAgICAgICAgICAgIGNsdXN0ZXJab29tKys7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9PSAxKSBicmVhaztcbiAgICAgICAgICAgIGNsdXN0ZXJJZCA9IGNoaWxkcmVuWzBdLnByb3BlcnRpZXMuY2x1c3Rlcl9pZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2x1c3Rlclpvb207XG4gICAgfVxuXG4gICAgX2FwcGVuZExlYXZlcyhyZXN1bHQsIGNsdXN0ZXJJZCwgbGltaXQsIG9mZnNldCwgc2tpcHBlZCkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oY2x1c3RlcklkKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGNoaWxkLnByb3BlcnRpZXM7XG5cbiAgICAgICAgICAgIGlmIChwcm9wcyAmJiBwcm9wcy5jbHVzdGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQgKyBwcm9wcy5wb2ludF9jb3VudCA8PSBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUgd2hvbGUgY2x1c3RlclxuICAgICAgICAgICAgICAgICAgICBza2lwcGVkICs9IHByb3BzLnBvaW50X2NvdW50O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVudGVyIHRoZSBjbHVzdGVyXG4gICAgICAgICAgICAgICAgICAgIHNraXBwZWQgPSB0aGlzLl9hcHBlbmRMZWF2ZXMocmVzdWx0LCBwcm9wcy5jbHVzdGVyX2lkLCBsaW1pdCwgb2Zmc2V0LCBza2lwcGVkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhpdCB0aGUgY2x1c3RlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2tpcHBlZCA8IG9mZnNldCkge1xuICAgICAgICAgICAgICAgIC8vIHNraXAgYSBzaW5nbGUgcG9pbnRcbiAgICAgICAgICAgICAgICBza2lwcGVkKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBhIHNpbmdsZSBwb2ludFxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSBsaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2tpcHBlZDtcbiAgICB9XG5cbiAgICBfYWRkVGlsZUZlYXR1cmVzKGlkcywgcG9pbnRzLCB4LCB5LCB6MiwgdGlsZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgZiA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAxLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBbW1xuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQgKiAoYy54ICogejIgLSB4KSksXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCAqIChjLnkgKiB6MiAtIHkpKVxuICAgICAgICAgICAgICAgIF1dLFxuICAgICAgICAgICAgICAgIHRhZ3M6IGMubnVtUG9pbnRzID8gZ2V0Q2x1c3RlclByb3BlcnRpZXMoYykgOiB0aGlzLnBvaW50c1tjLmluZGV4XS5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaWQgPSBjLm51bVBvaW50cyA/IGMuaWQgOiB0aGlzLnBvaW50c1tjLmluZGV4XS5pZDtcbiAgICAgICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZi5pZCA9IGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGlsZS5mZWF0dXJlcy5wdXNoKGYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2xpbWl0Wm9vbSh6KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMubWluWm9vbSwgTWF0aC5taW4oeiwgdGhpcy5vcHRpb25zLm1heFpvb20gKyAxKSk7XG4gICAgfVxuXG4gICAgX2NsdXN0ZXIocG9pbnRzLCB6b29tKSB7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJzID0gW107XG4gICAgICAgIGNvbnN0IHtyYWRpdXMsIGV4dGVudCwgcmVkdWNlfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgciA9IHJhZGl1cyAvIChleHRlbnQgKiBNYXRoLnBvdygyLCB6b29tKSk7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggcG9pbnRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwb2ludHNbaV07XG4gICAgICAgICAgICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlIHBvaW50IGF0IHRoaXMgem9vbSBsZXZlbCwgc2tpcCBpdFxuICAgICAgICAgICAgaWYgKHAuem9vbSA8PSB6b29tKSBjb250aW51ZTtcbiAgICAgICAgICAgIHAuem9vbSA9IHpvb207XG5cbiAgICAgICAgICAgIC8vIGZpbmQgYWxsIG5lYXJieSBwb2ludHNcbiAgICAgICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVzW3pvb20gKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5laWdoYm9ySWRzID0gdHJlZS53aXRoaW4ocC54LCBwLnksIHIpO1xuXG4gICAgICAgICAgICBsZXQgbnVtUG9pbnRzID0gcC5udW1Qb2ludHMgfHwgMTtcbiAgICAgICAgICAgIGxldCB3eCA9IHAueCAqIG51bVBvaW50cztcbiAgICAgICAgICAgIGxldCB3eSA9IHAueSAqIG51bVBvaW50cztcblxuICAgICAgICAgICAgbGV0IGNsdXN0ZXJQcm9wZXJ0aWVzID0gcmVkdWNlICYmIG51bVBvaW50cyA+IDEgPyB0aGlzLl9tYXAocCwgdHJ1ZSkgOiBudWxsO1xuXG4gICAgICAgICAgICAvLyBlbmNvZGUgYm90aCB6b29tIGFuZCBwb2ludCBpbmRleCBvbiB3aGljaCB0aGUgY2x1c3RlciBvcmlnaW5hdGVkXG4gICAgICAgICAgICBjb25zdCBpZCA9IChpIDw8IDUpICsgKHpvb20gKyAxKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBuZWlnaGJvcklkIG9mIG5laWdoYm9ySWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IHRyZWUucG9pbnRzW25laWdoYm9ySWRdO1xuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgbmVpZ2hib3JzIHRoYXQgYXJlIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgICAgICAgICAgICAgaWYgKGIuem9vbSA8PSB6b29tKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBiLnpvb20gPSB6b29tOyAvLyBzYXZlIHRoZSB6b29tIChzbyBpdCBkb2Vzbid0IGdldCBwcm9jZXNzZWQgdHdpY2UpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBudW1Qb2ludHMyID0gYi5udW1Qb2ludHMgfHwgMTtcbiAgICAgICAgICAgICAgICB3eCArPSBiLnggKiBudW1Qb2ludHMyOyAvLyBhY2N1bXVsYXRlIGNvb3JkaW5hdGVzIGZvciBjYWxjdWxhdGluZyB3ZWlnaHRlZCBjZW50ZXJcbiAgICAgICAgICAgICAgICB3eSArPSBiLnkgKiBudW1Qb2ludHMyO1xuXG4gICAgICAgICAgICAgICAgbnVtUG9pbnRzICs9IG51bVBvaW50czI7XG4gICAgICAgICAgICAgICAgYi5wYXJlbnRJZCA9IGlkO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlZHVjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNsdXN0ZXJQcm9wZXJ0aWVzKSBjbHVzdGVyUHJvcGVydGllcyA9IHRoaXMuX21hcChwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVkdWNlKGNsdXN0ZXJQcm9wZXJ0aWVzLCB0aGlzLl9tYXAoYikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG51bVBvaW50cyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2gocCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHAucGFyZW50SWQgPSBpZDtcbiAgICAgICAgICAgICAgICBjbHVzdGVycy5wdXNoKGNyZWF0ZUNsdXN0ZXIod3ggLyBudW1Qb2ludHMsIHd5IC8gbnVtUG9pbnRzLCBpZCwgbnVtUG9pbnRzLCBjbHVzdGVyUHJvcGVydGllcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsdXN0ZXJzO1xuICAgIH1cblxuICAgIF9tYXAocG9pbnQsIGNsb25lKSB7XG4gICAgICAgIGlmIChwb2ludC5udW1Qb2ludHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZSA/IGV4dGVuZCh7fSwgcG9pbnQucHJvcGVydGllcykgOiBwb2ludC5wcm9wZXJ0aWVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsID0gdGhpcy5wb2ludHNbcG9pbnQuaW5kZXhdLnByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMub3B0aW9ucy5tYXAob3JpZ2luYWwpO1xuICAgICAgICByZXR1cm4gY2xvbmUgJiYgcmVzdWx0ID09PSBvcmlnaW5hbCA/IGV4dGVuZCh7fSwgcmVzdWx0KSA6IHJlc3VsdDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsdXN0ZXIoeCwgeSwgaWQsIG51bVBvaW50cywgcHJvcGVydGllcykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHgsIC8vIHdlaWdodGVkIGNsdXN0ZXIgY2VudGVyXG4gICAgICAgIHksXG4gICAgICAgIHpvb206IEluZmluaXR5LCAvLyB0aGUgbGFzdCB6b29tIHRoZSBjbHVzdGVyIHdhcyBwcm9jZXNzZWQgYXRcbiAgICAgICAgaWQsIC8vIGVuY29kZXMgaW5kZXggb2YgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBjbHVzdGVyIGFuZCBpdHMgem9vbSBsZXZlbFxuICAgICAgICBwYXJlbnRJZDogLTEsIC8vIHBhcmVudCBjbHVzdGVyIGlkXG4gICAgICAgIG51bVBvaW50cyxcbiAgICAgICAgcHJvcGVydGllc1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvaW50Q2x1c3RlcihwLCBpZCkge1xuICAgIGNvbnN0IFt4LCB5XSA9IHAuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogbG5nWCh4KSwgLy8gcHJvamVjdGVkIHBvaW50IGNvb3JkaW5hdGVzXG4gICAgICAgIHk6IGxhdFkoeSksXG4gICAgICAgIHpvb206IEluZmluaXR5LCAvLyB0aGUgbGFzdCB6b29tIHRoZSBwb2ludCB3YXMgcHJvY2Vzc2VkIGF0XG4gICAgICAgIGluZGV4OiBpZCwgLy8gaW5kZXggb2YgdGhlIHNvdXJjZSBmZWF0dXJlIGluIHRoZSBvcmlnaW5hbCBpbnB1dCBhcnJheSxcbiAgICAgICAgcGFyZW50SWQ6IC0xIC8vIHBhcmVudCBjbHVzdGVyIGlkXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2x1c3RlckpTT04oY2x1c3Rlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgICAgaWQ6IGNsdXN0ZXIuaWQsXG4gICAgICAgIHByb3BlcnRpZXM6IGdldENsdXN0ZXJQcm9wZXJ0aWVzKGNsdXN0ZXIpLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbeExuZyhjbHVzdGVyLngpLCB5TGF0KGNsdXN0ZXIueSldXG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbHVzdGVyUHJvcGVydGllcyhjbHVzdGVyKSB7XG4gICAgY29uc3QgY291bnQgPSBjbHVzdGVyLm51bVBvaW50cztcbiAgICBjb25zdCBhYmJyZXYgPVxuICAgICAgICBjb3VudCA+PSAxMDAwMCA/IGAke01hdGgucm91bmQoY291bnQgLyAxMDAwKSAgfWtgIDpcbiAgICAgICAgY291bnQgPj0gMTAwMCA/IGAke01hdGgucm91bmQoY291bnQgLyAxMDApIC8gMTAgIH1rYCA6IGNvdW50O1xuICAgIHJldHVybiBleHRlbmQoZXh0ZW5kKHt9LCBjbHVzdGVyLnByb3BlcnRpZXMpLCB7XG4gICAgICAgIGNsdXN0ZXI6IHRydWUsXG4gICAgICAgIGNsdXN0ZXJfaWQ6IGNsdXN0ZXIuaWQsXG4gICAgICAgIHBvaW50X2NvdW50OiBjb3VudCxcbiAgICAgICAgcG9pbnRfY291bnRfYWJicmV2aWF0ZWQ6IGFiYnJldlxuICAgIH0pO1xufVxuXG4vLyBsb25naXR1ZGUvbGF0aXR1ZGUgdG8gc3BoZXJpY2FsIG1lcmNhdG9yIGluIFswLi4xXSByYW5nZVxuZnVuY3Rpb24gbG5nWChsbmcpIHtcbiAgICByZXR1cm4gbG5nIC8gMzYwICsgMC41O1xufVxuZnVuY3Rpb24gbGF0WShsYXQpIHtcbiAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihsYXQgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICBjb25zdCB5ID0gKDAuNSAtIDAuMjUgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gTWF0aC5QSSk7XG4gICAgcmV0dXJuIHkgPCAwID8gMCA6IHkgPiAxID8gMSA6IHk7XG59XG5cbi8vIHNwaGVyaWNhbCBtZXJjYXRvciB0byBsb25naXR1ZGUvbGF0aXR1ZGVcbmZ1bmN0aW9uIHhMbmcoeCkge1xuICAgIHJldHVybiAoeCAtIDAuNSkgKiAzNjA7XG59XG5mdW5jdGlvbiB5TGF0KHkpIHtcbiAgICBjb25zdCB5MiA9ICgxODAgLSB5ICogMzYwKSAqIE1hdGguUEkgLyAxODA7XG4gICAgcmV0dXJuIDM2MCAqIE1hdGguYXRhbihNYXRoLmV4cCh5MikpIC8gTWF0aC5QSSAtIDkwO1xufVxuXG5mdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjKSB7XG4gICAgZm9yIChjb25zdCBpZCBpbiBzcmMpIGRlc3RbaWRdID0gc3JjW2lkXTtcbiAgICByZXR1cm4gZGVzdDtcbn1cblxuZnVuY3Rpb24gZ2V0WChwKSB7XG4gICAgcmV0dXJuIHAueDtcbn1cbmZ1bmN0aW9uIGdldFkocCkge1xuICAgIHJldHVybiBwLnk7XG59XG4iLCJcbi8vIGNhbGN1bGF0ZSBzaW1wbGlmaWNhdGlvbiBkYXRhIHVzaW5nIG9wdGltaXplZCBEb3VnbGFzLVBldWNrZXIgYWxnb3JpdGhtXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNpbXBsaWZ5KGNvb3JkcywgZmlyc3QsIGxhc3QsIHNxVG9sZXJhbmNlKSB7XG4gICAgdmFyIG1heFNxRGlzdCA9IHNxVG9sZXJhbmNlO1xuICAgIHZhciBtaWQgPSAobGFzdCAtIGZpcnN0KSA+PiAxO1xuICAgIHZhciBtaW5Qb3NUb01pZCA9IGxhc3QgLSBmaXJzdDtcbiAgICB2YXIgaW5kZXg7XG5cbiAgICB2YXIgYXggPSBjb29yZHNbZmlyc3RdO1xuICAgIHZhciBheSA9IGNvb3Jkc1tmaXJzdCArIDFdO1xuICAgIHZhciBieCA9IGNvb3Jkc1tsYXN0XTtcbiAgICB2YXIgYnkgPSBjb29yZHNbbGFzdCArIDFdO1xuXG4gICAgZm9yICh2YXIgaSA9IGZpcnN0ICsgMzsgaSA8IGxhc3Q7IGkgKz0gMykge1xuICAgICAgICB2YXIgZCA9IGdldFNxU2VnRGlzdChjb29yZHNbaV0sIGNvb3Jkc1tpICsgMV0sIGF4LCBheSwgYngsIGJ5KTtcblxuICAgICAgICBpZiAoZCA+IG1heFNxRGlzdCkge1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgbWF4U3FEaXN0ID0gZDtcblxuICAgICAgICB9IGVsc2UgaWYgKGQgPT09IG1heFNxRGlzdCkge1xuICAgICAgICAgICAgLy8gYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB3ZSBjaG9vc2UgYSBwaXZvdCBjbG9zZSB0byB0aGUgbWlkZGxlIG9mIHRoZSBsaXN0LFxuICAgICAgICAgICAgLy8gcmVkdWNpbmcgcmVjdXJzaW9uIGRlcHRoLCBmb3IgY2VydGFpbiBkZWdlbmVyYXRlIGlucHV0c1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9nZW9qc29uLXZ0L2lzc3Vlcy8xMDRcbiAgICAgICAgICAgIHZhciBwb3NUb01pZCA9IE1hdGguYWJzKGkgLSBtaWQpO1xuICAgICAgICAgICAgaWYgKHBvc1RvTWlkIDwgbWluUG9zVG9NaWQpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgbWluUG9zVG9NaWQgPSBwb3NUb01pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXhTcURpc3QgPiBzcVRvbGVyYW5jZSkge1xuICAgICAgICBpZiAoaW5kZXggLSBmaXJzdCA+IDMpIHNpbXBsaWZ5KGNvb3JkcywgZmlyc3QsIGluZGV4LCBzcVRvbGVyYW5jZSk7XG4gICAgICAgIGNvb3Jkc1tpbmRleCArIDJdID0gbWF4U3FEaXN0O1xuICAgICAgICBpZiAobGFzdCAtIGluZGV4ID4gMykgc2ltcGxpZnkoY29vcmRzLCBpbmRleCwgbGFzdCwgc3FUb2xlcmFuY2UpO1xuICAgIH1cbn1cblxuLy8gc3F1YXJlIGRpc3RhbmNlIGZyb20gYSBwb2ludCB0byBhIHNlZ21lbnRcbmZ1bmN0aW9uIGdldFNxU2VnRGlzdChweCwgcHksIHgsIHksIGJ4LCBieSkge1xuXG4gICAgdmFyIGR4ID0gYnggLSB4O1xuICAgIHZhciBkeSA9IGJ5IC0geTtcblxuICAgIGlmIChkeCAhPT0gMCB8fCBkeSAhPT0gMCkge1xuXG4gICAgICAgIHZhciB0ID0gKChweCAtIHgpICogZHggKyAocHkgLSB5KSAqIGR5KSAvIChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICAgICAgaWYgKHQgPiAxKSB7XG4gICAgICAgICAgICB4ID0gYng7XG4gICAgICAgICAgICB5ID0gYnk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0ID4gMCkge1xuICAgICAgICAgICAgeCArPSBkeCAqIHQ7XG4gICAgICAgICAgICB5ICs9IGR5ICogdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGR4ID0gcHggLSB4O1xuICAgIGR5ID0gcHkgLSB5O1xuXG4gICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVGZWF0dXJlKGlkLCB0eXBlLCBnZW9tLCB0YWdzKSB7XG4gICAgdmFyIGZlYXR1cmUgPSB7XG4gICAgICAgIGlkOiB0eXBlb2YgaWQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IGlkLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBnZW9tZXRyeTogZ2VvbSxcbiAgICAgICAgdGFnczogdGFncyxcbiAgICAgICAgbWluWDogSW5maW5pdHksXG4gICAgICAgIG1pblk6IEluZmluaXR5LFxuICAgICAgICBtYXhYOiAtSW5maW5pdHksXG4gICAgICAgIG1heFk6IC1JbmZpbml0eVxuICAgIH07XG4gICAgY2FsY0JCb3goZmVhdHVyZSk7XG4gICAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbmZ1bmN0aW9uIGNhbGNCQm94KGZlYXR1cmUpIHtcbiAgICB2YXIgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnk7XG4gICAgdmFyIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcgfHwgdHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIGNhbGNMaW5lQkJveChmZWF0dXJlLCBnZW9tKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvbHlnb24nIHx8IHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2FsY0xpbmVCQm94KGZlYXR1cmUsIGdlb21baV0pO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdlb21baV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjYWxjTGluZUJCb3goZmVhdHVyZSwgZ2VvbVtpXVtqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGNMaW5lQkJveChmZWF0dXJlLCBnZW9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGZlYXR1cmUubWluWCA9IE1hdGgubWluKGZlYXR1cmUubWluWCwgZ2VvbVtpXSk7XG4gICAgICAgIGZlYXR1cmUubWluWSA9IE1hdGgubWluKGZlYXR1cmUubWluWSwgZ2VvbVtpICsgMV0pO1xuICAgICAgICBmZWF0dXJlLm1heFggPSBNYXRoLm1heChmZWF0dXJlLm1heFgsIGdlb21baV0pO1xuICAgICAgICBmZWF0dXJlLm1heFkgPSBNYXRoLm1heChmZWF0dXJlLm1heFksIGdlb21baSArIDFdKTtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBzaW1wbGlmeSBmcm9tICcuL3NpbXBsaWZ5JztcbmltcG9ydCBjcmVhdGVGZWF0dXJlIGZyb20gJy4vZmVhdHVyZSc7XG5cbi8vIGNvbnZlcnRzIEdlb0pTT04gZmVhdHVyZSBpbnRvIGFuIGludGVybWVkaWF0ZSBwcm9qZWN0ZWQgSlNPTiB2ZWN0b3IgZm9ybWF0IHdpdGggc2ltcGxpZmljYXRpb24gZGF0YVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb252ZXJ0KGRhdGEsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBbXTtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGRhdGEuZmVhdHVyZXNbaV0sIG9wdGlvbnMsIGkpO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmUnKSB7XG4gICAgICAgIGNvbnZlcnRGZWF0dXJlKGZlYXR1cmVzLCBkYXRhLCBvcHRpb25zKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNpbmdsZSBnZW9tZXRyeSBvciBhIGdlb21ldHJ5IGNvbGxlY3Rpb25cbiAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIHtnZW9tZXRyeTogZGF0YX0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlcztcbn1cblxuZnVuY3Rpb24gY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGdlb2pzb24sIG9wdGlvbnMsIGluZGV4KSB7XG4gICAgaWYgKCFnZW9qc29uLmdlb21ldHJ5KSByZXR1cm47XG5cbiAgICB2YXIgY29vcmRzID0gZ2VvanNvbi5nZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICB2YXIgdHlwZSA9IGdlb2pzb24uZ2VvbWV0cnkudHlwZTtcbiAgICB2YXIgdG9sZXJhbmNlID0gTWF0aC5wb3cob3B0aW9ucy50b2xlcmFuY2UgLyAoKDEgPDwgb3B0aW9ucy5tYXhab29tKSAqIG9wdGlvbnMuZXh0ZW50KSwgMik7XG4gICAgdmFyIGdlb21ldHJ5ID0gW107XG4gICAgdmFyIGlkID0gZ2VvanNvbi5pZDtcbiAgICBpZiAob3B0aW9ucy5wcm9tb3RlSWQpIHtcbiAgICAgICAgaWQgPSBnZW9qc29uLnByb3BlcnRpZXNbb3B0aW9ucy5wcm9tb3RlSWRdO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5nZW5lcmF0ZUlkKSB7XG4gICAgICAgIGlkID0gaW5kZXggfHwgMDtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdQb2ludCcpIHtcbiAgICAgICAgY29udmVydFBvaW50KGNvb3JkcywgZ2VvbWV0cnkpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnZlcnRQb2ludChjb29yZHNbaV0sIGdlb21ldHJ5KTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgY29udmVydExpbmUoY29vcmRzLCBnZW9tZXRyeSwgdG9sZXJhbmNlLCBmYWxzZSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmxpbmVNZXRyaWNzKSB7XG4gICAgICAgICAgICAvLyBleHBsb2RlIGludG8gbGluZXN0cmluZ3MgdG8gYmUgYWJsZSB0byB0cmFjayBtZXRyaWNzXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgICAgICBjb252ZXJ0TGluZShjb29yZHNbaV0sIGdlb21ldHJ5LCB0b2xlcmFuY2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKGNyZWF0ZUZlYXR1cmUoaWQsICdMaW5lU3RyaW5nJywgZ2VvbWV0cnksIGdlb2pzb24ucHJvcGVydGllcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udmVydExpbmVzKGNvb3JkcywgZ2VvbWV0cnksIHRvbGVyYW5jZSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICBjb252ZXJ0TGluZXMoY29vcmRzLCBnZW9tZXRyeSwgdG9sZXJhbmNlLCB0cnVlKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHBvbHlnb24gPSBbXTtcbiAgICAgICAgICAgIGNvbnZlcnRMaW5lcyhjb29yZHNbaV0sIHBvbHlnb24sIHRvbGVyYW5jZSwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW9tZXRyeS5wdXNoKHBvbHlnb24pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvanNvbi5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogZ2VvanNvbi5nZW9tZXRyeS5nZW9tZXRyaWVzW2ldLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGdlb2pzb24ucHJvcGVydGllc1xuICAgICAgICAgICAgfSwgb3B0aW9ucywgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgZmVhdHVyZXMucHVzaChjcmVhdGVGZWF0dXJlKGlkLCB0eXBlLCBnZW9tZXRyeSwgZ2VvanNvbi5wcm9wZXJ0aWVzKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQb2ludChjb29yZHMsIG91dCkge1xuICAgIG91dC5wdXNoKHByb2plY3RYKGNvb3Jkc1swXSkpO1xuICAgIG91dC5wdXNoKHByb2plY3RZKGNvb3Jkc1sxXSkpO1xuICAgIG91dC5wdXNoKDApO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0TGluZShyaW5nLCBvdXQsIHRvbGVyYW5jZSwgaXNQb2x5Z29uKSB7XG4gICAgdmFyIHgwLCB5MDtcbiAgICB2YXIgc2l6ZSA9IDA7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHggPSBwcm9qZWN0WChyaW5nW2pdWzBdKTtcbiAgICAgICAgdmFyIHkgPSBwcm9qZWN0WShyaW5nW2pdWzFdKTtcblxuICAgICAgICBvdXQucHVzaCh4KTtcbiAgICAgICAgb3V0LnB1c2goeSk7XG4gICAgICAgIG91dC5wdXNoKDApO1xuXG4gICAgICAgIGlmIChqID4gMCkge1xuICAgICAgICAgICAgaWYgKGlzUG9seWdvbikge1xuICAgICAgICAgICAgICAgIHNpemUgKz0gKHgwICogeSAtIHggKiB5MCkgLyAyOyAvLyBhcmVhXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpemUgKz0gTWF0aC5zcXJ0KE1hdGgucG93KHggLSB4MCwgMikgKyBNYXRoLnBvdyh5IC0geTAsIDIpKTsgLy8gbGVuZ3RoXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeDAgPSB4O1xuICAgICAgICB5MCA9IHk7XG4gICAgfVxuXG4gICAgdmFyIGxhc3QgPSBvdXQubGVuZ3RoIC0gMztcbiAgICBvdXRbMl0gPSAxO1xuICAgIHNpbXBsaWZ5KG91dCwgMCwgbGFzdCwgdG9sZXJhbmNlKTtcbiAgICBvdXRbbGFzdCArIDJdID0gMTtcblxuICAgIG91dC5zaXplID0gTWF0aC5hYnMoc2l6ZSk7XG4gICAgb3V0LnN0YXJ0ID0gMDtcbiAgICBvdXQuZW5kID0gb3V0LnNpemU7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRMaW5lcyhyaW5ncywgb3V0LCB0b2xlcmFuY2UsIGlzUG9seWdvbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGdlb20gPSBbXTtcbiAgICAgICAgY29udmVydExpbmUocmluZ3NbaV0sIGdlb20sIHRvbGVyYW5jZSwgaXNQb2x5Z29uKTtcbiAgICAgICAgb3V0LnB1c2goZ2VvbSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcm9qZWN0WCh4KSB7XG4gICAgcmV0dXJuIHggLyAzNjAgKyAwLjU7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RZKHkpIHtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oeSAqIE1hdGguUEkgLyAxODApO1xuICAgIHZhciB5MiA9IDAuNSAtIDAuMjUgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gTWF0aC5QSTtcbiAgICByZXR1cm4geTIgPCAwID8gMCA6IHkyID4gMSA/IDEgOiB5Mjtcbn1cbiIsIlxuaW1wb3J0IGNyZWF0ZUZlYXR1cmUgZnJvbSAnLi9mZWF0dXJlJztcblxuLyogY2xpcCBmZWF0dXJlcyBiZXR3ZWVuIHR3byBheGlzLXBhcmFsbGVsIGxpbmVzOlxuICogICAgIHwgICAgICAgIHxcbiAqICBfX198X19fICAgICB8ICAgICAvXG4gKiAvICAgfCAgIFxcX19fX3xfX19fL1xuICogICAgIHwgICAgICAgIHxcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjbGlwKGZlYXR1cmVzLCBzY2FsZSwgazEsIGsyLCBheGlzLCBtaW5BbGwsIG1heEFsbCwgb3B0aW9ucykge1xuXG4gICAgazEgLz0gc2NhbGU7XG4gICAgazIgLz0gc2NhbGU7XG5cbiAgICBpZiAobWluQWxsID49IGsxICYmIG1heEFsbCA8IGsyKSByZXR1cm4gZmVhdHVyZXM7IC8vIHRyaXZpYWwgYWNjZXB0XG4gICAgZWxzZSBpZiAobWF4QWxsIDwgazEgfHwgbWluQWxsID49IGsyKSByZXR1cm4gbnVsbDsgLy8gdHJpdmlhbCByZWplY3RcblxuICAgIHZhciBjbGlwcGVkID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlc1tpXTtcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gZmVhdHVyZS5nZW9tZXRyeTtcbiAgICAgICAgdmFyIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgdmFyIG1pbiA9IGF4aXMgPT09IDAgPyBmZWF0dXJlLm1pblggOiBmZWF0dXJlLm1pblk7XG4gICAgICAgIHZhciBtYXggPSBheGlzID09PSAwID8gZmVhdHVyZS5tYXhYIDogZmVhdHVyZS5tYXhZO1xuXG4gICAgICAgIGlmIChtaW4gPj0gazEgJiYgbWF4IDwgazIpIHsgLy8gdHJpdmlhbCBhY2NlcHRcbiAgICAgICAgICAgIGNsaXBwZWQucHVzaChmZWF0dXJlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG1heCA8IGsxIHx8IG1pbiA+PSBrMikgeyAvLyB0cml2aWFsIHJlamVjdFxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV3R2VvbWV0cnkgPSBbXTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgICAgIGNsaXBQb2ludHMoZ2VvbWV0cnksIG5ld0dlb21ldHJ5LCBrMSwgazIsIGF4aXMpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICBjbGlwTGluZShnZW9tZXRyeSwgbmV3R2VvbWV0cnksIGsxLCBrMiwgYXhpcywgZmFsc2UsIG9wdGlvbnMubGluZU1ldHJpY3MpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgIGNsaXBMaW5lcyhnZW9tZXRyeSwgbmV3R2VvbWV0cnksIGsxLCBrMiwgYXhpcywgZmFsc2UpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgICAgICBjbGlwTGluZXMoZ2VvbWV0cnksIG5ld0dlb21ldHJ5LCBrMSwgazIsIGF4aXMsIHRydWUpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9seWdvbiA9IFtdO1xuICAgICAgICAgICAgICAgIGNsaXBMaW5lcyhnZW9tZXRyeVtqXSwgcG9seWdvbiwgazEsIGsyLCBheGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seWdvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3R2VvbWV0cnkubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW5lTWV0cmljcyAmJiB0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbmV3R2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpcHBlZC5wdXNoKGNyZWF0ZUZlYXR1cmUoZmVhdHVyZS5pZCwgdHlwZSwgbmV3R2VvbWV0cnlbal0sIGZlYXR1cmUudGFncykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChuZXdHZW9tZXRyeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdMaW5lU3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBuZXdHZW9tZXRyeVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gJ011bHRpTGluZVN0cmluZyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgdHlwZSA9IG5ld0dlb21ldHJ5Lmxlbmd0aCA9PT0gMyA/ICdQb2ludCcgOiAnTXVsdGlQb2ludCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsaXBwZWQucHVzaChjcmVhdGVGZWF0dXJlKGZlYXR1cmUuaWQsIHR5cGUsIG5ld0dlb21ldHJ5LCBmZWF0dXJlLnRhZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGlwcGVkLmxlbmd0aCA/IGNsaXBwZWQgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBjbGlwUG9pbnRzKGdlb20sIG5ld0dlb20sIGsxLCBrMiwgYXhpcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB2YXIgYSA9IGdlb21baSArIGF4aXNdO1xuXG4gICAgICAgIGlmIChhID49IGsxICYmIGEgPD0gazIpIHtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChnZW9tW2ldKTtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChnZW9tW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXdHZW9tLnB1c2goZ2VvbVtpICsgMl0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjbGlwTGluZShnZW9tLCBuZXdHZW9tLCBrMSwgazIsIGF4aXMsIGlzUG9seWdvbiwgdHJhY2tNZXRyaWNzKSB7XG5cbiAgICB2YXIgc2xpY2UgPSBuZXdTbGljZShnZW9tKTtcbiAgICB2YXIgaW50ZXJzZWN0ID0gYXhpcyA9PT0gMCA/IGludGVyc2VjdFggOiBpbnRlcnNlY3RZO1xuICAgIHZhciBsZW4gPSBnZW9tLnN0YXJ0O1xuICAgIHZhciBzZWdMZW4sIHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoIC0gMzsgaSArPSAzKSB7XG4gICAgICAgIHZhciBheCA9IGdlb21baV07XG4gICAgICAgIHZhciBheSA9IGdlb21baSArIDFdO1xuICAgICAgICB2YXIgYXogPSBnZW9tW2kgKyAyXTtcbiAgICAgICAgdmFyIGJ4ID0gZ2VvbVtpICsgM107XG4gICAgICAgIHZhciBieSA9IGdlb21baSArIDRdO1xuICAgICAgICB2YXIgYSA9IGF4aXMgPT09IDAgPyBheCA6IGF5O1xuICAgICAgICB2YXIgYiA9IGF4aXMgPT09IDAgPyBieCA6IGJ5O1xuICAgICAgICB2YXIgZXhpdGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2VnTGVuID0gTWF0aC5zcXJ0KE1hdGgucG93KGF4IC0gYngsIDIpICsgTWF0aC5wb3coYXkgLSBieSwgMikpO1xuXG4gICAgICAgIGlmIChhIDwgazEpIHtcbiAgICAgICAgICAgIC8vIC0tLXwtLT4gIHwgKGxpbmUgZW50ZXJzIHRoZSBjbGlwIHJlZ2lvbiBmcm9tIHRoZSBsZWZ0KVxuICAgICAgICAgICAgaWYgKGIgPiBrMSkge1xuICAgICAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMSk7XG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2Uuc3RhcnQgPSBsZW4gKyBzZWdMZW4gKiB0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGEgPiBrMikge1xuICAgICAgICAgICAgLy8gfCAgPC0tfC0tLSAobGluZSBlbnRlcnMgdGhlIGNsaXAgcmVnaW9uIGZyb20gdGhlIHJpZ2h0KVxuICAgICAgICAgICAgaWYgKGIgPCBrMikge1xuICAgICAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMik7XG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2Uuc3RhcnQgPSBsZW4gKyBzZWdMZW4gKiB0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWRkUG9pbnQoc2xpY2UsIGF4LCBheSwgYXopO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiIDwgazEgJiYgYSA+PSBrMSkge1xuICAgICAgICAgICAgLy8gPC0tfC0tLSAgfCBvciA8LS18LS0tLS18LS0tIChsaW5lIGV4aXRzIHRoZSBjbGlwIHJlZ2lvbiBvbiB0aGUgbGVmdClcbiAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMSk7XG4gICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiID4gazIgJiYgYSA8PSBrMikge1xuICAgICAgICAgICAgLy8gfCAgLS0tfC0tPiBvciAtLS18LS0tLS18LS0+IChsaW5lIGV4aXRzIHRoZSBjbGlwIHJlZ2lvbiBvbiB0aGUgcmlnaHQpXG4gICAgICAgICAgICB0ID0gaW50ZXJzZWN0KHNsaWNlLCBheCwgYXksIGJ4LCBieSwgazIpO1xuICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNQb2x5Z29uICYmIGV4aXRlZCkge1xuICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2UuZW5kID0gbGVuICsgc2VnTGVuICogdDtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChzbGljZSk7XG4gICAgICAgICAgICBzbGljZSA9IG5ld1NsaWNlKGdlb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgbGVuICs9IHNlZ0xlbjtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGxhc3QgcG9pbnRcbiAgICB2YXIgbGFzdCA9IGdlb20ubGVuZ3RoIC0gMztcbiAgICBheCA9IGdlb21bbGFzdF07XG4gICAgYXkgPSBnZW9tW2xhc3QgKyAxXTtcbiAgICBheiA9IGdlb21bbGFzdCArIDJdO1xuICAgIGEgPSBheGlzID09PSAwID8gYXggOiBheTtcbiAgICBpZiAoYSA+PSBrMSAmJiBhIDw9IGsyKSBhZGRQb2ludChzbGljZSwgYXgsIGF5LCBheik7XG5cbiAgICAvLyBjbG9zZSB0aGUgcG9seWdvbiBpZiBpdHMgZW5kcG9pbnRzIGFyZSBub3QgdGhlIHNhbWUgYWZ0ZXIgY2xpcHBpbmdcbiAgICBsYXN0ID0gc2xpY2UubGVuZ3RoIC0gMztcbiAgICBpZiAoaXNQb2x5Z29uICYmIGxhc3QgPj0gMyAmJiAoc2xpY2VbbGFzdF0gIT09IHNsaWNlWzBdIHx8IHNsaWNlW2xhc3QgKyAxXSAhPT0gc2xpY2VbMV0pKSB7XG4gICAgICAgIGFkZFBvaW50KHNsaWNlLCBzbGljZVswXSwgc2xpY2VbMV0sIHNsaWNlWzJdKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGZpbmFsIHNsaWNlXG4gICAgaWYgKHNsaWNlLmxlbmd0aCkge1xuICAgICAgICBuZXdHZW9tLnB1c2goc2xpY2UpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbmV3U2xpY2UobGluZSkge1xuICAgIHZhciBzbGljZSA9IFtdO1xuICAgIHNsaWNlLnNpemUgPSBsaW5lLnNpemU7XG4gICAgc2xpY2Uuc3RhcnQgPSBsaW5lLnN0YXJ0O1xuICAgIHNsaWNlLmVuZCA9IGxpbmUuZW5kO1xuICAgIHJldHVybiBzbGljZTtcbn1cblxuZnVuY3Rpb24gY2xpcExpbmVzKGdlb20sIG5ld0dlb20sIGsxLCBrMiwgYXhpcywgaXNQb2x5Z29uKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNsaXBMaW5lKGdlb21baV0sIG5ld0dlb20sIGsxLCBrMiwgYXhpcywgaXNQb2x5Z29uLCBmYWxzZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRQb2ludChvdXQsIHgsIHksIHopIHtcbiAgICBvdXQucHVzaCh4KTtcbiAgICBvdXQucHVzaCh5KTtcbiAgICBvdXQucHVzaCh6KTtcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0WChvdXQsIGF4LCBheSwgYngsIGJ5LCB4KSB7XG4gICAgdmFyIHQgPSAoeCAtIGF4KSAvIChieCAtIGF4KTtcbiAgICBvdXQucHVzaCh4KTtcbiAgICBvdXQucHVzaChheSArIChieSAtIGF5KSAqIHQpO1xuICAgIG91dC5wdXNoKDEpO1xuICAgIHJldHVybiB0O1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3RZKG91dCwgYXgsIGF5LCBieCwgYnksIHkpIHtcbiAgICB2YXIgdCA9ICh5IC0gYXkpIC8gKGJ5IC0gYXkpO1xuICAgIG91dC5wdXNoKGF4ICsgKGJ4IC0gYXgpICogdCk7XG4gICAgb3V0LnB1c2goeSk7XG4gICAgb3V0LnB1c2goMSk7XG4gICAgcmV0dXJuIHQ7XG59XG4iLCJcbmltcG9ydCBjbGlwIGZyb20gJy4vY2xpcCc7XG5pbXBvcnQgY3JlYXRlRmVhdHVyZSBmcm9tICcuL2ZlYXR1cmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3cmFwKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG9wdGlvbnMuYnVmZmVyIC8gb3B0aW9ucy5leHRlbnQ7XG4gICAgdmFyIG1lcmdlZCA9IGZlYXR1cmVzO1xuICAgIHZhciBsZWZ0ICA9IGNsaXAoZmVhdHVyZXMsIDEsIC0xIC0gYnVmZmVyLCBidWZmZXIsICAgICAwLCAtMSwgMiwgb3B0aW9ucyk7IC8vIGxlZnQgd29ybGQgY29weVxuICAgIHZhciByaWdodCA9IGNsaXAoZmVhdHVyZXMsIDEsICAxIC0gYnVmZmVyLCAyICsgYnVmZmVyLCAwLCAtMSwgMiwgb3B0aW9ucyk7IC8vIHJpZ2h0IHdvcmxkIGNvcHlcblxuICAgIGlmIChsZWZ0IHx8IHJpZ2h0KSB7XG4gICAgICAgIG1lcmdlZCA9IGNsaXAoZmVhdHVyZXMsIDEsIC1idWZmZXIsIDEgKyBidWZmZXIsIDAsIC0xLCAyLCBvcHRpb25zKSB8fCBbXTsgLy8gY2VudGVyIHdvcmxkIGNvcHlcblxuICAgICAgICBpZiAobGVmdCkgbWVyZ2VkID0gc2hpZnRGZWF0dXJlQ29vcmRzKGxlZnQsIDEpLmNvbmNhdChtZXJnZWQpOyAvLyBtZXJnZSBsZWZ0IGludG8gY2VudGVyXG4gICAgICAgIGlmIChyaWdodCkgbWVyZ2VkID0gbWVyZ2VkLmNvbmNhdChzaGlmdEZlYXR1cmVDb29yZHMocmlnaHQsIC0xKSk7IC8vIG1lcmdlIHJpZ2h0IGludG8gY2VudGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZnVuY3Rpb24gc2hpZnRGZWF0dXJlQ29vcmRzKGZlYXR1cmVzLCBvZmZzZXQpIHtcbiAgICB2YXIgbmV3RmVhdHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlc1tpXSxcbiAgICAgICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgdmFyIG5ld0dlb21ldHJ5O1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50JyB8fCB0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeSwgb2Zmc2V0KTtcblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmVhdHVyZS5nZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5ld0dlb21ldHJ5LnB1c2goc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeVtqXSwgb2Zmc2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gW107XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZmVhdHVyZS5nZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBuZXdQb2x5Z29uID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmZWF0dXJlLmdlb21ldHJ5W2pdLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BvbHlnb24ucHVzaChzaGlmdENvb3JkcyhmZWF0dXJlLmdlb21ldHJ5W2pdW2tdLCBvZmZzZXQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkucHVzaChuZXdQb2x5Z29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5ld0ZlYXR1cmVzLnB1c2goY3JlYXRlRmVhdHVyZShmZWF0dXJlLmlkLCB0eXBlLCBuZXdHZW9tZXRyeSwgZmVhdHVyZS50YWdzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZlYXR1cmVzO1xufVxuXG5mdW5jdGlvbiBzaGlmdENvb3Jkcyhwb2ludHMsIG9mZnNldCkge1xuICAgIHZhciBuZXdQb2ludHMgPSBbXTtcbiAgICBuZXdQb2ludHMuc2l6ZSA9IHBvaW50cy5zaXplO1xuXG4gICAgaWYgKHBvaW50cy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1BvaW50cy5zdGFydCA9IHBvaW50cy5zdGFydDtcbiAgICAgICAgbmV3UG9pbnRzLmVuZCA9IHBvaW50cy5lbmQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgbmV3UG9pbnRzLnB1c2gocG9pbnRzW2ldICsgb2Zmc2V0LCBwb2ludHNbaSArIDFdLCBwb2ludHNbaSArIDJdKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1BvaW50cztcbn1cbiIsIlxuLy8gVHJhbnNmb3JtcyB0aGUgY29vcmRpbmF0ZXMgb2YgZWFjaCBmZWF0dXJlIGluIHRoZSBnaXZlbiB0aWxlIGZyb21cbi8vIG1lcmNhdG9yLXByb2plY3RlZCBzcGFjZSBpbnRvIChleHRlbnQgeCBleHRlbnQpIHRpbGUgc3BhY2UuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1UaWxlKHRpbGUsIGV4dGVudCkge1xuICAgIGlmICh0aWxlLnRyYW5zZm9ybWVkKSByZXR1cm4gdGlsZTtcblxuICAgIHZhciB6MiA9IDEgPDwgdGlsZS56LFxuICAgICAgICB0eCA9IHRpbGUueCxcbiAgICAgICAgdHkgPSB0aWxlLnksXG4gICAgICAgIGksIGosIGs7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGlsZS5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmVhdHVyZSA9IHRpbGUuZmVhdHVyZXNbaV0sXG4gICAgICAgICAgICBnZW9tID0gZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeSA9IFtdO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAxKSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbS5sZW5ndGg7IGogKz0gMikge1xuICAgICAgICAgICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkucHVzaCh0cmFuc2Zvcm1Qb2ludChnZW9tW2pdLCBnZW9tW2ogKyAxXSwgZXh0ZW50LCB6MiwgdHgsIHR5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciByaW5nID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGdlb21bal0ubGVuZ3RoOyBrICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmluZy5wdXNoKHRyYW5zZm9ybVBvaW50KGdlb21bal1ba10sIGdlb21bal1bayArIDFdLCBleHRlbnQsIHoyLCB0eCwgdHkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmVhdHVyZS5nZW9tZXRyeS5wdXNoKHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGlsZS50cmFuc2Zvcm1lZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGlsZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUG9pbnQoeCwgeSwgZXh0ZW50LCB6MiwgdHgsIHR5KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5yb3VuZChleHRlbnQgKiAoeCAqIHoyIC0gdHgpKSxcbiAgICAgICAgTWF0aC5yb3VuZChleHRlbnQgKiAoeSAqIHoyIC0gdHkpKV07XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVRpbGUoZmVhdHVyZXMsIHosIHR4LCB0eSwgb3B0aW9ucykge1xuICAgIHZhciB0b2xlcmFuY2UgPSB6ID09PSBvcHRpb25zLm1heFpvb20gPyAwIDogb3B0aW9ucy50b2xlcmFuY2UgLyAoKDEgPDwgeikgKiBvcHRpb25zLmV4dGVudCk7XG4gICAgdmFyIHRpbGUgPSB7XG4gICAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgICAgbnVtUG9pbnRzOiAwLFxuICAgICAgICBudW1TaW1wbGlmaWVkOiAwLFxuICAgICAgICBudW1GZWF0dXJlczogMCxcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICB4OiB0eCxcbiAgICAgICAgeTogdHksXG4gICAgICAgIHo6IHosXG4gICAgICAgIHRyYW5zZm9ybWVkOiBmYWxzZSxcbiAgICAgICAgbWluWDogMixcbiAgICAgICAgbWluWTogMSxcbiAgICAgICAgbWF4WDogLTEsXG4gICAgICAgIG1heFk6IDBcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGlsZS5udW1GZWF0dXJlcysrO1xuICAgICAgICBhZGRGZWF0dXJlKHRpbGUsIGZlYXR1cmVzW2ldLCB0b2xlcmFuY2UsIG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBtaW5YID0gZmVhdHVyZXNbaV0ubWluWDtcbiAgICAgICAgdmFyIG1pblkgPSBmZWF0dXJlc1tpXS5taW5ZO1xuICAgICAgICB2YXIgbWF4WCA9IGZlYXR1cmVzW2ldLm1heFg7XG4gICAgICAgIHZhciBtYXhZID0gZmVhdHVyZXNbaV0ubWF4WTtcblxuICAgICAgICBpZiAobWluWCA8IHRpbGUubWluWCkgdGlsZS5taW5YID0gbWluWDtcbiAgICAgICAgaWYgKG1pblkgPCB0aWxlLm1pblkpIHRpbGUubWluWSA9IG1pblk7XG4gICAgICAgIGlmIChtYXhYID4gdGlsZS5tYXhYKSB0aWxlLm1heFggPSBtYXhYO1xuICAgICAgICBpZiAobWF4WSA+IHRpbGUubWF4WSkgdGlsZS5tYXhZID0gbWF4WTtcbiAgICB9XG4gICAgcmV0dXJuIHRpbGU7XG59XG5cbmZ1bmN0aW9uIGFkZEZlYXR1cmUodGlsZSwgZmVhdHVyZSwgdG9sZXJhbmNlLCBvcHRpb25zKSB7XG5cbiAgICB2YXIgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGUsXG4gICAgICAgIHNpbXBsaWZpZWQgPSBbXTtcblxuICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50Jykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgIHNpbXBsaWZpZWQucHVzaChnZW9tW2ldKTtcbiAgICAgICAgICAgIHNpbXBsaWZpZWQucHVzaChnZW9tW2kgKyAxXSk7XG4gICAgICAgICAgICB0aWxlLm51bVBvaW50cysrO1xuICAgICAgICAgICAgdGlsZS5udW1TaW1wbGlmaWVkKys7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgZ2VvbSwgdGlsZSwgdG9sZXJhbmNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgZ2VvbVtpXSwgdGlsZSwgdG9sZXJhbmNlLCB0eXBlID09PSAnUG9seWdvbicsIGkgPT09IDApO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG5cbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBnZW9tLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgcG9seWdvbiA9IGdlb21ba107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG9seWdvbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgcG9seWdvbltpXSwgdGlsZSwgdG9sZXJhbmNlLCB0cnVlLCBpID09PSAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaW1wbGlmaWVkLmxlbmd0aCkge1xuICAgICAgICB2YXIgdGFncyA9IGZlYXR1cmUudGFncyB8fCBudWxsO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnICYmIG9wdGlvbnMubGluZU1ldHJpY3MpIHtcbiAgICAgICAgICAgIHRhZ3MgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBmZWF0dXJlLnRhZ3MpIHRhZ3Nba2V5XSA9IGZlYXR1cmUudGFnc1trZXldO1xuICAgICAgICAgICAgdGFnc1snbWFwYm94X2NsaXBfc3RhcnQnXSA9IGdlb20uc3RhcnQgLyBnZW9tLnNpemU7XG4gICAgICAgICAgICB0YWdzWydtYXBib3hfY2xpcF9lbmQnXSA9IGdlb20uZW5kIC8gZ2VvbS5zaXplO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aWxlRmVhdHVyZSA9IHtcbiAgICAgICAgICAgIGdlb21ldHJ5OiBzaW1wbGlmaWVkLFxuICAgICAgICAgICAgdHlwZTogdHlwZSA9PT0gJ1BvbHlnb24nIHx8IHR5cGUgPT09ICdNdWx0aVBvbHlnb24nID8gMyA6XG4gICAgICAgICAgICAgICAgdHlwZSA9PT0gJ0xpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnID8gMiA6IDEsXG4gICAgICAgICAgICB0YWdzOiB0YWdzXG4gICAgICAgIH07XG4gICAgICAgIGlmIChmZWF0dXJlLmlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aWxlRmVhdHVyZS5pZCA9IGZlYXR1cmUuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGlsZS5mZWF0dXJlcy5wdXNoKHRpbGVGZWF0dXJlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZExpbmUocmVzdWx0LCBnZW9tLCB0aWxlLCB0b2xlcmFuY2UsIGlzUG9seWdvbiwgaXNPdXRlcikge1xuICAgIHZhciBzcVRvbGVyYW5jZSA9IHRvbGVyYW5jZSAqIHRvbGVyYW5jZTtcblxuICAgIGlmICh0b2xlcmFuY2UgPiAwICYmIChnZW9tLnNpemUgPCAoaXNQb2x5Z29uID8gc3FUb2xlcmFuY2UgOiB0b2xlcmFuY2UpKSkge1xuICAgICAgICB0aWxlLm51bVBvaW50cyArPSBnZW9tLmxlbmd0aCAvIDM7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmluZyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGlmICh0b2xlcmFuY2UgPT09IDAgfHwgZ2VvbVtpICsgMl0gPiBzcVRvbGVyYW5jZSkge1xuICAgICAgICAgICAgdGlsZS5udW1TaW1wbGlmaWVkKys7XG4gICAgICAgICAgICByaW5nLnB1c2goZ2VvbVtpXSk7XG4gICAgICAgICAgICByaW5nLnB1c2goZ2VvbVtpICsgMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRpbGUubnVtUG9pbnRzKys7XG4gICAgfVxuXG4gICAgaWYgKGlzUG9seWdvbikgcmV3aW5kKHJpbmcsIGlzT3V0ZXIpO1xuXG4gICAgcmVzdWx0LnB1c2gocmluZyk7XG59XG5cbmZ1bmN0aW9uIHJld2luZChyaW5nLCBjbG9ja3dpc2UpIHtcbiAgICB2YXIgYXJlYSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMjsgaSA8IGxlbjsgaiA9IGksIGkgKz0gMikge1xuICAgICAgICBhcmVhICs9IChyaW5nW2ldIC0gcmluZ1tqXSkgKiAocmluZ1tpICsgMV0gKyByaW5nW2ogKyAxXSk7XG4gICAgfVxuICAgIGlmIChhcmVhID4gMCA9PT0gY2xvY2t3aXNlKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoOyBpIDwgbGVuIC8gMjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgeCA9IHJpbmdbaV07XG4gICAgICAgICAgICB2YXIgeSA9IHJpbmdbaSArIDFdO1xuICAgICAgICAgICAgcmluZ1tpXSA9IHJpbmdbbGVuIC0gMiAtIGldO1xuICAgICAgICAgICAgcmluZ1tpICsgMV0gPSByaW5nW2xlbiAtIDEgLSBpXTtcbiAgICAgICAgICAgIHJpbmdbbGVuIC0gMiAtIGldID0geDtcbiAgICAgICAgICAgIHJpbmdbbGVuIC0gMSAtIGldID0geTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuaW1wb3J0IGNvbnZlcnQgZnJvbSAnLi9jb252ZXJ0JzsgICAgIC8vIEdlb0pTT04gY29udmVyc2lvbiBhbmQgcHJlcHJvY2Vzc2luZ1xuaW1wb3J0IGNsaXAgZnJvbSAnLi9jbGlwJzsgICAgICAgICAgIC8vIHN0cmlwZSBjbGlwcGluZyBhbGdvcml0aG1cbmltcG9ydCB3cmFwIGZyb20gJy4vd3JhcCc7ICAgICAgICAgICAvLyBkYXRlIGxpbmUgcHJvY2Vzc2luZ1xuaW1wb3J0IHRyYW5zZm9ybSBmcm9tICcuL3RyYW5zZm9ybSc7IC8vIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb25cbmltcG9ydCBjcmVhdGVUaWxlIGZyb20gJy4vdGlsZSc7ICAgICAvLyBmaW5hbCBzaW1wbGlmaWVkIHRpbGUgZ2VuZXJhdGlvblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW9qc29udnQoZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgR2VvSlNPTlZUKGRhdGEsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBHZW9KU09OVlQoZGF0YSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLCBvcHRpb25zKTtcblxuICAgIHZhciBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICBpZiAoZGVidWcpIGNvbnNvbGUudGltZSgncHJlcHJvY2VzcyBkYXRhJyk7XG5cbiAgICBpZiAob3B0aW9ucy5tYXhab29tIDwgMCB8fCBvcHRpb25zLm1heFpvb20gPiAyNCkgdGhyb3cgbmV3IEVycm9yKCdtYXhab29tIHNob3VsZCBiZSBpbiB0aGUgMC0yNCByYW5nZScpO1xuICAgIGlmIChvcHRpb25zLnByb21vdGVJZCAmJiBvcHRpb25zLmdlbmVyYXRlSWQpIHRocm93IG5ldyBFcnJvcigncHJvbW90ZUlkIGFuZCBnZW5lcmF0ZUlkIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLicpO1xuXG4gICAgdmFyIGZlYXR1cmVzID0gY29udmVydChkYXRhLCBvcHRpb25zKTtcblxuICAgIHRoaXMudGlsZXMgPSB7fTtcbiAgICB0aGlzLnRpbGVDb29yZHMgPSBbXTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ3ByZXByb2Nlc3MgZGF0YScpO1xuICAgICAgICBjb25zb2xlLmxvZygnaW5kZXg6IG1heFpvb206ICVkLCBtYXhQb2ludHM6ICVkJywgb3B0aW9ucy5pbmRleE1heFpvb20sIG9wdGlvbnMuaW5kZXhNYXhQb2ludHMpO1xuICAgICAgICBjb25zb2xlLnRpbWUoJ2dlbmVyYXRlIHRpbGVzJyk7XG4gICAgICAgIHRoaXMuc3RhdHMgPSB7fTtcbiAgICAgICAgdGhpcy50b3RhbCA9IDA7XG4gICAgfVxuXG4gICAgZmVhdHVyZXMgPSB3cmFwKGZlYXR1cmVzLCBvcHRpb25zKTtcblxuICAgIC8vIHN0YXJ0IHNsaWNpbmcgZnJvbSB0aGUgdG9wIHRpbGUgZG93blxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHRoaXMuc3BsaXRUaWxlKGZlYXR1cmVzLCAwLCAwLCAwKTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoKSBjb25zb2xlLmxvZygnZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkJywgdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcywgdGhpcy50aWxlc1swXS5udW1Qb2ludHMpO1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ2dlbmVyYXRlIHRpbGVzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0aWxlcyBnZW5lcmF0ZWQ6JywgdGhpcy50b3RhbCwgSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0cykpO1xuICAgIH1cbn1cblxuR2VvSlNPTlZULnByb3RvdHlwZS5vcHRpb25zID0ge1xuICAgIG1heFpvb206IDE0LCAgICAgICAgICAgIC8vIG1heCB6b29tIHRvIHByZXNlcnZlIGRldGFpbCBvblxuICAgIGluZGV4TWF4Wm9vbTogNSwgICAgICAgIC8vIG1heCB6b29tIGluIHRoZSB0aWxlIGluZGV4XG4gICAgaW5kZXhNYXhQb2ludHM6IDEwMDAwMCwgLy8gbWF4IG51bWJlciBvZiBwb2ludHMgcGVyIHRpbGUgaW4gdGhlIHRpbGUgaW5kZXhcbiAgICB0b2xlcmFuY2U6IDMsICAgICAgICAgICAvLyBzaW1wbGlmaWNhdGlvbiB0b2xlcmFuY2UgKGhpZ2hlciBtZWFucyBzaW1wbGVyKVxuICAgIGV4dGVudDogNDA5NiwgICAgICAgICAgIC8vIHRpbGUgZXh0ZW50XG4gICAgYnVmZmVyOiA2NCwgICAgICAgICAgICAgLy8gdGlsZSBidWZmZXIgb24gZWFjaCBzaWRlXG4gICAgbGluZU1ldHJpY3M6IGZhbHNlLCAgICAgLy8gd2hldGhlciB0byBjYWxjdWxhdGUgbGluZSBtZXRyaWNzXG4gICAgcHJvbW90ZUlkOiBudWxsLCAgICAgICAgLy8gbmFtZSBvZiBhIGZlYXR1cmUgcHJvcGVydHkgdG8gYmUgcHJvbW90ZWQgdG8gZmVhdHVyZS5pZFxuICAgIGdlbmVyYXRlSWQ6IGZhbHNlLCAgICAgIC8vIHdoZXRoZXIgdG8gZ2VuZXJhdGUgZmVhdHVyZSBpZHMuIENhbm5vdCBiZSB1c2VkIHdpdGggcHJvbW90ZUlkXG4gICAgZGVidWc6IDAgICAgICAgICAgICAgICAgLy8gbG9nZ2luZyBsZXZlbCAoMCwgMSBvciAyKVxufTtcblxuR2VvSlNPTlZULnByb3RvdHlwZS5zcGxpdFRpbGUgPSBmdW5jdGlvbiAoZmVhdHVyZXMsIHosIHgsIHksIGN6LCBjeCwgY3kpIHtcblxuICAgIHZhciBzdGFjayA9IFtmZWF0dXJlcywgeiwgeCwgeV0sXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcblxuICAgIC8vIGF2b2lkIHJlY3Vyc2lvbiBieSB1c2luZyBhIHByb2Nlc3NpbmcgcXVldWVcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIHkgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgeCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICB6ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGZlYXR1cmVzID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgdmFyIHoyID0gMSA8PCB6LFxuICAgICAgICAgICAgaWQgPSB0b0lEKHosIHgsIHkpLFxuICAgICAgICAgICAgdGlsZSA9IHRoaXMudGlsZXNbaWRdO1xuXG4gICAgICAgIGlmICghdGlsZSkge1xuICAgICAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdjcmVhdGlvbicpO1xuXG4gICAgICAgICAgICB0aWxlID0gdGhpcy50aWxlc1tpZF0gPSBjcmVhdGVUaWxlKGZlYXR1cmVzLCB6LCB4LCB5LCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OiB6LCB4OiB4LCB5OiB5fSk7XG5cbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgICAgIGlmIChkZWJ1ZyA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKScsXG4gICAgICAgICAgICAgICAgICAgICAgICB6LCB4LCB5LCB0aWxlLm51bUZlYXR1cmVzLCB0aWxlLm51bVBvaW50cywgdGlsZS5udW1TaW1wbGlmaWVkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS50aW1lRW5kKCdjcmVhdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gJ3onICsgejtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRzW2tleV0gPSAodGhpcy5zdGF0c1trZXldIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzYXZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBnZW9tZXRyeSBpbiB0aWxlIHNvIHRoYXQgd2UgY2FuIGRyaWxsIGRvd24gbGF0ZXIgaWYgd2Ugc3RvcCBub3dcbiAgICAgICAgdGlsZS5zb3VyY2UgPSBmZWF0dXJlcztcblxuICAgICAgICAvLyBpZiBpdCdzIHRoZSBmaXJzdC1wYXNzIHRpbGluZ1xuICAgICAgICBpZiAoIWN6KSB7XG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB3ZSByZWFjaGVkIG1heCB6b29tLCBvciBpZiB0aGUgdGlsZSBpcyB0b28gc2ltcGxlXG4gICAgICAgICAgICBpZiAoeiA9PT0gb3B0aW9ucy5pbmRleE1heFpvb20gfHwgdGlsZS5udW1Qb2ludHMgPD0gb3B0aW9ucy5pbmRleE1heFBvaW50cykgY29udGludWU7XG5cbiAgICAgICAgLy8gaWYgYSBkcmlsbGRvd24gdG8gYSBzcGVjaWZpYyB0aWxlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB3ZSByZWFjaGVkIGJhc2Ugem9vbSBvciBvdXIgdGFyZ2V0IHRpbGUgem9vbVxuICAgICAgICAgICAgaWYgKHogPT09IG9wdGlvbnMubWF4Wm9vbSB8fCB6ID09PSBjeikgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIHN0b3AgdGlsaW5nIGlmIGl0J3Mgbm90IGFuIGFuY2VzdG9yIG9mIHRoZSB0YXJnZXQgdGlsZVxuICAgICAgICAgICAgdmFyIG0gPSAxIDw8IChjeiAtIHopO1xuICAgICAgICAgICAgaWYgKHggIT09IE1hdGguZmxvb3IoY3ggLyBtKSB8fCB5ICE9PSBNYXRoLmZsb29yKGN5IC8gbSkpIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgd2Ugc2xpY2UgZnVydGhlciBkb3duLCBubyBuZWVkIHRvIGtlZXAgc291cmNlIGdlb21ldHJ5XG4gICAgICAgIHRpbGUuc291cmNlID0gbnVsbDtcblxuICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWUoJ2NsaXBwaW5nJyk7XG5cbiAgICAgICAgLy8gdmFsdWVzIHdlJ2xsIHVzZSBmb3IgY2xpcHBpbmdcbiAgICAgICAgdmFyIGsxID0gMC41ICogb3B0aW9ucy5idWZmZXIgLyBvcHRpb25zLmV4dGVudCxcbiAgICAgICAgICAgIGsyID0gMC41IC0gazEsXG4gICAgICAgICAgICBrMyA9IDAuNSArIGsxLFxuICAgICAgICAgICAgazQgPSAxICsgazEsXG4gICAgICAgICAgICB0bCwgYmwsIHRyLCBiciwgbGVmdCwgcmlnaHQ7XG5cbiAgICAgICAgdGwgPSBibCA9IHRyID0gYnIgPSBudWxsO1xuXG4gICAgICAgIGxlZnQgID0gY2xpcChmZWF0dXJlcywgejIsIHggLSBrMSwgeCArIGszLCAwLCB0aWxlLm1pblgsIHRpbGUubWF4WCwgb3B0aW9ucyk7XG4gICAgICAgIHJpZ2h0ID0gY2xpcChmZWF0dXJlcywgejIsIHggKyBrMiwgeCArIGs0LCAwLCB0aWxlLm1pblgsIHRpbGUubWF4WCwgb3B0aW9ucyk7XG4gICAgICAgIGZlYXR1cmVzID0gbnVsbDtcblxuICAgICAgICBpZiAobGVmdCkge1xuICAgICAgICAgICAgdGwgPSBjbGlwKGxlZnQsIHoyLCB5IC0gazEsIHkgKyBrMywgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgYmwgPSBjbGlwKGxlZnQsIHoyLCB5ICsgazIsIHkgKyBrNCwgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgbGVmdCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICAgIHRyID0gY2xpcChyaWdodCwgejIsIHkgLSBrMSwgeSArIGszLCAxLCB0aWxlLm1pblksIHRpbGUubWF4WSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBiciA9IGNsaXAocmlnaHQsIHoyLCB5ICsgazIsIHkgKyBrNCwgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmlnaHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lRW5kKCdjbGlwcGluZycpO1xuXG4gICAgICAgIHN0YWNrLnB1c2godGwgfHwgW10sIHogKyAxLCB4ICogMiwgICAgIHkgKiAyKTtcbiAgICAgICAgc3RhY2sucHVzaChibCB8fCBbXSwgeiArIDEsIHggKiAyLCAgICAgeSAqIDIgKyAxKTtcbiAgICAgICAgc3RhY2sucHVzaCh0ciB8fCBbXSwgeiArIDEsIHggKiAyICsgMSwgeSAqIDIpO1xuICAgICAgICBzdGFjay5wdXNoKGJyIHx8IFtdLCB6ICsgMSwgeCAqIDIgKyAxLCB5ICogMiArIDEpO1xuICAgIH1cbn07XG5cbkdlb0pTT05WVC5wcm90b3R5cGUuZ2V0VGlsZSA9IGZ1bmN0aW9uICh6LCB4LCB5KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGV4dGVudCA9IG9wdGlvbnMuZXh0ZW50LFxuICAgICAgICBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICBpZiAoeiA8IDAgfHwgeiA+IDI0KSByZXR1cm4gbnVsbDtcblxuICAgIHZhciB6MiA9IDEgPDwgejtcbiAgICB4ID0gKCh4ICUgejIpICsgejIpICUgejI7IC8vIHdyYXAgdGlsZSB4IGNvb3JkaW5hdGVcblxuICAgIHZhciBpZCA9IHRvSUQoeiwgeCwgeSk7XG4gICAgaWYgKHRoaXMudGlsZXNbaWRdKSByZXR1cm4gdHJhbnNmb3JtKHRoaXMudGlsZXNbaWRdLCBleHRlbnQpO1xuXG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS5sb2coJ2RyaWxsaW5nIGRvd24gdG8geiVkLSVkLSVkJywgeiwgeCwgeSk7XG5cbiAgICB2YXIgejAgPSB6LFxuICAgICAgICB4MCA9IHgsXG4gICAgICAgIHkwID0geSxcbiAgICAgICAgcGFyZW50O1xuXG4gICAgd2hpbGUgKCFwYXJlbnQgJiYgejAgPiAwKSB7XG4gICAgICAgIHowLS07XG4gICAgICAgIHgwID0gTWF0aC5mbG9vcih4MCAvIDIpO1xuICAgICAgICB5MCA9IE1hdGguZmxvb3IoeTAgLyAyKTtcbiAgICAgICAgcGFyZW50ID0gdGhpcy50aWxlc1t0b0lEKHowLCB4MCwgeTApXTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LnNvdXJjZSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBpZiB3ZSBmb3VuZCBhIHBhcmVudCB0aWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGdlb21ldHJ5LCB3ZSBjYW4gZHJpbGwgZG93biBmcm9tIGl0XG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS5sb2coJ2ZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZCcsIHowLCB4MCwgeTApO1xuXG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdkcmlsbGluZyBkb3duJyk7XG4gICAgdGhpcy5zcGxpdFRpbGUocGFyZW50LnNvdXJjZSwgejAsIHgwLCB5MCwgeiwgeCwgeSk7XG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lRW5kKCdkcmlsbGluZyBkb3duJyk7XG5cbiAgICByZXR1cm4gdGhpcy50aWxlc1tpZF0gPyB0cmFuc2Zvcm0odGhpcy50aWxlc1tpZF0sIGV4dGVudCkgOiBudWxsO1xufTtcblxuZnVuY3Rpb24gdG9JRCh6LCB4LCB5KSB7XG4gICAgcmV0dXJuICgoKDEgPDwgeikgKiB5ICsgeCkgKiAzMikgKyB6O1xufVxuXG5mdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjKSB7XG4gICAgZm9yICh2YXIgaSBpbiBzcmMpIGRlc3RbaV0gPSBzcmNbaV07XG4gICAgcmV0dXJuIGRlc3Q7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEpTT059IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCBwZXJmb3JtYW5jZSBmcm9tICcuLi91dGlsL3BlcmZvcm1hbmNlJztcbmltcG9ydCByZXdpbmQgZnJvbSAnQG1hcGJveC9nZW9qc29uLXJld2luZCc7XG5pbXBvcnQgR2VvSlNPTldyYXBwZXIgZnJvbSAnLi9nZW9qc29uX3dyYXBwZXInO1xuaW1wb3J0IHZ0cGJmIGZyb20gJ3Z0LXBiZic7XG5pbXBvcnQgU3VwZXJjbHVzdGVyIGZyb20gJ3N1cGVyY2x1c3Rlcic7XG5pbXBvcnQgZ2VvanNvbnZ0IGZyb20gJ2dlb2pzb24tdnQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IFZlY3RvclRpbGVXb3JrZXJTb3VyY2UgZnJvbSAnLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlJztcbmltcG9ydCB7Y3JlYXRlRXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcblxuaW1wb3J0IHR5cGUge1xuICAgIFdvcmtlclRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlclRpbGVDYWxsYmFjayxcbn0gZnJvbSAnLi4vc291cmNlL3dvcmtlcl9zb3VyY2UnO1xuXG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXJJbmRleCBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcl9pbmRleCc7XG5cbmltcG9ydCB0eXBlIHtMb2FkVmVjdG9yRGF0YUNhbGxiYWNrfSBmcm9tICcuL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RQYXJhbWV0ZXJzLCBSZXNwb25zZUNhbGxiYWNrfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTkZlYXR1cmV9IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5cbmV4cG9ydCB0eXBlIExvYWRHZW9KU09OUGFyYW1ldGVycyA9IHtcbiAgICByZXF1ZXN0PzogUmVxdWVzdFBhcmFtZXRlcnMsXG4gICAgZGF0YT86IHN0cmluZyxcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICBjbHVzdGVyOiBib29sZWFuLFxuICAgIHN1cGVyY2x1c3Rlck9wdGlvbnM/OiBPYmplY3QsXG4gICAgZ2VvanNvblZ0T3B0aW9ucz86IE9iamVjdCxcbiAgICBjbHVzdGVyUHJvcGVydGllcz86IE9iamVjdFxufTtcblxuZXhwb3J0IHR5cGUgTG9hZEdlb0pTT04gPSAocGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPE9iamVjdD4pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvSlNPTkluZGV4IHtcbiAgICBnZXRUaWxlKHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiBPYmplY3Q7XG5cbiAgICAvLyBzdXBlcmNsdXN0ZXIgbWV0aG9kc1xuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKGNsdXN0ZXJJZDogbnVtYmVyKTogbnVtYmVyO1xuICAgIGdldENoaWxkcmVuKGNsdXN0ZXJJZDogbnVtYmVyKTogQXJyYXk8R2VvSlNPTkZlYXR1cmU+O1xuICAgIGdldExlYXZlcyhjbHVzdGVySWQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIpOiBBcnJheTxHZW9KU09ORmVhdHVyZT47XG59XG5cbmZ1bmN0aW9uIGxvYWRHZW9KU09OVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogTG9hZFZlY3RvckRhdGFDYWxsYmFjaykge1xuICAgIGNvbnN0IGNhbm9uaWNhbCA9IHBhcmFtcy50aWxlSUQuY2Fub25pY2FsO1xuXG4gICAgaWYgKCF0aGlzLl9nZW9KU09OSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG51bGwpOyAgLy8gd2UgY291bGRuJ3QgbG9hZCB0aGUgZmlsZVxuICAgIH1cblxuICAgIGNvbnN0IGdlb0pTT05UaWxlID0gdGhpcy5fZ2VvSlNPTkluZGV4LmdldFRpbGUoY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSk7XG4gICAgaWYgKCFnZW9KU09OVGlsZSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgbnVsbCk7IC8vIG5vdGhpbmcgaW4gdGhlIGdpdmVuIHRpbGVcbiAgICB9XG5cbiAgICBjb25zdCBnZW9qc29uV3JhcHBlciA9IG5ldyBHZW9KU09OV3JhcHBlcihnZW9KU09OVGlsZS5mZWF0dXJlcyk7XG5cbiAgICAvLyBFbmNvZGUgdGhlIGdlb2pzb24tdnQgdGlsZSBpbnRvIGJpbmFyeSB2ZWN0b3IgdGlsZSBmb3JtLiAgVGhpc1xuICAgIC8vIGlzIGEgY29udmVuaWVuY2UgdGhhdCBhbGxvd3MgYEZlYXR1cmVJbmRleGAgdG8gb3BlcmF0ZSB0aGUgc2FtZSB3YXlcbiAgICAvLyBhY3Jvc3MgYFZlY3RvclRpbGVTb3VyY2VgIGFuZCBgR2VvSlNPTlNvdXJjZWAgZGF0YS5cbiAgICBsZXQgcGJmID0gdnRwYmYoZ2VvanNvbldyYXBwZXIpO1xuICAgIGlmIChwYmYuYnl0ZU9mZnNldCAhPT0gMCB8fCBwYmYuYnl0ZUxlbmd0aCAhPT0gcGJmLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIC8vIENvbXBhdGliaWxpdHkgd2l0aCBub2RlIEJ1ZmZlciAoaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9wYmYvaXNzdWVzLzM1KVxuICAgICAgICBwYmYgPSBuZXcgVWludDhBcnJheShwYmYpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgdmVjdG9yVGlsZTogZ2VvanNvbldyYXBwZXIsXG4gICAgICAgIHJhd0RhdGE6IHBiZi5idWZmZXJcbiAgICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlU3RhdGUgPVxuICAgIHwgJ0lkbGUnICAgICAgICAgICAgLy8gU291cmNlIGVtcHR5IG9yIGRhdGEgbG9hZGVkXG4gICAgfCAnQ29hbGVzY2luZycgICAgICAvLyBEYXRhIGZpbmlzaGVkIGxvYWRpbmcsIGJ1dCBkaXNjYXJkICdsb2FkRGF0YScgbWVzc2FnZXMgdW50aWwgcmVjZWl2aW5nICdjb2FsZXNjZWQnXG4gICAgfCAnTmVlZHNMb2FkRGF0YSc7ICAvLyAnbG9hZERhdGEnIHJlY2VpdmVkIHdoaWxlIGNvYWxlc2NpbmcsIHRyaWdnZXIgb25lIG1vcmUgJ2xvYWREYXRhJyBvbiByZWNlaXZpbmcgJ2NvYWxlc2NlZCdcblxuLyoqXG4gKiBUaGUge0BsaW5rIFdvcmtlclNvdXJjZX0gaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB7QGxpbmsgR2VvSlNPTlNvdXJjZX0uXG4gKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIGJlIGVhc2lseSByZXVzZWQgdG8gc3VwcG9ydCBjdXN0b20gc291cmNlIHR5cGVzXG4gKiBmb3IgZGF0YSBmb3JtYXRzIHRoYXQgY2FuIGJlIHBhcnNlZC9jb252ZXJ0ZWQgaW50byBhbiBpbi1tZW1vcnkgR2VvSlNPTlxuICogcmVwcmVzZW50YXRpb24uICBUbyBkbyBzbywgY3JlYXRlIGl0IHdpdGhcbiAqIGBuZXcgR2VvSlNPTldvcmtlclNvdXJjZShhY3RvciwgbGF5ZXJJbmRleCwgY3VzdG9tTG9hZEdlb0pTT05GdW5jdGlvbilgLlxuICogRm9yIGEgZnVsbCBleGFtcGxlLCBzZWUgW21hcGJveC1nbC10b3BvanNvbl0oaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BtZW50c2VlZC9tYXBib3gtZ2wtdG9wb2pzb24pLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEdlb0pTT05Xb3JrZXJTb3VyY2UgZXh0ZW5kcyBWZWN0b3JUaWxlV29ya2VyU291cmNlIHtcbiAgICBsb2FkR2VvSlNPTjogTG9hZEdlb0pTT047XG4gICAgX3N0YXRlOiBTb3VyY2VTdGF0ZTtcbiAgICBfcGVuZGluZ0NhbGxiYWNrOiBDYWxsYmFjazx7XG4gICAgICAgIHJlc291cmNlVGltaW5nPzoge1tzdHJpbmddOiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPn0sXG4gICAgICAgIGFiYW5kb25lZD86IGJvb2xlYW4gfT47XG4gICAgX3BlbmRpbmdMb2FkRGF0YVBhcmFtczogTG9hZEdlb0pTT05QYXJhbWV0ZXJzO1xuICAgIF9nZW9KU09OSW5kZXg6IEdlb0pTT05JbmRleFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIFtsb2FkR2VvSlNPTl0gT3B0aW9uYWwgbWV0aG9kIGZvciBjdXN0b20gbG9hZGluZy9wYXJzaW5nIG9mXG4gICAgICogR2VvSlNPTiBiYXNlZCBvbiBwYXJhbWV0ZXJzIHBhc3NlZCBmcm9tIHRoZSBtYWluLXRocmVhZCBTb3VyY2UuXG4gICAgICogU2VlIHtAbGluayBHZW9KU09OV29ya2VyU291cmNlI2xvYWRHZW9KU09OfS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY3RvcjogQWN0b3IsIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LCBsb2FkR2VvSlNPTjogP0xvYWRHZW9KU09OKSB7XG4gICAgICAgIHN1cGVyKGFjdG9yLCBsYXllckluZGV4LCBhdmFpbGFibGVJbWFnZXMsIGxvYWRHZW9KU09OVGlsZSk7XG4gICAgICAgIGlmIChsb2FkR2VvSlNPTikge1xuICAgICAgICAgICAgdGhpcy5sb2FkR2VvSlNPTiA9IGxvYWRHZW9KU09OO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyAoaWYgYXBwcm9wcmlhdGUpLCBwYXJzZXMsIGFuZCBpbmRleCBnZW9qc29uIGRhdGEgaW50byB0aWxlcy4gVGhpc1xuICAgICAqIHByZXBhcmF0b3J5IG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUge0BsaW5rIEdlb0pTT05Xb3JrZXJTb3VyY2UjbG9hZFRpbGV9XG4gICAgICogY2FuIGNvcnJlY3RseSBzZXJ2ZSB1cCB0aWxlcy5cbiAgICAgKlxuICAgICAqIERlZmVycyB0byB7QGxpbmsgR2VvSlNPTldvcmtlclNvdXJjZSNsb2FkR2VvSlNPTn0gZm9yIHRoZSBmZXRjaGluZy9wYXJzaW5nLFxuICAgICAqIGV4cGVjdGluZyBgY2FsbGJhY2soZXJyb3IsIGRhdGEpYCB0byBiZSBjYWxsZWQgd2l0aCBlaXRoZXIgYW4gZXJyb3Igb3IgYVxuICAgICAqIHBhcnNlZCBHZW9KU09OIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFdoZW4gYGxvYWREYXRhYCByZXF1ZXN0cyBjb21lIGluIGZhc3RlciB0aGFuIHRoZXkgY2FuIGJlIHByb2Nlc3NlZCxcbiAgICAgKiB0aGV5IGFyZSBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSByZXF1ZXN0IHVzaW5nIHRoZSBsYXRlc3QgZGF0YS5cbiAgICAgKiBTZWUge0BsaW5rIEdlb0pTT05Xb3JrZXJTb3VyY2UjY29hbGVzY2V9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAgICovXG4gICAgbG9hZERhdGEocGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnMsIGNhbGxiYWNrOiBDYWxsYmFjazx7XG4gICAgICAgIHJlc291cmNlVGltaW5nPzoge1tzdHJpbmddOiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPn0sXG4gICAgICAgIGFiYW5kb25lZD86IGJvb2xlYW4gfT4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdDYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gVGVsbCB0aGUgZm9yZWdyb3VuZCB0aGUgcHJldmlvdXMgY2FsbCBoYXMgYmVlbiBhYmFuZG9uZWRcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLCB7YWJhbmRvbmVkOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcyA9IHBhcmFtcztcblxuICAgICAgICBpZiAodGhpcy5fc3RhdGUgJiZcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlICE9PSAnSWRsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ05lZWRzTG9hZERhdGEnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnQ29hbGVzY2luZyc7XG4gICAgICAgICAgICB0aGlzLl9sb2FkRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb246IGNhbGxlZCBkaXJlY3RseSBieSBgbG9hZERhdGFgXG4gICAgICogb3IgYnkgYGNvYWxlc2NlYCB1c2luZyBzdG9yZWQgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBfbG9hZERhdGEoKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGVuZGluZ0NhbGxiYWNrIHx8ICF0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMpIHtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLl9wZW5kaW5nQ2FsbGJhY2s7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdDYWxsYmFjaztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztcblxuICAgICAgICBjb25zdCBwZXJmID0gKHBhcmFtcyAmJiBwYXJhbXMucmVxdWVzdCAmJiBwYXJhbXMucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpID9cbiAgICAgICAgICAgIG5ldyBwZXJmb3JtYW5jZS5QZXJmb3JtYW5jZShwYXJhbXMucmVxdWVzdCkgOiBmYWxzZTtcblxuICAgICAgICB0aGlzLmxvYWRHZW9KU09OKHBhcmFtcywgKGVycjogP0Vycm9yLCBkYXRhOiA/T2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyIHx8ICFkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYElucHV0IGRhdGEgZ2l2ZW4gdG8gJyR7cGFyYW1zLnNvdXJjZX0nIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LmApKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV3aW5kKGRhdGEsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvSlNPTkluZGV4ID0gcGFyYW1zLmNsdXN0ZXIgP1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN1cGVyY2x1c3RlcihnZXRTdXBlcmNsdXN0ZXJPcHRpb25zKHBhcmFtcykpLmxvYWQoZGF0YS5mZWF0dXJlcykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvanNvbnZ0KGRhdGEsIHBhcmFtcy5nZW9qc29uVnRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB7fTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChwZXJmKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlVGltaW5nRGF0YSA9IHBlcmYuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGl0J3MgbmVjZXNzYXJ5IHRvIGV2YWwgdGhlIHJlc3VsdCBvZiBnZXRFbnRyaWVzQnlOYW1lKCkgaGVyZSB2aWEgcGFyc2Uvc3RyaW5naWZ5XG4gICAgICAgICAgICAgICAgICAgIC8vIGxhdGUgZXZhbHVhdGlvbiBpbiB0aGUgbWFpbiB0aHJlYWQgY2F1c2VzIFR5cGVFcnJvcjogaWxsZWdhbCBpbnZvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZVRpbWluZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvdXJjZVRpbWluZyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc291cmNlVGltaW5nW3BhcmFtcy5zb3VyY2VdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXNvdXJjZVRpbWluZ0RhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGlsZSBwcm9jZXNzaW5nIGBsb2FkRGF0YWAsIHdlIGNvYWxlc2NlIGFsbCBmdXJ0aGVyXG4gICAgICogYGxvYWREYXRhYCBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIGNhbGwgdG8gX2xvYWREYXRhXG4gICAgICogdGhhdCB3aWxsIGhhcHBlbiBvbmNlIHdlJ3ZlIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlXG4gICAgICogZmlyc3QgbWVzc2FnZS4ge0BsaW5rIEdlb0pTT05Tb3VyY2UjX3VwZGF0ZVdvcmtlckRhdGF9XG4gICAgICogaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgdXMgdGhlIGBjb2FsZXNjZWAgbWVzc2FnZVxuICAgICAqIGF0IHRoZSB0aW1lIGl0IHJlY2VpdmVzIGEgcmVzcG9uc2UgZnJvbSBgbG9hZERhdGFgXG4gICAgICpcbiAgICAgKiAgICAgICAgICBTdGF0ZTogSWRsZVxuICAgICAqICAgICAgICAgIMOiwobCkSAgICAgICAgICB8XG4gICAgICogICAgICdjb2FsZXNjZScgICAnbG9hZERhdGEnXG4gICAgICogICAgICAgICAgfCAgICAgKHRyaWdnZXJzIGxvYWQpXG4gICAgICogICAgICAgICAgfCAgICAgICAgICDDosKGwpNcbiAgICAgKiAgICAgICAgU3RhdGU6IENvYWxlc2NpbmdcbiAgICAgKiAgICAgICAgICDDosKGwpEgICAgICAgICAgfFxuICAgICAqICAgKHRyaWdnZXJzIGxvYWQpICAgfFxuICAgICAqICAgICAnY29hbGVzY2UnICAgJ2xvYWREYXRhJ1xuICAgICAqICAgICAgICAgIHwgICAgICAgICAgw6LChsKTXG4gICAgICogICAgICAgIFN0YXRlOiBOZWVkc0xvYWREYXRhXG4gICAgICovXG4gICAgY29hbGVzY2UoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ0NvYWxlc2NpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdJZGxlJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ05lZWRzTG9hZERhdGEnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdDb2FsZXNjaW5nJztcbiAgICAgICAgICAgIHRoaXMuX2xvYWREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEltcGxlbWVudHMge0BsaW5rIFdvcmtlclNvdXJjZSNyZWxvYWRUaWxlfS5cbiAgICAqXG4gICAgKiBJZiB0aGUgdGlsZSBpcyBsb2FkZWQsIHVzZXMgdGhlIGltcGxlbWVudGF0aW9uIGluIFZlY3RvclRpbGVXb3JrZXJTb3VyY2UuXG4gICAgKiBPdGhlcndpc2UsIHN1Y2ggYXMgYWZ0ZXIgYSBzZXREYXRhKCkgY2FsbCwgd2UgbG9hZCB0aGUgdGlsZSBmcmVzaC5cbiAgICAqXG4gICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgKiBAcGFyYW0gcGFyYW1zLnVpZCBUaGUgVUlEIGZvciB0aGlzIHRpbGUuXG4gICAgKi9cbiAgICByZWxvYWRUaWxlKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkO1xuXG4gICAgICAgIGlmIChsb2FkZWQgJiYgbG9hZGVkW3VpZF0pIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5yZWxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaCBhbmQgcGFyc2UgR2VvSlNPTiBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHBhcmFtcy4gIENhbGxzIGBjYWxsYmFja2BcbiAgICAgKiB3aXRoIGAoZXJyLCBkYXRhKWAsIHdoZXJlIGBkYXRhYCBpcyBhIHBhcnNlZCBHZW9KU09OIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEdlb0pTT04gaXMgbG9hZGVkIGFuZCBwYXJzZWQgZnJvbSBgcGFyYW1zLnVybGAgaWYgaXQgZXhpc3RzLCBvciBlbHNlXG4gICAgICogZXhwZWN0ZWQgYXMgYSBsaXRlcmFsIChzdHJpbmcgb3Igb2JqZWN0KSBgcGFyYW1zLmRhdGFgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwYXJhbSBbcGFyYW1zLnVybF0gQSBVUkwgdG8gdGhlIHJlbW90ZSBHZW9KU09OIGRhdGEuXG4gICAgICogQHBhcmFtIFtwYXJhbXMuZGF0YV0gTGl0ZXJhbCBHZW9KU09OIGRhdGEuIE11c3QgYmUgcHJvdmlkZWQgaWYgYHBhcmFtcy51cmxgIGlzIG5vdC5cbiAgICAgKi9cbiAgICBsb2FkR2VvSlNPTihwYXJhbXM6IExvYWRHZW9KU09OUGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8T2JqZWN0Pikge1xuICAgICAgICAvLyBCZWNhdXNlIG9mIHNhbWUgb3JpZ2luIGlzc3VlcywgdXJscyBtdXN0IGVpdGhlciBpbmNsdWRlIGFuIGV4cGxpY2l0XG4gICAgICAgIC8vIG9yaWdpbiBvciBhYnNvbHV0ZSBwYXRoLlxuICAgICAgICAvLyBpZTogL2Zvby9iYXIuanNvbiBvciBodHRwOi8vZXhhbXBsZS5jb20vYmFyLmpzb25cbiAgICAgICAgLy8gYnV0IG5vdCAuLi9mb28vYmFyLmpzb25cbiAgICAgICAgaWYgKHBhcmFtcy5yZXF1ZXN0KSB7XG4gICAgICAgICAgICBnZXRKU09OKHBhcmFtcy5yZXF1ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgSlNPTi5wYXJzZShwYXJhbXMuZGF0YSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYElucHV0IGRhdGEgZ2l2ZW4gdG8gJyR7cGFyYW1zLnNvdXJjZX0nIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LmApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYElucHV0IGRhdGEgZ2l2ZW4gdG8gJyR7cGFyYW1zLnNvdXJjZX0nIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LmApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZVNvdXJjZShwYXJhbXM6IHtzb3VyY2U6IHN0cmluZ30sIGNhbGxiYWNrOiBDYWxsYmFjazxtaXhlZD4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdDYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gRG9uJ3QgbGVhayBjYWxsYmFja3NcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLCB7YWJhbmRvbmVkOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyRXhwYW5zaW9uWm9vbShwYXJhbXM6IHtjbHVzdGVySWQ6IG51bWJlcn0sIGNhbGxiYWNrOiBDYWxsYmFjazxudW1iZXI+KSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHRoaXMuX2dlb0pTT05JbmRleC5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbShwYXJhbXMuY2x1c3RlcklkKSk7XG4gICAgfVxuXG4gICAgZ2V0Q2x1c3RlckNoaWxkcmVuKHBhcmFtczoge2NsdXN0ZXJJZDogbnVtYmVyfSwgY2FsbGJhY2s6IENhbGxiYWNrPEFycmF5PEdlb0pTT05GZWF0dXJlPj4pIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhpcy5fZ2VvSlNPTkluZGV4LmdldENoaWxkcmVuKHBhcmFtcy5jbHVzdGVySWQpKTtcbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyTGVhdmVzKHBhcmFtczoge2NsdXN0ZXJJZDogbnVtYmVyLCBsaW1pdDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlcn0sIGNhbGxiYWNrOiBDYWxsYmFjazxBcnJheTxHZW9KU09ORmVhdHVyZT4+KSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHRoaXMuX2dlb0pTT05JbmRleC5nZXRMZWF2ZXMocGFyYW1zLmNsdXN0ZXJJZCwgcGFyYW1zLmxpbWl0LCBwYXJhbXMub2Zmc2V0KSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdXBlcmNsdXN0ZXJPcHRpb25zKHtzdXBlcmNsdXN0ZXJPcHRpb25zLCBjbHVzdGVyUHJvcGVydGllc30pIHtcbiAgICBpZiAoIWNsdXN0ZXJQcm9wZXJ0aWVzIHx8ICFzdXBlcmNsdXN0ZXJPcHRpb25zKSByZXR1cm4gc3VwZXJjbHVzdGVyT3B0aW9ucztcblxuICAgIGNvbnN0IG1hcEV4cHJlc3Npb25zID0ge307XG4gICAgY29uc3QgcmVkdWNlRXhwcmVzc2lvbnMgPSB7fTtcbiAgICBjb25zdCBnbG9iYWxzID0ge2FjY3VtdWxhdGVkOiBudWxsLCB6b29tOiAwfTtcbiAgICBjb25zdCBmZWF0dXJlID0ge3Byb3BlcnRpZXM6IG51bGx9O1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhjbHVzdGVyUHJvcGVydGllcyk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IFtvcGVyYXRvciwgbWFwRXhwcmVzc2lvbl0gPSBjbHVzdGVyUHJvcGVydGllc1trZXldO1xuXG4gICAgICAgIGNvbnN0IG1hcEV4cHJlc3Npb25QYXJzZWQgPSBjcmVhdGVFeHByZXNzaW9uKG1hcEV4cHJlc3Npb24pO1xuICAgICAgICBjb25zdCByZWR1Y2VFeHByZXNzaW9uUGFyc2VkID0gY3JlYXRlRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHR5cGVvZiBvcGVyYXRvciA9PT0gJ3N0cmluZycgPyBbb3BlcmF0b3IsIFsnYWNjdW11bGF0ZWQnXSwgWydnZXQnLCBrZXldXSA6IG9wZXJhdG9yKTtcblxuICAgICAgICBhc3NlcnQobWFwRXhwcmVzc2lvblBhcnNlZC5yZXN1bHQgPT09ICdzdWNjZXNzJyk7XG4gICAgICAgIGFzc2VydChyZWR1Y2VFeHByZXNzaW9uUGFyc2VkLnJlc3VsdCA9PT0gJ3N1Y2Nlc3MnKTtcblxuICAgICAgICBtYXBFeHByZXNzaW9uc1trZXldID0gbWFwRXhwcmVzc2lvblBhcnNlZC52YWx1ZTtcbiAgICAgICAgcmVkdWNlRXhwcmVzc2lvbnNba2V5XSA9IHJlZHVjZUV4cHJlc3Npb25QYXJzZWQudmFsdWU7XG4gICAgfVxuXG4gICAgc3VwZXJjbHVzdGVyT3B0aW9ucy5tYXAgPSAocG9pbnRQcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IHBvaW50UHJvcGVydGllcztcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSBtYXBFeHByZXNzaW9uc1trZXldLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH07XG4gICAgc3VwZXJjbHVzdGVyT3B0aW9ucy5yZWR1Y2UgPSAoYWNjdW11bGF0ZWQsIGNsdXN0ZXJQcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IGNsdXN0ZXJQcm9wZXJ0aWVzO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICBnbG9iYWxzLmFjY3VtdWxhdGVkID0gYWNjdW11bGF0ZWRba2V5XTtcbiAgICAgICAgICAgIGFjY3VtdWxhdGVkW2tleV0gPSByZWR1Y2VFeHByZXNzaW9uc1trZXldLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBzdXBlcmNsdXN0ZXJPcHRpb25zO1xufVxuXG5leHBvcnQgZGVmYXVsdCBHZW9KU09OV29ya2VyU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuXG5pbXBvcnQgU3R5bGVMYXllckluZGV4IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyX2luZGV4JztcbmltcG9ydCBWZWN0b3JUaWxlV29ya2VyU291cmNlIGZyb20gJy4vdmVjdG9yX3RpbGVfd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSBmcm9tICcuL3Jhc3Rlcl9kZW1fdGlsZV93b3JrZXJfc291cmNlJztcbmltcG9ydCBHZW9KU09OV29ya2VyU291cmNlIGZyb20gJy4vZ2VvanNvbl93b3JrZXJfc291cmNlJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7cGx1Z2luIGFzIGdsb2JhbFJUTFRleHRQbHVnaW59IGZyb20gJy4vcnRsX3RleHRfcGx1Z2luJztcbmltcG9ydCB7ZW5mb3JjZUNhY2hlU2l6ZUxpbWl0fSBmcm9tICcuLi91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZSc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJTb3VyY2UsXG4gICAgV29ya2VyVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyVGlsZUNhbGxiYWNrLFxuICAgIFdvcmtlckRFTVRpbGVDYWxsYmFjayxcbiAgICBUaWxlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9zb3VyY2Uvd29ya2VyX3NvdXJjZSc7XG5cbmltcG9ydCB0eXBlIHtXb3JrZXJHbG9iYWxTY29wZUludGVyZmFjZX0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29ya2VyIHtcbiAgICBzZWxmOiBXb3JrZXJHbG9iYWxTY29wZUludGVyZmFjZTtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgbGF5ZXJJbmRleGVzOiB7IFtzdHJpbmddOiBTdHlsZUxheWVySW5kZXggfTtcbiAgICBhdmFpbGFibGVJbWFnZXM6IHsgW3N0cmluZ106IEFycmF5PHN0cmluZz4gfTtcbiAgICB3b3JrZXJTb3VyY2VUeXBlczogeyBbc3RyaW5nXTogQ2xhc3M8V29ya2VyU291cmNlPiB9O1xuICAgIHdvcmtlclNvdXJjZXM6IHsgW3N0cmluZ106IHsgW3N0cmluZ106IHsgW3N0cmluZ106IFdvcmtlclNvdXJjZSB9IH0gfTtcbiAgICBkZW1Xb3JrZXJTb3VyY2VzOiB7IFtzdHJpbmddOiB7IFtzdHJpbmddOiBSYXN0ZXJERU1UaWxlV29ya2VyU291cmNlIH0gfTtcbiAgICByZWZlcnJlcjogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHNlbGY6IFdvcmtlckdsb2JhbFNjb3BlSW50ZXJmYWNlKSB7XG4gICAgICAgIHRoaXMuc2VsZiA9IHNlbGY7XG4gICAgICAgIHRoaXMuYWN0b3IgPSBuZXcgQWN0b3Ioc2VsZiwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5sYXllckluZGV4ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJbWFnZXMgPSB7fTtcblxuICAgICAgICB0aGlzLndvcmtlclNvdXJjZVR5cGVzID0ge1xuICAgICAgICAgICAgdmVjdG9yOiBWZWN0b3JUaWxlV29ya2VyU291cmNlLFxuICAgICAgICAgICAgZ2VvanNvbjogR2VvSlNPTldvcmtlclNvdXJjZVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFttYXBJZF1bc291cmNlVHlwZV1bc291cmNlTmFtZV0gPT4gd29ya2VyIHNvdXJjZSBpbnN0YW5jZVxuICAgICAgICB0aGlzLndvcmtlclNvdXJjZXMgPSB7fTtcbiAgICAgICAgdGhpcy5kZW1Xb3JrZXJTb3VyY2VzID0ge307XG5cbiAgICAgICAgdGhpcy5zZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlID0gKG5hbWU6IHN0cmluZywgV29ya2VyU291cmNlOiBDbGFzczxXb3JrZXJTb3VyY2U+KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy53b3JrZXJTb3VyY2VUeXBlc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgXCIke25hbWV9XCIgYWxyZWFkeSByZWdpc3RlcmVkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VUeXBlc1tuYW1lXSA9IFdvcmtlclNvdXJjZTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnNlbGYucmVnaXN0ZXJSVExUZXh0UGx1Z2luID0gKHJ0bFRleHRQbHVnaW46IHthcHBseUFyYWJpY1NoYXBpbmc6IEZ1bmN0aW9uLCBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ6IEZ1bmN0aW9uLCBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ/OiBGdW5jdGlvbn0pID0+IHtcbiAgICAgICAgICAgIGlmIChnbG9iYWxSVExUZXh0UGx1Z2luLmlzTG9hZGVkKCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JUTCB0ZXh0IHBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnbG9iYWxSVExUZXh0UGx1Z2luWydhcHBseUFyYWJpY1NoYXBpbmcnXSA9IHJ0bFRleHRQbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nO1xuICAgICAgICAgICAgZ2xvYmFsUlRMVGV4dFBsdWdpblsncHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0J10gPSBydGxUZXh0UGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDtcbiAgICAgICAgICAgIGdsb2JhbFJUTFRleHRQbHVnaW5bJ3Byb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dCddID0gcnRsVGV4dFBsdWdpbi5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc2V0UmVmZXJyZXIobWFwSUQ6IHN0cmluZywgcmVmZXJyZXI6IHN0cmluZykge1xuICAgICAgICB0aGlzLnJlZmVycmVyID0gcmVmZXJyZXI7XG4gICAgfVxuXG4gICAgc2V0SW1hZ2VzKG1hcElkOiBzdHJpbmcsIGltYWdlczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmF2YWlsYWJsZUltYWdlc1ttYXBJZF0gPSBpbWFnZXM7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgc2V0TGF5ZXJzKG1hcElkOiBzdHJpbmcsIGxheWVyczogQXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPiwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLnJlcGxhY2UobGF5ZXJzKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB1cGRhdGVMYXllcnMobWFwSWQ6IHN0cmluZywgcGFyYW1zOiB7bGF5ZXJzOiBBcnJheTxMYXllclNwZWNpZmljYXRpb24+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+fSwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLnVwZGF0ZShwYXJhbXMubGF5ZXJzLCBwYXJhbXMucmVtb3ZlZElkcyk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgbG9hZFRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycyAmIHt0eXBlOiBzdHJpbmd9LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGFzc2VydChwYXJhbXMudHlwZSk7XG4gICAgICAgIHRoaXMuZ2V0V29ya2VyU291cmNlKG1hcElkLCBwYXJhbXMudHlwZSwgcGFyYW1zLnNvdXJjZSkubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgbG9hZERFTVRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBXb3JrZXJERU1UaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlckRFTVRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldERFTVdvcmtlclNvdXJjZShtYXBJZCwgcGFyYW1zLnNvdXJjZSkubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVsb2FkVGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5yZWxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGFib3J0VGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5hYm9ydFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5yZW1vdmVUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbW92ZURFTVRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBUaWxlUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLmdldERFTVdvcmtlclNvdXJjZShtYXBJZCwgcGFyYW1zLnNvdXJjZSkucmVtb3ZlVGlsZShwYXJhbXMpO1xuICAgIH1cblxuICAgIHJlbW92ZVNvdXJjZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtzb3VyY2U6IHN0cmluZ30gJiB7dHlwZTogc3RyaW5nfSwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBhc3NlcnQocGFyYW1zLnR5cGUpO1xuICAgICAgICBhc3NlcnQocGFyYW1zLnNvdXJjZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdIHx8XG4gICAgICAgICAgICAhdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV0gfHxcbiAgICAgICAgICAgICF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3BhcmFtcy50eXBlXVtwYXJhbXMuc291cmNlXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV1bcGFyYW1zLnNvdXJjZV07XG4gICAgICAgIGRlbGV0ZSB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3BhcmFtcy50eXBlXVtwYXJhbXMuc291cmNlXTtcblxuICAgICAgICBpZiAod29ya2VyLnJlbW92ZVNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3b3JrZXIucmVtb3ZlU291cmNlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgYSB7QGxpbmsgV29ya2VyU291cmNlfSBzY3JpcHQgYXQgcGFyYW1zLnVybC4gIFRoZSBzY3JpcHQgaXMgcnVuXG4gICAgICogKHVzaW5nIGltcG9ydFNjcmlwdHMpIHdpdGggYHJlZ2lzdGVyV29ya2VyU291cmNlYCBpbiBzY29wZSwgd2hpY2ggaXMgYVxuICAgICAqIGZ1bmN0aW9uIHRha2luZyBgKG5hbWUsIHdvcmtlclNvdXJjZU9iamVjdClgLlxuICAgICAqICBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvYWRXb3JrZXJTb3VyY2UobWFwOiBzdHJpbmcsIHBhcmFtczogeyB1cmw6IHN0cmluZyB9LCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHBhcmFtcy51cmwpO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRSVExUZXh0UGx1Z2luKG1hcDogc3RyaW5nLCBwbHVnaW5VUkw6IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWdsb2JhbFJUTFRleHRQbHVnaW4uaXNMb2FkZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHBsdWdpblVSTCk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZ2xvYmFsUlRMVGV4dFBsdWdpbi5pc0xvYWRlZCgpID9cbiAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihgUlRMIFRleHQgUGx1Z2luIGZhaWxlZCB0byBpbXBvcnQgc2NyaXB0cyBmcm9tICR7cGx1Z2luVVJMfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEF2YWlsYWJsZUltYWdlcyhtYXBJZDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBhdmFpbGFibGVJbWFnZXMgPSB0aGlzLmF2YWlsYWJsZUltYWdlc1ttYXBJZF07XG5cbiAgICAgICAgaWYgKCFhdmFpbGFibGVJbWFnZXMpIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZUltYWdlcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUltYWdlcztcbiAgICB9XG5cbiAgICBnZXRMYXllckluZGV4KG1hcElkOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGxheWVySW5kZXhlcyA9IHRoaXMubGF5ZXJJbmRleGVzW21hcElkXTtcbiAgICAgICAgaWYgKCFsYXllckluZGV4ZXMpIHtcbiAgICAgICAgICAgIGxheWVySW5kZXhlcyA9IHRoaXMubGF5ZXJJbmRleGVzW21hcElkXSA9IG5ldyBTdHlsZUxheWVySW5kZXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGF5ZXJJbmRleGVzO1xuICAgIH1cblxuICAgIGdldFdvcmtlclNvdXJjZShtYXBJZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXSlcbiAgICAgICAgICAgIHRoaXMud29ya2VyU291cmNlc1ttYXBJZF0gPSB7fTtcbiAgICAgICAgaWYgKCF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3R5cGVdKVxuICAgICAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXSA9IHt9O1xuXG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXVtzb3VyY2VdKSB7XG4gICAgICAgICAgICAvLyB1c2UgYSB3cmFwcGVkIGFjdG9yIHNvIHRoYXQgd2UgY2FuIGF0dGFjaCBhIHRhcmdldCBtYXBJZCBwYXJhbVxuICAgICAgICAgICAgLy8gdG8gYW55IG1lc3NhZ2VzIGludm9rZWQgYnkgdGhlIFdvcmtlclNvdXJjZVxuICAgICAgICAgICAgY29uc3QgYWN0b3IgPSB7XG4gICAgICAgICAgICAgICAgc2VuZDogKHR5cGUsIGRhdGEsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0b3Iuc2VuZCh0eXBlLCBkYXRhLCBjYWxsYmFjaywgbWFwSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3R5cGVdW3NvdXJjZV0gPSBuZXcgKHRoaXMud29ya2VyU291cmNlVHlwZXNbdHlwZV06IGFueSkoKGFjdG9yOiBhbnkpLCB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLCB0aGlzLmdldEF2YWlsYWJsZUltYWdlcyhtYXBJZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bdHlwZV1bc291cmNlXTtcbiAgICB9XG5cbiAgICBnZXRERU1Xb3JrZXJTb3VyY2UobWFwSWQ6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlbVdvcmtlclNvdXJjZXNbbWFwSWRdKVxuICAgICAgICAgICAgdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXSA9IHt9O1xuXG4gICAgICAgIGlmICghdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXVtzb3VyY2VdKSB7XG4gICAgICAgICAgICB0aGlzLmRlbVdvcmtlclNvdXJjZXNbbWFwSWRdW3NvdXJjZV0gPSBuZXcgUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtV29ya2VyU291cmNlc1ttYXBJZF1bc291cmNlXTtcbiAgICB9XG5cbiAgICBlbmZvcmNlQ2FjaGVTaXplTGltaXQobWFwSWQ6IHN0cmluZywgbGltaXQ6IG51bWJlcikge1xuICAgICAgICBlbmZvcmNlQ2FjaGVTaXplTGltaXQobGltaXQpO1xuICAgIH1cbn1cblxuLyogZ2xvYmFsIHNlbGYsIFdvcmtlckdsb2JhbFNjb3BlICovXG5pZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSkge1xuICAgIHNlbGYud29ya2VyID0gbmV3IFdvcmtlcihzZWxmKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBpc1N1cHBvcnRlZDtcbn0gZWxzZSBpZiAod2luZG93KSB7XG4gICAgd2luZG93Lm1hcGJveGdsID0gd2luZG93Lm1hcGJveGdsIHx8IHt9O1xuICAgIHdpbmRvdy5tYXBib3hnbC5zdXBwb3J0ZWQgPSBpc1N1cHBvcnRlZDtcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0cyBNYXBib3ggR0wgSlNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZmFsc2VdIFJldHVybiBgZmFsc2VgXG4gKiAgIGlmIHRoZSBwZXJmb3JtYW5jZSBvZiBNYXBib3ggR0wgSlMgd291bGQgYmUgZHJhbWF0aWNhbGx5IHdvcnNlIHRoYW5cbiAqICAgZXhwZWN0ZWQgKGkuZS4gYSBzb2Z0d2FyZSByZW5kZXJlciBpcyB3b3VsZCBiZSB1c2VkKVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTdXBwb3J0ZWQob3B0aW9ucykge1xuICAgIHJldHVybiAhIShcbiAgICAgICAgaXNCcm93c2VyKCkgJiZcbiAgICAgICAgaXNBcnJheVN1cHBvcnRlZCgpICYmXG4gICAgICAgIGlzRnVuY3Rpb25TdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc09iamVjdFN1cHBvcnRlZCgpICYmXG4gICAgICAgIGlzSlNPTlN1cHBvcnRlZCgpICYmXG4gICAgICAgIGlzV29ya2VyU3VwcG9ydGVkKCkgJiZcbiAgICAgICAgaXNVaW50OENsYW1wZWRBcnJheVN1cHBvcnRlZCgpICYmXG4gICAgICAgIGlzQXJyYXlCdWZmZXJTdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVkKG9wdGlvbnMgJiYgb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGlzQnJvd3NlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbn1cblxuZnVuY3Rpb24gaXNBcnJheVN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBBcnJheS5wcm90b3R5cGUgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmV2ZXJ5ICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5tYXAgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNvbWUgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb25TdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZSAmJiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgT2JqZWN0LmtleXMgJiZcbiAgICAgICAgT2JqZWN0LmNyZWF0ZSAmJlxuICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiZcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgJiZcbiAgICAgICAgT2JqZWN0LmlzU2VhbGVkICYmXG4gICAgICAgIE9iamVjdC5pc0Zyb3plbiAmJlxuICAgICAgICBPYmplY3QuaXNFeHRlbnNpYmxlICYmXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiZcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICYmXG4gICAgICAgIE9iamVjdC5zZWFsICYmXG4gICAgICAgIE9iamVjdC5mcmVlemUgJiZcbiAgICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gaXNKU09OU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiAnSlNPTicgaW4gd2luZG93ICYmICdwYXJzZScgaW4gSlNPTiAmJiAnc3RyaW5naWZ5JyBpbiBKU09OO1xufVxuXG5mdW5jdGlvbiBpc1dvcmtlclN1cHBvcnRlZCgpIHtcbiAgICBpZiAoISgnV29ya2VyJyBpbiB3aW5kb3cgJiYgJ0Jsb2InIGluIHdpbmRvdyAmJiAnVVJMJyBpbiB3aW5kb3cpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFsnJ10sIHsgdHlwZTogJ3RleHQvamF2YXNjcmlwdCcgfSk7XG4gICAgdmFyIHdvcmtlclVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgdmFyIHN1cHBvcnRlZDtcbiAgICB2YXIgd29ya2VyO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVUkwpO1xuICAgICAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHdvcmtlcikge1xuICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgfVxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwod29ya2VyVVJMKTtcblxuICAgIHJldHVybiBzdXBwb3J0ZWQ7XG59XG5cbi8vIElFMTEgb25seSBzdXBwb3J0cyBgVWludDhDbGFtcGVkQXJyYXlgIGFzIG9mIHZlcnNpb25cbi8vIFtLQjI5Mjk0MzddKGh0dHBzOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2VuLXVzL2tiLzI5Mjk0MzcpXG5mdW5jdGlvbiBpc1VpbnQ4Q2xhbXBlZEFycmF5U3VwcG9ydGVkKCkge1xuICAgIHJldHVybiAnVWludDhDbGFtcGVkQXJyYXknIGluIHdpbmRvdztcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtc3VwcG9ydGVkL2lzc3Vlcy8xOVxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3O1xufVxuXG52YXIgaXNXZWJHTFN1cHBvcnRlZENhY2hlID0ge307XG5mdW5jdGlvbiBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVkKGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpIHtcblxuICAgIGlmIChpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF0gPSBpc1dlYkdMU3VwcG9ydGVkKGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF07XG59XG5cbmlzU3VwcG9ydGVkLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMgPSB7XG4gICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICBhbHBoYTogdHJ1ZSxcbiAgICBzdGVuY2lsOiB0cnVlLFxuICAgIGRlcHRoOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc1dlYkdMU3VwcG9ydGVkKGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpIHtcblxuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIHZhciBhdHRyaWJ1dGVzID0gT2JqZWN0LmNyZWF0ZShpc1N1cHBvcnRlZC53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtcbiAgICBhdHRyaWJ1dGVzLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgPSBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O1xuXG4gICAgaWYgKGNhbnZhcy5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2FudmFzLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCd3ZWJnbCcsIGF0dHJpYnV0ZXMpIHx8XG4gICAgICAgICAgICBjYW52YXMucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGF0dHJpYnV0ZXMpXG4gICAgICAgICk7XG5cbiAgICB9IGVsc2UgaWYgKGNhbnZhcy5zdXBwb3J0c0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNhbnZhcy5zdXBwb3J0c0NvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIGNhbnZhcy5zdXBwb3J0c0NvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGF0dHJpYnV0ZXMpXG4gICAgICAgICk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93IHN0cmljdFxuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5jb25zdCBET00gPSB7fTtcbmV4cG9ydCBkZWZhdWx0IERPTTtcblxuRE9NLmNyZWF0ZSA9IGZ1bmN0aW9uICh0YWdOYW1lOiBzdHJpbmcsIGNsYXNzTmFtZTogP3N0cmluZywgY29udGFpbmVyPzogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBlbCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICAgIGlmIChjbGFzc05hbWUgIT09IHVuZGVmaW5lZCkgZWwuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgIGlmIChjb250YWluZXIpIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbCk7XG4gICAgcmV0dXJuIGVsO1xufTtcblxuRE9NLmNyZWF0ZU5TID0gZnVuY3Rpb24gKG5hbWVzcGFjZVVSSTogc3RyaW5nLCB0YWdOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCB0YWdOYW1lKTtcbiAgICByZXR1cm4gZWw7XG59O1xuXG5jb25zdCBkb2NTdHlsZSA9IHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XG5cbmZ1bmN0aW9uIHRlc3RQcm9wKHByb3BzKSB7XG4gICAgaWYgKCFkb2NTdHlsZSkgcmV0dXJuIHByb3BzWzBdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHByb3BzW2ldIGluIGRvY1N0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BzWzBdO1xufVxuXG5jb25zdCBzZWxlY3RQcm9wID0gdGVzdFByb3AoWyd1c2VyU2VsZWN0JywgJ01velVzZXJTZWxlY3QnLCAnV2Via2l0VXNlclNlbGVjdCcsICdtc1VzZXJTZWxlY3QnXSk7XG5sZXQgdXNlclNlbGVjdDtcblxuRE9NLmRpc2FibGVEcmFnID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChkb2NTdHlsZSAmJiBzZWxlY3RQcm9wKSB7XG4gICAgICAgIHVzZXJTZWxlY3QgPSBkb2NTdHlsZVtzZWxlY3RQcm9wXTtcbiAgICAgICAgZG9jU3R5bGVbc2VsZWN0UHJvcF0gPSAnbm9uZSc7XG4gICAgfVxufTtcblxuRE9NLmVuYWJsZURyYWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGRvY1N0eWxlICYmIHNlbGVjdFByb3ApIHtcbiAgICAgICAgZG9jU3R5bGVbc2VsZWN0UHJvcF0gPSB1c2VyU2VsZWN0O1xuICAgIH1cbn07XG5cbmNvbnN0IHRyYW5zZm9ybVByb3AgPSB0ZXN0UHJvcChbJ3RyYW5zZm9ybScsICdXZWJraXRUcmFuc2Zvcm0nXSk7XG5cbkRPTS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbihlbDogSFRNTEVsZW1lbnQsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNzc1NFxuICAgIC8vICRGbG93Rml4TWVcbiAgICBlbC5zdHlsZVt0cmFuc2Zvcm1Qcm9wXSA9IHZhbHVlO1xufTtcblxuLy8gRmVhdHVyZSBkZXRlY3Rpb24gZm9yIHtwYXNzaXZlOiBmYWxzZX0gc3VwcG9ydCBpbiBhZGQvcmVtb3ZlRXZlbnRMaXN0ZW5lci5cbmxldCBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG5cbnRyeSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgIC8vICRGbG93Rml4TWVcbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCBcInBhc3NpdmVcIiwge1xuICAgICAgICBnZXQoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLCBvcHRpb25zLCBvcHRpb25zKTtcbn0gY2F0Y2ggKGVycikge1xuICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZTtcbn1cblxuRE9NLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbih0YXJnZXQ6ICosIHR5cGU6ICosIGNhbGxiYWNrOiAqLCBvcHRpb25zOiB7cGFzc2l2ZT86IGJvb2xlYW4sIGNhcHR1cmU/OiBib29sZWFufSA9IHt9KSB7XG4gICAgaWYgKCdwYXNzaXZlJyBpbiBvcHRpb25zICYmIHBhc3NpdmVTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zLmNhcHR1cmUpO1xuICAgIH1cbn07XG5cbkRPTS5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24odGFyZ2V0OiAqLCB0eXBlOiAqLCBjYWxsYmFjazogKiwgb3B0aW9uczoge3Bhc3NpdmU/OiBib29sZWFuLCBjYXB0dXJlPzogYm9vbGVhbn0gPSB7fSkge1xuICAgIGlmICgncGFzc2l2ZScgaW4gb3B0aW9ucyAmJiBwYXNzaXZlU3VwcG9ydGVkKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucy5jYXB0dXJlKTtcbiAgICB9XG59O1xuXG4vLyBTdXBwcmVzcyB0aGUgbmV4dCBjbGljaywgYnV0IG9ubHkgaWYgaXQncyBpbW1lZGlhdGUuXG5jb25zdCBzdXBwcmVzc0NsaWNrOiBNb3VzZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHN1cHByZXNzQ2xpY2ssIHRydWUpO1xufTtcblxuRE9NLnN1cHByZXNzQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdXBwcmVzc0NsaWNrLCB0cnVlKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHN1cHByZXNzQ2xpY2ssIHRydWUpO1xuICAgIH0sIDApO1xufTtcblxuRE9NLm1vdXNlUG9zID0gZnVuY3Rpb24gKGVsOiBIVE1MRWxlbWVudCwgZTogTW91c2VFdmVudCB8IHdpbmRvdy5Ub3VjaEV2ZW50IHwgVG91Y2gpIHtcbiAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgdCA9IHdpbmRvdy5Ub3VjaEV2ZW50ICYmIChlIGluc3RhbmNlb2Ygd2luZG93LlRvdWNoRXZlbnQpID8gZS50b3VjaGVzWzBdIDogZTtcbiAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICB0LmNsaWVudFggLSByZWN0LmxlZnQgLSBlbC5jbGllbnRMZWZ0LFxuICAgICAgICB0LmNsaWVudFkgLSByZWN0LnRvcCAtIGVsLmNsaWVudFRvcFxuICAgICk7XG59O1xuXG5ET00udG91Y2hQb3MgPSBmdW5jdGlvbiAoZWw6IEhUTUxFbGVtZW50LCBlOiBUb3VjaEV2ZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICBwb2ludHMgPSBbXTtcbiAgICBjb25zdCB0b3VjaGVzID0gKGUudHlwZSA9PT0gJ3RvdWNoZW5kJykgPyBlLmNoYW5nZWRUb3VjaGVzIDogZS50b3VjaGVzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwb2ludHMucHVzaChuZXcgUG9pbnQoXG4gICAgICAgICAgICB0b3VjaGVzW2ldLmNsaWVudFggLSByZWN0LmxlZnQgLSBlbC5jbGllbnRMZWZ0LFxuICAgICAgICAgICAgdG91Y2hlc1tpXS5jbGllbnRZIC0gcmVjdC50b3AgLSBlbC5jbGllbnRUb3BcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5ET00ubW91c2VCdXR0b24gPSBmdW5jdGlvbiAoZTogTW91c2VFdmVudCkge1xuICAgIGFzc2VydChlLnR5cGUgPT09ICdtb3VzZWRvd24nIHx8IGUudHlwZSA9PT0gJ21vdXNldXAnKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdy5JbnN0YWxsVHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCcgJiYgZS5idXR0b24gPT09IDIgJiYgZS5jdHJsS2V5ICYmXG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0udG9VcHBlckNhc2UoKS5pbmRleE9mKCdNQUMnKSA+PSAwKSB7XG4gICAgICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzMxMzE6XG4gICAgICAgIC8vIEZpcmVmb3ggKGRldGVjdGVkIGJ5IEluc3RhbGxUcmlnZ2VyKSBvbiBNYWMgZGV0ZXJtaW5lcyBlLmJ1dHRvbiA9IDIgd2hlblxuICAgICAgICAvLyB1c2luZyBDb250cm9sICsgbGVmdCBjbGlja1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGUuYnV0dG9uO1xufTtcblxuRE9NLnJlbW92ZSA9IGZ1bmN0aW9uKG5vZGU6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgfVxufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0SlNPTiwgZ2V0SW1hZ2UsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4vc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYmFzZVVSTDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFuYWdlcjogUmVxdWVzdE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0cmluZ106IFN0eWxlSW1hZ2V9Pik6IENhbmNlbGFibGUge1xuICAgIGxldCBqc29uOiBhbnksIGltYWdlLCBlcnJvcjtcbiAgICBjb25zdCBmb3JtYXQgPSBicm93c2VyLmRldmljZVBpeGVsUmF0aW8gPiAxID8gJ0AyeCcgOiAnJztcblxuICAgIGxldCBqc29uUmVxdWVzdCA9IGdldEpTT04ocmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChyZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTcHJpdGVVUkwoYmFzZVVSTCwgZm9ybWF0LCAnLmpzb24nKSwgUmVzb3VyY2VUeXBlLlNwcml0ZUpTT04pLCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9PYmplY3QpID0+IHtcbiAgICAgICAganNvblJlcXVlc3QgPSBudWxsO1xuICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIGpzb24gPSBkYXRhO1xuICAgICAgICAgICAgbWF5YmVDb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgaW1hZ2VSZXF1ZXN0ID0gZ2V0SW1hZ2UocmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChyZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTcHJpdGVVUkwoYmFzZVVSTCwgZm9ybWF0LCAnLnBuZycpLCBSZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLCAoZXJyLCBpbWcpID0+IHtcbiAgICAgICAgaW1hZ2VSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICBpbWFnZSA9IGltZztcbiAgICAgICAgICAgIG1heWJlQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWF5YmVDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoanNvbiAmJiBpbWFnZSkge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1hZ2UpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4ganNvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCB4LCB5LCBzZGYsIHBpeGVsUmF0aW99ID0ganNvbltpZF07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBSR0JBSW1hZ2Uoe3dpZHRoLCBoZWlnaHR9KTtcbiAgICAgICAgICAgICAgICBSR0JBSW1hZ2UuY29weShpbWFnZURhdGEsIGRhdGEsIHt4LCB5fSwge3g6IDAsIHk6IDB9LCB7d2lkdGgsIGhlaWdodH0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpZF0gPSB7ZGF0YSwgcGl4ZWxSYXRpbywgc2RmfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGNhbmNlbCgpIHtcbiAgICAgICAgICAgIGlmIChqc29uUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIGpzb25SZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIGpzb25SZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbWFnZVJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBpbWFnZVJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgaW1hZ2VSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuXG5leHBvcnQgdHlwZSBTdHlsZUltYWdlID0ge1xuICAgIGRhdGE6IFJHQkFJbWFnZSxcbiAgICBwaXhlbFJhdGlvOiBudW1iZXIsXG4gICAgc2RmOiBib29sZWFuLFxuICAgIHZlcnNpb246IG51bWJlcixcbiAgICBoYXNSZW5kZXJDYWxsYmFjaz86IGJvb2xlYW4sXG4gICAgdXNlckltYWdlPzogU3R5bGVJbWFnZUludGVyZmFjZVxufTtcblxuZXhwb3J0IHR5cGUgU3R5bGVJbWFnZUludGVyZmFjZSA9IHtcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGRhdGE6IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheSxcbiAgICByZW5kZXI/OiAoKSA9PiB2b2lkLFxuICAgIG9uQWRkPzogKG1hcDogTWFwLCBpZDogc3RyaW5nKSA9PiB2b2lkLFxuICAgIG9uUmVtb3ZlPzogKCkgPT4gdm9pZFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclN0eWxlSW1hZ2UoaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICBjb25zdCB7dXNlckltYWdlfSA9IGltYWdlO1xuICAgIGlmICh1c2VySW1hZ2UgJiYgdXNlckltYWdlLnJlbmRlcikge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gdXNlckltYWdlLnJlbmRlcigpO1xuICAgICAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICAgICAgaW1hZ2UuZGF0YS5yZXBsYWNlKG5ldyBVaW50OEFycmF5KHVzZXJJbWFnZS5kYXRhLmJ1ZmZlcikpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHN0eWxlIGltYWdlcy4gVGhpcyBpcyBhIHNwZWNpZmljYXRpb24gZm9yXG4gKiBpbXBsZW1lbnRlcnMgdG8gbW9kZWw6IGl0IGlzIG5vdCBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogSW1hZ2VzIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBjYW4gYmUgcmVkcmF3biBmb3IgZXZlcnkgZnJhbWUuIFRoZXkgY2FuIGJlIHVzZWQgdG8gYW5pbWF0ZVxuICogaWNvbnMgYW5kIHBhdHRlcm5zIG9yIG1ha2UgdGhlbSByZXNwb25kIHRvIHVzZXIgaW5wdXQuIFN0eWxlIGltYWdlcyBjYW4gaW1wbGVtZW50IGFcbiAqIHtAbGluayBTdHlsZUltYWdlSW50ZXJmYWNlI3JlbmRlcn0gbWV0aG9kLiBUaGUgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSBmcmFtZSBhbmRcbiAqIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgaW1hZ2UuXG4gKlxuICogQGludGVyZmFjZSBTdHlsZUltYWdlSW50ZXJmYWNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7VWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5fSBkYXRhXG4gKlxuICogQHNlZSBbQWRkIGFuIGFuaW1hdGVkIGljb24gdG8gdGhlIG1hcC5dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS1hbmltYXRlZC8pXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBmbGFzaGluZ1NxdWFyZSA9IHtcbiAqICAgICB3aWR0aDogNjQsXG4gKiAgICAgaGVpZ2h0OiA2NCxcbiAqICAgICBkYXRhOiBuZXcgVWludDhBcnJheSg2NCAqIDY0ICogNCksXG4gKlxuICogICAgIG9uQWRkOiBmdW5jdGlvbihtYXApIHtcbiAqICAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gKiAgICAgfSxcbiAqXG4gKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICAgICAgLy8ga2VlcCByZXBhaW50aW5nIHdoaWxlIHRoZSBpY29uIGlzIG9uIHRoZSBtYXBcbiAqICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAqXG4gKiAgICAgICAgIC8vIGFsdGVybmF0ZSBiZXR3ZWVuIGJsYWNrIGFuZCB3aGl0ZSBiYXNlZCBvbiB0aGUgdGltZVxuICogICAgICAgICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKSAlIDIgPT09IDAgID8gMjU1IDogMDtcbiAqXG4gKiAgICAgICAgIC8vIGNoZWNrIGlmIGltYWdlIG5lZWRzIHRvIGJlIGNoYW5nZWRcbiAqICAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnByZXZpb3VzVmFsdWUpIHtcbiAqICAgICAgICAgICAgIHRoaXMucHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICpcbiAqICAgICAgICAgICAgIHZhciBieXRlc1BlclBpeGVsID0gNDtcbiAqICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG4gKiAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCB0aGlzLmhlaWdodDsgeSsrKSB7XG4gKiAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAoeSAqIHRoaXMud2lkdGggKyB4KSAqIGJ5dGVzUGVyUGl4ZWw7XG4gKiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtvZmZzZXQgKyAwXSA9IHZhbHVlO1xuICogICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbb2Zmc2V0ICsgMV0gPSB2YWx1ZTtcbiAqICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW29mZnNldCArIDJdID0gdmFsdWU7XG4gKiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtvZmZzZXQgKyAzXSA9IDI1NTtcbiAqICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICB9XG4gKlxuICogICAgICAgICAgICAgLy8gcmV0dXJuIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaW1hZ2UgY2hhbmdlZFxuICogICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gKiAgICAgICAgIH1cbiAqICAgICB9XG4gKiAgfVxuICpcbiAqICBtYXAuYWRkSW1hZ2UoJ2ZsYXNoaW5nX3NxdWFyZScsIGZsYXNoaW5nU3F1YXJlKTtcbiAqL1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIGJlZm9yZSBldmVyeSBmcmFtZSB3aGVyZSB0aGUgaWNvbiB3aWxsIGJlIHVzZWQuXG4gKiBUaGUgbWV0aG9kIGNhbiBvcHRpb25hbGx5IHVwZGF0ZSB0aGUgaW1hZ2UncyBgZGF0YWAgbWVtYmVyIHdpdGggYSBuZXcgaW1hZ2UuXG4gKlxuICogSWYgdGhlIG1ldGhvZCB1cGRhdGVzIHRoZSBpbWFnZSBpdCBtdXN0IHJldHVybiBgdHJ1ZWAgdG8gY29tbWl0IHRoZSBjaGFuZ2UuXG4gKiBJZiB0aGUgbWV0aG9kIHJldHVybnMgYGZhbHNlYCBvciBub3RoaW5nIHRoZSBpbWFnZSBpcyBhc3N1bWVkIHRvIG5vdCBoYXZlIGNoYW5nZWQuXG4gKlxuICogSWYgdXBkYXRlcyBhcmUgaW5mcmVxdWVudCBpdCBtYXliZSBlYXNpZXIgdG8gdXNlIHtAbGluayBNYXAjdXBkYXRlSW1hZ2V9IHRvIHVwZGF0ZVxuICogdGhlIGltYWdlIGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIFN0eWxlSW1hZ2VJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgcmVuZGVyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhpcyBtZXRob2QgdXBkYXRlZCB0aGUgaW1hZ2UuIGBmYWxzZWAgaWYgdGhlIGltYWdlIHdhcyBub3QgY2hhbmdlZC5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgbGF5ZXIgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIE1hcCB3aXRoIHtAbGluayBNYXAjYWRkSW1hZ2V9LlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIFN0eWxlSW1hZ2VJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgb25BZGRcbiAqIEBwYXJhbSB7TWFwfSBtYXAgVGhlIE1hcCB0aGlzIGN1c3RvbSBsYXllciB3YXMganVzdCBhZGRlZCB0by5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgaWNvbiBpcyByZW1vdmVkIGZyb20gdGhlIG1hcCB3aXRoIHtAbGluayBNYXAjcmVtb3ZlSW1hZ2V9LlxuICogVGhpcyBnaXZlcyB0aGUgaW1hZ2UgYSBjaGFuY2UgdG8gY2xlYW4gdXAgcmVzb3VyY2VzIGFuZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgU3R5bGVJbWFnZUludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICovXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgcG90cGFjayBmcm9tICdwb3RwYWNrJztcblxuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcbmltcG9ydCB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtyZW5kZXJTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtCaW59IGZyb20gJ3BvdHBhY2snO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbnR5cGUgUGF0dGVybiA9IHtcbiAgICBiaW46IEJpbixcbiAgICBwb3NpdGlvbjogSW1hZ2VQb3NpdGlvblxufTtcblxuLy8gV2hlbiBjb3BpZWQgaW50byB0aGUgYXRsYXMgdGV4dHVyZSwgaW1hZ2UgZGF0YSBpcyBwYWRkZWQgYnkgb25lIHBpeGVsIG9uIGVhY2ggc2lkZS4gSWNvblxuLy8gaW1hZ2VzIGFyZSBwYWRkZWQgd2l0aCBmdWxseSB0cmFuc3BhcmVudCBwaXhlbHMsIHdoaWxlIHBhdHRlcm4gaW1hZ2VzIGFyZSBwYWRkZWQgd2l0aCBhXG4vLyBjb3B5IG9mIHRoZSBpbWFnZSBkYXRhIHdyYXBwZWQgZnJvbSB0aGUgb3Bwb3NpdGUgc2lkZS4gSW4gYm90aCBjYXNlcywgdGhpcyBlbnN1cmVzIHRoZVxuLy8gY29ycmVjdCBiZWhhdmlvciBvZiBHTF9MSU5FQVIgdGV4dHVyZSBzYW1wbGluZyBtb2RlLlxuY29uc3QgcGFkZGluZyA9IDE7XG5cbi8qXG4gICAgSW1hZ2VNYW5hZ2VyIGRvZXMgdGhyZWUgdGhpbmdzOlxuXG4gICAgICAgIDEuIFRyYWNrcyByZXF1ZXN0cyBmb3IgaWNvbiBpbWFnZXMgZnJvbSB0aWxlIHdvcmtlcnMgYW5kIHNlbmRzIHJlc3BvbnNlcyB3aGVuIHRoZSByZXF1ZXN0cyBhcmUgZnVsZmlsbGVkLlxuICAgICAgICAyLiBCdWlsZHMgYSB0ZXh0dXJlIGF0bGFzIGZvciBwYXR0ZXJuIGltYWdlcy5cbiAgICAgICAgMy4gUmVyZW5kZXJzIHJlbmRlcmFibGUgaW1hZ2VzIG9uY2UgcGVyIGZyYW1lXG5cbiAgICBUaGVzZSBhcmUgZGlzcGFyYXRlIHJlc3BvbnNpYmlsaXRpZXMgYW5kIHNob3VsZCBldmVudHVhbGx5IGJlIGhhbmRsZWQgYnkgZGlmZmVyZW50IGNsYXNzZXMuIFdoZW4gd2UgaW1wbGVtZW50XG4gICAgZGF0YS1kcml2ZW4gc3VwcG9ydCBmb3IgYCotcGF0dGVybmAsIHdlJ2xsIGxpa2VseSB1c2UgcGVyLWJ1Y2tldCBwYXR0ZXJuIGF0bGFzZXMsIGFuZCB0aGF0IHdvdWxkIGJlIGEgZ29vZCB0aW1lXG4gICAgdG8gcmVmYWN0b3IgdGhpcy5cbiovXG5jbGFzcyBJbWFnZU1hbmFnZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBpbWFnZXM6IHtbc3RyaW5nXTogU3R5bGVJbWFnZX07XG4gICAgdXBkYXRlZEltYWdlczoge1tzdHJpbmddOiBib29sZWFufTtcbiAgICBjYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWU6IHtbc3RyaW5nXTogYm9vbGVhbn07XG4gICAgbG9hZGVkOiBib29sZWFuO1xuICAgIHJlcXVlc3RvcnM6IEFycmF5PHtpZHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0cmluZ106IFN0eWxlSW1hZ2V9Pn0+O1xuXG4gICAgcGF0dGVybnM6IHtbc3RyaW5nXTogUGF0dGVybn07XG4gICAgYXRsYXNJbWFnZTogUkdCQUltYWdlO1xuICAgIGF0bGFzVGV4dHVyZTogP1RleHR1cmU7XG4gICAgZGlydHk6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZXMgPSB7fTtcbiAgICAgICAgdGhpcy51cGRhdGVkSW1hZ2VzID0ge307XG4gICAgICAgIHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lID0ge307XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVxdWVzdG9ycyA9IFtdO1xuXG4gICAgICAgIHRoaXMucGF0dGVybnMgPSB7fTtcbiAgICAgICAgdGhpcy5hdGxhc0ltYWdlID0gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IDEsIGhlaWdodDogMX0pO1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0xvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVkO1xuICAgIH1cblxuICAgIHNldExvYWRlZChsb2FkZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkID09PSBsb2FkZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGVkID0gbG9hZGVkO1xuXG4gICAgICAgIGlmIChsb2FkZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qge2lkcywgY2FsbGJhY2t9IG9mIHRoaXMucmVxdWVzdG9ycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmeShpZHMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVxdWVzdG9ycyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2UoaWQ6IHN0cmluZyk6ID9TdHlsZUltYWdlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzW2lkXTtcbiAgICB9XG5cbiAgICBhZGRJbWFnZShpZDogc3RyaW5nLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaW1hZ2VzW2lkXSk7XG4gICAgICAgIHRoaXMuaW1hZ2VzW2lkXSA9IGltYWdlO1xuICAgIH1cblxuICAgIHVwZGF0ZUltYWdlKGlkOiBzdHJpbmcsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGNvbnN0IG9sZEltYWdlID0gdGhpcy5pbWFnZXNbaWRdO1xuICAgICAgICBhc3NlcnQob2xkSW1hZ2UpO1xuICAgICAgICBhc3NlcnQob2xkSW1hZ2UuZGF0YS53aWR0aCA9PT0gaW1hZ2UuZGF0YS53aWR0aCk7XG4gICAgICAgIGFzc2VydChvbGRJbWFnZS5kYXRhLmhlaWdodCA9PT0gaW1hZ2UuZGF0YS5oZWlnaHQpO1xuICAgICAgICBpbWFnZS52ZXJzaW9uID0gb2xkSW1hZ2UudmVyc2lvbiArIDE7XG4gICAgICAgIHRoaXMuaW1hZ2VzW2lkXSA9IGltYWdlO1xuICAgICAgICB0aGlzLnVwZGF0ZWRJbWFnZXNbaWRdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW1vdmVJbWFnZShpZDogc3RyaW5nKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLmltYWdlc1tpZF0pO1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMucGF0dGVybnNbaWRdO1xuXG4gICAgICAgIGlmIChpbWFnZS51c2VySW1hZ2UgJiYgaW1hZ2UudXNlckltYWdlLm9uUmVtb3ZlKSB7XG4gICAgICAgICAgICBpbWFnZS51c2VySW1hZ2Uub25SZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxpc3RJbWFnZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmltYWdlcyk7XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2VzKGlkczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IENhbGxiYWNrPHtbc3RyaW5nXTogU3R5bGVJbWFnZX0+KSB7XG4gICAgICAgIC8vIElmIHRoZSBzcHJpdGUgaGFzIGJlZW4gbG9hZGVkLCBvciBpZiBhbGwgdGhlIGljb24gZGVwZW5kZW5jaWVzIGFyZSBhbHJlYWR5IHByZXNlbnRcbiAgICAgICAgLy8gKGkuZS4gaWYgdGhleSd2ZSBiZWVuIGFkZGVkIHZpYSBydW50aW1lIHN0eWxpbmcpLCB0aGVuIG5vdGlmeSB0aGUgcmVxdWVzdG9yIGltbWVkaWF0ZWx5LlxuICAgICAgICAvLyBPdGhlcndpc2UsIGRlbGF5IG5vdGlmaWNhdGlvbiB1bnRpbCB0aGUgc3ByaXRlIGlzIGxvYWRlZC4gQXQgdGhhdCBwb2ludCwgaWYgYW55IG9mIHRoZVxuICAgICAgICAvLyBkZXBlbmRlbmNpZXMgYXJlIHN0aWxsIHVuYXZhaWxhYmxlLCB3ZSdsbCBqdXN0IGFzc3VtZSB0aGV5IGFyZSBwZXJtYW5lbnRseSBtaXNzaW5nLlxuICAgICAgICBsZXQgaGFzQWxsRGVwZW5kZW5jaWVzID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGVkKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmltYWdlc1tpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQWxsRGVwZW5kZW5jaWVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGVkKCkgfHwgaGFzQWxsRGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoaWRzLCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RvcnMucHVzaCh7aWRzLCBjYWxsYmFja30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX25vdGlmeShpZHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0cmluZ106IFN0eWxlSW1hZ2V9Pikge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW1hZ2VzW2lkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3N0eWxlaW1hZ2VtaXNzaW5nJywge2lkfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlc1tpZF07XG4gICAgICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAvLyBDbG9uZSB0aGUgaW1hZ2Ugc28gdGhhdCBvdXIgb3duIGNvcHkgb2YgaXRzIEFycmF5QnVmZmVyIGRvZXNuJ3QgZ2V0IHRyYW5zZmVycmVkLlxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW2lkXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW1hZ2UuZGF0YS5jbG9uZSgpLFxuICAgICAgICAgICAgICAgICAgICBwaXhlbFJhdGlvOiBpbWFnZS5waXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgICAgICBzZGY6IGltYWdlLnNkZixcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogaW1hZ2UudmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgaGFzUmVuZGVyQ2FsbGJhY2s6IEJvb2xlYW4oaW1hZ2UudXNlckltYWdlICYmIGltYWdlLnVzZXJJbWFnZS5yZW5kZXIpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoYEltYWdlIFwiJHtpZH1cIiBjb3VsZCBub3QgYmUgbG9hZGVkLiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIGFkZGVkIHRoZSBpbWFnZSB3aXRoIG1hcC5hZGRJbWFnZSgpIG9yIGEgXCJzcHJpdGVcIiBwcm9wZXJ0eSBpbiB5b3VyIHN0eWxlLiBZb3UgY2FuIHByb3ZpZGUgbWlzc2luZyBpbWFnZXMgYnkgbGlzdGVuaW5nIGZvciB0aGUgXCJzdHlsZWltYWdlbWlzc2luZ1wiIG1hcCBldmVudC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICAvLyBQYXR0ZXJuIHN0dWZmXG5cbiAgICBnZXRQaXhlbFNpemUoKSB7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHRoaXMuYXRsYXNJbWFnZTtcbiAgICAgICAgcmV0dXJuIHt3aWR0aCwgaGVpZ2h0fTtcbiAgICB9XG5cbiAgICBnZXRQYXR0ZXJuKGlkOiBzdHJpbmcpOiA/SW1hZ2VQb3NpdGlvbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnBhdHRlcm5zW2lkXTtcblxuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuZ2V0SW1hZ2UoaWQpO1xuICAgICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXR0ZXJuICYmIHBhdHRlcm4ucG9zaXRpb24udmVyc2lvbiA9PT0gaW1hZ2UudmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4ucG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNvbnN0IHcgPSBpbWFnZS5kYXRhLndpZHRoICsgcGFkZGluZyAqIDI7XG4gICAgICAgICAgICBjb25zdCBoID0gaW1hZ2UuZGF0YS5oZWlnaHQgKyBwYWRkaW5nICogMjtcbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IHt3LCBoLCB4OiAwLCB5OiAwfTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gbmV3IEltYWdlUG9zaXRpb24oYmluLCBpbWFnZSk7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm5zW2lkXSA9IHtiaW4sIHBvc2l0aW9ufTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdHRlcm4ucG9zaXRpb24udmVyc2lvbiA9IGltYWdlLnZlcnNpb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVQYXR0ZXJuQXRsYXMoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5wYXR0ZXJuc1tpZF0ucG9zaXRpb247XG4gICAgfVxuXG4gICAgYmluZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAgICAgaWYgKCF0aGlzLmF0bGFzVGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy5hdGxhc1RleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLmF0bGFzSW1hZ2UsIGdsLlJHQkEpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuYXRsYXNUZXh0dXJlLnVwZGF0ZSh0aGlzLmF0bGFzSW1hZ2UpO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hdGxhc1RleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIH1cblxuICAgIF91cGRhdGVQYXR0ZXJuQXRsYXMoKSB7XG4gICAgICAgIGNvbnN0IGJpbnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnBhdHRlcm5zKSB7XG4gICAgICAgICAgICBiaW5zLnB1c2godGhpcy5wYXR0ZXJuc1tpZF0uYmluKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHt3LCBofSA9IHBvdHBhY2soYmlucyk7XG5cbiAgICAgICAgY29uc3QgZHN0ID0gdGhpcy5hdGxhc0ltYWdlO1xuICAgICAgICBkc3QucmVzaXplKHt3aWR0aDogdyB8fCAxLCBoZWlnaHQ6IGggfHwgMX0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5wYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3Qge2Jpbn0gPSB0aGlzLnBhdHRlcm5zW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBiaW4ueCArIHBhZGRpbmc7XG4gICAgICAgICAgICBjb25zdCB5ID0gYmluLnkgKyBwYWRkaW5nO1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gdGhpcy5pbWFnZXNbaWRdLmRhdGE7XG4gICAgICAgICAgICBjb25zdCB3ID0gc3JjLndpZHRoO1xuICAgICAgICAgICAgY29uc3QgaCA9IHNyYy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYywgZHN0LCB7eDogMCwgeTogMH0sIHt4LCB5fSwge3dpZHRoOiB3LCBoZWlnaHQ6IGh9KTtcblxuICAgICAgICAgICAgLy8gQWRkIDEgcGl4ZWwgd3JhcHBlZCBwYWRkaW5nIG9uIGVhY2ggc2lkZSBvZiB0aGUgaW1hZ2UuXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMsIGRzdCwge3g6IDAsIHk6IGggLSAxfSwge3gsIHk6IHkgLSAxfSwge3dpZHRoOiB3LCBoZWlnaHQ6IDF9KTsgLy8gVFxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLCBkc3QsIHt4OiAwLCB5OiAgICAgMH0sIHt4LCB5OiB5ICsgaH0sIHt3aWR0aDogdywgaGVpZ2h0OiAxfSk7IC8vIEJcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYywgZHN0LCB7eDogdyAtIDEsIHk6IDB9LCB7eDogeCAtIDEsIHl9LCB7d2lkdGg6IDEsIGhlaWdodDogaH0pOyAvLyBMXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMsIGRzdCwge3g6IDAsICAgICB5OiAwfSwge3g6IHggKyB3LCB5fSwge3dpZHRoOiAxLCBoZWlnaHQ6IGh9KTsgLy8gUlxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgYmVnaW5GcmFtZSgpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWUgPSB7fTtcbiAgICB9XG5cbiAgICBkaXNwYXRjaFJlbmRlckNhbGxiYWNrcyhpZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcblxuICAgICAgICAgICAgLy8gdGhlIGNhbGxiYWNrIGZvciB0aGUgaW1hZ2Ugd2FzIGFscmVhZHkgZGlzcGF0Y2hlZCBmb3IgYSBkaWZmZXJlbnQgZnJhbWVcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZVtpZF0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWVbaWRdID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlc1tpZF07XG4gICAgICAgICAgICBhc3NlcnQoaW1hZ2UpO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gcmVuZGVyU3R5bGVJbWFnZShpbWFnZSk7XG4gICAgICAgICAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSW1hZ2UoaWQsIGltYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VNYW5hZ2VyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtnZXRBcnJheUJ1ZmZlciwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuXG5pbXBvcnQgcGFyc2VHbHlwaFBCRiBmcm9tICcuL3BhcnNlX2dseXBoX3BiZic7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtSZXF1ZXN0TWFuYWdlcn0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChmb250c3RhY2s6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxUZW1wbGF0ZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrPHtbbnVtYmVyXTogU3R5bGVHbHlwaCB8IG51bGx9Pikge1xuICAgIGNvbnN0IGJlZ2luID0gcmFuZ2UgKiAyNTY7XG4gICAgY29uc3QgZW5kID0gYmVnaW4gKyAyNTU7XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChcbiAgICAgICAgcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplR2x5cGhzVVJMKHVybFRlbXBsYXRlKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3tmb250c3RhY2t9JywgZm9udHN0YWNrKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3tyYW5nZX0nLCBgJHtiZWdpbn0tJHtlbmR9YCksXG4gICAgICAgIFJlc291cmNlVHlwZS5HbHlwaHMpO1xuXG4gICAgZ2V0QXJyYXlCdWZmZXIocmVxdWVzdCwgKGVycjogP0Vycm9yLCBkYXRhOiA/QXJyYXlCdWZmZXIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBnbHlwaHMgPSB7fTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBnbHlwaCBvZiBwYXJzZUdseXBoUEJGKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZ2x5cGhzW2dseXBoLmlkXSA9IGdseXBoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBnbHlwaHMpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gVGlueVNERjtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBUaW55U0RGO1xuXG52YXIgSU5GID0gMWUyMDtcblxuZnVuY3Rpb24gVGlueVNERihmb250U2l6ZSwgYnVmZmVyLCByYWRpdXMsIGN1dG9mZiwgZm9udEZhbWlseSwgZm9udFdlaWdodCkge1xuICAgIHRoaXMuZm9udFNpemUgPSBmb250U2l6ZSB8fCAyNDtcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlciA9PT0gdW5kZWZpbmVkID8gMyA6IGJ1ZmZlcjtcbiAgICB0aGlzLmN1dG9mZiA9IGN1dG9mZiB8fCAwLjI1O1xuICAgIHRoaXMuZm9udEZhbWlseSA9IGZvbnRGYW1pbHkgfHwgJ3NhbnMtc2VyaWYnO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IGZvbnRXZWlnaHQgfHwgJ25vcm1hbCc7XG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgODtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZSA9IHRoaXMuZm9udFNpemUgKyB0aGlzLmJ1ZmZlciAqIDI7XG5cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5jYW52YXMuaGVpZ2h0ID0gc2l6ZTtcblxuICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB0aGlzLmN0eC5mb250ID0gdGhpcy5mb250V2VpZ2h0ICsgJyAnICsgdGhpcy5mb250U2l6ZSArICdweCAnICsgdGhpcy5mb250RmFtaWx5O1xuICAgIHRoaXMuY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9ICdibGFjayc7XG5cbiAgICAvLyB0ZW1wb3JhcnkgYXJyYXlzIGZvciB0aGUgZGlzdGFuY2UgdHJhbnNmb3JtXG4gICAgdGhpcy5ncmlkT3V0ZXIgPSBuZXcgRmxvYXQ2NEFycmF5KHNpemUgKiBzaXplKTtcbiAgICB0aGlzLmdyaWRJbm5lciA9IG5ldyBGbG9hdDY0QXJyYXkoc2l6ZSAqIHNpemUpO1xuICAgIHRoaXMuZiA9IG5ldyBGbG9hdDY0QXJyYXkoc2l6ZSk7XG4gICAgdGhpcy5kID0gbmV3IEZsb2F0NjRBcnJheShzaXplKTtcbiAgICB0aGlzLnogPSBuZXcgRmxvYXQ2NEFycmF5KHNpemUgKyAxKTtcbiAgICB0aGlzLnYgPSBuZXcgSW50MTZBcnJheShzaXplKTtcblxuICAgIC8vIGhhY2sgYXJvdW5kIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzg1MlxuICAgIHRoaXMubWlkZGxlID0gTWF0aC5yb3VuZCgoc2l6ZSAvIDIpICogKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignR2Vja28vJykgPj0gMCA/IDEuMiA6IDEpKTtcbn1cblxuVGlueVNERi5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChjaGFyKSB7XG4gICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuc2l6ZSwgdGhpcy5zaXplKTtcbiAgICB0aGlzLmN0eC5maWxsVGV4dChjaGFyLCB0aGlzLmJ1ZmZlciwgdGhpcy5taWRkbGUpO1xuXG4gICAgdmFyIGltZ0RhdGEgPSB0aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdGhpcy5zaXplLCB0aGlzLnNpemUpO1xuICAgIHZhciBhbHBoYUNoYW5uZWwgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkodGhpcy5zaXplICogdGhpcy5zaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplICogdGhpcy5zaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGEgPSBpbWdEYXRhLmRhdGFbaSAqIDQgKyAzXSAvIDI1NTsgLy8gYWxwaGEgdmFsdWVcbiAgICAgICAgdGhpcy5ncmlkT3V0ZXJbaV0gPSBhID09PSAxID8gMCA6IGEgPT09IDAgPyBJTkYgOiBNYXRoLnBvdyhNYXRoLm1heCgwLCAwLjUgLSBhKSwgMik7XG4gICAgICAgIHRoaXMuZ3JpZElubmVyW2ldID0gYSA9PT0gMSA/IElORiA6IGEgPT09IDAgPyAwIDogTWF0aC5wb3coTWF0aC5tYXgoMCwgYSAtIDAuNSksIDIpO1xuICAgIH1cblxuICAgIGVkdCh0aGlzLmdyaWRPdXRlciwgdGhpcy5zaXplLCB0aGlzLnNpemUsIHRoaXMuZiwgdGhpcy5kLCB0aGlzLnYsIHRoaXMueik7XG4gICAgZWR0KHRoaXMuZ3JpZElubmVyLCB0aGlzLnNpemUsIHRoaXMuc2l6ZSwgdGhpcy5mLCB0aGlzLmQsIHRoaXMudiwgdGhpcy56KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnNpemUgKiB0aGlzLnNpemU7IGkrKykge1xuICAgICAgICB2YXIgZCA9IHRoaXMuZ3JpZE91dGVyW2ldIC0gdGhpcy5ncmlkSW5uZXJbaV07XG4gICAgICAgIGFscGhhQ2hhbm5lbFtpXSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCgyNTUgLSAyNTUgKiAoZCAvIHRoaXMucmFkaXVzICsgdGhpcy5jdXRvZmYpKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBhbHBoYUNoYW5uZWw7XG59O1xuXG4vLyAyRCBFdWNsaWRlYW4gZGlzdGFuY2UgdHJhbnNmb3JtIGJ5IEZlbHplbnN6d2FsYiAmIEh1dHRlbmxvY2hlciBodHRwczovL2NzLmJyb3duLmVkdS9+cGZmL3BhcGVycy9kdC1maW5hbC5wZGZcbmZ1bmN0aW9uIGVkdChkYXRhLCB3aWR0aCwgaGVpZ2h0LCBmLCBkLCB2LCB6KSB7XG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgICAgIGZbeV0gPSBkYXRhW3kgKiB3aWR0aCArIHhdO1xuICAgICAgICB9XG4gICAgICAgIGVkdDFkKGYsIGQsIHYsIHosIGhlaWdodCk7XG4gICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgZGF0YVt5ICogd2lkdGggKyB4XSA9IGRbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICBmW3hdID0gZGF0YVt5ICogd2lkdGggKyB4XTtcbiAgICAgICAgfVxuICAgICAgICBlZHQxZChmLCBkLCB2LCB6LCB3aWR0aCk7XG4gICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICBkYXRhW3kgKiB3aWR0aCArIHhdID0gTWF0aC5zcXJ0KGRbeF0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyAxRCBzcXVhcmVkIGRpc3RhbmNlIHRyYW5zZm9ybVxuZnVuY3Rpb24gZWR0MWQoZiwgZCwgdiwgeiwgbikge1xuICAgIHZbMF0gPSAwO1xuICAgIHpbMF0gPSAtSU5GO1xuICAgIHpbMV0gPSArSU5GO1xuXG4gICAgZm9yICh2YXIgcSA9IDEsIGsgPSAwOyBxIDwgbjsgcSsrKSB7XG4gICAgICAgIHZhciBzID0gKChmW3FdICsgcSAqIHEpIC0gKGZbdltrXV0gKyB2W2tdICogdltrXSkpIC8gKDIgKiBxIC0gMiAqIHZba10pO1xuICAgICAgICB3aGlsZSAocyA8PSB6W2tdKSB7XG4gICAgICAgICAgICBrLS07XG4gICAgICAgICAgICBzID0gKChmW3FdICsgcSAqIHEpIC0gKGZbdltrXV0gKyB2W2tdICogdltrXSkpIC8gKDIgKiBxIC0gMiAqIHZba10pO1xuICAgICAgICB9XG4gICAgICAgIGsrKztcbiAgICAgICAgdltrXSA9IHE7XG4gICAgICAgIHpba10gPSBzO1xuICAgICAgICB6W2sgKyAxXSA9ICtJTkY7XG4gICAgfVxuXG4gICAgZm9yIChxID0gMCwgayA9IDA7IHEgPCBuOyBxKyspIHtcbiAgICAgICAgd2hpbGUgKHpbayArIDFdIDwgcSkgaysrO1xuICAgICAgICBkW3FdID0gKHEgLSB2W2tdKSAqIChxIC0gdltrXSkgKyBmW3Zba11dO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBsb2FkR2x5cGhSYW5nZSBmcm9tICcuLi9zdHlsZS9sb2FkX2dseXBoX3JhbmdlJztcblxuaW1wb3J0IFRpbnlTREYgZnJvbSAnQG1hcGJveC90aW55LXNkZic7XG5pbXBvcnQgaXNDaGFyIGZyb20gJy4uL3V0aWwvaXNfY2hhcl9pbl91bmljb2RlX2Jsb2NrJztcbmltcG9ydCB7YXN5bmNBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge0FscGhhSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaH0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfZ2x5cGgnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcblxudHlwZSBFbnRyeSA9IHtcbiAgICAvLyBudWxsIG1lYW5zIHdlJ3ZlIHJlcXVlc3RlZCB0aGUgcmFuZ2UsIGJ1dCB0aGUgZ2x5cGggd2Fzbid0IGluY2x1ZGVkIGluIHRoZSByZXN1bHQuXG4gICAgZ2x5cGhzOiB7W2lkOiBudW1iZXJdOiBTdHlsZUdseXBoIHwgbnVsbH0sXG4gICAgcmVxdWVzdHM6IHtbcmFuZ2U6IG51bWJlcl06IEFycmF5PENhbGxiYWNrPHtbbnVtYmVyXTogU3R5bGVHbHlwaCB8IG51bGx9Pj59LFxuICAgIHRpbnlTREY/OiBUaW55U0RGXG59O1xuXG5jbGFzcyBHbHlwaE1hbmFnZXIge1xuICAgIHJlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlcjtcbiAgICBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6ID9zdHJpbmc7XG4gICAgZW50cmllczoge1tzdHJpbmddOiBFbnRyeX07XG4gICAgdXJsOiA/c3RyaW5nO1xuXG4gICAgLy8gZXhwb3NlZCBhcyBzdGF0aWNzIHRvIGVuYWJsZSBzdHViYmluZyBpbiB1bml0IHRlc3RzXG4gICAgc3RhdGljIGxvYWRHbHlwaFJhbmdlOiB0eXBlb2YgbG9hZEdseXBoUmFuZ2U7XG4gICAgc3RhdGljIFRpbnlTREY6IENsYXNzPFRpbnlTREY+O1xuXG4gICAgY29uc3RydWN0b3IocmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyLCBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0TWFuYWdlciA9IHJlcXVlc3RNYW5hZ2VyO1xuICAgICAgICB0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSA9IGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0ge307XG4gICAgfVxuXG4gICAgc2V0VVJMKHVybDogP3N0cmluZykge1xuICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICB9XG5cbiAgICBnZXRHbHlwaHMoZ2x5cGhzOiB7W3N0YWNrOiBzdHJpbmddOiBBcnJheTxudW1iZXI+fSwgY2FsbGJhY2s6IENhbGxiYWNrPHtbc3RhY2s6IHN0cmluZ106IHtbaWQ6IG51bWJlcl06ID9TdHlsZUdseXBofX0+KSB7XG4gICAgICAgIGNvbnN0IGFsbCA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2sgaW4gZ2x5cGhzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGdseXBoc1tzdGFja10pIHtcbiAgICAgICAgICAgICAgICBhbGwucHVzaCh7c3RhY2ssIGlkfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhc3luY0FsbChhbGwsICh7c3RhY2ssIGlkfSwgY2FsbGJhY2s6IENhbGxiYWNrPHtzdGFjazogc3RyaW5nLCBpZDogbnVtYmVyLCBnbHlwaDogP1N0eWxlR2x5cGh9PikgPT4ge1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5lbnRyaWVzW3N0YWNrXTtcbiAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IHRoaXMuZW50cmllc1tzdGFja10gPSB7XG4gICAgICAgICAgICAgICAgICAgIGdseXBoczoge30sXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzOiB7fVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBnbHlwaCA9IGVudHJ5LmdseXBoc1tpZF07XG4gICAgICAgICAgICBpZiAoZ2x5cGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtzdGFjaywgaWQsIGdseXBofSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbHlwaCA9IHRoaXMuX3RpbnlTREYoZW50cnksIHN0YWNrLCBpZCk7XG4gICAgICAgICAgICBpZiAoZ2x5cGgpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS5nbHlwaHNbaWRdID0gZ2x5cGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3N0YWNrLCBpZCwgZ2x5cGh9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gTWF0aC5mbG9vcihpZCAvIDI1Nik7XG4gICAgICAgICAgICBpZiAocmFuZ2UgKiAyNTYgPiA2NTUzNSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignZ2x5cGhzID4gNjU1MzUgbm90IHN1cHBvcnRlZCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByZXF1ZXN0cyA9IGVudHJ5LnJlcXVlc3RzW3JhbmdlXTtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0cyA9IGVudHJ5LnJlcXVlc3RzW3JhbmdlXSA9IFtdO1xuICAgICAgICAgICAgICAgIEdseXBoTWFuYWdlci5sb2FkR2x5cGhSYW5nZShzdGFjaywgcmFuZ2UsICh0aGlzLnVybDogYW55KSwgdGhpcy5yZXF1ZXN0TWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgKGVyciwgcmVzcG9uc2U6ID97W251bWJlcl06IFN0eWxlR2x5cGggfCBudWxsfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGgoK2lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZ2x5cGhzWytpZF0gPSByZXNwb25zZVsraWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjYiBvZiByZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiKGVyciwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVudHJ5LnJlcXVlc3RzW3JhbmdlXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcXVlc3RzLnB1c2goKGVyciwgcmVzdWx0OiA/e1tudW1iZXJdOiBTdHlsZUdseXBoIHwgbnVsbH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3N0YWNrLCBpZCwgZ2x5cGg6IHJlc3VsdFtpZF0gfHwgbnVsbH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAoZXJyLCBnbHlwaHM6ID9BcnJheTx7c3RhY2s6IHN0cmluZywgaWQ6IG51bWJlciwgZ2x5cGg6ID9TdHlsZUdseXBofT4pID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qge3N0YWNrLCBpZCwgZ2x5cGh9IG9mIGdseXBocykge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9uZSB0aGUgZ2x5cGggc28gdGhhdCBvdXIgb3duIGNvcHkgb2YgaXRzIEFycmF5QnVmZmVyIGRvZXNuJ3QgZ2V0IHRyYW5zZmVycmVkLlxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0W3N0YWNrXSB8fCAocmVzdWx0W3N0YWNrXSA9IHt9KSlbaWRdID0gZ2x5cGggJiYge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdseXBoLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwOiBnbHlwaC5iaXRtYXAuY2xvbmUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3M6IGdseXBoLm1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaChpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5ldy1jYXAgKi9cbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkgJiZcbiAgICAgICAgICAgIChpc0NoYXJbJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnXShpZCkgfHxcbiAgICAgICAgICAgICAgICBpc0NoYXJbJ0hhbmd1bCBTeWxsYWJsZXMnXShpZCkgfHxcbiAgICAgICAgICAgICAgICBpc0NoYXJbJ0hpcmFnYW5hJ10oaWQpIHx8XG4gICAgICAgICAgICAgICAgaXNDaGFyWydLYXRha2FuYSddKGlkKSk7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgbmV3LWNhcCAqL1xuICAgIH1cblxuICAgIF90aW55U0RGKGVudHJ5OiBFbnRyeSwgc3RhY2s6IHN0cmluZywgaWQ6IG51bWJlcik6ID9TdHlsZUdseXBoIHtcbiAgICAgICAgY29uc3QgZmFtaWx5ID0gdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7XG4gICAgICAgIGlmICghZmFtaWx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGgoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGlueVNERiA9IGVudHJ5LnRpbnlTREY7XG4gICAgICAgIGlmICghdGlueVNERikge1xuICAgICAgICAgICAgbGV0IGZvbnRXZWlnaHQgPSAnNDAwJztcbiAgICAgICAgICAgIGlmICgvYm9sZC9pLnRlc3Qoc3RhY2spKSB7XG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCA9ICc5MDAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvbWVkaXVtL2kudGVzdChzdGFjaykpIHtcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0ID0gJzUwMCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9saWdodC9pLnRlc3Qoc3RhY2spKSB7XG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCA9ICcyMDAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGlueVNERiA9IGVudHJ5LnRpbnlTREYgPSBuZXcgR2x5cGhNYW5hZ2VyLlRpbnlTREYoMjQsIDMsIDgsIC4yNSwgZmFtaWx5LCBmb250V2VpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGJpdG1hcDogbmV3IEFscGhhSW1hZ2Uoe3dpZHRoOiAzMCwgaGVpZ2h0OiAzMH0sIHRpbnlTREYuZHJhdyhTdHJpbmcuZnJvbUNoYXJDb2RlKGlkKSkpLFxuICAgICAgICAgICAgbWV0cmljczoge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyNCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDI0LFxuICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgdG9wOiAtOCxcbiAgICAgICAgICAgICAgICBhZHZhbmNlOiAyNFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuR2x5cGhNYW5hZ2VyLmxvYWRHbHlwaFJhbmdlID0gbG9hZEdseXBoUmFuZ2U7XG5HbHlwaE1hbmFnZXIuVGlueVNERiA9IFRpbnlTREY7XG5cbmV4cG9ydCBkZWZhdWx0IEdseXBoTWFuYWdlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtlbmRzV2l0aCwgZXh0ZW5kLCBzcGhlcmljYWxUb0NhcnRlc2lhbn0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7XG4gICAgdmFsaWRhdGVTdHlsZSxcbiAgICB2YWxpZGF0ZUxpZ2h0LFxuICAgIGVtaXRWYWxpZGF0aW9uRXJyb3JzXG59IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcblxuaW1wb3J0IHR5cGUge1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3N0eWxlLXNwZWMnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1N0eWxlU2V0dGVyT3B0aW9uc30gZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHtQcm9wZXJ0aWVzLCBUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWQsIERhdGFDb25zdGFudFByb3BlcnR5fSBmcm9tICcuL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgUHJvcGVydHksXG4gICAgUHJvcGVydHlWYWx1ZSxcbiAgICBUcmFuc2l0aW9uUGFyYW1ldGVyc1xufSBmcm9tICcuL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7TGlnaHRTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxudHlwZSBMaWdodFBvc2l0aW9uID0ge1xuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgejogbnVtYmVyXG59O1xuXG5jbGFzcyBMaWdodFBvc2l0aW9uUHJvcGVydHkgaW1wbGVtZW50cyBQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIExpZ2h0UG9zaXRpb24+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNwZWNpZmljYXRpb24gPSBzdHlsZVNwZWMubGlnaHQucG9zaXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIExpZ2h0UG9zaXRpb24+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycyk6IExpZ2h0UG9zaXRpb24ge1xuICAgICAgICByZXR1cm4gc3BoZXJpY2FsVG9DYXJ0ZXNpYW4odmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzKSk7XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogTGlnaHRQb3NpdGlvbiwgYjogTGlnaHRQb3NpdGlvbiwgdDogbnVtYmVyKTogTGlnaHRQb3NpdGlvbiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBpbnRlcnBvbGF0ZShhLngsIGIueCwgdCksXG4gICAgICAgICAgICB5OiBpbnRlcnBvbGF0ZShhLnksIGIueSwgdCksXG4gICAgICAgICAgICB6OiBpbnRlcnBvbGF0ZShhLnosIGIueiwgdCksXG4gICAgICAgIH07XG4gICAgfVxufVxuXG50eXBlIFByb3BzID0ge3xcbiAgICBcImFuY2hvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcInBvc2l0aW9uXCI6IExpZ2h0UG9zaXRpb25Qcm9wZXJ0eSxcbiAgICBcImNvbG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PENvbG9yPixcbiAgICBcImludGVuc2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWMubGlnaHQuYW5jaG9yKSxcbiAgICBcInBvc2l0aW9uXCI6IG5ldyBMaWdodFBvc2l0aW9uUHJvcGVydHkoKSxcbiAgICBcImNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWMubGlnaHQuY29sb3IpLFxuICAgIFwiaW50ZW5zaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWMubGlnaHQuaW50ZW5zaXR5KSxcbn0pO1xuXG5jb25zdCBUUkFOU0lUSU9OX1NVRkZJWCA9ICctdHJhbnNpdGlvbic7XG5cbi8qXG4gKiBSZXByZXNlbnRzIHRoZSBsaWdodCB1c2VkIHRvIGxpZ2h0IGV4dHJ1ZGVkIGZlYXR1cmVzLlxuICovXG5jbGFzcyBMaWdodCBleHRlbmRzIEV2ZW50ZWQge1xuICAgIF90cmFuc2l0aW9uYWJsZTogVHJhbnNpdGlvbmFibGU8UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nOiBUcmFuc2l0aW9uaW5nPFByb3BzPjtcbiAgICBwcm9wZXJ0aWVzOiBQb3NzaWJseUV2YWx1YXRlZDxQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsaWdodE9wdGlvbnM/OiBMaWdodFNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGUgPSBuZXcgVHJhbnNpdGlvbmFibGUocHJvcGVydGllcyk7XG4gICAgICAgIHRoaXMuc2V0TGlnaHQobGlnaHRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmluZyA9IHRoaXMuX3RyYW5zaXRpb25hYmxlLnVudHJhbnNpdGlvbmVkKCk7XG4gICAgfVxuXG4gICAgZ2V0TGlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXJpYWxpemUoKTtcbiAgICB9XG5cbiAgICBzZXRMaWdodChsaWdodD86IExpZ2h0U3BlY2lmaWNhdGlvbiwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlTGlnaHQsIGxpZ2h0LCBvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGxpZ2h0KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGxpZ2h0W25hbWVdO1xuICAgICAgICAgICAgaWYgKGVuZHNXaXRoKG5hbWUsIFRSQU5TSVRJT05fU1VGRklYKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNldFRyYW5zaXRpb24obmFtZS5zbGljZSgwLCAtVFJBTlNJVElPTl9TVUZGSVgubGVuZ3RoKSwgdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2l0aW9ucyhwYXJhbWV0ZXJzOiBUcmFuc2l0aW9uUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uaW5nID0gdGhpcy5fdHJhbnNpdGlvbmFibGUudHJhbnNpdGlvbmVkKHBhcmFtZXRlcnMsIHRoaXMuX3RyYW5zaXRpb25pbmcpO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uaW5nLmhhc1RyYW5zaXRpb24oKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSB0aGlzLl90cmFuc2l0aW9uaW5nLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKHZhbGlkYXRlOiBGdW5jdGlvbiwgdmFsdWU6IG1peGVkLCBvcHRpb25zPzoge3ZhbGlkYXRlPzogYm9vbGVhbn0pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy52YWxpZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZS5jYWxsKHZhbGlkYXRlU3R5bGUsIGV4dGVuZCh7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yNDA3XG4gICAgICAgICAgICBzdHlsZToge2dseXBoczogdHJ1ZSwgc3ByaXRlOiB0cnVlfSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlnaHQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG4vKipcbiAqIEEgTGluZUF0bGFzIGxldHMgdXMgcmV1c2UgcmVuZGVyZWQgZGFzaGVkIGxpbmVzXG4gKiBieSB3cml0aW5nIG1hbnkgb2YgdGhlbSB0byBhIHRleHR1cmUgYW5kIHRoZW4gZmV0Y2hpbmcgdGhlaXIgcG9zaXRpb25zXG4gKiB1c2luZyAuZ2V0RGFzaC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIExpbmVBdGxhcyB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBuZXh0Um93OiBudW1iZXI7XG4gICAgYnl0ZXM6IG51bWJlcjtcbiAgICBkYXRhOiBVaW50OEFycmF5O1xuICAgIHBvc2l0aW9uczoge1tzdHJpbmddOiBhbnl9O1xuICAgIGRpcnR5OiBib29sZWFuO1xuICAgIHRleHR1cmU6IFdlYkdMVGV4dHVyZTtcblxuICAgIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMubmV4dFJvdyA9IDA7XG5cbiAgICAgICAgdGhpcy5ieXRlcyA9IDQ7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMud2lkdGggKiB0aGlzLmhlaWdodCAqIHRoaXMuYnl0ZXMpO1xuXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IG9yIGNyZWF0ZSBhIGRhc2ggbGluZSBwYXR0ZXJuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBkYXNoYXJyYXlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJvdW5kIHdoZXRoZXIgdG8gYWRkIGNpcmNsZSBjYXBzIGluIGJldHdlZW4gZGFzaCBzZWdtZW50c1xuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHBvc2l0aW9uIG9mIGRhc2ggdGV4dHVyZSBpbiB7IHksIGhlaWdodCwgd2lkdGggfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0RGFzaChkYXNoYXJyYXk6IEFycmF5PG51bWJlcj4sIHJvdW5kOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGRhc2hhcnJheS5qb2luKFwiLFwiKSArIFN0cmluZyhyb3VuZCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvc2l0aW9uc1trZXldKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uc1trZXldID0gdGhpcy5hZGREYXNoKGRhc2hhcnJheSwgcm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGFkZERhc2goZGFzaGFycmF5OiBBcnJheTxudW1iZXI+LCByb3VuZDogYm9vbGVhbikge1xuXG4gICAgICAgIGNvbnN0IG4gPSByb3VuZCA/IDcgOiAwO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSAyICogbiArIDE7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDEyODtcblxuICAgICAgICBpZiAodGhpcy5uZXh0Um93ICsgaGVpZ2h0ID4gdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdMaW5lQXRsYXMgb3V0IG9mIHNwYWNlJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhc2hhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGVuZ3RoICs9IGRhc2hhcnJheVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0cmV0Y2ggPSB0aGlzLndpZHRoIC8gbGVuZ3RoO1xuICAgICAgICBjb25zdCBoYWxmV2lkdGggPSBzdHJldGNoIC8gMjtcblxuICAgICAgICAvLyBJZiBkYXNoYXJyYXkgaGFzIGFuIG9kZCBsZW5ndGgsIGJvdGggdGhlIGZpcnN0IGFuZCBsYXN0IHBhcnRzXG4gICAgICAgIC8vIGFyZSBkYXNoZXMgYW5kIHNob3VsZCBiZSBqb2luZWQgc2VhbWxlc3NseS5cbiAgICAgICAgY29uc3Qgb2RkTGVuZ3RoID0gZGFzaGFycmF5Lmxlbmd0aCAlIDIgPT09IDE7XG5cbiAgICAgICAgZm9yIChsZXQgeSA9IC1uOyB5IDw9IG47IHkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5uZXh0Um93ICsgbiArIHk7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMud2lkdGggKiByb3c7XG5cbiAgICAgICAgICAgIGxldCBsZWZ0ID0gb2RkTGVuZ3RoID8gLWRhc2hhcnJheVtkYXNoYXJyYXkubGVuZ3RoIC0gMV0gOiAwO1xuICAgICAgICAgICAgbGV0IHJpZ2h0ID0gZGFzaGFycmF5WzBdO1xuICAgICAgICAgICAgbGV0IHBhcnRJbmRleCA9IDE7XG5cbiAgICAgICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocmlnaHQgPCB4IC8gc3RyZXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQgKyBkYXNoYXJyYXlbcGFydEluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob2RkTGVuZ3RoICYmIHBhcnRJbmRleCA9PT0gZGFzaGFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ICs9IGRhc2hhcnJheVswXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBhcnRJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RMZWZ0ID0gTWF0aC5hYnMoeCAtIGxlZnQgKiBzdHJldGNoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0UmlnaHQgPSBNYXRoLmFicyh4IC0gcmlnaHQgKiBzdHJldGNoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0ID0gTWF0aC5taW4oZGlzdExlZnQsIGRpc3RSaWdodCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zaWRlID0gKHBhcnRJbmRleCAlIDIpID09PSAxO1xuICAgICAgICAgICAgICAgIGxldCBzaWduZWREaXN0YW5jZTtcblxuICAgICAgICAgICAgICAgIGlmIChyb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgY2lyY2xlIGNhcHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdE1pZGRsZSA9IG4gPyB5IC8gbiAqIChoYWxmV2lkdGggKyAxKSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnNpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RFZGdlID0gaGFsZldpZHRoIC0gTWF0aC5hYnMoZGlzdE1pZGRsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduZWREaXN0YW5jZSA9IE1hdGguc3FydChkaXN0ICogZGlzdCArIGRpc3RFZGdlICogZGlzdEVkZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkRGlzdGFuY2UgPSBoYWxmV2lkdGggLSBNYXRoLnNxcnQoZGlzdCAqIGRpc3QgKyBkaXN0TWlkZGxlICogZGlzdE1pZGRsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzaWduZWREaXN0YW5jZSA9IChpbnNpZGUgPyAxIDogLTEpICogZGlzdDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbMyArIChpbmRleCArIHgpICogNF0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIHNpZ25lZERpc3RhbmNlICsgb2Zmc2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3MgPSB7XG4gICAgICAgICAgICB5OiAodGhpcy5uZXh0Um93ICsgbiArIDAuNSkgLyB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogMiAqIG4gLyB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiBsZW5ndGhcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm5leHRSb3cgKz0gaGVpZ2h0O1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gcG9zO1xuICAgIH1cblxuICAgIGJpbmQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTElORUFSKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgdGhpcy5kYXRhKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgdGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluZUF0bGFzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt1bmlxdWVJZCwgYXN5bmNBbGx9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgQWN0b3IgZnJvbSAnLi9hY3Rvcic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIFdvcmtlclBvb2wgZnJvbSAnLi93b3JrZXJfcG9vbCc7XG5cbi8qKlxuICogUmVzcG9uc2libGUgZm9yIHNlbmRpbmcgbWVzc2FnZXMgZnJvbSBhIHtAbGluayBTb3VyY2V9IHRvIGFuIGFzc29jaWF0ZWRcbiAqIHtAbGluayBXb3JrZXJTb3VyY2V9LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIERpc3BhdGNoZXIge1xuICAgIHdvcmtlclBvb2w6IFdvcmtlclBvb2w7XG4gICAgYWN0b3JzOiBBcnJheTxBY3Rvcj47XG4gICAgY3VycmVudEFjdG9yOiBudW1iZXI7XG4gICAgaWQ6IG51bWJlcjtcblxuICAgIC8vIGV4cG9zZWQgdG8gYWxsb3cgc3R1YmJpbmcgaW4gdW5pdCB0ZXN0c1xuICAgIHN0YXRpYyBBY3RvcjogQ2xhc3M8QWN0b3I+O1xuXG4gICAgY29uc3RydWN0b3Iod29ya2VyUG9vbDogV29ya2VyUG9vbCwgcGFyZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy53b3JrZXJQb29sID0gd29ya2VyUG9vbDtcbiAgICAgICAgdGhpcy5hY3RvcnMgPSBbXTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0b3IgPSAwO1xuICAgICAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICAgICAgY29uc3Qgd29ya2VycyA9IHRoaXMud29ya2VyUG9vbC5hY3F1aXJlKHRoaXMuaWQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IHdvcmtlcnNbaV07XG4gICAgICAgICAgICBjb25zdCBhY3RvciA9IG5ldyBEaXNwYXRjaGVyLkFjdG9yKHdvcmtlciwgcGFyZW50LCB0aGlzLmlkKTtcbiAgICAgICAgICAgIGFjdG9yLm5hbWUgPSBgV29ya2VyICR7aX1gO1xuICAgICAgICAgICAgdGhpcy5hY3RvcnMucHVzaChhY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KHRoaXMuYWN0b3JzLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnJvYWRjYXN0IGEgbWVzc2FnZSB0byBhbGwgV29ya2Vycy5cbiAgICAgKi9cbiAgICBicm9hZGNhc3QodHlwZTogc3RyaW5nLCBkYXRhOiBtaXhlZCwgY2I/OiBGdW5jdGlvbikge1xuICAgICAgICBhc3NlcnQodGhpcy5hY3RvcnMubGVuZ3RoKTtcbiAgICAgICAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgYXN5bmNBbGwodGhpcy5hY3RvcnMsIChhY3RvciwgZG9uZSkgPT4ge1xuICAgICAgICAgICAgYWN0b3Iuc2VuZCh0eXBlLCBkYXRhLCBkb25lKTtcbiAgICAgICAgfSwgY2IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFjcXVpcmVzIGFuIGFjdG9yIHRvIGRpc3BhdGNoIG1lc3NhZ2VzIHRvLiBUaGUgYWN0b3JzIGFyZSBkaXN0cmlidXRlZCBpbiByb3VuZC1yb2JpbiBmYXNoaW9uLlxuICAgICAqIEByZXR1cm5zIEFuIGFjdG9yIG9iamVjdCBiYWNrZWQgYnkgYSB3ZWIgd29ya2VyIGZvciBwcm9jZXNzaW5nIG1lc3NhZ2VzLlxuICAgICAqL1xuICAgIGdldEFjdG9yKCk6IEFjdG9yIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuYWN0b3JzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuY3VycmVudEFjdG9yID0gKHRoaXMuY3VycmVudEFjdG9yICsgMSkgJSB0aGlzLmFjdG9ycy5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdG9yc1t0aGlzLmN1cnJlbnRBY3Rvcl07XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB0aGlzLmFjdG9ycy5mb3JFYWNoKChhY3RvcikgPT4geyBhY3Rvci5yZW1vdmUoKTsgfSk7XG4gICAgICAgIHRoaXMuYWN0b3JzID0gW107XG4gICAgICAgIHRoaXMud29ya2VyUG9vbC5yZWxlYXNlKHRoaXMuaWQpO1xuICAgIH1cbn1cblxuRGlzcGF0Y2hlci5BY3RvciA9IEFjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBEaXNwYXRjaGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwaWNrLCBleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB7Z2V0SlNPTiwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtUaWxlSlNPTn0gZnJvbSAnLi4vdHlwZXMvdGlsZWpzb24nO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvcHRpb25zOiBhbnksIHJlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlciwgY2FsbGJhY2s6IENhbGxiYWNrPFRpbGVKU09OPik6IENhbmNlbGFibGUge1xuICAgIGNvbnN0IGxvYWRlZCA9IGZ1bmN0aW9uKGVycjogP0Vycm9yLCB0aWxlSlNPTjogP09iamVjdCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aWxlSlNPTikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBwaWNrKFxuICAgICAgICAgICAgICAgIC8vIGV4cGxpY2l0IHNvdXJjZSBvcHRpb25zIHRha2UgcHJlY2VkZW5jZSBvdmVyIFRpbGVKU09OXG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRpbGVKU09OLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBbJ3RpbGVzJywgJ21pbnpvb20nLCAnbWF4em9vbScsICdhdHRyaWJ1dGlvbicsICdtYXBib3hfbG9nbycsICdib3VuZHMnLCAnc2NoZW1lJywgJ3RpbGVTaXplJywgJ2VuY29kaW5nJ11cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICh0aWxlSlNPTi52ZWN0b3JfbGF5ZXJzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnZlY3RvckxheWVycyA9IHRpbGVKU09OLnZlY3Rvcl9sYXllcnM7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnZlY3RvckxheWVySWRzID0gcmVzdWx0LnZlY3RvckxheWVycy5tYXAoKGxheWVyKSA9PiB7IHJldHVybiBsYXllci5pZDsgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG9ubHkgY2Fub25pY2FsaXplIHRpbGUgdGlsZXNldCBpZiBzb3VyY2UgaXMgZGVjbGFyZWQgdXNpbmcgYSB0aWxlanNvbiB1cmxcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnVybCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aWxlcyA9IHJlcXVlc3RNYW5hZ2VyLmNhbm9uaWNhbGl6ZVRpbGVzZXQocmVzdWx0LCBvcHRpb25zLnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLnVybCkge1xuICAgICAgICByZXR1cm4gZ2V0SlNPTihyZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHJlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVNvdXJjZVVSTChvcHRpb25zLnVybCksIFJlc291cmNlVHlwZS5Tb3VyY2UpLCBsb2FkZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBicm93c2VyLmZyYW1lKCgpID0+IGxvYWRlZChudWxsLCBvcHRpb25zKSk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IHttZXJjYXRvclhmcm9tTG5nLCBtZXJjYXRvcllmcm9tTGF0fSBmcm9tICcuLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbmNsYXNzIFRpbGVCb3VuZHMge1xuICAgIGJvdW5kczogTG5nTGF0Qm91bmRzO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihib3VuZHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBtaW56b29tOiA/bnVtYmVyLCBtYXh6b29tOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMuYm91bmRzID0gTG5nTGF0Qm91bmRzLmNvbnZlcnQodGhpcy52YWxpZGF0ZUJvdW5kcyhib3VuZHMpKTtcbiAgICAgICAgdGhpcy5taW56b29tID0gbWluem9vbSB8fCAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSBtYXh6b29tIHx8IDI0O1xuICAgIH1cblxuICAgIHZhbGlkYXRlQm91bmRzKGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBib3VuZHMgcHJvcGVydHkgY29udGFpbnMgdmFsaWQgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZXNcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGJvdW5kcykgfHwgYm91bmRzLmxlbmd0aCAhPT0gNCkgcmV0dXJuIFstMTgwLCAtOTAsIDE4MCwgOTBdO1xuICAgICAgICByZXR1cm4gW01hdGgubWF4KC0xODAsIGJvdW5kc1swXSksIE1hdGgubWF4KC05MCwgYm91bmRzWzFdKSwgTWF0aC5taW4oMTgwLCBib3VuZHNbMl0pLCBNYXRoLm1pbig5MCwgYm91bmRzWzNdKV07XG4gICAgfVxuXG4gICAgY29udGFpbnModGlsZUlEOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgY29uc3Qgd29ybGRTaXplID0gTWF0aC5wb3coMiwgdGlsZUlELnopO1xuICAgICAgICBjb25zdCBsZXZlbCA9IHtcbiAgICAgICAgICAgIG1pblg6IE1hdGguZmxvb3IobWVyY2F0b3JYZnJvbUxuZyh0aGlzLmJvdW5kcy5nZXRXZXN0KCkpICogd29ybGRTaXplKSxcbiAgICAgICAgICAgIG1pblk6IE1hdGguZmxvb3IobWVyY2F0b3JZZnJvbUxhdCh0aGlzLmJvdW5kcy5nZXROb3J0aCgpKSAqIHdvcmxkU2l6ZSksXG4gICAgICAgICAgICBtYXhYOiBNYXRoLmNlaWwobWVyY2F0b3JYZnJvbUxuZyh0aGlzLmJvdW5kcy5nZXRFYXN0KCkpICogd29ybGRTaXplKSxcbiAgICAgICAgICAgIG1heFk6IE1hdGguY2VpbChtZXJjYXRvcllmcm9tTGF0KHRoaXMuYm91bmRzLmdldFNvdXRoKCkpICogd29ybGRTaXplKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoaXQgPSB0aWxlSUQueCA+PSBsZXZlbC5taW5YICYmIHRpbGVJRC54IDwgbGV2ZWwubWF4WCAmJiB0aWxlSUQueSA+PSBsZXZlbC5taW5ZICYmIHRpbGVJRC55IDwgbGV2ZWwubWF4WTtcbiAgICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpbGVCb3VuZHM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQge2V4dGVuZCwgcGlja30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBsb2FkVGlsZUpTT04gZnJvbSAnLi9sb2FkX3RpbGVqc29uJztcbmltcG9ydCB7cG9zdFR1cm5zdGlsZUV2ZW50LCBwb3N0TWFwTG9hZEV2ZW50fSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgVGlsZUJvdW5kcyBmcm9tICcuL3RpbGVfYm91bmRzJztcbmltcG9ydCB7UmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7Y2FjaGVFbnRyeVBvc3NpYmx5QWRkZWR9IGZyb20gJy4uL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge1ZlY3RvclNvdXJjZVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBWZWN0b3JUaWxlU291cmNlIGV4dGVuZHMgRXZlbnRlZCBpbXBsZW1lbnRzIFNvdXJjZSB7XG4gICAgdHlwZTogJ3ZlY3Rvcic7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtaW56b29tOiBudW1iZXI7XG4gICAgbWF4em9vbTogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHNjaGVtZTogc3RyaW5nO1xuICAgIHRpbGVTaXplOiBudW1iZXI7XG5cbiAgICBfb3B0aW9uczogVmVjdG9yU291cmNlU3BlY2lmaWNhdGlvbjtcbiAgICBfY29sbGVjdFJlc291cmNlVGltaW5nOiBib29sZWFuO1xuICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXI7XG4gICAgbWFwOiBNYXA7XG4gICAgYm91bmRzOiA/W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgdGlsZXM6IEFycmF5PHN0cmluZz47XG4gICAgdGlsZUJvdW5kczogVGlsZUJvdW5kcztcbiAgICByZXBhcnNlT3ZlcnNjYWxlZDogYm9vbGVhbjtcbiAgICBpc1RpbGVDbGlwcGVkOiBib29sZWFuO1xuICAgIF90aWxlSlNPTlJlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBWZWN0b3JTb3VyY2VTcGVjaWZpY2F0aW9uICYge2NvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbn0sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyO1xuXG4gICAgICAgIHRoaXMudHlwZSA9ICd2ZWN0b3InO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAyMjtcbiAgICAgICAgdGhpcy5zY2hlbWUgPSAneHl6JztcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjtcbiAgICAgICAgdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNUaWxlQ2xpcHBlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgICAgIGV4dGVuZCh0aGlzLCBwaWNrKG9wdGlvbnMsIFsndXJsJywgJ3NjaGVtZScsICd0aWxlU2l6ZSddKSk7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBleHRlbmQoe3R5cGU6ICd2ZWN0b3InfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nID0gb3B0aW9ucy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG5cbiAgICAgICAgaWYgKHRoaXMudGlsZVNpemUgIT09IDUxMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2ZWN0b3IgdGlsZSBzb3VyY2VzIG11c3QgaGF2ZSBhIHRpbGVTaXplIG9mIDUxMicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG4gICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IGxvYWRUaWxlSlNPTih0aGlzLl9vcHRpb25zLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsIChlcnIsIHRpbGVKU09OKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbGVKU09OKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRoaXMsIHRpbGVKU09OKTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZUpTT04uYm91bmRzKSB0aGlzLnRpbGVCb3VuZHMgPSBuZXcgVGlsZUJvdW5kcyh0aWxlSlNPTi5ib3VuZHMsIHRoaXMubWluem9vbSwgdGhpcy5tYXh6b29tKTtcbiAgICAgICAgICAgICAgICBwb3N0VHVybnN0aWxlRXZlbnQodGlsZUpTT04udGlsZXMsIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgICAgIHBvc3RNYXBMb2FkRXZlbnQodGlsZUpTT04udGlsZXMsIHRoaXMubWFwLl9nZXRNYXBJZCgpLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuKTtcblxuICAgICAgICAgICAgICAgIC8vIGBjb250ZW50YCBpcyBpbmNsdWRlZCBoZXJlIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBgU3R5bGUjX3VwZGF0ZVNvdXJjZXNgIGlzIGNhbGxlZFxuICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGUgVGlsZUpTT04gYXJyaXZlcy4gdGhpcyBtYWtlcyBzdXJlIHRoZSB0aWxlcyBuZWVkZWQgYXJlIGxvYWRlZCBvbmNlIFRpbGVKU09OIGFycml2ZXNcbiAgICAgICAgICAgICAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNDM0NyNkaXNjdXNzaW9uX3IxMDQ0MTgwODhcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YSd9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnY29udGVudCd9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZDtcbiAgICB9XG5cbiAgICBoYXNUaWxlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGlsZUJvdW5kcyB8fCB0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModGlsZUlELmNhbm9uaWNhbCk7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fdGlsZUpTT05SZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCB0aGlzLl9vcHRpb25zKTtcbiAgICB9XG5cbiAgICBsb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwodGlsZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLCB0aGlzLnNjaGVtZSksIHRoaXMudXJsLCBudWxsKTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuVGlsZSksXG4gICAgICAgICAgICB1aWQ6IHRpbGUudWlkLFxuICAgICAgICAgICAgdGlsZUlEOiB0aWxlLnRpbGVJRCxcbiAgICAgICAgICAgIHpvb206IHRpbGUudGlsZUlELm92ZXJzY2FsZWRaLFxuICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMudGlsZVNpemUgKiB0aWxlLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKSxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5pZCxcbiAgICAgICAgICAgIHBpeGVsUmF0aW86IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxcbiAgICAgICAgICAgIHNob3dDb2xsaXNpb25Cb3hlczogdGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzLFxuICAgICAgICB9O1xuICAgICAgICBwYXJhbXMucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSB0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG5cbiAgICAgICAgaWYgKCF0aWxlLmFjdG9yIHx8IHRpbGUuc3RhdGUgPT09ICdleHBpcmVkJykge1xuICAgICAgICAgICAgdGlsZS5hY3RvciA9IHRoaXMuZGlzcGF0Y2hlci5nZXRBY3RvcigpO1xuICAgICAgICAgICAgdGlsZS5yZXF1ZXN0ID0gdGlsZS5hY3Rvci5zZW5kKCdsb2FkVGlsZScsIHBhcmFtcywgZG9uZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aWxlLnN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIC8vIHNjaGVkdWxlIHRpbGUgcmVsb2FkaW5nIGFmdGVyIGl0IGhhcyBiZWVuIGxvYWRlZFxuICAgICAgICAgICAgdGlsZS5yZWxvYWRDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS5yZXF1ZXN0ID0gdGlsZS5hY3Rvci5zZW5kKCdyZWxvYWRUaWxlJywgcGFyYW1zLCBkb25lLmJpbmQodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIsIGRhdGEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgICBpZiAoZXJyICYmIGVyci5zdGF0dXMgIT09IDQwNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnJlc291cmNlVGltaW5nKVxuICAgICAgICAgICAgICAgIHRpbGUucmVzb3VyY2VUaW1pbmcgPSBkYXRhLnJlc291cmNlVGltaW5nO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMgJiYgZGF0YSkgdGlsZS5zZXRFeHBpcnlEYXRhKGRhdGEpO1xuICAgICAgICAgICAgdGlsZS5sb2FkVmVjdG9yRGF0YShkYXRhLCB0aGlzLm1hcC5wYWludGVyKTtcblxuICAgICAgICAgICAgY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQodGhpcy5kaXNwYXRjaGVyKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLnJlbG9hZENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVGlsZSh0aWxlLCB0aWxlLnJlbG9hZENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aWxlLnJlbG9hZENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFib3J0VGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmICh0aWxlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbGUuYWN0b3IpIHtcbiAgICAgICAgICAgIHRpbGUuYWN0b3Iuc2VuZCgnYWJvcnRUaWxlJywge3VpZDogdGlsZS51aWQsIHR5cGU6IHRoaXMudHlwZSwgc291cmNlOiB0aGlzLmlkfSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVubG9hZFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICB0aWxlLnVubG9hZFZlY3RvckRhdGEoKTtcbiAgICAgICAgaWYgKHRpbGUuYWN0b3IpIHtcbiAgICAgICAgICAgIHRpbGUuYWN0b3Iuc2VuZCgncmVtb3ZlVGlsZScsIHt1aWQ6IHRpbGUudWlkLCB0eXBlOiB0aGlzLnR5cGUsIHNvdXJjZTogdGhpcy5pZH0sIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWZWN0b3JUaWxlU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtleHRlbmQsIHBpY2t9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB7Z2V0SW1hZ2UsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgbG9hZFRpbGVKU09OIGZyb20gJy4vbG9hZF90aWxlanNvbic7XG5pbXBvcnQge3Bvc3RUdXJuc3RpbGVFdmVudCwgcG9zdE1hcExvYWRFdmVudH0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IFRpbGVCb3VuZHMgZnJvbSAnLi90aWxlX2JvdW5kcyc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5cbmltcG9ydCB7Y2FjaGVFbnRyeVBvc3NpYmx5QWRkZWR9IGZyb20gJy4uL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge1xuICAgIFJhc3RlclNvdXJjZVNwZWNpZmljYXRpb24sXG4gICAgUmFzdGVyREVNU291cmNlU3BlY2lmaWNhdGlvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgUmFzdGVyVGlsZVNvdXJjZSBleHRlbmRzIEV2ZW50ZWQgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIHR5cGU6ICdyYXN0ZXInIHwgJ3Jhc3Rlci1kZW0nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcbiAgICB1cmw6IHN0cmluZztcbiAgICBzY2hlbWU6IHN0cmluZztcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuXG4gICAgYm91bmRzOiA/W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgdGlsZUJvdW5kczogVGlsZUJvdW5kcztcbiAgICByb3VuZFpvb206IGJvb2xlYW47XG4gICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcjtcbiAgICBtYXA6IE1hcDtcbiAgICB0aWxlczogQXJyYXk8c3RyaW5nPjtcblxuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgX29wdGlvbnM6IFJhc3RlclNvdXJjZVNwZWNpZmljYXRpb24gfCBSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9uO1xuICAgIF90aWxlSlNPTlJlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogUmFzdGVyU291cmNlU3BlY2lmaWNhdGlvbiB8IFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyO1xuICAgICAgICB0aGlzLnNldEV2ZW50ZWRQYXJlbnQoZXZlbnRlZFBhcmVudCk7XG5cbiAgICAgICAgdGhpcy50eXBlID0gJ3Jhc3Rlcic7XG4gICAgICAgIHRoaXMubWluem9vbSA9IDA7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IDIyO1xuICAgICAgICB0aGlzLnJvdW5kWm9vbSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NoZW1lID0gJ3h5eic7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBleHRlbmQoe3R5cGU6ICdyYXN0ZXInfSwgb3B0aW9ucyk7XG4gICAgICAgIGV4dGVuZCh0aGlzLCBwaWNrKG9wdGlvbnMsIFsndXJsJywgJ3NjaGVtZScsICd0aWxlU2l6ZSddKSk7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcbiAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0ID0gbG9hZFRpbGVKU09OKHRoaXMuX29wdGlvbnMsIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwgKGVyciwgdGlsZUpTT04pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGlsZUpTT04pIHtcbiAgICAgICAgICAgICAgICBleHRlbmQodGhpcywgdGlsZUpTT04pO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlSlNPTi5ib3VuZHMpIHRoaXMudGlsZUJvdW5kcyA9IG5ldyBUaWxlQm91bmRzKHRpbGVKU09OLmJvdW5kcywgdGhpcy5taW56b29tLCB0aGlzLm1heHpvb20pO1xuXG4gICAgICAgICAgICAgICAgcG9zdFR1cm5zdGlsZUV2ZW50KHRpbGVKU09OLnRpbGVzKTtcbiAgICAgICAgICAgICAgICBwb3N0TWFwTG9hZEV2ZW50KHRpbGVKU09OLnRpbGVzLCB0aGlzLm1hcC5fZ2V0TWFwSWQoKSwgdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9za3VUb2tlbik7XG5cbiAgICAgICAgICAgICAgICAvLyBgY29udGVudGAgaXMgaW5jbHVkZWQgaGVyZSB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYFN0eWxlI191cGRhdGVTb3VyY2VzYCBpcyBjYWxsZWRcbiAgICAgICAgICAgICAgICAvLyBiZWZvcmUgdGhlIFRpbGVKU09OIGFycml2ZXMuIHRoaXMgbWFrZXMgc3VyZSB0aGUgdGlsZXMgbmVlZGVkIGFyZSBsb2FkZWQgb25jZSBUaWxlSlNPTiBhcnJpdmVzXG4gICAgICAgICAgICAgICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9wdWxsLzQzNDcjZGlzY3Vzc2lvbl9yMTA0NDE4MDg4XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnbWV0YWRhdGEnfSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWQ7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fdGlsZUpTT05SZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCB0aGlzLl9vcHRpb25zKTtcbiAgICB9XG5cbiAgICBoYXNUaWxlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGlsZUJvdW5kcyB8fCB0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModGlsZUlELmNhbm9uaWNhbCk7XG4gICAgfVxuXG4gICAgbG9hZFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVUaWxlVVJMKHRpbGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcywgdGhpcy5zY2hlbWUpLCB0aGlzLnVybCwgdGhpcy50aWxlU2l6ZSk7XG4gICAgICAgIHRpbGUucmVxdWVzdCA9IGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLCAoZXJyLCBpbWcpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ3VubG9hZGVkJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpbWcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMpIHRpbGUuc2V0RXhwaXJ5RGF0YShpbWcpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSAoaW1nOiBhbnkpLmNhY2hlQ29udHJvbDtcbiAgICAgICAgICAgICAgICBkZWxldGUgKGltZzogYW55KS5leHBpcmVzO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMubWFwLnBhaW50ZXIuY29udGV4dDtcbiAgICAgICAgICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShpbWcud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlLnRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlLnVwZGF0ZShpbWcsIHt1c2VNaXBtYXA6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCBpbWcsIGdsLlJHQkEsIHt1c2VNaXBtYXA6IHRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFLCBnbC5MSU5FQVJfTUlQTUFQX05FQVJFU1QpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyZihnbC5URVhUVVJFXzJELCBjb250ZXh0LmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgY29udGV4dC5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdsb2FkZWQnO1xuXG4gICAgICAgICAgICAgICAgY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQodGhpcy5kaXNwYXRjaGVyKTtcblxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIGlmICh0aWxlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBpZiAodGlsZS50ZXh0dXJlKSB0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0aWxlLnRleHR1cmUpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclRpbGVTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgUmFzdGVyVGlsZVNvdXJjZSBmcm9tICcuL3Jhc3Rlcl90aWxlX3NvdXJjZSc7XG4vLyBlbnN1cmUgREVNRGF0YSBpcyByZWdpc3RlcmVkIGZvciB3b3JrZXIgdHJhbnNmZXIgb24gbWFpbiB0aHJlYWQ6XG5pbXBvcnQgJy4uL2RhdGEvZGVtX2RhdGEnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgUmFzdGVyREVNVGlsZVNvdXJjZSBleHRlbmRzIFJhc3RlclRpbGVTb3VyY2UgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIGVuY29kaW5nOiBcIm1hcGJveFwiIHwgXCJ0ZXJyYXJpdW1cIjtcblxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncmFzdGVyLWRlbSc7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IDIyO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gZXh0ZW5kKHt0eXBlOiAncmFzdGVyLWRlbSd9LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2RpbmcgfHwgXCJtYXBib3hcIjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAncmFzdGVyLWRlbScsXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMudGlsZVNpemUsXG4gICAgICAgICAgICB0aWxlczogdGhpcy50aWxlcyxcbiAgICAgICAgICAgIGJvdW5kczogdGhpcy5ib3VuZHMsXG4gICAgICAgICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSwgdGhpcy51cmwsIHRoaXMudGlsZVNpemUpO1xuICAgICAgICB0aWxlLnJlcXVlc3QgPSBnZXRJbWFnZSh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5UaWxlKSwgaW1hZ2VMb2FkZWQuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdGlsZS5uZWlnaGJvcmluZ1RpbGVzID0gdGhpcy5fZ2V0TmVpZ2hib3JpbmdUaWxlcyh0aWxlLnRpbGVJRCk7XG4gICAgICAgIGZ1bmN0aW9uIGltYWdlTG9hZGVkKGVyciwgaW1nKSB7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICAgICAgaWYgKHRpbGUuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAndW5sb2FkZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGltZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcykgdGlsZS5zZXRFeHBpcnlEYXRhKGltZyk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIChpbWc6IGFueSkuY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSAoaW1nOiBhbnkpLmV4cGlyZXM7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3SW1hZ2VEYXRhID0gYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1nLCAxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHVpZDogdGlsZS51aWQsXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkOiB0aWxlLnRpbGVJRCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgICAgICByYXdJbWFnZURhdGEsXG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiB0aGlzLmVuY29kaW5nXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghdGlsZS5hY3RvciB8fCB0aWxlLnN0YXRlID09PSAnZXhwaXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS5hY3RvciA9IHRoaXMuZGlzcGF0Y2hlci5nZXRBY3RvcigpO1xuICAgICAgICAgICAgICAgICAgICB0aWxlLmFjdG9yLnNlbmQoJ2xvYWRERU1UaWxlJywgcGFyYW1zLCBkb25lLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyLCBkZW0pIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkZW0pIHtcbiAgICAgICAgICAgICAgICB0aWxlLmRlbSA9IGRlbTtcbiAgICAgICAgICAgICAgICB0aWxlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdsb2FkZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldE5laWdoYm9yaW5nVGlsZXModGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbCA9IHRpbGVJRC5jYW5vbmljYWw7XG4gICAgICAgIGNvbnN0IGRpbSA9IE1hdGgucG93KDIsIGNhbm9uaWNhbC56KTtcblxuICAgICAgICBjb25zdCBweCA9IChjYW5vbmljYWwueCAtIDEgKyBkaW0pICUgZGltO1xuICAgICAgICBjb25zdCBweHcgPSBjYW5vbmljYWwueCA9PT0gMCA/IHRpbGVJRC53cmFwIC0gMSA6IHRpbGVJRC53cmFwO1xuICAgICAgICBjb25zdCBueCA9IChjYW5vbmljYWwueCArIDEgKyBkaW0pICUgZGltO1xuICAgICAgICBjb25zdCBueHcgPSBjYW5vbmljYWwueCArIDEgPT09IGRpbSA/IHRpbGVJRC53cmFwICsgMSA6IHRpbGVJRC53cmFwO1xuXG4gICAgICAgIGNvbnN0IG5laWdoYm9yaW5nVGlsZXMgPSB7fTtcbiAgICAgICAgLy8gYWRkIGFkamFjZW50IHRpbGVzXG4gICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBweHcsIGNhbm9uaWNhbC56LCBweCwgY2Fub25pY2FsLnkpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgbnh3LCBjYW5vbmljYWwueiwgbngsIGNhbm9uaWNhbC55KS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcblxuICAgICAgICAvLyBBZGQgdXBwZXIgbmVpZ2hib3JpbmdUaWxlc1xuICAgICAgICBpZiAoY2Fub25pY2FsLnkgPiAwKSB7XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgcHh3LCBjYW5vbmljYWwueiwgcHgsIGNhbm9uaWNhbC55IC0gMSkua2V5XSA9IHtiYWNrZmlsbGVkOiBmYWxzZX07XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgdGlsZUlELndyYXAsIGNhbm9uaWNhbC56LCBjYW5vbmljYWwueCwgY2Fub25pY2FsLnkgLSAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBueHcsIGNhbm9uaWNhbC56LCBueCwgY2Fub25pY2FsLnkgLSAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgbG93ZXIgbmVpZ2hib3JpbmdUaWxlc1xuICAgICAgICBpZiAoY2Fub25pY2FsLnkgKyAxIDwgZGltKSB7XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgcHh3LCBjYW5vbmljYWwueiwgcHgsIGNhbm9uaWNhbC55ICsgMSkua2V5XSA9IHtiYWNrZmlsbGVkOiBmYWxzZX07XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgdGlsZUlELndyYXAsIGNhbm9uaWNhbC56LCBjYW5vbmljYWwueCwgY2Fub25pY2FsLnkgKyAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBueHcsIGNhbm9uaWNhbC56LCBueCwgY2Fub25pY2FsLnkgKyAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZWlnaGJvcmluZ1RpbGVzO1xuICAgIH1cblxuICAgIHVubG9hZFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGlsZS5kZW1UZXh0dXJlKSB0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0aWxlLmRlbVRleHR1cmUpO1xuICAgICAgICBpZiAodGlsZS5mYm8pIHtcbiAgICAgICAgICAgIHRpbGUuZmJvLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLmZibztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGlsZS5kZW0pIGRlbGV0ZSB0aWxlLmRlbTtcbiAgICAgICAgZGVsZXRlIHRpbGUubmVpZ2hib3JpbmdUaWxlcztcblxuICAgICAgICB0aWxlLnN0YXRlID0gJ3VubG9hZGVkJztcbiAgICAgICAgaWYgKHRpbGUuYWN0b3IpIHtcbiAgICAgICAgICAgIHRpbGUuYWN0b3Iuc2VuZCgncmVtb3ZlREVNVGlsZScsIHt1aWQ6IHRpbGUudWlkLCBzb3VyY2U6IHRoaXMuaWR9KTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBSYXN0ZXJERU1UaWxlU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCB7UmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0dlb0pTT04sIEdlb0pTT05GZWF0dXJlfSBmcm9tICdAbWFwYm94L2dlb2pzb24tdHlwZXMnO1xuaW1wb3J0IHR5cGUge0dlb0pTT05Tb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuLyoqXG4gKiBBIHNvdXJjZSBjb250YWluaW5nIEdlb0pTT04uXG4gKiAoU2VlIHRoZSBbU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcy1nZW9qc29uKSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvZiBvcHRpb25zLilcbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZFNvdXJjZSgnc29tZSBpZCcsIHtcbiAqICAgICB0eXBlOiAnZ2VvanNvbicsXG4gKiAgICAgZGF0YTogJ2h0dHBzOi8vZDJhZDZiNHVyN3l2cHEuY2xvdWRmcm9udC5uZXQvbmF0dXJhbGVhcnRoLTMuMy4wL25lXzEwbV9wb3J0cy5nZW9qc29uJ1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAnZ2VvanNvbicsXG4gKiAgICBkYXRhOiB7XG4gKiAgICAgICAgXCJ0eXBlXCI6IFwiRmVhdHVyZUNvbGxlY3Rpb25cIixcbiAqICAgICAgICBcImZlYXR1cmVzXCI6IFt7XG4gKiAgICAgICAgICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAqICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHt9LFxuICogICAgICAgICAgICBcImdlb21ldHJ5XCI6IHtcbiAqICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgICAgICAgICAgICAgICBcImNvb3JkaW5hdGVzXCI6IFtcbiAqICAgICAgICAgICAgICAgICAgICAtNzYuNTMwNjMyOTcyNzE3MjksXG4gKiAgICAgICAgICAgICAgICAgICAgMzkuMTgxNzQwNzc5OTQxMDhcbiAqICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgfVxuICogICAgICAgIH1dXG4gKiAgICB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpLnNldERhdGEoe1xuICogICBcInR5cGVcIjogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICogICBcImZlYXR1cmVzXCI6IFt7XG4gKiAgICAgICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXG4gKiAgICAgICBcInByb3BlcnRpZXNcIjogeyBcIm5hbWVcIjogXCJOdWxsIElzbGFuZFwiIH0sXG4gKiAgICAgICBcImdlb21ldHJ5XCI6IHtcbiAqICAgICAgICAgICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICAgICAgICAgIFwiY29vcmRpbmF0ZXNcIjogWyAwLCAwIF1cbiAqICAgICAgIH1cbiAqICAgfV1cbiAqIH0pO1xuICogQHNlZSBbRHJhdyBHZW9KU09OIHBvaW50c10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9nZW9qc29uLW1hcmtlcnMvKVxuICogQHNlZSBbQWRkIGEgR2VvSlNPTiBsaW5lXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dlb2pzb24tbGluZS8pXG4gKiBAc2VlIFtDcmVhdGUgYSBoZWF0bWFwIGZyb20gcG9pbnRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hlYXRtYXAvKVxuICogQHNlZSBbQ3JlYXRlIGFuZCBzdHlsZSBjbHVzdGVyc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jbHVzdGVyLylcbiAqL1xuY2xhc3MgR2VvSlNPTlNvdXJjZSBleHRlbmRzIEV2ZW50ZWQgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIHR5cGU6ICdnZW9qc29uJztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBhdHRyaWJ1dGlvbjogc3RyaW5nO1xuXG4gICAgaXNUaWxlQ2xpcHBlZDogYm9vbGVhbjtcbiAgICByZXBhcnNlT3ZlcnNjYWxlZDogYm9vbGVhbjtcbiAgICBfZGF0YTogR2VvSlNPTiB8IHN0cmluZztcbiAgICBfb3B0aW9uczogYW55O1xuICAgIHdvcmtlck9wdGlvbnM6IGFueTtcbiAgICBtYXA6IE1hcDtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgX2xvYWRlZDogYm9vbGVhbjtcbiAgICBfY29sbGVjdFJlc291cmNlVGltaW5nOiBib29sZWFuO1xuICAgIF9yZXNvdXJjZVRpbWluZzogQXJyYXk8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZz47XG4gICAgX3JlbW92ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IEdlb0pTT05Tb3VyY2VTcGVjaWZpY2F0aW9uICYge3dvcmtlck9wdGlvbnM/OiBhbnksIGNvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbn0sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICAgICAgLy8gYHR5cGVgIGlzIGEgcHJvcGVydHkgcmF0aGVyIHRoYW4gYSBjb25zdGFudCB0byBtYWtlIGl0IGVhc3kgZm9yIDNyZFxuICAgICAgICAvLyBwYXJ0aWVzIHRvIHVzZSBHZW9KU09OU291cmNlIHRvIGJ1aWxkIHRoZWlyIG93biBzb3VyY2UgdHlwZXMuXG4gICAgICAgIHRoaXMudHlwZSA9ICdnZW9qc29uJztcblxuICAgICAgICB0aGlzLm1pbnpvb20gPSAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAxODtcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjtcbiAgICAgICAgdGhpcy5pc1RpbGVDbGlwcGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5hY3RvciA9IGRpc3BhdGNoZXIuZ2V0QWN0b3IoKTtcbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSAob3B0aW9ucy5kYXRhOiBhbnkpO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gZXh0ZW5kKHt9LCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSBvcHRpb25zLmNvbGxlY3RSZXNvdXJjZVRpbWluZztcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VUaW1pbmcgPSBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5tYXh6b29tICE9PSB1bmRlZmluZWQpIHRoaXMubWF4em9vbSA9IG9wdGlvbnMubWF4em9vbTtcbiAgICAgICAgaWYgKG9wdGlvbnMudHlwZSkgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuICAgICAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGlvbikgdGhpcy5hdHRyaWJ1dGlvbiA9IG9wdGlvbnMuYXR0cmlidXRpb247XG5cbiAgICAgICAgY29uc3Qgc2NhbGUgPSBFWFRFTlQgLyB0aGlzLnRpbGVTaXplO1xuXG4gICAgICAgIC8vIHNlbnQgdG8gdGhlIHdvcmtlciwgYWxvbmcgd2l0aCBgdXJsOiAuLi5gIG9yIGBkYXRhOiBsaXRlcmFsIGdlb2pzb25gLFxuICAgICAgICAvLyBzbyB0aGF0IGl0IGNhbiBsb2FkL3BhcnNlL2luZGV4IHRoZSBnZW9qc29uIGRhdGFcbiAgICAgICAgLy8gZXh0ZW5kaW5nIHdpdGggYG9wdGlvbnMud29ya2VyT3B0aW9uc2AgaGVscHMgdG8gbWFrZSBpdCBlYXN5IGZvclxuICAgICAgICAvLyB0aGlyZC1wYXJ0eSBzb3VyY2VzIHRvIGhhY2svcmV1c2UgR2VvSlNPTlNvdXJjZS5cbiAgICAgICAgdGhpcy53b3JrZXJPcHRpb25zID0gZXh0ZW5kKHtcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5pZCxcbiAgICAgICAgICAgIGNsdXN0ZXI6IG9wdGlvbnMuY2x1c3RlciB8fCBmYWxzZSxcbiAgICAgICAgICAgIGdlb2pzb25WdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBidWZmZXI6IChvcHRpb25zLmJ1ZmZlciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5idWZmZXIgOiAxMjgpICogc2NhbGUsXG4gICAgICAgICAgICAgICAgdG9sZXJhbmNlOiAob3B0aW9ucy50b2xlcmFuY2UgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudG9sZXJhbmNlIDogMC4zNzUpICogc2NhbGUsXG4gICAgICAgICAgICAgICAgZXh0ZW50OiBFWFRFTlQsXG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogdGhpcy5tYXh6b29tLFxuICAgICAgICAgICAgICAgIGxpbmVNZXRyaWNzOiBvcHRpb25zLmxpbmVNZXRyaWNzIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlSWQ6IG9wdGlvbnMuZ2VuZXJhdGVJZCB8fCBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1cGVyY2x1c3Rlck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBtYXhab29tOiBvcHRpb25zLmNsdXN0ZXJNYXhab29tICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihvcHRpb25zLmNsdXN0ZXJNYXhab29tLCB0aGlzLm1heHpvb20gLSAxKSA6XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm1heHpvb20gLSAxKSxcbiAgICAgICAgICAgICAgICBleHRlbnQ6IEVYVEVOVCxcbiAgICAgICAgICAgICAgICByYWRpdXM6IChvcHRpb25zLmNsdXN0ZXJSYWRpdXMgfHwgNTApICogc2NhbGUsXG4gICAgICAgICAgICAgICAgbG9nOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsdXN0ZXJQcm9wZXJ0aWVzOiBvcHRpb25zLmNsdXN0ZXJQcm9wZXJ0aWVzXG4gICAgICAgIH0sIG9wdGlvbnMud29ya2VyT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnfSkpO1xuICAgICAgICB0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkYXRhOiBPYmplY3QgPSB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ307XG4gICAgICAgICAgICBpZiAodGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nICYmIHRoaXMuX3Jlc291cmNlVGltaW5nICYmICh0aGlzLl9yZXNvdXJjZVRpbWluZy5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgIGRhdGEucmVzb3VyY2VUaW1pbmcgPSB0aGlzLl9yZXNvdXJjZVRpbWluZztcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhbHRob3VnaCBHZW9KU09OIHNvdXJjZXMgY29udGFpbiBubyBtZXRhZGF0YSwgd2UgZmlyZSB0aGlzIGV2ZW50IHRvIGxldCB0aGUgU291cmNlQ2FjaGVcbiAgICAgICAgICAgIC8vIGtub3cgaXRzIG9rIHRvIHN0YXJ0IHJlcXVlc3RpbmcgdGlsZXMuXG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywgZGF0YSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgR2VvSlNPTiBkYXRhIGFuZCByZS1yZW5kZXJzIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdHxzdHJpbmd9IGRhdGEgQSBHZW9KU09OIGRhdGEgb2JqZWN0IG9yIGEgVVJMIHRvIG9uZS4gVGhlIGxhdHRlciBpcyBwcmVmZXJhYmxlIGluIHRoZSBjYXNlIG9mIGxhcmdlIEdlb0pTT04gZmlsZXMuXG4gICAgICogQHJldHVybnMge0dlb0pTT05Tb3VyY2V9IHRoaXNcbiAgICAgKi9cbiAgICBzZXREYXRhKGRhdGE6IEdlb0pTT04gfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlV29ya2VyRGF0YSgoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycikpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGF0YTogT2JqZWN0ID0ge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdjb250ZW50J307XG4gICAgICAgICAgICBpZiAodGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nICYmIHRoaXMuX3Jlc291cmNlVGltaW5nICYmICh0aGlzLl9yZXNvdXJjZVRpbWluZy5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgIGRhdGEucmVzb3VyY2VUaW1pbmcgPSB0aGlzLl9yZXNvdXJjZVRpbWluZztcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIGRhdGEpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGNsdXN0ZXJlZCBzb3VyY2VzLCBmZXRjaGVzIHRoZSB6b29tIGF0IHdoaWNoIHRoZSBnaXZlbiBjbHVzdGVyIGV4cGFuZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlcklkIFRoZSB2YWx1ZSBvZiB0aGUgY2x1c3RlcidzIGBjbHVzdGVyX2lkYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgem9vbSB2YWx1ZSBpcyByZXRyaWV2ZWQgKGAoZXJyb3IsIHpvb20pID0+IHsgLi4uIH1gKS5cbiAgICAgKiBAcmV0dXJucyB7R2VvSlNPTlNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKGNsdXN0ZXJJZDogbnVtYmVyLCBjYWxsYmFjazogQ2FsbGJhY2s8bnVtYmVyPikge1xuICAgICAgICB0aGlzLmFjdG9yLnNlbmQoJ2dlb2pzb24uZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20nLCB7Y2x1c3RlcklkLCBzb3VyY2U6IHRoaXMuaWR9LCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvciBjbHVzdGVyZWQgc291cmNlcywgZmV0Y2hlcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIGNsdXN0ZXIgb24gdGhlIG5leHQgem9vbSBsZXZlbCAoYXMgYW4gYXJyYXkgb2YgR2VvSlNPTiBmZWF0dXJlcykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlcklkIFRoZSB2YWx1ZSBvZiB0aGUgY2x1c3RlcidzIGBjbHVzdGVyX2lkYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZmVhdHVyZXMgYXJlIHJldHJpZXZlZCAoYChlcnJvciwgZmVhdHVyZXMpID0+IHsgLi4uIH1gKS5cbiAgICAgKiBAcmV0dXJucyB7R2VvSlNPTlNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIGdldENsdXN0ZXJDaGlsZHJlbihjbHVzdGVySWQ6IG51bWJlciwgY2FsbGJhY2s6IENhbGxiYWNrPEFycmF5PEdlb0pTT05GZWF0dXJlPj4pIHtcbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKCdnZW9qc29uLmdldENsdXN0ZXJDaGlsZHJlbicsIHtjbHVzdGVySWQsIHNvdXJjZTogdGhpcy5pZH0sIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGNsdXN0ZXJlZCBzb3VyY2VzLCBmZXRjaGVzIHRoZSBvcmlnaW5hbCBwb2ludHMgdGhhdCBiZWxvbmcgdG8gdGhlIGNsdXN0ZXIgKGFzIGFuIGFycmF5IG9mIEdlb0pTT04gZmVhdHVyZXMpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNsdXN0ZXJJZCBUaGUgdmFsdWUgb2YgdGhlIGNsdXN0ZXIncyBgY2x1c3Rlcl9pZGAgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIGxpbWl0IFRoZSBtYXhpbXVtIG51bWJlciBvZiBmZWF0dXJlcyB0byByZXR1cm4uXG4gICAgICogQHBhcmFtIG9mZnNldCBUaGUgbnVtYmVyIG9mIGZlYXR1cmVzIHRvIHNraXAgKGUuZy4gZm9yIHBhZ2luYXRpb24pLlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmZWF0dXJlcyBhcmUgcmV0cmlldmVkIChgKGVycm9yLCBmZWF0dXJlcykgPT4geyAuLi4gfWApLlxuICAgICAqIEByZXR1cm5zIHtHZW9KU09OU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckxlYXZlcyhjbHVzdGVySWQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIsIGNhbGxiYWNrOiBDYWxsYmFjazxBcnJheTxHZW9KU09ORmVhdHVyZT4+KSB7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgnZ2VvanNvbi5nZXRDbHVzdGVyTGVhdmVzJywge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgY2x1c3RlcklkLFxuICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICBvZmZzZXRcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlc3BvbnNpYmxlIGZvciBpbnZva2luZyBXb3JrZXJTb3VyY2UncyBnZW9qc29uLmxvYWREYXRhIHRhcmdldCwgd2hpY2hcbiAgICAgKiBoYW5kbGVzIGxvYWRpbmcgdGhlIGdlb2pzb24gZGF0YSBhbmQgcHJlcGFyaW5nIHRvIHNlcnZlIGl0IHVwIGFzIHRpbGVzLFxuICAgICAqIHVzaW5nIGdlb2pzb24tdnQgb3Igc3VwZXJjbHVzdGVyIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqL1xuICAgIF91cGRhdGVXb3JrZXJEYXRhKGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgdGhpcy53b3JrZXJPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdWVzdCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGJyb3dzZXIucmVzb2x2ZVVSTChkYXRhKSwgUmVzb3VyY2VUeXBlLlNvdXJjZSk7XG4gICAgICAgICAgICBvcHRpb25zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nID0gdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0YXJnZXQge3RoaXMudHlwZX0ubG9hZERhdGEgcmF0aGVyIHRoYW4gbGl0ZXJhbGx5IGdlb2pzb24ubG9hZERhdGEsXG4gICAgICAgIC8vIHNvIHRoYXQgb3RoZXIgZ2VvanNvbi1saWtlIHNvdXJjZSB0eXBlcyBjYW4gZWFzaWx5IHJldXNlIHRoaXNcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb25cbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKGAke3RoaXMudHlwZX0ubG9hZERhdGFgLCBvcHRpb25zLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZW1vdmVkIHx8IChyZXN1bHQgJiYgcmVzdWx0LmFiYW5kb25lZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnJlc291cmNlVGltaW5nICYmIHJlc3VsdC5yZXNvdXJjZVRpbWluZ1t0aGlzLmlkXSlcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IHJlc3VsdC5yZXNvdXJjZVRpbWluZ1t0aGlzLmlkXS5zbGljZSgwKTtcbiAgICAgICAgICAgIC8vIEFueSBgbG9hZERhdGFgIGNhbGxzIHRoYXQgcGlsZWQgdXAgd2hpbGUgd2Ugd2VyZSBwcm9jZXNzaW5nXG4gICAgICAgICAgICAvLyB0aGlzIG9uZSB3aWxsIGdldCBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSBjYWxsIHdoZW4gdGhpc1xuICAgICAgICAgICAgLy8gJ2NvYWxlc2NlJyBtZXNzYWdlIGlzIHByb2Nlc3NlZC5cbiAgICAgICAgICAgIC8vIFdlIHdvdWxkIHNlbGYtc2VuZCBmcm9tIHRoZSB3b3JrZXIgaWYgd2UgaGFkIGFjY2VzcyB0byBpdHNcbiAgICAgICAgICAgIC8vIG1lc3NhZ2UgcXVldWUuIFdhaXRpbmcgaW5zdGVhZCBmb3IgdGhlICdjb2FsZXNjZScgdG8gcm91bmQtdHJpcFxuICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgZm9yZWdyb3VuZCBqdXN0IG1lYW5zIHdlJ3JlIHRocm90dGxpbmcgdGhlIHdvcmtlclxuICAgICAgICAgICAgLy8gdG8gcnVuIGF0IGEgbGl0dGxlIGxlc3MgdGhhbiBmdWxsLXRocm90dGxlLlxuICAgICAgICAgICAgdGhpcy5hY3Rvci5zZW5kKGAke3RoaXMudHlwZX0uY29hbGVzY2VgLCB7c291cmNlOiBvcHRpb25zLnNvdXJjZX0sIG51bGwpO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gIXRpbGUuYWN0b3IgPyAnbG9hZFRpbGUnIDogJ3JlbG9hZFRpbGUnO1xuICAgICAgICB0aWxlLmFjdG9yID0gdGhpcy5hY3RvcjtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgIHRpbGVJRDogdGlsZS50aWxlSUQsXG4gICAgICAgICAgICB6b29tOiB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgIG1heFpvb206IHRoaXMubWF4em9vbSxcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplLFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgcGl4ZWxSYXRpbzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzOiB0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXNcbiAgICAgICAgfTtcblxuICAgICAgICB0aWxlLnJlcXVlc3QgPSB0aGlzLmFjdG9yLnNlbmQobWVzc2FnZSwgcGFyYW1zLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICAgICAgdGlsZS51bmxvYWRWZWN0b3JEYXRhKCk7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGlsZS5sb2FkVmVjdG9yRGF0YShkYXRhLCB0aGlzLm1hcC5wYWludGVyLCBtZXNzYWdlID09PSAncmVsb2FkVGlsZScpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFib3J0VGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmICh0aWxlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGlsZS5hYm9ydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUpIHtcbiAgICAgICAgdGlsZS51bmxvYWRWZWN0b3JEYXRhKCk7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgncmVtb3ZlVGlsZScsIHt1aWQ6IHRpbGUudWlkLCB0eXBlOiB0aGlzLnR5cGUsIHNvdXJjZTogdGhpcy5pZH0pO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICB0aGlzLl9yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKCdyZW1vdmVTb3VyY2UnLCB7dHlwZTogdGhpcy50eXBlLCBzb3VyY2U6IHRoaXMuaWR9KTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIHRoaXMuX29wdGlvbnMsIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuX2RhdGFcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2VvSlNPTlNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7Z2V0SW1hZ2UsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHtSYXN0ZXJCb3VuZHNBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgcmFzdGVyQm91bmRzQXR0cmlidXRlcyBmcm9tICcuLi9kYXRhL3Jhc3Rlcl9ib3VuZHNfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2V9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB0eXBlIHtDYW52YXNTb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuL2NhbnZhc19zb3VyY2UnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtcbiAgICBJbWFnZVNvdXJjZVNwZWNpZmljYXRpb24sXG4gICAgVmlkZW9Tb3VyY2VTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG50eXBlIENvb3JkaW5hdGVzID0gW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dO1xuXG4vKipcbiAqIEEgZGF0YSBzb3VyY2UgY29udGFpbmluZyBhbiBpbWFnZS5cbiAqIChTZWUgdGhlIFtTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzLWltYWdlKSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvZiBvcHRpb25zLilcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gYWRkIHRvIG1hcFxuICogbWFwLmFkZFNvdXJjZSgnc29tZSBpZCcsIHtcbiAqICAgIHR5cGU6ICdpbWFnZScsXG4gKiAgICB1cmw6ICdodHRwczovL3d3dy5tYXBib3guY29tL2ltYWdlcy9mb28ucG5nJyxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE4XSxcbiAqICAgICAgICBbLTc2LjUyLCAzOS4xN10sXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMTddXG4gKiAgICBdXG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGUgY29vcmRpbmF0ZXNcbiAqIHZhciBteVNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKTtcbiAqIG15U291cmNlLnNldENvb3JkaW5hdGVzKFtcbiAqICAgICBbLTc2LjU0MzM1NzM3MjI4Mzk0LCAzOS4xODU3OTkwNzIyOTc0OF0sXG4gKiAgICAgWy03Ni41MjgwMzY1OTQzOTA4NywgMzkuMTgzODM2NDg0NzU4N10sXG4gKiAgICAgWy03Ni41Mjk1Mzg2MzE0MzkyLCAzOS4xNzY4MzM5MjUwNzYwNl0sXG4gKiAgICAgWy03Ni41NDUyMDI3MzIwODYxOCwgMzkuMTc4NzYzNDQxMDY2NDJdXG4gKiBdKTtcbiAqXG4gKiAvLyB1cGRhdGUgdXJsIGFuZCBjb29yZGluYXRlcyBzaW11bHRhbmVvdXNseVxuICogbXlTb3VyY2UudXBkYXRlSW1hZ2Uoe1xuICogICAgdXJsOiAnaHR0cHM6Ly93d3cubWFwYm94LmNvbS9pbWFnZXMvYmFyLnBuZycsXG4gKiAgICBjb29yZGluYXRlczogW1xuICogICAgICAgIFstNzYuNTQzMzU3MzcyMjgzOTQsIDM5LjE4NTc5OTA3MjI5NzQ4XSxcbiAqICAgICAgICBbLTc2LjUyODAzNjU5NDM5MDg3LCAzOS4xODM4MzY0ODQ3NTg3XSxcbiAqICAgICAgICBbLTc2LjUyOTUzODYzMTQzOTIsIDM5LjE3NjgzMzkyNTA3NjA2XSxcbiAqICAgICAgICBbLTc2LjU0NTIwMjczMjA4NjE4LCAzOS4xNzg3NjM0NDEwNjY0Ml1cbiAqICAgIF1cbiAqIH0pXG4gKlxuICogbWFwLnJlbW92ZVNvdXJjZSgnc29tZSBpZCcpOyAgLy8gcmVtb3ZlXG4gKiBAc2VlIFtBZGQgYW4gaW1hZ2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaW1hZ2Utb24tYS1tYXAvKVxuICovXG5jbGFzcyBJbWFnZVNvdXJjZSBleHRlbmRzIEV2ZW50ZWQgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICB1cmw6IHN0cmluZztcblxuICAgIGNvb3JkaW5hdGVzOiBDb29yZGluYXRlcztcbiAgICB0aWxlczoge1tzdHJpbmddOiBUaWxlfTtcbiAgICBvcHRpb25zOiBhbnk7XG4gICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcjtcbiAgICBtYXA6IE1hcDtcbiAgICB0ZXh0dXJlOiBUZXh0dXJlIHwgbnVsbDtcbiAgICBpbWFnZTogSFRNTEltYWdlRWxlbWVudDtcbiAgICB0aWxlSUQ6IENhbm9uaWNhbFRpbGVJRDtcbiAgICBfYm91bmRzQXJyYXk6IFJhc3RlckJvdW5kc0FycmF5O1xuICAgIGJvdW5kc0J1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIGJvdW5kc1NlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IEltYWdlU291cmNlU3BlY2lmaWNhdGlvbiB8IFZpZGVvU291cmNlU3BlY2lmaWNhdGlvbiB8IENhbnZhc1NvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyO1xuICAgICAgICB0aGlzLmNvb3JkaW5hdGVzID0gb3B0aW9ucy5jb29yZGluYXRlcztcblxuICAgICAgICB0aGlzLnR5cGUgPSAnaW1hZ2UnO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAyMjtcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjtcbiAgICAgICAgdGhpcy50aWxlcyA9IHt9O1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnNldEV2ZW50ZWRQYXJlbnQoZXZlbnRlZFBhcmVudCk7XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBsb2FkKG5ld0Nvb3JkaW5hdGVzPzogQ29vcmRpbmF0ZXMsIHN1Y2Nlc3NDYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcblxuICAgICAgICB0aGlzLnVybCA9IHRoaXMub3B0aW9ucy51cmw7XG5cbiAgICAgICAgZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodGhpcy51cmwsIFJlc291cmNlVHlwZS5JbWFnZSksIChlcnIsIGltYWdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0Nvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29vcmRpbmF0ZXMgPSBuZXdDb29yZGluYXRlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluaXNoTG9hZGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgaW1hZ2UgVVJMIGFuZCwgb3B0aW9uYWxseSwgdGhlIGNvb3JkaW5hdGVzLiBUbyBhdm9pZCBoYXZpbmcgdGhlIGltYWdlIGZsYXNoIGFmdGVyIGNoYW5naW5nLFxuICAgICAqIHNldCB0aGUgYHJhc3Rlci1mYWRlLWR1cmF0aW9uYCBwYWludCBwcm9wZXJ0eSBvbiB0aGUgcmFzdGVyIGxheWVyIHRvIDAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy51cmxdIFJlcXVpcmVkIGltYWdlIFVSTC5cbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBbb3B0aW9ucy5jb29yZGluYXRlc10gRm91ciBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMsXG4gICAgICogICByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBudW1iZXJzLCB3aGljaCBkZWZpbmUgdGhlIGNvcm5lcnMgb2YgdGhlIGltYWdlLlxuICAgICAqICAgVGhlIGNvb3JkaW5hdGVzIHN0YXJ0IGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGltYWdlIGFuZCBwcm9jZWVkIGluIGNsb2Nrd2lzZSBvcmRlci5cbiAgICAgKiAgIFRoZXkgZG8gbm90IGhhdmUgdG8gcmVwcmVzZW50IGEgcmVjdGFuZ2xlLlxuICAgICAqIEByZXR1cm5zIHtJbWFnZVNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIHVwZGF0ZUltYWdlKG9wdGlvbnM6IHt1cmw6IHN0cmluZywgY29vcmRpbmF0ZXM/OiBDb29yZGluYXRlc30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmltYWdlIHx8ICFvcHRpb25zLnVybCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zLnVybCA9IG9wdGlvbnMudXJsO1xuICAgICAgICB0aGlzLmxvYWQob3B0aW9ucy5jb29yZGluYXRlcywgKCkgPT4geyB0aGlzLnRleHR1cmUgPSBudWxsOyB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2ZpbmlzaExvYWRpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ30pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBpbWFnZSdzIGNvb3JkaW5hdGVzIGFuZCByZS1yZW5kZXJzIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBGb3VyIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyxcbiAgICAgKiAgIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG51bWJlcnMsIHdoaWNoIGRlZmluZSB0aGUgY29ybmVycyBvZiB0aGUgaW1hZ2UuXG4gICAgICogICBUaGUgY29vcmRpbmF0ZXMgc3RhcnQgYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgaW1hZ2UgYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge0ltYWdlU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgc2V0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IENvb3JkaW5hdGVzKSB7XG4gICAgICAgIHRoaXMuY29vcmRpbmF0ZXMgPSBjb29yZGluYXRlcztcblxuICAgICAgICAvLyBDYWxjdWxhdGUgd2hpY2ggbWVyY2F0b3IgdGlsZSBpcyBzdWl0YWJsZSBmb3IgcmVuZGVyaW5nIHRoZSB2aWRlbyBpblxuICAgICAgICAvLyBhbmQgY3JlYXRlIGEgYnVmZmVyIHdpdGggdGhlIGNvcm5lciBjb29yZGluYXRlcy4gVGhlc2UgY29vcmRpbmF0ZXNcbiAgICAgICAgLy8gbWF5IGJlIG91dHNpZGUgdGhlIHRpbGUsIGJlY2F1c2UgcmFzdGVyIHRpbGVzIGFyZW4ndCBjbGlwcGVkIHdoZW4gcmVuZGVyaW5nLlxuXG4gICAgICAgIC8vIHRyYW5zZm9ybSB0aGUgZ2VvIGNvb3JkaW5hdGVzIGludG8gKHpvb20gMCkgdGlsZSBzcGFjZSBjb29yZGluYXRlc1xuICAgICAgICBjb25zdCBjb3JuZXJDb29yZHMgPSBjb29yZGluYXRlcy5tYXAoTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB0aWxlIHdlJ2xsIHVzZSB0byBob2xkIHRoaXMgaW1hZ2Unc1xuICAgICAgICAvLyByZW5kZXIgZGF0YVxuICAgICAgICB0aGlzLnRpbGVJRCA9IGdldENvb3JkaW5hdGVzQ2VudGVyVGlsZUlEKGNvcm5lckNvb3Jkcyk7XG5cbiAgICAgICAgLy8gQ29uc3RyYWluIG1pbi9tYXggem9vbSB0byBvdXIgdGlsZSdzIHpvb20gbGV2ZWwgaW4gb3JkZXIgdG8gZm9yY2VcbiAgICAgICAgLy8gU291cmNlQ2FjaGUgdG8gcmVxdWVzdCB0aGlzIHRpbGUgKG5vIG1hdHRlciB3aGF0IHRoZSBtYXAncyB6b29tXG4gICAgICAgIC8vIGxldmVsKVxuICAgICAgICB0aGlzLm1pbnpvb20gPSB0aGlzLm1heHpvb20gPSB0aGlzLnRpbGVJRC56O1xuXG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgY29ybmVyIGNvb3JkaW5hdGVzIGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2Ygb3VyXG4gICAgICAgIC8vIHRpbGUuXG4gICAgICAgIGNvbnN0IHRpbGVDb29yZHMgPSBjb3JuZXJDb29yZHMubWFwKChjb29yZCkgPT4gdGhpcy50aWxlSUQuZ2V0VGlsZVBvaW50KGNvb3JkKS5fcm91bmQoKSk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkgPSBuZXcgUmFzdGVyQm91bmRzQXJyYXkoKTtcbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGlsZUNvb3Jkc1swXS54LCB0aWxlQ29vcmRzWzBdLnksIDAsIDApO1xuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayh0aWxlQ29vcmRzWzFdLngsIHRpbGVDb29yZHNbMV0ueSwgRVhURU5ULCAwKTtcbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGlsZUNvb3Jkc1szXS54LCB0aWxlQ29vcmRzWzNdLnksIDAsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKHRpbGVDb29yZHNbMl0ueCwgdGlsZUNvb3Jkc1syXS55LCBFWFRFTlQsIEVYVEVOVCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5ib3VuZHNCdWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOidzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwIHx8ICF0aGlzLmltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5tYXAucGFpbnRlci5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc0J1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSwgcmFzdGVyQm91bmRzQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5ib3VuZHNTZWdtZW50cykge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLmltYWdlLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHcgaW4gdGhpcy50aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMudGlsZXNbd107XG4gICAgICAgICAgICBpZiAodGlsZS5zdGF0ZSAhPT0gJ2xvYWRlZCcpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2xvYWRlZCc7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIC8vIFdlIGhhdmUgYSBzaW5nbGUgdGlsZSAtLSB3aG9vc2UgY29vcmRpbmF0ZXMgYXJlIHRoaXMudGlsZUlEIC0tIHRoYXRcbiAgICAgICAgLy8gY292ZXJzIHRoZSBpbWFnZSB3ZSB3YW50IHRvIHJlbmRlci4gIElmIHRoYXQncyB0aGUgb25lIGJlaW5nXG4gICAgICAgIC8vIHJlcXVlc3RlZCwgc2V0IGl0IHVwIHdpdGggdGhlIGltYWdlOyBvdGhlcndpc2UsIG1hcmsgdGhlIHRpbGUgYXNcbiAgICAgICAgLy8gYGVycm9yZWRgIHRvIGluZGljYXRlIHRoYXQgd2UgaGF2ZSBubyBkYXRhIGZvciBpdC5cbiAgICAgICAgLy8gSWYgdGhlIHdvcmxkIHdyYXBzLCB3ZSBtYXkgaGF2ZSBtdWx0aXBsZSBcIndyYXBwZWRcIiBjb3BpZXMgb2YgdGhlXG4gICAgICAgIC8vIHNpbmdsZSB0aWxlLlxuICAgICAgICBpZiAodGhpcy50aWxlSUQgJiYgdGhpcy50aWxlSUQuZXF1YWxzKHRpbGUudGlsZUlELmNhbm9uaWNhbCkpIHtcbiAgICAgICAgICAgIHRoaXMudGlsZXNbU3RyaW5nKHRpbGUudGlsZUlELndyYXApXSA9IHRpbGU7XG4gICAgICAgICAgICB0aWxlLmJ1Y2tldHMgPSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICAgICAgdXJsOiB0aGlzLm9wdGlvbnMudXJsLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY29vcmRpbmF0ZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGEgbGlzdCBvZiBjb29yZGluYXRlcywgZ2V0IHRoZWlyIGNlbnRlciBhcyBhIGNvb3JkaW5hdGUuXG4gKlxuICogQHJldHVybnMgY2VudGVycG9pbnRcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb29yZGluYXRlc0NlbnRlclRpbGVJRChjb29yZHM6IEFycmF5PE1lcmNhdG9yQ29vcmRpbmF0ZT4pIHtcbiAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgbGV0IG1heFggPSAtSW5maW5pdHk7XG4gICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgY29vcmQueCk7XG4gICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBjb29yZC55KTtcbiAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGNvb3JkLngpO1xuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgY29vcmQueSk7XG4gICAgfVxuXG4gICAgY29uc3QgZHggPSBtYXhYIC0gbWluWDtcbiAgICBjb25zdCBkeSA9IG1heFkgLSBtaW5ZO1xuICAgIGNvbnN0IGRNYXggPSBNYXRoLm1heChkeCwgZHkpO1xuICAgIGNvbnN0IHpvb20gPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKC1NYXRoLmxvZyhkTWF4KSAvIE1hdGguTE4yKSk7XG4gICAgY29uc3QgdGlsZXNBdFpvb20gPSBNYXRoLnBvdygyLCB6b29tKTtcblxuICAgIHJldHVybiBuZXcgQ2Fub25pY2FsVGlsZUlEKFxuICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgIE1hdGguZmxvb3IoKG1pblggKyBtYXhYKSAvIDIgKiB0aWxlc0F0Wm9vbSksXG4gICAgICAgICAgICBNYXRoLmZsb29yKChtaW5ZICsgbWF4WSkgLyAyICogdGlsZXNBdFpvb20pKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldFZpZGVvLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCBJbWFnZVNvdXJjZSBmcm9tICcuL2ltYWdlX3NvdXJjZSc7XG5pbXBvcnQgcmFzdGVyQm91bmRzQXR0cmlidXRlcyBmcm9tICcuLi9kYXRhL3Jhc3Rlcl9ib3VuZHNfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHtFcnJvckV2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9zdHlsZS1zcGVjL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHR5cGUge1ZpZGVvU291cmNlU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbi8qKlxuICogQSBkYXRhIHNvdXJjZSBjb250YWluaW5nIHZpZGVvLlxuICogKFNlZSB0aGUgW1N0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMtdmlkZW8pIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBhZGQgdG8gbWFwXG4gKiBtYXAuYWRkU291cmNlKCdzb21lIGlkJywge1xuICogICAgdHlwZTogJ3ZpZGVvJyxcbiAqICAgIHVybDogW1xuICogICAgICAgICdodHRwczovL3d3dy5tYXBib3guY29tL2Jsb2cvYXNzZXRzL2JhbHRpbW9yZS1zbW9rZS5tcDQnLFxuICogICAgICAgICdodHRwczovL3d3dy5tYXBib3guY29tL2Jsb2cvYXNzZXRzL2JhbHRpbW9yZS1zbW9rZS53ZWJtJ1xuICogICAgXSxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE4XSxcbiAqICAgICAgICBbLTc2LjUyLCAzOS4xN10sXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMTddXG4gKiAgICBdXG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGVcbiAqIHZhciBteVNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKTtcbiAqIG15U291cmNlLnNldENvb3JkaW5hdGVzKFtcbiAqICAgICBbLTc2LjU0MzM1NzM3MjI4Mzk0LCAzOS4xODU3OTkwNzIyOTc0OF0sXG4gKiAgICAgWy03Ni41MjgwMzY1OTQzOTA4NywgMzkuMTgzODM2NDg0NzU4N10sXG4gKiAgICAgWy03Ni41Mjk1Mzg2MzE0MzkyLCAzOS4xNzY4MzM5MjUwNzYwNl0sXG4gKiAgICAgWy03Ni41NDUyMDI3MzIwODYxOCwgMzkuMTc4NzYzNDQxMDY2NDJdXG4gKiBdKTtcbiAqXG4gKiBtYXAucmVtb3ZlU291cmNlKCdzb21lIGlkJyk7ICAvLyByZW1vdmVcbiAqIEBzZWUgW0FkZCBhIHZpZGVvXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3ZpZGVvLW9uLWEtbWFwLylcbiAqL1xuY2xhc3MgVmlkZW9Tb3VyY2UgZXh0ZW5kcyBJbWFnZVNvdXJjZSB7XG4gICAgb3B0aW9uczogVmlkZW9Tb3VyY2VTcGVjaWZpY2F0aW9uO1xuICAgIHVybHM6IEFycmF5PHN0cmluZz47XG4gICAgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQ7XG4gICAgcm91bmRab29tOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQpO1xuICAgICAgICB0aGlzLnJvdW5kWm9vbSA9IHRydWU7XG4gICAgICAgIHRoaXMudHlwZSA9ICd2aWRlbyc7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy51cmxzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdXJsIG9mIG9wdGlvbnMudXJscykge1xuICAgICAgICAgICAgdGhpcy51cmxzLnB1c2godGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuU291cmNlKS51cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0VmlkZW8odGhpcy51cmxzLCAoZXJyLCB2aWRlbykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZpZGVvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWRlbyA9IHZpZGVvO1xuICAgICAgICAgICAgICAgIHRoaXMudmlkZW8ubG9vcCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBTdGFydCByZXBhaW50aW5nIHdoZW4gdmlkZW8gc3RhcnRzIHBsYXlpbmcuIGhhc1RyYW5zaXRpb24oKSB3aWxsIHRoZW4gcmV0dXJuXG4gICAgICAgICAgICAgICAgLy8gdHJ1ZSB0byB0cmlnZ2VyIGFkZGl0aW9uYWwgZnJhbWVzIGFzIGxvbmcgYXMgdGhlIHZpZGVvcyBjb250aW51ZXMgcGxheWluZy5cbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnRyaWdnZXJSZXBhaW50KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWRlby5wbGF5KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZmluaXNoTG9hZGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXVzZXMgdGhlIHZpZGVvLlxuICAgICAqL1xuICAgIHBhdXNlKCkge1xuICAgICAgICBpZiAodGhpcy52aWRlbykge1xuICAgICAgICAgICAgdGhpcy52aWRlby5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGxheXMgdGhlIHZpZGVvLlxuICAgICAqL1xuICAgIHBsYXkoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvKSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgcGxheWJhY2sgdG8gYSB0aW1lc3RhbXAsIGluIHNlY29uZHMuXG4gICAgICovXG4gICAgc2VlayhzZWNvbmRzOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZWthYmxlUmFuZ2UgPSB0aGlzLnZpZGVvLnNlZWthYmxlO1xuICAgICAgICAgICAgaWYgKHNlY29uZHMgPCBzZWVrYWJsZVJhbmdlLnN0YXJ0KDApIHx8IHNlY29uZHMgPiBzZWVrYWJsZVJhbmdlLmVuZCgwKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBQbGF5YmFjayBmb3IgdGhpcyB2aWRlbyBjYW4gYmUgc2V0IG9ubHkgYmV0d2VlbiB0aGUgJHtzZWVrYWJsZVJhbmdlLnN0YXJ0KDApfSBhbmQgJHtzZWVrYWJsZVJhbmdlLmVuZCgwKX0tc2Vjb25kIG1hcmsuYCkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB0aGlzLnZpZGVvLmN1cnJlbnRUaW1lID0gc2Vjb25kcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIEhUTUwgYHZpZGVvYCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxWaWRlb0VsZW1lbnR9IFRoZSBIVE1MIGB2aWRlb2AgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXRWaWRlbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlkZW87XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgaWYgKHRoaXMubWFwKSByZXR1cm47XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW8ucGxheSgpO1xuICAgICAgICAgICAgdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZpZGVvJ3MgY29vcmRpbmF0ZXMgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBtZXRob2Qgc2V0Q29vcmRpbmF0ZXNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgVmlkZW9Tb3VyY2VcbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBGb3VyIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyxcbiAgICAgKiAgIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG51bWJlcnMsIHdoaWNoIGRlZmluZSB0aGUgY29ybmVycyBvZiB0aGUgdmlkZW8uXG4gICAgICogICBUaGUgY29vcmRpbmF0ZXMgc3RhcnQgYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgdmlkZW8gYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge1ZpZGVvU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgLy8gc2V0Q29vcmRpbmF0ZXMgaW5oZXJpdGVkIGZyb20gSW1hZ2VTb3VyY2VcblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGggPT09IDAgfHwgdGhpcy52aWRlby5yZWFkeVN0YXRlIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBub3QgZW5vdWdoIGRhdGEgZm9yIGN1cnJlbnQgcG9zaXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLm1hcC5wYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc1NlZ21lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMudmlkZW8sIGdsLlJHQkEpO1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy52aWRlby5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRoaXMudmlkZW8pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB3IGluIHRoaXMudGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLnRpbGVzW3ddO1xuICAgICAgICAgICAgaWYgKHRpbGUuc3RhdGUgIT09ICdsb2FkZWQnKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdsb2FkZWQnO1xuICAgICAgICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICd2aWRlbycsXG4gICAgICAgICAgICB1cmxzOiB0aGlzLnVybHMsXG4gICAgICAgICAgICBjb29yZGluYXRlczogdGhpcy5jb29yZGluYXRlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZGVvICYmICF0aGlzLnZpZGVvLnBhdXNlZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEltYWdlU291cmNlIGZyb20gJy4vaW1hZ2Vfc291cmNlJztcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgcmFzdGVyQm91bmRzQXR0cmlidXRlcyBmcm9tICcuLi9kYXRhL3Jhc3Rlcl9ib3VuZHNfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHtFcnJvckV2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9zdHlsZS1zcGVjL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5leHBvcnQgdHlwZSBDYW52YXNTb3VyY2VTcGVjaWZpY2F0aW9uID0ge3xcbiAgICBcInR5cGVcIjogXCJjYW52YXNcIixcbiAgICBcImNvb3JkaW5hdGVzXCI6IFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXSxcbiAgICBcImFuaW1hdGVcIj86IGJvb2xlYW4sXG4gICAgXCJjYW52YXNcIjogc3RyaW5nIHwgSFRNTENhbnZhc0VsZW1lbnRcbnx9O1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gYWRkIGEgY2FudmFzIHNvdXJjZSB0eXBlIHRvIHRoZSBtYXAuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2FudmFzU291cmNlT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgU291cmNlIHR5cGUuIE11c3QgYmUgYFwiY2FudmFzXCJgLlxuICogQHByb3BlcnR5IHtzdHJpbmd8SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhcyBDYW52YXMgc291cmNlIGZyb20gd2hpY2ggdG8gcmVhZCBwaXhlbHMuIENhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoZSBjYW52YXMgZWxlbWVudCwgb3IgdGhlIGBIVE1MQ2FudmFzRWxlbWVudGAgaXRzZWxmLlxuICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgRm91ciBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMgZGVub3Rpbmcgd2hlcmUgdG8gcGxhY2UgdGhlIGNvcm5lcnMgb2YgdGhlIGNhbnZhcywgc3BlY2lmaWVkIGluIGBbbG9uZ2l0dWRlLCBsYXRpdHVkZV1gIHBhaXJzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbYW5pbWF0ZT10cnVlXSBXaGV0aGVyIHRoZSBjYW52YXMgc291cmNlIGlzIGFuaW1hdGVkLiBJZiB0aGUgY2FudmFzIGlzIHN0YXRpYyAoaS5lLiBwaXhlbHMgZG8gbm90IG5lZWQgdG8gYmUgcmUtcmVhZCBvbiBldmVyeSBmcmFtZSksIGBhbmltYXRlYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS5cbiAqL1xuXG4vKipcbiAqIEEgZGF0YSBzb3VyY2UgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgYW4gSFRNTCBjYW52YXMuIFNlZSB7QGxpbmsgQ2FudmFzU291cmNlT3B0aW9uc30gZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gb2Ygb3B0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gYWRkIHRvIG1hcFxuICogbWFwLmFkZFNvdXJjZSgnc29tZSBpZCcsIHtcbiAqICAgIHR5cGU6ICdjYW52YXMnLFxuICogICAgY2FudmFzOiAnaWRPZk15SFRNTENhbnZhcycsXG4gKiAgICBhbmltYXRlOiB0cnVlLFxuICogICAgY29vcmRpbmF0ZXM6IFtcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xOF0sXG4gKiAgICAgICAgWy03Ni41MiwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE3XSxcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xN11cbiAqICAgIF1cbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZVxuICogdmFyIG15U291cmNlID0gbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpO1xuICogbXlTb3VyY2Uuc2V0Q29vcmRpbmF0ZXMoW1xuICogICAgIFstNzYuNTQzMzU3MzcyMjgzOTQsIDM5LjE4NTc5OTA3MjI5NzQ4XSxcbiAqICAgICBbLTc2LjUyODAzNjU5NDM5MDg3LCAzOS4xODM4MzY0ODQ3NTg3XSxcbiAqICAgICBbLTc2LjUyOTUzODYzMTQzOTIsIDM5LjE3NjgzMzkyNTA3NjA2XSxcbiAqICAgICBbLTc2LjU0NTIwMjczMjA4NjE4LCAzOS4xNzg3NjM0NDEwNjY0Ml1cbiAqIF0pO1xuICpcbiAqIG1hcC5yZW1vdmVTb3VyY2UoJ3NvbWUgaWQnKTsgIC8vIHJlbW92ZVxuICovXG5jbGFzcyBDYW52YXNTb3VyY2UgZXh0ZW5kcyBJbWFnZVNvdXJjZSB7XG4gICAgb3B0aW9uczogQ2FudmFzU291cmNlU3BlY2lmaWNhdGlvbjtcbiAgICBhbmltYXRlOiBib29sZWFuO1xuICAgIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBwbGF5OiAoKSA9PiB2b2lkO1xuICAgIHBhdXNlOiAoKSA9PiB2b2lkO1xuICAgIF9wbGF5aW5nOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBDYW52YXNTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKGlkLCBvcHRpb25zLCBkaXNwYXRjaGVyLCBldmVudGVkUGFyZW50KTtcblxuICAgICAgICAvLyBXZSBidWlsZCBpbiBzb21lIHZhbGlkYXRpb24gaGVyZSwgc2luY2UgY2FudmFzIHNvdXJjZXMgYXJlbid0IGluY2x1ZGVkIGluIHRoZSBzdHlsZSBzcGVjOlxuICAgICAgICBpZiAoIW9wdGlvbnMuY29vcmRpbmF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7aWR9YCwgbnVsbCwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJjb29yZGluYXRlc1wiJykpKTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zLmNvb3JkaW5hdGVzKSB8fCBvcHRpb25zLmNvb3JkaW5hdGVzLmxlbmd0aCAhPT0gNCB8fFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXMuc29tZShjID0+ICFBcnJheS5pc0FycmF5KGMpIHx8IGMubGVuZ3RoICE9PSAyIHx8IGMuc29tZShsID0+IHR5cGVvZiBsICE9PSAnbnVtYmVyJykpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke2lkfWAsIG51bGwsICdcImNvb3JkaW5hdGVzXCIgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheSBvZiA0IGxvbmdpdHVkZS9sYXRpdHVkZSBhcnJheSBwYWlycycpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5hbmltYXRlICYmIHR5cGVvZiBvcHRpb25zLmFuaW1hdGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnb3B0aW9uYWwgXCJhbmltYXRlXCIgcHJvcGVydHkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmNhbnZhcykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcImNhbnZhc1wiJykpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5jYW52YXMgIT09ICdzdHJpbmcnICYmICEob3B0aW9ucy5jYW52YXMgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke2lkfWAsIG51bGwsICdcImNhbnZhc1wiIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhlIGNhbnZhcyBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmVhZCwgb3IgYW4gSFRNTENhbnZhc0VsZW1lbnQgaW5zdGFuY2UnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5hbmltYXRlID0gb3B0aW9ucy5hbmltYXRlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmFuaW1hdGUgOiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgYW5pbWF0aW9uLiBUaGUgaW1hZ2Ugd2lsbCBiZSBjb3BpZWQgZnJvbSB0aGUgY2FudmFzIHRvIHRoZSBtYXAgb24gZWFjaCBmcmFtZS5cbiAgICAgKiBAbWV0aG9kIHBsYXlcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgQ2FudmFzU291cmNlXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyBhbmltYXRpb24uIFRoZSBtYXAgd2lsbCBkaXNwbGF5IGEgc3RhdGljIGNvcHkgb2YgdGhlIGNhbnZhcyBpbWFnZS5cbiAgICAgKiBAbWV0aG9kIHBhdXNlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIENhbnZhc1NvdXJjZVxuICAgICAqL1xuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmNhbnZhcykge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSAodGhpcy5vcHRpb25zLmNhbnZhcyBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudCkgP1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jYW52YXMgOlxuICAgICAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuY2FudmFzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIGlmICh0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdDYW52YXMgZGltZW5zaW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8uJykpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGxheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5fcGxheWluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1hcC50cmlnZ2VyUmVwYWludCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2ZpbmlzaExvYWRpbmcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBIVE1MIGBjYW52YXNgIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSBIVE1MIGBjYW52YXNgIGVsZW1lbnQuXG4gICAgICovXG4gICAgZ2V0Q2FudmFzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW52YXM7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgICAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGUpIHRoaXMucGxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjYW52YXMncyBjb29yZGluYXRlcyBhbmQgcmUtcmVuZGVycyB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQG1ldGhvZCBzZXRDb29yZGluYXRlc1xuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBDYW52YXNTb3VyY2VcbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBGb3VyIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyxcbiAgICAgKiAgIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG51bWJlcnMsIHdoaWNoIGRlZmluZSB0aGUgY29ybmVycyBvZiB0aGUgY2FudmFzLlxuICAgICAqICAgVGhlIGNvb3JkaW5hdGVzIHN0YXJ0IGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGNhbnZhcyBhbmQgcHJvY2VlZCBpbiBjbG9ja3dpc2Ugb3JkZXIuXG4gICAgICogICBUaGV5IGRvIG5vdCBoYXZlIHRvIHJlcHJlc2VudCBhIHJlY3RhbmdsZS5cbiAgICAgKiBAcmV0dXJucyB7Q2FudmFzU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgLy8gc2V0Q29vcmRpbmF0ZXMgaW5oZXJpdGVkIGZyb20gSW1hZ2VTb3VyY2VcblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGxldCByZXNpemUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY2FudmFzLndpZHRoICE9PSB0aGlzLndpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICByZXNpemUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNhbnZhcy5oZWlnaHQgIT09IHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgICAgIHJlc2l6ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGggPT09IDApIHJldHVybjsgLy8gbm90IGVub3VnaCBkYXRhIGZvciBjdXJyZW50IHBvc2l0aW9uXG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMubWFwLnBhaW50ZXIuY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGlmICghdGhpcy5ib3VuZHNCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzQnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksIHJhc3RlckJvdW5kc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzU2VnbWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzU2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgMik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMudGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgdGhpcy5jYW52YXMsIGdsLlJHQkEsIHtwcmVtdWx0aXBseTogdHJ1ZX0pO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc2l6ZSB8fCB0aGlzLl9wbGF5aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUudXBkYXRlKHRoaXMuY2FudmFzLCB7cHJlbXVsdGlwbHk6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdyBpbiB0aGlzLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy50aWxlc1t3XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnbG9hZGVkJztcbiAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdjYW52YXMnLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY29vcmRpbmF0ZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGxheWluZztcbiAgICB9XG5cbiAgICBfaGFzSW52YWxpZERpbWVuc2lvbnMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgeCBvZiBbdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodF0pIHtcbiAgICAgICAgICAgIGlmIChpc05hTih4KSB8fCB4IDw9IDApIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbnZhc1NvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbi8qKlxuICogVGhlIGBTb3VyY2VgIGludGVyZmFjZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggc291cmNlIHR5cGUsIGluY2x1ZGluZyBcImNvcmVcIiB0eXBlcyAoYHZlY3RvcmAsIGByYXN0ZXJgLFxuICogYHZpZGVvYCwgZXRjLikgYW5kIGFsbCBjdXN0b20sIHRoaXJkLXBhcnR5IHR5cGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBpZCBmb3IgdGhlIHNvdXJjZS4gTXVzdCBub3QgYmUgdXNlZCBieSBhbnkgZXhpc3Rpbmcgc291cmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgU291cmNlIG9wdGlvbnMsIHNwZWNpZmljIHRvIHRoZSBzb3VyY2UgdHlwZSAoZXhjZXB0IGZvciBgb3B0aW9ucy50eXBlYCwgd2hpY2ggaXMgYWx3YXlzXG4gKiByZXF1aXJlZCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIFRoZSBzb3VyY2UgdHlwZSwgbWF0Y2hpbmcgdGhlIHZhbHVlIG9mIGBuYW1lYCB1c2VkIGluIHtAbGluayBTdHlsZSNhZGRTb3VyY2VUeXBlfS5cbiAqIEBwYXJhbSB7RGlzcGF0Y2hlcn0gZGlzcGF0Y2hlciBBIHtAbGluayBEaXNwYXRjaGVyfSBpbnN0YW5jZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc2VuZCBtZXNzYWdlcyB0byB0aGUgd29ya2Vycy5cbiAqXG4gKiBAZmlyZXMgZGF0YSB3aXRoIGB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ31gIHRvIGluZGljYXRlIHRoYXQgYW55IG5lY2Vzc2FyeSBtZXRhZGF0YVxuICogaGFzIGJlZW4gbG9hZGVkIHNvIHRoYXQgaXQncyBva2F5IHRvIGNhbGwgYGxvYWRUaWxlYDsgYW5kIHdpdGggYHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnY29udGVudCd9YFxuICogdG8gaW5kaWNhdGUgdGhhdCB0aGUgc291cmNlIGRhdGEgaGFzIGNoYW5nZWQsIHNvIHRoYXQgYW55IGN1cnJlbnQgY2FjaGVzIHNob3VsZCBiZSBmbHVzaGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIFRoZSBpZCBmb3IgdGhlIHNvdXJjZS4gIE11c3QgbWF0Y2ggdGhlIGlkIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWluem9vbVxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1heHpvb21cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNUaWxlQ2xpcHBlZCBgZmFsc2VgIGlmIHRpbGVzIGNhbiBiZSBkcmF3biBvdXRzaWRlIHRoZWlyIGJvdW5kYXJpZXMsIGB0cnVlYCBpZiB0aGV5IGNhbm5vdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwYXJzZU92ZXJzY2FsZWQgYHRydWVgIGlmIHRpbGVzIHNob3VsZCBiZSBzZW50IGJhY2sgdG8gdGhlIHdvcmtlciBmb3IgZWFjaCBvdmVyem9vbWVkIHpvb21cbiAqIGxldmVsLCBgZmFsc2VgIGlmIG5vdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcm91bmRab29tIGB0cnVlYCBpZiB6b29tIGxldmVscyBhcmUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIGluIHRoZSBzb3VyY2UgZGF0YSwgYGZhbHNlYFxuICogaWYgdGhleSBhcmUgZmxvb3ItZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2Uge1xuICAgICt0eXBlOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtaW56b29tOiBudW1iZXIsXG4gICAgbWF4em9vbTogbnVtYmVyLFxuICAgIHRpbGVTaXplOiBudW1iZXIsXG4gICAgYXR0cmlidXRpb24/OiBzdHJpbmcsXG5cbiAgICByb3VuZFpvb20/OiBib29sZWFuLFxuICAgIGlzVGlsZUNsaXBwZWQ/OiBib29sZWFuLFxuICAgIG1hcGJveF9sb2dvPzogYm9vbGVhbixcbiAgICB0aWxlSUQ/OiBDYW5vbmljYWxUaWxlSUQ7XG4gICAgcmVwYXJzZU92ZXJzY2FsZWQ/OiBib29sZWFuLFxuICAgIHZlY3RvckxheWVySWRzPzogQXJyYXk8c3RyaW5nPixcblxuICAgIGhhc1RyYW5zaXRpb24oKTogYm9vbGVhbjtcbiAgICBsb2FkZWQoKTogYm9vbGVhbjtcblxuICAgIGZpcmUoZXZlbnQ6IEV2ZW50KTogbWl4ZWQ7XG5cbiAgICArb25BZGQ/OiAobWFwOiBNYXApID0+IHZvaWQ7XG4gICAgK29uUmVtb3ZlPzogKG1hcDogTWFwKSA9PiB2b2lkO1xuXG4gICAgbG9hZFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KTogdm9pZDtcbiAgICAraGFzVGlsZT86ICh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpID0+IGJvb2xlYW47XG4gICAgK2Fib3J0VGlsZT86ICh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pID0+IHZvaWQ7XG4gICAgK3VubG9hZFRpbGU/OiAodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgQSBwbGFpbiAoc3RyaW5naWZpYWJsZSkgSlMgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc291cmNlLlxuICAgICAqIENyZWF0aW5nIGEgc291cmNlIHVzaW5nIHRoZSByZXR1cm5lZCBvYmplY3QgYXMgdGhlIGBvcHRpb25zYCBzaG91bGQgcmVzdWx0IGluIGEgU291cmNlIHRoYXQgaXNcbiAgICAgKiBlcXVpdmFsZW50IHRvIHRoaXMgb25lLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2VyaWFsaXplKCk6IE9iamVjdDtcblxuICAgICtwcmVwYXJlPzogKCkgPT4gdm9pZDtcbn1cblxudHlwZSBTb3VyY2VTdGF0aWNzID0ge1xuICAgIC8qXG4gICAgICogQW4gb3B0aW9uYWwgVVJMIHRvIGEgc2NyaXB0IHdoaWNoLCB3aGVuIHJ1biBieSBhIFdvcmtlciwgcmVnaXN0ZXJzIGEge0BsaW5rIFdvcmtlclNvdXJjZX1cbiAgICAgKiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBTb3VyY2UgdHlwZSBieSBjYWxsaW5nIGBzZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlKHdvcmtlclNvdXJjZTogV29ya2VyU291cmNlKWAuXG4gICAgICovXG4gICAgd29ya2VyU291cmNlVVJMPzogVVJMO1xufTtcblxuZXhwb3J0IHR5cGUgU291cmNlQ2xhc3MgPSBDbGFzczxTb3VyY2U+ICYgU291cmNlU3RhdGljcztcblxuaW1wb3J0IHZlY3RvciBmcm9tICcuLi9zb3VyY2UvdmVjdG9yX3RpbGVfc291cmNlJztcbmltcG9ydCByYXN0ZXIgZnJvbSAnLi4vc291cmNlL3Jhc3Rlcl90aWxlX3NvdXJjZSc7XG5pbXBvcnQgcmFzdGVyRGVtIGZyb20gJy4uL3NvdXJjZS9yYXN0ZXJfZGVtX3RpbGVfc291cmNlJztcbmltcG9ydCBnZW9qc29uIGZyb20gJy4uL3NvdXJjZS9nZW9qc29uX3NvdXJjZSc7XG5pbXBvcnQgdmlkZW8gZnJvbSAnLi4vc291cmNlL3ZpZGVvX3NvdXJjZSc7XG5pbXBvcnQgaW1hZ2UgZnJvbSAnLi4vc291cmNlL2ltYWdlX3NvdXJjZSc7XG5pbXBvcnQgY2FudmFzIGZyb20gJy4uL3NvdXJjZS9jYW52YXNfc291cmNlJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jb25zdCBzb3VyY2VUeXBlcyA9IHtcbiAgICB2ZWN0b3IsXG4gICAgcmFzdGVyLFxuICAgICdyYXN0ZXItZGVtJzogcmFzdGVyRGVtLFxuICAgIGdlb2pzb24sXG4gICAgdmlkZW8sXG4gICAgaW1hZ2UsXG4gICAgY2FudmFzXG59O1xuXG4vKlxuICogQ3JlYXRlcyBhIHRpbGVkIGRhdGEgc291cmNlIGluc3RhbmNlIGdpdmVuIGFuIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBpZFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBBIHNvdXJjZSBkZWZpbml0aW9uIG9iamVjdCBjb21wbGlhbnQgd2l0aFxuICogW2BtYXBib3gtZ2wtc3R5bGUtc3BlY2BdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMpIG9yLCBmb3IgYSB0aGlyZC1wYXJ0eSBzb3VyY2UgdHlwZSxcbiAgKiB3aXRoIHRoYXQgdHlwZSdzIHJlcXVpcmVtZW50cy5cbiAqIEBwYXJhbSB7RGlzcGF0Y2hlcn0gZGlzcGF0Y2hlclxuICogQHJldHVybnMge1NvdXJjZX1cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZSA9IGZ1bmN0aW9uKGlkOiBzdHJpbmcsIHNwZWNpZmljYXRpb246IFNvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgc291cmNlVHlwZXNbc3BlY2lmaWNhdGlvbi50eXBlXShpZCwgKHNwZWNpZmljYXRpb246IGFueSksIGRpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQpO1xuXG4gICAgaWYgKHNvdXJjZS5pZCAhPT0gaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBTb3VyY2UgaWQgdG8gYmUgJHtpZH0gaW5zdGVhZCBvZiAke3NvdXJjZS5pZH1gKTtcbiAgICB9XG5cbiAgICBiaW5kQWxsKFsnbG9hZCcsICdhYm9ydCcsICd1bmxvYWQnLCAnc2VyaWFsaXplJywgJ3ByZXBhcmUnXSwgc291cmNlKTtcbiAgICByZXR1cm4gc291cmNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGUgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHNvdXJjZVR5cGVzW25hbWVdO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFR5cGUgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCB0eXBlOiBDbGFzczxTb3VyY2U+KSB7XG4gICAgc291cmNlVHlwZXNbbmFtZV0gPSB0eXBlO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBY3RvciB7XG4gICAgc2VuZCh0eXBlOiBzdHJpbmcsIGRhdGE6IE9iamVjdCwgY2FsbGJhY2s6IENhbGxiYWNrPGFueT4pOiB2b2lkO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb2xsaXNpb25JbmRleCBmcm9tICcuLi9zeW1ib2wvY29sbGlzaW9uX2luZGV4JztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtSZXRhaW5lZFF1ZXJ5RGF0YX0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbi8qXG4gKiBSZXR1cm5zIGEgbWF0cml4IHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udmVydCBmcm9tIHRpbGUgY29vcmRpbmF0ZXMgdG8gdmlld3BvcnQgcGl4ZWwgY29vcmRpbmF0ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFBpeGVsUG9zTWF0cml4KHRyYW5zZm9ybSwgdGlsZUlEKSB7XG4gICAgY29uc3QgdCA9IG1hdDQuaWRlbnRpdHkoW10pO1xuICAgIG1hdDQudHJhbnNsYXRlKHQsIHQsIFsxLCAxLCAwXSk7XG4gICAgbWF0NC5zY2FsZSh0LCB0LCBbdHJhbnNmb3JtLndpZHRoICogMC41LCB0cmFuc2Zvcm0uaGVpZ2h0ICogMC41LCAxXSk7XG4gICAgcmV0dXJuIG1hdDQubXVsdGlwbHkodCwgdCwgdHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh0aWxlSUQudG9VbndyYXBwZWQoKSkpO1xufVxuXG5mdW5jdGlvbiBxdWVyeUluY2x1ZGVzM0RMYXllcihsYXllcnM/OiBBcnJheTxzdHJpbmc+LCBzdHlsZUxheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfSwgc291cmNlSUQ6IHN0cmluZykge1xuICAgIGlmIChsYXllcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklEIG9mIGxheWVycykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBzdHlsZUxheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgIGlmIChsYXllciAmJiBsYXllci5zb3VyY2UgPT09IHNvdXJjZUlEICYmIGxheWVyLnR5cGUgPT09ICdmaWxsLWV4dHJ1c2lvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHN0eWxlTGF5ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHN0eWxlTGF5ZXJzW2tleV07XG4gICAgICAgICAgICBpZiAobGF5ZXIuc291cmNlID09PSBzb3VyY2VJRCAmJiBsYXllci50eXBlID09PSAnZmlsbC1leHRydXNpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlSZW5kZXJlZEZlYXR1cmVzKHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUxheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IGZpbHRlcjogRmlsdGVyU3BlY2lmaWNhdGlvbiwgbGF5ZXJzOiBBcnJheTxzdHJpbmc+IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcblxuICAgIGNvbnN0IGhhczNETGF5ZXIgPSBxdWVyeUluY2x1ZGVzM0RMYXllcihwYXJhbXMgJiYgcGFyYW1zLmxheWVycywgc3R5bGVMYXllcnMsIHNvdXJjZUNhY2hlLmlkKTtcblxuICAgIGNvbnN0IG1heFBpdGNoU2NhbGVGYWN0b3IgPSB0cmFuc2Zvcm0ubWF4UGl0Y2hTY2FsZUZhY3RvcigpO1xuICAgIGNvbnN0IHRpbGVzSW4gPSBzb3VyY2VDYWNoZS50aWxlc0luKHF1ZXJ5R2VvbWV0cnksIG1heFBpdGNoU2NhbGVGYWN0b3IsIGhhczNETGF5ZXIpO1xuXG4gICAgdGlsZXNJbi5zb3J0KHNvcnRUaWxlc0luKTtcblxuICAgIGNvbnN0IHJlbmRlcmVkRmVhdHVyZUxheWVycyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGlsZUluIG9mIHRpbGVzSW4pIHtcbiAgICAgICAgcmVuZGVyZWRGZWF0dXJlTGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgd3JhcHBlZFRpbGVJRDogdGlsZUluLnRpbGVJRC53cmFwcGVkKCkua2V5LFxuICAgICAgICAgICAgcXVlcnlSZXN1bHRzOiB0aWxlSW4udGlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMsXG4gICAgICAgICAgICAgICAgc291cmNlQ2FjaGUuX3N0YXRlLFxuICAgICAgICAgICAgICAgIHRpbGVJbi5xdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIHRpbGVJbi5jYW1lcmFRdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIHRpbGVJbi5zY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIG1heFBpdGNoU2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgZ2V0UGl4ZWxQb3NNYXRyaXgoc291cmNlQ2FjaGUudHJhbnNmb3JtLCB0aWxlSW4udGlsZUlEKSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gbWVyZ2VSZW5kZXJlZEZlYXR1cmVMYXllcnMocmVuZGVyZWRGZWF0dXJlTGF5ZXJzKTtcblxuICAgIC8vIE1lcmdlIHN0YXRlIGZyb20gU291cmNlQ2FjaGUgaW50byB0aGUgcmVzdWx0c1xuICAgIGZvciAoY29uc3QgbGF5ZXJJRCBpbiByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0W2xheWVySURdLmZvckVhY2goKGZlYXR1cmVXcmFwcGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZVdyYXBwZXIuZmVhdHVyZTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gc291cmNlQ2FjaGUuZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUubGF5ZXJbJ3NvdXJjZS1sYXllciddLCBmZWF0dXJlLmlkKTtcbiAgICAgICAgICAgIGZlYXR1cmUuc291cmNlID0gZmVhdHVyZS5sYXllci5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10pIHtcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnNvdXJjZUxheWVyID0gZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWF0dXJlLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlSZW5kZXJlZFN5bWJvbHMoc3R5bGVMYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVzOiB7W3N0cmluZ106IFNvdXJjZUNhY2hlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IGZpbHRlcjogRmlsdGVyU3BlY2lmaWNhdGlvbiwgbGF5ZXJzOiBBcnJheTxzdHJpbmc+IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uSW5kZXg6IENvbGxpc2lvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVkUXVlcnlEYXRhOiB7W251bWJlcl06IFJldGFpbmVkUXVlcnlEYXRhfSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IHJlbmRlcmVkU3ltYm9scyA9IGNvbGxpc2lvbkluZGV4LnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKHF1ZXJ5R2VvbWV0cnkpO1xuICAgIGNvbnN0IGJ1Y2tldFF1ZXJ5RGF0YSA9IFtdO1xuICAgIGZvciAoY29uc3QgYnVja2V0SW5zdGFuY2VJZCBvZiBPYmplY3Qua2V5cyhyZW5kZXJlZFN5bWJvbHMpLm1hcChOdW1iZXIpKSB7XG4gICAgICAgIGJ1Y2tldFF1ZXJ5RGF0YS5wdXNoKHJldGFpbmVkUXVlcnlEYXRhW2J1Y2tldEluc3RhbmNlSWRdKTtcbiAgICB9XG4gICAgYnVja2V0UXVlcnlEYXRhLnNvcnQoc29ydFRpbGVzSW4pO1xuXG4gICAgZm9yIChjb25zdCBxdWVyeURhdGEgb2YgYnVja2V0UXVlcnlEYXRhKSB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldFN5bWJvbHMgPSBxdWVyeURhdGEuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKFxuICAgICAgICAgICAgICAgIHJlbmRlcmVkU3ltYm9sc1txdWVyeURhdGEuYnVja2V0SW5zdGFuY2VJZF0sXG4gICAgICAgICAgICAgICAgcXVlcnlEYXRhLmJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIHF1ZXJ5RGF0YS5zb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIsXG4gICAgICAgICAgICAgICAgcGFyYW1zLmxheWVycyxcbiAgICAgICAgICAgICAgICBzdHlsZUxheWVycyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBsYXllcklEIGluIGJ1Y2tldFN5bWJvbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdEZlYXR1cmVzID0gcmVzdWx0W2xheWVySURdID0gcmVzdWx0W2xheWVySURdIHx8IFtdO1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJTeW1ib2xzID0gYnVja2V0U3ltYm9sc1tsYXllcklEXTtcbiAgICAgICAgICAgIGxheWVyU3ltYm9scy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTWF0Y2ggdG9wRG93bkZlYXR1cmVDb21wYXJhdG9yIGZyb20gRmVhdHVyZUluZGV4LCBidXQgdXNpbmdcbiAgICAgICAgICAgICAgICAvLyBtb3N0IHJlY2VudCBzb3J0aW5nIG9mIGZlYXR1cmVzIGZyb20gYnVja2V0LnNvcnRGZWF0dXJlc1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVTb3J0T3JkZXIgPSBxdWVyeURhdGEuZmVhdHVyZVNvcnRPcmRlcjtcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZVNvcnRPcmRlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBxdWVyeVJlbmRlcmVkU3ltYm9scyBkb2N1bWVudGF0aW9uIHNheXMgd2UnbGwgcmV0dXJuIGZlYXR1cmVzIGluXG4gICAgICAgICAgICAgICAgICAgIC8vIFwidG9wLXRvLWJvdHRvbVwiIHJlbmRlcmluZyBvcmRlciAoYWthIGxhc3QtdG8tZmlyc3QpLlxuICAgICAgICAgICAgICAgICAgICAvLyBBY3R1YWxseSB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgc3ltYm9sIGluc3RhbmNlcyBwZXIgZmVhdHVyZSwgc29cbiAgICAgICAgICAgICAgICAgICAgLy8gd2Ugc29ydCBlYWNoIGZlYXR1cmUgYmFzZWQgb24gdGhlIGZpcnN0IG1hdGNoaW5nIHN5bWJvbCBpbnN0YW5jZS5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ydGVkQSA9IGZlYXR1cmVTb3J0T3JkZXIuaW5kZXhPZihhLmZlYXR1cmVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRlZEIgPSBmZWF0dXJlU29ydE9yZGVyLmluZGV4T2YoYi5mZWF0dXJlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc29ydGVkQSA+PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHNvcnRlZEIgPj0gMCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3J0ZWRCIC0gc29ydGVkQTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBCdWNrZXQgaGFzbid0IGJlZW4gcmUtc29ydGVkIGJhc2VkIG9uIGFuZ2xlLCBzbyB1c2UgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldmVyc2Ugb2YgdGhlIG9yZGVyIHRoZSBmZWF0dXJlcyBhcHBlYXJlZCBpbiB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuZmVhdHVyZUluZGV4IC0gYS5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbEZlYXR1cmUgb2YgbGF5ZXJTeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0RmVhdHVyZXMucHVzaChzeW1ib2xGZWF0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1lcmdlIHN0YXRlIGZyb20gU291cmNlQ2FjaGUgaW50byB0aGUgcmVzdWx0c1xuICAgIGZvciAoY29uc3QgbGF5ZXJOYW1lIGluIHJlc3VsdCkge1xuICAgICAgICByZXN1bHRbbGF5ZXJOYW1lXS5mb3JFYWNoKChmZWF0dXJlV3JhcHBlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVXcmFwcGVyLmZlYXR1cmU7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHN0eWxlTGF5ZXJzW2xheWVyTmFtZV07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBzb3VyY2VDYWNoZS5nZXRGZWF0dXJlU3RhdGUoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10sIGZlYXR1cmUuaWQpO1xuICAgICAgICAgICAgZmVhdHVyZS5zb3VyY2UgPSBmZWF0dXJlLmxheWVyLnNvdXJjZTtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXSkge1xuICAgICAgICAgICAgICAgIGZlYXR1cmUuc291cmNlTGF5ZXIgPSBmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlYXR1cmUuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgcGFyYW1zOiBhbnkpIHtcbiAgICBjb25zdCB0aWxlcyA9IHNvdXJjZUNhY2hlLmdldFJlbmRlcmFibGVJZHMoKS5tYXAoKGlkKSA9PiB7XG4gICAgICAgIHJldHVybiBzb3VyY2VDYWNoZS5nZXRUaWxlQnlJRChpZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIGNvbnN0IGRhdGFUaWxlcyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHRpbGVzW2ldO1xuICAgICAgICBjb25zdCBkYXRhSUQgPSB0aWxlLnRpbGVJRC5jYW5vbmljYWwua2V5O1xuICAgICAgICBpZiAoIWRhdGFUaWxlc1tkYXRhSURdKSB7XG4gICAgICAgICAgICBkYXRhVGlsZXNbZGF0YUlEXSA9IHRydWU7XG4gICAgICAgICAgICB0aWxlLnF1ZXJ5U291cmNlRmVhdHVyZXMocmVzdWx0LCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gc29ydFRpbGVzSW4oYSwgYikge1xuICAgIGNvbnN0IGlkQSA9IGEudGlsZUlEO1xuICAgIGNvbnN0IGlkQiA9IGIudGlsZUlEO1xuICAgIHJldHVybiAoaWRBLm92ZXJzY2FsZWRaIC0gaWRCLm92ZXJzY2FsZWRaKSB8fCAoaWRBLmNhbm9uaWNhbC55IC0gaWRCLmNhbm9uaWNhbC55KSB8fCAoaWRBLndyYXAgLSBpZEIud3JhcCkgfHwgKGlkQS5jYW5vbmljYWwueCAtIGlkQi5jYW5vbmljYWwueCk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlUmVuZGVyZWRGZWF0dXJlTGF5ZXJzKHRpbGVzKSB7XG4gICAgLy8gTWVyZ2UgcmVzdWx0cyBmcm9tIGFsbCB0aWxlcywgYnV0IGlmIHR3byB0aWxlcyBzaGFyZSB0aGUgc2FtZVxuICAgIC8vIHdyYXBwZWQgSUQsIGRvbid0IGR1cGxpY2F0ZSBmZWF0dXJlcyBiZXR3ZWVuIHRoZSB0d28gdGlsZXNcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCB3cmFwcGVkSURMYXllck1hcCA9IHt9O1xuICAgIGZvciAoY29uc3QgdGlsZSBvZiB0aWxlcykge1xuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdHMgPSB0aWxlLnF1ZXJ5UmVzdWx0cztcbiAgICAgICAgY29uc3Qgd3JhcHBlZElEID0gdGlsZS53cmFwcGVkVGlsZUlEO1xuICAgICAgICBjb25zdCB3cmFwcGVkSURMYXllcnMgPSB3cmFwcGVkSURMYXllck1hcFt3cmFwcGVkSURdID0gd3JhcHBlZElETGF5ZXJNYXBbd3JhcHBlZElEXSB8fCB7fTtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklEIGluIHF1ZXJ5UmVzdWx0cykge1xuICAgICAgICAgICAgY29uc3QgdGlsZUZlYXR1cmVzID0gcXVlcnlSZXN1bHRzW2xheWVySURdO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZElERmVhdHVyZXMgPSB3cmFwcGVkSURMYXllcnNbbGF5ZXJJRF0gPSB3cmFwcGVkSURMYXllcnNbbGF5ZXJJRF0gfHwge307XG4gICAgICAgICAgICBjb25zdCByZXN1bHRGZWF0dXJlcyA9IHJlc3VsdFtsYXllcklEXSA9IHJlc3VsdFtsYXllcklEXSB8fCBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGlsZUZlYXR1cmUgb2YgdGlsZUZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVkSURGZWF0dXJlc1t0aWxlRmVhdHVyZS5mZWF0dXJlSW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZWRJREZlYXR1cmVzW3RpbGVGZWF0dXJlLmZlYXR1cmVJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRGZWF0dXJlcy5wdXNoKHRpbGVGZWF0dXJlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcblxuLyoqXG4gKiBBIFtsZWFzdC1yZWNlbnRseS11c2VkIGNhY2hlXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NhY2hlX2FsZ29yaXRobXMpXG4gKiB3aXRoIGhhc2ggbG9va3VwIG1hZGUgcG9zc2libGUgYnkga2VlcGluZyBhIGxpc3Qgb2Yga2V5cyBpbiBwYXJhbGxlbCB0b1xuICogYW4gYXJyYXkgb2YgZGljdGlvbmFyeSBvZiB2YWx1ZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBUaWxlQ2FjaGUge1xuICAgIG1heDogbnVtYmVyO1xuICAgIGRhdGE6IHtba2V5OiBudW1iZXIgfCBzdHJpbmddOiBBcnJheTx7IHZhbHVlOiBUaWxlLCB0aW1lb3V0OiA/VGltZW91dElEfT59O1xuICAgIG9yZGVyOiBBcnJheTxudW1iZXI+O1xuICAgIG9uUmVtb3ZlOiAoZWxlbWVudDogVGlsZSkgPT4gdm9pZDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IG51bWJlciBvZiBwZXJtaXR0ZWQgdmFsdWVzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25SZW1vdmUgY2FsbGJhY2sgY2FsbGVkIHdpdGggaXRlbXMgd2hlbiB0aGV5IGV4cGlyZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1heDogbnVtYmVyLCBvblJlbW92ZTogKGVsZW1lbnQ6IFRpbGUpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgIHRoaXMub25SZW1vdmUgPSBvblJlbW92ZTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHRoZSBjYWNoZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1RpbGVDYWNoZX0gdGhpcyBjYWNoZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZW1vdmVkRGF0YSBvZiB0aGlzLmRhdGFba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVkRGF0YS50aW1lb3V0KSBjbGVhclRpbWVvdXQocmVtb3ZlZERhdGEudGltZW91dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJlbW92ZShyZW1vdmVkRGF0YS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5vcmRlciA9IFtdO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGtleSwgdmFsdWUgY29tYmluYXRpb24gdG8gdGhlIGNhY2hlLCB0cmltbWluZyBpdHMgc2l6ZSBpZiB0aGlzIHB1c2hlc1xuICAgICAqIGl0IG92ZXIgbWF4IGxlbmd0aC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T3ZlcnNjYWxlZFRpbGVJRH0gdGlsZUlEIGxvb2t1cCBrZXkgZm9yIHRoZSBpdGVtXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIGFueSB2YWx1ZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1RpbGVDYWNoZX0gdGhpcyBjYWNoZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgYWRkKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgZGF0YTogVGlsZSwgZXhwaXJ5VGltZW91dDogbnVtYmVyIHwgdm9pZCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aWxlSUQud3JhcHBlZCgpLmtleTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhV3JhcHBlciA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhLFxuICAgICAgICAgICAgdGltZW91dDogdW5kZWZpbmVkXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV4cGlyeVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0YVdyYXBwZXIudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKHRpbGVJRCwgZGF0YVdyYXBwZXIpO1xuICAgICAgICAgICAgfSwgZXhwaXJ5VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGFba2V5XS5wdXNoKGRhdGFXcmFwcGVyKTtcbiAgICAgICAgdGhpcy5vcmRlci5wdXNoKGtleSk7XG5cbiAgICAgICAgaWYgKHRoaXMub3JkZXIubGVuZ3RoID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWREYXRhID0gdGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7XG4gICAgICAgICAgICBpZiAocmVtb3ZlZERhdGEpIHRoaXMub25SZW1vdmUocmVtb3ZlZERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHZhbHVlIGF0dGFjaGVkIHRvIGBrZXlgIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T3ZlcnNjYWxlZFRpbGVJRH0gdGlsZUlEIHRoZSBrZXkgdG8gYmUgbG9va2VkLXVwXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgdGhlIGNhY2hlIGhhcyB0aGlzIHZhbHVlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBoYXModGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aWxlSUQud3JhcHBlZCgpLmtleSBpbiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBhdHRhY2hlZCB0byBhIHNwZWNpZmljIGtleSBhbmQgcmVtb3ZlIGRhdGEgZnJvbSBjYWNoZS5cbiAgICAgKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgcmV0dXJucyBgbnVsbGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T3ZlcnNjYWxlZFRpbGVJRH0gdGlsZUlEIHRoZSBrZXkgdG8gbG9vayB1cFxuICAgICAqIEByZXR1cm5zIHsqfSB0aGUgZGF0YSwgb3IgbnVsbCBpZiBpdCBpc24ndCBmb3VuZFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0QW5kUmVtb3ZlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6ID9UaWxlIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhcyh0aWxlSUQpKSB7IHJldHVybiBudWxsOyB9XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0aWxlSUQud3JhcHBlZCgpLmtleSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBHZXQgYW5kIHJlbW92ZSB0aGUgdmFsdWUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAgICAgKi9cbiAgICBfZ2V0QW5kUmVtb3ZlQnlLZXkoa2V5OiBudW1iZXIpOiA/VGlsZSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFba2V5XS5zaGlmdCgpO1xuICAgICAgICBpZiAoZGF0YS50aW1lb3V0KSBjbGVhclRpbWVvdXQoZGF0YS50aW1lb3V0KTtcblxuICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGtleSksIDEpO1xuXG4gICAgICAgIHJldHVybiBkYXRhLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBrZXkgd2l0aG91dCByZW1vdmluZyBkYXRhXG4gICAgICogZnJvbSB0aGUgY2FjaGUuIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCByZXR1cm5zIGBudWxsYFxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSB0byBsb29rIHVwXG4gICAgICogQHJldHVybnMgeyp9IHRoZSBkYXRhLCBvciBudWxsIGlmIGl0IGlzbid0IGZvdW5kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogP1RpbGUge1xuICAgICAgICBpZiAoIXRoaXMuaGFzKHRpbGVJRCkpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW3RpbGVJRC53cmFwcGVkKCkua2V5XVswXTtcbiAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEga2V5L3ZhbHVlIGNvbWJpbmF0aW9uIGZyb20gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSBmb3IgdGhlIHBhaXIgdG8gZGVsZXRlXG4gICAgICogQHBhcmFtIHtUaWxlfSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHByb3ZpZGVkLCByZW1vdmUgdGhhdCBleGFjdCB2ZXJzaW9uIG9mIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7VGlsZUNhY2hlfSB0aGlzIGNhY2hlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICByZW1vdmUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCB2YWx1ZTogP3sgdmFsdWU6IFRpbGUsIHRpbWVvdXQ6ID9UaW1lb3V0SUR9KSB7XG4gICAgICAgIGlmICghdGhpcy5oYXModGlsZUlEKSkgeyByZXR1cm4gdGhpczsgfVxuICAgICAgICBjb25zdCBrZXkgPSB0aWxlSUQud3JhcHBlZCgpLmtleTtcblxuICAgICAgICBjb25zdCBkYXRhSW5kZXggPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuZGF0YVtrZXldLmluZGV4T2YodmFsdWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW2tleV1bZGF0YUluZGV4XTtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0uc3BsaWNlKGRhdGFJbmRleCwgMSk7XG4gICAgICAgIGlmIChkYXRhLnRpbWVvdXQpIGNsZWFyVGltZW91dChkYXRhLnRpbWVvdXQpO1xuICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblJlbW92ZShkYXRhLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGtleSksIDEpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlXG4gICAgICogQHJldHVybnMge1RpbGVDYWNoZX0gdGhpcyBjYWNoZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0TWF4U2l6ZShtYXg6IG51bWJlcik6IFRpbGVDYWNoZSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLm9yZGVyLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWREYXRhKSB0aGlzLm9uUmVtb3ZlKHJlbW92ZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlsZUNhY2hlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSB7VHJpYW5nbGVJbmRleEFycmF5LCBMaW5lSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbmNsYXNzIEluZGV4QnVmZmVyIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXI7XG4gICAgZHluYW1pY0RyYXc6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBhcnJheTogVHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXkgfCBMaW5lU3RyaXBJbmRleEFycmF5LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmR5bmFtaWNEcmF3ID0gQm9vbGVhbihkeW5hbWljRHJhdyk7XG5cbiAgICAgICAgLy8gVGhlIGJvdW5kIGluZGV4IGJ1ZmZlciBpcyBwYXJ0IG9mIHZlcnRleCBhcnJheSBvYmplY3Qgc3RhdGUuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gbW9kaWZ5IHdoYXRldmVyIFZBTyBoYXBwZW5zIHRvIGJlIGN1cnJlbnRseSBib3VuZCwgc28gbWFrZSBzdXJlIHRoZSBkZWZhdWx0XG4gICAgICAgIC8vIHZlcnRleCBhcnJheSBwcm92aWRlZCBieSB0aGUgY29udGV4dCBpcyBib3VuZCBpbnN0ZWFkLlxuICAgICAgICB0aGlzLmNvbnRleHQudW5iaW5kVkFPKCk7XG5cbiAgICAgICAgY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBhcnJheS5hcnJheUJ1ZmZlciwgdGhpcy5keW5hbWljRHJhdyA/IGdsLkRZTkFNSUNfRFJBVyA6IGdsLlNUQVRJQ19EUkFXKTtcblxuICAgICAgICBpZiAoIXRoaXMuZHluYW1pY0RyYXcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcnJheS5hcnJheUJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJpbmQoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGEoYXJyYXk6IFN0cnVjdEFycmF5KSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBhc3NlcnQodGhpcy5keW5hbWljRHJhdyk7XG4gICAgICAgIC8vIFRoZSByaWdodCBWQU8gd2lsbCBnZXQgdGhpcyBidWZmZXIgcmUtYm91bmQgbGF0ZXIgaW4gVmVydGV4QXJyYXlPYmplY3QjYmluZFxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzU2MjBcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuYmluZFZBTygpO1xuICAgICAgICB0aGlzLmJpbmQoKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgYXJyYXkuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEluZGV4QnVmZmVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgU3RydWN0QXJyYXksXG4gICAgU3RydWN0QXJyYXlNZW1iZXJcbn0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5pbXBvcnQgdHlwZSBQcm9ncmFtIGZyb20gJy4uL3JlbmRlci9wcm9ncmFtJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ30gQXR0cmlidXRlVHlwZVxuICogQHByaXZhdGVcbiAqIEByZWFkb25seVxuICovXG5jb25zdCBBdHRyaWJ1dGVUeXBlID0ge1xuICAgIEludDg6ICAgJ0JZVEUnLFxuICAgIFVpbnQ4OiAgJ1VOU0lHTkVEX0JZVEUnLFxuICAgIEludDE2OiAgJ1NIT1JUJyxcbiAgICBVaW50MTY6ICdVTlNJR05FRF9TSE9SVCcsXG4gICAgSW50MzI6ICAnSU5UJyxcbiAgICBVaW50MzI6ICdVTlNJR05FRF9JTlQnLFxuICAgIEZsb2F0MzI6ICdGTE9BVCdcbn07XG5cbi8qKlxuICogVGhlIGBWZXJ0ZXhCdWZmZXJgIGNsYXNzIHR1cm5zIGEgYFN0cnVjdEFycmF5YCBpbnRvIGEgV2ViR0wgYnVmZmVyLiBFYWNoIG1lbWJlciBvZiB0aGUgU3RydWN0QXJyYXknc1xuICogU3RydWN0IHR5cGUgaXMgY29udmVydGVkIHRvIGEgV2ViR0wgYXRyaWJ1dGUuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZXJ0ZXhCdWZmZXIge1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xuICAgIGR5bmFtaWNEcmF3OiA/Ym9vbGVhbjtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZHluYW1pY0RyYXcgV2hldGhlciB0aGlzIGJ1ZmZlciB3aWxsIGJlIHJlcGVhdGVkbHkgdXBkYXRlZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBhcnJheTogU3RydWN0QXJyYXksIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPiwgZHluYW1pY0RyYXc/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuICAgICAgICB0aGlzLml0ZW1TaXplID0gYXJyYXkuYnl0ZXNQZXJFbGVtZW50O1xuICAgICAgICB0aGlzLmR5bmFtaWNEcmF3ID0gZHluYW1pY0RyYXc7XG5cbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBjb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGFycmF5LmFycmF5QnVmZmVyLCB0aGlzLmR5bmFtaWNEcmF3ID8gZ2wuRFlOQU1JQ19EUkFXIDogZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgICAgIGlmICghdGhpcy5keW5hbWljRHJhdykge1xuICAgICAgICAgICAgZGVsZXRlIGFycmF5LmFycmF5QnVmZmVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmluZCgpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKTtcbiAgICB9XG5cbiAgICB1cGRhdGVEYXRhKGFycmF5OiBTdHJ1Y3RBcnJheSkge1xuICAgICAgICBhc3NlcnQoYXJyYXkubGVuZ3RoID09PSB0aGlzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmJpbmQoKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIGFycmF5LmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbmFibGVBdHRyaWJ1dGVzKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHByb2dyYW06IFByb2dyYW08Kj4pIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlciA9IHRoaXMuYXR0cmlidXRlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYkluZGV4OiBudW1iZXIgfCB2b2lkID0gcHJvZ3JhbS5hdHRyaWJ1dGVzW21lbWJlci5uYW1lXTtcbiAgICAgICAgICAgIGlmIChhdHRyaWJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBhdHRyaWJ1dGUgcG9pbnRlcnMgaW4gYSBXZWJHTCBjb250ZXh0XG4gICAgICogQHBhcmFtIGdsIFRoZSBXZWJHTCBjb250ZXh0XG4gICAgICogQHBhcmFtIHByb2dyYW0gVGhlIGFjdGl2ZSBXZWJHTCBwcm9ncmFtXG4gICAgICogQHBhcmFtIHZlcnRleE9mZnNldCBJbmRleCBvZiB0aGUgc3RhcnRpbmcgdmVydGV4IG9mIHRoZSBzZWdtZW50XG4gICAgICovXG4gICAgc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgcHJvZ3JhbTogUHJvZ3JhbTwqPiwgdmVydGV4T2Zmc2V0OiA/bnVtYmVyKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1iZXIgPSB0aGlzLmF0dHJpYnV0ZXNbal07XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJJbmRleDogbnVtYmVyIHwgdm9pZCA9IHByb2dyYW0uYXR0cmlidXRlc1ttZW1iZXIubmFtZV07XG5cbiAgICAgICAgICAgIGlmIChhdHRyaWJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihcbiAgICAgICAgICAgICAgICAgICAgYXR0cmliSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIG1lbWJlci5jb21wb25lbnRzLFxuICAgICAgICAgICAgICAgICAgICAoZ2w6IGFueSlbQXR0cmlidXRlVHlwZVttZW1iZXIudHlwZV1dLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyLm9mZnNldCArICh0aGlzLml0ZW1TaXplICogKHZlcnRleE9mZnNldCB8fCAwKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSB0aGUgR0wgYnVmZmVyIGJvdW5kIHRvIHRoZSBnaXZlbiBXZWJHTCBjb250ZXh0XG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlcikge1xuICAgICAgICAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVydGV4QnVmZmVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtcbiAgICBCbGVuZEZ1bmNUeXBlLFxuICAgIEJsZW5kRXF1YXRpb25UeXBlLFxuICAgIENvbG9yTWFza1R5cGUsXG4gICAgRGVwdGhSYW5nZVR5cGUsXG4gICAgRGVwdGhNYXNrVHlwZSxcbiAgICBTdGVuY2lsRnVuY1R5cGUsXG4gICAgU3RlbmNpbE9wVHlwZSxcbiAgICBEZXB0aEZ1bmNUeXBlLFxuICAgIFRleHR1cmVVbml0VHlwZSxcbiAgICBWaWV3cG9ydFR5cGUsXG4gICAgQ3VsbEZhY2VNb2RlVHlwZSxcbiAgICBGcm9udEZhY2VUeXBlLFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBWYWx1ZTxUPiB7XG4gICAgY3VycmVudDogVDtcbiAgICBkZWZhdWx0OiBUO1xuICAgIGRpcnR5OiBib29sZWFuO1xuICAgIGdldCgpOiBUO1xuICAgIHNldERlZmF1bHQoKTogdm9pZDtcbiAgICBzZXQodmFsdWU6IFQpOiB2b2lkO1xufVxuXG5jbGFzcyBCYXNlVmFsdWU8VD4gaW1wbGVtZW50cyBWYWx1ZTxUPiB7XG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dDtcbiAgICBjdXJyZW50OiBUO1xuICAgIGRlZmF1bHQ6IFQ7XG4gICAgZGlydHk6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmRlZmF1bHQgPSB0aGlzLmdldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5kZWZhdWx0O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0KCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50O1xuICAgIH1cbiAgICBzZXQodmFsdWU6IFQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGluIGNoaWxkIGNsYXNzZXM7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdCgpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdDsgLy8gb3ZlcnJpZGVuIGluIGNoaWxkIGNsYXNzZXNcbiAgICB9XG4gICAgc2V0RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5zZXQodGhpcy5kZWZhdWx0KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGVhckNvbG9yIGV4dGVuZHMgQmFzZVZhbHVlPENvbG9yPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBDb2xvciB7XG4gICAgICAgIHJldHVybiBDb2xvci50cmFuc3BhcmVudDtcbiAgICB9XG4gICAgc2V0KHY6IENvbG9yKSB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2LnIgPT09IGMuciAmJiB2LmcgPT09IGMuZyAmJiB2LmIgPT09IGMuYiAmJiB2LmEgPT09IGMuYSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmNsZWFyQ29sb3Iodi5yLCB2LmcsIHYuYiwgdi5hKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyRGVwdGggZXh0ZW5kcyBCYXNlVmFsdWU8bnVtYmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgc2V0KHY6IG51bWJlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuY2xlYXJEZXB0aCh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyU3RlbmNpbCBleHRlbmRzIEJhc2VWYWx1ZTxudW1iZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBzZXQodjogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jbGVhclN0ZW5jaWwodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xvck1hc2sgZXh0ZW5kcyBCYXNlVmFsdWU8Q29sb3JNYXNrVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogQ29sb3JNYXNrVHlwZSB7XG4gICAgICAgIHJldHVybiBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV07XG4gICAgfVxuICAgIHNldCh2OiBDb2xvck1hc2tUeXBlKSB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2WzBdID09PSBjWzBdICYmIHZbMV0gPT09IGNbMV0gJiYgdlsyXSA9PT0gY1syXSAmJiB2WzNdID09PSBjWzNdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuY29sb3JNYXNrKHZbMF0sIHZbMV0sIHZbMl0sIHZbM10pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVwdGhNYXNrIGV4dGVuZHMgQmFzZVZhbHVlPERlcHRoTWFza1R5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IERlcHRoTWFza1R5cGUge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2V0KHY6IERlcHRoTWFza1R5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmRlcHRoTWFzayh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0ZW5jaWxNYXNrIGV4dGVuZHMgQmFzZVZhbHVlPG51bWJlcj4ge1xuICAgIGdldERlZmF1bHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDB4RkY7XG4gICAgfVxuICAgIHNldCh2OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnN0ZW5jaWxNYXNrKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RlbmNpbEZ1bmMgZXh0ZW5kcyBCYXNlVmFsdWU8U3RlbmNpbEZ1bmNUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBTdGVuY2lsRnVuY1R5cGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZnVuYzogdGhpcy5nbC5BTFdBWVMsXG4gICAgICAgICAgICByZWY6IDAsXG4gICAgICAgICAgICBtYXNrOiAweEZGXG4gICAgICAgIH07XG4gICAgfVxuICAgIHNldCh2OiBTdGVuY2lsRnVuY1R5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHYuZnVuYyA9PT0gYy5mdW5jICYmIHYucmVmID09PSBjLnJlZiAmJiB2Lm1hc2sgPT09IGMubWFzayAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnN0ZW5jaWxGdW5jKHYuZnVuYywgdi5yZWYsIHYubWFzayk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGVuY2lsT3AgZXh0ZW5kcyBCYXNlVmFsdWU8U3RlbmNpbE9wVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogU3RlbmNpbE9wVHlwZSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgcmV0dXJuIFtnbC5LRUVQLCBnbC5LRUVQLCBnbC5LRUVQXTtcbiAgICB9XG4gICAgc2V0KHY6IFN0ZW5jaWxPcFR5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiB2WzJdID09PSBjWzJdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuc3RlbmNpbE9wKHZbMF0sIHZbMV0sIHZbMl0pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RlbmNpbFRlc3QgZXh0ZW5kcyBCYXNlVmFsdWU8Ym9vbGVhbj4ge1xuICAgIGdldERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0KHY6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVwdGhSYW5nZSBleHRlbmRzIEJhc2VWYWx1ZTxEZXB0aFJhbmdlVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogRGVwdGhSYW5nZVR5cGUge1xuICAgICAgICByZXR1cm4gWzAsIDFdO1xuICAgIH1cbiAgICBzZXQodjogRGVwdGhSYW5nZVR5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmRlcHRoUmFuZ2UodlswXSwgdlsxXSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aFRlc3QgZXh0ZW5kcyBCYXNlVmFsdWU8Ym9vbGVhbj4ge1xuICAgIGdldERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0KHY6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbC5kaXNhYmxlKGdsLkRFUFRIX1RFU1QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aEZ1bmMgZXh0ZW5kcyBCYXNlVmFsdWU8RGVwdGhGdW5jVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogRGVwdGhGdW5jVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLkxFU1M7XG4gICAgfVxuICAgIHNldCh2OiBEZXB0aEZ1bmNUeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5kZXB0aEZ1bmModik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbGVuZCBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxlbmRGdW5jIGV4dGVuZHMgQmFzZVZhbHVlPEJsZW5kRnVuY1R5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IEJsZW5kRnVuY1R5cGUge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIHJldHVybiBbZ2wuT05FLCBnbC5aRVJPXTtcbiAgICB9XG4gICAgc2V0KHY6IEJsZW5kRnVuY1R5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmJsZW5kRnVuYyh2WzBdLCB2WzFdKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsZW5kQ29sb3IgZXh0ZW5kcyBCYXNlVmFsdWU8Q29sb3I+IHtcbiAgICBnZXREZWZhdWx0KCk6IENvbG9yIHtcbiAgICAgICAgcmV0dXJuIENvbG9yLnRyYW5zcGFyZW50O1xuICAgIH1cbiAgICBzZXQodjogQ29sb3IpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHYuciA9PT0gYy5yICYmIHYuZyA9PT0gYy5nICYmIHYuYiA9PT0gYy5iICYmIHYuYSA9PT0gYy5hICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuYmxlbmRDb2xvcih2LnIsIHYuZywgdi5iLCB2LmEpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxlbmRFcXVhdGlvbiBleHRlbmRzIEJhc2VWYWx1ZTxCbGVuZEVxdWF0aW9uVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogQmxlbmRFcXVhdGlvblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nbC5GVU5DX0FERDtcbiAgICB9XG4gICAgc2V0KHY6IEJsZW5kRXF1YXRpb25UeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5ibGVuZEVxdWF0aW9uKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3VsbEZhY2UgZXh0ZW5kcyBCYXNlVmFsdWU8Ym9vbGVhbj4ge1xuICAgIGdldERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0KHY6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuQ1VMTF9GQUNFKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQ1VMTF9GQUNFKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3VsbEZhY2VTaWRlIGV4dGVuZHMgQmFzZVZhbHVlPEN1bGxGYWNlTW9kZVR5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IEN1bGxGYWNlTW9kZVR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nbC5CQUNLO1xuICAgIH1cbiAgICBzZXQodjogQ3VsbEZhY2VNb2RlVHlwZSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuY3VsbEZhY2Uodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGcm9udEZhY2UgZXh0ZW5kcyBCYXNlVmFsdWU8RnJvbnRGYWNlVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogRnJvbnRGYWNlVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLkNDVztcbiAgICB9XG4gICAgc2V0KHY6IEZyb250RmFjZVR5cGUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmZyb250RmFjZSh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW0gZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMUHJvZ3JhbT4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xQcm9ncmFtIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xQcm9ncmFtKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC51c2VQcm9ncmFtKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aXZlVGV4dHVyZVVuaXQgZXh0ZW5kcyBCYXNlVmFsdWU8VGV4dHVyZVVuaXRUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBUZXh0dXJlVW5pdFR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nbC5URVhUVVJFMDtcbiAgICB9XG4gICAgc2V0KHY6IFRleHR1cmVVbml0VHlwZSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuYWN0aXZlVGV4dHVyZSh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZpZXdwb3J0IGV4dGVuZHMgQmFzZVZhbHVlPFZpZXdwb3J0VHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogVmlld3BvcnRUeXBlIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICByZXR1cm4gWzAsIDAsIGdsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF07XG4gICAgfVxuICAgIHNldCh2OiBWaWV3cG9ydFR5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiB2WzJdID09PSBjWzJdICYmIHZbM10gPT09IGNbM10gJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC52aWV3cG9ydCh2WzBdLCB2WzFdLCB2WzJdLCB2WzNdKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRGcmFtZWJ1ZmZlciBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xGcmFtZWJ1ZmZlcj4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xGcmFtZWJ1ZmZlciB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMRnJhbWVidWZmZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kUmVuZGVyYnVmZmVyIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTFJlbmRlcmJ1ZmZlcj4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xSZW5kZXJidWZmZXIge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTFJlbmRlcmJ1ZmZlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZFRleHR1cmUgZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMVGV4dHVyZT4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xUZXh0dXJlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xUZXh0dXJlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRWZXJ0ZXhCdWZmZXIgZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMQnVmZmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTEJ1ZmZlciB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMQnVmZmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kRWxlbWVudEJ1ZmZlciBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xCdWZmZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IFdlYkdMQnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xCdWZmZXIpIHtcbiAgICAgICAgLy8gQWx3YXlzIHJlYmluZFxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZFZlcnRleEFycmF5T0VTIGV4dGVuZHMgQmFzZVZhbHVlPGFueT4ge1xuICAgIHZhbzogYW55O1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBzdXBlcihjb250ZXh0KTtcbiAgICAgICAgdGhpcy52YW8gPSBjb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0O1xuICAgIH1cbiAgICBnZXREZWZhdWx0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy52YW8gfHwgdiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMudmFvLmJpbmRWZXJ0ZXhBcnJheU9FUyh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpeGVsU3RvcmVVbnBhY2sgZXh0ZW5kcyBCYXNlVmFsdWU8bnVtYmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gNDtcbiAgICB9XG4gICAgc2V0KHY6IG51bWJlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX0FMSUdOTUVOVCwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYSBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCAodjogYW55KSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaXhlbFN0b3JlVW5wYWNrRmxpcFkgZXh0ZW5kcyBCYXNlVmFsdWU8Ym9vbGVhbj4ge1xuICAgIGdldERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0KHY6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19GTElQX1lfV0VCR0wsICh2OiBhbnkpKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuY2xhc3MgRnJhbWVidWZmZXJBdHRhY2htZW50PFQ+IGV4dGVuZHMgQmFzZVZhbHVlPD9UPiB7XG4gICAgcGFyZW50OiBXZWJHTEZyYW1lYnVmZmVyO1xuICAgIGNvbnRleHQ6IENvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IFdlYkdMRnJhbWVidWZmZXIpIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCk7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICBnZXREZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xvckF0dGFjaG1lbnQgZXh0ZW5kcyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ8V2ViR0xUZXh0dXJlPiB7XG4gICAgc2V0RGlydHkoKSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMVGV4dHVyZSk6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KHRoaXMucGFyZW50KTtcbiAgICAgICAgLy8gbm90ZTogaXQncyBwb3NzaWJsZSB0byBhdHRhY2ggYSByZW5kZXJidWZmZXIgdG8gdGhlIGNvbG9yXG4gICAgICAgIC8vIGF0dGFjaG1lbnQgcG9pbnQsIGJ1dCB0aHVzIGZhciBNQkdMIG9ubHkgdXNlcyB0ZXh0dXJlcyBmb3IgY29sb3JcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHYsIDApO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVwdGhBdHRhY2htZW50IGV4dGVuZHMgRnJhbWVidWZmZXJBdHRhY2htZW50PFdlYkdMUmVuZGVyYnVmZmVyPiB7XG4gICAgc2V0KHY6ID9XZWJHTFJlbmRlcmJ1ZmZlcik6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KHRoaXMucGFyZW50KTtcbiAgICAgICAgLy8gbm90ZTogaXQncyBwb3NzaWJsZSB0byBhdHRhY2ggYSB0ZXh0dXJlIHRvIHRoZSBkZXB0aCBhdHRhY2htZW50XG4gICAgICAgIC8vIHBvaW50LCBidXQgdGh1cyBmYXIgTUJHTCBvbmx5IHVzZXMgcmVuZGVyYnVmZmVycyBmb3IgZGVwdGhcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfQVRUQUNITUVOVCwgZ2wuUkVOREVSQlVGRkVSLCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQge0NvbG9yQXR0YWNobWVudCwgRGVwdGhBdHRhY2htZW50fSBmcm9tICcuL3ZhbHVlJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuL2NvbnRleHQnO1xuXG5jbGFzcyBGcmFtZWJ1ZmZlciB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIGZyYW1lYnVmZmVyOiBXZWJHTEZyYW1lYnVmZmVyO1xuICAgIGNvbG9yQXR0YWNobWVudDogQ29sb3JBdHRhY2htZW50O1xuICAgIGRlcHRoQXR0YWNobWVudDogRGVwdGhBdHRhY2htZW50O1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICBjb25zdCBmYm8gPSB0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblxuICAgICAgICB0aGlzLmNvbG9yQXR0YWNobWVudCA9IG5ldyBDb2xvckF0dGFjaG1lbnQoY29udGV4dCwgZmJvKTtcbiAgICAgICAgdGhpcy5kZXB0aEF0dGFjaG1lbnQgPSBuZXcgRGVwdGhBdHRhY2htZW50KGNvbnRleHQsIGZibyk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG5cbiAgICAgICAgY29uc3QgdGV4dHVyZSA9IHRoaXMuY29sb3JBdHRhY2htZW50LmdldCgpO1xuICAgICAgICBpZiAodGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICBjb25zdCByZW5kZXJidWZmZXIgPSB0aGlzLmRlcHRoQXR0YWNobWVudC5nZXQoKTtcbiAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlcikgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGcmFtZWJ1ZmZlcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7RGVwdGhGdW5jVHlwZSwgRGVwdGhNYXNrVHlwZSwgRGVwdGhSYW5nZVR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBBTFdBWVMgPSAweDAyMDc7XG5cbmNsYXNzIERlcHRoTW9kZSB7XG4gICAgZnVuYzogRGVwdGhGdW5jVHlwZTtcbiAgICBtYXNrOiBEZXB0aE1hc2tUeXBlO1xuICAgIHJhbmdlOiBEZXB0aFJhbmdlVHlwZTtcblxuICAgIC8vIERlcHRoTWFzayBlbnVtc1xuICAgIHN0YXRpYyBSZWFkT25seTogYm9vbGVhbjtcbiAgICBzdGF0aWMgUmVhZFdyaXRlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZGVwdGhGdW5jOiBEZXB0aEZ1bmNUeXBlLCBkZXB0aE1hc2s6IERlcHRoTWFza1R5cGUsIGRlcHRoUmFuZ2U6IERlcHRoUmFuZ2VUeXBlKSB7XG4gICAgICAgIHRoaXMuZnVuYyA9IGRlcHRoRnVuYztcbiAgICAgICAgdGhpcy5tYXNrID0gZGVwdGhNYXNrO1xuICAgICAgICB0aGlzLnJhbmdlID0gZGVwdGhSYW5nZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZWQ6ICRSZWFkT25seTxEZXB0aE1vZGU+O1xufVxuXG5EZXB0aE1vZGUuUmVhZE9ubHkgPSBmYWxzZTtcbkRlcHRoTW9kZS5SZWFkV3JpdGUgPSB0cnVlO1xuXG5EZXB0aE1vZGUuZGlzYWJsZWQgPSBuZXcgRGVwdGhNb2RlKEFMV0FZUywgRGVwdGhNb2RlLlJlYWRPbmx5LCBbMCwgMV0pO1xuXG5leHBvcnQgZGVmYXVsdCBEZXB0aE1vZGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUge1N0ZW5jaWxPcENvbnN0YW50LCBTdGVuY2lsVGVzdH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IEFMV0FZUyA9IDB4MDIwNztcbmNvbnN0IEtFRVAgPSAweDFFMDA7XG5cbmNsYXNzIFN0ZW5jaWxNb2RlIHtcbiAgICB0ZXN0OiBTdGVuY2lsVGVzdDtcbiAgICByZWY6IG51bWJlcjtcbiAgICBtYXNrOiBudW1iZXI7XG4gICAgZmFpbDogU3RlbmNpbE9wQ29uc3RhbnQ7XG4gICAgZGVwdGhGYWlsOiBTdGVuY2lsT3BDb25zdGFudDtcbiAgICBwYXNzOiBTdGVuY2lsT3BDb25zdGFudDtcblxuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IFN0ZW5jaWxUZXN0LCByZWY6IG51bWJlciwgbWFzazogbnVtYmVyLCBmYWlsOiBTdGVuY2lsT3BDb25zdGFudCxcbiAgICAgICAgZGVwdGhGYWlsOiBTdGVuY2lsT3BDb25zdGFudCwgcGFzczogU3RlbmNpbE9wQ29uc3RhbnQpIHtcbiAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgICAgICAgdGhpcy5yZWYgPSByZWY7XG4gICAgICAgIHRoaXMubWFzayA9IG1hc2s7XG4gICAgICAgIHRoaXMuZmFpbCA9IGZhaWw7XG4gICAgICAgIHRoaXMuZGVwdGhGYWlsID0gZGVwdGhGYWlsO1xuICAgICAgICB0aGlzLnBhc3MgPSBwYXNzO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaXNhYmxlZDogJFJlYWRPbmx5PFN0ZW5jaWxNb2RlPjtcbn1cblxuU3RlbmNpbE1vZGUuZGlzYWJsZWQgPSBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IEFMV0FZUywgbWFzazogMH0sIDAsIDAsIEtFRVAsIEtFRVAsIEtFRVApO1xuXG5leHBvcnQgZGVmYXVsdCBTdGVuY2lsTW9kZTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUge0JsZW5kRnVuY1R5cGUsIENvbG9yTWFza1R5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBaRVJPID0gMHgwMDAwO1xuY29uc3QgT05FID0gMHgwMDAxO1xuY29uc3QgT05FX01JTlVTX1NSQ19BTFBIQSA9IDB4MDMwMztcblxuY2xhc3MgQ29sb3JNb2RlIHtcbiAgICBibGVuZEZ1bmN0aW9uOiBCbGVuZEZ1bmNUeXBlO1xuICAgIGJsZW5kQ29sb3I6IENvbG9yO1xuICAgIG1hc2s6IENvbG9yTWFza1R5cGU7XG5cbiAgICBjb25zdHJ1Y3RvcihibGVuZEZ1bmN0aW9uOiBCbGVuZEZ1bmNUeXBlLCBibGVuZENvbG9yOiBDb2xvciwgbWFzazogQ29sb3JNYXNrVHlwZSkge1xuICAgICAgICB0aGlzLmJsZW5kRnVuY3Rpb24gPSBibGVuZEZ1bmN0aW9uO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3IgPSBibGVuZENvbG9yO1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgIH1cblxuICAgIHN0YXRpYyBSZXBsYWNlOiBCbGVuZEZ1bmNUeXBlO1xuXG4gICAgc3RhdGljIGRpc2FibGVkOiAkUmVhZE9ubHk8Q29sb3JNb2RlPjtcbiAgICBzdGF0aWMgdW5ibGVuZGVkOiAkUmVhZE9ubHk8Q29sb3JNb2RlPjtcbiAgICBzdGF0aWMgYWxwaGFCbGVuZGVkOiAkUmVhZE9ubHk8Q29sb3JNb2RlPjtcbn1cblxuQ29sb3JNb2RlLlJlcGxhY2UgPSBbT05FLCBaRVJPXTtcblxuQ29sb3JNb2RlLmRpc2FibGVkID0gbmV3IENvbG9yTW9kZShDb2xvck1vZGUuUmVwbGFjZSwgQ29sb3IudHJhbnNwYXJlbnQsIFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0pO1xuQ29sb3JNb2RlLnVuYmxlbmRlZCA9IG5ldyBDb2xvck1vZGUoQ29sb3JNb2RlLlJlcGxhY2UsIENvbG9yLnRyYW5zcGFyZW50LCBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0pO1xuQ29sb3JNb2RlLmFscGhhQmxlbmRlZCA9IG5ldyBDb2xvck1vZGUoW09ORSwgT05FX01JTlVTX1NSQ19BTFBIQV0sIENvbG9yLnRyYW5zcGFyZW50LCBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0pO1xuXG5leHBvcnQgZGVmYXVsdCBDb2xvck1vZGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7Q3VsbEZhY2VNb2RlVHlwZSwgRnJvbnRGYWNlVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IEJBQ0sgPSAweDA0MDU7XG5jb25zdCBDQ1cgPSAweDA5MDE7XG5cbmNsYXNzIEN1bGxGYWNlTW9kZSB7XG4gICAgZW5hYmxlOiBib29sZWFuO1xuICAgIG1vZGU6IEN1bGxGYWNlTW9kZVR5cGU7XG4gICAgZnJvbnRGYWNlOiBGcm9udEZhY2VUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoZW5hYmxlOiBib29sZWFuLCBtb2RlOiBDdWxsRmFjZU1vZGVUeXBlLCBmcm9udEZhY2U6IEZyb250RmFjZVR5cGUpIHtcbiAgICAgICAgdGhpcy5lbmFibGUgPSBlbmFibGU7XG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgICAgIHRoaXMuZnJvbnRGYWNlID0gZnJvbnRGYWNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaXNhYmxlZDogJFJlYWRPbmx5PEN1bGxGYWNlTW9kZT47XG4gICAgc3RhdGljIGJhY2tDQ1c6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+O1xufVxuXG5DdWxsRmFjZU1vZGUuZGlzYWJsZWQgPSBuZXcgQ3VsbEZhY2VNb2RlKGZhbHNlLCBCQUNLLCBDQ1cpO1xuQ3VsbEZhY2VNb2RlLmJhY2tDQ1cgPSBuZXcgQ3VsbEZhY2VNb2RlKHRydWUsIEJBQ0ssIENDVyk7XG5cbmV4cG9ydCBkZWZhdWx0IEN1bGxGYWNlTW9kZTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgSW5kZXhCdWZmZXIgZnJvbSAnLi9pbmRleF9idWZmZXInO1xuXG5pbXBvcnQgVmVydGV4QnVmZmVyIGZyb20gJy4vdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgRnJhbWVidWZmZXIgZnJvbSAnLi9mcmFtZWJ1ZmZlcic7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4vZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IENvbG9yTW9kZSBmcm9tICcuL2NvbG9yX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7ZGVlcEVxdWFsfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtDbGVhckNvbG9yLCBDbGVhckRlcHRoLCBDbGVhclN0ZW5jaWwsIENvbG9yTWFzaywgRGVwdGhNYXNrLCBTdGVuY2lsTWFzaywgU3RlbmNpbEZ1bmMsIFN0ZW5jaWxPcCwgU3RlbmNpbFRlc3QsIERlcHRoUmFuZ2UsIERlcHRoVGVzdCwgRGVwdGhGdW5jLCBCbGVuZCwgQmxlbmRGdW5jLCBCbGVuZENvbG9yLCBCbGVuZEVxdWF0aW9uLCBDdWxsRmFjZSwgQ3VsbEZhY2VTaWRlLCBGcm9udEZhY2UsIFByb2dyYW0sIEFjdGl2ZVRleHR1cmVVbml0LCBWaWV3cG9ydCwgQmluZEZyYW1lYnVmZmVyLCBCaW5kUmVuZGVyYnVmZmVyLCBCaW5kVGV4dHVyZSwgQmluZFZlcnRleEJ1ZmZlciwgQmluZEVsZW1lbnRCdWZmZXIsIEJpbmRWZXJ0ZXhBcnJheU9FUywgUGl4ZWxTdG9yZVVucGFjaywgUGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEsIFBpeGVsU3RvcmVVbnBhY2tGbGlwWX0gZnJvbSAnLi92YWx1ZSc7XG5cbmltcG9ydCB0eXBlIHtUcmlhbmdsZUluZGV4QXJyYXksIExpbmVJbmRleEFycmF5LCBMaW5lU3RyaXBJbmRleEFycmF5fSBmcm9tICcuLi9kYXRhL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IHR5cGUge1xuICAgIFN0cnVjdEFycmF5LFxuICAgIFN0cnVjdEFycmF5TWVtYmVyXG59IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbnR5cGUgQ2xlYXJBcmdzID0ge1xuICAgIGNvbG9yPzogQ29sb3IsXG4gICAgZGVwdGg/OiBudW1iZXIsXG4gICAgc3RlbmNpbD86IG51bWJlclxufTtcblxuY2xhc3MgQ29udGV4dCB7XG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dDtcbiAgICBleHRWZXJ0ZXhBcnJheU9iamVjdDogYW55O1xuICAgIGN1cnJlbnROdW1BdHRyaWJ1dGVzOiA/bnVtYmVyO1xuXG4gICAgY2xlYXJDb2xvcjogQ2xlYXJDb2xvcjtcbiAgICBjbGVhckRlcHRoOiBDbGVhckRlcHRoO1xuICAgIGNsZWFyU3RlbmNpbDogQ2xlYXJTdGVuY2lsO1xuICAgIGNvbG9yTWFzazogQ29sb3JNYXNrO1xuICAgIGRlcHRoTWFzazogRGVwdGhNYXNrO1xuICAgIHN0ZW5jaWxNYXNrOiBTdGVuY2lsTWFzaztcbiAgICBzdGVuY2lsRnVuYzogU3RlbmNpbEZ1bmM7XG4gICAgc3RlbmNpbE9wOiBTdGVuY2lsT3A7XG4gICAgc3RlbmNpbFRlc3Q6IFN0ZW5jaWxUZXN0O1xuICAgIGRlcHRoUmFuZ2U6IERlcHRoUmFuZ2U7XG4gICAgZGVwdGhUZXN0OiBEZXB0aFRlc3Q7XG4gICAgZGVwdGhGdW5jOiBEZXB0aEZ1bmM7XG4gICAgYmxlbmQ6IEJsZW5kO1xuICAgIGJsZW5kRnVuYzogQmxlbmRGdW5jO1xuICAgIGJsZW5kQ29sb3I6IEJsZW5kQ29sb3I7XG4gICAgYmxlbmRFcXVhdGlvbjogQmxlbmRFcXVhdGlvbjtcbiAgICBjdWxsRmFjZTogQ3VsbEZhY2U7XG4gICAgY3VsbEZhY2VTaWRlOiBDdWxsRmFjZVNpZGU7XG4gICAgZnJvbnRGYWNlOiBGcm9udEZhY2U7XG4gICAgcHJvZ3JhbTogUHJvZ3JhbTtcbiAgICBhY3RpdmVUZXh0dXJlOiBBY3RpdmVUZXh0dXJlVW5pdDtcbiAgICB2aWV3cG9ydDogVmlld3BvcnQ7XG4gICAgYmluZEZyYW1lYnVmZmVyOiBCaW5kRnJhbWVidWZmZXI7XG4gICAgYmluZFJlbmRlcmJ1ZmZlcjogQmluZFJlbmRlcmJ1ZmZlcjtcbiAgICBiaW5kVGV4dHVyZTogQmluZFRleHR1cmU7XG4gICAgYmluZFZlcnRleEJ1ZmZlcjogQmluZFZlcnRleEJ1ZmZlcjtcbiAgICBiaW5kRWxlbWVudEJ1ZmZlcjogQmluZEVsZW1lbnRCdWZmZXI7XG4gICAgYmluZFZlcnRleEFycmF5T0VTOiBCaW5kVmVydGV4QXJyYXlPRVM7XG4gICAgcGl4ZWxTdG9yZVVucGFjazogUGl4ZWxTdG9yZVVucGFjaztcbiAgICBwaXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYTogUGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGE7XG4gICAgcGl4ZWxTdG9yZVVucGFja0ZsaXBZOiBQaXhlbFN0b3JlVW5wYWNrRmxpcFk7XG5cbiAgICBleHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6IGFueTtcbiAgICBleHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXg6IGFueTtcbiAgICBleHRUZXh0dXJlSGFsZkZsb2F0OiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuZ2wgPSBnbDtcbiAgICAgICAgdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCA9IHRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xuXG4gICAgICAgIHRoaXMuY2xlYXJDb2xvciA9IG5ldyBDbGVhckNvbG9yKHRoaXMpO1xuICAgICAgICB0aGlzLmNsZWFyRGVwdGggPSBuZXcgQ2xlYXJEZXB0aCh0aGlzKTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwgPSBuZXcgQ2xlYXJTdGVuY2lsKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbG9yTWFzayA9IG5ldyBDb2xvck1hc2sodGhpcyk7XG4gICAgICAgIHRoaXMuZGVwdGhNYXNrID0gbmV3IERlcHRoTWFzayh0aGlzKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsTWFzayA9IG5ldyBTdGVuY2lsTWFzayh0aGlzKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsRnVuYyA9IG5ldyBTdGVuY2lsRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsT3AgPSBuZXcgU3RlbmNpbE9wKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0ID0gbmV3IFN0ZW5jaWxUZXN0KHRoaXMpO1xuICAgICAgICB0aGlzLmRlcHRoUmFuZ2UgPSBuZXcgRGVwdGhSYW5nZSh0aGlzKTtcbiAgICAgICAgdGhpcy5kZXB0aFRlc3QgPSBuZXcgRGVwdGhUZXN0KHRoaXMpO1xuICAgICAgICB0aGlzLmRlcHRoRnVuYyA9IG5ldyBEZXB0aEZ1bmModGhpcyk7XG4gICAgICAgIHRoaXMuYmxlbmQgPSBuZXcgQmxlbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYmxlbmRGdW5jID0gbmV3IEJsZW5kRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZENvbG9yID0gbmV3IEJsZW5kQ29sb3IodGhpcyk7XG4gICAgICAgIHRoaXMuYmxlbmRFcXVhdGlvbiA9IG5ldyBCbGVuZEVxdWF0aW9uKHRoaXMpO1xuICAgICAgICB0aGlzLmN1bGxGYWNlID0gbmV3IEN1bGxGYWNlKHRoaXMpO1xuICAgICAgICB0aGlzLmN1bGxGYWNlU2lkZSA9IG5ldyBDdWxsRmFjZVNpZGUodGhpcyk7XG4gICAgICAgIHRoaXMuZnJvbnRGYWNlID0gbmV3IEZyb250RmFjZSh0aGlzKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtID0gbmV3IFByb2dyYW0odGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aXZlVGV4dHVyZSA9IG5ldyBBY3RpdmVUZXh0dXJlVW5pdCh0aGlzKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydCA9IG5ldyBWaWV3cG9ydCh0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kRnJhbWVidWZmZXIgPSBuZXcgQmluZEZyYW1lYnVmZmVyKHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIgPSBuZXcgQmluZFJlbmRlcmJ1ZmZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kVGV4dHVyZSA9IG5ldyBCaW5kVGV4dHVyZSh0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kVmVydGV4QnVmZmVyID0gbmV3IEJpbmRWZXJ0ZXhCdWZmZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZEVsZW1lbnRCdWZmZXIgPSBuZXcgQmluZEVsZW1lbnRCdWZmZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZFZlcnRleEFycmF5T0VTID0gdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCAmJiBuZXcgQmluZFZlcnRleEFycmF5T0VTKHRoaXMpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2sgPSBuZXcgUGl4ZWxTdG9yZVVucGFjayh0aGlzKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IG5ldyBQaXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYSh0aGlzKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrRmxpcFkgPSBuZXcgUGl4ZWxTdG9yZVVucGFja0ZsaXBZKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljID0gKFxuICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKSB8fFxuICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJykgfHxcbiAgICAgICAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykge1xuICAgICAgICAgICAgdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXggPSBnbC5nZXRQYXJhbWV0ZXIodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXh0VGV4dHVyZUhhbGZGbG9hdCA9IGdsLmdldEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xuICAgICAgICBpZiAodGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0KSB7XG4gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLnVuYmluZFZBTygpO1xuXG4gICAgICAgIHRoaXMuY2xlYXJDb2xvci5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2xlYXJEZXB0aC5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2xlYXJTdGVuY2lsLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jb2xvck1hc2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmRlcHRoTWFzay5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc3RlbmNpbE1hc2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxGdW5jLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsT3Auc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aFJhbmdlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aFRlc3Quc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmRlcHRoRnVuYy5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmxlbmQuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kRnVuYy5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmxlbmRDb2xvci5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmxlbmRFcXVhdGlvbi5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY3VsbEZhY2Uuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmN1bGxGYWNlU2lkZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZnJvbnRGYWNlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVUZXh0dXJlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5iaW5kRnJhbWVidWZmZXIuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHNldERpcnR5KCkge1xuICAgICAgICB0aGlzLmNsZWFyQ29sb3IuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsZWFyRGVwdGguZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuY29sb3JNYXNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZXB0aE1hc2suZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGVuY2lsRnVuYy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlbmNpbE9wLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGVuY2lsVGVzdC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhSYW5nZS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhUZXN0LmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZXB0aEZ1bmMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJsZW5kLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3IuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJsZW5kRXF1YXRpb24uZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmN1bGxGYWNlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jdWxsRmFjZVNpZGUuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmZyb250RmFjZS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvZ3JhbS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuYWN0aXZlVGV4dHVyZS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMudmlld3BvcnQuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRGcmFtZWJ1ZmZlci5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuYmluZFRleHR1cmUuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhCdWZmZXIuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRFbGVtZW50QnVmZmVyLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZFZlcnRleEFycmF5T0VTLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2suZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrRmxpcFkuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZUluZGV4QnVmZmVyKGFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXkgfCBMaW5lSW5kZXhBcnJheSB8IExpbmVTdHJpcEluZGV4QXJyYXksIGR5bmFtaWNEcmF3PzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gbmV3IEluZGV4QnVmZmVyKHRoaXMsIGFycmF5LCBkeW5hbWljRHJhdyk7XG4gICAgfVxuXG4gICAgY3JlYXRlVmVydGV4QnVmZmVyKGFycmF5OiBTdHJ1Y3RBcnJheSwgYXR0cmlidXRlczogJFJlYWRPbmx5QXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIodGhpcywgYXJyYXksIGF0dHJpYnV0ZXMsIGR5bmFtaWNEcmF3KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJidWZmZXIoc3RvcmFnZUZvcm1hdDogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG5cbiAgICAgICAgY29uc3QgcmJvID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7XG4gICAgICAgIHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5zZXQocmJvKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIHN0b3JhZ2VGb3JtYXQsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KG51bGwpO1xuXG4gICAgICAgIHJldHVybiByYm87XG4gICAgfVxuXG4gICAgY3JlYXRlRnJhbWVidWZmZXIod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFtZWJ1ZmZlcih0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBjbGVhcih7Y29sb3IsIGRlcHRofTogQ2xlYXJBcmdzKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgbGV0IG1hc2sgPSAwO1xuXG4gICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgbWFzayB8PSBnbC5DT0xPUl9CVUZGRVJfQklUO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNvbG9yLnNldChjb2xvcik7XG4gICAgICAgICAgICB0aGlzLmNvbG9yTWFzay5zZXQoW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVwdGggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBtYXNrIHw9IGdsLkRFUFRIX0JVRkZFUl9CSVQ7XG5cbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aGVyZSBjbGVhckRlcHRoIGRvZXNuJ3Qgc2VlbSB0byB3b3JrXG4gICAgICAgICAgICAvLyB3aXRob3V0IHJlc2V0aW5nIHRoZSBkZXB0aFJhbmdlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM0MzdcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXQoWzAsIDFdKTtcblxuICAgICAgICAgICAgdGhpcy5jbGVhckRlcHRoLnNldChkZXB0aCk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoTWFzay5zZXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWUgbm90ZSBpbiBQYWludGVyI2NsZWFyU3RlbmNpbDogaW1wbGVtZW50IHRoaXMgdGhlIGVhc3kgd2F5IG9uY2UgR1BVIGJ1Zy93b3JrYXJvdW5kIGlzIGZpeGVkIHVwc3RyZWFtXG4gICAgICAgIC8vIGlmICh0eXBlb2Ygc3RlbmNpbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gICAgIG1hc2sgfD0gZ2wuU1RFTkNJTF9CVUZGRVJfQklUO1xuICAgICAgICAvLyAgICAgdGhpcy5jbGVhclN0ZW5jaWwuc2V0KHN0ZW5jaWwpO1xuICAgICAgICAvLyAgICAgdGhpcy5zdGVuY2lsTWFzay5zZXQoMHhGRik7XG4gICAgICAgIC8vIH1cblxuICAgICAgICBnbC5jbGVhcihtYXNrKTtcbiAgICB9XG5cbiAgICBzZXRDdWxsRmFjZShjdWxsRmFjZU1vZGU6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+KSB7XG4gICAgICAgIGlmIChjdWxsRmFjZU1vZGUuZW5hYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZS5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmN1bGxGYWNlU2lkZS5zZXQoY3VsbEZhY2VNb2RlLm1vZGUpO1xuICAgICAgICAgICAgdGhpcy5mcm9udEZhY2Uuc2V0KGN1bGxGYWNlTW9kZS5mcm9udEZhY2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGVwdGhNb2RlKGRlcHRoTW9kZTogJFJlYWRPbmx5PERlcHRoTW9kZT4pIHtcbiAgICAgICAgaWYgKGRlcHRoTW9kZS5mdW5jID09PSB0aGlzLmdsLkFMV0FZUyAmJiAhZGVwdGhNb2RlLm1hc2spIHtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhUZXN0LnNldChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlcHRoVGVzdC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoRnVuYy5zZXQoZGVwdGhNb2RlLmZ1bmMpO1xuICAgICAgICAgICAgdGhpcy5kZXB0aE1hc2suc2V0KGRlcHRoTW9kZS5tYXNrKTtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXQoZGVwdGhNb2RlLnJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFN0ZW5jaWxNb2RlKHN0ZW5jaWxNb2RlOiAkUmVhZE9ubHk8U3RlbmNpbE1vZGU+KSB7XG4gICAgICAgIGlmIChzdGVuY2lsTW9kZS50ZXN0LmZ1bmMgPT09IHRoaXMuZ2wuQUxXQVlTICYmICFzdGVuY2lsTW9kZS5tYXNrKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbE1hc2suc2V0KHN0ZW5jaWxNb2RlLm1hc2spO1xuICAgICAgICAgICAgdGhpcy5zdGVuY2lsT3Auc2V0KFtzdGVuY2lsTW9kZS5mYWlsLCBzdGVuY2lsTW9kZS5kZXB0aEZhaWwsIHN0ZW5jaWxNb2RlLnBhc3NdKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbEZ1bmMuc2V0KHtcbiAgICAgICAgICAgICAgICBmdW5jOiBzdGVuY2lsTW9kZS50ZXN0LmZ1bmMsXG4gICAgICAgICAgICAgICAgcmVmOiBzdGVuY2lsTW9kZS5yZWYsXG4gICAgICAgICAgICAgICAgbWFzazogc3RlbmNpbE1vZGUudGVzdC5tYXNrXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENvbG9yTW9kZShjb2xvck1vZGU6ICRSZWFkT25seTxDb2xvck1vZGU+KSB7XG4gICAgICAgIGlmIChkZWVwRXF1YWwoY29sb3JNb2RlLmJsZW5kRnVuY3Rpb24sIENvbG9yTW9kZS5SZXBsYWNlKSkge1xuICAgICAgICAgICAgdGhpcy5ibGVuZC5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ibGVuZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmJsZW5kRnVuYy5zZXQoY29sb3JNb2RlLmJsZW5kRnVuY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5ibGVuZENvbG9yLnNldChjb2xvck1vZGUuYmxlbmRDb2xvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbG9yTWFzay5zZXQoY29sb3JNb2RlLm1hc2spO1xuICAgIH1cblxuICAgIHVuYmluZFZBTygpIHtcbiAgICAgICAgLy8gVW5iaW5kaW5nIHRoZSBWQU8gcHJldmVudHMgb3RoZXIgdGhpbmdzIChjdXN0b20gbGF5ZXJzLCBuZXcgYnVmZmVyIGNyZWF0aW9uKSBmcm9tXG4gICAgICAgIC8vIHVuaW50ZW50aW9uYWxseSBjaGFuZ2luZyB0aGUgc3RhdGUgb2YgdGhlIGxhc3QgVkFPIHVzZWQuXG4gICAgICAgIGlmICh0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbnRleHQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NyZWF0ZSBhcyBjcmVhdGVTb3VyY2V9IGZyb20gJy4vc291cmNlJztcblxuaW1wb3J0IFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgVGlsZUNhY2hlIGZyb20gJy4vdGlsZV9jYWNoZSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCB7a2V5c0RpZmZlcmVuY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBTb3VyY2VGZWF0dXJlU3RhdGUgZnJvbSAnLi9zb3VyY2Vfc3RhdGUnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIFN0eWxlIGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtUaWxlU3RhdGV9IGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtTb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuLyoqXG4gKiBgU291cmNlQ2FjaGVgIGlzIHJlc3BvbnNpYmxlIGZvclxuICpcbiAqICAtIGNyZWF0aW5nIGFuIGluc3RhbmNlIG9mIGBTb3VyY2VgXG4gKiAgLSBmb3J3YXJkaW5nIGV2ZW50cyBmcm9tIGBTb3VyY2VgXG4gKiAgLSBjYWNoaW5nIHRpbGVzIGxvYWRlZCBmcm9tIGFuIGluc3RhbmNlIG9mIGBTb3VyY2VgXG4gKiAgLSBsb2FkaW5nIHRoZSB0aWxlcyBuZWVkZWQgdG8gcmVuZGVyIGEgZ2l2ZW4gdmlld3BvcnRcbiAqICAtIHVubG9hZGluZyB0aGUgY2FjaGVkIHRpbGVzIG5vdCBuZWVkZWQgdG8gcmVuZGVyIGEgZ2l2ZW4gdmlld3BvcnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTb3VyY2VDYWNoZSBleHRlbmRzIEV2ZW50ZWQge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcjtcbiAgICBtYXA6IE1hcDtcbiAgICBzdHlsZTogU3R5bGU7XG5cbiAgICBfc291cmNlOiBTb3VyY2U7XG4gICAgX3NvdXJjZUxvYWRlZDogYm9vbGVhbjtcbiAgICBfc291cmNlRXJyb3JlZDogYm9vbGVhbjtcbiAgICBfdGlsZXM6IHtbYW55XTogVGlsZX07XG4gICAgX3ByZXZMbmc6IG51bWJlciB8IHZvaWQ7XG4gICAgX2NhY2hlOiBUaWxlQ2FjaGU7XG4gICAgX3RpbWVyczoge1thbnldOiBUaW1lb3V0SUR9O1xuICAgIF9jYWNoZVRpbWVyczoge1thbnldOiBUaW1lb3V0SUR9O1xuICAgIF9tYXhUaWxlQ2FjaGVTaXplOiA/bnVtYmVyO1xuICAgIF9wYXVzZWQ6IGJvb2xlYW47XG4gICAgX3Nob3VsZFJlbG9hZE9uUmVzdW1lOiBib29sZWFuO1xuICAgIF9jb3ZlcmVkVGlsZXM6IHtbYW55XTogYm9vbGVhbn07XG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm07XG4gICAgX2lzSWRSZW5kZXJhYmxlOiAoaWQ6IG51bWJlciwgc3ltYm9sTGF5ZXI/OiBib29sZWFuKSA9PiBib29sZWFuO1xuICAgIHVzZWQ6IGJvb2xlYW47XG4gICAgX3N0YXRlOiBTb3VyY2VGZWF0dXJlU3RhdGU7XG5cbiAgICBzdGF0aWMgbWF4VW5kZXJ6b29taW5nOiBudW1iZXI7XG4gICAgc3RhdGljIG1heE92ZXJ6b29taW5nOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcblxuICAgICAgICB0aGlzLm9uKCdkYXRhJywgKGUpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuX3NvdXJjZUxvYWRlZCBzaWduaWZpZXMgdGhhdCB0aGUgVGlsZUpTT04gaXMgbG9hZGVkIGlmIGFwcGxpY2FibGUuXG4gICAgICAgICAgICAvLyBpZiB0aGUgc291cmNlIHR5cGUgZG9lcyBub3QgY29tZSB3aXRoIGEgVGlsZUpTT04sIHRoZSBmbGFnIHNpZ25pZmllcyB0aGVcbiAgICAgICAgICAgIC8vIHNvdXJjZSBkYXRhIGhhcyBsb2FkZWQgKGkuZSBnZW9qc29uIGhhcyBiZWVuIHRpbGVkIG9uIHRoZSB3b3JrZXIgYW5kIGlzIHJlYWR5KVxuICAgICAgICAgICAgaWYgKGUuZGF0YVR5cGUgPT09ICdzb3VyY2UnICYmIGUuc291cmNlRGF0YVR5cGUgPT09ICdtZXRhZGF0YScpIHRoaXMuX3NvdXJjZUxvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIGZvciBzb3VyY2VzIHdpdGggbXV0YWJsZSBkYXRhLCB0aGlzIGV2ZW50IGZpcmVzIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YVxuICAgICAgICAgICAgLy8gdG8gYSBzb3VyY2UgaXMgY2hhbmdlZC4gKGkuZS4gR2VvSlNPTlNvdXJjZSNzZXREYXRhIGFuZCBJbWFnZVNvdXJjZSNzZXJDb29yZGluYXRlcylcbiAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VMb2FkZWQgJiYgIXRoaXMuX3BhdXNlZCAmJiBlLmRhdGFUeXBlID09PSBcInNvdXJjZVwiICYmIGUuc291cmNlRGF0YVR5cGUgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub24oJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc291cmNlRXJyb3JlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IGNyZWF0ZVNvdXJjZShpZCwgb3B0aW9ucywgZGlzcGF0Y2hlciwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5fdGlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSBuZXcgVGlsZUNhY2hlKDAsIHRoaXMuX3VubG9hZFRpbGUuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuX3RpbWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9jYWNoZVRpbWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9jb3ZlcmVkVGlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgU291cmNlRmVhdHVyZVN0YXRlKCk7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX21heFRpbGVDYWNoZVNpemUgPSBtYXAgPyBtYXAuX21heFRpbGVDYWNoZVNpemUgOiBudWxsO1xuICAgICAgICBpZiAodGhpcy5fc291cmNlICYmIHRoaXMuX3NvdXJjZS5vbkFkZCkge1xuICAgICAgICAgICAgdGhpcy5fc291cmNlLm9uQWRkKG1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlbW92ZShtYXA6IE1hcCkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlICYmIHRoaXMuX3NvdXJjZS5vblJlbW92ZSkge1xuICAgICAgICAgICAgdGhpcy5fc291cmNlLm9uUmVtb3ZlKG1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBubyB0aWxlIGRhdGEgaXMgcGVuZGluZywgdGlsZXMgd2lsbCBub3QgY2hhbmdlIHVubGVzc1xuICAgICAqIGFuIGFkZGl0aW9uYWwgQVBJIGNhbGwgaXMgcmVjZWl2ZWQuXG4gICAgICovXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlRXJyb3JlZCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZUxvYWRlZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2UubG9hZGVkKCkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIGZvciAoY29uc3QgdCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW3RdO1xuICAgICAgICAgICAgaWYgKHRpbGUuc3RhdGUgIT09ICdsb2FkZWQnICYmIHRpbGUuc3RhdGUgIT09ICdlcnJvcmVkJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0U291cmNlKCk6IFNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gICAgfVxuXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmVzdW1lKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzaG91bGRSZWxvYWQgPSB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gZmFsc2U7XG4gICAgICAgIGlmIChzaG91bGRSZWxvYWQpIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybSkgdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIF9sb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0aWxlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgX3VubG9hZFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLnVubG9hZFRpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodGlsZSwgKCkgPT4ge30pO1xuICAgIH1cblxuICAgIF9hYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLmFib3J0VGlsZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKHRpbGUsICgpID0+IHt9KTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCk7XG4gICAgfVxuXG4gICAgcHJlcGFyZShjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICAodGhpcy5fc291cmNlLnByZXBhcmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5wcmVwYXJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZS5jb2FsZXNjZUNoYW5nZXModGhpcy5fdGlsZXMsIHRoaXMubWFwID8gdGhpcy5tYXAucGFpbnRlciA6IG51bGwpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpXTtcbiAgICAgICAgICAgIHRpbGUudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgdGlsZS5wcmVwYXJlKHRoaXMubWFwLnN0eWxlLmltYWdlTWFuYWdlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWxsIHRpbGUgaWRzIG9yZGVyZWQgd2l0aCB6LW9yZGVyLCBhbmQgY2FzdCB0byBudW1iZXJzXG4gICAgICovXG4gICAgZ2V0SWRzKCk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fdGlsZXMpLm1hcChOdW1iZXIpLnNvcnQoY29tcGFyZUtleVpvb20pO1xuICAgIH1cblxuICAgIGdldFJlbmRlcmFibGVJZHMoc3ltYm9sTGF5ZXI/OiBib29sZWFuKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IGlkcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNJZFJlbmRlcmFibGUoK2lkLCBzeW1ib2xMYXllcikpIGlkcy5wdXNoKCtpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5bWJvbExheWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gaWRzLnNvcnQoKGFfLCBiXykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSB0aGlzLl90aWxlc1thX10udGlsZUlEO1xuICAgICAgICAgICAgICAgIGNvbnN0IGIgPSB0aGlzLl90aWxlc1tiX10udGlsZUlEO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZWRBID0gKG5ldyBQb2ludChhLmNhbm9uaWNhbC54LCBhLmNhbm9uaWNhbC55KSkuX3JvdGF0ZSh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm90YXRlZEIgPSAobmV3IFBvaW50KGIuY2Fub25pY2FsLngsIGIuY2Fub25pY2FsLnkpKS5fcm90YXRlKHRoaXMudHJhbnNmb3JtLmFuZ2xlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5vdmVyc2NhbGVkWiAtIGIub3ZlcnNjYWxlZFogfHwgcm90YXRlZEIueSAtIHJvdGF0ZWRBLnkgfHwgcm90YXRlZEIueCAtIHJvdGF0ZWRBLng7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWRzLnNvcnQoY29tcGFyZUtleVpvb20pO1xuICAgIH1cblxuICAgIGhhc1JlbmRlcmFibGVQYXJlbnQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFRpbGUgPSB0aGlzLmZpbmRMb2FkZWRQYXJlbnQodGlsZUlELCAwKTtcbiAgICAgICAgaWYgKHBhcmVudFRpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0lkUmVuZGVyYWJsZShwYXJlbnRUaWxlLnRpbGVJRC5rZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBfaXNJZFJlbmRlcmFibGUoaWQ6IG51bWJlciwgc3ltYm9sTGF5ZXI/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aWxlc1tpZF0gJiYgdGhpcy5fdGlsZXNbaWRdLmhhc0RhdGEoKSAmJlxuICAgICAgICAgICAgIXRoaXMuX2NvdmVyZWRUaWxlc1tpZF0gJiYgKHN5bWJvbExheWVyIHx8ICF0aGlzLl90aWxlc1tpZF0uaG9sZGluZ0ZvckZhZGUoKSk7XG4gICAgfVxuXG4gICAgcmVsb2FkKCkge1xuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZS5yZXNldCgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaSBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RpbGVzW2ldLnN0YXRlICE9PSBcImVycm9yZWRcIikgdGhpcy5fcmVsb2FkVGlsZShpLCAncmVsb2FkaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcmVsb2FkVGlsZShpZDogc3RyaW5nIHwgbnVtYmVyLCBzdGF0ZTogVGlsZVN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG5cbiAgICAgICAgLy8gdGhpcyBwb3RlbnRpYWxseSBkb2VzIG5vdCBhZGRyZXNzIGFsbCB1bmRlcmx5aW5nXG4gICAgICAgIC8vIGlzc3VlcyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNDI1MlxuICAgICAgICAvLyAtIGhhcmQgdG8gdGVsbCB3aXRob3V0IHJlcHJvIHN0ZXBzXG4gICAgICAgIGlmICghdGlsZSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gXCJsb2FkaW5nXCIgdGlsZXMgYW5kIFwicmVsb2FkaW5nXCIgb3IgXCJleHBpcmVkXCJcbiAgICAgICAgLy8gdGlsZXMgaXMgdGhhdCBcInJlbG9hZGluZ1wiL1wiZXhwaXJlZFwiIHRpbGVzIGFyZSBcInJlbmRlcmFibGVcIi5cbiAgICAgICAgLy8gVGhlcmVmb3JlLCBhIFwibG9hZGluZ1wiIHRpbGUgY2Fubm90IGJlY29tZSBhIFwicmVsb2FkaW5nXCIgdGlsZSB3aXRob3V0XG4gICAgICAgIC8vIGZpcnN0IGJlY29taW5nIGEgXCJsb2FkZWRcIiB0aWxlLlxuICAgICAgICBpZiAodGlsZS5zdGF0ZSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICB0aWxlLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2FkVGlsZSh0aWxlLCB0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcywgdGlsZSwgaWQsIHN0YXRlKSk7XG4gICAgfVxuXG4gICAgX3RpbGVMb2FkZWQodGlsZTogVGlsZSwgaWQ6IHN0cmluZyB8IG51bWJlciwgcHJldmlvdXNTdGF0ZTogVGlsZVN0YXRlLCBlcnI6ID9FcnJvcikge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgaWYgKChlcnI6IGFueSkuc3RhdHVzICE9PSA0MDQpIHRoaXMuX3NvdXJjZS5maXJlKG5ldyBFcnJvckV2ZW50KGVyciwge3RpbGV9KSk7XG4gICAgICAgICAgICAvLyBjb250aW51ZSB0byB0cnkgbG9hZGluZyBwYXJlbnQvY2hpbGRyZW4gdGlsZXMgaWYgYSB0aWxlIGRvZXNuJ3QgZXhpc3QgKDQwNClcbiAgICAgICAgICAgIGVsc2UgdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGlsZS50aW1lQWRkZWQgPSBicm93c2VyLm5vdygpO1xuICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gJ2V4cGlyZWQnKSB0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGlkLCB0aWxlKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0U291cmNlKCkudHlwZSA9PT0gJ3Jhc3Rlci1kZW0nICYmIHRpbGUuZGVtKSB0aGlzLl9iYWNrZmlsbERFTSh0aWxlKTtcbiAgICAgICAgdGhpcy5fc3RhdGUuaW5pdGlhbGl6ZVRpbGVTdGF0ZSh0aWxlLCB0aGlzLm1hcCA/IHRoaXMubWFwLnBhaW50ZXIgOiBudWxsKTtcblxuICAgICAgICB0aGlzLl9zb3VyY2UuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCB0aWxlLCBjb29yZDogdGlsZS50aWxlSUR9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBGb3IgcmFzdGVyIHRlcnJhaW4gc291cmNlLCBiYWNrZmlsbCBERU0gdG8gZWxpbWluYXRlIHZpc2libGUgdGlsZSBib3VuZGFyaWVzXG4gICAgKiBAcHJpdmF0ZVxuICAgICovXG4gICAgX2JhY2tmaWxsREVNKHRpbGU6IFRpbGUpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyYWJsZXMgPSB0aGlzLmdldFJlbmRlcmFibGVJZHMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYm9yZGVySWQgPSByZW5kZXJhYmxlc1tpXTtcbiAgICAgICAgICAgIGlmICh0aWxlLm5laWdoYm9yaW5nVGlsZXMgJiYgdGlsZS5uZWlnaGJvcmluZ1RpbGVzW2JvcmRlcklkXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvcmRlclRpbGUgPSB0aGlzLmdldFRpbGVCeUlEKGJvcmRlcklkKTtcbiAgICAgICAgICAgICAgICBmaWxsQm9yZGVyKHRpbGUsIGJvcmRlclRpbGUpO1xuICAgICAgICAgICAgICAgIGZpbGxCb3JkZXIoYm9yZGVyVGlsZSwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaWxsQm9yZGVyKHRpbGUsIGJvcmRlclRpbGUpIHtcbiAgICAgICAgICAgIHRpbGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBkeCA9IGJvcmRlclRpbGUudGlsZUlELmNhbm9uaWNhbC54IC0gdGlsZS50aWxlSUQuY2Fub25pY2FsLng7XG4gICAgICAgICAgICBjb25zdCBkeSA9IGJvcmRlclRpbGUudGlsZUlELmNhbm9uaWNhbC55IC0gdGlsZS50aWxlSUQuY2Fub25pY2FsLnk7XG4gICAgICAgICAgICBjb25zdCBkaW0gPSBNYXRoLnBvdygyLCB0aWxlLnRpbGVJRC5jYW5vbmljYWwueik7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJJZCA9IGJvcmRlclRpbGUudGlsZUlELmtleTtcbiAgICAgICAgICAgIGlmIChkeCA9PT0gMCAmJiBkeSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZHkpID4gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhkeCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBkZWx0YSBjb29yZGluYXRlIGZvciB3b3JsZCB3cmFwYXJvdW5kLlxuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhkeCArIGRpbSkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZHggKz0gZGltO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZHggLSBkaW0pID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGR4IC09IGRpbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWJvcmRlclRpbGUuZGVtIHx8ICF0aWxlLmRlbSkgcmV0dXJuO1xuICAgICAgICAgICAgdGlsZS5kZW0uYmFja2ZpbGxCb3JkZXIoYm9yZGVyVGlsZS5kZW0sIGR4LCBkeSk7XG4gICAgICAgICAgICBpZiAodGlsZS5uZWlnaGJvcmluZ1RpbGVzICYmIHRpbGUubmVpZ2hib3JpbmdUaWxlc1tib3JkZXJJZF0pXG4gICAgICAgICAgICAgICAgdGlsZS5uZWlnaGJvcmluZ1RpbGVzW2JvcmRlcklkXS5iYWNrZmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBzcGVjaWZpYyB0aWxlIGJ5IFRpbGVJRFxuICAgICAqL1xuICAgIGdldFRpbGUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogVGlsZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRpbGVCeUlEKHRpbGVJRC5rZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIHNwZWNpZmljIHRpbGUgYnkgaWRcbiAgICAgKi9cbiAgICBnZXRUaWxlQnlJRChpZDogc3RyaW5nIHwgbnVtYmVyKTogVGlsZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aWxlc1tpZF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSB6b29tIGxldmVsIGFkanVzdGVkIGZvciB0aGUgZGlmZmVyZW5jZSBpbiBtYXAgYW5kIHNvdXJjZSB0aWxlc2l6ZXNcbiAgICAgKi9cbiAgICBnZXRab29tKHRyYW5zZm9ybTogVHJhbnNmb3JtKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS56b29tICsgdHJhbnNmb3JtLnNjYWxlWm9vbSh0cmFuc2Zvcm0udGlsZVNpemUgLyB0aGlzLl9zb3VyY2UudGlsZVNpemUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvciBhIGdpdmVuIHNldCBvZiB0aWxlcywgcmV0YWluIGNoaWxkcmVuIHRoYXQgYXJlIGxvYWRlZCBhbmQgaGF2ZSBhIHpvb21cbiAgICAgKiBiZXR3ZWVuIGB6b29tYCAoZXhjbHVzaXZlKSBhbmQgYG1heENvdmVyaW5nWm9vbWAgKGluY2x1c2l2ZSlcbiAgICAgKi9cbiAgICBfcmV0YWluTG9hZGVkQ2hpbGRyZW4oXG4gICAgICAgIGlkZWFsVGlsZXM6IHtbYW55XTogT3ZlcnNjYWxlZFRpbGVJRH0sXG4gICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgbWF4Q292ZXJpbmdab29tOiBudW1iZXIsXG4gICAgICAgIHJldGFpbjoge1thbnldOiBPdmVyc2NhbGVkVGlsZUlEfVxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBsZXQgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcblxuICAgICAgICAgICAgLy8gb25seSBjb25zaWRlciByZW5kZXJhYmxlIHRpbGVzIHVwIHRvIG1heENvdmVyaW5nWm9vbVxuICAgICAgICAgICAgaWYgKHJldGFpbltpZF0gfHxcbiAgICAgICAgICAgICAgICAhdGlsZS5oYXNEYXRhKCkgfHxcbiAgICAgICAgICAgICAgICB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWiA8PSB6b29tIHx8XG4gICAgICAgICAgICAgICAgdGlsZS50aWxlSUQub3ZlcnNjYWxlZFogPiBtYXhDb3ZlcmluZ1pvb21cbiAgICAgICAgICAgICkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBwYXJlbnRzIGFuZCByZXRhaW4gdGhlIHRvcG1vc3QgbG9hZGVkIG9uZSBpZiBmb3VuZFxuICAgICAgICAgICAgbGV0IHRvcG1vc3RMb2FkZWRJRCA9IHRpbGUudGlsZUlEO1xuICAgICAgICAgICAgd2hpbGUgKHRpbGUgJiYgdGlsZS50aWxlSUQub3ZlcnNjYWxlZFogPiB6b29tICsgMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElEID0gdGlsZS50aWxlSUQuc2NhbGVkVG8odGlsZS50aWxlSUQub3ZlcnNjYWxlZFogLSAxKTtcblxuICAgICAgICAgICAgICAgIHRpbGUgPSB0aGlzLl90aWxlc1twYXJlbnRJRC5rZXldO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRpbGUgJiYgdGlsZS5oYXNEYXRhKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wbW9zdExvYWRlZElEID0gcGFyZW50SUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5jZXN0b3JzIG9mIHRoZSB0b3Btb3N0IGxvYWRlZCBjaGlsZCB0byBzZWUgaWYgdGhlcmUncyBvbmUgdGhhdCBuZWVkZWQgaXRcbiAgICAgICAgICAgIGxldCB0aWxlSUQgPSB0b3Btb3N0TG9hZGVkSUQ7XG4gICAgICAgICAgICB3aGlsZSAodGlsZUlELm92ZXJzY2FsZWRaID4gem9vbSkge1xuICAgICAgICAgICAgICAgIHRpbGVJRCA9IHRpbGVJRC5zY2FsZWRUbyh0aWxlSUQub3ZlcnNjYWxlZFogLSAxKTtcblxuICAgICAgICAgICAgICAgIGlmIChpZGVhbFRpbGVzW3RpbGVJRC5rZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgcGFyZW50IHRoYXQgbmVlZGVkIGEgbG9hZGVkIGNoaWxkOyByZXRhaW4gdGhhdCBjaGlsZFxuICAgICAgICAgICAgICAgICAgICByZXRhaW5bdG9wbW9zdExvYWRlZElELmtleV0gPSB0b3Btb3N0TG9hZGVkSUQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBsb2FkZWQgcGFyZW50IG9mIHRoZSBnaXZlbiB0aWxlICh1cCB0byBtaW5Db3ZlcmluZ1pvb20pXG4gICAgICovXG4gICAgZmluZExvYWRlZFBhcmVudCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIG1pbkNvdmVyaW5nWm9vbTogbnVtYmVyKTogP1RpbGUge1xuICAgICAgICBmb3IgKGxldCB6ID0gdGlsZUlELm92ZXJzY2FsZWRaIC0gMTsgeiA+PSBtaW5Db3ZlcmluZ1pvb207IHotLSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGlsZUlELnNjYWxlZFRvKHopO1xuICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHBhcmVudC5rZXkpO1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGUuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZ2V0KHBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNpemVzIHRoZSB0aWxlIGNhY2hlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdwb3J0J3Mgc2l6ZVxuICAgICAqIG9yIHRoZSBtYXhUaWxlQ2FjaGVTaXplIG9wdGlvbiBwYXNzZWQgZHVyaW5nIG1hcCBjcmVhdGlvblxuICAgICAqXG4gICAgICogTGFyZ2VyIHZpZXdwb3J0cyB1c2UgbW9yZSB0aWxlcyBhbmQgbmVlZCBsYXJnZXIgY2FjaGVzLiBMYXJnZXIgdmlld3BvcnRzXG4gICAgICogYXJlIG1vcmUgbGlrZWx5IHRvIGJlIGZvdW5kIG9uIGRldmljZXMgd2l0aCBtb3JlIG1lbW9yeSBhbmQgb24gcGFnZXMgd2hlcmVcbiAgICAgKiB0aGUgbWFwIGlzIG1vcmUgaW1wb3J0YW50LlxuICAgICAqL1xuICAgIHVwZGF0ZUNhY2hlU2l6ZSh0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICBjb25zdCB3aWR0aEluVGlsZXMgPSBNYXRoLmNlaWwodHJhbnNmb3JtLndpZHRoIC8gdGhpcy5fc291cmNlLnRpbGVTaXplKSArIDE7XG4gICAgICAgIGNvbnN0IGhlaWdodEluVGlsZXMgPSBNYXRoLmNlaWwodHJhbnNmb3JtLmhlaWdodCAvIHRoaXMuX3NvdXJjZS50aWxlU2l6ZSkgKyAxO1xuICAgICAgICBjb25zdCBhcHByb3hUaWxlc0luVmlldyA9IHdpZHRoSW5UaWxlcyAqIGhlaWdodEluVGlsZXM7XG4gICAgICAgIGNvbnN0IGNvbW1vblpvb21SYW5nZSA9IDU7XG5cbiAgICAgICAgY29uc3Qgdmlld0RlcGVuZGVudE1heFNpemUgPSBNYXRoLmZsb29yKGFwcHJveFRpbGVzSW5WaWV3ICogY29tbW9uWm9vbVJhbmdlKTtcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IHR5cGVvZiB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID09PSAnbnVtYmVyJyA/IE1hdGgubWluKHRoaXMuX21heFRpbGVDYWNoZVNpemUsIHZpZXdEZXBlbmRlbnRNYXhTaXplKSA6IHZpZXdEZXBlbmRlbnRNYXhTaXplO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlLnNldE1heFNpemUobWF4U2l6ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlV3JhcEp1bXAobG5nOiBudW1iZXIpIHtcbiAgICAgICAgLy8gT24gdG9wIG9mIHRoZSByZWd1bGFyIHoveC95IHZhbHVlcywgVGlsZUlEcyBoYXZlIGEgYHdyYXBgIHZhbHVlIHRoYXQgc3BlY2lmeVxuICAgICAgICAvLyB3aGljaCBjcHB5IG9mIHRoZSB3b3JsZCB0aGUgdGlsZSBiZWxvbmdzIHRvLiBGb3IgZXhhbXBsZSwgYXQgYGxuZzogMTBgIHlvdVxuICAgICAgICAvLyBtaWdodCByZW5kZXIgei94L3kvMCB3aGlsZSBhdCBgbG5nOiAzNzBgIHlvdSB3b3VsZCByZW5kZXIgei94L3kvMS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlbiBsbmcgdmFsdWVzIGdldCB3cmFwcGVkIChnb2luZyBmcm9tIGBsbmc6IDM3MGAgdG8gYGxvbmc6IDEwYCkgeW91IGV4cGVjdFxuICAgICAgICAvLyB0byBzZWUgdGhlIHNhbWUgdGhpbmcgb24gdGhlIHNjcmVlbiAoMzcwIGRlZ3JlZXMgYW5kIDEwIGRlZ3JlZXMgaXMgdGhlIHNhbWVcbiAgICAgICAgLy8gcGxhY2UgaW4gdGhlIHdvcmxkKSBidXQgYWxsIHRoZSBUaWxlSURzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgd3JhcCB2YWx1ZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIG1ha2UgdGhpcyB0cmFuc2l0aW9uIHNlYW1sZXNzLCB3ZSBjYWxjdWxhdGUgdGhlIHJvdW5kZWQgZGlmZmVyZW5jZSBvZlxuICAgICAgICAvLyBcIndvcmxkc1wiIGJldHdlZW4gdGhlIGxhc3QgZnJhbWUgYW5kIHRoZSBjdXJyZW50IGZyYW1lLiBJZiB0aGUgbWFwIHBhbm5lZCBieVxuICAgICAgICAvLyBhIHdvcmxkLCB0aGVuIHdlIGNhbiBhc3NpZ24gYWxsIHRoZSB0aWxlcyBuZXcgVGlsZUlEcyB3aXRoIHVwZGF0ZWQgd3JhcCB2YWx1ZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBhc3NpZ24gei94L3kvMSBhIG5ldyBpZDogei94L3kvMC4gSXQgaXMgdGhlIHNhbWUgdGlsZSwganVzdCByZW5kZXJlZFxuICAgICAgICAvLyBpbiBhIGRpZmZlcmVudCBwb3NpdGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHJldXNlIHRoZSB0aWxlcyBhdCBtb3JlIGlkZWFsIGxvY2F0aW9ucyBhbmQgcHJldmVudCBmbGlja2VyaW5nLlxuICAgICAgICBjb25zdCBwcmV2TG5nID0gdGhpcy5fcHJldkxuZyA9PT0gdW5kZWZpbmVkID8gbG5nIDogdGhpcy5fcHJldkxuZztcbiAgICAgICAgY29uc3QgbG5nRGlmZmVyZW5jZSA9IGxuZyAtIHByZXZMbmc7XG4gICAgICAgIGNvbnN0IHdvcmxkRGlmZmVyZW5jZSA9IGxuZ0RpZmZlcmVuY2UgLyAzNjA7XG4gICAgICAgIGNvbnN0IHdyYXBEZWx0YSA9IE1hdGgucm91bmQod29ybGREaWZmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5fcHJldkxuZyA9IGxuZztcblxuICAgICAgICBpZiAod3JhcERlbHRhKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlcyA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcbiAgICAgICAgICAgICAgICB0aWxlLnRpbGVJRCA9IHRpbGUudGlsZUlELnVud3JhcFRvKHRpbGUudGlsZUlELndyYXAgKyB3cmFwRGVsdGEpO1xuICAgICAgICAgICAgICAgIHRpbGVzW3RpbGUudGlsZUlELmtleV0gPSB0aWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGlsZXMgPSB0aWxlcztcblxuICAgICAgICAgICAgLy8gUmVzZXQgdGlsZSByZWxvYWQgdGltZXJzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbWVycykge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRdO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihpZCwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRpbGVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHZpZXdwb3J0IGFuZCBhZGRzIG5ldyB0aWxlcyB0aGF0XG4gICAgICogYXJlIGluc2lkZSB0aGUgdmlld3BvcnQuXG4gICAgICovXG4gICAgdXBkYXRlKHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZUxvYWRlZCB8fCB0aGlzLl9wYXVzZWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVDYWNoZVNpemUodHJhbnNmb3JtKTtcbiAgICAgICAgdGhpcy5oYW5kbGVXcmFwSnVtcCh0aGlzLnRyYW5zZm9ybS5jZW50ZXIubG5nKTtcblxuICAgICAgICAvLyBDb3ZlcmVkIGlzIGEgbGlzdCBvZiByZXRhaW5lZCB0aWxlcyB3aG8ncyBhcmVhcyBhcmUgZnVsbHkgY292ZXJlZCBieSBvdGhlcixcbiAgICAgICAgLy8gYmV0dGVyLCByZXRhaW5lZCB0aWxlcy4gVGhleSBhcmUgbm90IGRyYXduIHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX2NvdmVyZWRUaWxlcyA9IHt9O1xuXG4gICAgICAgIGxldCBpZGVhbFRpbGVJRHM7XG4gICAgICAgIGlmICghdGhpcy51c2VkKSB7XG4gICAgICAgICAgICBpZGVhbFRpbGVJRHMgPSBbXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2UudGlsZUlEKSB7XG4gICAgICAgICAgICBpZGVhbFRpbGVJRHMgPSB0cmFuc2Zvcm0uZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzKHRoaXMuX3NvdXJjZS50aWxlSUQpXG4gICAgICAgICAgICAgICAgLm1hcCgodW53cmFwcGVkKSA9PiBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh1bndyYXBwZWQuY2Fub25pY2FsLnosIHVud3JhcHBlZC53cmFwLCB1bndyYXBwZWQuY2Fub25pY2FsLnosIHVud3JhcHBlZC5jYW5vbmljYWwueCwgdW53cmFwcGVkLmNhbm9uaWNhbC55KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZGVhbFRpbGVJRHMgPSB0cmFuc2Zvcm0uY292ZXJpbmdUaWxlcyh7XG4gICAgICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMuX3NvdXJjZS50aWxlU2l6ZSxcbiAgICAgICAgICAgICAgICBtaW56b29tOiB0aGlzLl9zb3VyY2UubWluem9vbSxcbiAgICAgICAgICAgICAgICBtYXh6b29tOiB0aGlzLl9zb3VyY2UubWF4em9vbSxcbiAgICAgICAgICAgICAgICByb3VuZFpvb206IHRoaXMuX3NvdXJjZS5yb3VuZFpvb20sXG4gICAgICAgICAgICAgICAgcmVwYXJzZU92ZXJzY2FsZWQ6IHRoaXMuX3NvdXJjZS5yZXBhcnNlT3ZlcnNjYWxlZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2UuaGFzVGlsZSkge1xuICAgICAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IGlkZWFsVGlsZUlEcy5maWx0ZXIoKGNvb3JkKSA9PiAodGhpcy5fc291cmNlLmhhc1RpbGU6IGFueSkoY29vcmQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSB0aGUgb3Zlcnpvb21pbmcvdW5kZXJ6b29taW5nIGFtb3VudHMuXG4gICAgICAgIGNvbnN0IHpvb20gPSAodGhpcy5fc291cmNlLnJvdW5kWm9vbSA/IE1hdGgucm91bmQgOiBNYXRoLmZsb29yKSh0aGlzLmdldFpvb20odHJhbnNmb3JtKSk7XG4gICAgICAgIGNvbnN0IG1pbkNvdmVyaW5nWm9vbSA9IE1hdGgubWF4KHpvb20gLSBTb3VyY2VDYWNoZS5tYXhPdmVyem9vbWluZywgdGhpcy5fc291cmNlLm1pbnpvb20pO1xuICAgICAgICBjb25zdCBtYXhDb3ZlcmluZ1pvb20gPSBNYXRoLm1heCh6b29tICsgU291cmNlQ2FjaGUubWF4VW5kZXJ6b29taW5nLCAgdGhpcy5fc291cmNlLm1pbnpvb20pO1xuXG4gICAgICAgIC8vIFJldGFpbiBpcyBhIGxpc3Qgb2YgdGlsZXMgdGhhdCB3ZSBzaG91bGRuJ3QgZGVsZXRlLCBldmVuIGlmIHRoZXkgYXJlIG5vdFxuICAgICAgICAvLyB0aGUgbW9zdCBpZGVhbCB0aWxlIGZvciB0aGUgY3VycmVudCB2aWV3cG9ydC4gVGhpcyBtYXkgaW5jbHVkZSB0aWxlcyBsaWtlXG4gICAgICAgIC8vIHBhcmVudCBvciBjaGlsZCB0aWxlcyB0aGF0IGFyZSAqYWxyZWFkeSogbG9hZGVkLlxuICAgICAgICBjb25zdCByZXRhaW4gPSB0aGlzLl91cGRhdGVSZXRhaW5lZFRpbGVzKGlkZWFsVGlsZUlEcywgem9vbSk7XG5cbiAgICAgICAgaWYgKGlzUmFzdGVyVHlwZSh0aGlzLl9zb3VyY2UudHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudHNGb3JGYWRpbmcgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IGZhZGluZ1RpbGVzID0ge307XG4gICAgICAgICAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyhyZXRhaW4pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlSUQgPSByZXRhaW5baWRdO1xuICAgICAgICAgICAgICAgIGFzc2VydCh0aWxlSUQua2V5ID09PSAraWQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbGUgfHwgdGlsZS5mYWRlRW5kVGltZSAmJiB0aWxlLmZhZGVFbmRUaW1lIDw9IGJyb3dzZXIubm93KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRpbGUgaXMgbG9hZGVkIGJ1dCBzdGlsbCBmYWRpbmcgaW4sIGZpbmQgcGFyZW50cyB0byBjcm9zcy1mYWRlIHdpdGggaXRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gdGhpcy5maW5kTG9hZGVkUGFyZW50KHRpbGVJRCwgbWluQ292ZXJpbmdab29tKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRUaWxlKHBhcmVudFRpbGUudGlsZUlEKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c0ZvckZhZGluZ1twYXJlbnRUaWxlLnRpbGVJRC5rZXldID0gcGFyZW50VGlsZS50aWxlSUQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmFkaW5nVGlsZXNbaWRdID0gdGlsZUlEO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmb3IgdGlsZXMgdGhhdCBhcmUgc3RpbGwgZmFkaW5nIGluLCBhbHNvIGZpbmQgY2hpbGRyZW4gdG8gY3Jvc3MtZmFkZSB3aXRoXG4gICAgICAgICAgICB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihmYWRpbmdUaWxlcywgem9vbSwgbWF4Q292ZXJpbmdab29tLCByZXRhaW4pO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHBhcmVudHNGb3JGYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJldGFpbltpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSB0aWxlIGlzIG9ubHkgbmVlZGVkIGZvciBmYWRpbmcsIG1hcmsgaXQgYXMgY292ZXJlZCBzbyB0aGF0IGl0IGlzbid0IHJlbmRlcmVkIG9uIGl0J3Mgb3duLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkVGlsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2lkXSA9IHBhcmVudHNGb3JGYWRpbmdbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmV0YWluZWRJZCBpbiByZXRhaW4pIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSByZXRhaW5lZCB0aWxlcyBhbHdheXMgY2xlYXIgYW55IGV4aXN0aW5nIGZhZGUgaG9sZHNcbiAgICAgICAgICAgIC8vIHNvIHRoYXQgaWYgdGhleSdyZSByZW1vdmVkIGFnYWluIHRoZWlyIGZhZGUgdGltZXIgc3RhcnRzIGZyZXNoLlxuICAgICAgICAgICAgdGhpcy5fdGlsZXNbcmV0YWluZWRJZF0uY2xlYXJGYWRlSG9sZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0aWxlcyB3ZSBkb24ndCBuZWVkIGFueW1vcmUuXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IGtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLCByZXRhaW4pO1xuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiByZW1vdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSURdO1xuICAgICAgICAgICAgaWYgKHRpbGUuaGFzU3ltYm9sQnVja2V0cyAmJiAhdGlsZS5ob2xkaW5nRm9yRmFkZSgpKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zZXRIb2xkRHVyYXRpb24odGhpcy5tYXAuX2ZhZGVEdXJhdGlvbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aWxlLmhhc1N5bWJvbEJ1Y2tldHMgfHwgdGlsZS5zeW1ib2xGYWRlRmluaXNoZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUodGlsZUlEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90aWxlc1tpZF0uaG9sZGluZ0ZvckZhZGUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVJldGFpbmVkVGlsZXMoaWRlYWxUaWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgem9vbTogbnVtYmVyKTogeyBbc3RyaW5nXTogT3ZlcnNjYWxlZFRpbGVJRH0ge1xuICAgICAgICBjb25zdCByZXRhaW4gPSB7fTtcbiAgICAgICAgY29uc3QgY2hlY2tlZDoge1tudW1iZXJdOiBib29sZWFuIH0gPSB7fTtcbiAgICAgICAgY29uc3QgbWluQ292ZXJpbmdab29tID0gTWF0aC5tYXgoem9vbSAtIFNvdXJjZUNhY2hlLm1heE92ZXJ6b29taW5nLCB0aGlzLl9zb3VyY2UubWluem9vbSk7XG4gICAgICAgIGNvbnN0IG1heENvdmVyaW5nWm9vbSA9IE1hdGgubWF4KHpvb20gKyBTb3VyY2VDYWNoZS5tYXhVbmRlcnpvb21pbmcsICB0aGlzLl9zb3VyY2UubWluem9vbSk7XG5cbiAgICAgICAgY29uc3QgbWlzc2luZ1RpbGVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdGlsZUlEIG9mIGlkZWFsVGlsZUlEcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX2FkZFRpbGUodGlsZUlEKTtcblxuICAgICAgICAgICAgLy8gcmV0YWluIHRoZSB0aWxlIGV2ZW4gaWYgaXQncyBub3QgbG9hZGVkIGJlY2F1c2UgaXQncyBhbiBpZGVhbCB0aWxlLlxuICAgICAgICAgICAgcmV0YWluW3RpbGVJRC5rZXldID0gdGlsZUlEO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5oYXNEYXRhKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoem9vbSA8IHRoaXMuX3NvdXJjZS5tYXh6b29tKSB7XG4gICAgICAgICAgICAgICAgLy8gc2F2ZSBtaXNzaW5nIHRpbGVzIHRoYXQgcG90ZW50aWFsbHkgaGF2ZSBsb2FkZWQgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBtaXNzaW5nVGlsZXNbdGlsZUlELmtleV0gPSB0aWxlSUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXRhaW4gYW55IGxvYWRlZCBjaGlsZHJlbiBvZiBpZGVhbCB0aWxlcyB1cCB0byBtYXhDb3ZlcmluZ1pvb21cbiAgICAgICAgdGhpcy5fcmV0YWluTG9hZGVkQ2hpbGRyZW4obWlzc2luZ1RpbGVzLCB6b29tLCBtYXhDb3ZlcmluZ1pvb20sIHJldGFpbik7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlSUQgb2YgaWRlYWxUaWxlSURzKSB7XG4gICAgICAgICAgICBsZXQgdGlsZSA9IHRoaXMuX3RpbGVzW3RpbGVJRC5rZXldO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5oYXNEYXRhKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBUaGUgdGlsZSB3ZSByZXF1aXJlIGlzIG5vdCB5ZXQgbG9hZGVkIG9yIGRvZXMgbm90IGV4aXN0O1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGNoaWxkcmVuIHRoYXQgZnVsbHkgY292ZXIgaXQuXG5cbiAgICAgICAgICAgIGlmICh6b29tICsgMSA+IHRoaXMuX3NvdXJjZS5tYXh6b29tKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UncmUgbG9va2luZyBmb3IgYW4gb3Zlcnpvb21lZCBjaGlsZCB0aWxlLlxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ29vcmQgPSB0aWxlSUQuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVGlsZSA9IHRoaXMuZ2V0VGlsZShjaGlsZENvb3JkKTtcbiAgICAgICAgICAgICAgICBpZiAoISFjaGlsZFRpbGUgJiYgY2hpbGRUaWxlLmhhc0RhdGEoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXRhaW5bY2hpbGRDb29yZC5rZXldID0gY2hpbGRDb29yZDtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHRpbGUgaXMgY292ZXJlZCBieSBvdmVyem9vbWVkIGNoaWxkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBhbGwgNCBpbW1lZGlhdGUgY2hpbGRyZW4gYXJlIGxvYWRlZCAoaS5lLiB0aGUgbWlzc2luZyBpZGVhbCB0aWxlIGlzIGNvdmVyZWQpXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aWxlSUQuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJldGFpbltjaGlsZHJlblswXS5rZXldICYmXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZHJlblsxXS5rZXldICYmXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZHJlblsyXS5rZXldICYmXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZHJlblszXS5rZXldKSBjb250aW51ZTsgLy8gdGlsZSBpcyBjb3ZlcmVkIGJ5IGNoaWxkcmVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFdlIGNvdWxkbid0IGZpbmQgY2hpbGQgdGlsZXMgdGhhdCBlbnRpcmVseSBjb3ZlciB0aGUgaWRlYWwgdGlsZTsgbG9vayBmb3IgcGFyZW50cyBub3cuXG5cbiAgICAgICAgICAgIC8vIEFzIHdlIGFzY2VuZCB1cCB0aGUgdGlsZSBweXJhbWlkIG9mIHRoZSBpZGVhbCB0aWxlLCB3ZSBjaGVjayB3aGV0aGVyIHRoZSBwYXJlbnRcbiAgICAgICAgICAgIC8vIHRpbGUgaGFzIGJlZW4gcHJldmlvdXNseSByZXF1ZXN0ZWQgKGFuZCBlcnJvcmVkIGJlY2F1c2Ugd2Ugb25seSBsb29wIG92ZXIgdGlsZXMgd2l0aCBubyBkYXRhKVxuICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gcmVxdWVzdCBpdHMgcGFyZW50LlxuICAgICAgICAgICAgbGV0IHBhcmVudFdhc1JlcXVlc3RlZCA9IHRpbGUud2FzUmVxdWVzdGVkKCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IG92ZXJzY2FsZWRaID0gdGlsZUlELm92ZXJzY2FsZWRaIC0gMTsgb3ZlcnNjYWxlZFogPj0gbWluQ292ZXJpbmdab29tOyAtLW92ZXJzY2FsZWRaKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aWxlSUQuc2NhbGVkVG8ob3ZlcnNjYWxlZFopO1xuXG4gICAgICAgICAgICAgICAgLy8gQnJlYWsgcGFyZW50IHRpbGUgYXNjZW50IGlmIHRoaXMgcm91dGUgaGFzIGJlZW4gcHJldmlvdXNseSBjaGVja2VkIGJ5IGFub3RoZXIgY2hpbGQuXG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrZWRbcGFyZW50SWQua2V5XSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2hlY2tlZFtwYXJlbnRJZC5rZXldID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRpbGUgPSB0aGlzLmdldFRpbGUocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgIGlmICghdGlsZSAmJiBwYXJlbnRXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZSA9IHRoaXMuX2FkZFRpbGUocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGlsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXRhaW5bcGFyZW50SWQua2V5XSA9IHBhcmVudElkO1xuICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHZhbHVlcywgc2luY2UgdGhleSdyZSB0aGUgcGFyZW50IG9mIHRoZSBuZXh0IGl0ZXJhdGlvblxuICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgcGFyZW50IHRpbGUgYXNjZW50IGxvb3AuXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFdhc1JlcXVlc3RlZCA9IHRpbGUud2FzUmVxdWVzdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aWxlLmhhc0RhdGEoKSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldGFpbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSB0aWxlLCBnaXZlbiBpdHMgY29vcmRpbmF0ZSwgdG8gdGhlIHB5cmFtaWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYWRkVGlsZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiBUaWxlIHtcbiAgICAgICAgbGV0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSUQua2V5XTtcbiAgICAgICAgaWYgKHRpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGlsZTtcblxuICAgICAgICB0aWxlID0gdGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKHRpbGVJRCk7XG4gICAgICAgIGlmICh0aWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIodGlsZUlELmtleSwgdGlsZSk7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHRpbGVJRCBiZWNhdXNlIHRoZSBjYWNoZWQgdGlsZSBjb3VsZCBoYXZlIGhhZCBhIGRpZmZlcmVudCB3cmFwIHZhbHVlXG4gICAgICAgICAgICB0aWxlLnRpbGVJRCA9IHRpbGVJRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlLmluaXRpYWxpemVUaWxlU3RhdGUodGlsZSwgdGhpcy5tYXAgPyB0aGlzLm1hcC5wYWludGVyIDogbnVsbCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV0pIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWNoZVRpbWVyc1t0aWxlSUQua2V5XTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIodGlsZUlELmtleSwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYWNoZWQgPSBCb29sZWFuKHRpbGUpO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgdGlsZSA9IG5ldyBUaWxlKHRpbGVJRCwgdGhpcy5fc291cmNlLnRpbGVTaXplICogdGlsZUlELm92ZXJzY2FsZUZhY3RvcigpKTtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRUaWxlKHRpbGUsIHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLCB0aWxlLCB0aWxlSUQua2V5LCB0aWxlLnN0YXRlKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbXBvc3NpYmxlLCBidXQgc2lsZW5jZSBmbG93LlxuICAgICAgICBpZiAoIXRpbGUpIHJldHVybiAobnVsbDogYW55KTtcblxuICAgICAgICB0aWxlLnVzZXMrKztcbiAgICAgICAgdGhpcy5fdGlsZXNbdGlsZUlELmtleV0gPSB0aWxlO1xuICAgICAgICBpZiAoIWNhY2hlZCkgdGhpcy5fc291cmNlLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHt0aWxlLCBjb29yZDogdGlsZS50aWxlSUQsIGRhdGFUeXBlOiAnc291cmNlJ30pKTtcblxuICAgICAgICByZXR1cm4gdGlsZTtcbiAgICB9XG5cbiAgICBfc2V0VGlsZVJlbG9hZFRpbWVyKGlkOiBzdHJpbmcgfCBudW1iZXIsIHRpbGU6IFRpbGUpIHtcbiAgICAgICAgaWYgKGlkIGluIHRoaXMuX3RpbWVycykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tpZF0pO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RpbWVyc1tpZF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBpcnlUaW1lb3V0ID0gdGlsZS5nZXRFeHBpcnlUaW1lb3V0KCk7XG4gICAgICAgIGlmIChleHBpcnlUaW1lb3V0KSB7XG4gICAgICAgICAgICB0aGlzLl90aW1lcnNbaWRdID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVsb2FkVGlsZShpZCwgJ2V4cGlyZWQnKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgICAgIH0sIGV4cGlyeVRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgdGlsZSwgZ2l2ZW4gaXRzIGlkLCBmcm9tIHRoZSBweXJhbWlkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVtb3ZlVGlsZShpZDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG4gICAgICAgIGlmICghdGlsZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aWxlLnVzZXMtLTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyc1tpZF0pIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90aW1lcnNbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbGUudXNlcyA+IDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRpbGUuaGFzRGF0YSgpICYmIHRpbGUuc3RhdGUgIT09ICdyZWxvYWRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5hZGQodGlsZS50aWxlSUQsIHRpbGUsIHRpbGUuZ2V0RXhwaXJ5VGltZW91dCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hYm9ydFRpbGUodGlsZSk7XG4gICAgICAgICAgICB0aGlzLl91bmxvYWRUaWxlKHRpbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCB0aWxlcyBmcm9tIHRoaXMgcHlyYW1pZFxuICAgICAqL1xuICAgIGNsZWFyVGlsZXMoKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpXG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVUaWxlKGlkKTtcblxuICAgICAgICB0aGlzLl9jYWNoZS5yZXNldCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCB0aHJvdWdoIG91ciBjdXJyZW50IHRpbGVzIGFuZCBhdHRlbXB0IHRvIGZpbmQgdGhlIHRpbGVzIHRoYXRcbiAgICAgKiBjb3ZlciB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSBwb2ludFF1ZXJ5R2VvbWV0cnkgY29vcmRpbmF0ZXMgb2YgdGhlIGNvcm5lcnMgb2YgYm91bmRpbmcgcmVjdGFuZ2xlXG4gICAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IHJlc3VsdCBpdGVtcyBoYXZlIHt0aWxlLCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZfSwgd2hlcmUgbWluL21heCBib3VuZGluZyB2YWx1ZXMgYXJlIHRoZSBnaXZlbiBib3VuZHMgdHJhbnNmb3JtZWQgaW4gaW50byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGlzIHRpbGUuXG4gICAgICovXG4gICAgdGlsZXNJbihwb2ludFF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiwgbWF4UGl0Y2hTY2FsZUZhY3RvcjogbnVtYmVyLCBoYXMzRExheWVyOiBib29sZWFuKSB7XG5cbiAgICAgICAgY29uc3QgdGlsZVJlc3VsdHMgPSBbXTtcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybTtcbiAgICAgICAgaWYgKCF0cmFuc2Zvcm0pIHJldHVybiB0aWxlUmVzdWx0cztcblxuICAgICAgICBjb25zdCBjYW1lcmFQb2ludFF1ZXJ5R2VvbWV0cnkgPSBoYXMzRExheWVyID9cbiAgICAgICAgICAgIHRyYW5zZm9ybS5nZXRDYW1lcmFRdWVyeUdlb21ldHJ5KHBvaW50UXVlcnlHZW9tZXRyeSkgOlxuICAgICAgICAgICAgcG9pbnRRdWVyeUdlb21ldHJ5O1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5R2VvbWV0cnkgPSBwb2ludFF1ZXJ5R2VvbWV0cnkubWFwKChwKSA9PiB0cmFuc2Zvcm0ucG9pbnRDb29yZGluYXRlKHApKTtcbiAgICAgICAgY29uc3QgY2FtZXJhUXVlcnlHZW9tZXRyeSA9IGNhbWVyYVBvaW50UXVlcnlHZW9tZXRyeS5tYXAoKHApID0+IHRyYW5zZm9ybS5wb2ludENvb3JkaW5hdGUocCkpO1xuXG4gICAgICAgIGNvbnN0IGlkcyA9IHRoaXMuZ2V0SWRzKCk7XG5cbiAgICAgICAgbGV0IG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgbGV0IG1pblkgPSBJbmZpbml0eTtcbiAgICAgICAgbGV0IG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIGxldCBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBjYW1lcmFRdWVyeUdlb21ldHJ5KSB7XG4gICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcC54KTtcbiAgICAgICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBwLnkpO1xuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHAueCk7XG4gICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcC55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRzW2ldXTtcbiAgICAgICAgICAgIGlmICh0aWxlLmhvbGRpbmdGb3JGYWRlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaWxlcyBoZWxkIGZvciBmYWRpbmcgYXJlIGNvdmVyZWQgYnkgdGlsZXMgdGhhdCBhcmUgY2xvc2VyIHRvIGlkZWFsXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0aWxlSUQgPSB0aWxlLnRpbGVJRDtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5wb3coMiwgdHJhbnNmb3JtLnpvb20gLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhZGRpbmcgPSBtYXhQaXRjaFNjYWxlRmFjdG9yICogdGlsZS5xdWVyeVBhZGRpbmcgKiBFWFRFTlQgLyB0aWxlLnRpbGVTaXplIC8gc2NhbGU7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbGVTcGFjZUJvdW5kcyA9IFtcbiAgICAgICAgICAgICAgICB0aWxlSUQuZ2V0VGlsZVBvaW50KG5ldyBNZXJjYXRvckNvb3JkaW5hdGUobWluWCwgbWluWSkpLFxuICAgICAgICAgICAgICAgIHRpbGVJRC5nZXRUaWxlUG9pbnQobmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShtYXhYLCBtYXhZKSlcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGlmICh0aWxlU3BhY2VCb3VuZHNbMF0ueCAtIHF1ZXJ5UGFkZGluZyA8IEVYVEVOVCAmJiB0aWxlU3BhY2VCb3VuZHNbMF0ueSAtIHF1ZXJ5UGFkZGluZyA8IEVYVEVOVCAmJlxuICAgICAgICAgICAgICAgIHRpbGVTcGFjZUJvdW5kc1sxXS54ICsgcXVlcnlQYWRkaW5nID49IDAgJiYgdGlsZVNwYWNlQm91bmRzWzFdLnkgKyBxdWVyeVBhZGRpbmcgPj0gMCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZVNwYWNlUXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+ID0gcXVlcnlHZW9tZXRyeS5tYXAoKGMpID0+IHRpbGVJRC5nZXRUaWxlUG9pbnQoYykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGVTcGFjZUNhbWVyYVF1ZXJ5R2VvbWV0cnkgPSBjYW1lcmFRdWVyeUdlb21ldHJ5Lm1hcCgoYykgPT4gdGlsZUlELmdldFRpbGVQb2ludChjKSk7XG5cbiAgICAgICAgICAgICAgICB0aWxlUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZSxcbiAgICAgICAgICAgICAgICAgICAgdGlsZUlELFxuICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5OiB0aWxlU3BhY2VRdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBjYW1lcmFRdWVyeUdlb21ldHJ5OiB0aWxlU3BhY2VDYW1lcmFRdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRpbGVSZXN1bHRzO1xuICAgIH1cblxuICAgIGdldFZpc2libGVDb29yZGluYXRlcyhzeW1ib2xMYXllcj86IGJvb2xlYW4pOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiB7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuZ2V0UmVuZGVyYWJsZUlkcyhzeW1ib2xMYXllcikubWFwKChpZCkgPT4gdGhpcy5fdGlsZXNbaWRdLnRpbGVJRCk7XG4gICAgICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgICAgICBjb29yZC5wb3NNYXRyaXggPSB0aGlzLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoY29vcmQudG9VbndyYXBwZWQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvb3JkcztcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLmhhc1RyYW5zaXRpb24oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNSYXN0ZXJUeXBlKHRoaXMuX3NvdXJjZS50eXBlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbGUuZmFkZUVuZFRpbWUgIT09IHVuZGVmaW5lZCAmJiB0aWxlLmZhZGVFbmRUaW1lID49IGJyb3dzZXIubm93KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYSBwYXJ0aWN1bGFyIHN0YXRlIGZvciBhIGZlYXR1cmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllcj86IHN0cmluZywgZmVhdHVyZTogbnVtYmVyLCBzdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIHNvdXJjZUxheWVyID0gc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgdGhpcy5fc3RhdGUudXBkYXRlU3RhdGUoc291cmNlTGF5ZXIsIGZlYXR1cmUsIHN0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBzdGF0ZSBrZXkgZm9yIGEgZmVhdHVyZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyPzogc3RyaW5nLCBmZWF0dXJlPzogbnVtYmVyLCBrZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgc291cmNlTGF5ZXIgPSBzb3VyY2VMYXllciB8fCAnX2dlb2pzb25UaWxlTGF5ZXInO1xuICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmVGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXIsIGZlYXR1cmUsIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBlbnRpcmUgc3RhdGUgb2JqZWN0IGZvciBhIGZlYXR1cmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllcj86IHN0cmluZywgZmVhdHVyZTogbnVtYmVyKSB7XG4gICAgICAgIHNvdXJjZUxheWVyID0gc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlKTtcbiAgICB9XG59XG5cblNvdXJjZUNhY2hlLm1heE92ZXJ6b29taW5nID0gMTA7XG5Tb3VyY2VDYWNoZS5tYXhVbmRlcnpvb21pbmcgPSAzO1xuXG5mdW5jdGlvbiBjb21wYXJlS2V5Wm9vbShhLCBiKSB7XG4gICAgcmV0dXJuICgoYSAlIDMyKSAtIChiICUgMzIpKSB8fCAoYiAtIGEpO1xufVxuXG5mdW5jdGlvbiBpc1Jhc3RlclR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAncmFzdGVyJyB8fCB0eXBlID09PSAnaW1hZ2UnIHx8IHR5cGUgPT09ICd2aWRlbyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNvdXJjZUNhY2hlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi93aW5kb3cnO1xuaW1wb3J0IG1hcGJveGdsIGZyb20gJy4uLy4uLyc7XG5cbmltcG9ydCB0eXBlIHtXb3JrZXJJbnRlcmZhY2V9IGZyb20gJy4uL3dlYl93b3JrZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKTogV29ya2VySW50ZXJmYWNlIHtcbiAgICByZXR1cm4gKG5ldyB3aW5kb3cuV29ya2VyKG1hcGJveGdsLndvcmtlclVybCk6IGFueSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgV2ViV29ya2VyIGZyb20gJy4vd2ViX3dvcmtlcic7XG5pbXBvcnQgdHlwZSB7V29ya2VySW50ZXJmYWNlfSBmcm9tICcuL3dlYl93b3JrZXInO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi9icm93c2VyJztcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgd29ya2VyIHBvb2wuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXb3JrZXJQb29sIHtcbiAgICBzdGF0aWMgd29ya2VyQ291bnQ6IG51bWJlcjtcblxuICAgIGFjdGl2ZToge1tudW1iZXJdOiBib29sZWFufTtcbiAgICB3b3JrZXJzOiBBcnJheTxXb3JrZXJJbnRlcmZhY2U+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0ge307XG4gICAgfVxuXG4gICAgYWNxdWlyZShtYXBJZDogbnVtYmVyKTogQXJyYXk8V29ya2VySW50ZXJmYWNlPiB7XG4gICAgICAgIGlmICghdGhpcy53b3JrZXJzKSB7XG4gICAgICAgICAgICAvLyBMYXppbHkgbG9vayB1cCB0aGUgdmFsdWUgb2YgbWFwYm94Z2wud29ya2VyQ291bnQgc28gdGhhdFxuICAgICAgICAgICAgLy8gY2xpZW50IGNvZGUgaGFzIGhhZCBhIGNoYW5jZSB0byBzZXQgaXQuXG4gICAgICAgICAgICB0aGlzLndvcmtlcnMgPSBbXTtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLndvcmtlcnMubGVuZ3RoIDwgV29ya2VyUG9vbC53b3JrZXJDb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMud29ya2Vycy5wdXNoKG5ldyBXZWJXb3JrZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVttYXBJZF0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy53b3JrZXJzLnNsaWNlKCk7XG4gICAgfVxuXG4gICAgcmVsZWFzZShtYXBJZDogbnVtYmVyKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVttYXBJZF07XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnMuZm9yRWFjaCgodykgPT4ge1xuICAgICAgICAgICAgICAgIHcudGVybWluYXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMud29ya2VycyA9IChudWxsOiBhbnkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCBhdmFpbGFibGVMb2dpY2FsUHJvY2Vzc29ycyA9IE1hdGguZmxvb3IoYnJvd3Nlci5oYXJkd2FyZUNvbmN1cnJlbmN5IC8gMik7XG5Xb3JrZXJQb29sLndvcmtlckNvdW50ID0gTWF0aC5tYXgoTWF0aC5taW4oYXZhaWxhYmxlTG9naWNhbFByb2Nlc3NvcnMsIDYpLCAxKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBXb3JrZXJQb29sIGZyb20gJy4vd29ya2VyX3Bvb2wnO1xuXG5sZXQgZ2xvYmFsV29ya2VyUG9vbDtcblxuLyoqXG4gKiBDcmVhdGVzIChpZiBuZWNlc3NhcnkpIGFuZCByZXR1cm5zIHRoZSBzaW5nbGUsIGdsb2JhbCBXb3JrZXJQb29sIGluc3RhbmNlXG4gKiB0byBiZSBzaGFyZWQgYWNyb3NzIGVhY2ggTWFwXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHbG9iYWxXb3JrZXJQb29sICgpIHtcbiAgICBpZiAoIWdsb2JhbFdvcmtlclBvb2wpIHtcbiAgICAgICAgZ2xvYmFsV29ya2VyUG9vbCA9IG5ldyBXb3JrZXJQb29sKCk7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxXb3JrZXJQb29sO1xufVxuIiwiXG5pbXBvcnQgcmVmUHJvcGVydGllcyBmcm9tICcuL3V0aWwvcmVmX3Byb3BlcnRpZXMnO1xuXG5mdW5jdGlvbiBkZXJlZihsYXllciwgcGFyZW50KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGsgaW4gbGF5ZXIpIHtcbiAgICAgICAgaWYgKGsgIT09ICdyZWYnKSB7XG4gICAgICAgICAgICByZXN1bHRba10gPSBsYXllcltrXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZlByb3BlcnRpZXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICBpZiAoayBpbiBwYXJlbnQpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IHBhcmVudFtrXTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVyZWZMYXllcnM7XG5cbi8qKlxuICogR2l2ZW4gYW4gYXJyYXkgb2YgbGF5ZXJzLCBzb21lIG9mIHdoaWNoIG1heSBjb250YWluIGByZWZgIHByb3BlcnRpZXNcbiAqIHdob3NlIHZhbHVlIGlzIHRoZSBgaWRgIG9mIGFub3RoZXIgcHJvcGVydHksIHJldHVybiBhIG5ldyBhcnJheSB3aGVyZVxuICogc3VjaCBsYXllcnMgaGF2ZSBiZWVuIGF1Z21lbnRlZCB3aXRoIHRoZSAndHlwZScsICdzb3VyY2UnLCBldGMuIHByb3BlcnRpZXNcbiAqIGZyb20gdGhlIHBhcmVudCBsYXllciwgYW5kIHRoZSBgcmVmYCBwcm9wZXJ0eSBoYXMgYmVlbiByZW1vdmVkLlxuICpcbiAqIFRoZSBpbnB1dCBpcyBub3QgbW9kaWZpZWQuIFRoZSBvdXRwdXQgbWF5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byBwb3J0aW9uc1xuICogb2YgdGhlIGlucHV0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5PExheWVyPn0gbGF5ZXJzXG4gKiBAcmV0dXJucyB7QXJyYXk8TGF5ZXI+fVxuICovXG5mdW5jdGlvbiBkZXJlZkxheWVycyhsYXllcnMpIHtcbiAgICBsYXllcnMgPSBsYXllcnMuc2xpY2UoKTtcblxuICAgIGNvbnN0IG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFwW2xheWVyc1tpXS5pZF0gPSBsYXllcnNbaV07XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCdyZWYnIGluIGxheWVyc1tpXSkge1xuICAgICAgICAgICAgbGF5ZXJzW2ldID0gZGVyZWYobGF5ZXJzW2ldLCBtYXBbbGF5ZXJzW2ldLnJlZl0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheWVycztcbn1cbiIsIlxuaW1wb3J0IGlzRXF1YWwgZnJvbSAnLi91dGlsL2RlZXBfZXF1YWwnO1xuXG5jb25zdCBvcGVyYXRpb25zID0ge1xuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRTdHlsZScsIGFyZ3M6IFtzdHlsZXNoZWV0XSB9XG4gICAgICovXG4gICAgc2V0U3R5bGU6ICdzZXRTdHlsZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ2FkZExheWVyJywgYXJnczogW2xheWVyLCAnYmVmb3JlTGF5ZXJJZCddIH1cbiAgICAgKi9cbiAgICBhZGRMYXllcjogJ2FkZExheWVyJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAncmVtb3ZlTGF5ZXInLCBhcmdzOiBbJ2xheWVySWQnXSB9XG4gICAgICovXG4gICAgcmVtb3ZlTGF5ZXI6ICdyZW1vdmVMYXllcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldFBhaW50UHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0UGFpbnRQcm9wZXJ0eTogJ3NldFBhaW50UHJvcGVydHknLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXlvdXRQcm9wZXJ0eScsIGFyZ3M6IFsnbGF5ZXJJZCcsICdwcm9wJywgdmFsdWVdIH1cbiAgICAgKi9cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eTogJ3NldExheW91dFByb3BlcnR5JyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0RmlsdGVyJywgYXJnczogWydsYXllcklkJywgZmlsdGVyXSB9XG4gICAgICovXG4gICAgc2V0RmlsdGVyOiAnc2V0RmlsdGVyJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnYWRkU291cmNlJywgYXJnczogWydzb3VyY2VJZCcsIHNvdXJjZV0gfVxuICAgICAqL1xuICAgIGFkZFNvdXJjZTogJ2FkZFNvdXJjZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3JlbW92ZVNvdXJjZScsIGFyZ3M6IFsnc291cmNlSWQnXSB9XG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlOiAncmVtb3ZlU291cmNlJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0R2VvSlNPTlNvdXJjZURhdGEnLCBhcmdzOiBbJ3NvdXJjZUlkJywgZGF0YV0gfVxuICAgICAqL1xuICAgIHNldEdlb0pTT05Tb3VyY2VEYXRhOiAnc2V0R2VvSlNPTlNvdXJjZURhdGEnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXllclpvb21SYW5nZScsIGFyZ3M6IFsnbGF5ZXJJZCcsIDAsIDIyXSB9XG4gICAgICovXG4gICAgc2V0TGF5ZXJab29tUmFuZ2U6ICdzZXRMYXllclpvb21SYW5nZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldExheWVyUHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0TGF5ZXJQcm9wZXJ0eTogJ3NldExheWVyUHJvcGVydHknLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRDZW50ZXInLCBhcmdzOiBbW2xvbiwgbGF0XV0gfVxuICAgICAqL1xuICAgIHNldENlbnRlcjogJ3NldENlbnRlcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldFpvb20nLCBhcmdzOiBbem9vbV0gfVxuICAgICAqL1xuICAgIHNldFpvb206ICdzZXRab29tJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0QmVhcmluZycsIGFyZ3M6IFtiZWFyaW5nXSB9XG4gICAgICovXG4gICAgc2V0QmVhcmluZzogJ3NldEJlYXJpbmcnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRQaXRjaCcsIGFyZ3M6IFtwaXRjaF0gfVxuICAgICAqL1xuICAgIHNldFBpdGNoOiAnc2V0UGl0Y2gnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRTcHJpdGUnLCBhcmdzOiBbJ3Nwcml0ZVVybCddIH1cbiAgICAgKi9cbiAgICBzZXRTcHJpdGU6ICdzZXRTcHJpdGUnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRHbHlwaHMnLCBhcmdzOiBbJ2dseXBoc1VybCddIH1cbiAgICAgKi9cbiAgICBzZXRHbHlwaHM6ICdzZXRHbHlwaHMnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRUcmFuc2l0aW9uJywgYXJnczogW3RyYW5zaXRpb25dIH1cbiAgICAgKi9cbiAgICBzZXRUcmFuc2l0aW9uOiAnc2V0VHJhbnNpdGlvbicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldExpZ2h0aW5nJywgYXJnczogW2xpZ2h0UHJvcGVydGllc10gfVxuICAgICAqL1xuICAgIHNldExpZ2h0OiAnc2V0TGlnaHQnXG5cbn07XG5cbmZ1bmN0aW9uIGFkZFNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzKSB7XG4gICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5hZGRTb3VyY2UsIGFyZ3M6IFtzb3VyY2VJZCwgYWZ0ZXJbc291cmNlSWRdXX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTb3VyY2Uoc291cmNlSWQsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCkge1xuICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlU291cmNlLCBhcmdzOiBbc291cmNlSWRdfSk7XG4gICAgc291cmNlc1JlbW92ZWRbc291cmNlSWRdID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU291cmNlKHNvdXJjZUlkLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKSB7XG4gICAgcmVtb3ZlU291cmNlKHNvdXJjZUlkLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgIGFkZFNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzKTtcbn1cblxuZnVuY3Rpb24gY2FuVXBkYXRlR2VvSlNPTihiZWZvcmUsIGFmdGVyLCBzb3VyY2VJZCkge1xuICAgIGxldCBwcm9wO1xuICAgIGZvciAocHJvcCBpbiBiZWZvcmVbc291cmNlSWRdKSB7XG4gICAgICAgIGlmICghYmVmb3JlW3NvdXJjZUlkXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgIGlmIChwcm9wICE9PSAnZGF0YScgJiYgIWlzRXF1YWwoYmVmb3JlW3NvdXJjZUlkXVtwcm9wXSwgYWZ0ZXJbc291cmNlSWRdW3Byb3BdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAocHJvcCBpbiBhZnRlcltzb3VyY2VJZF0pIHtcbiAgICAgICAgaWYgKCFhZnRlcltzb3VyY2VJZF0uaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAocHJvcCAhPT0gJ2RhdGEnICYmICFpc0VxdWFsKGJlZm9yZVtzb3VyY2VJZF1bcHJvcF0sIGFmdGVyW3NvdXJjZUlkXVtwcm9wXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGlmZlNvdXJjZXMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlIHx8IHt9O1xuICAgIGFmdGVyID0gYWZ0ZXIgfHwge307XG5cbiAgICBsZXQgc291cmNlSWQ7XG5cbiAgICAvLyBsb29rIGZvciBzb3VyY2VzIHRvIHJlbW92ZVxuICAgIGZvciAoc291cmNlSWQgaW4gYmVmb3JlKSB7XG4gICAgICAgIGlmICghYmVmb3JlLmhhc093blByb3BlcnR5KHNvdXJjZUlkKSkgY29udGludWU7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSB7XG4gICAgICAgICAgICByZW1vdmVTb3VyY2Uoc291cmNlSWQsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciBzb3VyY2VzIHRvIGFkZC91cGRhdGVcbiAgICBmb3IgKHNvdXJjZUlkIGluIGFmdGVyKSB7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFiZWZvcmUuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSB7XG4gICAgICAgICAgICBhZGRTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRXF1YWwoYmVmb3JlW3NvdXJjZUlkXSwgYWZ0ZXJbc291cmNlSWRdKSkge1xuICAgICAgICAgICAgaWYgKGJlZm9yZVtzb3VyY2VJZF0udHlwZSA9PT0gJ2dlb2pzb24nICYmIGFmdGVyW3NvdXJjZUlkXS50eXBlID09PSAnZ2VvanNvbicgJiYgY2FuVXBkYXRlR2VvSlNPTihiZWZvcmUsIGFmdGVyLCBzb3VyY2VJZCkpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEdlb0pTT05Tb3VyY2VEYXRhLCBhcmdzOiBbc291cmNlSWQsIGFmdGVyW3NvdXJjZUlkXS5kYXRhXX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBubyB1cGRhdGUgY29tbWFuZCwgbXVzdCByZW1vdmUgdGhlbiBhZGRcbiAgICAgICAgICAgICAgICB1cGRhdGVTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkaWZmTGF5ZXJQcm9wZXJ0eUNoYW5nZXMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMsIGxheWVySWQsIGtsYXNzLCBjb21tYW5kKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlIHx8IHt9O1xuICAgIGFmdGVyID0gYWZ0ZXIgfHwge307XG5cbiAgICBsZXQgcHJvcDtcblxuICAgIGZvciAocHJvcCBpbiBiZWZvcmUpIHtcbiAgICAgICAgaWYgKCFiZWZvcmUuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlW3Byb3BdLCBhZnRlcltwcm9wXSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQsIGFyZ3M6IFtsYXllcklkLCBwcm9wLCBhZnRlcltwcm9wXSwga2xhc3NdfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChwcm9wIGluIGFmdGVyKSB7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkocHJvcCkgfHwgYmVmb3JlLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZVtwcm9wXSwgYWZ0ZXJbcHJvcF0pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kLCBhcmdzOiBbbGF5ZXJJZCwgcHJvcCwgYWZ0ZXJbcHJvcF0sIGtsYXNzXX0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwbHVja0lkKGxheWVyKSB7XG4gICAgcmV0dXJuIGxheWVyLmlkO1xufVxuZnVuY3Rpb24gaW5kZXhCeUlkKGdyb3VwLCBsYXllcikge1xuICAgIGdyb3VwW2xheWVyLmlkXSA9IGxheWVyO1xuICAgIHJldHVybiBncm91cDtcbn1cblxuZnVuY3Rpb24gZGlmZkxheWVycyhiZWZvcmUsIGFmdGVyLCBjb21tYW5kcykge1xuICAgIGJlZm9yZSA9IGJlZm9yZSB8fCBbXTtcbiAgICBhZnRlciA9IGFmdGVyIHx8IFtdO1xuXG4gICAgLy8gb3JkZXIgb2YgbGF5ZXJzIGJ5IGlkXG4gICAgY29uc3QgYmVmb3JlT3JkZXIgPSBiZWZvcmUubWFwKHBsdWNrSWQpO1xuICAgIGNvbnN0IGFmdGVyT3JkZXIgPSBhZnRlci5tYXAocGx1Y2tJZCk7XG5cbiAgICAvLyBpbmRleCBvZiBsYXllciBieSBpZFxuICAgIGNvbnN0IGJlZm9yZUluZGV4ID0gYmVmb3JlLnJlZHVjZShpbmRleEJ5SWQsIHt9KTtcbiAgICBjb25zdCBhZnRlckluZGV4ID0gYWZ0ZXIucmVkdWNlKGluZGV4QnlJZCwge30pO1xuXG4gICAgLy8gdHJhY2sgb3JkZXIgb2YgbGF5ZXJzIGFzIGlmIHRoZXkgaGF2ZSBiZWVuIG11dGF0ZWRcbiAgICBjb25zdCB0cmFja2VyID0gYmVmb3JlT3JkZXIuc2xpY2UoKTtcblxuICAgIC8vIGxheWVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBkbyBub3QgbmVlZCB0byBiZSBkaWZmZWRcbiAgICBjb25zdCBjbGVhbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBsZXQgaSwgZCwgbGF5ZXJJZCwgYmVmb3JlTGF5ZXIsIGFmdGVyTGF5ZXIsIGluc2VydEJlZm9yZUxheWVySWQsIHByb3A7XG5cbiAgICAvLyByZW1vdmUgbGF5ZXJzXG4gICAgZm9yIChpID0gMCwgZCA9IDA7IGkgPCBiZWZvcmVPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBsYXllcklkID0gYmVmb3JlT3JkZXJbaV07XG4gICAgICAgIGlmICghYWZ0ZXJJbmRleC5oYXNPd25Qcm9wZXJ0eShsYXllcklkKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmluZGV4T2YobGF5ZXJJZCwgZCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbGltaXQgd2hlcmUgaW4gdHJhY2tlciB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbWF0Y2hcbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZC9yZW9yZGVyIGxheWVyc1xuICAgIGZvciAoaSA9IDAsIGQgPSAwOyBpIDwgYWZ0ZXJPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyB3b3JrIGJhY2t3YXJkcyBhcyBpbnNlcnQgaXMgYmVmb3JlIGFuIGV4aXN0aW5nIGxheWVyXG4gICAgICAgIGxheWVySWQgPSBhZnRlck9yZGVyW2FmdGVyT3JkZXIubGVuZ3RoIC0gMSAtIGldO1xuXG4gICAgICAgIGlmICh0cmFja2VyW3RyYWNrZXIubGVuZ3RoIC0gMSAtIGldID09PSBsYXllcklkKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoYmVmb3JlSW5kZXguaGFzT3duUHJvcGVydHkobGF5ZXJJZCkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgbGF5ZXIgYmVmb3JlIHdlIGluc2VydCBhdCB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmxhc3RJbmRleE9mKGxheWVySWQsIHRyYWNrZXIubGVuZ3RoIC0gZCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbGltaXQgd2hlcmUgaW4gdHJhY2tlciB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbWF0Y2hcbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBsYXllciBhdCBjb3JyZWN0IHBvc2l0aW9uXG4gICAgICAgIGluc2VydEJlZm9yZUxheWVySWQgPSB0cmFja2VyW3RyYWNrZXIubGVuZ3RoIC0gaV07XG4gICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkTGF5ZXIsIGFyZ3M6IFthZnRlckluZGV4W2xheWVySWRdLCBpbnNlcnRCZWZvcmVMYXllcklkXX0pO1xuICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmxlbmd0aCAtIGksIDAsIGxheWVySWQpO1xuICAgICAgICBjbGVhbltsYXllcklkXSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGxheWVyc1xuICAgIGZvciAoaSA9IDA7IGkgPCBhZnRlck9yZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxheWVySWQgPSBhZnRlck9yZGVyW2ldO1xuICAgICAgICBiZWZvcmVMYXllciA9IGJlZm9yZUluZGV4W2xheWVySWRdO1xuICAgICAgICBhZnRlckxheWVyID0gYWZ0ZXJJbmRleFtsYXllcklkXTtcblxuICAgICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBpZiBwcmV2aW91c2x5IGFkZGVkIChuZXcgb3IgbW92ZWQpXG4gICAgICAgIGlmIChjbGVhbltsYXllcklkXSB8fCBpc0VxdWFsKGJlZm9yZUxheWVyLCBhZnRlckxheWVyKSkgY29udGludWU7XG5cbiAgICAgICAgLy8gSWYgc291cmNlLCBzb3VyY2UtbGF5ZXIsIG9yIHR5cGUgaGF2ZSBjaGFuZ2VzLCB0aGVuIHJlbW92ZSB0aGUgbGF5ZXJcbiAgICAgICAgLy8gYW5kIGFkZCBpdCBiYWNrICdmcm9tIHNjcmF0Y2gnLlxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlTGF5ZXIuc291cmNlLCBhZnRlckxheWVyLnNvdXJjZSkgfHwgIWlzRXF1YWwoYmVmb3JlTGF5ZXJbJ3NvdXJjZS1sYXllciddLCBhZnRlckxheWVyWydzb3VyY2UtbGF5ZXInXSkgfHwgIWlzRXF1YWwoYmVmb3JlTGF5ZXIudHlwZSwgYWZ0ZXJMYXllci50eXBlKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICAvLyB3ZSBhZGQgdGhlIGxheWVyIGJhY2sgYXQgdGhlIHNhbWUgcG9zaXRpb24gaXQgd2FzIGFscmVhZHkgaW4sIHNvXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBgdHJhY2tlcmBcbiAgICAgICAgICAgIGluc2VydEJlZm9yZUxheWVySWQgPSB0cmFja2VyW3RyYWNrZXIubGFzdEluZGV4T2YobGF5ZXJJZCkgKyAxXTtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkTGF5ZXIsIGFyZ3M6IFthZnRlckxheWVyLCBpbnNlcnRCZWZvcmVMYXllcklkXX0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsYXlvdXQsIHBhaW50LCBmaWx0ZXIsIG1pbnpvb20sIG1heHpvb21cbiAgICAgICAgZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZUxheWVyLmxheW91dCwgYWZ0ZXJMYXllci5sYXlvdXQsIGNvbW1hbmRzLCBsYXllcklkLCBudWxsLCBvcGVyYXRpb25zLnNldExheW91dFByb3BlcnR5KTtcbiAgICAgICAgZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZUxheWVyLnBhaW50LCBhZnRlckxheWVyLnBhaW50LCBjb21tYW5kcywgbGF5ZXJJZCwgbnVsbCwgb3BlcmF0aW9ucy5zZXRQYWludFByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyLmZpbHRlciwgYWZ0ZXJMYXllci5maWx0ZXIpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEZpbHRlciwgYXJnczogW2xheWVySWQsIGFmdGVyTGF5ZXIuZmlsdGVyXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmVMYXllci5taW56b29tLCBhZnRlckxheWVyLm1pbnpvb20pIHx8ICFpc0VxdWFsKGJlZm9yZUxheWVyLm1heHpvb20sIGFmdGVyTGF5ZXIubWF4em9vbSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJab29tUmFuZ2UsIGFyZ3M6IFtsYXllcklkLCBhZnRlckxheWVyLm1pbnpvb20sIGFmdGVyTGF5ZXIubWF4em9vbV19KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBhbGwgb3RoZXIgbGF5ZXIgcHJvcHMsIGluY2x1ZGluZyBwYWludC4qXG4gICAgICAgIGZvciAocHJvcCBpbiBiZWZvcmVMYXllcikge1xuICAgICAgICAgICAgaWYgKCFiZWZvcmVMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2xheW91dCcgfHwgcHJvcCA9PT0gJ3BhaW50JyB8fCBwcm9wID09PSAnZmlsdGVyJyB8fFxuICAgICAgICAgICAgICAgIHByb3AgPT09ICdtZXRhZGF0YScgfHwgcHJvcCA9PT0gJ21pbnpvb20nIHx8IHByb3AgPT09ICdtYXh6b29tJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKCdwYWludC4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSwgY29tbWFuZHMsIGxheWVySWQsIHByb3Auc2xpY2UoNiksIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyW3Byb3BdLCBhZnRlckxheWVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJQcm9wZXJ0eSwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyTGF5ZXJbcHJvcF1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChwcm9wIGluIGFmdGVyTGF5ZXIpIHtcbiAgICAgICAgICAgIGlmICghYWZ0ZXJMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSB8fCBiZWZvcmVMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2xheW91dCcgfHwgcHJvcCA9PT0gJ3BhaW50JyB8fCBwcm9wID09PSAnZmlsdGVyJyB8fFxuICAgICAgICAgICAgICAgIHByb3AgPT09ICdtZXRhZGF0YScgfHwgcHJvcCA9PT0gJ21pbnpvb20nIHx8IHByb3AgPT09ICdtYXh6b29tJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKCdwYWludC4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSwgY29tbWFuZHMsIGxheWVySWQsIHByb3Auc2xpY2UoNiksIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyW3Byb3BdLCBhZnRlckxheWVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJQcm9wZXJ0eSwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyTGF5ZXJbcHJvcF1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogRGlmZiB0d28gc3R5bGVzaGVldFxuICpcbiAqIENyZWF0ZXMgc2VtYW50aWNseSBhd2FyZSBkaWZmcyB0aGF0IGNhbiBlYXNpbHkgYmUgYXBwbGllZCBhdCBydW50aW1lLlxuICogT3BlcmF0aW9ucyBwcm9kdWNlZCBieSB0aGUgZGlmZiBjbG9zZWx5IHJlc2VtYmxlIHRoZSBtYXBib3gtZ2wtanMgQVBJLiBBbnlcbiAqIGVycm9yIGNyZWF0aW5nIHRoZSBkaWZmIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSAnc2V0U3R5bGUnIG9wZXJhdGlvbi5cbiAqXG4gKiBFeGFtcGxlIGRpZmY6XG4gKiBbXG4gKiAgICAgeyBjb21tYW5kOiAnc2V0Q29uc3RhbnQnLCBhcmdzOiBbJ0B3YXRlcicsICcjMDAwMEZGJ10gfSxcbiAqICAgICB7IGNvbW1hbmQ6ICdzZXRQYWludFByb3BlcnR5JywgYXJnczogWydiYWNrZ3JvdW5kJywgJ2JhY2tncm91bmQtY29sb3InLCAnYmxhY2snXSB9XG4gKiBdXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW2JlZm9yZV0gc3R5bGVzaGVldCB0byBjb21wYXJlIGZyb21cbiAqIEBwYXJhbSB7Kn0gYWZ0ZXIgc3R5bGVzaGVldCB0byBjb21wYXJlIHRvXG4gKiBAcmV0dXJucyBBcnJheSBsaXN0IG9mIGNoYW5nZXNcbiAqL1xuZnVuY3Rpb24gZGlmZlN0eWxlcyhiZWZvcmUsIGFmdGVyKSB7XG4gICAgaWYgKCFiZWZvcmUpIHJldHVybiBbe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3R5bGUsIGFyZ3M6IFthZnRlcl19XTtcblxuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gdG9wLWxldmVsIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS52ZXJzaW9uLCBhZnRlci52ZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIFt7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRTdHlsZSwgYXJnczogW2FmdGVyXX1dO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuY2VudGVyLCBhZnRlci5jZW50ZXIpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldENlbnRlciwgYXJnczogW2FmdGVyLmNlbnRlcl19KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLnpvb20sIGFmdGVyLnpvb20pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFpvb20sIGFyZ3M6IFthZnRlci56b29tXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuYmVhcmluZywgYWZ0ZXIuYmVhcmluZykpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0QmVhcmluZywgYXJnczogW2FmdGVyLmJlYXJpbmddfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS5waXRjaCwgYWZ0ZXIucGl0Y2gpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFBpdGNoLCBhcmdzOiBbYWZ0ZXIucGl0Y2hdfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS5zcHJpdGUsIGFmdGVyLnNwcml0ZSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3ByaXRlLCBhcmdzOiBbYWZ0ZXIuc3ByaXRlXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuZ2x5cGhzLCBhZnRlci5nbHlwaHMpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEdseXBocywgYXJnczogW2FmdGVyLmdseXBoc119KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLnRyYW5zaXRpb24sIGFmdGVyLnRyYW5zaXRpb24pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFRyYW5zaXRpb24sIGFyZ3M6IFthZnRlci50cmFuc2l0aW9uXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUubGlnaHQsIGFmdGVyLmxpZ2h0KSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRMaWdodCwgYXJnczogW2FmdGVyLmxpZ2h0XX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gYHNvdXJjZXNgXG4gICAgICAgIC8vIElmIGEgc291cmNlIGlzIHRvIGJlIHJlbW92ZWQsIHdlIGFsc28tLWJlZm9yZSB0aGUgcmVtb3ZlU291cmNlXG4gICAgICAgIC8vIGNvbW1hbmQtLW5lZWQgdG8gcmVtb3ZlIGFsbCB0aGUgc3R5bGUgbGF5ZXJzIHRoYXQgZGVwZW5kIG9uIGl0LlxuICAgICAgICBjb25zdCBzb3VyY2VzUmVtb3ZlZCA9IHt9O1xuXG4gICAgICAgIC8vIEZpcnN0IGNvbGxlY3QgdGhlIHthZGQscmVtb3ZlfVNvdXJjZSBjb21tYW5kc1xuICAgICAgICBjb25zdCByZW1vdmVPckFkZFNvdXJjZUNvbW1hbmRzID0gW107XG4gICAgICAgIGRpZmZTb3VyY2VzKGJlZm9yZS5zb3VyY2VzLCBhZnRlci5zb3VyY2VzLCByZW1vdmVPckFkZFNvdXJjZUNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCk7XG5cbiAgICAgICAgLy8gUHVzaCBhIHJlbW92ZUxheWVyIGNvbW1hbmQgZm9yIGVhY2ggc3R5bGUgbGF5ZXIgdGhhdCBkZXBlbmRzIG9uIGFcbiAgICAgICAgLy8gc291cmNlIHRoYXQncyBiZWluZyByZW1vdmVkLlxuICAgICAgICAvLyBBbHNvLCBleGNsdWRlIGFueSBzdWNoIGxheWVycyB0aGVtIGZyb20gdGhlIGlucHV0IHRvIGBkaWZmTGF5ZXJzYFxuICAgICAgICAvLyBiZWxvdywgc28gdGhhdCBkaWZmTGF5ZXJzIHByb2R1Y2VzIHRoZSBhcHByb3ByaWF0ZSBgYWRkTGF5ZXJzYFxuICAgICAgICAvLyBjb21tYW5kXG4gICAgICAgIGNvbnN0IGJlZm9yZUxheWVycyA9IFtdO1xuICAgICAgICBpZiAoYmVmb3JlLmxheWVycykge1xuICAgICAgICAgICAgYmVmb3JlLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VzUmVtb3ZlZFtsYXllci5zb3VyY2VdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlTGF5ZXIsIGFyZ3M6IFtsYXllci5pZF19KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmVMYXllcnMucHVzaChsYXllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5jb25jYXQocmVtb3ZlT3JBZGRTb3VyY2VDb21tYW5kcyk7XG5cbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gYGxheWVyc2BcbiAgICAgICAgZGlmZkxheWVycyhiZWZvcmVMYXllcnMsIGFmdGVyLmxheWVycywgY29tbWFuZHMpO1xuXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gc2V0U3R5bGVcbiAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOicsIGUpO1xuICAgICAgICBjb21tYW5kcyA9IFt7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRTdHlsZSwgYXJnczogW2FmdGVyXX1dO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlmZlN0eWxlcztcbmV4cG9ydCB7b3BlcmF0aW9uc307XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEdyaWRJbmRleCBpcyBhIGRhdGEgc3RydWN0dXJlIGZvciB0ZXN0aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2ZcbiAqIGNpcmNsZXMgYW5kIHJlY3RhbmdsZXMgaW4gYSAyZCBwbGFuZS5cbiAqIEl0IGlzIG9wdGltaXplZCBmb3IgcmFwaWQgaW5zZXJ0aW9uIGFuZCBxdWVyeWluZy5cbiAqIEdyaWRJbmRleCBzcGxpdHMgdGhlIHBsYW5lIGludG8gYSBzZXQgb2YgXCJjZWxsc1wiIGFuZCBrZWVwcyB0cmFja1xuICogb2Ygd2hpY2ggZ2VvbWV0cmllcyBpbnRlcnNlY3Qgd2l0aCBlYWNoIGNlbGwuIEF0IHF1ZXJ5IHRpbWUsXG4gKiBmdWxsIGdlb21ldHJ5IGNvbXBhcmlzb25zIGFyZSBvbmx5IGRvbmUgZm9yIGl0ZW1zIHRoYXQgc2hhcmVcbiAqIGF0IGxlYXN0IG9uZSBjZWxsLiBBcyBsb25nIGFzIHRoZSBnZW9tZXRyaWVzIGFyZSByZWxhdGl2ZWx5XG4gKiB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBwbGFuZSwgdGhpcyBncmVhdGx5IHJlZHVjZXNcbiAqIHRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgbmVjZXNzYXJ5LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEdyaWRJbmRleCB7XG4gICAgY2lyY2xlS2V5czogQXJyYXk8YW55PjtcbiAgICBib3hLZXlzOiBBcnJheTxhbnk+O1xuICAgIGJveENlbGxzOiBBcnJheTxBcnJheTxudW1iZXI+PjtcbiAgICBjaXJjbGVDZWxsczogQXJyYXk8QXJyYXk8bnVtYmVyPj47XG4gICAgYmJveGVzOiBBcnJheTxudW1iZXI+O1xuICAgIGNpcmNsZXM6IEFycmF5PG51bWJlcj47XG4gICAgeENlbGxDb3VudDogbnVtYmVyO1xuICAgIHlDZWxsQ291bnQ6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHhTY2FsZTogbnVtYmVyO1xuICAgIHlTY2FsZTogbnVtYmVyO1xuICAgIGJveFVpZDogbnVtYmVyO1xuICAgIGNpcmNsZVVpZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IgKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBjZWxsU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGJveENlbGxzID0gdGhpcy5ib3hDZWxscyA9IFtdO1xuICAgICAgICBjb25zdCBjaXJjbGVDZWxscyA9IHRoaXMuY2lyY2xlQ2VsbHMgPSBbXTtcblxuICAgICAgICAvLyBNb3JlIGNlbGxzIC0+IGZld2VyIGdlb21ldHJpZXMgdG8gY2hlY2sgcGVyIGNlbGwsIGJ1dCBpdGVtcyB0ZW5kXG4gICAgICAgIC8vIHRvIGJlIHNwbGl0IGFjcm9zcyBtb3JlIGNlbGxzLlxuICAgICAgICAvLyBTd2VldCBzcG90IGFsbG93cyBtb3N0IHNtYWxsIGl0ZW1zIHRvIGZpdCBpbiBvbmUgY2VsbFxuICAgICAgICB0aGlzLnhDZWxsQ291bnQgPSBNYXRoLmNlaWwod2lkdGggLyBjZWxsU2l6ZSk7XG4gICAgICAgIHRoaXMueUNlbGxDb3VudCA9IE1hdGguY2VpbChoZWlnaHQgLyBjZWxsU2l6ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnhDZWxsQ291bnQgKiB0aGlzLnlDZWxsQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgYm94Q2VsbHMucHVzaChbXSk7XG4gICAgICAgICAgICBjaXJjbGVDZWxscy5wdXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNpcmNsZUtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5ib3hLZXlzID0gW107XG4gICAgICAgIHRoaXMuYmJveGVzID0gW107XG4gICAgICAgIHRoaXMuY2lyY2xlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMueFNjYWxlID0gdGhpcy54Q2VsbENvdW50IC8gd2lkdGg7XG4gICAgICAgIHRoaXMueVNjYWxlID0gdGhpcy55Q2VsbENvdW50IC8gaGVpZ2h0O1xuICAgICAgICB0aGlzLmJveFVpZCA9IDA7XG4gICAgICAgIHRoaXMuY2lyY2xlVWlkID0gMDtcbiAgICB9XG5cbiAgICBrZXlzTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCArIHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7XG4gICAgfVxuXG4gICAgaW5zZXJ0KGtleTogYW55LCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2ZvckVhY2hDZWxsKHgxLCB5MSwgeDIsIHkyLCB0aGlzLl9pbnNlcnRCb3hDZWxsLCB0aGlzLmJveFVpZCsrKTtcbiAgICAgICAgdGhpcy5ib3hLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh4MSk7XG4gICAgICAgIHRoaXMuYmJveGVzLnB1c2goeTEpO1xuICAgICAgICB0aGlzLmJib3hlcy5wdXNoKHgyKTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh5Mik7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2lyY2xlKGtleTogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICAgICAgLy8gSW5zZXJ0IGNpcmNsZSBpbnRvIGdyaWQgZm9yIGFsbCBjZWxscyBpbiB0aGUgY2lyY3Vtc2NyaWJpbmcgc3F1YXJlXG4gICAgICAgIC8vIEl0J3MgbW9yZSB0aGFuIG5lY2Vzc2FyeSAoYnkgYSBmYWN0b3Igb2YgNC9QSSksIGJ1dCBmYXN0IHRvIGluc2VydFxuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4IC0gcmFkaXVzLCB5IC0gcmFkaXVzLCB4ICsgcmFkaXVzLCB5ICsgcmFkaXVzLCB0aGlzLl9pbnNlcnRDaXJjbGVDZWxsLCB0aGlzLmNpcmNsZVVpZCsrKTtcbiAgICAgICAgdGhpcy5jaXJjbGVLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgdGhpcy5jaXJjbGVzLnB1c2goeCk7XG4gICAgICAgIHRoaXMuY2lyY2xlcy5wdXNoKHkpO1xuICAgICAgICB0aGlzLmNpcmNsZXMucHVzaChyYWRpdXMpO1xuICAgIH1cblxuICAgIF9pbnNlcnRCb3hDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCB1aWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLmJveENlbGxzW2NlbGxJbmRleF0ucHVzaCh1aWQpO1xuICAgIH1cblxuICAgIF9pbnNlcnRDaXJjbGVDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCB1aWQ6IG51bWJlcikgIHtcbiAgICAgICAgdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdLnB1c2godWlkKTtcbiAgICB9XG5cbiAgICBfcXVlcnkoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgaGl0VGVzdDogYm9vbGVhbiwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGlmICh4MiA8IDAgfHwgeDEgPiB0aGlzLndpZHRoIHx8IHkyIDwgMCB8fCB5MSA+IHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGl0VGVzdCA/IGZhbHNlIDogW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGlmICh4MSA8PSAwICYmIHkxIDw9IDAgJiYgdGhpcy53aWR0aCA8PSB4MiAmJiB0aGlzLmhlaWdodCA8PSB5Mikge1xuICAgICAgICAgICAgaWYgKGhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGJveFVpZCA9IDA7IGJveFVpZCA8IHRoaXMuYm94S2V5cy5sZW5ndGg7IGJveFVpZCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuYm94S2V5c1tib3hVaWRdLFxuICAgICAgICAgICAgICAgICAgICB4MTogdGhpcy5iYm94ZXNbYm94VWlkICogNF0sXG4gICAgICAgICAgICAgICAgICAgIHkxOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgIHgyOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgIHkyOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgM11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGNpcmNsZVVpZCA9IDA7IGNpcmNsZVVpZCA8IHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7IGNpcmNsZVVpZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuY2lyY2xlc1tjaXJjbGVVaWQgKiAzXTtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gdGhpcy5jaXJjbGVzW2NpcmNsZVVpZCAqIDMgKyAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSB0aGlzLmNpcmNsZXNbY2lyY2xlVWlkICogMyArIDJdO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSxcbiAgICAgICAgICAgICAgICAgICAgeDE6IHggLSByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgIHkxOiB5IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICB4MjogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgeTI6IHkgKyByYWRpdXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUgPyByZXN1bHQuZmlsdGVyKHByZWRpY2F0ZSkgOiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgaGl0VGVzdCxcbiAgICAgICAgICAgICAgICBzZWVuVWlkczoge2JveDoge30sIGNpcmNsZToge319XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fZm9yRWFjaENlbGwoeDEsIHkxLCB4MiwgeTIsIHRoaXMuX3F1ZXJ5Q2VsbCwgcmVzdWx0LCBxdWVyeUFyZ3MsIHByZWRpY2F0ZSk7XG4gICAgICAgICAgICByZXR1cm4gaGl0VGVzdCA/IHJlc3VsdC5sZW5ndGggPiAwIDogcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3F1ZXJ5Q2lyY2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgaGl0VGVzdDogYm9vbGVhbiwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIC8vIEluc2VydCBjaXJjbGUgaW50byBncmlkIGZvciBhbGwgY2VsbHMgaW4gdGhlIGNpcmN1bXNjcmliaW5nIHNxdWFyZVxuICAgICAgICAvLyBJdCdzIG1vcmUgdGhhbiBuZWNlc3NhcnkgKGJ5IGEgZmFjdG9yIG9mIDQvUEkpLCBidXQgZmFzdCB0byBpbnNlcnRcbiAgICAgICAgY29uc3QgeDEgPSB4IC0gcmFkaXVzO1xuICAgICAgICBjb25zdCB4MiA9IHggKyByYWRpdXM7XG4gICAgICAgIGNvbnN0IHkxID0geSAtIHJhZGl1cztcbiAgICAgICAgY29uc3QgeTIgPSB5ICsgcmFkaXVzO1xuICAgICAgICBpZiAoeDIgPCAwIHx8IHgxID4gdGhpcy53aWR0aCB8fCB5MiA8IDAgfHwgeTEgPiB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyBmYWxzZSA6IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm94IHF1ZXJ5IGVhcmx5IGV4aXRzIGlmIHRoZSBib3VuZGluZyBib3ggaXMgbGFyZ2VyIHRoYW4gdGhlIGdyaWQsIGJ1dCB3ZSBkb24ndCBkb1xuICAgICAgICAvLyB0aGUgZXF1aXZhbGVudCBjYWxjdWxhdGlvbiBmb3IgY2lyY2xlIHF1ZXJpZXMgYmVjYXVzZSBlYXJseSBleGl0IGlzIGxlc3MgbGlrZWx5XG4gICAgICAgIC8vIGFuZCB0aGUgY2FsY3VsYXRpb24gaXMgbW9yZSBleHBlbnNpdmVcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHF1ZXJ5QXJncyA9IHtcbiAgICAgICAgICAgIGhpdFRlc3QsXG4gICAgICAgICAgICBjaXJjbGU6IHt4LCB5LCByYWRpdXN9LFxuICAgICAgICAgICAgc2VlblVpZHM6IHtib3g6IHt9LCBjaXJjbGU6IHt9fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4MSwgeTEsIHgyLCB5MiwgdGhpcy5fcXVlcnlDZWxsQ2lyY2xlLCByZXN1bHQsIHF1ZXJ5QXJncywgcHJlZGljYXRlKTtcbiAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyByZXN1bHQubGVuZ3RoID4gMCA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICBxdWVyeSh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9xdWVyeSh4MSwgeTEsIHgyLCB5MiwgZmFsc2UsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgaGl0VGVzdCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBib29sZWFuICB7XG4gICAgICAgIHJldHVybiAodGhpcy5fcXVlcnkoeDEsIHkxLCB4MiwgeTIsIHRydWUsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgaGl0VGVzdENpcmNsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIHByZWRpY2F0ZT86IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX3F1ZXJ5Q2lyY2xlKHgsIHksIHJhZGl1cywgdHJ1ZSwgcHJlZGljYXRlKTogYW55KTtcbiAgICB9XG5cbiAgICBfcXVlcnlDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCByZXN1bHQ6IGFueSwgcXVlcnlBcmdzOiBhbnksIHByZWRpY2F0ZT86IGFueSkge1xuICAgICAgICBjb25zdCBzZWVuVWlkcyA9IHF1ZXJ5QXJncy5zZWVuVWlkcztcbiAgICAgICAgY29uc3QgYm94Q2VsbCA9IHRoaXMuYm94Q2VsbHNbY2VsbEluZGV4XTtcbiAgICAgICAgaWYgKGJveENlbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGJib3hlcyA9IHRoaXMuYmJveGVzO1xuICAgICAgICAgICAgZm9yIChjb25zdCBib3hVaWQgb2YgYm94Q2VsbCkge1xuICAgICAgICAgICAgICAgIGlmICghc2VlblVpZHMuYm94W2JveFVpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblVpZHMuYm94W2JveFVpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBib3hVaWQgKiA0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHgxIDw9IGJib3hlc1tvZmZzZXQgKyAyXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh5MSA8PSBiYm94ZXNbb2Zmc2V0ICsgM10pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoeDIgPj0gYmJveGVzW29mZnNldCArIDBdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHkyID49IGJib3hlc1tvZmZzZXQgKyAxXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmJveEtleXNbYm94VWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlBcmdzLmhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuYm94S2V5c1tib3hVaWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogYmJveGVzW29mZnNldF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBiYm94ZXNbb2Zmc2V0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBiYm94ZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBiYm94ZXNbb2Zmc2V0ICsgM11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaXJjbGVDZWxsID0gdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoY2lyY2xlQ2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuY2lyY2xlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2lyY2xlVWlkIG9mIGNpcmNsZUNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2lyY2xlVWlkICogMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICB4MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlBcmdzLmhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IGNpcmNsZXNbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gY2lyY2xlc1tvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSBjaXJjbGVzW29mZnNldCArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IHggLSByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiB5IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTI6IHkgKyByYWRpdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9xdWVyeUNlbGxDaXJjbGUoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIHJlc3VsdDogYW55LCBxdWVyeUFyZ3M6IGFueSwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGNpcmNsZSA9IHF1ZXJ5QXJncy5jaXJjbGU7XG4gICAgICAgIGNvbnN0IHNlZW5VaWRzID0gcXVlcnlBcmdzLnNlZW5VaWRzO1xuICAgICAgICBjb25zdCBib3hDZWxsID0gdGhpcy5ib3hDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoYm94Q2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYmJveGVzID0gdGhpcy5iYm94ZXM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJveFVpZCBvZiBib3hDZWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWVuVWlkcy5ib3hbYm94VWlkXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkcy5ib3hbYm94VWlkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGJveFVpZCAqIDQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS54LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUucmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDNdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKHRoaXMuYm94S2V5c1tib3hVaWRdKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaXJjbGVDZWxsID0gdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoY2lyY2xlQ2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuY2lyY2xlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2lyY2xlVWlkIG9mIGNpcmNsZUNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2lyY2xlVWlkICogMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NpcmNsZXNDb2xsaWRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS55LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnJhZGl1cykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2ZvckVhY2hDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGZuOiBhbnksIGFyZzE6IGFueSwgYXJnMj86IGFueSwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGN4MSA9IHRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQoeDEpO1xuICAgICAgICBjb25zdCBjeTEgPSB0aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKHkxKTtcbiAgICAgICAgY29uc3QgY3gyID0gdGhpcy5fY29udmVydFRvWENlbGxDb29yZCh4Mik7XG4gICAgICAgIGNvbnN0IGN5MiA9IHRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoeTIpO1xuXG4gICAgICAgIGZvciAobGV0IHggPSBjeDE7IHggPD0gY3gyOyB4KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSBjeTE7IHkgPD0gY3kyOyB5KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSB0aGlzLnhDZWxsQ291bnQgKiB5ICsgeDtcbiAgICAgICAgICAgICAgICBpZiAoZm4uY2FsbCh0aGlzLCB4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCBhcmcxLCBhcmcyLCBwcmVkaWNhdGUpKSByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29udmVydFRvWENlbGxDb29yZCh4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMueENlbGxDb3VudCAtIDEsIE1hdGguZmxvb3IoeCAqIHRoaXMueFNjYWxlKSkpO1xuICAgIH1cblxuICAgIF9jb252ZXJ0VG9ZQ2VsbENvb3JkKHk6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy55Q2VsbENvdW50IC0gMSwgTWF0aC5mbG9vcih5ICogdGhpcy55U2NhbGUpKSk7XG4gICAgfVxuXG4gICAgX2NpcmNsZXNDb2xsaWRlKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHIxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIHIyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZHggPSB4MiAtIHgxO1xuICAgICAgICBjb25zdCBkeSA9IHkyIC0geTE7XG4gICAgICAgIGNvbnN0IGJvdGhSYWRpaSA9IHIxICsgcjI7XG4gICAgICAgIHJldHVybiAoYm90aFJhZGlpICogYm90aFJhZGlpKSA+IChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgfVxuXG4gICAgX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGNpcmNsZVg6IG51bWJlciwgY2lyY2xlWTogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoYWxmUmVjdFdpZHRoID0gKHgyIC0geDEpIC8gMjtcbiAgICAgICAgY29uc3QgZGlzdFggPSBNYXRoLmFicyhjaXJjbGVYIC0gKHgxICsgaGFsZlJlY3RXaWR0aCkpO1xuICAgICAgICBpZiAoZGlzdFggPiAoaGFsZlJlY3RXaWR0aCArIHJhZGl1cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbGZSZWN0SGVpZ2h0ID0gKHkyIC0geTEpIC8gMjtcbiAgICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyhjaXJjbGVZIC0gKHkxICsgaGFsZlJlY3RIZWlnaHQpKTtcbiAgICAgICAgaWYgKGRpc3RZID4gKGhhbGZSZWN0SGVpZ2h0ICsgcmFkaXVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3RYIDw9IGhhbGZSZWN0V2lkdGggfHwgZGlzdFkgPD0gaGFsZlJlY3RIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHggPSBkaXN0WCAtIGhhbGZSZWN0V2lkdGg7XG4gICAgICAgIGNvbnN0IGR5ID0gZGlzdFkgLSBoYWxmUmVjdEhlaWdodDtcbiAgICAgICAgcmV0dXJuIChkeCAqIGR4ICsgZHkgKiBkeSA8PSAocmFkaXVzICogcmFkaXVzKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmlkSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB7bWF0NCwgdmVjNH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQge2FkZER5bmFtaWNBdHRyaWJ1dGVzfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9yZW5kZXIvcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgR2x5cGhPZmZzZXRBcnJheSxcbiAgICBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgU3ltYm9sRHluYW1pY0xheW91dEFycmF5XG59IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHtXcml0aW5nTW9kZX0gZnJvbSAnLi4vc3ltYm9sL3NoYXBpbmcnO1xuXG5leHBvcnQge3VwZGF0ZUxpbmVMYWJlbHMsIGhpZGVHbHlwaHMsIGdldExhYmVsUGxhbmVNYXRyaXgsIGdldEdsQ29vcmRNYXRyaXgsIHByb2plY3QsIHBsYWNlRmlyc3RBbmRMYXN0R2x5cGgsIHh5VHJhbnNmb3JtTWF0NH07XG5cbi8qXG4gKiAjIE92ZXJ2aWV3IG9mIGNvb3JkaW5hdGUgc3BhY2VzXG4gKlxuICogIyMgVGlsZSBjb29yZGluYXRlIHNwYWNlc1xuICogRWFjaCBsYWJlbCBoYXMgYW4gYW5jaG9yLiBTb21lIGxhYmVscyBoYXZlIGNvcnJlc3BvbmRpbmcgbGluZSBnZW9tZXRyaWVzLlxuICogVGhlIHBvaW50cyBmb3IgYm90aCBhbmNob3JzIGFuZCBsaW5lcyBhcmUgc3RvcmVkIGluIHRpbGUgdW5pdHMuIEVhY2ggdGlsZSBoYXMgaXQncyBvd25cbiAqIGNvb3JkaW5hdGUgc3BhY2UgZ29pbmcgZnJvbSAoMCwgMCkgYXQgdGhlIHRvcCBsZWZ0IHRvIChFWFRFTlQsIEVYVEVOVCkgYXQgdGhlIGJvdHRvbSByaWdodC5cbiAqXG4gKiAjIyBHTCBjb29yZGluYXRlIHNwYWNlXG4gKiBBdCB0aGUgZW5kIG9mIGV2ZXJ5dGhpbmcsIHRoZSB2ZXJ0ZXggc2hhZGVyIG5lZWRzIHRvIHByb2R1Y2UgYSBwb3NpdGlvbiBpbiBHTCBjb29yZGluYXRlIHNwYWNlLFxuICogd2hpY2ggaXMgKC0xLCAxKSBhdCB0aGUgdG9wIGxlZnQgYW5kICgxLCAtMSkgaW4gdGhlIGJvdHRvbSByaWdodC5cbiAqXG4gKiAjIyBNYXAgcGl4ZWwgY29vcmRpbmF0ZSBzcGFjZXNcbiAqIEVhY2ggdGlsZSBoYXMgYSBwaXhlbCBjb29yZGluYXRlIHNwYWNlLiBJdCdzIGp1c3QgdGhlIHRpbGUgdW5pdHMgc2NhbGVkIHNvIHRoYXQgb25lIHVuaXQgaXNcbiAqIHdoYXRldmVyIGNvdW50cyBhcyAxIHBpeGVsIGF0IHRoZSBjdXJyZW50IHpvb20uXG4gKiBUaGlzIHNwYWNlIGlzIHVzZWQgZm9yIHBpdGNoLWFsaWdubWVudD1tYXAsIHJvdGF0aW9uLWFsaWdubWVudD1tYXBcbiAqXG4gKiAjIyBSb3RhdGVkIG1hcCBwaXhlbCBjb29yZGluYXRlIHNwYWNlc1xuICogTGlrZSB0aGUgYWJvdmUsIGJ1dCByb3RhdGVkIHNvIGF4aXMgb2YgdGhlIHNwYWNlIGFyZSBhbGlnbmVkIHdpdGggdGhlIHZpZXdwb3J0IGluc3RlYWQgb2YgdGhlIHRpbGUuXG4gKiBUaGlzIHNwYWNlIGlzIHVzZWQgZm9yIHBpdGNoLWFsaWdubWVudD1tYXAsIHJvdGF0aW9uLWFsaWdubWVudD12aWV3cG9ydFxuICpcbiAqICMjIFZpZXdwb3J0IHBpeGVsIGNvb3JkaW5hdGUgc3BhY2VcbiAqICgwLCAwKSBpcyBhdCB0aGUgdG9wIGxlZnQgb2YgdGhlIGNhbnZhcyBhbmQgKHBpeGVsV2lkdGgsIHBpeGVsSGVpZ2h0KSBpcyBhdCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICogb2YgdGhlIGNhbnZhcy4gVGhpcyBzcGFjZSBpcyB1c2VkIGZvciBwaXRjaC1hbGlnbm1lbnQ9dmlld3BvcnRcbiAqXG4gKlxuICogIyBWZXJ0ZXggcHJvamVjdGlvblxuICogSXQgZ29lcyByb3VnaGx5IGxpa2UgdGhpczpcbiAqIDEuIHByb2plY3QgdGhlIGFuY2hvciBhbmQgbGluZSBmcm9tIHRpbGUgdW5pdHMgaW50byB0aGUgY29ycmVjdCBsYWJlbCBjb29yZGluYXRlIHNwYWNlXG4gKiAgICAgIC0gbWFwIHBpeGVsIHNwYWNlICAgICAgICAgICBwaXRjaC1hbGlnbm1lbnQ9bWFwICAgICAgICAgcm90YXRpb24tYWxpZ25tZW50PW1hcFxuICogICAgICAtIHJvdGF0ZWQgbWFwIHBpeGVsIHNwYWNlICAgcGl0Y2gtYWxpZ25tZW50PW1hcCAgICAgICAgIHJvdGF0aW9uLWFsaWdubWVudD12aWV3cG9ydFxuICogICAgICAtIHZpZXdwb3J0IHBpeGVsIHNwYWNlICAgICAgcGl0Y2gtYWxpZ25tZW50PXZpZXdwb3J0ICAgIHJvdGF0aW9uLWFsaWdubWVudD0qXG4gKiAyLiBpZiB0aGUgbGFiZWwgZm9sbG93cyBhIGxpbmUsIGZpbmQgdGhlIHBvaW50IGFsb25nIHRoZSBsaW5lIHRoYXQgaXMgdGhlIGNvcnJlY3QgZGlzdGFuY2UgZnJvbSB0aGUgYW5jaG9yLlxuICogMy4gYWRkIHRoZSBnbHlwaCdzIGNvcm5lciBvZmZzZXQgdG8gdGhlIHBvaW50IGZyb20gc3RlcCAzXG4gKiA0LiBjb252ZXJ0IGZyb20gdGhlIGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UgdG8gZ2wgY29vcmRpbmF0ZXNcbiAqXG4gKiBGb3IgaG9yaXpvbnRhbCBsYWJlbHMgd2Ugd2FudCB0byBkbyBzdGVwIDEgaW4gdGhlIHNoYWRlciBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAobm8gY3B1IHdvcmspLlxuICogICAgICBUaGlzIGlzIHdoYXQgYHVfbGFiZWxfcGxhbmVfbWF0cml4YCBpcyB1c2VkIGZvci5cbiAqIEZvciBsYWJlbHMgYWxpZ25lZCB3aXRoIGxpbmVzIHdlIGhhdmUgdG8gc3RlcHMgMSBhbmQgMiBvbiB0aGUgY3B1IHNpbmNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBsaW5lIGdlb21ldHJ5LlxuICogICAgICBUaGlzIGlzIHdoYXQgYHVwZGF0ZUxpbmVMYWJlbHMoLi4uKWAgZG9lcy5cbiAqICAgICAgU2luY2UgdGhlIGNvbnZlcnNpb24gaXMgaGFuZGxlZCBvbiB0aGUgY3B1IHdlIGp1c3Qgc2V0IGB1X2xhYmVsX3BsYW5lX21hdHJpeGAgdG8gYW4gaWRlbnRpdHkgbWF0cml4LlxuICpcbiAqIFN0ZXBzIDMgYW5kIDQgYXJlIGRvbmUgaW4gdGhlIHNoYWRlcnMgZm9yIGFsbCBsYWJlbHMuXG4gKi9cblxuLypcbiAqIFJldHVybnMgYSBtYXRyaXggZm9yIGNvbnZlcnRpbmcgZnJvbSB0aWxlIHVuaXRzIHRvIHRoZSBjb3JyZWN0IGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIGdldExhYmVsUGxhbmVNYXRyaXgocG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgY29uc3QgbSA9IG1hdDQuY3JlYXRlKCk7XG4gICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxIC8gcGl4ZWxzVG9UaWxlVW5pdHMsIDEgLyBwaXhlbHNUb1RpbGVVbml0cywgMV0pO1xuICAgICAgICBpZiAoIXJvdGF0ZVdpdGhNYXApIHtcbiAgICAgICAgICAgIG1hdDQucm90YXRlWihtLCBtLCB0cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbWF0NC5tdWx0aXBseShtLCB0cmFuc2Zvcm0ubGFiZWxQbGFuZU1hdHJpeCwgcG9zTWF0cml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG07XG59XG5cbi8qXG4gKiBSZXR1cm5zIGEgbWF0cml4IGZvciBjb252ZXJ0aW5nIGZyb20gdGhlIGNvcnJlY3QgbGFiZWwgY29vcmRpbmF0ZSBzcGFjZSB0byBnbCBjb29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldEdsQ29vcmRNYXRyaXgocG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICBjb25zdCBtID0gbWF0NC5jbG9uZShwb3NNYXRyaXgpO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFtwaXhlbHNUb1RpbGVVbml0cywgcGl4ZWxzVG9UaWxlVW5pdHMsIDFdKTtcbiAgICAgICAgaWYgKCFyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgICAgICBtYXQ0LnJvdGF0ZVoobSwgbSwgLXRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS5nbENvb3JkTWF0cml4O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcHJvamVjdChwb2ludDogUG9pbnQsIG1hdHJpeDogbWF0NCkge1xuICAgIGNvbnN0IHBvcyA9IFtwb2ludC54LCBwb2ludC55LCAwLCAxXTtcbiAgICB4eVRyYW5zZm9ybU1hdDQocG9zLCBwb3MsIG1hdHJpeCk7XG4gICAgY29uc3QgdyA9IHBvc1szXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogbmV3IFBvaW50KHBvc1swXSAvIHcsIHBvc1sxXSAvIHcpLFxuICAgICAgICBzaWduZWREaXN0YW5jZUZyb21DYW1lcmE6IHdcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpc1Zpc2libGUoYW5jaG9yUG9zOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICBjbGlwcGluZ0J1ZmZlcjogW251bWJlciwgbnVtYmVyXSkge1xuICAgIGNvbnN0IHggPSBhbmNob3JQb3NbMF0gLyBhbmNob3JQb3NbM107XG4gICAgY29uc3QgeSA9IGFuY2hvclBvc1sxXSAvIGFuY2hvclBvc1szXTtcbiAgICBjb25zdCBpblBhZGRlZFZpZXdwb3J0ID0gKFxuICAgICAgICB4ID49IC1jbGlwcGluZ0J1ZmZlclswXSAmJlxuICAgICAgICB4IDw9IGNsaXBwaW5nQnVmZmVyWzBdICYmXG4gICAgICAgIHkgPj0gLWNsaXBwaW5nQnVmZmVyWzFdICYmXG4gICAgICAgIHkgPD0gY2xpcHBpbmdCdWZmZXJbMV0pO1xuICAgIHJldHVybiBpblBhZGRlZFZpZXdwb3J0O1xufVxuXG4vKlxuICogIFVwZGF0ZSB0aGUgYGR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXJgIGZvciB0aGUgYnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgZ2x5cGggcG9zaXRpb25zIGZvciB0aGUgY3VycmVudCBtYXAgdmlldy5cbiAqICBUaGlzIGlzIG9ubHkgcnVuIG9uIGxhYmVscyB0aGF0IGFyZSBhbGlnbmVkIHdpdGggbGluZXMuIEhvcml6b250YWwgbGFiZWxzIGFyZSBoYW5kbGVkIGVudGlyZWx5IGluIHRoZSBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUxpbmVMYWJlbHMoYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvc01hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUZXh0OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFBsYW5lTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnbENvb3JkTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBVcHJpZ2h0OiBib29sZWFuKSB7XG5cbiAgICBjb25zdCBzaXplRGF0YSA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0U2l6ZURhdGEgOiBidWNrZXQuaWNvblNpemVEYXRhO1xuICAgIGNvbnN0IHBhcnRpYWxseUV2YWx1YXRlZFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20oc2l6ZURhdGEsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pO1xuXG4gICAgY29uc3QgY2xpcHBpbmdCdWZmZXIgPSBbMjU2IC8gcGFpbnRlci53aWR0aCAqIDIgKyAxLCAyNTYgLyBwYWludGVyLmhlaWdodCAqIDIgKyAxXTtcblxuICAgIGNvbnN0IGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSA9IGlzVGV4dCA/XG4gICAgICAgIGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSA6XG4gICAgICAgIGJ1Y2tldC5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuY2xlYXIoKTtcblxuICAgIGNvbnN0IGxpbmVWZXJ0ZXhBcnJheSA9IGJ1Y2tldC5saW5lVmVydGV4QXJyYXk7XG4gICAgY29uc3QgcGxhY2VkU3ltYm9scyA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5IDogYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXk7XG5cbiAgICBjb25zdCBhc3BlY3RSYXRpbyA9IHBhaW50ZXIudHJhbnNmb3JtLndpZHRoIC8gcGFpbnRlci50cmFuc2Zvcm0uaGVpZ2h0O1xuXG4gICAgbGV0IHVzZVZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IHBsYWNlZFN5bWJvbHMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgY29uc3Qgc3ltYm9sOiBhbnkgPSBwbGFjZWRTeW1ib2xzLmdldChzKTtcbiAgICAgICAgLy8gRG9uJ3QgZG8gY2FsY3VsYXRpb25zIGZvciB2ZXJ0aWNhbCBnbHlwaHMgdW5sZXNzIHRoZSBwcmV2aW91cyBzeW1ib2wgd2FzIGhvcml6b250YWxcbiAgICAgICAgLy8gYW5kIHdlIGRldGVybWluZWQgdGhhdCB2ZXJ0aWNhbCBnbHlwaHMgd2VyZSBuZWNlc3NhcnkuXG4gICAgICAgIC8vIEFsc28gZG9uJ3QgZG8gY2FsY3VsYXRpb25zIGZvciBzeW1ib2xzIHRoYXQgYXJlIGNvbGxpZGVkIGFuZCBmdWxseSBmYWRlZCBvdXRcbiAgICAgICAgaWYgKHN5bWJvbC5oaWRkZW4gfHwgc3ltYm9sLndyaXRpbmdNb2RlID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCAmJiAhdXNlVmVydGljYWwpIHtcbiAgICAgICAgICAgIGhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEF3a3dhcmQuLi4gYnV0IHdlJ3JlIGNvdW50aW5nIG9uIHRoZSBwYWlyZWQgXCJ2ZXJ0aWNhbFwiIHN5bWJvbCBjb21pbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgaXRzIGhvcml6b250YWwgY291bnRlcnBhcnRcbiAgICAgICAgdXNlVmVydGljYWwgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBhbmNob3JQb3MgPSBbc3ltYm9sLmFuY2hvclgsIHN5bWJvbC5hbmNob3JZLCAwLCAxXTtcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KGFuY2hvclBvcywgYW5jaG9yUG9zLCBwb3NNYXRyaXgpO1xuXG4gICAgICAgIC8vIERvbid0IGJvdGhlciBjYWxjdWxhdGluZyB0aGUgY29ycmVjdCBwb2ludCBmb3IgaW52aXNpYmxlIGxhYmVscy5cbiAgICAgICAgaWYgKCFpc1Zpc2libGUoYW5jaG9yUG9zLCBjbGlwcGluZ0J1ZmZlcikpIHtcbiAgICAgICAgICAgIGhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2FtZXJhVG9BbmNob3JEaXN0YW5jZSA9IGFuY2hvclBvc1szXTtcbiAgICAgICAgY29uc3QgcGVyc3BlY3RpdmVSYXRpbyA9IDAuNSArIDAuNSAqIChjYW1lcmFUb0FuY2hvckRpc3RhbmNlIC8gcGFpbnRlci50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSk7XG5cbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoc2l6ZURhdGEsIHBhcnRpYWxseUV2YWx1YXRlZFNpemUsIHN5bWJvbCk7XG4gICAgICAgIGNvbnN0IHBpdGNoU2NhbGVkRm9udFNpemUgPSBwaXRjaFdpdGhNYXAgP1xuICAgICAgICAgICAgZm9udFNpemUgKiBwZXJzcGVjdGl2ZVJhdGlvIDpcbiAgICAgICAgICAgIGZvbnRTaXplIC8gcGVyc3BlY3RpdmVSYXRpbztcblxuICAgICAgICBjb25zdCB0aWxlQW5jaG9yUG9pbnQgPSBuZXcgUG9pbnQoc3ltYm9sLmFuY2hvclgsIHN5bWJvbC5hbmNob3JZKTtcbiAgICAgICAgY29uc3QgYW5jaG9yUG9pbnQgPSBwcm9qZWN0KHRpbGVBbmNob3JQb2ludCwgbGFiZWxQbGFuZU1hdHJpeCkucG9pbnQ7XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb25DYWNoZSA9IHt9O1xuXG4gICAgICAgIGNvbnN0IHBsYWNlVW5mbGlwcGVkOiBhbnkgPSBwbGFjZUdseXBoc0Fsb25nTGluZShzeW1ib2wsIHBpdGNoU2NhbGVkRm9udFNpemUsIGZhbHNlIC8qdW5mbGlwcGVkKi8sIGtlZXBVcHJpZ2h0LCBwb3NNYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsIGdsQ29vcmRNYXRyaXgsXG4gICAgICAgICAgICBidWNrZXQuZ2x5cGhPZmZzZXRBcnJheSwgbGluZVZlcnRleEFycmF5LCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHByb2plY3Rpb25DYWNoZSwgYXNwZWN0UmF0aW8pO1xuXG4gICAgICAgIHVzZVZlcnRpY2FsID0gcGxhY2VVbmZsaXBwZWQudXNlVmVydGljYWw7XG5cbiAgICAgICAgaWYgKHBsYWNlVW5mbGlwcGVkLm5vdEVub3VnaFJvb20gfHwgdXNlVmVydGljYWwgfHxcbiAgICAgICAgICAgIChwbGFjZVVuZmxpcHBlZC5uZWVkc0ZsaXBwaW5nICYmXG4gICAgICAgICAgICAgcGxhY2VHbHlwaHNBbG9uZ0xpbmUoc3ltYm9sLCBwaXRjaFNjYWxlZEZvbnRTaXplLCB0cnVlIC8qZmxpcHBlZCovLCBrZWVwVXByaWdodCwgcG9zTWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LCBnbENvb3JkTWF0cml4LFxuICAgICAgICAgICAgICAgICBidWNrZXQuZ2x5cGhPZmZzZXRBcnJheSwgbGluZVZlcnRleEFycmF5LCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHByb2plY3Rpb25DYWNoZSwgYXNwZWN0UmF0aW8pLm5vdEVub3VnaFJvb20pKSB7XG4gICAgICAgICAgICBoaWRlR2x5cGhzKHN5bWJvbC5udW1HbHlwaHMsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICAgIGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1Y2tldC5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGxhY2VGaXJzdEFuZExhc3RHbHlwaChmb250U2NhbGU6IG51bWJlciwgZ2x5cGhPZmZzZXRBcnJheTogR2x5cGhPZmZzZXRBcnJheSwgbGluZU9mZnNldFg6IG51bWJlciwgbGluZU9mZnNldFk6IG51bWJlciwgZmxpcDogYm9vbGVhbiwgYW5jaG9yUG9pbnQ6IFBvaW50LCB0aWxlQW5jaG9yUG9pbnQ6IFBvaW50LCBzeW1ib2w6IGFueSwgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsIHByb2plY3Rpb25DYWNoZTogYW55LCByZXR1cm5UaWxlRGlzdGFuY2U6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBnbHlwaEVuZEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIHN5bWJvbC5udW1HbHlwaHM7XG4gICAgY29uc3QgbGluZVN0YXJ0SW5kZXggPSBzeW1ib2wubGluZVN0YXJ0SW5kZXg7XG4gICAgY29uc3QgbGluZUVuZEluZGV4ID0gc3ltYm9sLmxpbmVTdGFydEluZGV4ICsgc3ltYm9sLmxpbmVMZW5ndGg7XG5cbiAgICBjb25zdCBmaXJzdEdseXBoT2Zmc2V0ID0gZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXgpO1xuICAgIGNvbnN0IGxhc3RHbHlwaE9mZnNldCA9IGdseXBoT2Zmc2V0QXJyYXkuZ2V0b2Zmc2V0WChnbHlwaEVuZEluZGV4IC0gMSk7XG5cbiAgICBjb25zdCBmaXJzdFBsYWNlZEdseXBoID0gcGxhY2VHbHlwaEFsb25nTGluZShmb250U2NhbGUgKiBmaXJzdEdseXBoT2Zmc2V0LCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSwgcmV0dXJuVGlsZURpc3RhbmNlKTtcbiAgICBpZiAoIWZpcnN0UGxhY2VkR2x5cGgpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbGFzdFBsYWNlZEdseXBoID0gcGxhY2VHbHlwaEFsb25nTGluZShmb250U2NhbGUgKiBsYXN0R2x5cGhPZmZzZXQsIGxpbmVPZmZzZXRYLCBsaW5lT2Zmc2V0WSwgZmxpcCwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgc3ltYm9sLnNlZ21lbnQsXG4gICAgICAgIGxpbmVTdGFydEluZGV4LCBsaW5lRW5kSW5kZXgsIGxpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeCwgcHJvamVjdGlvbkNhY2hlLCByZXR1cm5UaWxlRGlzdGFuY2UpO1xuICAgIGlmICghbGFzdFBsYWNlZEdseXBoKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB7Zmlyc3Q6IGZpcnN0UGxhY2VkR2x5cGgsIGxhc3Q6IGxhc3RQbGFjZWRHbHlwaH07XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVzT3JpZW50YXRpb25DaGFuZ2Uod3JpdGluZ01vZGUsIGZpcnN0UG9pbnQsIGxhc3RQb2ludCwgYXNwZWN0UmF0aW8pIHtcbiAgICBpZiAod3JpdGluZ01vZGUgPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwpIHtcbiAgICAgICAgLy8gT24gdG9wIG9mIGNob29zaW5nIHdoZXRoZXIgdG8gZmxpcCwgY2hvb3NlIHdoZXRoZXIgdG8gcmVuZGVyIHRoaXMgdmVyc2lvbiBvZiB0aGUgZ2x5cGhzIG9yIHRoZSBhbHRlcm5hdGVcbiAgICAgICAgLy8gdmVydGljYWwgZ2x5cGhzLiBXZSBjYW4ndCBqdXN0IGZpbHRlciBvdXQgdmVydGljYWwgZ2x5cGhzIGluIHRoZSBob3Jpem9udGFsIHJhbmdlIGJlY2F1c2UgdGhlIGhvcml6b250YWxcbiAgICAgICAgLy8gYW5kIHZlcnRpY2FsIHZlcnNpb25zIGNhbiBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCBwcm9qZWN0aW9ucyB3aGljaCBjb3VsZCBsZWFkIHRvIGFuZ2xlcyB3aGVyZSBib3RoIG9yXG4gICAgICAgIC8vIG5laXRoZXIgc2hvd2VkLlxuICAgICAgICBjb25zdCByaXNlID0gTWF0aC5hYnMobGFzdFBvaW50LnkgLSBmaXJzdFBvaW50LnkpO1xuICAgICAgICBjb25zdCBydW4gPSBNYXRoLmFicyhsYXN0UG9pbnQueCAtIGZpcnN0UG9pbnQueCkgKiBhc3BlY3RSYXRpbztcbiAgICAgICAgaWYgKHJpc2UgPiBydW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7dXNlVmVydGljYWw6IHRydWV9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdyaXRpbmdNb2RlID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCA/IGZpcnN0UG9pbnQueSA8IGxhc3RQb2ludC55IDogZmlyc3RQb2ludC54ID4gbGFzdFBvaW50LngpIHtcbiAgICAgICAgLy8gSW5jbHVkZXMgXCJob3Jpem9udGFsT25seVwiIGNhc2UgZm9yIGxhYmVscyB3aXRob3V0IHZlcnRpY2FsIGdseXBoc1xuICAgICAgICByZXR1cm4ge25lZWRzRmxpcHBpbmc6IHRydWV9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwbGFjZUdseXBoc0Fsb25nTGluZShzeW1ib2wsIGZvbnRTaXplLCBmbGlwLCBrZWVwVXByaWdodCwgcG9zTWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LCBnbENvb3JkTWF0cml4LCBnbHlwaE9mZnNldEFycmF5LCBsaW5lVmVydGV4QXJyYXksIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgcHJvamVjdGlvbkNhY2hlLCBhc3BlY3RSYXRpbykge1xuICAgIGNvbnN0IGZvbnRTY2FsZSA9IGZvbnRTaXplIC8gMjQ7XG4gICAgY29uc3QgbGluZU9mZnNldFggPSBzeW1ib2wubGluZU9mZnNldFggKiBmb250U2NhbGU7XG4gICAgY29uc3QgbGluZU9mZnNldFkgPSBzeW1ib2wubGluZU9mZnNldFkgKiBmb250U2NhbGU7XG5cbiAgICBsZXQgcGxhY2VkR2x5cGhzO1xuICAgIGlmIChzeW1ib2wubnVtR2x5cGhzID4gMSkge1xuICAgICAgICBjb25zdCBnbHlwaEVuZEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIHN5bWJvbC5udW1HbHlwaHM7XG4gICAgICAgIGNvbnN0IGxpbmVTdGFydEluZGV4ID0gc3ltYm9sLmxpbmVTdGFydEluZGV4O1xuICAgICAgICBjb25zdCBsaW5lRW5kSW5kZXggPSBzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wubGluZUxlbmd0aDtcblxuICAgICAgICAvLyBQbGFjZSB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGdseXBoIGluIHRoZSBsYWJlbCBmaXJzdCwgc28gd2UgY2FuIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gdGhlIG92ZXJhbGwgb3JpZW50YXRpb24gb2YgdGhlIGxhYmVsIGFuZCBkZXRlcm1pbmUgd2hldGhlciBpdCBuZWVkcyB0byBiZSBmbGlwcGVkIGluIGtlZXBVcHJpZ2h0IG1vZGVcbiAgICAgICAgY29uc3QgZmlyc3RBbmRMYXN0R2x5cGggPSBwbGFjZUZpcnN0QW5kTGFzdEdseXBoKGZvbnRTY2FsZSwgZ2x5cGhPZmZzZXRBcnJheSwgbGluZU9mZnNldFgsIGxpbmVPZmZzZXRZLCBmbGlwLCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBzeW1ib2wsIGxpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeCwgcHJvamVjdGlvbkNhY2hlLCBmYWxzZSk7XG4gICAgICAgIGlmICghZmlyc3RBbmRMYXN0R2x5cGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7bm90RW5vdWdoUm9vbTogdHJ1ZX07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RQb2ludCA9IHByb2plY3QoZmlyc3RBbmRMYXN0R2x5cGguZmlyc3QucG9pbnQsIGdsQ29vcmRNYXRyaXgpLnBvaW50O1xuICAgICAgICBjb25zdCBsYXN0UG9pbnQgPSBwcm9qZWN0KGZpcnN0QW5kTGFzdEdseXBoLmxhc3QucG9pbnQsIGdsQ29vcmRNYXRyaXgpLnBvaW50O1xuXG4gICAgICAgIGlmIChrZWVwVXByaWdodCAmJiAhZmxpcCkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZW50YXRpb25DaGFuZ2UgPSByZXF1aXJlc09yaWVudGF0aW9uQ2hhbmdlKHN5bWJvbC53cml0aW5nTW9kZSwgZmlyc3RQb2ludCwgbGFzdFBvaW50LCBhc3BlY3RSYXRpbyk7XG4gICAgICAgICAgICBpZiAob3JpZW50YXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZW50YXRpb25DaGFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwbGFjZWRHbHlwaHMgPSBbZmlyc3RBbmRMYXN0R2x5cGguZmlyc3RdO1xuICAgICAgICBmb3IgKGxldCBnbHlwaEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIDE7IGdseXBoSW5kZXggPCBnbHlwaEVuZEluZGV4IC0gMTsgZ2x5cGhJbmRleCsrKSB7XG4gICAgICAgICAgICAvLyBTaW5jZSBmaXJzdCBhbmQgbGFzdCBnbHlwaCBmaXQgb24gdGhlIGxpbmUsIHdlJ3JlIHN1cmUgdGhhdCB0aGUgcmVzdCBvZiB0aGUgZ2x5cGhzIGNhbiBiZSBwbGFjZWRcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICAgIHBsYWNlZEdseXBocy5wdXNoKHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKGdseXBoSW5kZXgpLCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydEluZGV4LCBsaW5lRW5kSW5kZXgsIGxpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeCwgcHJvamVjdGlvbkNhY2hlLCBmYWxzZSkpO1xuICAgICAgICB9XG4gICAgICAgIHBsYWNlZEdseXBocy5wdXNoKGZpcnN0QW5kTGFzdEdseXBoLmxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9ubHkgYSBzaW5nbGUgZ2x5cGggdG8gcGxhY2VcbiAgICAgICAgLy8gU28sIGRldGVybWluZSB3aGV0aGVyIHRvIGZsaXAgYmFzZWQgb24gcHJvamVjdGVkIGFuZ2xlIG9mIHRoZSBsaW5lIHNlZ21lbnQgaXQncyBvblxuICAgICAgICBpZiAoa2VlcFVwcmlnaHQgJiYgIWZsaXApIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBwcm9qZWN0KHRpbGVBbmNob3JQb2ludCwgcG9zTWF0cml4KS5wb2ludDtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVWZXJ0ZXhJbmRleCA9IChzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wuc2VnbWVudCArIDEpO1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgICAgY29uc3QgdGlsZVNlZ21lbnRFbmQgPSBuZXcgUG9pbnQobGluZVZlcnRleEFycmF5LmdldHgodGlsZVZlcnRleEluZGV4KSwgbGluZVZlcnRleEFycmF5LmdldHkodGlsZVZlcnRleEluZGV4KSk7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRWZXJ0ZXggPSBwcm9qZWN0KHRpbGVTZWdtZW50RW5kLCBwb3NNYXRyaXgpO1xuICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgYW5jaG9yIHdpbGwgYmUgaW4gdGhlIHZpZXdwb3J0LCBidXQgdGhlIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG1heSBiZVxuICAgICAgICAgICAgLy8gYmVoaW5kIHRoZSBwbGFuZSBvZiB0aGUgY2FtZXJhLCBpbiB3aGljaCBjYXNlIHdlIGNhbiB1c2UgYSBwb2ludCBhdCBhbnkgYXJiaXRyYXJ5IChjbG9zZXIpXG4gICAgICAgICAgICAvLyBwb2ludCBvbiB0aGUgc2VnbWVudC5cbiAgICAgICAgICAgIGNvbnN0IGIgPSAocHJvamVjdGVkVmVydGV4LnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSA+IDApID9cbiAgICAgICAgICAgICAgICBwcm9qZWN0ZWRWZXJ0ZXgucG9pbnQgOlxuICAgICAgICAgICAgICAgIHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudCh0aWxlQW5jaG9yUG9pbnQsIHRpbGVTZWdtZW50RW5kLCBhLCAxLCBwb3NNYXRyaXgpO1xuXG4gICAgICAgICAgICBjb25zdCBvcmllbnRhdGlvbkNoYW5nZSA9IHJlcXVpcmVzT3JpZW50YXRpb25DaGFuZ2Uoc3ltYm9sLndyaXRpbmdNb2RlLCBhLCBiLCBhc3BlY3RSYXRpbyk7XG4gICAgICAgICAgICBpZiAob3JpZW50YXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZW50YXRpb25DaGFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBjb25zdCBzaW5nbGVHbHlwaCA9IHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXgpLCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICAgICAgc3ltYm9sLmxpbmVTdGFydEluZGV4LCBzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wubGluZUxlbmd0aCwgbGluZVZlcnRleEFycmF5LCBsYWJlbFBsYW5lTWF0cml4LCBwcm9qZWN0aW9uQ2FjaGUsIGZhbHNlKTtcbiAgICAgICAgaWYgKCFzaW5nbGVHbHlwaClcbiAgICAgICAgICAgIHJldHVybiB7bm90RW5vdWdoUm9vbTogdHJ1ZX07XG5cbiAgICAgICAgcGxhY2VkR2x5cGhzID0gW3NpbmdsZUdseXBoXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGdseXBoOiBhbnkgb2YgcGxhY2VkR2x5cGhzKSB7XG4gICAgICAgIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgZ2x5cGgucG9pbnQsIGdseXBoLmFuZ2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0VHJ1bmNhdGVkTGluZVNlZ21lbnQocHJldmlvdXNUaWxlUG9pbnQ6IFBvaW50LCBjdXJyZW50VGlsZVBvaW50OiBQb2ludCwgcHJldmlvdXNQcm9qZWN0ZWRQb2ludDogUG9pbnQsIG1pbmltdW1MZW5ndGg6IG51bWJlciwgcHJvamVjdGlvbk1hdHJpeDogbWF0NCkge1xuICAgIC8vIFdlIGFyZSBhc3N1bWluZyBcInByZXZpb3VzVGlsZVBvaW50XCIgd29uJ3QgcHJvamVjdCB0byBhIHBvaW50IHdpdGhpbiBvbmUgdW5pdCBvZiB0aGUgY2FtZXJhIHBsYW5lXG4gICAgLy8gSWYgaXQgZGlkLCB0aGF0IHdvdWxkIG1lYW4gb3VyIGxhYmVsIGV4dGVuZGVkIGFsbCB0aGUgd2F5IG91dCBmcm9tIHdpdGhpbiB0aGUgdmlld3BvcnQgdG8gYSAodmVyeSBkaXN0YW50KVxuICAgIC8vIHBvaW50IG5lYXIgdGhlIHBsYW5lIG9mIHRoZSBjYW1lcmEuIFdlIHdvdWxkbid0IGJlIGFibGUgdG8gcmVuZGVyIHRoZSBsYWJlbCBhbnl3YXkgb25jZSBpdCBjcm9zc2VkIHRoZVxuICAgIC8vIHBsYW5lIG9mIHRoZSBjYW1lcmEuXG4gICAgY29uc3QgcHJvamVjdGVkVW5pdFZlcnRleCA9IHByb2plY3QocHJldmlvdXNUaWxlUG9pbnQuYWRkKHByZXZpb3VzVGlsZVBvaW50LnN1YihjdXJyZW50VGlsZVBvaW50KS5fdW5pdCgpKSwgcHJvamVjdGlvbk1hdHJpeCkucG9pbnQ7XG4gICAgY29uc3QgcHJvamVjdGVkVW5pdFNlZ21lbnQgPSBwcmV2aW91c1Byb2plY3RlZFBvaW50LnN1Yihwcm9qZWN0ZWRVbml0VmVydGV4KTtcblxuICAgIHJldHVybiBwcmV2aW91c1Byb2plY3RlZFBvaW50LmFkZChwcm9qZWN0ZWRVbml0U2VnbWVudC5fbXVsdChtaW5pbXVtTGVuZ3RoIC8gcHJvamVjdGVkVW5pdFNlZ21lbnQubWFnKCkpKTtcbn1cblxuZnVuY3Rpb24gcGxhY2VHbHlwaEFsb25nTGluZShvZmZzZXRYOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRYOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRZOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsaXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclBvaW50OiBQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUFuY2hvclBvaW50OiBQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yU2VnbWVudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lRW5kSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25DYWNoZToge1tudW1iZXJdOiBQb2ludH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblRpbGVEaXN0YW5jZTogYm9vbGVhbikge1xuXG4gICAgY29uc3QgY29tYmluZWRPZmZzZXRYID0gZmxpcCA/XG4gICAgICAgIG9mZnNldFggLSBsaW5lT2Zmc2V0WCA6XG4gICAgICAgIG9mZnNldFggKyBsaW5lT2Zmc2V0WDtcblxuICAgIGxldCBkaXIgPSBjb21iaW5lZE9mZnNldFggPiAwID8gMSA6IC0xO1xuXG4gICAgbGV0IGFuZ2xlID0gMDtcbiAgICBpZiAoZmxpcCkge1xuICAgICAgICAvLyBUaGUgbGFiZWwgbmVlZHMgdG8gYmUgZmxpcHBlZCB0byBrZWVwIHRleHQgdXByaWdodC5cbiAgICAgICAgLy8gSXRlcmF0ZSBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24uXG4gICAgICAgIGRpciAqPSAtMTtcbiAgICAgICAgYW5nbGUgPSBNYXRoLlBJO1xuICAgIH1cblxuICAgIGlmIChkaXIgPCAwKSBhbmdsZSArPSBNYXRoLlBJO1xuXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IGRpciA+IDAgP1xuICAgICAgICBsaW5lU3RhcnRJbmRleCArIGFuY2hvclNlZ21lbnQgOlxuICAgICAgICBsaW5lU3RhcnRJbmRleCArIGFuY2hvclNlZ21lbnQgKyAxO1xuXG4gICAgY29uc3QgaW5pdGlhbEluZGV4ID0gY3VycmVudEluZGV4O1xuICAgIGxldCBjdXJyZW50ID0gYW5jaG9yUG9pbnQ7XG4gICAgbGV0IHByZXYgPSBhbmNob3JQb2ludDtcbiAgICBsZXQgZGlzdGFuY2VUb1ByZXYgPSAwO1xuICAgIGxldCBjdXJyZW50U2VnbWVudERpc3RhbmNlID0gMDtcbiAgICBjb25zdCBhYnNPZmZzZXRYID0gTWF0aC5hYnMoY29tYmluZWRPZmZzZXRYKTtcblxuICAgIHdoaWxlIChkaXN0YW5jZVRvUHJldiArIGN1cnJlbnRTZWdtZW50RGlzdGFuY2UgPD0gYWJzT2Zmc2V0WCkge1xuICAgICAgICBjdXJyZW50SW5kZXggKz0gZGlyO1xuXG4gICAgICAgIC8vIG9mZnNldCBkb2VzIG5vdCBmaXQgb24gdGhlIHByb2plY3RlZCBsaW5lXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPCBsaW5lU3RhcnRJbmRleCB8fCBjdXJyZW50SW5kZXggPj0gbGluZUVuZEluZGV4KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcHJldiA9IGN1cnJlbnQ7XG5cbiAgICAgICAgY3VycmVudCA9IHByb2plY3Rpb25DYWNoZVtjdXJyZW50SW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmVydGV4ID0gbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KGN1cnJlbnRJbmRleCksIGxpbmVWZXJ0ZXhBcnJheS5nZXR5KGN1cnJlbnRJbmRleCkpO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHByb2plY3QoY3VycmVudFZlcnRleCwgbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICBpZiAocHJvamVjdGlvbi5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEgPiAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHByb2plY3Rpb25DYWNoZVtjdXJyZW50SW5kZXhdID0gcHJvamVjdGlvbi5wb2ludDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHZlcnRleCBpcyBiZWhpbmQgdGhlIHBsYW5lIG9mIHRoZSBjYW1lcmEsIHNvIHdlIGNhbid0IHByb2plY3QgaXRcbiAgICAgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSdsbCBjcmVhdGUgYSB2ZXJ0ZXggYWxvbmcgdGhlIGxpbmUgdGhhdCdzIGZhciBlbm91Z2ggdG8gaW5jbHVkZSB0aGUgZ2x5cGhcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0xpbmVWZXJ0ZXhJbmRleCA9IGN1cnJlbnRJbmRleCAtIGRpcjtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1RpbGVQb2ludCA9IGRpc3RhbmNlVG9QcmV2ID09PSAwID9cbiAgICAgICAgICAgICAgICAgICAgdGlsZUFuY2hvclBvaW50IDpcbiAgICAgICAgICAgICAgICAgICAgbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KHByZXZpb3VzTGluZVZlcnRleEluZGV4KSwgbGluZVZlcnRleEFycmF5LmdldHkocHJldmlvdXNMaW5lVmVydGV4SW5kZXgpKTtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBjYWNoZSBiZWNhdXNlIHRoZSBuZXcgdmVydGV4IG1pZ2h0IG5vdCBiZSBmYXIgZW5vdWdoIG91dCBmb3IgZnV0dXJlIGdseXBocyBvbiB0aGUgc2FtZSBzZWdtZW50XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudChwcmV2aW91c1RpbGVQb2ludCwgY3VycmVudFZlcnRleCwgcHJldiwgYWJzT2Zmc2V0WCAtIGRpc3RhbmNlVG9QcmV2ICsgMSwgbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkaXN0YW5jZVRvUHJldiArPSBjdXJyZW50U2VnbWVudERpc3RhbmNlO1xuICAgICAgICBjdXJyZW50U2VnbWVudERpc3RhbmNlID0gcHJldi5kaXN0KGN1cnJlbnQpO1xuICAgIH1cblxuICAgIC8vIFRoZSBwb2ludCBpcyBvbiB0aGUgY3VycmVudCBzZWdtZW50LiBJbnRlcnBvbGF0ZSB0byBmaW5kIGl0LlxuICAgIGNvbnN0IHNlZ21lbnRJbnRlcnBvbGF0aW9uVCA9IChhYnNPZmZzZXRYIC0gZGlzdGFuY2VUb1ByZXYpIC8gY3VycmVudFNlZ21lbnREaXN0YW5jZTtcbiAgICBjb25zdCBwcmV2VG9DdXJyZW50ID0gY3VycmVudC5zdWIocHJldik7XG4gICAgY29uc3QgcCA9IHByZXZUb0N1cnJlbnQubXVsdChzZWdtZW50SW50ZXJwb2xhdGlvblQpLl9hZGQocHJldik7XG5cbiAgICAvLyBvZmZzZXQgdGhlIHBvaW50IGZyb20gdGhlIGxpbmUgdG8gdGV4dC1vZmZzZXQgYW5kIGljb24tb2Zmc2V0XG4gICAgcC5fYWRkKHByZXZUb0N1cnJlbnQuX3VuaXQoKS5fcGVycCgpLl9tdWx0KGxpbmVPZmZzZXRZICogZGlyKSk7XG5cbiAgICBjb25zdCBzZWdtZW50QW5nbGUgPSBhbmdsZSArIE1hdGguYXRhbjIoY3VycmVudC55IC0gcHJldi55LCBjdXJyZW50LnggLSBwcmV2LngpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcG9pbnQ6IHAsXG4gICAgICAgIGFuZ2xlOiBzZWdtZW50QW5nbGUsXG4gICAgICAgIHRpbGVEaXN0YW5jZTogcmV0dXJuVGlsZURpc3RhbmNlID9cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmV2VGlsZURpc3RhbmNlOiAoY3VycmVudEluZGV4IC0gZGlyKSA9PT0gaW5pdGlhbEluZGV4ID8gMCA6IGxpbmVWZXJ0ZXhBcnJheS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcihjdXJyZW50SW5kZXggLSBkaXIpLFxuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50Vmlld3BvcnREaXN0YW5jZTogYWJzT2Zmc2V0WCAtIGRpc3RhbmNlVG9QcmV2XG4gICAgICAgICAgICB9IDogbnVsbFxuICAgIH07XG59XG5cbmNvbnN0IGhpZGRlbkdseXBoQXR0cmlidXRlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWy1JbmZpbml0eSwgLUluZmluaXR5LCAwLCAtSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLUluZmluaXR5LCAtSW5maW5pdHksIDAsIC1JbmZpbml0eSwgLUluZmluaXR5LCAwXSk7XG5cbi8vIEhpZGUgdGhlbSBieSBtb3ZpbmcgdGhlbSBvZmZzY3JlZW4uIFdlIHN0aWxsIG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhlIGJ1ZmZlclxuLy8gYmVjYXVzZSB0aGUgZHluYW1pYyBidWZmZXIgaXMgcGFpcmVkIHdpdGggYSBzdGF0aWMgYnVmZmVyIHRoYXQgZG9lc24ndCBnZXQgdXBkYXRlZC5cbmZ1bmN0aW9uIGhpZGVHbHlwaHMobnVtOiBudW1iZXIsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTogU3ltYm9sRHluYW1pY0xheW91dEFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkucmVzaXplKG9mZnNldCArIDQpO1xuICAgICAgICAvLyBTaW5jZSBhbGwgaGlkZGVuIGdseXBocyBoYXZlIHRoZSBzYW1lIGF0dHJpYnV0ZXMsIHdlIGNhbiBidWlsZCB1cCB0aGUgYXJyYXkgZmFzdGVyIHdpdGggYSBzaW5nbGUgY2FsbCB0byBGbG9hdDMyQXJyYXkuc2V0XG4gICAgICAgIC8vIGZvciBlYWNoIHNldCBvZiBmb3VyIHZlcnRpY2VzLCBpbnN0ZWFkIG9mIGNhbGxpbmcgYWRkRHluYW1pY0F0dHJpYnV0ZXMgZm9yIGVhY2ggdmVydGV4LlxuICAgICAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZmxvYXQzMi5zZXQoaGlkZGVuR2x5cGhBdHRyaWJ1dGVzLCBvZmZzZXQgKiAzKTtcbiAgICB9XG59XG5cbi8vIEZvciBsaW5lIGxhYmVsIGxheW91dCwgd2UncmUgbm90IHVzaW5nIHogb3V0cHV0IGFuZCBvdXIgdyBpbnB1dCBpcyBhbHdheXMgMVxuLy8gVGhpcyBjdXN0b20gbWF0cml4IHRyYW5zZm9ybWF0aW9uIGlnbm9yZXMgdGhvc2UgY29tcG9uZW50cyB0byBtYWtlIHByb2plY3Rpb24gZmFzdGVyXG5mdW5jdGlvbiB4eVRyYW5zZm9ybU1hdDQob3V0OiB2ZWM0LCBhOiB2ZWM0LCBtOiBtYXQ0KSB7XG4gICAgY29uc3QgeCA9IGFbMF0sIHkgPSBhWzFdO1xuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNV0gKiB5ICsgbVsxM107XG4gICAgb3V0WzNdID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTVdO1xuICAgIHJldHVybiBvdXQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCAqIGFzIGludGVyc2VjdGlvblRlc3RzIGZyb20gJy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCBHcmlkIGZyb20gJy4vZ3JpZF9pbmRleCc7XG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbmltcG9ydCAqIGFzIHByb2plY3Rpb24gZnJvbSAnLi4vc3ltYm9sL3Byb2plY3Rpb24nO1xuXG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7U2luZ2xlQ29sbGlzaW9uQm94fSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHtcbiAgICBHbHlwaE9mZnNldEFycmF5LFxuICAgIFN5bWJvbExpbmVWZXJ0ZXhBcnJheVxufSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcblxuLy8gV2hlbiBhIHN5bWJvbCBjcm9zc2VzIHRoZSBlZGdlIHRoYXQgY2F1c2VzIGl0IHRvIGJlIGluY2x1ZGVkIGluXG4vLyBjb2xsaXNpb24gZGV0ZWN0aW9uLCBpdCB3aWxsIGNhdXNlIGNoYW5nZXMgaW4gdGhlIHN5bWJvbHMgYXJvdW5kXG4vLyBpdC4gVGhpcyBjb25zdGFudCBzcGVjaWZpZXMgaG93IG1hbnkgcGl4ZWxzIHRvIHBhZCB0aGUgZWRnZSBvZlxuLy8gdGhlIHZpZXdwb3J0IGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uIHNvIHRoYXQgdGhlIGJ1bGsgb2YgdGhlIGNoYW5nZXNcbi8vIG9jY3VyIG9mZnNjcmVlbi4gTWFraW5nIHRoaXMgY29uc3RhbnQgZ3JlYXRlciBpbmNyZWFzZXMgbGFiZWxcbi8vIHN0YWJpbGl0eSwgYnV0IGl0J3MgZXhwZW5zaXZlLlxuY29uc3Qgdmlld3BvcnRQYWRkaW5nID0gMTAwO1xuXG4vKipcbiAqIEEgY29sbGlzaW9uIGluZGV4IHVzZWQgdG8gcHJldmVudCBzeW1ib2xzIGZyb20gb3ZlcmxhcHBpbmcuIEl0IGtlZXAgdHJhY2tzIG9mXG4gKiB3aGVyZSBwcmV2aW91cyBzeW1ib2xzIGhhdmUgYmVlbiBwbGFjZWQgYW5kIGlzIHVzZWQgdG8gY2hlY2sgaWYgYSBuZXdcbiAqIHN5bWJvbCBvdmVybGFwcyB3aXRoIGFueSBwcmV2aW91c2x5IGFkZGVkIHN5bWJvbHMuXG4gKlxuICogVGhlcmUgYXJlIHR3byBzdGVwcyB0byBpbnNlcnRpb246IGZpcnN0IHBsYWNlQ29sbGlzaW9uQm94L0NpcmNsZXMgY2hlY2tzIGlmXG4gKiB0aGVyZSdzIHJvb20gZm9yIGEgc3ltYm9sLCB0aGVuIGluc2VydENvbGxpc2lvbkJveC9DaXJjbGVzIGFjdHVhbGx5IHB1dHMgdGhlXG4gKiBzeW1ib2wgaW4gdGhlIGluZGV4LiBUaGUgdHdvIHN0ZXAgcHJvY2VzcyBhbGxvd3MgcGFpcmVkIHN5bWJvbHMgdG8gYmUgaW5zZXJ0ZWRcbiAqIHRvZ2V0aGVyIGV2ZW4gaWYgdGhleSBvdmVybGFwLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbGxpc2lvbkluZGV4IHtcbiAgICBncmlkOiBHcmlkO1xuICAgIGlnbm9yZWRHcmlkOiBHcmlkO1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIHBpdGNoZmFjdG9yOiBudW1iZXI7XG4gICAgc2NyZWVuUmlnaHRCb3VuZGFyeTogbnVtYmVyO1xuICAgIHNjcmVlbkJvdHRvbUJvdW5kYXJ5OiBudW1iZXI7XG4gICAgZ3JpZFJpZ2h0Qm91bmRhcnk6IG51bWJlcjtcbiAgICBncmlkQm90dG9tQm91bmRhcnk6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgZ3JpZDogR3JpZCA9IG5ldyBHcmlkKHRyYW5zZm9ybS53aWR0aCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nLCAyNSksXG4gICAgICAgIGlnbm9yZWRHcmlkOiBHcmlkID0gbmV3IEdyaWQodHJhbnNmb3JtLndpZHRoICsgMiAqIHZpZXdwb3J0UGFkZGluZywgdHJhbnNmb3JtLmhlaWdodCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIDI1KVxuICAgICkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcblxuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmlnbm9yZWRHcmlkID0gaWdub3JlZEdyaWQ7XG4gICAgICAgIHRoaXMucGl0Y2hmYWN0b3IgPSBNYXRoLmNvcyh0cmFuc2Zvcm0uX3BpdGNoKSAqIHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeSA9IHRyYW5zZm9ybS53aWR0aCArIHZpZXdwb3J0UGFkZGluZztcbiAgICAgICAgdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeSA9IHRyYW5zZm9ybS5oZWlnaHQgKyB2aWV3cG9ydFBhZGRpbmc7XG4gICAgICAgIHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnkgPSB0cmFuc2Zvcm0ud2lkdGggKyAyICogdmlld3BvcnRQYWRkaW5nO1xuICAgICAgICB0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeSA9IHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nO1xuICAgIH1cblxuICAgIHBsYWNlQ29sbGlzaW9uQm94KGNvbGxpc2lvbkJveDogU2luZ2xlQ29sbGlzaW9uQm94LCBhbGxvd092ZXJsYXA6IGJvb2xlYW4sIHRleHRQaXhlbFJhdGlvOiBudW1iZXIsIHBvc01hdHJpeDogbWF0NCwgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGU/OiBhbnkpOiB7IGJveDogQXJyYXk8bnVtYmVyPiwgb2Zmc2NyZWVuOiBib29sZWFuIH0ge1xuICAgICAgICBjb25zdCBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8ocG9zTWF0cml4LCBjb2xsaXNpb25Cb3guYW5jaG9yUG9pbnRYLCBjb2xsaXNpb25Cb3guYW5jaG9yUG9pbnRZKTtcbiAgICAgICAgY29uc3QgdGlsZVRvVmlld3BvcnQgPSB0ZXh0UGl4ZWxSYXRpbyAqIHByb2plY3RlZFBvaW50LnBlcnNwZWN0aXZlUmF0aW87XG4gICAgICAgIGNvbnN0IHRsWCA9IGNvbGxpc2lvbkJveC54MSAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueDtcbiAgICAgICAgY29uc3QgdGxZID0gY29sbGlzaW9uQm94LnkxICogdGlsZVRvVmlld3BvcnQgKyBwcm9qZWN0ZWRQb2ludC5wb2ludC55O1xuICAgICAgICBjb25zdCBiclggPSBjb2xsaXNpb25Cb3gueDIgKiB0aWxlVG9WaWV3cG9ydCArIHByb2plY3RlZFBvaW50LnBvaW50Lng7XG4gICAgICAgIGNvbnN0IGJyWSA9IGNvbGxpc2lvbkJveC55MiAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNJbnNpZGVHcmlkKHRsWCwgdGxZLCBiclgsIGJyWSkgfHxcbiAgICAgICAgICAgICghYWxsb3dPdmVybGFwICYmIHRoaXMuZ3JpZC5oaXRUZXN0KHRsWCwgdGxZLCBiclgsIGJyWSwgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3g6IFtdLFxuICAgICAgICAgICAgICAgIG9mZnNjcmVlbjogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYm94OiBbdGxYLCB0bFksIGJyWCwgYnJZXSxcbiAgICAgICAgICAgIG9mZnNjcmVlbjogdGhpcy5pc09mZnNjcmVlbih0bFgsIHRsWSwgYnJYLCBiclkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXBwcm94aW1hdGVUaWxlRGlzdGFuY2UodGlsZURpc3RhbmNlOiBhbnksIGxhc3RTZWdtZW50QW5nbGU6IG51bWJlciwgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlciwgY2FtZXJhVG9BbmNob3JEaXN0YW5jZTogbnVtYmVyLCBwaXRjaFdpdGhNYXA6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcXVpY2sgYW5kIGRpcnR5IHNvbHV0aW9uIGZvciBjaG9zaW5nIHdoaWNoIGNvbGxpc2lvbiBjaXJjbGVzIHRvIHVzZSAoc2luY2UgY29sbGlzaW9uIGNpcmNsZXMgYXJlXG4gICAgICAgIC8vIGxhaWQgb3V0IGluIHRpbGUgdW5pdHMpLiBJZGVhbGx5LCBJIHRoaW5rIHdlIHNob3VsZCBnZW5lcmF0ZSBjb2xsaXNpb24gY2lyY2xlcyBvbiB0aGUgZmx5IGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzXG4gICAgICAgIC8vIGF0IHRoZSB0aW1lIHdlIGRvIGNvbGxpc2lvbiBkZXRlY3Rpb24uXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNTQ3NFxuXG4gICAgICAgIC8vIGluY2lkZW5jZVN0cmV0Y2ggaXMgdGhlIHJhdGlvIG9mIGhvdyBtdWNoIHkgc3BhY2UgYSBsYWJlbCB0YWtlcyB1cCBvbiBhIHRpbGUgd2hpbGUgZHJhd24gcGVycGVuZGljdWxhciB0byB0aGUgdmlld3BvcnQgdnNcbiAgICAgICAgLy8gIGhvdyBtdWNoIHNwYWNlIGl0IHdvdWxkIHRha2UgdXAgaWYgaXQgd2VyZSBkcmF3biBmbGF0IG9uIHRoZSB0aWxlXG4gICAgICAgIC8vIFVzaW5nIGxhdyBvZiBzaW5lcywgY2FtZXJhX3RvX2FuY2hvci9zaW4oZ3JvdW5kX2FuZ2xlKSA9IGNhbWVyYV90b19jZW50ZXIvc2luKGluY2lkZW5jZV9hbmdsZSlcbiAgICAgICAgLy8gSW5jaWRlbmNlIGFuZ2xlIDkwIC0+IGhlYWQgb24sIHNpbihpbmNpZGVuY2VfYW5nbGUpID0gMSwgbm8gc3RyZXRjaFxuICAgICAgICAvLyBJbmNpZGVuY2UgYW5nbGUgMSAtPiB2ZXJ5IG9ibGlxdWUsIHNpbihpbmNpZGVuY2VfYW5nbGUpID1+IDAsIGxvdHMgb2Ygc3RyZXRjaFxuICAgICAgICAvLyBncm91bmRfYW5nbGUgPSB1X3BpdGNoICsgUEkvMiAtPiBzaW4oZ3JvdW5kX2FuZ2xlKSA9IGNvcyh1X3BpdGNoKVxuICAgICAgICAvLyBpbmNpZGVuY2VTdHJldGNoID0gMSAvIHNpbihpbmNpZGVuY2VBbmdsZSlcblxuICAgICAgICBjb25zdCBpbmNpZGVuY2VTdHJldGNoID0gcGl0Y2hXaXRoTWFwID8gMSA6IGNhbWVyYVRvQW5jaG9yRGlzdGFuY2UgLyB0aGlzLnBpdGNoZmFjdG9yO1xuICAgICAgICBjb25zdCBsYXN0U2VnbWVudFRpbGUgPSB0aWxlRGlzdGFuY2UubGFzdFNlZ21lbnRWaWV3cG9ydERpc3RhbmNlICogcGl4ZWxzVG9UaWxlVW5pdHM7XG4gICAgICAgIHJldHVybiB0aWxlRGlzdGFuY2UucHJldlRpbGVEaXN0YW5jZSArXG4gICAgICAgICAgICBsYXN0U2VnbWVudFRpbGUgK1xuICAgICAgICAgICAgKGluY2lkZW5jZVN0cmV0Y2ggLSAxKSAqIGxhc3RTZWdtZW50VGlsZSAqIE1hdGguYWJzKE1hdGguc2luKGxhc3RTZWdtZW50QW5nbGUpKTtcbiAgICB9XG5cbiAgICBwbGFjZUNvbGxpc2lvbkNpcmNsZXMoY29sbGlzaW9uQ2lyY2xlczogQXJyYXk8bnVtYmVyPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dPdmVybGFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UGl4ZWxSYXRpbzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoT2Zmc2V0QXJyYXk6IEdseXBoT2Zmc2V0QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvc01hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxQbGFuZU1hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkNpcmNsZXM6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGU/OiBhbnkpOiB7IGNpcmNsZXM6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiB9IHtcbiAgICAgICAgY29uc3QgcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RlZEFuY2hvciA9IHRoaXMucHJvamVjdEFuY2hvcihwb3NNYXRyaXgsIHN5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdGlvbkNhY2hlID0ge307XG4gICAgICAgIGNvbnN0IGZvbnRTY2FsZSA9IGZvbnRTaXplIC8gMjQ7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXRYID0gc3ltYm9sLmxpbmVPZmZzZXRYICogZm9udFNpemU7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXRZID0gc3ltYm9sLmxpbmVPZmZzZXRZICogZm9udFNpemU7XG5cbiAgICAgICAgY29uc3QgdGlsZVVuaXRBbmNob3JQb2ludCA9IG5ldyBQb2ludChzeW1ib2wuYW5jaG9yWCwgc3ltYm9sLmFuY2hvclkpO1xuICAgICAgICAvLyBwcm9qZWN0aW9uLnByb2plY3QgZ2VuZXJhdGVzIE5EQyBjb29yZGluYXRlcywgYXMgb3Bwb3NlZCB0byB0aGVcbiAgICAgICAgLy8gcGl4ZWwtYmFzZWQgZ3JpZCBjb29yZGluYXRlcyBnZW5lcmF0ZWQgYnkgdGhpcy5wcm9qZWN0UG9pbnRcbiAgICAgICAgY29uc3QgbGFiZWxQbGFuZUFuY2hvclBvaW50ID1cbiAgICAgICAgICAgIHByb2plY3Rpb24ucHJvamVjdCh0aWxlVW5pdEFuY2hvclBvaW50LCBsYWJlbFBsYW5lTWF0cml4KS5wb2ludDtcbiAgICAgICAgY29uc3QgZmlyc3RBbmRMYXN0R2x5cGggPSBwcm9qZWN0aW9uLnBsYWNlRmlyc3RBbmRMYXN0R2x5cGgoXG4gICAgICAgICAgICBmb250U2NhbGUsXG4gICAgICAgICAgICBnbHlwaE9mZnNldEFycmF5LFxuICAgICAgICAgICAgbGluZU9mZnNldFgsXG4gICAgICAgICAgICBsaW5lT2Zmc2V0WSxcbiAgICAgICAgICAgIC8qZmxpcCovIGZhbHNlLFxuICAgICAgICAgICAgbGFiZWxQbGFuZUFuY2hvclBvaW50LFxuICAgICAgICAgICAgdGlsZVVuaXRBbmNob3JQb2ludCxcbiAgICAgICAgICAgIHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmVWZXJ0ZXhBcnJheSxcbiAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICBwcm9qZWN0aW9uQ2FjaGUsXG4gICAgICAgICAgICAvKnJldHVybiB0aWxlIGRpc3RhbmNlKi8gdHJ1ZSk7XG5cbiAgICAgICAgbGV0IGNvbGxpc2lvbkRldGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBpbkdyaWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGVudGlyZWx5T2Zmc2NyZWVuID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCB0aWxlVG9WaWV3cG9ydCA9IHByb2plY3RlZEFuY2hvci5wZXJzcGVjdGl2ZVJhdGlvICogdGV4dFBpeGVsUmF0aW87XG4gICAgICAgIC8vIHBpeGVsc1RvVGlsZVVuaXRzIGlzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIGxpbmUgZ2VvbWV0cnkgdG8gdGlsZSB1bml0c1xuICAgICAgICAvLyAuLi4gc28gd2UgY2FyZSBhYm91dCAnc2NhbGUnIGJ1dCBub3QgJ3BlcnNwZWN0aXZlUmF0aW8nXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gcGl4ZWxfdG9fdGlsZV91bml0c1xuICAgICAgICBjb25zdCBwaXhlbHNUb1RpbGVVbml0cyA9IDEgLyAodGV4dFBpeGVsUmF0aW8gKiBzY2FsZSk7XG5cbiAgICAgICAgbGV0IGZpcnN0VGlsZURpc3RhbmNlID0gMCwgbGFzdFRpbGVEaXN0YW5jZSA9IDA7XG4gICAgICAgIGlmIChmaXJzdEFuZExhc3RHbHlwaCkge1xuICAgICAgICAgICAgZmlyc3RUaWxlRGlzdGFuY2UgPSB0aGlzLmFwcHJveGltYXRlVGlsZURpc3RhbmNlKGZpcnN0QW5kTGFzdEdseXBoLmZpcnN0LnRpbGVEaXN0YW5jZSwgZmlyc3RBbmRMYXN0R2x5cGguZmlyc3QuYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzLCBwcm9qZWN0ZWRBbmNob3IuY2FtZXJhRGlzdGFuY2UsIHBpdGNoV2l0aE1hcCk7XG4gICAgICAgICAgICBsYXN0VGlsZURpc3RhbmNlID0gdGhpcy5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZShmaXJzdEFuZExhc3RHbHlwaC5sYXN0LnRpbGVEaXN0YW5jZSwgZmlyc3RBbmRMYXN0R2x5cGgubGFzdC5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMsIHByb2plY3RlZEFuY2hvci5jYW1lcmFEaXN0YW5jZSwgcGl0Y2hXaXRoTWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY29sbGlzaW9uQ2lyY2xlcy5sZW5ndGg7IGsgKz0gNSkge1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yUG9pbnRYID0gY29sbGlzaW9uQ2lyY2xlc1trXTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvclBvaW50WSA9IGNvbGxpc2lvbkNpcmNsZXNbayArIDFdO1xuICAgICAgICAgICAgY29uc3QgdGlsZVVuaXRSYWRpdXMgPSBjb2xsaXNpb25DaXJjbGVzW2sgKyAyXTtcbiAgICAgICAgICAgIGNvbnN0IGJveFNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciA9IGNvbGxpc2lvbkNpcmNsZXNbayArIDNdO1xuICAgICAgICAgICAgaWYgKCFmaXJzdEFuZExhc3RHbHlwaCB8fFxuICAgICAgICAgICAgICAgIChib3hTaWduZWREaXN0YW5jZUZyb21BbmNob3IgPCAtZmlyc3RUaWxlRGlzdGFuY2UpIHx8XG4gICAgICAgICAgICAgICAgKGJveFNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciA+IGxhc3RUaWxlRGlzdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGxhYmVsIGVpdGhlciBkb2Vzbid0IGZpdCBvbiBpdHMgbGluZSBvciB3ZVxuICAgICAgICAgICAgICAgIC8vIGRvbid0IG5lZWQgdG8gdXNlIHRoaXMgY2lyY2xlIGJlY2F1c2UgdGhlIGxhYmVsXG4gICAgICAgICAgICAgICAgLy8gZG9lc24ndCBleHRlbmQgdGhpcyBmYXIuIEVpdGhlciB3YXksIG1hcmsgdGhlIGNpcmNsZSB1bnVzZWQuXG4gICAgICAgICAgICAgICAgbWFya0NvbGxpc2lvbkNpcmNsZVVzZWQoY29sbGlzaW9uQ2lyY2xlcywgaywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdFBvaW50KHBvc01hdHJpeCwgYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFkpO1xuICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gdGlsZVVuaXRSYWRpdXMgKiB0aWxlVG9WaWV3cG9ydDtcblxuICAgICAgICAgICAgY29uc3QgYXRMZWFzdE9uZUNpcmNsZVBsYWNlZCA9IHBsYWNlZENvbGxpc2lvbkNpcmNsZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGlmIChhdExlYXN0T25lQ2lyY2xlUGxhY2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHggPSBwcm9qZWN0ZWRQb2ludC54IC0gcGxhY2VkQ29sbGlzaW9uQ2lyY2xlc1twbGFjZWRDb2xsaXNpb25DaXJjbGVzLmxlbmd0aCAtIDRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGR5ID0gcHJvamVjdGVkUG9pbnQueSAtIHBsYWNlZENvbGxpc2lvbkNpcmNsZXNbcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcy5sZW5ndGggLSAzXTtcbiAgICAgICAgICAgICAgICAvLyBUaGUgY2lyY2xlIGVkZ2VzIHRvdWNoIHdoZW4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlaXIgY2VudGVycyBpcyAyeCB0aGUgcmFkaXVzXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgZGlzdGFuY2UgaXMgMXggdGhlIHJhZGl1cywgdGhleSdyZSBkb3VibGVkIHVwLCBhbmQgd2UgY291bGQgcmVtb3ZlXG4gICAgICAgICAgICAgICAgLy8gZXZlcnkgb3RoZXIgY2lyY2xlIHdoaWxlIGtlZXBpbmcgdGhlbSBhbGwgaW4gdG91Y2guXG4gICAgICAgICAgICAgICAgLy8gV2UgYWN0dWFsbHkgc3RhcnQgcmVtb3ZpbmcgY2lyY2xlcyB3aGVuIHRoZSBkaXN0YW5jZSBpcyDDosKIwpoyeCB0aGUgcmFkaXVzOlxuICAgICAgICAgICAgICAgIC8vICB0aGlubmluZyB0aGUgbnVtYmVyIG9mIGNpcmNsZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBpcyBhIG1ham9yIHBlcmZvcm1hbmNlIHdpbixcbiAgICAgICAgICAgICAgICAvLyAgYW5kIHRoZSBzbWFsbCBnYXBzIGludHJvZHVjZWQgZG9uJ3QgbWFrZSBhIHZlcnkgbm90aWNlYWJsZSBkaWZmZXJlbmNlLlxuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlZFRvb0RlbnNlbHkgPSByYWRpdXMgKiByYWRpdXMgKiAyID4gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlZFRvb0RlbnNlbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXRMZWFzdE9uZU1vcmVDaXJjbGUgPSAoayArIDgpIDwgY29sbGlzaW9uQ2lyY2xlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdExlYXN0T25lTW9yZUNpcmNsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEJveERpc3RhbmNlVG9BbmNob3IgPSBjb2xsaXNpb25DaXJjbGVzW2sgKyA4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobmV4dEJveERpc3RhbmNlVG9BbmNob3IgPiAtZmlyc3RUaWxlRGlzdGFuY2UpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobmV4dEJveERpc3RhbmNlVG9BbmNob3IgPCBsYXN0VGlsZURpc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhpZGUgc2lnbmlmaWNhbnRseSBvdmVybGFwcGluZyBjaXJjbGVzLCB1bmxlc3MgdGhpcyBpcyB0aGUgbGFzdCBvbmUgd2UgY2FuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8ga2VlcCBpdCBpbiBwbGFjZSBldmVuIGlmIGl0J3MgdGlnaHRseSBwYWNrZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBvbmUgYmVmb3JlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtDb2xsaXNpb25DaXJjbGVVc2VkKGNvbGxpc2lvbkNpcmNsZXMsIGssIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbGxpc2lvbkJveEFycmF5SW5kZXggPSBrIC8gNTtcbiAgICAgICAgICAgIHBsYWNlZENvbGxpc2lvbkNpcmNsZXMucHVzaChwcm9qZWN0ZWRQb2ludC54LCBwcm9qZWN0ZWRQb2ludC55LCByYWRpdXMsIGNvbGxpc2lvbkJveEFycmF5SW5kZXgpO1xuICAgICAgICAgICAgbWFya0NvbGxpc2lvbkNpcmNsZVVzZWQoY29sbGlzaW9uQ2lyY2xlcywgaywgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHgxID0gcHJvamVjdGVkUG9pbnQueCAtIHJhZGl1cztcbiAgICAgICAgICAgIGNvbnN0IHkxID0gcHJvamVjdGVkUG9pbnQueSAtIHJhZGl1cztcbiAgICAgICAgICAgIGNvbnN0IHgyID0gcHJvamVjdGVkUG9pbnQueCArIHJhZGl1cztcbiAgICAgICAgICAgIGNvbnN0IHkyID0gcHJvamVjdGVkUG9pbnQueSArIHJhZGl1cztcbiAgICAgICAgICAgIGVudGlyZWx5T2Zmc2NyZWVuID0gZW50aXJlbHlPZmZzY3JlZW4gJiYgdGhpcy5pc09mZnNjcmVlbih4MSwgeTEsIHgyLCB5Mik7XG4gICAgICAgICAgICBpbkdyaWQgPSBpbkdyaWQgfHwgdGhpcy5pc0luc2lkZUdyaWQoeDEsIHkxLCB4MiwgeTIpO1xuXG4gICAgICAgICAgICBpZiAoIWFsbG93T3ZlcmxhcCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaGl0VGVzdENpcmNsZShwcm9qZWN0ZWRQb2ludC54LCBwcm9qZWN0ZWRQb2ludC55LCByYWRpdXMsIGNvbGxpc2lvbkdyb3VwUHJlZGljYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3dDb2xsaXNpb25DaXJjbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlbjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBlYXJseSBleGl0IGlmIHdlJ3JlIHNob3dpbmcgdGhlIGRlYnVnIGNpcmNsZXMgYmVjYXVzZSB3ZSBzdGlsbCB3YW50IHRvIGNhbGN1bGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggY2lyY2xlcyBhcmUgaW4gdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25EZXRlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2lyY2xlczogKGNvbGxpc2lvbkRldGVjdGVkIHx8ICFpbkdyaWQpID8gW10gOiBwbGFjZWRDb2xsaXNpb25DaXJjbGVzLFxuICAgICAgICAgICAgb2Zmc2NyZWVuOiBlbnRpcmVseU9mZnNjcmVlblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJlY2F1c2UgdGhlIGdlb21ldHJpZXMgaW4gdGhlIENvbGxpc2lvbkluZGV4IGFyZSBhbiBhcHByb3hpbWF0aW9uIG9mIHRoZSBzaGFwZSBvZlxuICAgICAqIHN5bWJvbHMgb24gdGhlIG1hcCwgd2UgdXNlIHRoZSBDb2xsaXNpb25JbmRleCB0byBsb29rIHVwIHRoZSBzeW1ib2wgcGFydCBvZlxuICAgICAqIGBxdWVyeVJlbmRlcmVkRmVhdHVyZXNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBxdWVyeVJlbmRlcmVkU3ltYm9scyh2aWV3cG9ydFF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50Pikge1xuICAgICAgICBpZiAodmlld3BvcnRRdWVyeUdlb21ldHJ5Lmxlbmd0aCA9PT0gMCB8fCAodGhpcy5ncmlkLmtleXNMZW5ndGgoKSA9PT0gMCAmJiB0aGlzLmlnbm9yZWRHcmlkLmtleXNMZW5ndGgoKSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gW107XG4gICAgICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcbiAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB2aWV3cG9ydFF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRQb2ludCA9IG5ldyBQb2ludChwb2ludC54ICsgdmlld3BvcnRQYWRkaW5nLCBwb2ludC55ICsgdmlld3BvcnRQYWRkaW5nKTtcbiAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBncmlkUG9pbnQueCk7XG4gICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgZ3JpZFBvaW50LnkpO1xuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGdyaWRQb2ludC54KTtcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBncmlkUG9pbnQueSk7XG4gICAgICAgICAgICBxdWVyeS5wdXNoKGdyaWRQb2ludCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ3JpZC5xdWVyeShtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLmlnbm9yZWRHcmlkLnF1ZXJ5KG1pblgsIG1pblksIG1heFgsIG1heFkpKTtcblxuICAgICAgICBjb25zdCBzZWVuRmVhdHVyZXMgPSB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlS2V5ID0gZmVhdHVyZS5rZXk7XG4gICAgICAgICAgICAvLyBTa2lwIGFscmVhZHkgc2VlbiBmZWF0dXJlcy5cbiAgICAgICAgICAgIGlmIChzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VlbkZlYXR1cmVzW2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXVtmZWF0dXJlS2V5LmZlYXR1cmVJbmRleF0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcXVlcnkgaW50ZXJzZWN0cyB3aXRoIHRoZSBmZWF0dXJlIGJveFxuICAgICAgICAgICAgLy8gXCJDb2xsaXNpb24gQ2lyY2xlc1wiIGZvciBsaW5lIGxhYmVscyBhcmUgdHJlYXRlZCBhcyBib3hlcyBoZXJlXG4gICAgICAgICAgICAvLyBTaW5jZSB0aGVyZSdzIG5vIGFjdHVhbCBjb2xsaXNpb24gdGFraW5nIHBsYWNlLCB0aGUgY2lyY2xlIHZzLiBzcXVhcmVcbiAgICAgICAgICAgIC8vIGRpc3RpbmN0aW9uIGRvZXNuJ3QgbWF0dGVyIGFzIG11Y2gsIGFuZCBib3ggZ2VvbWV0cnkgaXMgZWFzaWVyXG4gICAgICAgICAgICAvLyB0byB3b3JrIHdpdGguXG4gICAgICAgICAgICBjb25zdCBiYm94ID0gW1xuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngxLCBmZWF0dXJlLnkxKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQoZmVhdHVyZS54MiwgZmVhdHVyZS55MSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KGZlYXR1cmUueDIsIGZlYXR1cmUueTIpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngxLCBmZWF0dXJlLnkyKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uVGVzdHMucG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHF1ZXJ5LCBiYm94KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXVtmZWF0dXJlS2V5LmZlYXR1cmVJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHJlc3VsdFtmZWF0dXJlS2V5LmJ1Y2tldEluc3RhbmNlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0ucHVzaChmZWF0dXJlS2V5LmZlYXR1cmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGluc2VydENvbGxpc2lvbkJveChjb2xsaXNpb25Cb3g6IEFycmF5PG51bWJlcj4sIGlnbm9yZVBsYWNlbWVudDogYm9vbGVhbiwgYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyLCBmZWF0dXJlSW5kZXg6IG51bWJlciwgY29sbGlzaW9uR3JvdXBJRDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSBpZ25vcmVQbGFjZW1lbnQgPyB0aGlzLmlnbm9yZWRHcmlkIDogdGhpcy5ncmlkO1xuXG4gICAgICAgIGNvbnN0IGtleSA9IHtidWNrZXRJbnN0YW5jZUlkLCBmZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwSUR9O1xuICAgICAgICBncmlkLmluc2VydChrZXksIGNvbGxpc2lvbkJveFswXSwgY29sbGlzaW9uQm94WzFdLCBjb2xsaXNpb25Cb3hbMl0sIGNvbGxpc2lvbkJveFszXSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhjb2xsaXNpb25DaXJjbGVzOiBBcnJheTxudW1iZXI+LCBpZ25vcmVQbGFjZW1lbnQ6IGJvb2xlYW4sIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlciwgZmVhdHVyZUluZGV4OiBudW1iZXIsIGNvbGxpc2lvbkdyb3VwSUQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkID0gaWdub3JlUGxhY2VtZW50ID8gdGhpcy5pZ25vcmVkR3JpZCA6IHRoaXMuZ3JpZDtcblxuICAgICAgICBjb25zdCBrZXkgPSB7YnVja2V0SW5zdGFuY2VJZCwgZmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cElEfTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjb2xsaXNpb25DaXJjbGVzLmxlbmd0aDsgayArPSA0KSB7XG4gICAgICAgICAgICBncmlkLmluc2VydENpcmNsZShrZXksIGNvbGxpc2lvbkNpcmNsZXNba10sIGNvbGxpc2lvbkNpcmNsZXNbayArIDFdLCBjb2xsaXNpb25DaXJjbGVzW2sgKyAyXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9qZWN0QW5jaG9yKHBvc01hdHJpeDogbWF0NCwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcCA9IFt4LCB5LCAwLCAxXTtcbiAgICAgICAgcHJvamVjdGlvbi54eVRyYW5zZm9ybU1hdDQocCwgcCwgcG9zTWF0cml4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBlcnNwZWN0aXZlUmF0aW86IDAuNSArIDAuNSAqICh0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIC8gcFszXSksXG4gICAgICAgICAgICBjYW1lcmFEaXN0YW5jZTogcFszXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByb2plY3RQb2ludChwb3NNYXRyaXg6IG1hdDQsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBbeCwgeSwgMCwgMV07XG4gICAgICAgIHByb2plY3Rpb24ueHlUcmFuc2Zvcm1NYXQ0KHAsIHAsIHBvc01hdHJpeCk7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQoXG4gICAgICAgICAgICAoKChwWzBdIC8gcFszXSArIDEpIC8gMikgKiB0aGlzLnRyYW5zZm9ybS53aWR0aCkgKyB2aWV3cG9ydFBhZGRpbmcsXG4gICAgICAgICAgICAoKCgtcFsxXSAvIHBbM10gKyAxKSAvIDIpICogdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KSArIHZpZXdwb3J0UGFkZGluZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvKHBvc01hdHJpeDogbWF0NCwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcCA9IFt4LCB5LCAwLCAxXTtcbiAgICAgICAgcHJvamVjdGlvbi54eVRyYW5zZm9ybU1hdDQocCwgcCwgcG9zTWF0cml4KTtcbiAgICAgICAgY29uc3QgYSA9IG5ldyBQb2ludChcbiAgICAgICAgICAgICgoKHBbMF0gLyBwWzNdICsgMSkgLyAyKSAqIHRoaXMudHJhbnNmb3JtLndpZHRoKSArIHZpZXdwb3J0UGFkZGluZyxcbiAgICAgICAgICAgICgoKC1wWzFdIC8gcFszXSArIDEpIC8gMikgKiB0aGlzLnRyYW5zZm9ybS5oZWlnaHQpICsgdmlld3BvcnRQYWRkaW5nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb2ludDogYSxcbiAgICAgICAgICAgIC8vIFNlZSBwZXJzcGVjdGl2ZSByYXRpbyBjb21tZW50IGluIHN5bWJvbF9zZGYudmVydGV4XG4gICAgICAgICAgICAvLyBXZSdyZSBkb2luZyBjb2xsaXNpb24gZGV0ZWN0aW9uIGluIHZpZXdwb3J0IHNwYWNlIHNvIHdlIG5lZWRcbiAgICAgICAgICAgIC8vIHRvIHNjYWxlIGRvd24gYm94ZXMgaW4gdGhlIGRpc3RhbmNlXG4gICAgICAgICAgICBwZXJzcGVjdGl2ZVJhdGlvOiAwLjUgKyAwLjUgKiAodGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHBbM10pXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaXNPZmZzY3JlZW4oeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgICAgICByZXR1cm4geDIgPCB2aWV3cG9ydFBhZGRpbmcgfHwgeDEgPj0gdGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5IHx8IHkyIDwgdmlld3BvcnRQYWRkaW5nIHx8IHkxID4gdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeTtcbiAgICB9XG5cbiAgICBpc0luc2lkZUdyaWQoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgICAgICByZXR1cm4geDIgPj0gMCAmJiB4MSA8IHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnkgJiYgeTIgPj0gMCAmJiB5MSA8IHRoaXMuZ3JpZEJvdHRvbUJvdW5kYXJ5O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbWFya0NvbGxpc2lvbkNpcmNsZVVzZWQoY29sbGlzaW9uQ2lyY2xlczogQXJyYXk8bnVtYmVyPiwgaW5kZXg6IG51bWJlciwgdXNlZDogYm9vbGVhbikge1xuICAgIGNvbGxpc2lvbkNpcmNsZXNbaW5kZXggKyA0XSA9IHVzZWQgPyAxIDogMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sbGlzaW9uSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBwaXhlbCB2YWx1ZSBhdCBhIHRoZSBnaXZlbiB6b29tIGxldmVsIHRvIHRpbGUgdW5pdHMuXG4gKlxuICogVGhlIHNoYWRlcnMgbW9zdGx5IGNhbGN1bGF0ZSBldmVyeXRoaW5nIGluIHRpbGUgdW5pdHMgc28gc3R5bGVcbiAqIHByb3BlcnRpZXMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgZnJvbSBwaXhlbHMgdG8gdGlsZSB1bml0cyB1c2luZyB0aGlzLlxuICpcbiAqIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGJ5IDMwIHBpeGVscyBhdCB6b29tIDYuNSB3aWxsIGJlIGFcbiAqIHRyYW5zbGF0aW9uIGJ5IHBpeGVsc1RvVGlsZVVuaXRzKDMwLCA2LjUpIHRpbGUgdW5pdHMuXG4gKlxuICogQHJldHVybnMgdmFsdWUgaW4gdGlsZSB1bml0c1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn0sIHBpeGVsVmFsdWU6IG51bWJlciwgejogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGl4ZWxWYWx1ZSAqIChFWFRFTlQgLyAodGlsZS50aWxlU2l6ZSAqIE1hdGgucG93KDIsIHogLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWikpKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xsaXNpb25JbmRleCBmcm9tICcuL2NvbGxpc2lvbl9pbmRleCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQgKiBhcyBwcm9qZWN0aW9uIGZyb20gJy4vcHJvamVjdGlvbic7XG5pbXBvcnQge2dldEFuY2hvckp1c3RpZmljYXRpb24sIGV2YWx1YXRlVmFyaWFibGVPZmZzZXR9IGZyb20gJy4vc3ltYm9sX2xheW91dCc7XG5pbXBvcnQge2dldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGV9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCwge0NvbGxpc2lvbkFycmF5cywgU2luZ2xlQ29sbGlzaW9uQm94fSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5LCBDb2xsaXNpb25WZXJ0ZXhBcnJheSwgU3ltYm9sSW5zdGFuY2V9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHR5cGUgRmVhdHVyZUluZGV4IGZyb20gJy4uL2RhdGEvZmVhdHVyZV9pbmRleCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1RleHRBbmNob3J9IGZyb20gJy4vc3ltYm9sX2xheW91dCc7XG5cbmNsYXNzIE9wYWNpdHlTdGF0ZSB7XG4gICAgb3BhY2l0eTogbnVtYmVyO1xuICAgIHBsYWNlZDogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihwcmV2U3RhdGU6ID9PcGFjaXR5U3RhdGUsIGluY3JlbWVudDogbnVtYmVyLCBwbGFjZWQ6IGJvb2xlYW4sIHNraXBGYWRlOiA/Ym9vbGVhbikge1xuICAgICAgICBpZiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLm9wYWNpdHkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBwcmV2U3RhdGUub3BhY2l0eSArIChwcmV2U3RhdGUucGxhY2VkID8gaW5jcmVtZW50IDogLWluY3JlbWVudCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BhY2l0eSA9IChza2lwRmFkZSAmJiBwbGFjZWQpID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wbGFjZWQgPSBwbGFjZWQ7XG4gICAgfVxuICAgIGlzSGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGFjaXR5ID09PSAwICYmICF0aGlzLnBsYWNlZDtcbiAgICB9XG59XG5cbmNsYXNzIEpvaW50T3BhY2l0eVN0YXRlIHtcbiAgICB0ZXh0OiBPcGFjaXR5U3RhdGU7XG4gICAgaWNvbjogT3BhY2l0eVN0YXRlO1xuICAgIGNvbnN0cnVjdG9yKHByZXZTdGF0ZTogP0pvaW50T3BhY2l0eVN0YXRlLCBpbmNyZW1lbnQ6IG51bWJlciwgcGxhY2VkVGV4dDogYm9vbGVhbiwgcGxhY2VkSWNvbjogYm9vbGVhbiwgc2tpcEZhZGU6ID9ib29sZWFuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IG5ldyBPcGFjaXR5U3RhdGUocHJldlN0YXRlID8gcHJldlN0YXRlLnRleHQgOiBudWxsLCBpbmNyZW1lbnQsIHBsYWNlZFRleHQsIHNraXBGYWRlKTtcbiAgICAgICAgdGhpcy5pY29uID0gbmV3IE9wYWNpdHlTdGF0ZShwcmV2U3RhdGUgPyBwcmV2U3RhdGUuaWNvbiA6IG51bGwsIGluY3JlbWVudCwgcGxhY2VkSWNvbiwgc2tpcEZhZGUpO1xuICAgIH1cbiAgICBpc0hpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5pc0hpZGRlbigpICYmIHRoaXMuaWNvbi5pc0hpZGRlbigpO1xuICAgIH1cbn1cblxuY2xhc3MgSm9pbnRQbGFjZW1lbnQge1xuICAgIHRleHQ6IGJvb2xlYW47XG4gICAgaWNvbjogYm9vbGVhbjtcbiAgICAvLyBza2lwRmFkZSA9IG91dHNpZGUgdmlld3BvcnQsIGJ1dCB3aXRoaW4gQ29sbGlzaW9uSW5kZXg6OnZpZXdwb3J0UGFkZGluZyBweCBvZiB0aGUgZWRnZVxuICAgIC8vIEJlY2F1c2UgdGhlc2Ugc3ltYm9scyBhcmVuJ3Qgb25zY3JlZW4geWV0LCB3ZSBjYW4gc2tpcCB0aGUgXCJmYWRlIGluXCIgYW5pbWF0aW9uLFxuICAgIC8vIGFuZCBpZiBhIHN1YnNlcXVlbnQgdmlld3BvcnQgY2hhbmdlIGJyaW5ncyB0aGVtIGludG8gdmlldywgdGhleSdsbCBiZSBmdWxseVxuICAgIC8vIHZpc2libGUgcmlnaHQgYXdheS5cbiAgICBza2lwRmFkZTogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0OiBib29sZWFuLCBpY29uOiBib29sZWFuLCBza2lwRmFkZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLmljb24gPSBpY29uO1xuICAgICAgICB0aGlzLnNraXBGYWRlID0gc2tpcEZhZGU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmV0YWluZWRRdWVyeURhdGEge1xuICAgIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcjtcbiAgICBmZWF0dXJlSW5kZXg6IEZlYXR1cmVJbmRleDtcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXI7XG4gICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQ7XG4gICAgZmVhdHVyZVNvcnRPcmRlcjogP0FycmF5PG51bWJlcj5cbiAgICBjb25zdHJ1Y3RvcihidWNrZXRJbnN0YW5jZUlkOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4OiBGZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIHRoaXMuYnVja2V0SW5zdGFuY2VJZCA9IGJ1Y2tldEluc3RhbmNlSWQ7XG4gICAgICAgIHRoaXMuZmVhdHVyZUluZGV4ID0gZmVhdHVyZUluZGV4O1xuICAgICAgICB0aGlzLnNvdXJjZUxheWVySW5kZXggPSBzb3VyY2VMYXllckluZGV4O1xuICAgICAgICB0aGlzLmJ1Y2tldEluZGV4ID0gYnVja2V0SW5kZXg7XG4gICAgICAgIHRoaXMudGlsZUlEID0gdGlsZUlEO1xuICAgIH1cbn1cblxudHlwZSBDb2xsaXNpb25Hcm91cCA9IHsgSUQ6IG51bWJlciwgcHJlZGljYXRlPzogYW55IH07XG5cbmNsYXNzIENvbGxpc2lvbkdyb3VwcyB7XG4gICAgY29sbGlzaW9uR3JvdXBzOiB7W2dyb3VwTmFtZTogc3RyaW5nXTogQ29sbGlzaW9uR3JvdXB9O1xuICAgIG1heEdyb3VwSUQ6IG51bWJlcjtcbiAgICBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jcm9zc1NvdXJjZUNvbGxpc2lvbnMgPSBjcm9zc1NvdXJjZUNvbGxpc2lvbnM7XG4gICAgICAgIHRoaXMubWF4R3JvdXBJRCA9IDA7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uR3JvdXBzID0ge307XG4gICAgfVxuXG4gICAgZ2V0KHNvdXJjZUlEOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gVGhlIHByZWRpY2F0ZS9ncm91cElEIG1lY2hhbmlzbSBhbGxvd3MgZm9yIGFyYml0cmFyeSBncm91cGluZyxcbiAgICAgICAgLy8gYnV0IHRoZSBjdXJyZW50IGludGVyZmFjZSBkZWZpbmVzIG9uZSBzb3VyY2UgPT0gb25lIGdyb3VwIHdoZW5cbiAgICAgICAgLy8gY3Jvc3NTb3VyY2VDb2xsaXNpb25zID09IHRydWUuXG4gICAgICAgIGlmICghdGhpcy5jcm9zc1NvdXJjZUNvbGxpc2lvbnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb2xsaXNpb25Hcm91cHNbc291cmNlSURdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEdyb3VwSUQgPSArK3RoaXMubWF4R3JvdXBJRDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkdyb3Vwc1tzb3VyY2VJRF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIElEOiBuZXh0R3JvdXBJRCxcbiAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmNvbGxpc2lvbkdyb3VwSUQgPT09IG5leHRHcm91cElEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxpc2lvbkdyb3Vwc1tzb3VyY2VJRF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge0lEOiAwLCBwcmVkaWNhdGU6IG51bGx9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVWYXJpYWJsZUxheW91dFNoaWZ0KGFuY2hvcjogVGV4dEFuY2hvciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sIHRleHRCb3hTY2FsZTogbnVtYmVyKTogUG9pbnQge1xuICAgIGNvbnN0IHtob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ259ID0gZ2V0QW5jaG9yQWxpZ25tZW50KGFuY2hvcik7XG4gICAgY29uc3Qgc2hpZnRYID0gLShob3Jpem9udGFsQWxpZ24gLSAwLjUpICogd2lkdGg7XG4gICAgY29uc3Qgc2hpZnRZID0gLSh2ZXJ0aWNhbEFsaWduIC0gMC41KSAqIGhlaWdodDtcbiAgICBjb25zdCBvZmZzZXQgPSBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGFuY2hvciwgdGV4dE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgc2hpZnRYICsgb2Zmc2V0WzBdICogdGV4dEJveFNjYWxlLFxuICAgICAgICBzaGlmdFkgKyBvZmZzZXRbMV0gKiB0ZXh0Qm94U2NhbGVcbiAgICApO1xufVxuXG5mdW5jdGlvbiBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KGNvbGxpc2lvbkJveDogU2luZ2xlQ29sbGlzaW9uQm94LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0WDogbnVtYmVyLCBzaGlmdFk6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVXaXRoTWFwOiBib29sZWFuLCBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGU6IG51bWJlcikge1xuICAgIGNvbnN0IHt4MSwgeDIsIHkxLCB5MiwgYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFl9ID0gY29sbGlzaW9uQm94O1xuICAgIGNvbnN0IHJvdGF0ZWRPZmZzZXQgPSBuZXcgUG9pbnQoc2hpZnRYLCBzaGlmdFkpO1xuICAgIGlmIChyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgIHJvdGF0ZWRPZmZzZXQuX3JvdGF0ZShwaXRjaFdpdGhNYXAgPyBhbmdsZSA6IC1hbmdsZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHgxOiB4MSArIHJvdGF0ZWRPZmZzZXQueCxcbiAgICAgICAgeTE6IHkxICsgcm90YXRlZE9mZnNldC55LFxuICAgICAgICB4MjogeDIgKyByb3RhdGVkT2Zmc2V0LngsXG4gICAgICAgIHkyOiB5MiArIHJvdGF0ZWRPZmZzZXQueSxcbiAgICAgICAgLy8gc3ltYm9sIGFuY2hvciBwb2ludCBzdGF5cyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHRleHQtYW5jaG9yXG4gICAgICAgIGFuY2hvclBvaW50WCxcbiAgICAgICAgYW5jaG9yUG9pbnRZXG4gICAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVmFyaWFibGVPZmZzZXQgPSB7XG4gICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGFuY2hvcjogVGV4dEFuY2hvcixcbiAgICB0ZXh0Qm94U2NhbGU6IG51bWJlcixcbiAgICBwcmV2QW5jaG9yPzogVGV4dEFuY2hvclxufTtcblxuZXhwb3J0IHR5cGUgQ3Jvc3NUaWxlSUQgPSBzdHJpbmcgfCBudW1iZXI7XG5cbmV4cG9ydCBjbGFzcyBQbGFjZW1lbnQge1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIGNvbGxpc2lvbkluZGV4OiBDb2xsaXNpb25JbmRleDtcbiAgICBwbGFjZW1lbnRzOiB7IFtDcm9zc1RpbGVJRF06IEpvaW50UGxhY2VtZW50IH07XG4gICAgb3BhY2l0aWVzOiB7IFtDcm9zc1RpbGVJRF06IEpvaW50T3BhY2l0eVN0YXRlIH07XG4gICAgdmFyaWFibGVPZmZzZXRzOiB7W0Nyb3NzVGlsZUlEXTogVmFyaWFibGVPZmZzZXQgfTtcbiAgICBwbGFjZWRPcmllbnRhdGlvbnM6IHtbQ3Jvc3NUaWxlSURdOiBudW1iZXIgfTtcbiAgICBjb21taXRUaW1lOiBudW1iZXI7XG4gICAgbGFzdFBsYWNlbWVudENoYW5nZVRpbWU6IG51bWJlcjtcbiAgICBzdGFsZTogYm9vbGVhbjtcbiAgICBmYWRlRHVyYXRpb246IG51bWJlcjtcbiAgICByZXRhaW5lZFF1ZXJ5RGF0YToge1tudW1iZXJdOiBSZXRhaW5lZFF1ZXJ5RGF0YX07XG4gICAgY29sbGlzaW9uR3JvdXBzOiBDb2xsaXNpb25Hcm91cHM7XG4gICAgcHJldlBsYWNlbWVudDogP1BsYWNlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybTogVHJhbnNmb3JtLCBmYWRlRHVyYXRpb246IG51bWJlciwgY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuLCBwcmV2UGxhY2VtZW50PzogUGxhY2VtZW50KSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtLmNsb25lKCk7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXggPSBuZXcgQ29sbGlzaW9uSW5kZXgodGhpcy50cmFuc2Zvcm0pO1xuICAgICAgICB0aGlzLnBsYWNlbWVudHMgPSB7fTtcbiAgICAgICAgdGhpcy5vcGFjaXRpZXMgPSB7fTtcbiAgICAgICAgdGhpcy52YXJpYWJsZU9mZnNldHMgPSB7fTtcbiAgICAgICAgdGhpcy5zdGFsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbW1pdFRpbWUgPSAwO1xuICAgICAgICB0aGlzLmZhZGVEdXJhdGlvbiA9IGZhZGVEdXJhdGlvbjtcbiAgICAgICAgdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmNvbGxpc2lvbkdyb3VwcyA9IG5ldyBDb2xsaXNpb25Hcm91cHMoY3Jvc3NTb3VyY2VDb2xsaXNpb25zKTtcblxuICAgICAgICB0aGlzLnByZXZQbGFjZW1lbnQgPSBwcmV2UGxhY2VtZW50O1xuICAgICAgICBpZiAocHJldlBsYWNlbWVudCkge1xuICAgICAgICAgICAgcHJldlBsYWNlbWVudC5wcmV2UGxhY2VtZW50ID0gdW5kZWZpbmVkOyAvLyBPbmx5IGhvbGQgb24gdG8gb25lIHBsYWNlbWVudCBiYWNrXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsYWNlZE9yaWVudGF0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHBsYWNlTGF5ZXJUaWxlKHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIsIHRpbGU6IFRpbGUsIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbiwgc2VlbkNyb3NzVGlsZUlEczogeyBbc3RyaW5nIHwgbnVtYmVyXTogYm9vbGVhbiB9KSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbEJ1Y2tldCA9ICgodGlsZS5nZXRCdWNrZXQoc3R5bGVMYXllcik6IGFueSk6IFN5bWJvbEJ1Y2tldCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmVJbmRleCA9IHRpbGUubGF0ZXN0RmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoIXN5bWJvbEJ1Y2tldCB8fCAhYnVja2V0RmVhdHVyZUluZGV4IHx8IHN0eWxlTGF5ZXIuaWQgIT09IHN5bWJvbEJ1Y2tldC5sYXllcklkc1swXSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBjb2xsaXNpb25Cb3hBcnJheSA9IHRpbGUuY29sbGlzaW9uQm94QXJyYXk7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0ID0gc3ltYm9sQnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG5cbiAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB0aGlzLnRyYW5zZm9ybS56b29tIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCB0ZXh0UGl4ZWxSYXRpbyA9IHRpbGUudGlsZVNpemUgLyBFWFRFTlQ7XG5cbiAgICAgICAgY29uc3QgcG9zTWF0cml4ID0gdGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHRpbGUudGlsZUlELnRvVW53cmFwcGVkKCkpO1xuXG4gICAgICAgIGNvbnN0IHRleHRMYWJlbFBsYW5lTWF0cml4ID0gcHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4KHBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJyxcbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJyxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0aGlzLnRyYW5zZm9ybS56b29tKSk7XG5cbiAgICAgICAgY29uc3QgaWNvbkxhYmVsUGxhbmVNYXRyaXggPSBwcm9qZWN0aW9uLmdldExhYmVsUGxhbmVNYXRyaXgocG9zTWF0cml4LFxuICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnLFxuICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRoaXMudHJhbnNmb3JtLnpvb20pKTtcblxuICAgICAgICAvLyBBcyBsb25nIGFzIHRoaXMgcGxhY2VtZW50IGxpdmVzLCB3ZSBoYXZlIHRvIGhvbGQgb250byB0aGlzIGJ1Y2tldCdzXG4gICAgICAgIC8vIG1hdGNoaW5nIEZlYXR1cmVJbmRleC9kYXRhIGZvciBxdWVyeWluZyBwdXJwb3Nlc1xuICAgICAgICB0aGlzLnJldGFpbmVkUXVlcnlEYXRhW3N5bWJvbEJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkXSA9IG5ldyBSZXRhaW5lZFF1ZXJ5RGF0YShcbiAgICAgICAgICAgIHN5bWJvbEJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkLFxuICAgICAgICAgICAgYnVja2V0RmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgc3ltYm9sQnVja2V0LnNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICBzeW1ib2xCdWNrZXQuaW5kZXgsXG4gICAgICAgICAgICB0aWxlLnRpbGVJRFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBsYWNlTGF5ZXJCdWNrZXQoc3ltYm9sQnVja2V0LCBwb3NNYXRyaXgsIHRleHRMYWJlbFBsYW5lTWF0cml4LCBpY29uTGFiZWxQbGFuZU1hdHJpeCwgc2NhbGUsIHRleHRQaXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgIHNob3dDb2xsaXNpb25Cb3hlcywgdGlsZS5ob2xkaW5nRm9yRmFkZSgpLCBzZWVuQ3Jvc3NUaWxlSURzLCBjb2xsaXNpb25Cb3hBcnJheSk7XG4gICAgfVxuXG4gICAgYXR0ZW1wdEFuY2hvclBsYWNlbWVudChhbmNob3I6IFRleHRBbmNob3IsIHRleHRCb3g6IFNpbmdsZUNvbGxpc2lvbkJveCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94U2NhbGU6IG51bWJlciwgcm90YXRlV2l0aE1hcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbiwgdGV4dFBpeGVsUmF0aW86IG51bWJlciwgcG9zTWF0cml4OiBtYXQ0LCBjb2xsaXNpb25Hcm91cDogQ29sbGlzaW9uR3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxsb3dPdmVybGFwOiBib29sZWFuLCBzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIGJ1Y2tldDogU3ltYm9sQnVja2V0LCBvcmllbnRhdGlvbjogbnVtYmVyKTogP3sgc2hpZnQ6IFBvaW50LCBwbGFjZWRHbHlwaEJveGVzOiB7IGJveDogQXJyYXk8bnVtYmVyPiwgb2Zmc2NyZWVuOiBib29sZWFuIH0gfSAge1xuXG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBbc3ltYm9sSW5zdGFuY2UudGV4dE9mZnNldDAsIHN5bWJvbEluc3RhbmNlLnRleHRPZmZzZXQxXTtcbiAgICAgICAgY29uc3Qgc2hpZnQgPSBjYWxjdWxhdGVWYXJpYWJsZUxheW91dFNoaWZ0KGFuY2hvciwgd2lkdGgsIGhlaWdodCwgdGV4dE9mZnNldCwgdGV4dEJveFNjYWxlKTtcblxuICAgICAgICBjb25zdCBwbGFjZWRHbHlwaEJveGVzID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChcbiAgICAgICAgICAgIHNoaWZ0VmFyaWFibGVDb2xsaXNpb25Cb3goXG4gICAgICAgICAgICAgICAgdGV4dEJveCwgc2hpZnQueCwgc2hpZnQueSxcbiAgICAgICAgICAgICAgICByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHRoaXMudHJhbnNmb3JtLmFuZ2xlKSxcbiAgICAgICAgICAgIHRleHRBbGxvd092ZXJsYXAsIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsIGNvbGxpc2lvbkdyb3VwLnByZWRpY2F0ZSk7XG5cbiAgICAgICAgaWYgKHBsYWNlZEdseXBoQm94ZXMuYm94Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBwcmV2QW5jaG9yO1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBsYWJlbCB3YXMgcGxhY2VkIGluIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQsIHJlY29yZCB0aGUgYW5jaG9yIHBvc2l0aW9uXG4gICAgICAgICAgICAvLyB0byBhbGxvdyB1cyB0byBhbmltYXRlIHRoZSB0cmFuc2l0aW9uXG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2UGxhY2VtZW50ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZQbGFjZW1lbnQucGxhY2VtZW50c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZQbGFjZW1lbnQucGxhY2VtZW50c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0udGV4dCkge1xuICAgICAgICAgICAgICAgIHByZXZBbmNob3IgPSB0aGlzLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXS5hbmNob3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3NlcnQoc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgIT09IDApO1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0ge1xuICAgICAgICAgICAgICAgIHRleHRPZmZzZXQsXG4gICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgICAgICB0ZXh0Qm94U2NhbGUsXG4gICAgICAgICAgICAgICAgcHJldkFuY2hvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGJ1Y2tldCwgYW5jaG9yLCBzeW1ib2xJbnN0YW5jZSwgb3JpZW50YXRpb24pO1xuXG4gICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkT3JpZW50YXRpb24oYnVja2V0LCBvcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VkT3JpZW50YXRpb25zW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG9yaWVudGF0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge3NoaWZ0LCBwbGFjZWRHbHlwaEJveGVzfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBsYWNlTGF5ZXJCdWNrZXQoYnVja2V0OiBTeW1ib2xCdWNrZXQsIHBvc01hdHJpeDogbWF0NCwgdGV4dExhYmVsUGxhbmVNYXRyaXg6IG1hdDQsIGljb25MYWJlbFBsYW5lTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgc2NhbGU6IG51bWJlciwgdGV4dFBpeGVsUmF0aW86IG51bWJlciwgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuLCBob2xkaW5nRm9yRmFkZTogYm9vbGVhbiwgc2VlbkNyb3NzVGlsZUlEczogeyBbc3RyaW5nIHwgbnVtYmVyXTogYm9vbGVhbiB9LFxuICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXk6ID9Db2xsaXNpb25Cb3hBcnJheSkge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBidWNrZXQubGF5ZXJzWzBdLmxheW91dDtcbiAgICAgICAgY29uc3QgcGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20oYnVja2V0LnRleHRTaXplRGF0YSwgdGhpcy50cmFuc2Zvcm0uem9vbSk7XG4gICAgICAgIGNvbnN0IHRleHRPcHRpb25hbCA9IGxheW91dC5nZXQoJ3RleHQtb3B0aW9uYWwnKTtcbiAgICAgICAgY29uc3QgaWNvbk9wdGlvbmFsID0gbGF5b3V0LmdldCgnaWNvbi1vcHRpb25hbCcpO1xuICAgICAgICBjb25zdCB0ZXh0QWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgndGV4dC1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IGljb25BbGxvd092ZXJsYXAgPSBsYXlvdXQuZ2V0KCdpY29uLWFsbG93LW92ZXJsYXAnKTtcbiAgICAgICAgLy8gVGhpcyBsb2dpYyBpcyBzaW1pbGFyIHRvIHRoZSBcImRlZmF1bHRPcGFjaXR5U3RhdGVcIiBsb2dpYyBiZWxvdyBpbiB1cGRhdGVCdWNrZXRPcGFjaXRpZXNcbiAgICAgICAgLy8gSWYgd2Uga25vdyBhIHN5bWJvbCBpcyBhbHdheXMgc3VwcG9zZWQgdG8gc2hvdywgZm9yY2UgaXQgdG8gYmUgbWFya2VkIHZpc2libGUgZXZlbiBpZlxuICAgICAgICAvLyBpdCB3YXNuJ3QgcGxhY2VkIGludG8gdGhlIGNvbGxpc2lvbiBpbmRleCAoYmVjYXVzZSBzb21lIG9yIGFsbCBvZiBpdCB3YXMgb3V0c2lkZSB0aGUgcmFuZ2VcbiAgICAgICAgLy8gb2YgdGhlIGNvbGxpc2lvbiBncmlkKS5cbiAgICAgICAgLy8gVGhlcmUgaXMgYSBzdWJ0bGUgZWRnZSBjYXNlIGhlcmUgd2UncmUgYWNjZXB0aW5nOlxuICAgICAgICAvLyAgU3ltYm9sIEEgaGFzIHRleHQtYWxsb3ctb3ZlcmxhcDogdHJ1ZSwgaWNvbi1hbGxvdy1vdmVybGFwOiB0cnVlLCBpY29uLW9wdGlvbmFsOiBmYWxzZVxuICAgICAgICAvLyAgQSdzIGljb24gaXMgb3V0c2lkZSB0aGUgZ3JpZCwgc28gZG9lc24ndCBnZXQgcGxhY2VkXG4gICAgICAgIC8vICBBJ3MgdGV4dCB3b3VsZCBiZSBpbnNpZGUgZ3JpZCwgYnV0IGRvZXNuJ3QgZ2V0IHBsYWNlZCBiZWNhdXNlIG9mIGljb24tb3B0aW9uYWw6IGZhbHNlXG4gICAgICAgIC8vICBXZSBzdGlsbCBzaG93IEEgYmVjYXVzZSBvZiB0aGUgYWxsb3ctb3ZlcmxhcCBzZXR0aW5ncy5cbiAgICAgICAgLy8gIFN5bWJvbCBCIGhhcyBhbGxvdy1vdmVybGFwOiBmYWxzZSwgYW5kIGdldHMgcGxhY2VkIHdoZXJlIEEncyB0ZXh0IHdvdWxkIGJlXG4gICAgICAgIC8vICBPbiBwYW5uaW5nIGluLCB0aGVyZSBpcyBhIHNob3J0IHBlcmlvZCB3aGVuIFN5bWJvbCBCIGFuZCBTeW1ib2wgQSB3aWxsIG92ZXJsYXBcbiAgICAgICAgLy8gIFRoaXMgaXMgdGhlIHJldmVyc2Ugb2Ygb3VyIG5vcm1hbCBwb2xpY3kgb2YgXCJmYWRlIGluIG9uIHBhblwiLCBidXQgc2hvdWxkIGxvb2sgbGlrZSBhbnkgb3RoZXJcbiAgICAgICAgLy8gIGNvbGxpc2lvbiBhbmQgaG9wZWZ1bGx5IG5vdCBiZSB0b28gbm90aWNlYWJsZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83MTcyXG4gICAgICAgIGNvbnN0IGFsd2F5c1Nob3dUZXh0ID0gdGV4dEFsbG93T3ZlcmxhcCAmJiAoaWNvbkFsbG93T3ZlcmxhcCB8fCAhYnVja2V0Lmhhc0ljb25EYXRhKCkgfHwgaWNvbk9wdGlvbmFsKTtcbiAgICAgICAgY29uc3QgYWx3YXlzU2hvd0ljb24gPSBpY29uQWxsb3dPdmVybGFwICYmICh0ZXh0QWxsb3dPdmVybGFwIHx8ICFidWNrZXQuaGFzVGV4dERhdGEoKSB8fCB0ZXh0T3B0aW9uYWwpO1xuXG4gICAgICAgIGNvbnN0IGNvbGxpc2lvbkdyb3VwID0gdGhpcy5jb2xsaXNpb25Hcm91cHMuZ2V0KGJ1Y2tldC5zb3VyY2VJRCk7XG5cbiAgICAgICAgY29uc3Qgcm90YXRlV2l0aE1hcCA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCBwaXRjaFdpdGhNYXAgPSBsYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJztcbiAgICAgICAgY29uc3QgaGFzSWNvblRleHRGaXQgPSBsYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJztcbiAgICAgICAgY29uc3Qgek9yZGVyQnlWaWV3cG9ydFkgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtei1vcmRlcicpID09PSAndmlld3BvcnQteSc7XG5cbiAgICAgICAgaWYgKCFidWNrZXQuY29sbGlzaW9uQXJyYXlzICYmIGNvbGxpc2lvbkJveEFycmF5KSB7XG4gICAgICAgICAgICBidWNrZXQuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhjb2xsaXNpb25Cb3hBcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwbGFjZVN5bWJvbCA9IChzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIGNvbGxpc2lvbkFycmF5czogQ29sbGlzaW9uQXJyYXlzKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VlbkNyb3NzVGlsZUlEc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0pIHJldHVybjtcbiAgICAgICAgICAgIGlmIChob2xkaW5nRm9yRmFkZSkge1xuICAgICAgICAgICAgICAgIC8vIE1hcmsgYWxsIHN5bWJvbHMgZnJvbSB0aGlzIHRpbGUgYXMgXCJub3QgcGxhY2VkXCIsIGJ1dCBkb24ndCBhZGQgdG8gc2VlbkNyb3NzVGlsZUlEcywgYmVjYXVzZSB3ZSBkb24ndFxuICAgICAgICAgICAgICAgIC8vIGtub3cgeWV0IGlmIHdlIGhhdmUgYSBkdXBsaWNhdGUgaW4gYSBwYXJlbnQgdGlsZSB0aGF0IF9zaG91bGRfIGJlIHBsYWNlZC5cbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlbWVudHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gbmV3IEpvaW50UGxhY2VtZW50KGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBsYWNlVGV4dCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHBsYWNlSWNvbiA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IG9mZnNjcmVlbiA9IHRydWU7XG4gICAgICAgICAgICBsZXQgc2hpZnQgPSBudWxsO1xuXG4gICAgICAgICAgICBsZXQgcGxhY2VkID0ge2JveDogbnVsbCwgb2Zmc2NyZWVuOiBudWxsfTtcbiAgICAgICAgICAgIGxldCBwbGFjZWRWZXJ0aWNhbCA9IHtib3g6IG51bGwsIG9mZnNjcmVlbjogbnVsbH07XG5cbiAgICAgICAgICAgIGxldCBwbGFjZWRHbHlwaEJveGVzID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBwbGFjZWRHbHlwaENpcmNsZXMgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHBsYWNlZEljb25Cb3hlcyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgdGV4dEZlYXR1cmVJbmRleCA9IDA7XG4gICAgICAgICAgICBsZXQgdmVydGljYWxUZXh0RmVhdHVyZUluZGV4ID0gMDtcbiAgICAgICAgICAgIGxldCBpY29uRmVhdHVyZUluZGV4ID0gMDtcblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGV4dEZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXggPSBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0RmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0ZXh0Qm94ID0gY29sbGlzaW9uQXJyYXlzLnRleHRCb3g7XG4gICAgICAgICAgICBpZiAodGV4dEJveCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlUHJldmlvdXNPcmllbnRhdGlvbklmTm90UGxhY2VkID0gKGlzUGxhY2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2aW91c09yaWVudGF0aW9uID0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICFpc1BsYWNlZCAmJiB0aGlzLnByZXZQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZQbGFjZWRPcmllbnRhdGlvbiA9IHRoaXMucHJldlBsYWNlbWVudC5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZQbGFjZWRPcmllbnRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2VkT3JpZW50YXRpb25zW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IHByZXZQbGFjZWRPcmllbnRhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c09yaWVudGF0aW9uID0gcHJldlBsYWNlZE9yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQsIHByZXZpb3VzT3JpZW50YXRpb24sIHN5bWJvbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNPcmllbnRhdGlvbjtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VUZXh0Rm9yUGxhY2VtZW50TW9kZXMgPSAocGxhY2VIb3Jpem9udGFsRm4sIHBsYWNlVmVydGljYWxGbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgc3ltYm9sSW5zdGFuY2UubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID4gMCAmJiBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBsYWNlbWVudE1vZGUgb2YgYnVja2V0LndyaXRpbmdNb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZW1lbnRNb2RlID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWQgPSBwbGFjZVZlcnRpY2FsRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkVmVydGljYWwgPSBwbGFjZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkID0gcGxhY2VIb3Jpem9udGFsRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCA9IHBsYWNlSG9yaXpvbnRhbEZuKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFsYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlQm94ID0gKGNvbGxpc2lvblRleHRCb3gsIG9yaWVudGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWRGZWF0dXJlID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChjb2xsaXNpb25UZXh0Qm94LCBsYXlvdXQuZ2V0KCd0ZXh0LWFsbG93LW92ZXJsYXAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LCBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZEZlYXR1cmUgJiYgcGxhY2VkRmVhdHVyZS5ib3ggJiYgcGxhY2VkRmVhdHVyZS5ib3gubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldCwgb3JpZW50YXRpb24sIHN5bWJvbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBvcmllbnRhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZWRGZWF0dXJlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlSG9yaXpvbnRhbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZUJveCh0ZXh0Qm94LCBXcml0aW5nTW9kZS5ob3Jpem9udGFsKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVZlcnRpY2FsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxUZXh0Qm94ID0gY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwICYmIHZlcnRpY2FsVGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZUJveCh2ZXJ0aWNhbFRleHRCb3gsIFdyaXRpbmdNb2RlLnZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ym94OiBudWxsLCBvZmZzY3JlZW46IG51bGx9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlVGV4dEZvclBsYWNlbWVudE1vZGVzKHBsYWNlSG9yaXpvbnRhbCwgcGxhY2VWZXJ0aWNhbCk7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByZXZpb3VzT3JpZW50YXRpb25JZk5vdFBsYWNlZChwbGFjZWQgJiYgcGxhY2VkLmJveCAmJiBwbGFjZWQuYm94Lmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYW5jaG9ycyA9IGxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBzeW1ib2wgd2FzIGluIHRoZSBsYXN0IHBsYWNlbWVudCwgc2hpZnQgdGhlIHByZXZpb3VzbHkgdXNlZFxuICAgICAgICAgICAgICAgICAgICAvLyBhbmNob3IgdG8gdGhlIGZyb250IG9mIHRoZSBhbmNob3IgbGlzdCwgb25seSBpZiB0aGUgcHJldmlvdXMgYW5jaG9yXG4gICAgICAgICAgICAgICAgICAgIC8vIGlzIHN0aWxsIGluIHRoZSBhbmNob3IgbGlzdFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2UGxhY2VtZW50ICYmIHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2T2Zmc2V0cyA9IHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvcnMuaW5kZXhPZihwcmV2T2Zmc2V0cy5hbmNob3IpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMgPSBhbmNob3JzLmZpbHRlcihhbmNob3IgPT4gYW5jaG9yICE9PSBwcmV2T2Zmc2V0cy5hbmNob3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMudW5zaGlmdChwcmV2T2Zmc2V0cy5hbmNob3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2VCb3hGb3JWYXJpYWJsZUFuY2hvcnMgPSAoY29sbGlzaW9uVGV4dEJveCwgb3JpZW50YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gY29sbGlzaW9uVGV4dEJveC54MiAtIGNvbGxpc2lvblRleHRCb3gueDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjb2xsaXNpb25UZXh0Qm94LnkyIC0gY29sbGlzaW9uVGV4dEJveC55MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRCb3hTY2FsZSA9IHN5bWJvbEluc3RhbmNlLnRleHRCb3hTY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBsYWNlZEJveDogP3sgYm94OiBBcnJheTxudW1iZXI+LCBvZmZzY3JlZW46IGJvb2xlYW4gfSAgPSB7Ym94OiBbXSwgb2Zmc2NyZWVuOiBmYWxzZX07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnRBdHRlbXB0cyA9IHRleHRBbGxvd092ZXJsYXAgPyBhbmNob3JzLmxlbmd0aCAqIDIgOiBhbmNob3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGxhY2VtZW50QXR0ZW1wdHM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGFuY2hvcnNbaSAlIGFuY2hvcnMubGVuZ3RoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxvd092ZXJsYXAgPSAoaSA+PSBhbmNob3JzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5hdHRlbXB0QW5jaG9yUGxhY2VtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IsIGNvbGxpc2lvblRleHRCb3gsIHdpZHRoLCBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCb3hTY2FsZSwgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Hcm91cCwgYWxsb3dPdmVybGFwLCBzeW1ib2xJbnN0YW5jZSwgYnVja2V0LCBvcmllbnRhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZEJveCA9IHJlc3VsdC5wbGFjZWRHbHlwaEJveGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2VkQm94ICYmIHBsYWNlZEJveC5ib3ggJiYgcGxhY2VkQm94LmJveC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlVGV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IHJlc3VsdC5zaGlmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2VkQm94O1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlSG9yaXpvbnRhbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZUJveEZvclZhcmlhYmxlQW5jaG9ycyh0ZXh0Qm94LCBXcml0aW5nTW9kZS5ob3Jpem9udGFsKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVZlcnRpY2FsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxUZXh0Qm94ID0gY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc1BsYWNlZCA9IHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICF3YXNQbGFjZWQgJiYgc3ltYm9sSW5zdGFuY2UubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID4gMCAmJiB2ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2VCb3hGb3JWYXJpYWJsZUFuY2hvcnModmVydGljYWxUZXh0Qm94LCBXcml0aW5nTW9kZS52ZXJ0aWNhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2JveDogbnVsbCwgb2Zmc2NyZWVuOiBudWxsfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBwbGFjZVRleHRGb3JQbGFjZW1lbnRNb2RlcyhwbGFjZUhvcml6b250YWwsIHBsYWNlVmVydGljYWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlVGV4dCA9IHBsYWNlZC5ib3g7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzY3JlZW4gPSBwbGFjZWQub2Zmc2NyZWVuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldk9yaWVudGF0aW9uID0gdXBkYXRlUHJldmlvdXNPcmllbnRhdGlvbklmTm90UGxhY2VkKHBsYWNlZCAmJiBwbGFjZWQuYm94KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IHBsYWNlZCwgd2Ugc3RpbGwgbmVlZCB0byBjb3B5IG91ciBwb3NpdGlvbiBmcm9tIHRoZSBsYXN0IHBsYWNlbWVudCBmb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gZmFkZSBhbmltYXRpb25zXG4gICAgICAgICAgICAgICAgICAgIGlmICghcGxhY2VUZXh0ICYmIHRoaXMucHJldlBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldk9mZnNldCA9IHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBwcmV2T2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGJ1Y2tldCwgcHJldk9mZnNldC5hbmNob3IsIHN5bWJvbEluc3RhbmNlLCBwcmV2T3JpZW50YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBsYWNlZEdseXBoQm94ZXMgPSBwbGFjZWQ7XG4gICAgICAgICAgICBwbGFjZVRleHQgPSBwbGFjZWRHbHlwaEJveGVzICYmIHBsYWNlZEdseXBoQm94ZXMuYm94ICYmIHBsYWNlZEdseXBoQm94ZXMuYm94Lmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgIG9mZnNjcmVlbiA9IHBsYWNlZEdseXBoQm94ZXMgJiYgcGxhY2VkR2x5cGhCb3hlcy5vZmZzY3JlZW47XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q2lyY2xlcyA9IGNvbGxpc2lvbkFycmF5cy50ZXh0Q2lyY2xlcztcbiAgICAgICAgICAgIGlmICh0ZXh0Q2lyY2xlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlZFN5bWJvbCA9IGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChzeW1ib2xJbnN0YW5jZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGJ1Y2tldC50ZXh0U2l6ZURhdGEsIHBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplLCBwbGFjZWRTeW1ib2wpO1xuICAgICAgICAgICAgICAgIHBsYWNlZEdseXBoQ2lyY2xlcyA9IHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25DaXJjbGVzKHRleHRDaXJjbGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1hbGxvdy1vdmVybGFwJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRQaXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkU3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmxpbmVWZXJ0ZXhBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5nbHlwaE9mZnNldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGFiZWxQbGFuZU1hdHJpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDb2xsaXNpb25Cb3hlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoV2l0aE1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkdyb3VwLnByZWRpY2F0ZSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGV4dC1hbGxvdy1vdmVybGFwIGlzIHNldCwgZm9yY2UgXCJwbGFjZWRDaXJjbGVzXCIgdG8gdHJ1ZVxuICAgICAgICAgICAgICAgIC8vIEluIHRoZW9yeSB0aGVyZSBzaG91bGQgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBjaXJjbGUgcGxhY2VkXG4gICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlLCBidXQgZm9yIG5vdyBxdWlya3MgaW4gdGV4dC1hbmNob3JcbiAgICAgICAgICAgICAgICAvLyBhbmQgdGV4dC1vZmZzZXQgbWF5IHByZXZlbnQgdGhhdCBmcm9tIGJlaW5nIHRydWUuXG4gICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gbGF5b3V0LmdldCgndGV4dC1hbGxvdy1vdmVybGFwJykgfHwgcGxhY2VkR2x5cGhDaXJjbGVzLmNpcmNsZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICBvZmZzY3JlZW4gPSBvZmZzY3JlZW4gJiYgcGxhY2VkR2x5cGhDaXJjbGVzLm9mZnNjcmVlbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWNvbkZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy5pY29uQm94KSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpY29uQm94ID0gaGFzSWNvblRleHRGaXQgJiYgc2hpZnQgP1xuICAgICAgICAgICAgICAgICAgICBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLmljb25Cb3gsIHNoaWZ0LngsIHNoaWZ0LnksXG4gICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHRoaXMudHJhbnNmb3JtLmFuZ2xlKSA6XG4gICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy5pY29uQm94O1xuXG4gICAgICAgICAgICAgICAgcGxhY2VkSWNvbkJveGVzID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChpY29uQm94LFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0LmdldCgnaWNvbi1hbGxvdy1vdmVybGFwJyksIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsIGNvbGxpc2lvbkdyb3VwLnByZWRpY2F0ZSk7XG4gICAgICAgICAgICAgICAgcGxhY2VJY29uID0gcGxhY2VkSWNvbkJveGVzLmJveC5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgIG9mZnNjcmVlbiA9IG9mZnNjcmVlbiAmJiBwbGFjZWRJY29uQm94ZXMub2Zmc2NyZWVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpY29uV2l0aG91dFRleHQgPSB0ZXh0T3B0aW9uYWwgfHxcbiAgICAgICAgICAgICAgICAoc3ltYm9sSW5zdGFuY2UubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMgPT09IDAgJiYgc3ltYm9sSW5zdGFuY2UubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID09PSAwKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaXRob3V0SWNvbiA9IGljb25PcHRpb25hbCB8fCBzeW1ib2xJbnN0YW5jZS5udW1JY29uVmVydGljZXMgPT09IDA7XG5cbiAgICAgICAgICAgIC8vIENvbWJpbmUgdGhlIHNjYWxlcyBmb3IgaWNvbnMgYW5kIHRleHQuXG4gICAgICAgICAgICBpZiAoIWljb25XaXRob3V0VGV4dCAmJiAhdGV4dFdpdGhvdXRJY29uKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VJY29uID0gcGxhY2VUZXh0ID0gcGxhY2VJY29uICYmIHBsYWNlVGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRleHRXaXRob3V0SWNvbikge1xuICAgICAgICAgICAgICAgIHBsYWNlVGV4dCA9IHBsYWNlSWNvbiAmJiBwbGFjZVRleHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpY29uV2l0aG91dFRleHQpIHtcbiAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZUljb24gJiYgcGxhY2VUZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGxhY2VUZXh0ICYmIHBsYWNlZEdseXBoQm94ZXMgJiYgcGxhY2VkR2x5cGhCb3hlcy5ib3gpIHtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VkVmVydGljYWwgJiYgcGxhY2VkVmVydGljYWwuYm94ICYmIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChwbGFjZWRHbHlwaEJveGVzLmJveCwgbGF5b3V0LmdldCgndGV4dC1pZ25vcmUtcGxhY2VtZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCwgdmVydGljYWxUZXh0RmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cC5JRCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gocGxhY2VkR2x5cGhCb3hlcy5ib3gsIGxheW91dC5nZXQoJ3RleHQtaWdub3JlLXBsYWNlbWVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsIHRleHRGZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwLklEKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwbGFjZUljb24gJiYgcGxhY2VkSWNvbkJveGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gocGxhY2VkSWNvbkJveGVzLmJveCwgbGF5b3V0LmdldCgnaWNvbi1pZ25vcmUtcGxhY2VtZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCwgaWNvbkZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXAuSUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBsYWNlVGV4dCAmJiBwbGFjZWRHbHlwaENpcmNsZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkNpcmNsZXMocGxhY2VkR2x5cGhDaXJjbGVzLmNpcmNsZXMsIGxheW91dC5nZXQoJ3RleHQtaWdub3JlLXBsYWNlbWVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsIHRleHRGZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwLklEKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXNzZXJ0KHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEICE9PSAwKTtcbiAgICAgICAgICAgIGFzc2VydChidWNrZXQuYnVja2V0SW5zdGFuY2VJZCAhPT0gMCk7XG5cbiAgICAgICAgICAgIHRoaXMucGxhY2VtZW50c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBuZXcgSm9pbnRQbGFjZW1lbnQocGxhY2VUZXh0IHx8IGFsd2F5c1Nob3dUZXh0LCBwbGFjZUljb24gfHwgYWx3YXlzU2hvd0ljb24sIG9mZnNjcmVlbiB8fCBidWNrZXQuanVzdFJlbG9hZGVkKTtcbiAgICAgICAgICAgIHNlZW5Dcm9zc1RpbGVJRHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoek9yZGVyQnlWaWV3cG9ydFkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluZGV4ZXMgPSBidWNrZXQuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3ltYm9sSW5kZXhlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluZGV4ID0gc3ltYm9sSW5kZXhlc1tpXTtcbiAgICAgICAgICAgICAgICBwbGFjZVN5bWJvbChidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmdldChzeW1ib2xJbmRleCksIGJ1Y2tldC5jb2xsaXNpb25BcnJheXNbc3ltYm9sSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVja2V0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIHBsYWNlU3ltYm9sKGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpLCBidWNrZXQuY29sbGlzaW9uQXJyYXlzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJ1Y2tldC5qdXN0UmVsb2FkZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBtYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0OiBTeW1ib2xCdWNrZXQsIHBsYWNlZEFuY2hvcjogVGV4dEFuY2hvciwgc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlLCBvcmllbnRhdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGp1c3RpZmljYXRpb25zID0ge1xuICAgICAgICAgICAgXCJsZWZ0XCI6IHN5bWJvbEluc3RhbmNlLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICBcImNlbnRlclwiOiBzeW1ib2xJbnN0YW5jZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICBcInJpZ2h0XCI6IHN5bWJvbEluc3RhbmNlLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGF1dG9JbmRleDtcbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgYXV0b0luZGV4ID0gc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdXRvSW5kZXggPSBqdXN0aWZpY2F0aW9uc1tnZXRBbmNob3JKdXN0aWZpY2F0aW9uKHBsYWNlZEFuY2hvcildO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXhlcyA9IFtcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4XG4gICAgICAgIF07XG5cbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRleGVzKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChhdXRvSW5kZXggPj0gMCAmJiBpbmRleCAhPT0gYXV0b0luZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBtdWx0aXBsZSBqdXN0aWZpY2F0aW9ucyBhbmQgdGhpcyBvbmUgaXNuJ3QgaXQ6IHNoaWZ0IG9mZnNjcmVlblxuICAgICAgICAgICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoaW5kZXgpLmNyb3NzVGlsZUlEID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgY2hvc2VuIGp1c3RpZmljYXRpb24gb3IgdGhlIGp1c3RpZmljYXRpb24gaXMgaGFyZHdpcmVkOiB1c2UgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGluZGV4KS5jcm9zc1RpbGVJRCA9IHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hcmtVc2VkT3JpZW50YXRpb24oYnVja2V0OiBTeW1ib2xCdWNrZXQsIG9yaWVudGF0aW9uOiBudW1iZXIsIHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBob3Jpem9udGFsID0gKG9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS5ob3Jpem9udGFsIHx8IG9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS5ob3Jpem9udGFsT25seSkgPyBvcmllbnRhdGlvbiA6IDA7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsID0gb3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsID8gb3JpZW50YXRpb24gOiAwO1xuXG4gICAgICAgIGNvbnN0IGhvcml6b250YWxJbmRleGVzID0gW1xuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XG4gICAgICAgIF07XG5cbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBob3Jpem9udGFsSW5kZXhlcykge1xuICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGluZGV4KS5wbGFjZWRPcmllbnRhdGlvbiA9IGhvcml6b250YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpIHtcbiAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCkucGxhY2VkT3JpZW50YXRpb24gPSB2ZXJ0aWNhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbW1pdChub3c6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbW1pdFRpbWUgPSBub3c7XG5cbiAgICAgICAgY29uc3QgcHJldlBsYWNlbWVudCA9IHRoaXMucHJldlBsYWNlbWVudDtcbiAgICAgICAgbGV0IHBsYWNlbWVudENoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSAocHJldlBsYWNlbWVudCAmJiB0aGlzLmZhZGVEdXJhdGlvbiAhPT0gMCkgP1xuICAgICAgICAgICAgKHRoaXMuY29tbWl0VGltZSAtIHByZXZQbGFjZW1lbnQuY29tbWl0VGltZSkgLyB0aGlzLmZhZGVEdXJhdGlvbiA6XG4gICAgICAgICAgICAxO1xuXG4gICAgICAgIGNvbnN0IHByZXZPcGFjaXRpZXMgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC5vcGFjaXRpZXMgOiB7fTtcbiAgICAgICAgY29uc3QgcHJldk9mZnNldHMgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHMgOiB7fTtcbiAgICAgICAgY29uc3QgcHJldk9yaWVudGF0aW9ucyA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50LnBsYWNlZE9yaWVudGF0aW9ucyA6IHt9O1xuXG4gICAgICAgIC8vIGFkZCB0aGUgb3BhY2l0aWVzIGZyb20gdGhlIGN1cnJlbnQgcGxhY2VtZW50LCBhbmQgY29weSB0aGVpciBjdXJyZW50IHZhbHVlcyBmcm9tIHRoZSBwcmV2aW91cyBwbGFjZW1lbnRcbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiB0aGlzLnBsYWNlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGpvaW50UGxhY2VtZW50ID0gdGhpcy5wbGFjZW1lbnRzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZPcGFjaXR5ID0gcHJldk9wYWNpdGllc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICBpZiAocHJldk9wYWNpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUocHJldk9wYWNpdHksIGluY3JlbWVudCwgam9pbnRQbGFjZW1lbnQudGV4dCwgam9pbnRQbGFjZW1lbnQuaWNvbik7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50Q2hhbmdlZCA9IHBsYWNlbWVudENoYW5nZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgam9pbnRQbGFjZW1lbnQudGV4dCAhPT0gcHJldk9wYWNpdHkudGV4dC5wbGFjZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgam9pbnRQbGFjZW1lbnQuaWNvbiAhPT0gcHJldk9wYWNpdHkuaWNvbi5wbGFjZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSA9IG5ldyBKb2ludE9wYWNpdHlTdGF0ZShudWxsLCBpbmNyZW1lbnQsIGpvaW50UGxhY2VtZW50LnRleHQsIGpvaW50UGxhY2VtZW50Lmljb24sIGpvaW50UGxhY2VtZW50LnNraXBGYWRlKTtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRDaGFuZ2VkID0gcGxhY2VtZW50Q2hhbmdlZCB8fCBqb2ludFBsYWNlbWVudC50ZXh0IHx8IGpvaW50UGxhY2VtZW50Lmljb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb3B5IGFuZCB1cGRhdGUgdmFsdWVzIGZyb20gdGhlIHByZXZpb3VzIHBsYWNlbWVudCB0aGF0IGFyZW4ndCBpbiB0aGUgY3VycmVudCBwbGFjZW1lbnQgYnV0IGhhdmVuJ3QgZmluaXNoZWQgZmFkaW5nXG4gICAgICAgIGZvciAoY29uc3QgY3Jvc3NUaWxlSUQgaW4gcHJldk9wYWNpdGllcykge1xuICAgICAgICAgICAgY29uc3QgcHJldk9wYWNpdHkgPSBwcmV2T3BhY2l0aWVzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgam9pbnRPcGFjaXR5ID0gbmV3IEpvaW50T3BhY2l0eVN0YXRlKHByZXZPcGFjaXR5LCBpbmNyZW1lbnQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFqb2ludE9wYWNpdHkuaXNIaWRkZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBqb2ludE9wYWNpdHk7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudENoYW5nZWQgPSBwbGFjZW1lbnRDaGFuZ2VkIHx8IHByZXZPcGFjaXR5LnRleHQucGxhY2VkIHx8IHByZXZPcGFjaXR5Lmljb24ucGxhY2VkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNyb3NzVGlsZUlEIGluIHByZXZPZmZzZXRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVPZmZzZXRzW2Nyb3NzVGlsZUlEXSAmJiB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gJiYgIXRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9mZnNldHNbY3Jvc3NUaWxlSURdID0gcHJldk9mZnNldHNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiBwcmV2T3JpZW50YXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucGxhY2VkT3JpZW50YXRpb25zW2Nyb3NzVGlsZUlEXSAmJiB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gJiYgIXRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbY3Jvc3NUaWxlSURdID0gcHJldk9yaWVudGF0aW9uc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBsYXN0IGNvbW1pdCgpIHRoYXRcbiAgICAgICAgLy8gcmVzdWx0ZWQgaW4gYSBwbGFjZW1lbnQgY2hhbmdlIC0tIGluIG90aGVyIHdvcmRzLCB0aGUgc3RhcnQgdGltZSBvZlxuICAgICAgICAvLyB0aGUgbGFzdCBzeW1ib2wgZmFkZSBhbmltYXRpb25cbiAgICAgICAgYXNzZXJ0KCFwcmV2UGxhY2VtZW50IHx8IHByZXZQbGFjZW1lbnQubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGlmIChwbGFjZW1lbnRDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lID0gbm93O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50Lmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIDogbm93O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlTGF5ZXJPcGFjaXRpZXMoc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZXM6IEFycmF5PFRpbGU+KSB7XG4gICAgICAgIGNvbnN0IHNlZW5Dcm9zc1RpbGVJRHMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB0aWxlIG9mIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICAgICAgaWYgKHN5bWJvbEJ1Y2tldCAmJiB0aWxlLmxhdGVzdEZlYXR1cmVJbmRleCAmJiBzdHlsZUxheWVyLmlkID09PSBzeW1ib2xCdWNrZXQubGF5ZXJJZHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcyhzeW1ib2xCdWNrZXQsIHNlZW5Dcm9zc1RpbGVJRHMsIHRpbGUuY29sbGlzaW9uQm94QXJyYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQnVja2V0T3BhY2l0aWVzKGJ1Y2tldDogU3ltYm9sQnVja2V0LCBzZWVuQ3Jvc3NUaWxlSURzOiB7IFtzdHJpbmcgfCBudW1iZXJdOiBib29sZWFuIH0sIGNvbGxpc2lvbkJveEFycmF5OiA/Q29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0RGF0YSgpKSBidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uRGF0YSgpKSBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpKSBidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkpIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCk7XG4gICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkNvbGxpc2lvbkNpcmNsZURhdGEoKSkgYnVja2V0Lmljb25Db2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQ2lyY2xlRGF0YSgpKSBidWNrZXQudGV4dENvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO1xuXG4gICAgICAgIGNvbnN0IGxheW91dCA9IGJ1Y2tldC5sYXllcnNbMF0ubGF5b3V0O1xuICAgICAgICBjb25zdCBkdXBsaWNhdGVPcGFjaXR5U3RhdGUgPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUobnVsbCwgMCwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgY29uc3QgdGV4dEFsbG93T3ZlcmxhcCA9IGxheW91dC5nZXQoJ3RleHQtYWxsb3ctb3ZlcmxhcCcpO1xuICAgICAgICBjb25zdCBpY29uQWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgnaWNvbi1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlUGxhY2VtZW50ID0gbGF5b3V0LmdldCgndGV4dC12YXJpYWJsZS1hbmNob3InKTtcbiAgICAgICAgY29uc3Qgcm90YXRlV2l0aE1hcCA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCBwaXRjaFdpdGhNYXAgPSBsYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJztcbiAgICAgICAgY29uc3QgaGFzSWNvblRleHRGaXQgPSBsYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJztcbiAgICAgICAgLy8gSWYgYWxsb3ctb3ZlcmxhcCBpcyB0cnVlLCB3ZSBjYW4gc2hvdyBzeW1ib2xzIGJlZm9yZSBwbGFjZW1lbnQgcnVucyBvbiB0aGVtXG4gICAgICAgIC8vIEJ1dCB3ZSBoYXZlIHRvIHdhaXQgZm9yIHBsYWNlbWVudCBpZiB3ZSBwb3RlbnRpYWxseSBkZXBlbmQgb24gYSBwYWlyZWQgaWNvbi90ZXh0XG4gICAgICAgIC8vIHdpdGggYWxsb3ctb3ZlcmxhcDogZmFsc2UuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzAzMlxuICAgICAgICBjb25zdCBkZWZhdWx0T3BhY2l0eVN0YXRlID0gbmV3IEpvaW50T3BhY2l0eVN0YXRlKG51bGwsIDAsXG4gICAgICAgICAgICAgICAgdGV4dEFsbG93T3ZlcmxhcCAmJiAoaWNvbkFsbG93T3ZlcmxhcCB8fCAhYnVja2V0Lmhhc0ljb25EYXRhKCkgfHwgbGF5b3V0LmdldCgnaWNvbi1vcHRpb25hbCcpKSxcbiAgICAgICAgICAgICAgICBpY29uQWxsb3dPdmVybGFwICYmICh0ZXh0QWxsb3dPdmVybGFwIHx8ICFidWNrZXQuaGFzVGV4dERhdGEoKSB8fCBsYXlvdXQuZ2V0KCd0ZXh0LW9wdGlvbmFsJykpLFxuICAgICAgICAgICAgICAgIHRydWUpO1xuXG4gICAgICAgIGlmICghYnVja2V0LmNvbGxpc2lvbkFycmF5cyAmJiBjb2xsaXNpb25Cb3hBcnJheSAmJiAoKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpIHx8IGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQ2lyY2xlRGF0YSgpIHx8XG4gICAgICAgICAgICBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSB8fCBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkNpcmNsZURhdGEoKSkpKSB7XG4gICAgICAgICAgICBidWNrZXQuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhjb2xsaXNpb25Cb3hBcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluc3RhbmNlID0gYnVja2V0LnN5bWJvbEluc3RhbmNlcy5nZXQocyk7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMsXG4gICAgICAgICAgICAgICAgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzLFxuICAgICAgICAgICAgICAgIGNyb3NzVGlsZUlEXG4gICAgICAgICAgICB9ID0gc3ltYm9sSW5zdGFuY2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gc2VlbkNyb3NzVGlsZUlEc1tjcm9zc1RpbGVJRF07XG5cbiAgICAgICAgICAgIGxldCBvcGFjaXR5U3RhdGUgPSB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICBpZiAoaXNEdXBsaWNhdGUpIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5U3RhdGUgPSBkdXBsaWNhdGVPcGFjaXR5U3RhdGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFvcGFjaXR5U3RhdGUpIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5U3RhdGUgPSBkZWZhdWx0T3BhY2l0eVN0YXRlO1xuICAgICAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBzdGF0ZSBzbyB0aGF0IGZ1dHVyZSBwbGFjZW1lbnRzIHVzZSBpdCBhcyBhIHN0YXJ0aW5nIHBvaW50XG4gICAgICAgICAgICAgICAgdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdID0gb3BhY2l0eVN0YXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWVuQ3Jvc3NUaWxlSURzW2Nyb3NzVGlsZUlEXSA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhc1RleHQgPSBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyA+IDAgfHwgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID4gMDtcbiAgICAgICAgICAgIGNvbnN0IGhhc0ljb24gPSBzeW1ib2xJbnN0YW5jZS5udW1JY29uVmVydGljZXMgPiAwO1xuXG4gICAgICAgICAgICBpZiAoaGFzVGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2tlZE9wYWNpdHkgPSBwYWNrT3BhY2l0eShvcGFjaXR5U3RhdGUudGV4dCk7XG4gICAgICAgICAgICAgICAgLy8gVmVydGljYWwgdGV4dCBmYWRlcyBpbi9vdXQgb24gY29sbGlzaW9uIHRoZSBzYW1lIHdheSBhcyBjb3JyZXNwb25kaW5nXG4gICAgICAgICAgICAgICAgLy8gaG9yaXpvbnRhbCB0ZXh0LiBTd2l0Y2ggYmV0d2VlbiB2ZXJ0aWNhbC9ob3Jpem9udGFsIHNob3VsZCBiZSBpbnN0YW50YW5lb3VzXG4gICAgICAgICAgICAgICAgY29uc3Qgb3BhY2l0eUVudHJ5Q291bnQgPSAobnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMgKyBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMpIC8gNDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wYWNpdHlFbnRyeUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0LnRleHQub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHBhY2tlZE9wYWNpdHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGxhYmVsIGlzIGNvbXBsZXRlbHkgZmFkZWQsIG1hcmsgaXQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGNhbGN1bGF0ZVxuICAgICAgICAgICAgICAgIC8vIGl0cyBwb3NpdGlvbiBhdCByZW5kZXIgdGltZS4gSWYgdGhpcyBsYXllciBoYXMgdmFyaWFibGUgcGxhY2VtZW50LCBzaGlmdCB0aGUgdmFyaW91c1xuICAgICAgICAgICAgICAgIC8vIHN5bWJvbCBpbnN0YW5jZXMgYXBwcm9wcmlhdGVseSBzbyB0aGF0IHN5bWJvbHMgZnJvbSBidWNrZXRzIHRoYXQgaGF2ZSB5ZXQgdG8gYmUgcGxhY2VkXG4gICAgICAgICAgICAgICAgLy8gb2Zmc2V0IGFwcHJvcHJpYXRlbHkuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ltYm9sSGlkZGVuID0gb3BhY2l0eVN0YXRlLnRleHQuaXNIaWRkZW4oKSA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlZE9yaWVudGF0aW9uID0gdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsSGlkZGVuID0gKHBsYWNlZE9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS5ob3Jpem9udGFsIHx8IHBsYWNlZE9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS5ob3Jpem9udGFsT25seSkgPyAxIDogMDtcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsSGlkZGVuID0gcGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChpbmRleCkuaGlkZGVuID0gc3ltYm9sSGlkZGVuIHx8IGhvcml6b250YWxIaWRkZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCkuaGlkZGVuID0gc3ltYm9sSGlkZGVuIHx8IHZlcnRpY2FsSGlkZGVuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZPZmZzZXQgPSB0aGlzLnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgaWYgKHByZXZPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0LCBwcmV2T2Zmc2V0LmFuY2hvciwgc3ltYm9sSW5zdGFuY2UsIHBsYWNlZE9yaWVudGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2T3JpZW50YXRpb24gPSB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgaWYgKHByZXZPcmllbnRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihidWNrZXQsICdsZWZ0Jywgc3ltYm9sSW5zdGFuY2UsIHByZXZPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQsIHByZXZPcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0ljb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWNrZWRPcGFjaXR5ID0gcGFja09wYWNpdHkob3BhY2l0eVN0YXRlLmljb24pO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ltYm9sSW5zdGFuY2UubnVtSWNvblZlcnRpY2VzIC8gNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwYWNrZWRPcGFjaXR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHMpLmhpZGRlbiA9XG4gICAgICAgICAgICAgICAgICAgIChvcGFjaXR5U3RhdGUuaWNvbi5pc0hpZGRlbigpOiBhbnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkgfHwgYnVja2V0Lmhhc0ljb25Db2xsaXNpb25DaXJjbGVEYXRhKCkgfHxcbiAgICAgICAgICAgICAgICBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSB8fCBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkNpcmNsZURhdGEoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxpc2lvbkFycmF5cyA9IGJ1Y2tldC5jb2xsaXNpb25BcnJheXNbc107XG4gICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2hpZnQgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaXNpb25BcnJheXMudGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlUGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFibGVPZmZzZXQgPSB0aGlzLnZhcmlhYmxlT2Zmc2V0c1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBzaG93IGVpdGhlciB0aGUgY3VycmVudGx5IHBsYWNlZCBwb3NpdGlvbiBvciB0aGUgbGFzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWNjZXNzZnVsbHkgcGxhY2VkIHBvc2l0aW9uIChzbyB5b3UgY2FuIHZpc3VhbGl6ZSB3aGF0IGNvbGxpc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IG1hZGUgdGhlIHN5bWJvbCBkaXNhcHBlYXIsIGFuZCB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzeW1ib2wgdG8gY29tZSBiYWNrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IGNhbGN1bGF0ZVZhcmlhYmxlTGF5b3V0U2hpZnQodmFyaWFibGVPZmZzZXQuYW5jaG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZU9mZnNldC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPZmZzZXQuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZU9mZnNldC50ZXh0T2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZU9mZnNldC50ZXh0Qm94U2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm90YXRlV2l0aE1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQuX3JvdGF0ZShwaXRjaFdpdGhNYXAgPyB0aGlzLnRyYW5zZm9ybS5hbmdsZSA6IC10aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBvZmZzZXQgLT4gdGhpcyBzeW1ib2wgaGFzbid0IGJlZW4gcGxhY2VkIHNpbmNlIGNvbWluZyBvbi1zY3JlZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gc2luZ2xlIGJveCBpcyBwYXJ0aWN1bGFybHkgbWVhbmluZ2Z1bCBhbmQgYWxsIG9mIHRoZW0gd291bGQgYmUgdG9vIG5vaXN5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgY2VudGVyIGJveCBqdXN0IHRvIHNob3cgc29tZXRoaW5nJ3MgdGhlcmUsIGJ1dCBtYXJrIGl0IFwibm90IHVzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhidWNrZXQudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgb3BhY2l0eVN0YXRlLnRleHQucGxhY2VkLCAhdXNlZCwgc2hpZnQueCwgc2hpZnQueSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLmljb25Cb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUuaWNvbi5wbGFjZWQsIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ljb25UZXh0Rml0ID8gc2hpZnQueCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSWNvblRleHRGaXQgPyBzaGlmdC55IDogMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Q2lyY2xlcyA9IGNvbGxpc2lvbkFycmF5cy50ZXh0Q2lyY2xlcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRDaXJjbGVzICYmIGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQ2lyY2xlRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRleHRDaXJjbGVzLmxlbmd0aDsgayArPSA1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90VXNlZCA9IGlzRHVwbGljYXRlIHx8IHRleHRDaXJjbGVzW2sgKyA0XSA9PT0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhidWNrZXQudGV4dENvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgb3BhY2l0eVN0YXRlLnRleHQucGxhY2VkLCBub3RVc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJ1Y2tldC5zb3J0RmVhdHVyZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICBpZiAodGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtidWNrZXQuYnVja2V0SW5zdGFuY2VJZF0pIHtcbiAgICAgICAgICAgIHRoaXMucmV0YWluZWRRdWVyeURhdGFbYnVja2V0LmJ1Y2tldEluc3RhbmNlSWRdLmZlYXR1cmVTb3J0T3JkZXIgPSBidWNrZXQuZmVhdHVyZVNvcnRPcmRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChidWNrZXQuaGFzVGV4dERhdGEoKSAmJiBidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0LnRleHQub3BhY2l0eVZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25EYXRhKCkgJiYgYnVja2V0Lmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVja2V0Lmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGJ1Y2tldC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpICYmIGJ1Y2tldC5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVja2V0Lmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0Lmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXQuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSAmJiBidWNrZXQudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25DaXJjbGVEYXRhKCkgJiYgYnVja2V0Lmljb25Db2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQuaWNvbkNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQuaWNvbkNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQ2lyY2xlRGF0YSgpICYmIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVja2V0LnRleHRDb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0LnRleHRDb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QXJyYXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5sZW5ndGggPT09IGJ1Y2tldC50ZXh0LmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCAvIDQpO1xuICAgICAgICBhc3NlcnQoYnVja2V0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5Lmxlbmd0aCA9PT0gYnVja2V0Lmljb24ubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoIC8gNCk7XG4gICAgfVxuXG4gICAgc3ltYm9sRmFkZUNoYW5nZShub3c6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWRlRHVyYXRpb24gPT09IDAgP1xuICAgICAgICAgICAgMSA6XG4gICAgICAgICAgICAobm93IC0gdGhpcy5jb21taXRUaW1lKSAvIHRoaXMuZmFkZUR1cmF0aW9uO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb25zKG5vdzogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YWxlIHx8XG4gICAgICAgICAgICBub3cgLSB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIDwgdGhpcy5mYWRlRHVyYXRpb247XG4gICAgfVxuXG4gICAgc3RpbGxSZWNlbnQobm93OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbWl0VGltZSArIHRoaXMuZmFkZUR1cmF0aW9uID4gbm93O1xuICAgIH1cblxuICAgIHNldFN0YWxlKCkge1xuICAgICAgICB0aGlzLnN0YWxlID0gdHJ1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGNvbGxpc2lvblZlcnRleEFycmF5OiBDb2xsaXNpb25WZXJ0ZXhBcnJheSwgcGxhY2VkOiBib29sZWFuLCBub3RVc2VkOiBib29sZWFuLCBzaGlmdFg/OiBudW1iZXIsIHNoaWZ0WT86IG51bWJlcikge1xuICAgIGNvbGxpc2lvblZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHBsYWNlZCA/IDEgOiAwLCBub3RVc2VkID8gMSA6IDAsIHNoaWZ0WCB8fCAwLCBzaGlmdFkgfHwgMCk7XG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXkuZW1wbGFjZUJhY2socGxhY2VkID8gMSA6IDAsIG5vdFVzZWQgPyAxIDogMCwgc2hpZnRYIHx8IDAsIHNoaWZ0WSB8fCAwKTtcbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwbGFjZWQgPyAxIDogMCwgbm90VXNlZCA/IDEgOiAwLCBzaGlmdFggfHwgMCwgc2hpZnRZIHx8IDApO1xuICAgIGNvbGxpc2lvblZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHBsYWNlZCA/IDEgOiAwLCBub3RVc2VkID8gMSA6IDAsIHNoaWZ0WCB8fCAwLCBzaGlmdFkgfHwgMCk7XG59XG5cbi8vIEFsbCBmb3VyIHZlcnRpY2VzIGZvciBhIGdseXBoIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGFjaXR5IHN0YXRlXG4vLyBTbyB3ZSBwYWNrIHRoZSBvcGFjaXR5IGludG8gYSB1aW50OCwgYW5kIHRoZW4gcmVwZWF0IGl0IGZvdXIgdGltZXNcbi8vIHRvIG1ha2UgYSBzaW5nbGUgdWludDMyIHRoYXQgd2UgY2FuIHVwbG9hZCBmb3IgZWFjaCBnbHlwaCBpbiB0aGVcbi8vIGxhYmVsLlxuY29uc3Qgc2hpZnQyNSA9IE1hdGgucG93KDIsIDI1KTtcbmNvbnN0IHNoaWZ0MjQgPSBNYXRoLnBvdygyLCAyNCk7XG5jb25zdCBzaGlmdDE3ID0gTWF0aC5wb3coMiwgMTcpO1xuY29uc3Qgc2hpZnQxNiA9IE1hdGgucG93KDIsIDE2KTtcbmNvbnN0IHNoaWZ0OSA9IE1hdGgucG93KDIsIDkpO1xuY29uc3Qgc2hpZnQ4ID0gTWF0aC5wb3coMiwgOCk7XG5jb25zdCBzaGlmdDEgPSBNYXRoLnBvdygyLCAxKTtcbmZ1bmN0aW9uIHBhY2tPcGFjaXR5KG9wYWNpdHlTdGF0ZTogT3BhY2l0eVN0YXRlKTogbnVtYmVyIHtcbiAgICBpZiAob3BhY2l0eVN0YXRlLm9wYWNpdHkgPT09IDAgJiYgIW9wYWNpdHlTdGF0ZS5wbGFjZWQpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmIChvcGFjaXR5U3RhdGUub3BhY2l0eSA9PT0gMSAmJiBvcGFjaXR5U3RhdGUucGxhY2VkKSB7XG4gICAgICAgIHJldHVybiA0Mjk0OTY3Mjk1O1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXRCaXQgPSBvcGFjaXR5U3RhdGUucGxhY2VkID8gMSA6IDA7XG4gICAgY29uc3Qgb3BhY2l0eUJpdHMgPSBNYXRoLmZsb29yKG9wYWNpdHlTdGF0ZS5vcGFjaXR5ICogMTI3KTtcbiAgICByZXR1cm4gb3BhY2l0eUJpdHMgKiBzaGlmdDI1ICsgdGFyZ2V0Qml0ICogc2hpZnQyNCArXG4gICAgICAgIG9wYWNpdHlCaXRzICogc2hpZnQxNyArIHRhcmdldEJpdCAqIHNoaWZ0MTYgK1xuICAgICAgICBvcGFjaXR5Qml0cyAqIHNoaWZ0OSArIHRhcmdldEJpdCAqIHNoaWZ0OCArXG4gICAgICAgIG9wYWNpdHlCaXRzICogc2hpZnQxICsgdGFyZ2V0Qml0O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHtQbGFjZW1lbnR9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuXG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4vc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi9zb3VyY2UvdGlsZSc7XG5cbmNsYXNzIExheWVyUGxhY2VtZW50IHtcbiAgICBfY3VycmVudFRpbGVJbmRleDogbnVtYmVyO1xuICAgIF90aWxlczogQXJyYXk8VGlsZT47XG4gICAgX3NlZW5Dcm9zc1RpbGVJRHM6IHsgW3N0cmluZyB8IG51bWJlcl06IGJvb2xlYW4gfTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGlsZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5fc2VlbkNyb3NzVGlsZUlEcyA9IHt9O1xuICAgIH1cblxuICAgIGNvbnRpbnVlUGxhY2VtZW50KHRpbGVzOiBBcnJheTxUaWxlPiwgcGxhY2VtZW50OiBQbGFjZW1lbnQsIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbiwgc3R5bGVMYXllcjogU3R5bGVMYXllciwgc2hvdWxkUGF1c2VQbGFjZW1lbnQ6ICgpID0+IGJvb2xlYW4pIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRUaWxlSW5kZXggPCB0aWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1t0aGlzLl9jdXJyZW50VGlsZUluZGV4XTtcbiAgICAgICAgICAgIHBsYWNlbWVudC5wbGFjZUxheWVyVGlsZShzdHlsZUxheWVyLCB0aWxlLCBzaG93Q29sbGlzaW9uQm94ZXMsIHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHMpO1xuXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGlsZUluZGV4Kys7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUGF1c2VQbGFjZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBQYXVzZWFibGVQbGFjZW1lbnQge1xuICAgIHBsYWNlbWVudDogUGxhY2VtZW50O1xuICAgIF9kb25lOiBib29sZWFuO1xuICAgIF9jdXJyZW50UGxhY2VtZW50SW5kZXg6IG51bWJlcjtcbiAgICBfZm9yY2VGdWxsUGxhY2VtZW50OiBib29sZWFuO1xuICAgIF9zaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW47XG4gICAgX2luUHJvZ3Jlc3NMYXllcjogP0xheWVyUGxhY2VtZW50O1xuXG4gICAgY29uc3RydWN0b3IodHJhbnNmb3JtOiBUcmFuc2Zvcm0sIG9yZGVyOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgICAgIGZvcmNlRnVsbFBsYWNlbWVudDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgZmFkZUR1cmF0aW9uOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHByZXZQbGFjZW1lbnQ/OiBQbGFjZW1lbnQpIHtcblxuICAgICAgICB0aGlzLnBsYWNlbWVudCA9IG5ldyBQbGFjZW1lbnQodHJhbnNmb3JtLCBmYWRlRHVyYXRpb24sIGNyb3NzU291cmNlQ29sbGlzaW9ucywgcHJldlBsYWNlbWVudCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleCA9IG9yZGVyLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudCA9IGZvcmNlRnVsbFBsYWNlbWVudDtcbiAgICAgICAgdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzID0gc2hvd0NvbGxpc2lvbkJveGVzO1xuICAgICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNEb25lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9uZTtcbiAgICB9XG5cbiAgICBjb250aW51ZVBsYWNlbWVudChvcmRlcjogQXJyYXk8c3RyaW5nPiwgbGF5ZXJzOiB7W3N0cmluZ106IFN0eWxlTGF5ZXJ9LCBsYXllclRpbGVzOiB7W3N0cmluZ106IEFycmF5PFRpbGU+fSkge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBicm93c2VyLm5vdygpO1xuXG4gICAgICAgIGNvbnN0IHNob3VsZFBhdXNlUGxhY2VtZW50ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxhcHNlZFRpbWUgPSBicm93c2VyLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudCA/IGZhbHNlIDogZWxhcHNlZFRpbWUgPiAyO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IG9yZGVyW3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleF07XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudFpvb20gPSB0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleC50cmFuc2Zvcm0uem9vbTtcbiAgICAgICAgICAgIGlmIChsYXllci50eXBlID09PSAnc3ltYm9sJyAmJlxuICAgICAgICAgICAgICAgICghbGF5ZXIubWluem9vbSB8fCBsYXllci5taW56b29tIDw9IHBsYWNlbWVudFpvb20pICYmXG4gICAgICAgICAgICAgICAgKCFsYXllci5tYXh6b29tIHx8IGxheWVyLm1heHpvb20gPiBwbGFjZW1lbnRab29tKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pblByb2dyZXNzTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5Qcm9ncmVzc0xheWVyID0gbmV3IExheWVyUGxhY2VtZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcGF1c2VQbGFjZW1lbnQgPSB0aGlzLl9pblByb2dyZXNzTGF5ZXIuY29udGludWVQbGFjZW1lbnQobGF5ZXJUaWxlc1tsYXllci5zb3VyY2VdLCB0aGlzLnBsYWNlbWVudCwgdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzLCBsYXllciwgc2hvdWxkUGF1c2VQbGFjZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhdXNlUGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRpZG4ndCBmaW5pc2ggcGxhY2luZyBhbGwgbGF5ZXJzIHdpdGhpbiAybXMsXG4gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBjYW4ga2VlcCByZW5kZXJpbmcgd2l0aCBhIHBhcnRpYWwgcGxhY2VtZW50XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlJ2xsIHJlc3VtZSBoZXJlIG9uIHRoZSBuZXh0IGZyYW1lXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5faW5Qcm9ncmVzc0xheWVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXgtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbW1pdChub3c6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBsYWNlbWVudC5jb21taXQobm93KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhY2VtZW50O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGF1c2VhYmxlUGxhY2VtZW50O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5cbmltcG9ydCB7U3ltYm9sSW5zdGFuY2VBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtTeW1ib2xJbnN0YW5jZX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uL3NvdXJjZS90aWxlJztcblxuLypcbiAgICBUaGUgQ3Jvc3NUaWxlU3ltYm9sSW5kZXggZ2VuZXJhbGx5IHdvcmtzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXRcbiAgICBhIGNvbmNlcHR1YWwgXCJ1bmlxdWUgc3ltYm9sXCIgY2FuIGJlIGlkZW50aWZpZWQgYnkgdGhlIHRleHQgb2ZcbiAgICB0aGUgbGFiZWwgY29tYmluZWQgd2l0aCB0aGUgYW5jaG9yIHBvaW50LiBUaGUgZ29hbCBpcyB0byBhc3NpZ25cbiAgICB0aGVzZSBjb25jZXB0dWFsIFwidW5pcXVlIHN5bWJvbHNcIiBhIHNoYXJlZCBjcm9zc1RpbGVJRCB0aGF0IGNhbiBiZVxuICAgIHVzZWQgYnkgUGxhY2VtZW50IHRvIGtlZXAgZmFkaW5nIG9wYWNpdHkgc3RhdGVzIGNvbnNpc3RlbnQgYW5kIHRvXG4gICAgZGVkdXBsaWNhdGUgbGFiZWxzLlxuXG4gICAgVGhlIENyb3NzVGlsZVN5bWJvbEluZGV4IGluZGV4ZXMgYWxsIHRoZSBjdXJyZW50IHN5bWJvbCBpbnN0YW5jZXMgYW5kXG4gICAgdGhlaXIgY3Jvc3NUaWxlSURzLiBXaGVuIGEgc3ltYm9sIGJ1Y2tldCBnZXRzIGFkZGVkIG9yIHVwZGF0ZWQsIHRoZVxuICAgIGluZGV4IGFzc2lnbnMgYSBjcm9zc1RpbGVJRCB0byBlYWNoIG9mIGl0J3Mgc3ltYm9sIGluc3RhbmNlcyBieSBlaXRoZXJcbiAgICBtYXRjaGluZyBpdCB3aXRoIGFuIGV4aXN0aW5nIGlkIG9yIGFzc2lnbmluZyBhIG5ldyBvbmUuXG4qL1xuXG4vLyBSb3VuZCBhbmNob3IgcG9zaXRpb25zIHRvIHJvdWdobHkgNCBwaXhlbCBncmlkXG5jb25zdCByb3VuZGluZ0ZhY3RvciA9IDUxMiAvIEVYVEVOVCAvIDI7XG5cbmNsYXNzIFRpbGVMYXllckluZGV4IHtcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQ7XG4gICAgaW5kZXhlZFN5bWJvbEluc3RhbmNlczoge1tudW1iZXJdOiBBcnJheTx7XG4gICAgICAgIGNyb3NzVGlsZUlEOiBudW1iZXIsXG4gICAgICAgIGNvb3JkOiB7XG4gICAgICAgICAgICB4OiBudW1iZXIsXG4gICAgICAgICAgICB5OiBudW1iZXJcbiAgICAgICAgfVxuICAgIH0+fTtcbiAgICBidWNrZXRJbnN0YW5jZUlkOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHN5bWJvbEluc3RhbmNlczogU3ltYm9sSW5zdGFuY2VBcnJheSwgYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGlsZUlEID0gdGlsZUlEO1xuICAgICAgICB0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXMgPSB7fTtcbiAgICAgICAgdGhpcy5idWNrZXRJbnN0YW5jZUlkID0gYnVja2V0SW5zdGFuY2VJZDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBzeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc3ltYm9sSW5zdGFuY2Uua2V5O1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNba2V5XSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1trZXldID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGlzIHRpbGUgbWF5IGhhdmUgbXVsdGlwbGUgc3ltYm9sIGluc3RhbmNlcyB3aXRoIHRoZSBzYW1lIGtleVxuICAgICAgICAgICAgLy8gU3RvcmUgZWFjaCBvbmUgYWxvbmcgd2l0aCBpdHMgY29vcmRpbmF0ZXNcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1trZXldLnB1c2goe1xuICAgICAgICAgICAgICAgIGNyb3NzVGlsZUlEOiBzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCxcbiAgICAgICAgICAgICAgICBjb29yZDogdGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhzeW1ib2xJbnN0YW5jZSwgdGlsZUlEKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0cyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGlucHV0IHN5bWJvbCBpbnN0YW5jZSBpbnRvIGNvb3JkaW5hdGVzIHRoYXQgYmUgY2FuIGNvbXBhcmVkXG4gICAgLy8gYWdhaW5zdCBvdGhlciBzeW1ib2xzIGluIHRoaXMgaW5kZXguIENvb3JkaW5hdGVzIGFyZTpcbiAgICAvLyAoMSkgd29ybGQtYmFzZWQgKHNvIGFmdGVyIGNvbnZlcnNpb24gdGhlIHNvdXJjZSB0aWxlIGlzIGlycmVsZXZhbnQpXG4gICAgLy8gKDIpIGNvbnZlcnRlZCB0byB0aGUgei1zY2FsZSBvZiB0aGlzIFRpbGVMYXllckluZGV4XG4gICAgLy8gKDMpIGRvd24tc2FtcGxlZCBieSBcInJvdW5kaW5nRmFjdG9yXCIgZnJvbSB0aWxlIGNvb3JkaW5hdGUgcHJlY2lzaW9uIGluIG9yZGVyIHRvIGJlXG4gICAgLy8gICAgIG1vcmUgdG9sZXJhbnQgb2Ygc21hbGwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aWxlcy5cbiAgICBnZXRTY2FsZWRDb29yZGluYXRlcyhzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIGNoaWxkVGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IHpEaWZmZXJlbmNlID0gY2hpbGRUaWxlSUQuY2Fub25pY2FsLnogLSB0aGlzLnRpbGVJRC5jYW5vbmljYWwuejtcbiAgICAgICAgY29uc3Qgc2NhbGUgPSByb3VuZGluZ0ZhY3RvciAvIE1hdGgucG93KDIsIHpEaWZmZXJlbmNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IE1hdGguZmxvb3IoKGNoaWxkVGlsZUlELmNhbm9uaWNhbC54ICogRVhURU5UICsgc3ltYm9sSW5zdGFuY2UuYW5jaG9yWCkgKiBzY2FsZSksXG4gICAgICAgICAgICB5OiBNYXRoLmZsb29yKChjaGlsZFRpbGVJRC5jYW5vbmljYWwueSAqIEVYVEVOVCArIHN5bWJvbEluc3RhbmNlLmFuY2hvclkpICogc2NhbGUpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZmluZE1hdGNoZXMoc3ltYm9sSW5zdGFuY2VzOiBTeW1ib2xJbnN0YW5jZUFycmF5LCBuZXdUaWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHpvb21Dcm9zc1RpbGVJRHM6IHtbY3Jvc3NUaWxlSUQ6IG51bWJlcl06IGJvb2xlYW59KSB7XG4gICAgICAgIGNvbnN0IHRvbGVyYW5jZSA9IHRoaXMudGlsZUlELmNhbm9uaWNhbC56IDwgbmV3VGlsZUlELmNhbm9uaWNhbC56ID8gMSA6IE1hdGgucG93KDIsIHRoaXMudGlsZUlELmNhbm9uaWNhbC56IC0gbmV3VGlsZUlELmNhbm9uaWNhbC56KTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBzeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEKSB7XG4gICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXMgYSBtYXRjaCwgc2tpcFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRleGVkSW5zdGFuY2VzID0gdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW3N5bWJvbEluc3RhbmNlLmtleV07XG4gICAgICAgICAgICBpZiAoIWluZGV4ZWRJbnN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBObyBzeW1ib2wgd2l0aCB0aGlzIGtleSBpbiB0aGlzIGJ1Y2tldFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzY2FsZWRTeW1ib2xDb29yZCA9IHRoaXMuZ2V0U2NhbGVkQ29vcmRpbmF0ZXMoc3ltYm9sSW5zdGFuY2UsIG5ld1RpbGVJRCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGhpc1RpbGVTeW1ib2wgb2YgaW5kZXhlZEluc3RhbmNlcykge1xuICAgICAgICAgICAgICAgIC8vIFJldHVybiBhbnkgc3ltYm9sIHdpdGggdGhlIHNhbWUga2V5cyB3aG9zZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIDFcbiAgICAgICAgICAgICAgICAvLyBncmlkIHVuaXQuICh3aXRoIGEgNHB4IGdyaWQsIHRoaXMgY292ZXJzIGEgMTJweCBieSAxMnB4IGFyZWEpXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXNUaWxlU3ltYm9sLmNvb3JkLnggLSBzY2FsZWRTeW1ib2xDb29yZC54KSA8PSB0b2xlcmFuY2UgJiZcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5hYnModGhpc1RpbGVTeW1ib2wuY29vcmQueSAtIHNjYWxlZFN5bWJvbENvb3JkLnkpIDw9IHRvbGVyYW5jZSAmJlxuICAgICAgICAgICAgICAgICAgICAhem9vbUNyb3NzVGlsZUlEc1t0aGlzVGlsZVN5bWJvbC5jcm9zc1RpbGVJRF0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25jZSB3ZSd2ZSBtYXJrZWQgb3Vyc2VsdmVzIGR1cGxpY2F0ZSBhZ2FpbnN0IHRoaXMgcGFyZW50IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgbGV0IGFueSBvdGhlciBzeW1ib2xzIGF0IHRoZSBzYW1lIHpvb20gbGV2ZWwgZHVwbGljYXRlIGFnYWluc3RcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNhbWUgcGFyZW50IChzZWUgaXNzdWUgIzU5OTMpXG4gICAgICAgICAgICAgICAgICAgIHpvb21Dcm9zc1RpbGVJRHNbdGhpc1RpbGVTeW1ib2wuY3Jvc3NUaWxlSURdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgPSB0aGlzVGlsZVN5bWJvbC5jcm9zc1RpbGVJRDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBDcm9zc1RpbGVJRHMge1xuICAgIG1heENyb3NzVGlsZUlEOiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWF4Q3Jvc3NUaWxlSUQgPSAwO1xuICAgIH1cbiAgICBnZW5lcmF0ZSgpIHtcbiAgICAgICAgcmV0dXJuICsrdGhpcy5tYXhDcm9zc1RpbGVJRDtcbiAgICB9XG59XG5cbmNsYXNzIENyb3NzVGlsZVN5bWJvbExheWVySW5kZXgge1xuICAgIGluZGV4ZXM6IHtbem9vbTogc3RyaW5nIHwgbnVtYmVyXToge1t0aWxlSWQ6IHN0cmluZyB8IG51bWJlcl06IFRpbGVMYXllckluZGV4fX07XG4gICAgdXNlZENyb3NzVGlsZUlEczoge1t6b29tOiBzdHJpbmcgfCBudW1iZXJdOiB7W2Nyb3NzVGlsZUlEOiBudW1iZXJdOiBib29sZWFufX07XG4gICAgbG5nOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbmRleGVzID0ge307XG4gICAgICAgIHRoaXMudXNlZENyb3NzVGlsZUlEcyA9IHt9O1xuICAgICAgICB0aGlzLmxuZyA9IDA7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBTb21ldGltZXMgd2hlbiBhIHVzZXIgcGFucyBhY3Jvc3MgdGhlIGFudGltZXJpZGlhbiB0aGUgbG9uZ2l0dWRlIHZhbHVlIGdldHMgd3JhcHBlZC5cbiAgICAgKiBUbyBwcmV2ZW50IGxhYmVscyBmcm9tIGZsYXNoaW5nIG91dCBhbmQgaW4gd2UgYWRqdXN0IHRoZSB0aWxlSUQgdmFsdWVzIGluIHRoZSBpbmRleGVzXG4gICAgICogc28gdGhhdCB0aGV5IG1hdGNoIHRoZSBuZXcgd3JhcHBlZCB2ZXJzaW9uIG9mIHRoZSBtYXAuXG4gICAgICovXG4gICAgaGFuZGxlV3JhcEp1bXAobG5nOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qgd3JhcERlbHRhID0gTWF0aC5yb3VuZCgobG5nIC0gdGhpcy5sbmcpIC8gMzYwKTtcbiAgICAgICAgaWYgKHdyYXBEZWx0YSAhPT0gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB6b29tIGluIHRoaXMuaW5kZXhlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHpvb21JbmRleGVzID0gdGhpcy5pbmRleGVzW3pvb21dO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1pvb21JbmRleCA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHpvb21JbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgdGlsZUlEJ3Mgd3JhcCBhbmQgYWRkIGl0IHRvIGEgbmV3IGluZGV4XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gem9vbUluZGV4ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgudGlsZUlEID0gaW5kZXgudGlsZUlELnVud3JhcFRvKGluZGV4LnRpbGVJRC53cmFwICsgd3JhcERlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Wm9vbUluZGV4W2luZGV4LnRpbGVJRC5rZXldID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t6b29tXSA9IG5ld1pvb21JbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxuZyA9IGxuZztcbiAgICB9XG5cbiAgICBhZGRCdWNrZXQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCBidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgY3Jvc3NUaWxlSURzOiBDcm9zc1RpbGVJRHMpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdICYmXG4gICAgICAgICAgICB0aGlzLmluZGV4ZXNbdGlsZUlELm92ZXJzY2FsZWRaXVt0aWxlSUQua2V5XSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdW3RpbGVJRC5rZXldLmJ1Y2tldEluc3RhbmNlSWQgPT09XG4gICAgICAgICAgICAgICAgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHJlcGxhY2luZyB0aGlzIGJ1Y2tldCB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvblxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb2xkIGJ1Y2tldCdzIFwidXNlZCBjcm9zc1RpbGVJRHNcIiBub3cgc28gdGhhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXcgYnVja2V0IGNhbiBjbGFpbSB0aGVtLlxuICAgICAgICAgICAgICAgIC8vIFRoZSBvbGQgaW5kZXggZW50cmllcyB0aGVtc2VsdmVzIHN0aWNrIGFyb3VuZCB1bnRpbFxuICAgICAgICAgICAgICAgIC8vICdyZW1vdmVTdGFsZUJ1Y2tldHMnIGlzIGNhbGxlZC5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh0aWxlSUQub3ZlcnNjYWxlZFosXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdW3RpbGVJRC5rZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVja2V0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmdldChpKTtcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RpbGVJRC5vdmVyc2NhbGVkWl0pIHtcbiAgICAgICAgICAgIHRoaXMudXNlZENyb3NzVGlsZUlEc1t0aWxlSUQub3ZlcnNjYWxlZFpdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgem9vbUNyb3NzVGlsZUlEcyA9IHRoaXMudXNlZENyb3NzVGlsZUlEc1t0aWxlSUQub3ZlcnNjYWxlZFpdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgem9vbSBpbiB0aGlzLmluZGV4ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHpvb21JbmRleGVzID0gdGhpcy5pbmRleGVzW3pvb21dO1xuICAgICAgICAgICAgaWYgKE51bWJlcih6b29tKSA+IHRpbGVJRC5vdmVyc2NhbGVkWikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gem9vbUluZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRJbmRleCA9IHpvb21JbmRleGVzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkSW5kZXgudGlsZUlELmlzQ2hpbGRPZih0aWxlSUQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEluZGV4LmZpbmRNYXRjaGVzKGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMsIHRpbGVJRCwgem9vbUNyb3NzVGlsZUlEcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudENvb3JkID0gdGlsZUlELnNjYWxlZFRvKE51bWJlcih6b29tKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SW5kZXggPSB6b29tSW5kZXhlc1twYXJlbnRDb29yZC5rZXldO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJbmRleC5maW5kTWF0Y2hlcyhidWNrZXQuc3ltYm9sSW5zdGFuY2VzLCB0aWxlSUQsIHpvb21Dcm9zc1RpbGVJRHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVja2V0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmdldChpKTtcbiAgICAgICAgICAgIGlmICghc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQpIHtcbiAgICAgICAgICAgICAgICAvLyBzeW1ib2wgZGlkIG5vdCBtYXRjaCBhbnkga25vd24gc3ltYm9sLCBhc3NpZ24gYSBuZXcgaWRcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCA9IGNyb3NzVGlsZUlEcy5nZW5lcmF0ZSgpO1xuICAgICAgICAgICAgICAgIHpvb21Dcm9zc1RpbGVJRHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluZGV4ZXNbdGlsZUlELm92ZXJzY2FsZWRaXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4ZXNbdGlsZUlELm92ZXJzY2FsZWRaXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdW3RpbGVJRC5rZXldID0gbmV3IFRpbGVMYXllckluZGV4KHRpbGVJRCwgYnVja2V0LnN5bWJvbEluc3RhbmNlcywgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh6b29tOiBzdHJpbmcgfCBudW1iZXIsIHJlbW92ZWRCdWNrZXQ6IFRpbGVMYXllckluZGV4KSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlbW92ZWRCdWNrZXQuaW5kZXhlZFN5bWJvbEluc3RhbmNlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzeW1ib2xJbnN0YW5jZSBvZiByZW1vdmVkQnVja2V0LmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbKGtleTogYW55KV0pIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3pvb21dW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZVN0YWxlQnVja2V0cyhjdXJyZW50SURzOiB7IFtzdHJpbmcgfCBudW1iZXJdOiBib29sZWFuIH0pIHtcbiAgICAgICAgbGV0IHRpbGVzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IHogaW4gdGhpcy5pbmRleGVzKSB7XG4gICAgICAgICAgICBjb25zdCB6b29tSW5kZXhlcyA9IHRoaXMuaW5kZXhlc1t6XTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGlsZUtleSBpbiB6b29tSW5kZXhlcykge1xuICAgICAgICAgICAgICAgIGlmICghY3VycmVudElEc1t6b29tSW5kZXhlc1t0aWxlS2V5XS5idWNrZXRJbnN0YW5jZUlkXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh6LCB6b29tSW5kZXhlc1t0aWxlS2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB6b29tSW5kZXhlc1t0aWxlS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgdGlsZXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpbGVzQ2hhbmdlZDtcbiAgICB9XG59XG5cbmNsYXNzIENyb3NzVGlsZVN5bWJvbEluZGV4IHtcbiAgICBsYXllckluZGV4ZXM6IHtbbGF5ZXJJZDogc3RyaW5nXTogQ3Jvc3NUaWxlU3ltYm9sTGF5ZXJJbmRleH07XG4gICAgY3Jvc3NUaWxlSURzOiBDcm9zc1RpbGVJRHM7XG4gICAgbWF4QnVja2V0SW5zdGFuY2VJZDogbnVtYmVyO1xuICAgIGJ1Y2tldHNJbkN1cnJlbnRQbGFjZW1lbnQ6IHtbbnVtYmVyXTogYm9vbGVhbn07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5sYXllckluZGV4ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5jcm9zc1RpbGVJRHMgPSBuZXcgQ3Jvc3NUaWxlSURzKCk7XG4gICAgICAgIHRoaXMubWF4QnVja2V0SW5zdGFuY2VJZCA9IDA7XG4gICAgICAgIHRoaXMuYnVja2V0c0luQ3VycmVudFBsYWNlbWVudCA9IHt9O1xuICAgIH1cblxuICAgIGFkZExheWVyKHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIsIHRpbGVzOiBBcnJheTxUaWxlPiwgbG5nOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGxheWVySW5kZXggPSB0aGlzLmxheWVySW5kZXhlc1tzdHlsZUxheWVyLmlkXTtcbiAgICAgICAgaWYgKGxheWVySW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGF5ZXJJbmRleCA9IHRoaXMubGF5ZXJJbmRleGVzW3N0eWxlTGF5ZXIuaWRdID0gbmV3IENyb3NzVGlsZVN5bWJvbExheWVySW5kZXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjdXJyZW50QnVja2V0SURzID0ge307XG5cbiAgICAgICAgbGF5ZXJJbmRleC5oYW5kbGVXcmFwSnVtcChsbmcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdGlsZSBvZiB0aWxlcykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sQnVja2V0ID0gKCh0aWxlLmdldEJ1Y2tldChzdHlsZUxheWVyKTogYW55KTogU3ltYm9sQnVja2V0KTtcbiAgICAgICAgICAgIGlmICghc3ltYm9sQnVja2V0IHx8IHN0eWxlTGF5ZXIuaWQgIT09IHN5bWJvbEJ1Y2tldC5sYXllcklkc1swXSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKCFzeW1ib2xCdWNrZXQuYnVja2V0SW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgICAgIHN5bWJvbEJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkID0gKyt0aGlzLm1heEJ1Y2tldEluc3RhbmNlSWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsYXllckluZGV4LmFkZEJ1Y2tldCh0aWxlLnRpbGVJRCwgc3ltYm9sQnVja2V0LCB0aGlzLmNyb3NzVGlsZUlEcykpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xCdWNrZXRzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50QnVja2V0SURzW3N5bWJvbEJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5ZXJJbmRleC5yZW1vdmVTdGFsZUJ1Y2tldHMoY3VycmVudEJ1Y2tldElEcykpIHtcbiAgICAgICAgICAgIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzeW1ib2xCdWNrZXRzQ2hhbmdlZDtcbiAgICB9XG5cbiAgICBwcnVuZVVudXNlZExheWVycyh1c2VkTGF5ZXJzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IHVzZWRMYXllck1hcCA9IHt9O1xuICAgICAgICB1c2VkTGF5ZXJzLmZvckVhY2goKHVzZWRMYXllcikgPT4ge1xuICAgICAgICAgICAgdXNlZExheWVyTWFwW3VzZWRMYXllcl0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMubGF5ZXJJbmRleGVzKSB7XG4gICAgICAgICAgICBpZiAoIXVzZWRMYXllck1hcFtsYXllcklkXSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxheWVySW5kZXhlc1tsYXllcklkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3Jvc3NUaWxlU3ltYm9sSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyJztcbmltcG9ydCBjcmVhdGVTdHlsZUxheWVyIGZyb20gJy4vY3JlYXRlX3N0eWxlX2xheWVyJztcbmltcG9ydCBsb2FkU3ByaXRlIGZyb20gJy4vbG9hZF9zcHJpdGUnO1xuaW1wb3J0IEltYWdlTWFuYWdlciBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfbWFuYWdlcic7XG5pbXBvcnQgR2x5cGhNYW5hZ2VyIGZyb20gJy4uL3JlbmRlci9nbHlwaF9tYW5hZ2VyJztcbmltcG9ydCBMaWdodCBmcm9tICcuL2xpZ2h0JztcbmltcG9ydCBMaW5lQXRsYXMgZnJvbSAnLi4vcmVuZGVyL2xpbmVfYXRsYXMnO1xuaW1wb3J0IHtwaWNrLCBjbG9uZSwgZXh0ZW5kLCBkZWVwRXF1YWwsIGZpbHRlck9iamVjdCwgbWFwT2JqZWN0fSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtnZXRKU09OLCBnZXRSZWZlcnJlciwgbWFrZVJlcXVlc3QsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcbmltcG9ydCB7aXNNYXBib3hVUkx9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHt2YWxpZGF0ZVN0eWxlLCBlbWl0VmFsaWRhdGlvbkVycm9ycyBhcyBfZW1pdFZhbGlkYXRpb25FcnJvcnN9IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuaW1wb3J0IHtcbiAgICBnZXRUeXBlIGFzIGdldFNvdXJjZVR5cGUsXG4gICAgc2V0VHlwZSBhcyBzZXRTb3VyY2VUeXBlLFxuICAgIHR5cGUgU291cmNlQ2xhc3Ncbn0gZnJvbSAnLi4vc291cmNlL3NvdXJjZSc7XG5pbXBvcnQge3F1ZXJ5UmVuZGVyZWRGZWF0dXJlcywgcXVlcnlSZW5kZXJlZFN5bWJvbHMsIHF1ZXJ5U291cmNlRmVhdHVyZXN9IGZyb20gJy4uL3NvdXJjZS9xdWVyeV9mZWF0dXJlcyc7XG5pbXBvcnQgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgR2VvSlNPTlNvdXJjZSBmcm9tICcuLi9zb3VyY2UvZ2VvanNvbl9zb3VyY2UnO1xuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuaW1wb3J0IGdldFdvcmtlclBvb2wgZnJvbSAnLi4vdXRpbC9nbG9iYWxfd29ya2VyX3Bvb2wnO1xuaW1wb3J0IGRlcmVmIGZyb20gJy4uL3N0eWxlLXNwZWMvZGVyZWYnO1xuaW1wb3J0IGRpZmZTdHlsZXMsIHtvcGVyYXRpb25zIGFzIGRpZmZPcGVyYXRpb25zfSBmcm9tICcuLi9zdHlsZS1zcGVjL2RpZmYnO1xuaW1wb3J0IHtcbiAgICByZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eSxcbiAgICBldmVudGVkIGFzIHJ0bFRleHRQbHVnaW5FdmVudGVkXG59IGZyb20gJy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuaW1wb3J0IFBhdXNlYWJsZVBsYWNlbWVudCBmcm9tICcuL3BhdXNlYWJsZV9wbGFjZW1lbnQnO1xuaW1wb3J0IFpvb21IaXN0b3J5IGZyb20gJy4vem9vbV9oaXN0b3J5JztcbmltcG9ydCBDcm9zc1RpbGVTeW1ib2xJbmRleCBmcm9tICcuLi9zeW1ib2wvY3Jvc3NfdGlsZV9zeW1ib2xfaW5kZXgnO1xuaW1wb3J0IHt2YWxpZGF0ZUN1c3RvbVN0eWxlTGF5ZXJ9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcblxuLy8gV2UncmUgc2tpcHBpbmcgdmFsaWRhdGlvbiBlcnJvcnMgd2l0aCB0aGUgYHNvdXJjZS5jYW52YXNgIGlkZW50aWZpZXIgaW4gb3JkZXJcbi8vIHRvIGNvbnRpbnVlIHRvIGFsbG93IGNhbnZhcyBzb3VyY2VzIHRvIGJlIGFkZGVkIGF0IHJ1bnRpbWUvdXBkYXRlZCBpblxuLy8gc21hcnQgc2V0U3R5bGUgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9wdWxsLzY0MjQpOlxuY29uc3QgZW1pdFZhbGlkYXRpb25FcnJvcnMgPSAoZXZlbnRlZDogRXZlbnRlZCwgZXJyb3JzOiA/JFJlYWRPbmx5QXJyYXk8e21lc3NhZ2U6IHN0cmluZywgaWRlbnRpZmllcj86IHN0cmluZ30+KSA9PlxuICAgIF9lbWl0VmFsaWRhdGlvbkVycm9ycyhldmVudGVkLCBlcnJvcnMgJiYgZXJyb3JzLmZpbHRlcihlcnJvciA9PiBlcnJvci5pZGVudGlmaWVyICE9PSAnc291cmNlLmNhbnZhcycpKTtcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaH0gZnJvbSAnLi9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtQbGFjZW1lbnR9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RQYXJhbWV0ZXJzLCBSZXNwb25zZUNhbGxiYWNrfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHR5cGUge0dlb0pTT059IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgTGF5ZXJTcGVjaWZpY2F0aW9uLFxuICAgIEZpbHRlclNwZWNpZmljYXRpb24sXG4gICAgU3R5bGVTcGVjaWZpY2F0aW9uLFxuICAgIExpZ2h0U3BlY2lmaWNhdGlvbixcbiAgICBTb3VyY2VTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge0N1c3RvbUxheWVySW50ZXJmYWNlfSBmcm9tICcuL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7VmFsaWRhdG9yfSBmcm9tICcuL3ZhbGlkYXRlX3N0eWxlJztcblxuY29uc3Qgc3VwcG9ydGVkRGlmZk9wZXJhdGlvbnMgPSBwaWNrKGRpZmZPcGVyYXRpb25zLCBbXG4gICAgJ2FkZExheWVyJyxcbiAgICAncmVtb3ZlTGF5ZXInLFxuICAgICdzZXRQYWludFByb3BlcnR5JyxcbiAgICAnc2V0TGF5b3V0UHJvcGVydHknLFxuICAgICdzZXRGaWx0ZXInLFxuICAgICdhZGRTb3VyY2UnLFxuICAgICdyZW1vdmVTb3VyY2UnLFxuICAgICdzZXRMYXllclpvb21SYW5nZScsXG4gICAgJ3NldExpZ2h0JyxcbiAgICAnc2V0VHJhbnNpdGlvbicsXG4gICAgJ3NldEdlb0pTT05Tb3VyY2VEYXRhJ1xuICAgIC8vICdzZXRHbHlwaHMnLFxuICAgIC8vICdzZXRTcHJpdGUnLFxuXSk7XG5cbmNvbnN0IGlnbm9yZWREaWZmT3BlcmF0aW9ucyA9IHBpY2soZGlmZk9wZXJhdGlvbnMsIFtcbiAgICAnc2V0Q2VudGVyJyxcbiAgICAnc2V0Wm9vbScsXG4gICAgJ3NldEJlYXJpbmcnLFxuICAgICdzZXRQaXRjaCdcbl0pO1xuXG5leHBvcnQgdHlwZSBTdHlsZU9wdGlvbnMgPSB7XG4gICAgdmFsaWRhdGU/OiBib29sZWFuLFxuICAgIGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT86IHN0cmluZ1xufTtcblxuZXhwb3J0IHR5cGUgU3R5bGVTZXR0ZXJPcHRpb25zID0ge1xuICAgIHZhbGlkYXRlPzogYm9vbGVhblxufTtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3R5bGUgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBtYXA6IE1hcDtcbiAgICBzdHlsZXNoZWV0OiBTdHlsZVNwZWNpZmljYXRpb247XG4gICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcjtcbiAgICBpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlcjtcbiAgICBnbHlwaE1hbmFnZXI6IEdseXBoTWFuYWdlcjtcbiAgICBsaW5lQXRsYXM6IExpbmVBdGxhcztcbiAgICBsaWdodDogTGlnaHQ7XG5cbiAgICBfcmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgX3Nwcml0ZVJlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuICAgIF9sYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn07XG4gICAgX29yZGVyOiBBcnJheTxzdHJpbmc+O1xuICAgIHNvdXJjZUNhY2hlczoge1tzdHJpbmddOiBTb3VyY2VDYWNoZX07XG4gICAgem9vbUhpc3Rvcnk6IFpvb21IaXN0b3J5O1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgX3J0bFRleHRQbHVnaW5DYWxsYmFjazogRnVuY3Rpb247XG4gICAgX2NoYW5nZWQ6IGJvb2xlYW47XG4gICAgX3VwZGF0ZWRTb3VyY2VzOiB7W3N0cmluZ106ICdjbGVhcicgfCAncmVsb2FkJ307XG4gICAgX3VwZGF0ZWRMYXllcnM6IHtbc3RyaW5nXTogdHJ1ZX07XG4gICAgX3JlbW92ZWRMYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn07XG4gICAgX3VwZGF0ZWRQYWludFByb3BzOiB7W2xheWVyOiBzdHJpbmddOiB0cnVlfTtcbiAgICBfbGF5ZXJPcmRlckNoYW5nZWQ6IGJvb2xlYW47XG5cbiAgICBjcm9zc1RpbGVTeW1ib2xJbmRleDogQ3Jvc3NUaWxlU3ltYm9sSW5kZXg7XG4gICAgcGF1c2VhYmxlUGxhY2VtZW50OiBQYXVzZWFibGVQbGFjZW1lbnQ7XG4gICAgcGxhY2VtZW50OiBQbGFjZW1lbnQ7XG4gICAgejogbnVtYmVyO1xuXG4gICAgLy8gZXhwb3NlZCB0byBhbGxvdyBzdHViYmluZyBieSB1bml0IHRlc3RzXG4gICAgc3RhdGljIGdldFNvdXJjZVR5cGU6IHR5cGVvZiBnZXRTb3VyY2VUeXBlO1xuICAgIHN0YXRpYyBzZXRTb3VyY2VUeXBlOiB0eXBlb2Ygc2V0U291cmNlVHlwZTtcbiAgICBzdGF0aWMgcmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHk6IHR5cGVvZiByZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eTtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiBTdHlsZU9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgRGlzcGF0Y2hlcihnZXRXb3JrZXJQb29sKCksIHRoaXMpO1xuICAgICAgICB0aGlzLmltYWdlTWFuYWdlciA9IG5ldyBJbWFnZU1hbmFnZXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudCh0aGlzKTtcbiAgICAgICAgdGhpcy5nbHlwaE1hbmFnZXIgPSBuZXcgR2x5cGhNYW5hZ2VyKG1hcC5fcmVxdWVzdE1hbmFnZXIsIG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KTtcbiAgICAgICAgdGhpcy5saW5lQXRsYXMgPSBuZXcgTGluZUF0bGFzKDI1NiwgNTEyKTtcbiAgICAgICAgdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleCA9IG5ldyBDcm9zc1RpbGVTeW1ib2xJbmRleCgpO1xuXG4gICAgICAgIHRoaXMuX2xheWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9vcmRlciAgPSBbXTtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXMgPSB7fTtcbiAgICAgICAgdGhpcy56b29tSGlzdG9yeSA9IG5ldyBab29tSGlzdG9yeSgpO1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9yZXNldFVwZGF0ZXMoKTtcblxuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRSZWZlcnJlcicsIGdldFJlZmVycmVyKCkpO1xuXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2sgPSBTdHlsZS5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eSgoYXJncykgPT4ge1xuICAgICAgICAgICAgc2VsZi5kaXNwYXRjaGVyLmJyb2FkY2FzdCgnbG9hZFJUTFRleHRQbHVnaW4nLCBhcmdzLnBsdWdpblVSTCwgYXJncy5jb21wbGV0aW9uQ2FsbGJhY2spO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzZWxmLnNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgICAgIHNlbGYuc291cmNlQ2FjaGVzW2lkXS5yZWxvYWQoKTsgLy8gU2hvdWxkIGJlIGEgbm8tb3AgaWYgdGhlIHBsdWdpbiBsb2FkcyBiZWZvcmUgYW55IHRpbGVzIGxvYWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vbignZGF0YScsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGFUeXBlICE9PSAnc291cmNlJyB8fCBldmVudC5zb3VyY2VEYXRhVHlwZSAhPT0gJ21ldGFkYXRhJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tldmVudC5zb3VyY2VJZF07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKTtcbiAgICAgICAgICAgIGlmICghc291cmNlIHx8ICFzb3VyY2UudmVjdG9yTGF5ZXJJZHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgICAgICBpZiAobGF5ZXIuc291cmNlID09PSBzb3VyY2UuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsaWRhdGVMYXllcihsYXllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkVVJMKHVybDogc3RyaW5nLCBvcHRpb25zOiB7XG4gICAgICAgIHZhbGlkYXRlPzogYm9vbGVhbixcbiAgICAgICAgYWNjZXNzVG9rZW4/OiBzdHJpbmdcbiAgICB9ID0ge30pIHtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGUgPSB0eXBlb2Ygb3B0aW9ucy52YWxpZGF0ZSA9PT0gJ2Jvb2xlYW4nID9cbiAgICAgICAgICAgIG9wdGlvbnMudmFsaWRhdGUgOiAhaXNNYXBib3hVUkwodXJsKTtcblxuICAgICAgICB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU3R5bGVVUkwodXJsLCBvcHRpb25zLmFjY2Vzc1Rva2VuKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlN0eWxlKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdCA9IGdldEpTT04ocmVxdWVzdCwgKGVycm9yOiA/RXJyb3IsIGpzb246ID9PYmplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGpzb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkKGpzb24sIHZhbGlkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZEpTT04oanNvbjogU3R5bGVTcGVjaWZpY2F0aW9uLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcblxuICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gYnJvd3Nlci5mcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xvYWQoanNvbiwgb3B0aW9ucy52YWxpZGF0ZSAhPT0gZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfbG9hZChqc29uOiBTdHlsZVNwZWNpZmljYXRpb24sIHZhbGlkYXRlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWxpZGF0ZSAmJiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZVN0eWxlKGpzb24pKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdHlsZXNoZWV0ID0ganNvbjtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGpzb24uc291cmNlcykge1xuICAgICAgICAgICAgdGhpcy5hZGRTb3VyY2UoaWQsIGpzb24uc291cmNlc1tpZF0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqc29uLnNwcml0ZSkge1xuICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IGxvYWRTcHJpdGUoanNvbi5zcHJpdGUsIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwgKGVyciwgaW1hZ2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbWFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiBpbWFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyLmFkZEltYWdlKGlkLCBpbWFnZXNbaWRdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyLnNldExvYWRlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRJbWFnZXMnLCB0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyLnNldExvYWRlZCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2x5cGhNYW5hZ2VyLnNldFVSTChqc29uLmdseXBocyk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJzID0gZGVyZWYodGhpcy5zdHlsZXNoZWV0LmxheWVycyk7XG5cbiAgICAgICAgdGhpcy5fb3JkZXIgPSBsYXllcnMubWFwKChsYXllcikgPT4gbGF5ZXIuaWQpO1xuXG4gICAgICAgIHRoaXMuX2xheWVycyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIGxheWVyID0gY3JlYXRlU3R5bGVMYXllcihsYXllcik7XG4gICAgICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtsYXllcjoge2lkOiBsYXllci5pZH19KTtcbiAgICAgICAgICAgIHRoaXMuX2xheWVyc1tsYXllci5pZF0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRMYXllcnMnLCB0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpKTtcblxuICAgICAgICB0aGlzLmxpZ2h0ID0gbmV3IExpZ2h0KHRoaXMuc3R5bGVzaGVldC5saWdodCk7XG5cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnc3R5bGUubG9hZCcpKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVMYXllcihsYXllcjogU3R5bGVMYXllcikge1xuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV07XG4gICAgICAgIGlmICghc291cmNlQ2FjaGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gbGF5ZXIuc291cmNlTGF5ZXI7XG4gICAgICAgIGlmICghc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpO1xuICAgICAgICBpZiAoc291cmNlLnR5cGUgPT09ICdnZW9qc29uJyB8fCAoc291cmNlLnZlY3RvckxheWVySWRzICYmIHNvdXJjZS52ZWN0b3JMYXllcklkcy5pbmRleE9mKHNvdXJjZUxheWVyKSA9PT0gLTEpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBTb3VyY2UgbGF5ZXIgXCIke3NvdXJjZUxheWVyfVwiIGAgK1xuICAgICAgICAgICAgICAgIGBkb2VzIG5vdCBleGlzdCBvbiBzb3VyY2UgXCIke3NvdXJjZS5pZH1cIiBgICtcbiAgICAgICAgICAgICAgICBgYXMgc3BlY2lmaWVkIGJ5IHN0eWxlIGxheWVyIFwiJHtsYXllci5pZH1cImBcbiAgICAgICAgICAgICkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkZWQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRTb3VyY2VzKS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnNvdXJjZUNhY2hlcylcbiAgICAgICAgICAgIGlmICghdGhpcy5zb3VyY2VDYWNoZXNbaWRdLmxvYWRlZCgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VNYW5hZ2VyLmlzTG9hZGVkKCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX3NlcmlhbGl6ZUxheWVycyhpZHM6IEFycmF5PHN0cmluZz4pOiBBcnJheTxPYmplY3Q+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZExheWVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgIT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVycy5wdXNoKGxheWVyLnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZExheWVycztcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMubGlnaHQgJiYgdGhpcy5saWdodC5oYXNUcmFuc2l0aW9uKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVzW2lkXS5oYXNUcmFuc2l0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fbGF5ZXJzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbGF5ZXJzW2lkXS5oYXNUcmFuc2l0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBfY2hlY2tMb2FkZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0eWxlIGlzIG5vdCBkb25lIGxvYWRpbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHF1ZXVlZCBzdHlsZSB1cGRhdGVzIGluIGEgYmF0Y2ggYW5kIHJlY2FsY3VsYXRlIHpvb20tZGVwZW5kZW50IHBhaW50IHByb3BlcnRpZXMuXG4gICAgICovXG4gICAgdXBkYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fY2hhbmdlZDtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJZHMgPSBPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkTGF5ZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRJZHMgPSBPYmplY3Qua2V5cyh0aGlzLl9yZW1vdmVkTGF5ZXJzKTtcblxuICAgICAgICAgICAgaWYgKHVwZGF0ZWRJZHMubGVuZ3RoIHx8IHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKHVwZGF0ZWRJZHMsIHJlbW92ZWRJZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl91cGRhdGVkU291cmNlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2lkXTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYWN0aW9uID09PSAncmVsb2FkJyB8fCBhY3Rpb24gPT09ICdjbGVhcicpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdyZWxvYWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZFNvdXJjZShpZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdjbGVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJTb3VyY2UoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl91cGRhdGVkUGFpbnRQcm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xheWVyc1tpZF0udXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVycyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0VXBkYXRlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzb3VyY2VJZCBpbiB0aGlzLnNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdLnVzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBvZiB0aGlzLl9vcmRlcikge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbbGF5ZXJJZF07XG5cbiAgICAgICAgICAgIGxheWVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIHRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKSk7XG4gICAgICAgICAgICBpZiAoIWxheWVyLmlzSGlkZGVuKHBhcmFtZXRlcnMuem9vbSkgJiYgbGF5ZXIuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXS51c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlnaHQucmVjYWxjdWxhdGUocGFyYW1ldGVycyk7XG4gICAgICAgIHRoaXMueiA9IHBhcmFtZXRlcnMuem9vbTtcblxuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgX3VwZGF0ZVdvcmtlckxheWVycyh1cGRhdGVkSWRzOiBBcnJheTxzdHJpbmc+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoJ3VwZGF0ZUxheWVycycsIHtcbiAgICAgICAgICAgIGxheWVyczogdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHVwZGF0ZWRJZHMpLFxuICAgICAgICAgICAgcmVtb3ZlZElkc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVzZXRVcGRhdGVzKCkge1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlZExheWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9yZW1vdmVkTGF5ZXJzID0ge307XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMgPSB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhpcyBzdHlsZSdzIHN0YXRlIHRvIG1hdGNoIHRoZSBnaXZlbiBzdHlsZSBKU09OLCBwZXJmb3JtaW5nIG9ubHlcbiAgICAgKiB0aGUgbmVjZXNzYXJ5IG11dGF0aW9ucy5cbiAgICAgKlxuICAgICAqIE1heSB0aHJvdyBhbiBFcnJvciAoJ1VuaW1wbGVtZW50ZWQ6IE1FVEhPRCcpIGlmIHRoZSBtYXBib3gtZ2wtc3R5bGUtc3BlY1xuICAgICAqIGRpZmYgYWxnb3JpdGhtIHByb2R1Y2VzIGFuIG9wZXJhdGlvbiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBhbnkgY2hhbmdlcyB3ZXJlIG1hZGU7IGZhbHNlIG90aGVyd2lzZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0U3RhdGUobmV4dFN0YXRlOiBTdHlsZVNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBpZiAoZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGVTdHlsZShuZXh0U3RhdGUpKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIG5leHRTdGF0ZSA9IGNsb25lKG5leHRTdGF0ZSk7XG4gICAgICAgIG5leHRTdGF0ZS5sYXllcnMgPSBkZXJlZihuZXh0U3RhdGUubGF5ZXJzKTtcblxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gZGlmZlN0eWxlcyh0aGlzLnNlcmlhbGl6ZSgpLCBuZXh0U3RhdGUpXG4gICAgICAgICAgICAuZmlsdGVyKG9wID0+ICEob3AuY29tbWFuZCBpbiBpZ25vcmVkRGlmZk9wZXJhdGlvbnMpKTtcblxuICAgICAgICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaW1wbGVtZW50ZWRPcHMgPSBjaGFuZ2VzLmZpbHRlcihvcCA9PiAhKG9wLmNvbW1hbmQgaW4gc3VwcG9ydGVkRGlmZk9wZXJhdGlvbnMpKTtcbiAgICAgICAgaWYgKHVuaW1wbGVtZW50ZWRPcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiAke3VuaW1wbGVtZW50ZWRPcHMubWFwKG9wID0+IG9wLmNvbW1hbmQpLmpvaW4oJywgJyl9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhbmdlcy5mb3JFYWNoKChvcCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wLmNvbW1hbmQgPT09ICdzZXRUcmFuc2l0aW9uJykge1xuICAgICAgICAgICAgICAgIC8vIGB0cmFuc2l0aW9uYCBpcyBhbHdheXMgcmVhZCBkaXJlY3RseSBvZmYgb2ZcbiAgICAgICAgICAgICAgICAvLyBgdGhpcy5zdHlsZXNoZWV0YCwgd2hpY2ggd2UgdXBkYXRlIGJlbG93XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKHRoaXM6IGFueSlbb3AuY29tbWFuZF0uYXBwbHkodGhpcywgb3AuYXJncyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3R5bGVzaGVldCA9IG5leHRTdGF0ZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhZGRJbWFnZShpZDogc3RyaW5nLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBpZiAodGhpcy5nZXRJbWFnZShpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdBbiBpbWFnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyLmFkZEltYWdlKGlkLCBpbWFnZSk7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgfVxuXG4gICAgdXBkYXRlSW1hZ2UoaWQ6IHN0cmluZywgaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIudXBkYXRlSW1hZ2UoaWQsIGltYWdlKTtcbiAgICB9XG5cbiAgICBnZXRJbWFnZShpZDogc3RyaW5nKTogP1N0eWxlSW1hZ2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UoaWQpO1xuICAgIH1cblxuICAgIHJlbW92ZUltYWdlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldEltYWdlKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoJ05vIGltYWdlIHdpdGggdGhpcyBuYW1lIGV4aXN0cy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGlkKTtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcbiAgICB9XG5cbiAgICBsaXN0SW1hZ2VzKCkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCk7XG4gICAgfVxuXG4gICAgYWRkU291cmNlKGlkOiBzdHJpbmcsIHNvdXJjZTogU291cmNlU3BlY2lmaWNhdGlvbiwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZXNbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgYWxyZWFkeSBhIHNvdXJjZSB3aXRoIHRoaXMgSUQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc291cmNlLnR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHR5cGUgcHJvcGVydHkgbXVzdCBiZSBkZWZpbmVkLCBidXQgdGhlIG9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdlcmUgZ2l2ZW46ICR7T2JqZWN0LmtleXMoc291cmNlKS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1aWx0SW5zID0gWyd2ZWN0b3InLCAncmFzdGVyJywgJ2dlb2pzb24nLCAndmlkZW8nLCAnaW1hZ2UnXTtcbiAgICAgICAgY29uc3Qgc2hvdWxkVmFsaWRhdGUgPSBidWlsdElucy5pbmRleE9mKHNvdXJjZS50eXBlKSA+PSAwO1xuICAgICAgICBpZiAoc2hvdWxkVmFsaWRhdGUgJiYgdGhpcy5fdmFsaWRhdGUodmFsaWRhdGVTdHlsZS5zb3VyY2UsIGBzb3VyY2VzLiR7aWR9YCwgc291cmNlLCBudWxsLCBvcHRpb25zKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLm1hcCAmJiB0aGlzLm1hcC5fY29sbGVjdFJlc291cmNlVGltaW5nKSAoc291cmNlOiBhbnkpLmNvbGxlY3RSZXNvdXJjZVRpbWluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbaWRdID0gbmV3IFNvdXJjZUNhY2hlKGlkLCBzb3VyY2UsIHRoaXMuZGlzcGF0Y2hlcik7XG4gICAgICAgIHNvdXJjZUNhY2hlLnN0eWxlID0gdGhpcztcbiAgICAgICAgc291cmNlQ2FjaGUuc2V0RXZlbnRlZFBhcmVudCh0aGlzLCAoKSA9PiAoe1xuICAgICAgICAgICAgaXNTb3VyY2VMb2FkZWQ6IHRoaXMubG9hZGVkKCksXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZUNhY2hlLnNlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgc291cmNlSWQ6IGlkXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzb3VyY2VDYWNoZS5vbkFkZCh0aGlzLm1hcCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIHNvdXJjZSBmcm9tIHRoaXMgc3R5bGVzaGVldCwgZ2l2ZW4gaXRzIGlkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBpZCBvZiB0aGUgc291cmNlIHRvIHJlbW92ZVxuICAgICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBzb3VyY2UgaXMgZm91bmQgd2l0aCB0aGUgZ2l2ZW4gSURcbiAgICAgKi9cbiAgICByZW1vdmVTb3VyY2UoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlc1tpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCB0aGlzIElEJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xheWVyc1tsYXllcklkXS5zb3VyY2UgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFNvdXJjZSBcIiR7aWR9XCIgY2Fubm90IGJlIHJlbW92ZWQgd2hpbGUgbGF5ZXIgXCIke2xheWVySWR9XCIgaXMgdXNpbmcgaXQuYCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2VDYWNoZXNbaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy5fdXBkYXRlZFNvdXJjZXNbaWRdO1xuICAgICAgICBzb3VyY2VDYWNoZS5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJywgZGF0YVR5cGU6J3NvdXJjZScsIHNvdXJjZUlkOiBpZH0pKTtcbiAgICAgICAgc291cmNlQ2FjaGUuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgc291cmNlQ2FjaGUuY2xlYXJUaWxlcygpO1xuXG4gICAgICAgIGlmIChzb3VyY2VDYWNoZS5vblJlbW92ZSkgc291cmNlQ2FjaGUub25SZW1vdmUodGhpcy5tYXApO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIFNldCB0aGUgZGF0YSBvZiBhIEdlb0pTT04gc291cmNlLCBnaXZlbiBpdHMgaWQuXG4gICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgaWQgb2YgdGhlIHNvdXJjZVxuICAgICogQHBhcmFtIHtHZW9KU09OfHN0cmluZ30gZGF0YSBHZW9KU09OIHNvdXJjZVxuICAgICovXG4gICAgc2V0R2VvSlNPTlNvdXJjZURhdGEoaWQ6IHN0cmluZywgZGF0YTogR2VvSlNPTiB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGFzc2VydCh0aGlzLnNvdXJjZUNhY2hlc1tpZF0gIT09IHVuZGVmaW5lZCwgJ1RoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIHRoaXMgSUQnKTtcbiAgICAgICAgY29uc3QgZ2VvanNvblNvdXJjZTogR2VvSlNPTlNvdXJjZSA9ICh0aGlzLnNvdXJjZUNhY2hlc1tpZF0uZ2V0U291cmNlKCk6IGFueSk7XG4gICAgICAgIGFzc2VydChnZW9qc29uU291cmNlLnR5cGUgPT09ICdnZW9qc29uJyk7XG5cbiAgICAgICAgZ2VvanNvblNvdXJjZS5zZXREYXRhKGRhdGEpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBzb3VyY2UgYnkgaWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBkZXNpcmVkIHNvdXJjZVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHNvdXJjZVxuICAgICAqL1xuICAgIGdldFNvdXJjZShpZDogc3RyaW5nKTogT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlQ2FjaGVzW2lkXSAmJiB0aGlzLnNvdXJjZUNhY2hlc1tpZF0uZ2V0U291cmNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgbGF5ZXIgdG8gdGhlIG1hcCBzdHlsZS4gVGhlIGxheWVyIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBsYXllciB3aXRoXG4gICAgICogSUQgYGJlZm9yZWAsIG9yIGFwcGVuZGVkIGlmIGBiZWZvcmVgIGlzIG9taXR0ZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtiZWZvcmVdIElEIG9mIGFuIGV4aXN0aW5nIGxheWVyIHRvIGluc2VydCBiZWZvcmVcbiAgICAgKi9cbiAgICBhZGRMYXllcihsYXllck9iamVjdDogTGF5ZXJTcGVjaWZpY2F0aW9uIHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UsIGJlZm9yZT86IHN0cmluZywgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBpZCA9IGxheWVyT2JqZWN0LmlkO1xuXG4gICAgICAgIGlmICh0aGlzLmdldExheWVyKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgTGF5ZXIgd2l0aCBpZCBcIiR7aWR9XCIgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBtYXBgKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxheWVyO1xuICAgICAgICBpZiAobGF5ZXJPYmplY3QudHlwZSA9PT0gJ2N1c3RvbScpIHtcblxuICAgICAgICAgICAgaWYgKGVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsIHZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcihsYXllck9iamVjdCkpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGxheWVyID0gY3JlYXRlU3R5bGVMYXllcihsYXllck9iamVjdCk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGF5ZXJPYmplY3Quc291cmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkU291cmNlKGlkLCBsYXllck9iamVjdC5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGxheWVyT2JqZWN0ID0gY2xvbmUobGF5ZXJPYmplY3QpO1xuICAgICAgICAgICAgICAgIGxheWVyT2JqZWN0ID0gKGV4dGVuZChsYXllck9iamVjdCwge3NvdXJjZTogaWR9KTogYW55KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdGhpcyBsYXllciBpcyBub3QgaW4gdGhlIHN0eWxlLmxheWVycyBhcnJheSwgc28gd2UgcGFzcyBhbiBpbXBvc3NpYmxlIGFycmF5IGluZGV4XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGUodmFsaWRhdGVTdHlsZS5sYXllcixcbiAgICAgICAgICAgICAgICBgbGF5ZXJzLiR7aWR9YCwgbGF5ZXJPYmplY3QsIHthcnJheUluZGV4OiAtMX0sIG9wdGlvbnMpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGxheWVyID0gY3JlYXRlU3R5bGVMYXllcihsYXllck9iamVjdCk7XG4gICAgICAgICAgICB0aGlzLl92YWxpZGF0ZUxheWVyKGxheWVyKTtcblxuICAgICAgICAgICAgbGF5ZXIuc2V0RXZlbnRlZFBhcmVudCh0aGlzLCB7bGF5ZXI6IHtpZH19KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gYmVmb3JlID8gdGhpcy5fb3JkZXIuaW5kZXhPZihiZWZvcmUpIDogdGhpcy5fb3JkZXIubGVuZ3RoO1xuICAgICAgICBpZiAoYmVmb3JlICYmIGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgTGF5ZXIgd2l0aCBpZCBcIiR7YmVmb3JlfVwiIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcmRlci5zcGxpY2UoaW5kZXgsIDAsIGlkKTtcbiAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjtcblxuICAgICAgICBpZiAodGhpcy5fcmVtb3ZlZExheWVyc1tpZF0gJiYgbGF5ZXIuc291cmNlICYmIGxheWVyLnR5cGUgIT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICAvLyBJZiwgaW4gdGhlIGN1cnJlbnQgYmF0Y2gsIHdlIGhhdmUgYWxyZWFkeSByZW1vdmVkIHRoaXMgbGF5ZXJcbiAgICAgICAgICAgIC8vIGFuZCB3ZSBhcmUgbm93IHJlLWFkZGluZyBpdCB3aXRoIGEgZGlmZmVyZW50IGB0eXBlYCwgdGhlbiB3ZVxuICAgICAgICAgICAgLy8gbmVlZCB0byBjbGVhciAocmF0aGVyIHRoYW4ganVzdCByZWxvYWQpIHRoZSB1bmRlcnlsaW5nIHNvdXJjZSdzXG4gICAgICAgICAgICAvLyB0aWxlcy4gIE90aGVyd2lzZSwgdGlsZXMgbWFya2VkICdyZWxvYWRpbmcnIHdpbGwgaGF2ZSBidWNrZXRzIC9cbiAgICAgICAgICAgIC8vIGJ1ZmZlcnMgdGhhdCBhcmUgc2V0IHVwIGZvciB0aGUgX3ByZXZpb3VzXyB2ZXJzaW9uIG9mIHRoaXNcbiAgICAgICAgICAgIC8vIGxheWVyLCBjYXVzaW5nLCBlLmcuOlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM2MzNcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGlmIChyZW1vdmVkLnR5cGUgIT09IGxheWVyLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVkU291cmNlc1tsYXllci5zb3VyY2VdID0gJ2NsZWFyJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXNbbGF5ZXIuc291cmNlXSA9ICdyZWxvYWQnO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0ucGF1c2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG5cbiAgICAgICAgaWYgKGxheWVyLm9uQWRkKSB7XG4gICAgICAgICAgICBsYXllci5vbkFkZCh0aGlzLm1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlcyBhIGxheWVyIHRvIGEgZGlmZmVyZW50IHotcG9zaXRpb24uIFRoZSBsYXllciB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgbGF5ZXIgd2l0aFxuICAgICAqIElEIGBiZWZvcmVgLCBvciBhcHBlbmRlZCBpZiBgYmVmb3JlYCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAgSUQgb2YgdGhlIGxheWVyIHRvIG1vdmVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZV0gSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IGJlZm9yZVxuICAgICAqL1xuICAgIG1vdmVMYXllcihpZDogc3RyaW5nLCBiZWZvcmU/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7aWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBtb3ZlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09PSBiZWZvcmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3JkZXIuaW5kZXhPZihpZCk7XG4gICAgICAgIHRoaXMuX29yZGVyLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBiZWZvcmUgPyB0aGlzLl9vcmRlci5pbmRleE9mKGJlZm9yZSkgOiB0aGlzLl9vcmRlci5sZW5ndGg7XG4gICAgICAgIGlmIChiZWZvcmUgJiYgbmV3SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBMYXllciB3aXRoIGlkIFwiJHtiZWZvcmV9XCIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcmRlci5zcGxpY2UobmV3SW5kZXgsIDAsIGlkKTtcblxuICAgICAgICB0aGlzLl9sYXllck9yZGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBpZCBmcm9tIHRoZSBzdHlsZS5cbiAgICAgKlxuICAgICAqIElmIG5vIHN1Y2ggbGF5ZXIgZXhpc3RzLCBhbiBgZXJyb3JgIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBsYXllciB0byByZW1vdmVcbiAgICAgKiBAZmlyZXMgZXJyb3JcbiAgICAgKi9cbiAgICByZW1vdmVMYXllcihpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7aWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSByZW1vdmVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3JkZXIuaW5kZXhPZihpZCk7XG4gICAgICAgIHRoaXMuX29yZGVyLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlZExheWVyc1tpZF0gPSBsYXllcjtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xheWVyc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl91cGRhdGVkTGF5ZXJzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2lkXTtcblxuICAgICAgICBpZiAobGF5ZXIub25SZW1vdmUpIHtcbiAgICAgICAgICAgIGxheWVyLm9uUmVtb3ZlKHRoaXMubWFwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgc3R5bGUgbGF5ZXIgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGBpZGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZCBvZiB0aGUgZGVzaXJlZCBsYXllclxuICAgICAqIEByZXR1cm5zIHs/T2JqZWN0fSBhIGxheWVyLCBpZiBvbmUgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBleGlzdHNcbiAgICAgKi9cbiAgICBnZXRMYXllcihpZDogc3RyaW5nKTogT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xheWVyc1tpZF07XG4gICAgfVxuXG4gICAgc2V0TGF5ZXJab29tUmFuZ2UobGF5ZXJJZDogc3RyaW5nLCBtaW56b29tOiA/bnVtYmVyLCBtYXh6b29tOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGhhdmUgem9vbSBleHRlbnQuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXllci5taW56b29tID09PSBtaW56b29tICYmIGxheWVyLm1heHpvb20gPT09IG1heHpvb20pIHJldHVybjtcblxuICAgICAgICBpZiAobWluem9vbSAhPSBudWxsKSB7XG4gICAgICAgICAgICBsYXllci5taW56b29tID0gbWluem9vbTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4em9vbSAhPSBudWxsKSB7XG4gICAgICAgICAgICBsYXllci5tYXh6b29tID0gbWF4em9vbTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgfVxuXG4gICAgc2V0RmlsdGVyKGxheWVySWQ6IHN0cmluZywgZmlsdGVyOiA/RmlsdGVyU3BlY2lmaWNhdGlvbiwgIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIGZpbHRlcmVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVlcEVxdWFsKGxheWVyLmZpbHRlciwgZmlsdGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlciA9PT0gbnVsbCB8fCBmaWx0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGF5ZXIuZmlsdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTGF5ZXIobGF5ZXIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUuZmlsdGVyLCBgbGF5ZXJzLiR7bGF5ZXIuaWR9LmZpbHRlcmAsIGZpbHRlciwgbnVsbCwgb3B0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxheWVyLmZpbHRlciA9IGNsb25lKGZpbHRlcik7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBsYXllcidzIGZpbHRlciBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXIgdGhlIGxheWVyIHRvIGluc3BlY3RcbiAgICAgKiBAcmV0dXJucyB7Kn0gdGhlIGxheWVyJ3MgZmlsdGVyLCBpZiBhbnlcbiAgICAgKi9cbiAgICBnZXRGaWx0ZXIobGF5ZXI6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gY2xvbmUodGhpcy5nZXRMYXllcihsYXllcikuZmlsdGVyKTtcbiAgICB9XG5cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eShsYXllcklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZXBFcXVhbChsYXllci5nZXRMYXlvdXRQcm9wZXJ0eShuYW1lKSwgdmFsdWUpKSByZXR1cm47XG5cbiAgICAgICAgbGF5ZXIuc2V0TGF5b3V0UHJvcGVydHkobmFtZSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgbGF5b3V0IHByb3BlcnR5J3MgdmFsdWUgZnJvbSBhIGdpdmVuIGxheWVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgdGhlIGxheWVyIHRvIGluc3BlY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgbGF5b3V0IHByb3BlcnR5XG4gICAgICogQHJldHVybnMgeyp9IHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICAgICAqL1xuICAgIGdldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcklkKTtcbiAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2xheWVySWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYXllci5nZXRMYXlvdXRQcm9wZXJ0eShuYW1lKTtcbiAgICB9XG5cbiAgICBzZXRQYWludFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcklkKTtcbiAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2xheWVySWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWVwRXF1YWwobGF5ZXIuZ2V0UGFpbnRQcm9wZXJ0eShuYW1lKSwgdmFsdWUpKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVxdWlyZXNSZWxheW91dCA9IGxheWVyLnNldFBhaW50UHJvcGVydHkobmFtZSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICBpZiAocmVxdWlyZXNSZWxheW91dCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTGF5ZXIobGF5ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2xheWVySWRdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRQYWludFByb3BlcnR5KGxheWVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMYXllcihsYXllcikuZ2V0UGFpbnRQcm9wZXJ0eShuYW1lKTtcbiAgICB9XG5cbiAgICBzZXRGZWF0dXJlU3RhdGUoZmVhdHVyZTogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudW1iZXI7IH0sIHN0YXRlOiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgY29uc3Qgc291cmNlSWQgPSBmZWF0dXJlLnNvdXJjZTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSBmZWF0dXJlLnNvdXJjZUxheWVyO1xuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW3NvdXJjZUlkXTtcbiAgICAgICAgY29uc3QgZmVhdHVyZUlkID0gcGFyc2VJbnQoZmVhdHVyZS5pZCwgMTApO1xuXG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlICcke3NvdXJjZUlkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnZ2VvanNvbicgJiYgc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYEdlb0pTT04gc291cmNlcyBjYW5ub3QgaGF2ZSBhIHNvdXJjZUxheWVyIHBhcmFtZXRlci5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiAhc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTihmZWF0dXJlSWQpIHx8IGZlYXR1cmVJZCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBmZWF0dXJlIGlkIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGFuZCBub24tbmVnYXRpdmUuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUNhY2hlLnNldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgZmVhdHVyZUlkLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHRhcmdldDogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkPzogc3RyaW5nIHwgbnVtYmVyOyB9LCBrZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgY29uc3Qgc291cmNlSWQgPSB0YXJnZXQuc291cmNlO1xuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW3NvdXJjZUlkXTtcblxuICAgICAgICBpZiAoc291cmNlQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZSAnJHtzb3VyY2VJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gc291cmNlVHlwZSA9PT0gJ3ZlY3RvcicgPyB0YXJnZXQuc291cmNlTGF5ZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVJZCA9IHBhcnNlSW50KHRhcmdldC5pZCwgMTApO1xuXG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiAhc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldC5pZCAhPT0gdW5kZWZpbmVkICYmIGlzTmFOKGZlYXR1cmVJZCkgfHwgZmVhdHVyZUlkIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgbm9uLW5lZ2F0aXZlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ICYmICh0eXBlb2YgdGFyZ2V0LmlkICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdGFyZ2V0LmlkICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYEEgZmVhdHVyZSBpZCBpcyByZXF1cmVkIHRvIHJlbW92ZSBpdHMgc3BlY2lmaWMgc3RhdGUgcHJvcGVydHkuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUNhY2hlLnJlbW92ZUZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgZmVhdHVyZUlkLCBrZXkpO1xuICAgIH1cblxuICAgIGdldEZlYXR1cmVTdGF0ZShmZWF0dXJlOiB7IHNvdXJjZTogc3RyaW5nOyBzb3VyY2VMYXllcj86IHN0cmluZzsgaWQ6IHN0cmluZyB8IG51bWJlcjsgfSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuICAgICAgICBjb25zdCBzb3VyY2VJZCA9IGZlYXR1cmUuc291cmNlO1xuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IGZlYXR1cmUuc291cmNlTGF5ZXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdO1xuICAgICAgICBjb25zdCBmZWF0dXJlSWQgPSBwYXJzZUludChmZWF0dXJlLmlkLCAxMCk7XG5cbiAgICAgICAgaWYgKHNvdXJjZUNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2UgJyR7c291cmNlSWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCkudHlwZTtcbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmICFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKGZlYXR1cmVJZCkgfHwgZmVhdHVyZUlkIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgYW5kIG5vbi1uZWdhdGl2ZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNvdXJjZUNhY2hlLmdldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgZmVhdHVyZUlkKTtcbiAgICB9XG5cbiAgICBnZXRUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHtkdXJhdGlvbjogMzAwLCBkZWxheTogMH0sIHRoaXMuc3R5bGVzaGVldCAmJiB0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbik7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyT2JqZWN0KHtcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMuc3R5bGVzaGVldC52ZXJzaW9uLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5zdHlsZXNoZWV0Lm5hbWUsXG4gICAgICAgICAgICBtZXRhZGF0YTogdGhpcy5zdHlsZXNoZWV0Lm1ldGFkYXRhLFxuICAgICAgICAgICAgbGlnaHQ6IHRoaXMuc3R5bGVzaGVldC5saWdodCxcbiAgICAgICAgICAgIGNlbnRlcjogdGhpcy5zdHlsZXNoZWV0LmNlbnRlcixcbiAgICAgICAgICAgIHpvb206IHRoaXMuc3R5bGVzaGVldC56b29tLFxuICAgICAgICAgICAgYmVhcmluZzogdGhpcy5zdHlsZXNoZWV0LmJlYXJpbmcsXG4gICAgICAgICAgICBwaXRjaDogdGhpcy5zdHlsZXNoZWV0LnBpdGNoLFxuICAgICAgICAgICAgc3ByaXRlOiB0aGlzLnN0eWxlc2hlZXQuc3ByaXRlLFxuICAgICAgICAgICAgZ2x5cGhzOiB0aGlzLnN0eWxlc2hlZXQuZ2x5cGhzLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24sXG4gICAgICAgICAgICBzb3VyY2VzOiBtYXBPYmplY3QodGhpcy5zb3VyY2VDYWNoZXMsIChzb3VyY2UpID0+IHNvdXJjZS5zZXJpYWxpemUoKSksXG4gICAgICAgICAgICBsYXllcnM6IHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcilcbiAgICAgICAgfSwgKHZhbHVlKSA9PiB7IHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkOyB9KTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTGF5ZXIobGF5ZXI6IFN0eWxlTGF5ZXIpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlZExheWVyc1tsYXllci5pZF0gPSB0cnVlO1xuICAgICAgICBpZiAobGF5ZXIuc291cmNlICYmICF0aGlzLl91cGRhdGVkU291cmNlc1tsYXllci5zb3VyY2VdKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVkU291cmNlc1tsYXllci5zb3VyY2VdID0gJ3JlbG9hZCc7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcyhzb3VyY2VSZXN1bHRzOiBBcnJheTxhbnk+KSB7XG4gICAgICAgIC8vIEZlYXR1cmUgb3JkZXIgaXMgY29tcGxpY2F0ZWQuXG4gICAgICAgIC8vIFRoZSBvcmRlciBiZXR3ZWVuIGZlYXR1cmVzIGluIHR3byAyRCBsYXllcnMgaXMgYWx3YXlzIGRldGVybWluZWQgYnkgbGF5ZXIgb3JkZXIuXG4gICAgICAgIC8vIFRoZSBvcmRlciBiZXR3ZWVuIGZlYXR1cmVzIGluIHR3byAzRCBsYXllcnMgaXMgYWx3YXlzIGRldGVybWluZWQgYnkgZGVwdGguXG4gICAgICAgIC8vIFRoZSBvcmRlciBiZXR3ZWVuIGEgZmVhdHVyZSBpbiBhIDJEIGxheWVyIGFuZCBhIDNEIGxheWVyIGlzIHRyaWNreTpcbiAgICAgICAgLy8gICAgICBNb3N0IG9mdGVuIGxheWVyIG9yZGVyIGRldGVybWluZXMgdGhlIGZlYXR1cmUgb3JkZXIgaW4gdGhpcyBjYXNlLiBJZlxuICAgICAgICAvLyAgICAgIGEgbGluZSBsYXllciBpcyBhYm92ZSBhIGV4dHJ1c2lvbiBsYXllciB0aGUgbGluZSBmZWF0dXJlIHdpbGwgYmUgcmVuZGVyZWRcbiAgICAgICAgLy8gICAgICBhYm92ZSB0aGUgZXh0cnVzaW9uLiBJZiB0aGUgbGluZSBsYXllciBpcyBiZWxvdyB0aGUgZXh0cnVzaW9uIGxheWVyLFxuICAgICAgICAvLyAgICAgIGl0IHdpbGwgYmUgcmVuZGVyZWQgYmVsb3cgaXQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAgVGhlcmUgaXMgYSB3ZWlyZCBjYXNlIHRob3VnaC5cbiAgICAgICAgLy8gICAgICBZb3UgaGF2ZSBsYXllcnMgaW4gdGhpcyBvcmRlcjogZXh0cnVzaW9uX2xheWVyX2EsIGxpbmVfbGF5ZXIsIGV4dHJ1c2lvbl9sYXllcl9iXG4gICAgICAgIC8vICAgICAgRWFjaCBsYXllciBoYXMgYSBmZWF0dXJlIHRoYXQgb3ZlcmxhcHMgdGhlIG90aGVyIGZlYXR1cmVzLlxuICAgICAgICAvLyAgICAgIFRoZSBmZWF0dXJlIGluIGV4dHJ1c2lvbl9sYXllcl9hIGlzIGNsb3NlciB0aGFuIHRoZSBmZWF0dXJlIGluIGV4dHJ1c2lvbl9sYXllcl9iIHNvIGl0IGlzIHJlbmRlcmVkIGFib3ZlLlxuICAgICAgICAvLyAgICAgIFRoZSBmZWF0dXJlIGluIGxpbmVfbGF5ZXIgaXMgcmVuZGVyZWQgYWJvdmUgZXh0cnVzaW9uX2xheWVyX2EuXG4gICAgICAgIC8vICAgICAgVGhpcyBtZWFucyB0aGF0IHRoYXQgdGhlIGxpbmVfbGF5ZXIgZmVhdHVyZSBpcyBhYm92ZSB0aGUgZXh0cnVzaW9uX2xheWVyX2IgZmVhdHVyZSBkZXNwaXRlXG4gICAgICAgIC8vICAgICAgaXQgYmVpbmcgaW4gYW4gZWFybGllciBsYXllci5cblxuICAgICAgICBjb25zdCBpc0xheWVyM0QgPSBsYXllcklkID0+IHRoaXMuX2xheWVyc1tsYXllcklkXS50eXBlID09PSAnZmlsbC1leHRydXNpb24nO1xuXG4gICAgICAgIGNvbnN0IGxheWVySW5kZXggPSB7fTtcbiAgICAgICAgY29uc3QgZmVhdHVyZXMzRCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBsID0gdGhpcy5fb3JkZXIubGVuZ3RoIC0gMTsgbCA+PSAwOyBsLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVySWQgPSB0aGlzLl9vcmRlcltsXTtcbiAgICAgICAgICAgIGlmIChpc0xheWVyM0QobGF5ZXJJZCkpIHtcbiAgICAgICAgICAgICAgICBsYXllckluZGV4W2xheWVySWRdID0gbDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZVJlc3VsdCBvZiBzb3VyY2VSZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyRmVhdHVyZXMgPSBzb3VyY2VSZXN1bHRbbGF5ZXJJZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXllckZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmVXcmFwcGVyIG9mIGxheWVyRmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlczNELnB1c2goZmVhdHVyZVdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmVhdHVyZXMzRC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYi5pbnRlcnNlY3Rpb25aIC0gYS5pbnRlcnNlY3Rpb25aO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBsID0gdGhpcy5fb3JkZXIubGVuZ3RoIC0gMTsgbCA+PSAwOyBsLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVySWQgPSB0aGlzLl9vcmRlcltsXTtcblxuICAgICAgICAgICAgaWYgKGlzTGF5ZXIzRChsYXllcklkKSkge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBhbGwgM0QgZmVhdHVyZXMgdGhhdCBhcmUgaW4gb3IgYWJvdmUgdGhlIGN1cnJlbnQgbGF5ZXJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZmVhdHVyZXMzRC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3Btb3N0M0QgPSBmZWF0dXJlczNEW2ldLmZlYXR1cmU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXllckluZGV4W3RvcG1vc3QzRC5sYXllci5pZF0gPCBsKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMucHVzaCh0b3Btb3N0M0QpO1xuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlczNELnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzb3VyY2VSZXN1bHQgb2Ygc291cmNlUmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXllckZlYXR1cmVzID0gc291cmNlUmVzdWx0W2xheWVySWRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlV3JhcHBlciBvZiBsYXllckZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMucHVzaChmZWF0dXJlV3JhcHBlci5mZWF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmZWF0dXJlcztcbiAgICB9XG5cbiAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMocXVlcnlHZW9tZXRyeTogYW55LCBwYXJhbXM6IGFueSwgdHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICAgICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMuZmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLmZpbHRlciwgJ3F1ZXJ5UmVuZGVyZWRGZWF0dXJlcy5maWx0ZXInLCBwYXJhbXMuZmlsdGVyLCBudWxsLCBwYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZWRTb3VyY2VzID0ge307XG4gICAgICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLmxheWVycykge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcy5sYXllcnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcigncGFyYW1ldGVycy5sYXllcnMgbXVzdCBiZSBhbiBBcnJheS4nKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBvZiBwYXJhbXMubGF5ZXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbbGF5ZXJJZF07XG4gICAgICAgICAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGxheWVyIGlzIG5vdCBpbiB0aGUgc3R5bGUubGF5ZXJzIGFycmF5XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcXVlcmllZCBmb3IgZmVhdHVyZXMuYCkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmNsdWRlZFNvdXJjZXNbbGF5ZXIuc291cmNlXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VSZXN1bHRzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgaWYgKHBhcmFtcy5sYXllcnMgJiYgIWluY2x1ZGVkU291cmNlc1tpZF0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgc291cmNlUmVzdWx0cy5wdXNoKFxuICAgICAgICAgICAgICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXllcnMsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBsYWNlbWVudCkge1xuICAgICAgICAgICAgLy8gSWYgYSBwbGFjZW1lbnQgaGFzIHJ1biwgcXVlcnkgYWdhaW5zdCBpdHMgQ29sbGlzaW9uSW5kZXhcbiAgICAgICAgICAgIC8vIGZvciBzeW1ib2wgcmVzdWx0cywgYW5kIHRyZWF0IGl0IGFzIGFuIGV4dHJhIHNvdXJjZSB0byBtZXJnZVxuICAgICAgICAgICAgc291cmNlUmVzdWx0cy5wdXNoKFxuICAgICAgICAgICAgICAgIHF1ZXJ5UmVuZGVyZWRTeW1ib2xzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXllcnMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50LmNvbGxpc2lvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlbWVudC5yZXRhaW5lZFF1ZXJ5RGF0YSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZmxhdHRlbkFuZFNvcnRSZW5kZXJlZEZlYXR1cmVzKHNvdXJjZVJlc3VsdHMpO1xuICAgIH1cblxuICAgIHF1ZXJ5U291cmNlRmVhdHVyZXMoc291cmNlSUQ6IHN0cmluZywgcGFyYW1zOiA/e3NvdXJjZUxheWVyOiA/c3RyaW5nLCBmaWx0ZXI6ID9BcnJheTxhbnk+LCB2YWxpZGF0ZT86IGJvb2xlYW59KSB7XG4gICAgICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5fdmFsaWRhdGUodmFsaWRhdGVTdHlsZS5maWx0ZXIsICdxdWVyeVNvdXJjZUZlYXR1cmVzLmZpbHRlcicsIHBhcmFtcy5maWx0ZXIsIG51bGwsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tzb3VyY2VJRF07XG4gICAgICAgIHJldHVybiBzb3VyY2VDYWNoZSA/IHF1ZXJ5U291cmNlRmVhdHVyZXMoc291cmNlQ2FjaGUsIHBhcmFtcykgOiBbXTtcbiAgICB9XG5cbiAgICBhZGRTb3VyY2VUeXBlKG5hbWU6IHN0cmluZywgU291cmNlVHlwZTogU291cmNlQ2xhc3MsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBpZiAoU3R5bGUuZ2V0U291cmNlVHlwZShuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcihgQSBzb3VyY2UgdHlwZSBjYWxsZWQgXCIke25hbWV9XCIgYWxyZWFkeSBleGlzdHMuYCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgU3R5bGUuc2V0U291cmNlVHlwZShuYW1lLCBTb3VyY2VUeXBlKTtcblxuICAgICAgICBpZiAoIVNvdXJjZVR5cGUud29ya2VyU291cmNlVVJMKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdsb2FkV29ya2VyU291cmNlJywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHVybDogU291cmNlVHlwZS53b3JrZXJTb3VyY2VVUkxcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGdldExpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5saWdodC5nZXRMaWdodCgpO1xuICAgIH1cblxuICAgIHNldExpZ2h0KGxpZ2h0T3B0aW9uczogTGlnaHRTcGVjaWZpY2F0aW9uLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGxpZ2h0ID0gdGhpcy5saWdodC5nZXRMaWdodCgpO1xuICAgICAgICBsZXQgX3VwZGF0ZSA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBsaWdodE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKGxpZ2h0T3B0aW9uc1trZXldLCBsaWdodFtrZXldKSkge1xuICAgICAgICAgICAgICAgIF91cGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghX3VwZGF0ZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICBub3c6IGJyb3dzZXIubm93KCksXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBleHRlbmQoe1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAsXG4gICAgICAgICAgICAgICAgZGVsYXk6IDBcbiAgICAgICAgICAgIH0sIHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubGlnaHQuc2V0TGlnaHQobGlnaHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGUodmFsaWRhdGU6IFZhbGlkYXRvciwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHByb3BzOiBhbnksIG9wdGlvbnM6IHsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnZhbGlkYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZS5jYWxsKHZhbGlkYXRlU3R5bGUsIGV4dGVuZCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBzdHlsZTogdGhpcy5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0sIHByb3BzKSkpO1xuICAgIH1cblxuICAgIF9yZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3Nwcml0ZVJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3Nwcml0ZVJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLl9zcHJpdGVSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBydGxUZXh0UGx1Z2luRXZlbnRlZC5vZmYoJ3BsdWdpbkF2YWlsYWJsZScsIHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayk7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2lkXS5jbGVhclRpbGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIF9jbGVhclNvdXJjZShpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2lkXS5jbGVhclRpbGVzKCk7XG4gICAgfVxuXG4gICAgX3JlbG9hZFNvdXJjZShpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2lkXS5yZXN1bWUoKTtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIF91cGRhdGVTb3VyY2VzKHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2lkXS51cGRhdGUodHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWxvYWRTb3VyY2UoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVBsYWNlbWVudCh0cmFuc2Zvcm06IFRyYW5zZm9ybSwgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuLCBmYWRlRHVyYXRpb246IG51bWJlciwgY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuKSB7XG4gICAgICAgIGxldCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgcGxhY2VtZW50Q29tbWl0dGVkID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJUaWxlcyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiB0aGlzLl9vcmRlcikge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgIGlmIChzdHlsZUxheWVyLnR5cGUgIT09ICdzeW1ib2wnKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKCFsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc3R5bGVMYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgICAgIGxheWVyVGlsZXNbc3R5bGVMYXllci5zb3VyY2VdID0gc291cmNlQ2FjaGUuZ2V0UmVuZGVyYWJsZUlkcyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChpZCkgPT4gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoaWQpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gKGIudGlsZUlELm92ZXJzY2FsZWRaIC0gYS50aWxlSUQub3ZlcnNjYWxlZFopIHx8IChhLnRpbGVJRC5pc0xlc3NUaGFuKGIudGlsZUlEKSA/IC0xIDogMSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsYXllckJ1Y2tldHNDaGFuZ2VkID0gdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5hZGRMYXllcihzdHlsZUxheWVyLCBsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSwgdHJhbnNmb3JtLmNlbnRlci5sbmcpO1xuICAgICAgICAgICAgc3ltYm9sQnVja2V0c0NoYW5nZWQgPSBzeW1ib2xCdWNrZXRzQ2hhbmdlZCB8fCBsYXllckJ1Y2tldHNDaGFuZ2VkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXgucHJ1bmVVbnVzZWRMYXllcnModGhpcy5fb3JkZXIpO1xuXG4gICAgICAgIC8vIEFueXRoaW5nIHRoYXQgY2hhbmdlcyBvdXIgXCJpbiBwcm9ncmVzc1wiIGxheWVyIGFuZCB0aWxlIGluZGljZXMgcmVxdWlyZXMgdXNcbiAgICAgICAgLy8gdG8gc3RhcnQgb3Zlci4gV2hlbiB3ZSBzdGFydCBvdmVyLCB3ZSBkbyBhIGZ1bGwgcGxhY2VtZW50IGluc3RlYWQgb2YgaW5jcmVtZW50YWxcbiAgICAgICAgLy8gdG8gcHJldmVudCBzdGFydmF0aW9uLlxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJlc3RhcnQgcGxhY2VtZW50IHRvIGtlZXAgbGF5ZXIgaW5kaWNlcyBpbiBzeW5jLlxuICAgICAgICAvLyBBbHNvIGZvcmNlIGZ1bGwgcGxhY2VtZW50IHdoZW4gZmFkZUR1cmF0aW9uID09PSAwIHRvIGVuc3VyZSB0aGF0IG5ld2x5IGxvYWRlZFxuICAgICAgICAvLyB0aWxlcyB3aWxsIGZ1bGx5IGRpc3BsYXkgc3ltYm9scyBpbiB0aGVpciBmaXJzdCBmcmFtZVxuICAgICAgICBjb25zdCBmb3JjZUZ1bGxQbGFjZW1lbnQgPSB0aGlzLl9sYXllck9yZGVyQ2hhbmdlZCB8fCBmYWRlRHVyYXRpb24gPT09IDA7XG5cbiAgICAgICAgaWYgKGZvcmNlRnVsbFBsYWNlbWVudCB8fCAhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQgfHwgKHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpICYmICF0aGlzLnBsYWNlbWVudC5zdGlsbFJlY2VudChicm93c2VyLm5vdygpKSkpIHtcbiAgICAgICAgICAgIHRoaXMucGF1c2VhYmxlUGxhY2VtZW50ID0gbmV3IFBhdXNlYWJsZVBsYWNlbWVudCh0cmFuc2Zvcm0sIHRoaXMuX29yZGVyLCBmb3JjZUZ1bGxQbGFjZW1lbnQsIHNob3dDb2xsaXNpb25Cb3hlcywgZmFkZUR1cmF0aW9uLCBjcm9zc1NvdXJjZUNvbGxpc2lvbnMsIHRoaXMucGxhY2VtZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkpIHtcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IHBsYWNlbWVudCBmaW5pc2hlZCBydW5uaW5nLCBidXQgdGhlIG5leHQgb25lIGhhc27DosKAwpl0XG4gICAgICAgICAgICAvLyBzdGFydGVkIHlldCBiZWNhdXNlIG9mIHRoZSBgc3RpbGxSZWNlbnRgIGNoZWNrIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAvLyBhYm92ZSwgc28gbWFyayBpdCBzdGFsZSB0byBlbnN1cmUgdGhhdCB3ZSByZXF1ZXN0IGFub3RoZXJcbiAgICAgICAgICAgIC8vIHJlbmRlciBmcmFtZVxuICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQuc2V0U3RhbGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmNvbnRpbnVlUGxhY2VtZW50KHRoaXMuX29yZGVyLCB0aGlzLl9sYXllcnMsIGxheWVyVGlsZXMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlbWVudCA9IHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmNvbW1pdChicm93c2VyLm5vdygpKTtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRDb21taXR0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3ltYm9sQnVja2V0c0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGUgcGxhY2VtZW50IGdldHMgc3BsaXQgb3ZlciBtdWx0aXBsZSBmcmFtZXMgaXQgaXMgcG9zc2libGVcbiAgICAgICAgICAgICAgICAvLyB0aGVzZSBidWNrZXRzIHdlcmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGV5IHdlcmUgY2hhbmdlZCBhbmQgc28gdGhlXG4gICAgICAgICAgICAgICAgLy8gcGxhY2VtZW50IGlzIGFscmVhZHkgc3RhbGUgd2hpbGUgaXQgaXMgaW4gcHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICB0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5wbGFjZW1lbnQuc2V0U3RhbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwbGFjZW1lbnRDb21taXR0ZWQgfHwgc3ltYm9sQnVja2V0c0NoYW5nZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiB0aGlzLl9vcmRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlTGF5ZXIgPSB0aGlzLl9sYXllcnNbbGF5ZXJJRF07XG4gICAgICAgICAgICAgICAgaWYgKHN0eWxlTGF5ZXIudHlwZSAhPT0gJ3N5bWJvbCcpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50LnVwZGF0ZUxheWVyT3BhY2l0aWVzKHN0eWxlTGF5ZXIsIGxheWVyVGlsZXNbc3R5bGVMYXllci5zb3VyY2VdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5lZWRzUmVuZGVyIGlzIGZhbHNlIHdoZW4gd2UgaGF2ZSBqdXN0IGZpbmlzaGVkIGEgcGxhY2VtZW50IHRoYXQgZGlkbid0IGNoYW5nZSB0aGUgdmlzaWJpbGl0eSBvZiBhbnkgc3ltYm9sc1xuICAgICAgICBjb25zdCBuZWVkc1JlcmVuZGVyID0gIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpIHx8IHRoaXMucGxhY2VtZW50Lmhhc1RyYW5zaXRpb25zKGJyb3dzZXIubm93KCkpO1xuICAgICAgICByZXR1cm4gbmVlZHNSZXJlbmRlcjtcbiAgICB9XG5cbiAgICBfcmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnJlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGxiYWNrcyBmcm9tIHdlYiB3b3JrZXJzXG5cbiAgICBnZXRJbWFnZXMobWFwSWQ6IHN0cmluZywgcGFyYW1zOiB7aWNvbnM6IEFycmF5PHN0cmluZz59LCBjYWxsYmFjazogQ2FsbGJhY2s8e1tzdHJpbmddOiBTdHlsZUltYWdlfT4pIHtcbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKHBhcmFtcy5pY29ucywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGdldEdseXBocyhtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtzdGFja3M6IHtbc3RyaW5nXTogQXJyYXk8bnVtYmVyPn19LCBjYWxsYmFjazogQ2FsbGJhY2s8e1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0+KSB7XG4gICAgICAgIHRoaXMuZ2x5cGhNYW5hZ2VyLmdldEdseXBocyhwYXJhbXMuc3RhY2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZ2V0UmVzb3VyY2UobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8YW55Pik6IENhbmNlbGFibGUge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3QocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxufVxuXG5TdHlsZS5nZXRTb3VyY2VUeXBlID0gZ2V0U291cmNlVHlwZTtcblN0eWxlLnNldFNvdXJjZVR5cGUgPSBzZXRTb3VyY2VUeXBlO1xuU3R5bGUucmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHkgPSByZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eTtcblxuZXhwb3J0IGRlZmF1bHQgU3R5bGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zJywgdHlwZTogJ0ludDE2JywgY29tcG9uZW50czogMn1cbl0pO1xuIiwiXG4vLyBEaXNhYmxlIEZsb3cgYW5ub3RhdGlvbnMgaGVyZSBiZWNhdXNlIEZsb3cgZG9lc24ndCBzdXBwb3J0IGltcG9ydGluZyBHTFNMIGZpbGVzXG4vKiBlc2xpbnQtZGlzYWJsZSBmbG93dHlwZS9yZXF1aXJlLXZhbGlkLWZpbGUtYW5ub3RhdGlvbiAqL1xuXG5pbXBvcnQgcHJlbHVkZUZyYWcgZnJvbSAnLi9fcHJlbHVkZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBwcmVsdWRlVmVydCBmcm9tICcuL19wcmVsdWRlLnZlcnRleC5nbHNsJztcbmltcG9ydCBiYWNrZ3JvdW5kRnJhZyBmcm9tICcuL2JhY2tncm91bmQuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgYmFja2dyb3VuZFZlcnQgZnJvbSAnLi9iYWNrZ3JvdW5kLnZlcnRleC5nbHNsJztcbmltcG9ydCBiYWNrZ3JvdW5kUGF0dGVybkZyYWcgZnJvbSAnLi9iYWNrZ3JvdW5kX3BhdHRlcm4uZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgYmFja2dyb3VuZFBhdHRlcm5WZXJ0IGZyb20gJy4vYmFja2dyb3VuZF9wYXR0ZXJuLnZlcnRleC5nbHNsJztcbmltcG9ydCBjaXJjbGVGcmFnIGZyb20gJy4vY2lyY2xlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGNpcmNsZVZlcnQgZnJvbSAnLi9jaXJjbGUudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGNsaXBwaW5nTWFza0ZyYWcgZnJvbSAnLi9jbGlwcGluZ19tYXNrLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGNsaXBwaW5nTWFza1ZlcnQgZnJvbSAnLi9jbGlwcGluZ19tYXNrLnZlcnRleC5nbHNsJztcbmltcG9ydCBoZWF0bWFwRnJhZyBmcm9tICcuL2hlYXRtYXAuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgaGVhdG1hcFZlcnQgZnJvbSAnLi9oZWF0bWFwLnZlcnRleC5nbHNsJztcbmltcG9ydCBoZWF0bWFwVGV4dHVyZUZyYWcgZnJvbSAnLi9oZWF0bWFwX3RleHR1cmUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgaGVhdG1hcFRleHR1cmVWZXJ0IGZyb20gJy4vaGVhdG1hcF90ZXh0dXJlLnZlcnRleC5nbHNsJztcbmltcG9ydCBjb2xsaXNpb25Cb3hGcmFnIGZyb20gJy4vY29sbGlzaW9uX2JveC5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBjb2xsaXNpb25Cb3hWZXJ0IGZyb20gJy4vY29sbGlzaW9uX2JveC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgY29sbGlzaW9uQ2lyY2xlRnJhZyBmcm9tICcuL2NvbGxpc2lvbl9jaXJjbGUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgY29sbGlzaW9uQ2lyY2xlVmVydCBmcm9tICcuL2NvbGxpc2lvbl9jaXJjbGUudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGRlYnVnRnJhZyBmcm9tICcuL2RlYnVnLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGRlYnVnVmVydCBmcm9tICcuL2RlYnVnLnZlcnRleC5nbHNsJztcbmltcG9ydCBmaWxsRnJhZyBmcm9tICcuL2ZpbGwuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgZmlsbFZlcnQgZnJvbSAnLi9maWxsLnZlcnRleC5nbHNsJztcbmltcG9ydCBmaWxsT3V0bGluZUZyYWcgZnJvbSAnLi9maWxsX291dGxpbmUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgZmlsbE91dGxpbmVWZXJ0IGZyb20gJy4vZmlsbF9vdXRsaW5lLnZlcnRleC5nbHNsJztcbmltcG9ydCBmaWxsT3V0bGluZVBhdHRlcm5GcmFnIGZyb20gJy4vZmlsbF9vdXRsaW5lX3BhdHRlcm4uZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgZmlsbE91dGxpbmVQYXR0ZXJuVmVydCBmcm9tICcuL2ZpbGxfb3V0bGluZV9wYXR0ZXJuLnZlcnRleC5nbHNsJztcbmltcG9ydCBmaWxsUGF0dGVybkZyYWcgZnJvbSAnLi9maWxsX3BhdHRlcm4uZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgZmlsbFBhdHRlcm5WZXJ0IGZyb20gJy4vZmlsbF9wYXR0ZXJuLnZlcnRleC5nbHNsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uRnJhZyBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxFeHRydXNpb25WZXJ0IGZyb20gJy4vZmlsbF9leHRydXNpb24udmVydGV4Lmdsc2wnO1xuaW1wb3J0IGZpbGxFeHRydXNpb25QYXR0ZXJuRnJhZyBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3BhdHRlcm4uZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvblBhdHRlcm5WZXJ0IGZyb20gJy4vZmlsbF9leHRydXNpb25fcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGlsbHNoYWRlUHJlcGFyZUZyYWcgZnJvbSAnLi9oaWxsc2hhZGVfcHJlcGFyZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBoaWxsc2hhZGVQcmVwYXJlVmVydCBmcm9tICcuL2hpbGxzaGFkZV9wcmVwYXJlLnZlcnRleC5nbHNsJztcbmltcG9ydCBoaWxsc2hhZGVGcmFnIGZyb20gJy4vaGlsbHNoYWRlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGhpbGxzaGFkZVZlcnQgZnJvbSAnLi9oaWxsc2hhZGUudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGxpbmVGcmFnIGZyb20gJy4vbGluZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBsaW5lVmVydCBmcm9tICcuL2xpbmUudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGxpbmVHcmFkaWVudEZyYWcgZnJvbSAnLi9saW5lX2dyYWRpZW50LmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGxpbmVHcmFkaWVudFZlcnQgZnJvbSAnLi9saW5lX2dyYWRpZW50LnZlcnRleC5nbHNsJztcbmltcG9ydCBsaW5lUGF0dGVybkZyYWcgZnJvbSAnLi9saW5lX3BhdHRlcm4uZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgbGluZVBhdHRlcm5WZXJ0IGZyb20gJy4vbGluZV9wYXR0ZXJuLnZlcnRleC5nbHNsJztcbmltcG9ydCBsaW5lU0RGRnJhZyBmcm9tICcuL2xpbmVfc2RmLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGxpbmVTREZWZXJ0IGZyb20gJy4vbGluZV9zZGYudmVydGV4Lmdsc2wnO1xuaW1wb3J0IHJhc3RlckZyYWcgZnJvbSAnLi9yYXN0ZXIuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgcmFzdGVyVmVydCBmcm9tICcuL3Jhc3Rlci52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgc3ltYm9sSWNvbkZyYWcgZnJvbSAnLi9zeW1ib2xfaWNvbi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBzeW1ib2xJY29uVmVydCBmcm9tICcuL3N5bWJvbF9pY29uLnZlcnRleC5nbHNsJztcbmltcG9ydCBzeW1ib2xTREZGcmFnIGZyb20gJy4vc3ltYm9sX3NkZi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBzeW1ib2xTREZWZXJ0IGZyb20gJy4vc3ltYm9sX3NkZi52ZXJ0ZXguZ2xzbCc7XG5cbmV4cG9ydCBjb25zdCBwcmVsdWRlID0gY29tcGlsZShwcmVsdWRlRnJhZywgcHJlbHVkZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmQgPSBjb21waWxlKGJhY2tncm91bmRGcmFnLCBiYWNrZ3JvdW5kVmVydCk7XG5leHBvcnQgY29uc3QgYmFja2dyb3VuZFBhdHRlcm4gPSBjb21waWxlKGJhY2tncm91bmRQYXR0ZXJuRnJhZywgYmFja2dyb3VuZFBhdHRlcm5WZXJ0KTtcbmV4cG9ydCBjb25zdCBjaXJjbGUgPSBjb21waWxlKGNpcmNsZUZyYWcsIGNpcmNsZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGNsaXBwaW5nTWFzayA9IGNvbXBpbGUoY2xpcHBpbmdNYXNrRnJhZywgY2xpcHBpbmdNYXNrVmVydCk7XG5leHBvcnQgY29uc3QgaGVhdG1hcCA9IGNvbXBpbGUoaGVhdG1hcEZyYWcsIGhlYXRtYXBWZXJ0KTtcbmV4cG9ydCBjb25zdCBoZWF0bWFwVGV4dHVyZSA9IGNvbXBpbGUoaGVhdG1hcFRleHR1cmVGcmFnLCBoZWF0bWFwVGV4dHVyZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGNvbGxpc2lvbkJveCA9IGNvbXBpbGUoY29sbGlzaW9uQm94RnJhZywgY29sbGlzaW9uQm94VmVydCk7XG5leHBvcnQgY29uc3QgY29sbGlzaW9uQ2lyY2xlID0gY29tcGlsZShjb2xsaXNpb25DaXJjbGVGcmFnLCBjb2xsaXNpb25DaXJjbGVWZXJ0KTtcbmV4cG9ydCBjb25zdCBkZWJ1ZyA9IGNvbXBpbGUoZGVidWdGcmFnLCBkZWJ1Z1ZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGwgPSBjb21waWxlKGZpbGxGcmFnLCBmaWxsVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbE91dGxpbmUgPSBjb21waWxlKGZpbGxPdXRsaW5lRnJhZywgZmlsbE91dGxpbmVWZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsT3V0bGluZVBhdHRlcm4gPSBjb21waWxlKGZpbGxPdXRsaW5lUGF0dGVybkZyYWcsIGZpbGxPdXRsaW5lUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxQYXR0ZXJuID0gY29tcGlsZShmaWxsUGF0dGVybkZyYWcsIGZpbGxQYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbEV4dHJ1c2lvbiA9IGNvbXBpbGUoZmlsbEV4dHJ1c2lvbkZyYWcsIGZpbGxFeHRydXNpb25WZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsRXh0cnVzaW9uUGF0dGVybiA9IGNvbXBpbGUoZmlsbEV4dHJ1c2lvblBhdHRlcm5GcmFnLCBmaWxsRXh0cnVzaW9uUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGhpbGxzaGFkZVByZXBhcmUgPSBjb21waWxlKGhpbGxzaGFkZVByZXBhcmVGcmFnLCBoaWxsc2hhZGVQcmVwYXJlVmVydCk7XG5leHBvcnQgY29uc3QgaGlsbHNoYWRlID0gY29tcGlsZShoaWxsc2hhZGVGcmFnLCBoaWxsc2hhZGVWZXJ0KTtcbmV4cG9ydCBjb25zdCBsaW5lID0gY29tcGlsZShsaW5lRnJhZywgbGluZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmVHcmFkaWVudCA9IGNvbXBpbGUobGluZUdyYWRpZW50RnJhZywgbGluZUdyYWRpZW50VmVydCk7XG5leHBvcnQgY29uc3QgbGluZVBhdHRlcm4gPSBjb21waWxlKGxpbmVQYXR0ZXJuRnJhZywgbGluZVBhdHRlcm5WZXJ0KTtcbmV4cG9ydCBjb25zdCBsaW5lU0RGID0gY29tcGlsZShsaW5lU0RGRnJhZywgbGluZVNERlZlcnQpO1xuZXhwb3J0IGNvbnN0IHJhc3RlciA9IGNvbXBpbGUocmFzdGVyRnJhZywgcmFzdGVyVmVydCk7XG5leHBvcnQgY29uc3Qgc3ltYm9sSWNvbiA9IGNvbXBpbGUoc3ltYm9sSWNvbkZyYWcsIHN5bWJvbEljb25WZXJ0KTtcbmV4cG9ydCBjb25zdCBzeW1ib2xTREYgPSBjb21waWxlKHN5bWJvbFNERkZyYWcsIHN5bWJvbFNERlZlcnQpO1xuXG4vLyBFeHBhbmQgI3ByYWdtYXMgdG8gI2lmZGVmcy5cblxuZnVuY3Rpb24gY29tcGlsZShmcmFnbWVudFNvdXJjZSwgdmVydGV4U291cmNlKSB7XG4gICAgY29uc3QgcmUgPSAvI3ByYWdtYSBtYXBib3g6IChbXFx3XSspIChbXFx3XSspIChbXFx3XSspIChbXFx3XSspL2c7XG5cbiAgICBjb25zdCBmcmFnbWVudFByYWdtYXMgPSB7fTtcblxuICAgIGZyYWdtZW50U291cmNlID0gZnJhZ21lbnRTb3VyY2UucmVwbGFjZShyZSwgKG1hdGNoLCBvcGVyYXRpb24sIHByZWNpc2lvbiwgdHlwZSwgbmFtZSkgPT4ge1xuICAgICAgICBmcmFnbWVudFByYWdtYXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnZGVmaW5lJykge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG52YXJ5aW5nICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX07XG4jZWxzZVxudW5pZm9ybSAke3ByZWNpc2lvbn0gJHt0eXBlfSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgIH0gZWxzZSAvKiBpZiAob3BlcmF0aW9uID09PSAnaW5pdGlhbGl6ZScpICovIHtcbiAgICAgICAgICAgIHJldHVybiBgXG4jaWZkZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmVydGV4U291cmNlID0gdmVydGV4U291cmNlLnJlcGxhY2UocmUsIChtYXRjaCwgb3BlcmF0aW9uLCBwcmVjaXNpb24sIHR5cGUsIG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgYXR0clR5cGUgPSB0eXBlID09PSAnZmxvYXQnID8gJ3ZlYzInIDogJ3ZlYzQnO1xuICAgICAgICBjb25zdCB1bnBhY2tUeXBlID0gbmFtZS5tYXRjaCgvY29sb3IvKSA/ICdjb2xvcicgOiBhdHRyVHlwZTtcblxuICAgICAgICBpZiAoZnJhZ21lbnRQcmFnbWFzW25hbWVdKSB7XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnZGVmaW5lJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxudW5pZm9ybSBsb3dwIGZsb2F0IHVfJHtuYW1lfV90O1xuYXR0cmlidXRlICR7cHJlY2lzaW9ufSAke2F0dHJUeXBlfSBhXyR7bmFtZX07XG52YXJ5aW5nICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX07XG4jZWxzZVxudW5pZm9ybSAke3ByZWNpc2lvbn0gJHt0eXBlfSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgICAgICB9IGVsc2UgLyogaWYgKG9wZXJhdGlvbiA9PT0gJ2luaXRpYWxpemUnKSAqLyB7XG4gICAgICAgICAgICAgICAgaWYgKHVucGFja1R5cGUgPT09ICd2ZWM0Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB2ZWM0IGF0dHJpYnV0ZXMgYXJlIG9ubHkgdXNlZCBmb3IgY3Jvc3MtZmFkZWQgcHJvcGVydGllcywgYW5kIGFyZSBub3QgcGFja2VkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7bmFtZX0gPSBhXyR7bmFtZX07XG4jZWxzZVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG4gICAgJHtuYW1lfSA9IHVucGFja19taXhfJHt1bnBhY2tUeXBlfShhXyR7bmFtZX0sIHVfJHtuYW1lfV90KTtcbiNlbHNlXG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnZGVmaW5lJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxudW5pZm9ybSBsb3dwIGZsb2F0IHVfJHtuYW1lfV90O1xuYXR0cmlidXRlICR7cHJlY2lzaW9ufSAke2F0dHJUeXBlfSBhXyR7bmFtZX07XG4jZWxzZVxudW5pZm9ybSAke3ByZWNpc2lvbn0gJHt0eXBlfSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgICAgICB9IGVsc2UgLyogaWYgKG9wZXJhdGlvbiA9PT0gJ2luaXRpYWxpemUnKSAqLyB7XG4gICAgICAgICAgICAgICAgaWYgKHVucGFja1R5cGUgPT09ICd2ZWM0Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB2ZWM0IGF0dHJpYnV0ZXMgYXJlIG9ubHkgdXNlZCBmb3IgY3Jvc3MtZmFkZWQgcHJvcGVydGllcywgYW5kIGFyZSBub3QgcGFja2VkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSBhXyR7bmFtZX07XG4jZWxzZVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIC8qICove1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdW5wYWNrX21peF8ke3VucGFja1R5cGV9KGFfJHtuYW1lfSwgdV8ke25hbWV9X3QpO1xuI2Vsc2VcbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtmcmFnbWVudFNvdXJjZSwgdmVydGV4U291cmNlfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUgUHJvZ3JhbSBmcm9tICcuL3Byb2dyYW0nO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbmNsYXNzIFZlcnRleEFycmF5T2JqZWN0IHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJvdW5kUHJvZ3JhbTogP1Byb2dyYW08Kj47XG4gICAgYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG4gICAgYm91bmRQYWludFZlcnRleEJ1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj47XG4gICAgYm91bmRJbmRleEJ1ZmZlcjogP0luZGV4QnVmZmVyO1xuICAgIGJvdW5kVmVydGV4T2Zmc2V0OiA/bnVtYmVyO1xuICAgIGJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcbiAgICBib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIyOiA/VmVydGV4QnVmZmVyO1xuICAgIHZhbzogYW55O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYm91bmRQcm9ncmFtID0gbnVsbDtcbiAgICAgICAgdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5ib3VuZEluZGV4QnVmZmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5ib3VuZFZlcnRleE9mZnNldCA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy52YW8gPSBudWxsO1xuICAgIH1cblxuICAgIGJpbmQoY29udGV4dDogQ29udGV4dCxcbiAgICAgICAgIHByb2dyYW06IFByb2dyYW08Kj4sXG4gICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcixcbiAgICAgICAgIHBhaW50VmVydGV4QnVmZmVyczogQXJyYXk8VmVydGV4QnVmZmVyPixcbiAgICAgICAgIGluZGV4QnVmZmVyOiA/SW5kZXhCdWZmZXIsXG4gICAgICAgICB2ZXJ0ZXhPZmZzZXQ6ID9udW1iZXIsXG4gICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyLFxuICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjI6ID9WZXJ0ZXhCdWZmZXIpIHtcblxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgICAgIGxldCBwYWludEJ1ZmZlcnNEaWZmZXIgPSB0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzLmxlbmd0aCAhPT0gcGFpbnRWZXJ0ZXhCdWZmZXJzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7ICFwYWludEJ1ZmZlcnNEaWZmZXIgJiYgaSA8IHBhaW50VmVydGV4QnVmZmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnNbaV0gIT09IHBhaW50VmVydGV4QnVmZmVyc1tpXSkge1xuICAgICAgICAgICAgICAgIHBhaW50QnVmZmVyc0RpZmZlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0ZyZXNoQmluZFJlcXVpcmVkID0gKFxuICAgICAgICAgICAgIXRoaXMudmFvIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kUHJvZ3JhbSAhPT0gcHJvZ3JhbSB8fFxuICAgICAgICAgICAgdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlciAhPT0gbGF5b3V0VmVydGV4QnVmZmVyIHx8XG4gICAgICAgICAgICBwYWludEJ1ZmZlcnNEaWZmZXIgfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmRJbmRleEJ1ZmZlciAhPT0gaW5kZXhCdWZmZXIgfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQgIT09IHZlcnRleE9mZnNldCB8fFxuICAgICAgICAgICAgdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIgIT09IGR5bmFtaWNWZXJ0ZXhCdWZmZXIgfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMiAhPT0gZHluYW1pY1ZlcnRleEJ1ZmZlcjJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QgfHwgaXNGcmVzaEJpbmRSZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy5mcmVzaEJpbmQocHJvZ3JhbSwgbGF5b3V0VmVydGV4QnVmZmVyLCBwYWludFZlcnRleEJ1ZmZlcnMsIGluZGV4QnVmZmVyLCB2ZXJ0ZXhPZmZzZXQsIGR5bmFtaWNWZXJ0ZXhCdWZmZXIsIGR5bmFtaWNWZXJ0ZXhCdWZmZXIyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbyk7XG5cbiAgICAgICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGJ1ZmZlciBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQuIFJlYmluZCB0byB1cGxvYWQgZGF0YS5cbiAgICAgICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluZGV4QnVmZmVyICYmIGluZGV4QnVmZmVyLmR5bmFtaWNEcmF3KSB7XG4gICAgICAgICAgICAgICAgaW5kZXhCdWZmZXIuYmluZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZHluYW1pY1ZlcnRleEJ1ZmZlcjIpIHtcbiAgICAgICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMi5iaW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmcmVzaEJpbmQocHJvZ3JhbTogUHJvZ3JhbTwqPixcbiAgICAgICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICAgICAgIHBhaW50VmVydGV4QnVmZmVyczogQXJyYXk8VmVydGV4QnVmZmVyPixcbiAgICAgICAgICAgICAgaW5kZXhCdWZmZXI6ID9JbmRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgdmVydGV4T2Zmc2V0OiA/bnVtYmVyLFxuICAgICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyLFxuICAgICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMjogP1ZlcnRleEJ1ZmZlcikge1xuICAgICAgICBsZXQgbnVtUHJldkF0dHJpYnV0ZXM7XG4gICAgICAgIGNvbnN0IG51bU5leHRBdHRyaWJ1dGVzID0gcHJvZ3JhbS5udW1BdHRyaWJ1dGVzO1xuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAoY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFvKSB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMudmFvID0gY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpO1xuICAgICAgICAgICAgY29udGV4dC5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KHRoaXMudmFvKTtcbiAgICAgICAgICAgIG51bVByZXZBdHRyaWJ1dGVzID0gMDtcblxuICAgICAgICAgICAgLy8gc3RvcmUgdGhlIGFyZ3VtZW50cyBzbyB0aGF0IHdlIGNhbiB2ZXJpZnkgdGhlbSB3aGVuIHRoZSB2YW8gaXMgYm91bmQgYWdhaW5cbiAgICAgICAgICAgIHRoaXMuYm91bmRQcm9ncmFtID0gcHJvZ3JhbTtcbiAgICAgICAgICAgIHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIgPSBsYXlvdXRWZXJ0ZXhCdWZmZXI7XG4gICAgICAgICAgICB0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzID0gcGFpbnRWZXJ0ZXhCdWZmZXJzO1xuICAgICAgICAgICAgdGhpcy5ib3VuZEluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXI7XG4gICAgICAgICAgICB0aGlzLmJvdW5kVmVydGV4T2Zmc2V0ID0gdmVydGV4T2Zmc2V0O1xuICAgICAgICAgICAgdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIgPSBkeW5hbWljVmVydGV4QnVmZmVyO1xuICAgICAgICAgICAgdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIyID0gZHluYW1pY1ZlcnRleEJ1ZmZlcjI7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG51bVByZXZBdHRyaWJ1dGVzID0gY29udGV4dC5jdXJyZW50TnVtQXR0cmlidXRlcyB8fCAwO1xuXG4gICAgICAgICAgICAvLyBEaXNhYmxlIGFsbCBhdHRyaWJ1dGVzIGZyb20gdGhlIHByZXZpb3VzIHByb2dyYW0gdGhhdCBhcmVuJ3QgdXNlZCBpblxuICAgICAgICAgICAgLy8gdGhlIG5ldyBwcm9ncmFtLiBOb3RlOiBhdHRyaWJ1dGUgaW5kaWNlcyBhcmUgKm5vdCogcHJvZ3JhbSBzcGVjaWZpYyFcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBudW1OZXh0QXR0cmlidXRlczsgaSA8IG51bVByZXZBdHRyaWJ1dGVzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAvLyBXZWJHTCBicmVha3MgaWYgeW91IGRpc2FibGUgYXR0cmlidXRlIDAuXG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDMwNTIzMVxuICAgICAgICAgICAgICAgIGFzc2VydChpICE9PSAwKTtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIuZW5hYmxlQXR0cmlidXRlcyhnbCwgcHJvZ3JhbSk7XG4gICAgICAgIGZvciAoY29uc3QgdmVydGV4QnVmZmVyIG9mIHBhaW50VmVydGV4QnVmZmVycykge1xuICAgICAgICAgICAgdmVydGV4QnVmZmVyLmVuYWJsZUF0dHJpYnV0ZXMoZ2wsIHByb2dyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIuZW5hYmxlQXR0cmlidXRlcyhnbCwgcHJvZ3JhbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMi5lbmFibGVBdHRyaWJ1dGVzKGdsLCBwcm9ncmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxheW91dFZlcnRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgIGxheW91dFZlcnRleEJ1ZmZlci5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbCwgcHJvZ3JhbSwgdmVydGV4T2Zmc2V0KTtcbiAgICAgICAgZm9yIChjb25zdCB2ZXJ0ZXhCdWZmZXIgb2YgcGFpbnRWZXJ0ZXhCdWZmZXJzKSB7XG4gICAgICAgICAgICB2ZXJ0ZXhCdWZmZXIuYmluZCgpO1xuICAgICAgICAgICAgdmVydGV4QnVmZmVyLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKGdsLCBwcm9ncmFtLCB2ZXJ0ZXhPZmZzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIuYmluZCgpO1xuICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlci5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbCwgcHJvZ3JhbSwgdmVydGV4T2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGluZGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZHluYW1pY1ZlcnRleEJ1ZmZlcjIpIHtcbiAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIyLmJpbmQoKTtcbiAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIyLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKGdsLCBwcm9ncmFtLCB2ZXJ0ZXhPZmZzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5jdXJyZW50TnVtQXR0cmlidXRlcyA9IG51bU5leHRBdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbykge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKTtcbiAgICAgICAgICAgIHRoaXMudmFvID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVydGV4QXJyYXlPYmplY3Q7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3ByZWx1ZGV9IGZyb20gJy4uL3NoYWRlcnMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IFByb2dyYW1Db25maWd1cmF0aW9uIGZyb20gJy4uL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCBWZXJ0ZXhBcnJheU9iamVjdCBmcm9tICcuL3ZlcnRleF9hcnJheV9vYmplY3QnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbmltcG9ydCB0eXBlIFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgdHlwZSBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IHR5cGUgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IHR5cGUgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtQmluZGluZ3MsIFVuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtCaW5kZXJVbmlmb3JtfSBmcm9tICcuLi9kYXRhL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5cbmV4cG9ydCB0eXBlIERyYXdNb2RlID1cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnTElORVMnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdUUklBTkdMRVMnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdMSU5FX1NUUklQJz47XG5cbmNsYXNzIFByb2dyYW08VXM6IFVuaWZvcm1CaW5kaW5ncz4ge1xuICAgIHByb2dyYW06IFdlYkdMUHJvZ3JhbTtcbiAgICBhdHRyaWJ1dGVzOiB7W3N0cmluZ106IG51bWJlcn07XG4gICAgbnVtQXR0cmlidXRlczogbnVtYmVyO1xuICAgIGZpeGVkVW5pZm9ybXM6IFVzO1xuICAgIGJpbmRlclVuaWZvcm1zOiBBcnJheTxCaW5kZXJVbmlmb3JtPjtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICAgICAgICAgc291cmNlOiB7ZnJhZ21lbnRTb3VyY2U6IHN0cmluZywgdmVydGV4U291cmNlOiBzdHJpbmd9LFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IFByb2dyYW1Db25maWd1cmF0aW9uLFxuICAgICAgICAgICAgICAgIGZpeGVkVW5pZm9ybXM6IChDb250ZXh0LCBVbmlmb3JtTG9jYXRpb25zKSA9PiBVcyxcbiAgICAgICAgICAgICAgICBzaG93T3ZlcmRyYXdJbnNwZWN0b3I6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLnByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICAgICAgY29uc3QgZGVmaW5lcyA9IGNvbmZpZ3VyYXRpb24uZGVmaW5lcygpO1xuICAgICAgICBpZiAoc2hvd092ZXJkcmF3SW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBkZWZpbmVzLnB1c2goJyNkZWZpbmUgT1ZFUkRSQVdfSU5TUEVDVE9SOycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnRTb3VyY2UgPSBkZWZpbmVzLmNvbmNhdChwcmVsdWRlLmZyYWdtZW50U291cmNlLCBzb3VyY2UuZnJhZ21lbnRTb3VyY2UpLmpvaW4oJ1xcbicpO1xuICAgICAgICBjb25zdCB2ZXJ0ZXhTb3VyY2UgPSBkZWZpbmVzLmNvbmNhdChwcmVsdWRlLnZlcnRleFNvdXJjZSwgc291cmNlLnZlcnRleFNvdXJjZSkuam9pbignXFxuJyk7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7XG4gICAgICAgIGdsLnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTb3VyY2UpO1xuICAgICAgICBnbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTtcbiAgICAgICAgYXNzZXJ0KGdsLmdldFNoYWRlclBhcmFtZXRlcihmcmFnbWVudFNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpLCAoZ2wuZ2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlcik6IGFueSkpO1xuICAgICAgICBnbC5hdHRhY2hTaGFkZXIodGhpcy5wcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7XG5cbiAgICAgICAgY29uc3QgdmVydGV4U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpO1xuICAgICAgICBnbC5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTb3VyY2UpO1xuICAgICAgICBnbC5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7XG4gICAgICAgIGFzc2VydChnbC5nZXRTaGFkZXJQYXJhbWV0ZXIodmVydGV4U2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUyksIChnbC5nZXRTaGFkZXJJbmZvTG9nKHZlcnRleFNoYWRlcik6IGFueSkpO1xuICAgICAgICBnbC5hdHRhY2hTaGFkZXIodGhpcy5wcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpO1xuXG4gICAgICAgIC8vIE1hbnVhbGx5IGJpbmQgbGF5b3V0IGF0dHJpYnV0ZXMgaW4gdGhlIG9yZGVyIGRlZmluZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gUHJvZ3JhbUludGVyZmFjZSBzbyB0aGF0IHdlIGRvbid0IGR5bmFtaWNhbGx5IGxpbmsgYW4gdW51c2VkXG4gICAgICAgIC8vIGF0dHJpYnV0ZSBhdCBwb3NpdGlvbiAwLCB3aGljaCBjYW4gY2F1c2UgcmVuZGVyaW5nIHRvIGZhaWwgZm9yIGFuXG4gICAgICAgIC8vIGVudGlyZSBsYXllciAoc2VlICM0NjA3LCAjNDcyOClcbiAgICAgICAgY29uc3QgbGF5b3V0QXR0cmlidXRlcyA9IGNvbmZpZ3VyYXRpb24ubGF5b3V0QXR0cmlidXRlcyB8fCBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXlvdXRBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLCBpLCBsYXlvdXRBdHRyaWJ1dGVzW2ldLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKTtcbiAgICAgICAgYXNzZXJ0KGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyksIChnbC5nZXRQcm9ncmFtSW5mb0xvZyh0aGlzLnByb2dyYW0pOiBhbnkpKTtcblxuICAgICAgICB0aGlzLm51bUF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSwgZ2wuQUNUSVZFX0FUVFJJQlVURVMpO1xuXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBjb25zdCB1bmlmb3JtTG9jYXRpb25zID0ge307XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm51bUF0dHJpYnV0ZXM7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gZ2wuZ2V0QWN0aXZlQXR0cmliKHRoaXMucHJvZ3JhbSwgaSk7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZS5uYW1lXSA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwgYXR0cmlidXRlLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbnVtVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Vbmlmb3JtczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB1bmlmb3JtID0gZ2wuZ2V0QWN0aXZlVW5pZm9ybSh0aGlzLnByb2dyYW0sIGkpO1xuICAgICAgICAgICAgaWYgKHVuaWZvcm0pIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtTG9jYXRpb25zW3VuaWZvcm0ubmFtZV0gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCB1bmlmb3JtLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maXhlZFVuaWZvcm1zID0gZml4ZWRVbmlmb3Jtcyhjb250ZXh0LCB1bmlmb3JtTG9jYXRpb25zKTtcbiAgICAgICAgdGhpcy5iaW5kZXJVbmlmb3JtcyA9IGNvbmZpZ3VyYXRpb24uZ2V0VW5pZm9ybXMoY29udGV4dCwgdW5pZm9ybUxvY2F0aW9ucyk7XG4gICAgfVxuXG4gICAgZHJhdyhjb250ZXh0OiBDb250ZXh0LFxuICAgICAgICAgZHJhd01vZGU6IERyYXdNb2RlLFxuICAgICAgICAgZGVwdGhNb2RlOiAkUmVhZE9ubHk8RGVwdGhNb2RlPixcbiAgICAgICAgIHN0ZW5jaWxNb2RlOiAkUmVhZE9ubHk8U3RlbmNpbE1vZGU+LFxuICAgICAgICAgY29sb3JNb2RlOiAkUmVhZE9ubHk8Q29sb3JNb2RlPixcbiAgICAgICAgIGN1bGxGYWNlTW9kZTogJFJlYWRPbmx5PEN1bGxGYWNlTW9kZT4sXG4gICAgICAgICB1bmlmb3JtVmFsdWVzOiBVbmlmb3JtVmFsdWVzPFVzPixcbiAgICAgICAgIGxheWVySUQ6IHN0cmluZyxcbiAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyLFxuICAgICAgICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyLFxuICAgICAgICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3IsXG4gICAgICAgICBjdXJyZW50UHJvcGVydGllczogYW55LFxuICAgICAgICAgem9vbTogP251bWJlcixcbiAgICAgICAgIGNvbmZpZ3VyYXRpb246ID9Qcm9ncmFtQ29uZmlndXJhdGlvbixcbiAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXI6ID9WZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBkeW5hbWljTGF5b3V0QnVmZmVyMjogP1ZlcnRleEJ1ZmZlcikge1xuXG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBjb250ZXh0LnByb2dyYW0uc2V0KHRoaXMucHJvZ3JhbSk7XG4gICAgICAgIGNvbnRleHQuc2V0RGVwdGhNb2RlKGRlcHRoTW9kZSk7XG4gICAgICAgIGNvbnRleHQuc2V0U3RlbmNpbE1vZGUoc3RlbmNpbE1vZGUpO1xuICAgICAgICBjb250ZXh0LnNldENvbG9yTW9kZShjb2xvck1vZGUpO1xuICAgICAgICBjb250ZXh0LnNldEN1bGxGYWNlKGN1bGxGYWNlTW9kZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHRoaXMuZml4ZWRVbmlmb3Jtcykge1xuICAgICAgICAgICAgdGhpcy5maXhlZFVuaWZvcm1zW25hbWVdLnNldCh1bmlmb3JtVmFsdWVzW25hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLnNldFVuaWZvcm1zKGNvbnRleHQsIHRoaXMuYmluZGVyVW5pZm9ybXMsIGN1cnJlbnRQcm9wZXJ0aWVzLCB7em9vbTogKHpvb206IGFueSl9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByaW1pdGl2ZVNpemUgPSB7XG4gICAgICAgICAgICBbZ2wuTElORVNdOiAyLFxuICAgICAgICAgICAgW2dsLlRSSUFOR0xFU106IDMsXG4gICAgICAgICAgICBbZ2wuTElORV9TVFJJUF06IDFcbiAgICAgICAgfVtkcmF3TW9kZV07XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzLmdldCgpKSB7XG4gICAgICAgICAgICBjb25zdCB2YW9zID0gc2VnbWVudC52YW9zIHx8IChzZWdtZW50LnZhb3MgPSB7fSk7XG4gICAgICAgICAgICBjb25zdCB2YW86IFZlcnRleEFycmF5T2JqZWN0ID0gdmFvc1tsYXllcklEXSB8fCAodmFvc1tsYXllcklEXSA9IG5ldyBWZXJ0ZXhBcnJheU9iamVjdCgpKTtcblxuICAgICAgICAgICAgdmFvLmJpbmQoXG4gICAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uID8gY29uZmlndXJhdGlvbi5nZXRQYWludFZlcnRleEJ1ZmZlcnMoKSA6IFtdLFxuICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyLFxuICAgICAgICAgICAgICAgIHNlZ21lbnQudmVydGV4T2Zmc2V0LFxuICAgICAgICAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXIsXG4gICAgICAgICAgICAgICAgZHluYW1pY0xheW91dEJ1ZmZlcjJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhcbiAgICAgICAgICAgICAgICBkcmF3TW9kZSxcbiAgICAgICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCAqIHByaW1pdGl2ZVNpemUsXG4gICAgICAgICAgICAgICAgZ2wuVU5TSUdORURfU0hPUlQsXG4gICAgICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVPZmZzZXQgKiBwcmltaXRpdmVTaXplICogMik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFByb2dyYW07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm00ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uLy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtDcm9zc0ZhZGVkfSBmcm9tICcuLi8uLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxudHlwZSBCYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGF0dGVybl90bF9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fYnJfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX3RsX2InOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9icl9iJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfbWl4JzogVW5pZm9ybTFmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlX2EnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2NhbGVfYic6IFVuaWZvcm0xZixcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV90aWxlX3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZSc6IFVuaWZvcm00ZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogVW5pZm9ybTJmLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogVW5pZm9ybTJmXG58fTtcblxuZnVuY3Rpb24gcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzLCBwYWludGVyOiBQYWludGVyLFxuICAgICAgICB0aWxlOiBUaWxlXG4pOiBVbmlmb3JtVmFsdWVzPFBhdHRlcm5Vbmlmb3Jtc1R5cGU+IHtcblxuICAgIGNvbnN0IHRpbGVSYXRpbyA9IDEgLyBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCBwYWludGVyLnRyYW5zZm9ybS50aWxlWm9vbSk7XG5cbiAgICBjb25zdCBudW1UaWxlcyA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICBjb25zdCB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gPSB0aWxlLnRpbGVTaXplICogTWF0aC5wb3coMiwgcGFpbnRlci50cmFuc2Zvcm0udGlsZVpvb20pIC8gbnVtVGlsZXM7XG5cbiAgICBjb25zdCBwaXhlbFggPSB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gKiAodGlsZS50aWxlSUQuY2Fub25pY2FsLnggKyB0aWxlLnRpbGVJRC53cmFwICogbnVtVGlsZXMpO1xuICAgIGNvbnN0IHBpeGVsWSA9IHRpbGVTaXplQXROZWFyZXN0Wm9vbSAqIHRpbGUudGlsZUlELmNhbm9uaWNhbC55O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAndV90ZXhzaXplJzogdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5zaXplLFxuICAgICAgICAvLyB0aGlzIGFzc3VtZXMgYWxsIGltYWdlcyBpbiB0aGUgaWNvbiBhdGxhcyB0ZXh0dXJlIGhhdmUgdGhlIHNhbWUgcGl4ZWwgcmF0aW9cbiAgICAgICAgJ3Vfc2NhbGUnOiBbYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLCB0aWxlUmF0aW8sIGNyb3NzZmFkZS5mcm9tU2NhbGUsIGNyb3NzZmFkZS50b1NjYWxlXSxcbiAgICAgICAgJ3VfZmFkZSc6IGNyb3NzZmFkZS50LFxuICAgICAgICAvLyBzcGxpdCB0aGUgcGl4ZWwgY29vcmQgaW50byB0d28gcGFpcnMgb2YgMTYgYml0IG51bWJlcnMuIFRoZSBnbHNsIHNwZWMgb25seSBndWFyYW50ZWVzIDE2IGJpdHMgb2YgcHJlY2lzaW9uLlxuICAgICAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFtwaXhlbFggPj4gMTYsIHBpeGVsWSA+PiAxNl0sXG4gICAgICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogW3BpeGVsWCAmIDB4RkZGRiwgcGl4ZWxZICYgMHhGRkZGXVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGJnUGF0dGVyblVuaWZvcm1WYWx1ZXMoaW1hZ2U6IENyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4sIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycywgcGFpbnRlcjogUGFpbnRlcixcbiAgICAgICAgdGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn1cbik6IFVuaWZvcm1WYWx1ZXM8QmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc1R5cGU+IHtcbiAgICBjb25zdCBpbWFnZVBvc0EgPSBwYWludGVyLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKGltYWdlLmZyb20udG9TdHJpbmcoKSk7XG4gICAgY29uc3QgaW1hZ2VQb3NCID0gcGFpbnRlci5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihpbWFnZS50by50b1N0cmluZygpKTtcbiAgICBhc3NlcnQoaW1hZ2VQb3NBICYmIGltYWdlUG9zQik7XG4gICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gcGFpbnRlci5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCk7XG5cbiAgICBjb25zdCBudW1UaWxlcyA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICBjb25zdCB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gPSB0aWxlLnRpbGVTaXplICogTWF0aC5wb3coMiwgcGFpbnRlci50cmFuc2Zvcm0udGlsZVpvb20pIC8gbnVtVGlsZXM7XG5cbiAgICBjb25zdCBwaXhlbFggPSB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gKiAodGlsZS50aWxlSUQuY2Fub25pY2FsLnggKyB0aWxlLnRpbGVJRC53cmFwICogbnVtVGlsZXMpO1xuICAgIGNvbnN0IHBpeGVsWSA9IHRpbGVTaXplQXROZWFyZXN0Wm9vbSAqIHRpbGUudGlsZUlELmNhbm9uaWNhbC55O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAndV9wYXR0ZXJuX3RsX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLnRsLFxuICAgICAgICAndV9wYXR0ZXJuX2JyX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLmJyLFxuICAgICAgICAndV9wYXR0ZXJuX3RsX2InOiAoaW1hZ2VQb3NCOiBhbnkpLnRsLFxuICAgICAgICAndV9wYXR0ZXJuX2JyX2InOiAoaW1hZ2VQb3NCOiBhbnkpLmJyLFxuICAgICAgICAndV90ZXhzaXplJzogW3dpZHRoLCBoZWlnaHRdLFxuICAgICAgICAndV9taXgnOiBjcm9zc2ZhZGUudCxcbiAgICAgICAgJ3VfcGF0dGVybl9zaXplX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLmRpc3BsYXlTaXplLFxuICAgICAgICAndV9wYXR0ZXJuX3NpemVfYic6IChpbWFnZVBvc0I6IGFueSkuZGlzcGxheVNpemUsXG4gICAgICAgICd1X3NjYWxlX2EnOiBjcm9zc2ZhZGUuZnJvbVNjYWxlLFxuICAgICAgICAndV9zY2FsZV9iJzogY3Jvc3NmYWRlLnRvU2NhbGUsXG4gICAgICAgICd1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzJzogMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHBhaW50ZXIudHJhbnNmb3JtLnRpbGVab29tKSxcbiAgICAgICAgLy8gc3BsaXQgdGhlIHBpeGVsIGNvb3JkIGludG8gdHdvIHBhaXJzIG9mIDE2IGJpdCBudW1iZXJzLiBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mIHByZWNpc2lvbi5cbiAgICAgICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBbcGl4ZWxYID4+IDE2LCBwaXhlbFkgPj4gMTZdLFxuICAgICAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFtwaXhlbFggJiAweEZGRkYsIHBpeGVsWSAmIDB4RkZGRl1cbiAgICB9O1xufVxuZXhwb3J0IHtiZ1BhdHRlcm5Vbmlmb3JtVmFsdWVzLCBwYXR0ZXJuVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BhdHRlcm5Vbmlmb3JtVmFsdWVzfSBmcm9tICcuL3BhdHRlcm4nO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2YsXG4gICAgVW5pZm9ybTRmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQge21hdDMsIHZlYzN9IGZyb20gJ2dsLW1hdHJpeCc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuXG5leHBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfbGlnaHRwb3MnOiBVbmlmb3JtM2YsXG4gICAgJ3VfbGlnaHRpbnRlbnNpdHknOiBVbmlmb3JtMWYsXG4gICAgJ3VfbGlnaHRjb2xvcic6IFVuaWZvcm0zZixcbiAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6IFVuaWZvcm0xZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmXG58fTtcblxuZXhwb3J0IHR5cGUgRmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9saWdodHBvcyc6IFVuaWZvcm0zZixcbiAgICAndV9saWdodGludGVuc2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9saWdodGNvbG9yJzogVW5pZm9ybTNmLFxuICAgICd1X2hlaWdodF9mYWN0b3InOiBVbmlmb3JtMWYsXG4gICAgJ3VfdmVydGljYWxfZ3JhZGllbnQnOiBVbmlmb3JtMWYsXG4gICAgLy8gcGF0dGVybiB1bmlmb3JtczpcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogVW5pZm9ybTJmLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlJzogVW5pZm9ybTRmLFxuICAgICd1X2ZhZGUnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfb3BhY2l0eSc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGZpbGxFeHRydXNpb25Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBGaWxsRXh0cnVzaW9uVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xpZ2h0cG9zJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodHBvcyksXG4gICAgJ3VfbGlnaHRpbnRlbnNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0aW50ZW5zaXR5KSxcbiAgICAndV9saWdodGNvbG9yJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodGNvbG9yKSxcbiAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfdmVydGljYWxfZ3JhZGllbnQpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpXG59KTtcblxuY29uc3QgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBGaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9saWdodHBvcyc6IG5ldyBVbmlmb3JtM2YoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHRwb3MpLFxuICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodGludGVuc2l0eSksXG4gICAgJ3VfbGlnaHRjb2xvcic6IG5ldyBVbmlmb3JtM2YoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHRjb2xvciksXG4gICAgJ3VfdmVydGljYWxfZ3JhZGllbnQnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3ZlcnRpY2FsX2dyYWRpZW50KSxcbiAgICAndV9oZWlnaHRfZmFjdG9yJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9oZWlnaHRfZmFjdG9yKSxcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfdXBwZXIpLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF9sb3dlciksXG4gICAgJ3Vfc2NhbGUnOiBuZXcgVW5pZm9ybTRmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlKSxcbiAgICAndV9mYWRlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlKSxcbiAgICAndV9vcGFjaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9vcGFjaXR5KVxufSk7XG5cbmNvbnN0IGZpbGxFeHRydXNpb25Vbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgc2hvdWxkVXNlVmVydGljYWxHcmFkaWVudDogYm9vbGVhbixcbiAgICBvcGFjaXR5OiBudW1iZXJcbik6IFVuaWZvcm1WYWx1ZXM8RmlsbEV4dHJ1c2lvblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IGxpZ2h0ID0gcGFpbnRlci5zdHlsZS5saWdodDtcbiAgICBjb25zdCBfbHAgPSBsaWdodC5wcm9wZXJ0aWVzLmdldCgncG9zaXRpb24nKTtcbiAgICBjb25zdCBsaWdodFBvcyA9IFtfbHAueCwgX2xwLnksIF9scC56XTtcbiAgICBjb25zdCBsaWdodE1hdCA9IG1hdDMuY3JlYXRlKCk7XG4gICAgaWYgKGxpZ2h0LnByb3BlcnRpZXMuZ2V0KCdhbmNob3InKSA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgICAgICBtYXQzLmZyb21Sb3RhdGlvbihsaWdodE1hdCwgLXBhaW50ZXIudHJhbnNmb3JtLmFuZ2xlKTtcbiAgICB9XG4gICAgdmVjMy50cmFuc2Zvcm1NYXQzKGxpZ2h0UG9zLCBsaWdodFBvcywgbGlnaHRNYXQpO1xuXG4gICAgY29uc3QgbGlnaHRDb2xvciA9IGxpZ2h0LnByb3BlcnRpZXMuZ2V0KCdjb2xvcicpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV9saWdodHBvcyc6IGxpZ2h0UG9zLFxuICAgICAgICAndV9saWdodGludGVuc2l0eSc6IGxpZ2h0LnByb3BlcnRpZXMuZ2V0KCdpbnRlbnNpdHknKSxcbiAgICAgICAgJ3VfbGlnaHRjb2xvcic6IFtsaWdodENvbG9yLnIsIGxpZ2h0Q29sb3IuZywgbGlnaHRDb2xvci5iXSxcbiAgICAgICAgJ3VfdmVydGljYWxfZ3JhZGllbnQnOiArc2hvdWxkVXNlVmVydGljYWxHcmFkaWVudCxcbiAgICAgICAgJ3Vfb3BhY2l0eSc6IG9wYWNpdHlcbiAgICB9O1xufTtcblxuY29uc3QgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgc2hvdWxkVXNlVmVydGljYWxHcmFkaWVudDogYm9vbGVhbixcbiAgICBvcGFjaXR5OiBudW1iZXIsXG4gICAgY29vcmQ6IE92ZXJzY2FsZWRUaWxlSUQsXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzLFxuICAgIHRpbGU6IFRpbGVcbik6IFVuaWZvcm1WYWx1ZXM8RmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICByZXR1cm4gZXh0ZW5kKGZpbGxFeHRydXNpb25Vbmlmb3JtVmFsdWVzKG1hdHJpeCwgcGFpbnRlciwgc2hvdWxkVXNlVmVydGljYWxHcmFkaWVudCwgb3BhY2l0eSksXG4gICAgICAgIHBhdHRlcm5Vbmlmb3JtVmFsdWVzKGNyb3NzZmFkZSwgcGFpbnRlciwgdGlsZSksXG4gICAgICAgIHtcbiAgICAgICAgICAgICd1X2hlaWdodF9mYWN0b3InOiAtTWF0aC5wb3coMiwgY29vcmQub3ZlcnNjYWxlZFopIC8gdGlsZS50aWxlU2l6ZSAvIDhcbiAgICAgICAgfSk7XG59O1xuXG5leHBvcnQge1xuICAgIGZpbGxFeHRydXNpb25Vbmlmb3JtcyxcbiAgICBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zLFxuICAgIGZpbGxFeHRydXNpb25Vbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7cGF0dGVyblVuaWZvcm1WYWx1ZXN9IGZyb20gJy4vcGF0dGVybic7XG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm00ZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcblxuZXhwb3J0IHR5cGUgRmlsbFVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmXG58fTtcblxuZXhwb3J0IHR5cGUgRmlsbE91dGxpbmVVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV93b3JsZCc6IFVuaWZvcm0yZlxufH07XG5cbmV4cG9ydCB0eXBlIEZpbGxQYXR0ZXJuVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgLy8gcGF0dGVybiB1bmlmb3JtczpcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogVW5pZm9ybTJmLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlJzogVW5pZm9ybTRmLFxuICAgICd1X2ZhZGUnOiBVbmlmb3JtMWZcbnx9O1xuXG5leHBvcnQgdHlwZSBGaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV93b3JsZCc6IFVuaWZvcm0yZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtNGYsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGZpbGxVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBGaWxsVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpXG59KTtcblxuY29uc3QgZmlsbFBhdHRlcm5Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBGaWxsUGF0dGVyblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF91cHBlciksXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX2xvd2VyKSxcbiAgICAndV9zY2FsZSc6IG5ldyBVbmlmb3JtNGYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGUpLFxuICAgICd1X2ZhZGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGUpXG5cbn0pO1xuXG5jb25zdCBmaWxsT3V0bGluZVVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxPdXRsaW5lVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3dvcmxkJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV93b3JsZClcbn0pO1xuXG5jb25zdCBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBGaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfd29ybGQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3dvcmxkKSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF91cHBlciksXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX2xvd2VyKSxcbiAgICAndV9zY2FsZSc6IG5ldyBVbmlmb3JtNGYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGUpLFxuICAgICd1X2ZhZGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGUpXG59KTtcblxuY29uc3QgZmlsbFVuaWZvcm1WYWx1ZXMgPSAobWF0cml4OiBGbG9hdDMyQXJyYXkpOiBVbmlmb3JtVmFsdWVzPEZpbGxVbmlmb3Jtc1R5cGU+ID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbWF0cml4XG59KTtcblxuY29uc3QgZmlsbFBhdHRlcm5Vbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzLFxuICAgIHRpbGU6IFRpbGVcbik6IFVuaWZvcm1WYWx1ZXM8RmlsbFBhdHRlcm5Vbmlmb3Jtc1R5cGU+ID0+IGV4dGVuZChcbiAgICBmaWxsVW5pZm9ybVZhbHVlcyhtYXRyaXgpLFxuICAgIHBhdHRlcm5Vbmlmb3JtVmFsdWVzKGNyb3NzZmFkZSwgcGFpbnRlciwgdGlsZSlcbik7XG5cbmNvbnN0IGZpbGxPdXRsaW5lVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBkcmF3aW5nQnVmZmVyU2l6ZTogW251bWJlciwgbnVtYmVyXVxuKTogVW5pZm9ybVZhbHVlczxGaWxsT3V0bGluZVVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3Vfd29ybGQnOiBkcmF3aW5nQnVmZmVyU2l6ZVxufSk7XG5cbmNvbnN0IGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsXG4gICAgdGlsZTogVGlsZSxcbiAgICBkcmF3aW5nQnVmZmVyU2l6ZTogW251bWJlciwgbnVtYmVyXVxuKTogVW5pZm9ybVZhbHVlczxGaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3Jtc1R5cGU+ID0+IGV4dGVuZChcbiAgICBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXMobWF0cml4LCBwYWludGVyLCBjcm9zc2ZhZGUsIHRpbGUpLFxuICAgIHtcbiAgICAgICAgJ3Vfd29ybGQnOiBkcmF3aW5nQnVmZmVyU2l6ZVxuICAgIH1cbik7XG5cbmV4cG9ydCB7XG4gICAgZmlsbFVuaWZvcm1zLFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbE91dGxpbmVVbmlmb3JtcyxcbiAgICBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtcyxcbiAgICBmaWxsVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbE91dGxpbmVVbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uLy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIENpcmNsZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuXG5leHBvcnQgdHlwZSBDaXJjbGVVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2NhbGVfd2l0aF9tYXAnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBVbmlmb3JtMWksXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IFVuaWZvcm0yZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmXG58fTtcblxuY29uc3QgY2lyY2xlVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQ2lyY2xlVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksXG4gICAgJ3Vfc2NhbGVfd2l0aF9tYXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlX3dpdGhfbWFwKSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcGl0Y2hfd2l0aF9tYXApLFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X2V4dHJ1ZGVfc2NhbGUpLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeClcbn0pO1xuXG5jb25zdCBjaXJjbGVVbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgY29vcmQ6IE92ZXJzY2FsZWRUaWxlSUQsXG4gICAgdGlsZTogVGlsZSxcbiAgICBsYXllcjogQ2lyY2xlU3R5bGVMYXllclxuKTogVW5pZm9ybVZhbHVlczxDaXJjbGVVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgIGxldCBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sIGV4dHJ1ZGVTY2FsZTogW251bWJlciwgbnVtYmVyXTtcbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnKSB7XG4gICAgICAgIGNvbnN0IHBpeGVsUmF0aW8gPSBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0cmFuc2Zvcm0uem9vbSk7XG4gICAgICAgIHBpdGNoV2l0aE1hcCA9IHRydWU7XG4gICAgICAgIGV4dHJ1ZGVTY2FsZSA9IFtwaXhlbFJhdGlvLCBwaXhlbFJhdGlvXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwaXRjaFdpdGhNYXAgPSBmYWxzZTtcbiAgICAgICAgZXh0cnVkZVNjYWxlID0gdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0cztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsXG4gICAgICAgICd1X3NjYWxlX3dpdGhfbWFwJzogKyhsYXllci5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1zY2FsZScpID09PSAnbWFwJyksXG4gICAgICAgICd1X21hdHJpeCc6IHBhaW50ZXIudHJhbnNsYXRlUG9zTWF0cml4KFxuICAgICAgICAgICAgY29vcmQucG9zTWF0cml4LFxuICAgICAgICAgICAgdGlsZSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtdHJhbnNsYXRlLWFuY2hvcicpKSxcbiAgICAgICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiArKHBpdGNoV2l0aE1hcCksXG4gICAgICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxcbiAgICAgICAgJ3VfZXh0cnVkZV9zY2FsZSc6IGV4dHJ1ZGVTY2FsZVxuICAgIH07XG59O1xuXG5leHBvcnQge2NpcmNsZVVuaWZvcm1zLCBjaXJjbGVVbmlmb3JtVmFsdWVzfTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBwaXhlbHNUb1RpbGVVbml0cyBmcm9tICcuLi8uLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcblxuZXhwb3J0IHR5cGUgQ29sbGlzaW9uVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IFVuaWZvcm0xZixcbiAgICAndV9waXhlbHNfdG9fdGlsZV91bml0cyc6IFVuaWZvcm0xZixcbiAgICAndV9leHRydWRlX3NjYWxlJzogVW5pZm9ybTJmLFxuICAgICd1X292ZXJzY2FsZV9mYWN0b3InOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBjb2xsaXNpb25Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBDb2xsaXNpb25Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksXG4gICAgJ3VfcGl4ZWxzX3RvX3RpbGVfdW5pdHMnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsc190b190aWxlX3VuaXRzKSxcbiAgICAndV9leHRydWRlX3NjYWxlJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9leHRydWRlX3NjYWxlKSxcbiAgICAndV9vdmVyc2NhbGVfZmFjdG9yJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9vdmVyc2NhbGVfZmFjdG9yKVxufSk7XG5cbmNvbnN0IGNvbGxpc2lvblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sXG4gICAgdGlsZTogVGlsZVxuKTogVW5pZm9ybVZhbHVlczxDb2xsaXNpb25Vbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCBwaXhlbFJhdGlvID0gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgdHJhbnNmb3JtLnpvb20pO1xuICAgIGNvbnN0IHNjYWxlID0gTWF0aC5wb3coMiwgdHJhbnNmb3JtLnpvb20gLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgY29uc3Qgb3ZlcnNjYWxlRmFjdG9yID0gdGlsZS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsXG4gICAgICAgICd1X3BpeGVsc190b190aWxlX3VuaXRzJzogcGl4ZWxSYXRpbyxcbiAgICAgICAgJ3VfZXh0cnVkZV9zY2FsZSc6IFt0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdIC8gKHBpeGVsUmF0aW8gKiBzY2FsZSksXG4gICAgICAgICAgICB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdIC8gKHBpeGVsUmF0aW8gKiBzY2FsZSldLFxuICAgICAgICAndV9vdmVyc2NhbGVfZmFjdG9yJzogb3ZlcnNjYWxlRmFjdG9yXG4gICAgfTtcbn07XG5cbmV4cG9ydCB7Y29sbGlzaW9uVW5pZm9ybXMsIGNvbGxpc2lvblVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmV4cG9ydCB0eXBlIERlYnVnVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9jb2xvcic6IFVuaWZvcm1Db2xvcixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5jb25zdCBkZWJ1Z1VuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IERlYnVnVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfY29sb3InOiBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9ucy51X2NvbG9yKSxcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeClcbn0pO1xuXG5jb25zdCBkZWJ1Z1VuaWZvcm1WYWx1ZXMgPSAobWF0cml4OiBGbG9hdDMyQXJyYXksIGNvbG9yOiBDb2xvcik6IFVuaWZvcm1WYWx1ZXM8RGVidWdVbmlmb3Jtc1R5cGU+ID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICd1X2NvbG9yJzogY29sb3Jcbn0pO1xuXG5leHBvcnQge2RlYnVnVW5pZm9ybXMsIGRlYnVnVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1VuaWZvcm1NYXRyaXg0Zn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5leHBvcnQgdHlwZSBDbGlwcGluZ01hc2tVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZlxufH07XG5cbmNvbnN0IGNsaXBwaW5nTWFza1VuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IENsaXBwaW5nTWFza1VuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KVxufSk7XG5cbmNvbnN0IGNsaXBwaW5nTWFza1VuaWZvcm1WYWx1ZXMgPSAobWF0cml4OiBGbG9hdDMyQXJyYXkpOiBVbmlmb3JtVmFsdWVzPENsaXBwaW5nTWFza1VuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXhcbn0pO1xuXG5leHBvcnQge2NsaXBwaW5nTWFza1VuaWZvcm1zLCBjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzfTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBwaXhlbHNUb1RpbGVVbml0cyBmcm9tICcuLi8uLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBIZWF0bWFwU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyJztcblxuZXhwb3J0IHR5cGUgSGVhdG1hcFVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IFVuaWZvcm0xZixcbiAgICAndV9pbnRlbnNpdHknOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmXG58fTtcblxuZXhwb3J0IHR5cGUgSGVhdG1hcFRleHR1cmVVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV93b3JsZCc6IFVuaWZvcm0yZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9jb2xvcl9yYW1wJzogVW5pZm9ybTFpLFxuICAgICd1X29wYWNpdHknOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBoZWF0bWFwVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogSGVhdG1hcFVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2V4dHJ1ZGVfc2NhbGUpLFxuICAgICd1X2ludGVuc2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfaW50ZW5zaXR5KSxcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeClcbn0pO1xuXG5jb25zdCBoZWF0bWFwVGV4dHVyZVVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEhlYXRtYXBUZXh0dXJlVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3dvcmxkJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV93b3JsZCksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV9jb2xvcl9yYW1wJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9jb2xvcl9yYW1wKSxcbiAgICAndV9vcGFjaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9vcGFjaXR5KVxufSk7XG5cbmNvbnN0IGhlYXRtYXBVbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHRpbGU6IFRpbGUsXG4gICAgem9vbTogbnVtYmVyLFxuICAgIGludGVuc2l0eTogbnVtYmVyXG4pOiBVbmlmb3JtVmFsdWVzPEhlYXRtYXBVbmlmb3Jtc1R5cGU+ID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB6b29tKSxcbiAgICAndV9pbnRlbnNpdHknOiBpbnRlbnNpdHlcbn0pO1xuXG5jb25zdCBoZWF0bWFwVGV4dHVyZVVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBsYXllcjogSGVhdG1hcFN0eWxlTGF5ZXIsXG4gICAgdGV4dHVyZVVuaXQ6IG51bWJlcixcbiAgICBjb2xvclJhbXBVbml0OiBudW1iZXJcbik6IFVuaWZvcm1WYWx1ZXM8SGVhdG1hcFRleHR1cmVVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCBtYXRyaXggPSBtYXQ0LmNyZWF0ZSgpO1xuICAgIG1hdDQub3J0aG8obWF0cml4LCAwLCBwYWludGVyLndpZHRoLCBwYWludGVyLmhlaWdodCwgMCwgMCwgMSk7XG5cbiAgICBjb25zdCBnbCA9IHBhaW50ZXIuY29udGV4dC5nbDtcblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3Vfd29ybGQnOiBbZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XSxcbiAgICAgICAgJ3VfaW1hZ2UnOiB0ZXh0dXJlVW5pdCxcbiAgICAgICAgJ3VfY29sb3JfcmFtcCc6IGNvbG9yUmFtcFVuaXQsXG4gICAgICAgICd1X29wYWNpdHknOiBsYXllci5wYWludC5nZXQoJ2hlYXRtYXAtb3BhY2l0eScpXG4gICAgfTtcbn07XG5cbmV4cG9ydCB7XG4gICAgaGVhdG1hcFVuaWZvcm1zLFxuICAgIGhlYXRtYXBUZXh0dXJlVW5pZm9ybXMsXG4gICAgaGVhdG1hcFVuaWZvcm1WYWx1ZXMsXG4gICAgaGVhdG1hcFRleHR1cmVVbmlmb3JtVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1Db2xvcixcbiAgICBVbmlmb3JtTWF0cml4NGYsXG4gICAgVW5pZm9ybTRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uLy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCBNZXJjYXRvckNvb3JkaW5hdGUgZnJvbSAnLi4vLi4vZ2VvL21lcmNhdG9yX2Nvb3JkaW5hdGUnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBIaWxsc2hhZGVTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBERU1EYXRhIGZyb20gJy4uLy4uL2RhdGEvZGVtX2RhdGEnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IHR5cGUgSGlsbHNoYWRlVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfbGF0cmFuZ2UnOiBVbmlmb3JtMmYsXG4gICAgJ3VfbGlnaHQnOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2hhZG93JzogVW5pZm9ybUNvbG9yLFxuICAgICd1X2hpZ2hsaWdodCc6IFVuaWZvcm1Db2xvcixcbiAgICAndV9hY2NlbnQnOiBVbmlmb3JtQ29sb3Jcbnx9O1xuXG5leHBvcnQgdHlwZSBIaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfZGltZW5zaW9uJzogVW5pZm9ybTJmLFxuICAgICd1X3pvb20nOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWF4em9vbSc6IFVuaWZvcm0xZixcbiAgICAndV91bnBhY2snOiBVbmlmb3JtNGZcbnx9O1xuXG5jb25zdCBoaWxsc2hhZGVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBIaWxsc2hhZGVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV9sYXRyYW5nZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfbGF0cmFuZ2UpLFxuICAgICd1X2xpZ2h0JzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodCksXG4gICAgJ3Vfc2hhZG93JzogbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbnMudV9zaGFkb3cpLFxuICAgICd1X2hpZ2hsaWdodCc6IG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb25zLnVfaGlnaGxpZ2h0KSxcbiAgICAndV9hY2NlbnQnOiBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9ucy51X2FjY2VudClcbn0pO1xuXG5jb25zdCBoaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogSGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X2RpbWVuc2lvbic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfZGltZW5zaW9uKSxcbiAgICAndV96b29tJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV96b29tKSxcbiAgICAndV9tYXh6b29tJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXh6b29tKSxcbiAgICAndV91bnBhY2snOiBuZXcgVW5pZm9ybTRmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VucGFjaylcbn0pO1xuXG5jb25zdCBoaWxsc2hhZGVVbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgdGlsZTogVGlsZSxcbiAgICBsYXllcjogSGlsbHNoYWRlU3R5bGVMYXllclxuKTogVW5pZm9ybVZhbHVlczxIaWxsc2hhZGVVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCBzaGFkb3cgPSBsYXllci5wYWludC5nZXQoXCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yXCIpO1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IGxheWVyLnBhaW50LmdldChcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIik7XG4gICAgY29uc3QgYWNjZW50ID0gbGF5ZXIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWFjY2VudC1jb2xvclwiKTtcblxuICAgIGxldCBhemltdXRoYWwgPSBsYXllci5wYWludC5nZXQoJ2hpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uJykgKiAoTWF0aC5QSSAvIDE4MCk7XG4gICAgLy8gbW9kaWZ5IGF6aW11dGhhbCBhbmdsZSBieSBtYXAgcm90YXRpb24gaWYgbGlnaHQgaXMgYW5jaG9yZWQgYXQgdGhlIHZpZXdwb3J0XG4gICAgaWYgKGxheWVyLnBhaW50LmdldCgnaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3InKSA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgICAgICBhemltdXRoYWwgLT0gcGFpbnRlci50cmFuc2Zvcm0uYW5nbGU7XG4gICAgfVxuICAgIGNvbnN0IGFsaWduID0gIXBhaW50ZXIub3B0aW9ucy5tb3Zpbmc7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogcGFpbnRlci50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHRpbGUudGlsZUlELnRvVW53cmFwcGVkKCksIGFsaWduKSxcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAndV9sYXRyYW5nZSc6IGdldFRpbGVMYXRSYW5nZShwYWludGVyLCB0aWxlLnRpbGVJRCksXG4gICAgICAgICd1X2xpZ2h0JzogW2xheWVyLnBhaW50LmdldCgnaGlsbHNoYWRlLWV4YWdnZXJhdGlvbicpLCBhemltdXRoYWxdLFxuICAgICAgICAndV9zaGFkb3cnOiBzaGFkb3csXG4gICAgICAgICd1X2hpZ2hsaWdodCc6IGhpZ2hsaWdodCxcbiAgICAgICAgJ3VfYWNjZW50JzogYWNjZW50XG4gICAgfTtcbn07XG5cbmNvbnN0IGhpbGxzaGFkZVVuaWZvcm1QcmVwYXJlVmFsdWVzID0gKFxuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgZGVtOiBERU1EYXRhLCBtYXh6b29tOiBudW1iZXJcbik6IFVuaWZvcm1WYWx1ZXM8SGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zVHlwZT4gPT4ge1xuXG4gICAgY29uc3Qgc3RyaWRlID0gZGVtLnN0cmlkZTtcbiAgICBjb25zdCBtYXRyaXggPSBtYXQ0LmNyZWF0ZSgpO1xuICAgIC8vIEZsaXAgcmVuZGVyaW5nIGF0IHkgYXhpcy5cbiAgICBtYXQ0Lm9ydGhvKG1hdHJpeCwgMCwgRVhURU5ULCAtRVhURU5ULCAwLCAwLCAxKTtcbiAgICBtYXQ0LnRyYW5zbGF0ZShtYXRyaXgsIG1hdHJpeCwgWzAsIC1FWFRFTlQsIDBdKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3VfaW1hZ2UnOiAxLFxuICAgICAgICAndV9kaW1lbnNpb24nOiBbc3RyaWRlLCBzdHJpZGVdLFxuICAgICAgICAndV96b29tJzogdGlsZUlELm92ZXJzY2FsZWRaLFxuICAgICAgICAndV9tYXh6b29tJzogbWF4em9vbSxcbiAgICAgICAgJ3VfdW5wYWNrJzogZGVtLmdldFVucGFja1ZlY3RvcigpXG4gICAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldFRpbGVMYXRSYW5nZShwYWludGVyOiBQYWludGVyLCB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAvLyBmb3Igc2NhbGluZyB0aGUgbWFnbml0dWRlIG9mIGEgcG9pbnRzIHNsb3BlIGJ5IGl0cyBsYXRpdHVkZVxuICAgIGNvbnN0IHRpbGVzQXRab29tID0gTWF0aC5wb3coMiwgdGlsZUlELmNhbm9uaWNhbC56KTtcbiAgICBjb25zdCB5ID0gdGlsZUlELmNhbm9uaWNhbC55O1xuICAgIHJldHVybiBbXG4gICAgICAgIG5ldyBNZXJjYXRvckNvb3JkaW5hdGUoMCwgeSAvIHRpbGVzQXRab29tKS50b0xuZ0xhdCgpLmxhdCxcbiAgICAgICAgbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZSgwLCAoeSArIDEpIC8gdGlsZXNBdFpvb20pLnRvTG5nTGF0KCkubGF0XTtcbn1cblxuZXhwb3J0IHtcbiAgICBoaWxsc2hhZGVVbmlmb3JtcyxcbiAgICBoaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXMsXG4gICAgaGlsbHNoYWRlVW5pZm9ybVZhbHVlcyxcbiAgICBoaWxsc2hhZGVVbmlmb3JtUHJlcGFyZVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTRmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uLy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi8uLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUge0Nyb3NzRmFkZWR9IGZyb20gJy4uLy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgTGluZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmV4cG9ydCB0eXBlIExpbmVVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogVW5pZm9ybTJmXG58fTtcblxuZXhwb3J0IHR5cGUgTGluZUdyYWRpZW50VW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0yZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaVxufH07XG5cbmV4cG9ydCB0eXBlIExpbmVQYXR0ZXJuVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogVW5pZm9ybTJmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3NjYWxlJzogVW5pZm9ybTRmLFxuICAgICd1X2ZhZGUnOiBVbmlmb3JtMWZcbnx9O1xuXG5leHBvcnQgdHlwZSBMaW5lU0RGVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuc2NhbGVfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuc2NhbGVfYic6IFVuaWZvcm0yZixcbiAgICAndV9zZGZnYW1tYSc6IFVuaWZvcm0xZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXhfeV9hJzogVW5pZm9ybTFmLFxuICAgICd1X3RleF95X2InOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWl4JzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgbGluZVVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IExpbmVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3JhdGlvKSxcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RldmljZV9waXhlbF9yYXRpbyksXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV91bml0c190b19waXhlbHMpXG59KTtcblxuY29uc3QgbGluZUdyYWRpZW50VW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogTGluZUdyYWRpZW50VW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9yYXRpbyksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdW5pdHNfdG9fcGl4ZWxzKSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpXG59KTtcblxuY29uc3QgbGluZVBhdHRlcm5Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBMaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcmF0aW8pLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdW5pdHNfdG9fcGl4ZWxzKSxcbiAgICAndV9zY2FsZSc6IG5ldyBVbmlmb3JtNGYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGUpLFxuICAgICd1X2ZhZGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGUpXG59KTtcblxuY29uc3QgbGluZVNERlVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IExpbmVTREZVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3JhdGlvKSxcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RldmljZV9waXhlbF9yYXRpbyksXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV91bml0c190b19waXhlbHMpLFxuICAgICd1X3BhdHRlcm5zY2FsZV9hJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuc2NhbGVfYSksXG4gICAgJ3VfcGF0dGVybnNjYWxlX2InOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5zY2FsZV9iKSxcbiAgICAndV9zZGZnYW1tYSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2RmZ2FtbWEpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdGV4X3lfYSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4X3lfYSksXG4gICAgJ3VfdGV4X3lfYic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4X3lfYiksXG4gICAgJ3VfbWl4JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9taXgpXG59KTtcblxuY29uc3QgbGluZVVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBMaW5lU3R5bGVMYXllclxuKTogVW5pZm9ybVZhbHVlczxMaW5lVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBjYWxjdWxhdGVNYXRyaXgocGFpbnRlciwgdGlsZSwgbGF5ZXIpLFxuICAgICAgICAndV9yYXRpbyc6IDEgLyBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0cmFuc2Zvcm0uem9vbSksXG4gICAgICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxcbiAgICAgICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogW1xuICAgICAgICAgICAgMSAvIHRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMF0sXG4gICAgICAgICAgICAxIC8gdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1sxXVxuICAgICAgICBdXG4gICAgfTtcbn07XG5cbmNvbnN0IGxpbmVHcmFkaWVudFVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBMaW5lU3R5bGVMYXllclxuKTogVW5pZm9ybVZhbHVlczxMaW5lR3JhZGllbnRVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICByZXR1cm4gZXh0ZW5kKGxpbmVVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyKSwge1xuICAgICAgICAndV9pbWFnZSc6IDBcbiAgICB9KTtcbn07XG5cbmNvbnN0IGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IExpbmVTdHlsZUxheWVyLFxuICAgIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVyc1xuKTogVW5pZm9ybVZhbHVlczxMaW5lUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuICAgIGNvbnN0IHRpbGVab29tUmF0aW8gPSBjYWxjdWxhdGVUaWxlUmF0aW8odGlsZSwgdHJhbnNmb3JtKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBjYWxjdWxhdGVNYXRyaXgocGFpbnRlciwgdGlsZSwgbGF5ZXIpLFxuICAgICAgICAndV90ZXhzaXplJzogdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5zaXplLFxuICAgICAgICAvLyBjYW1lcmEgem9vbSByYXRpb1xuICAgICAgICAndV9yYXRpbyc6IDEgLyBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0cmFuc2Zvcm0uem9vbSksXG4gICAgICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAvLyB0aGlzIGFzc3VtZXMgYWxsIGltYWdlcyBpbiB0aGUgaWNvbiBhdGxhcyB0ZXh0dXJlIGhhdmUgdGhlIHNhbWUgcGl4ZWwgcmF0aW9cbiAgICAgICAgJ3Vfc2NhbGUnOiBbYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLCB0aWxlWm9vbVJhdGlvLCBjcm9zc2ZhZGUuZnJvbVNjYWxlLCBjcm9zc2ZhZGUudG9TY2FsZV0sXG4gICAgICAgICd1X2ZhZGUnOiBjcm9zc2ZhZGUudCxcbiAgICAgICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogW1xuICAgICAgICAgICAgMSAvIHRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMF0sXG4gICAgICAgICAgICAxIC8gdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1sxXVxuICAgICAgICBdXG4gICAgfTtcbn07XG5cbmNvbnN0IGxpbmVTREZVbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgdGlsZTogVGlsZSxcbiAgICBsYXllcjogTGluZVN0eWxlTGF5ZXIsXG4gICAgZGFzaGFycmF5OiBDcm9zc0ZhZGVkPEFycmF5PG51bWJlcj4+LFxuICAgIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVyc1xuKTogVW5pZm9ybVZhbHVlczxMaW5lU0RGVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG4gICAgY29uc3QgbGluZUF0bGFzID0gcGFpbnRlci5saW5lQXRsYXM7XG4gICAgY29uc3QgdGlsZVJhdGlvID0gY2FsY3VsYXRlVGlsZVJhdGlvKHRpbGUsIHRyYW5zZm9ybSk7XG5cbiAgICBjb25zdCByb3VuZCA9IGxheWVyLmxheW91dC5nZXQoJ2xpbmUtY2FwJykgPT09ICdyb3VuZCc7XG5cbiAgICBjb25zdCBwb3NBID0gbGluZUF0bGFzLmdldERhc2goZGFzaGFycmF5LmZyb20sIHJvdW5kKTtcbiAgICBjb25zdCBwb3NCID0gbGluZUF0bGFzLmdldERhc2goZGFzaGFycmF5LnRvLCByb3VuZCk7XG5cbiAgICBjb25zdCB3aWR0aEEgPSBwb3NBLndpZHRoICogY3Jvc3NmYWRlLmZyb21TY2FsZTtcbiAgICBjb25zdCB3aWR0aEIgPSBwb3NCLndpZHRoICogY3Jvc3NmYWRlLnRvU2NhbGU7XG5cbiAgICByZXR1cm4gZXh0ZW5kKGxpbmVVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyKSwge1xuICAgICAgICAndV9wYXR0ZXJuc2NhbGVfYSc6IFt0aWxlUmF0aW8gLyB3aWR0aEEsIC1wb3NBLmhlaWdodCAvIDJdLFxuICAgICAgICAndV9wYXR0ZXJuc2NhbGVfYic6IFt0aWxlUmF0aW8gLyB3aWR0aEIsIC1wb3NCLmhlaWdodCAvIDJdLFxuICAgICAgICAndV9zZGZnYW1tYSc6IGxpbmVBdGxhcy53aWR0aCAvIChNYXRoLm1pbih3aWR0aEEsIHdpZHRoQikgKiAyNTYgKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8pIC8gMixcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAndV90ZXhfeV9hJzogcG9zQS55LFxuICAgICAgICAndV90ZXhfeV9iJzogcG9zQi55LFxuICAgICAgICAndV9taXgnOiBjcm9zc2ZhZGUudFxuICAgIH0pO1xufTtcblxuZnVuY3Rpb24gY2FsY3VsYXRlVGlsZVJhdGlvKHRpbGU6IFRpbGUsIHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG4gICAgcmV0dXJuIDEgLyBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0cmFuc2Zvcm0udGlsZVpvb20pO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVNYXRyaXgocGFpbnRlciwgdGlsZSwgbGF5ZXIpIHtcbiAgICByZXR1cm4gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoXG4gICAgICAgIHRpbGUudGlsZUlELnBvc01hdHJpeCxcbiAgICAgICAgdGlsZSxcbiAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLXRyYW5zbGF0ZScpLFxuICAgICAgICBsYXllci5wYWludC5nZXQoJ2xpbmUtdHJhbnNsYXRlLWFuY2hvcicpXG4gICAgKTtcbn1cblxuZXhwb3J0IHtcbiAgICBsaW5lVW5pZm9ybXMsXG4gICAgbGluZUdyYWRpZW50VW5pZm9ybXMsXG4gICAgbGluZVBhdHRlcm5Vbmlmb3JtcyxcbiAgICBsaW5lU0RGVW5pZm9ybXMsXG4gICAgbGluZVVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZUdyYWRpZW50VW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZVNERlVuaWZvcm1WYWx1ZXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm0zZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgUmFzdGVyU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9yYXN0ZXJfc3R5bGVfbGF5ZXInO1xuXG5leHBvcnQgdHlwZSBSYXN0ZXJVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV90bF9wYXJlbnQnOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGVfcGFyZW50JzogVW5pZm9ybTFmLFxuICAgICd1X2J1ZmZlcl9zY2FsZSc6IFVuaWZvcm0xZixcbiAgICAndV9mYWRlX3QnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfb3BhY2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9pbWFnZTAnOiBVbmlmb3JtMWksXG4gICAgJ3VfaW1hZ2UxJzogVW5pZm9ybTFpLFxuICAgICd1X2JyaWdodG5lc3NfbG93JzogVW5pZm9ybTFmLFxuICAgICd1X2JyaWdodG5lc3NfaGlnaCc6IFVuaWZvcm0xZixcbiAgICAndV9zYXR1cmF0aW9uX2ZhY3Rvcic6IFVuaWZvcm0xZixcbiAgICAndV9jb250cmFzdF9mYWN0b3InOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc3Bpbl93ZWlnaHRzJzogVW5pZm9ybTNmXG58fTtcblxuY29uc3QgcmFzdGVyVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogUmFzdGVyVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3RsX3BhcmVudCc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGxfcGFyZW50KSxcbiAgICAndV9zY2FsZV9wYXJlbnQnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlX3BhcmVudCksXG4gICAgJ3VfYnVmZmVyX3NjYWxlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9idWZmZXJfc2NhbGUpLFxuICAgICd1X2ZhZGVfdCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZV90KSxcbiAgICAndV9vcGFjaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9vcGFjaXR5KSxcbiAgICAndV9pbWFnZTAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlMCksXG4gICAgJ3VfaW1hZ2UxJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZTEpLFxuICAgICd1X2JyaWdodG5lc3NfbG93JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9icmlnaHRuZXNzX2xvdyksXG4gICAgJ3VfYnJpZ2h0bmVzc19oaWdoJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9icmlnaHRuZXNzX2hpZ2gpLFxuICAgICd1X3NhdHVyYXRpb25fZmFjdG9yJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zYXR1cmF0aW9uX2ZhY3RvciksXG4gICAgJ3VfY29udHJhc3RfZmFjdG9yJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jb250cmFzdF9mYWN0b3IpLFxuICAgICd1X3NwaW5fd2VpZ2h0cyc6IG5ldyBVbmlmb3JtM2YoY29udGV4dCwgbG9jYXRpb25zLnVfc3Bpbl93ZWlnaHRzKVxufSk7XG5cbmNvbnN0IHJhc3RlclVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFyZW50VEw6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgcGFyZW50U2NhbGVCeTogbnVtYmVyLFxuICAgIGZhZGU6IHttaXg6IG51bWJlciwgb3BhY2l0eTogbnVtYmVyfSxcbiAgICBsYXllcjogUmFzdGVyU3R5bGVMYXllclxuKTogVW5pZm9ybVZhbHVlczxSYXN0ZXJVbmlmb3Jtc1R5cGU+ID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICd1X3RsX3BhcmVudCc6IHBhcmVudFRMLFxuICAgICd1X3NjYWxlX3BhcmVudCc6IHBhcmVudFNjYWxlQnksXG4gICAgJ3VfYnVmZmVyX3NjYWxlJzogMSxcbiAgICAndV9mYWRlX3QnOiBmYWRlLm1peCxcbiAgICAndV9vcGFjaXR5JzogZmFkZS5vcGFjaXR5ICogbGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItb3BhY2l0eScpLFxuICAgICd1X2ltYWdlMCc6IDAsXG4gICAgJ3VfaW1hZ2UxJzogMSxcbiAgICAndV9icmlnaHRuZXNzX2xvdyc6IGxheWVyLnBhaW50LmdldCgncmFzdGVyLWJyaWdodG5lc3MtbWluJyksXG4gICAgJ3VfYnJpZ2h0bmVzc19oaWdoJzogbGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItYnJpZ2h0bmVzcy1tYXgnKSxcbiAgICAndV9zYXR1cmF0aW9uX2ZhY3Rvcic6IHNhdHVyYXRpb25GYWN0b3IobGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItc2F0dXJhdGlvbicpKSxcbiAgICAndV9jb250cmFzdF9mYWN0b3InOiBjb250cmFzdEZhY3RvcihsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1jb250cmFzdCcpKSxcbiAgICAndV9zcGluX3dlaWdodHMnOiBzcGluV2VpZ2h0cyhsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1odWUtcm90YXRlJykpXG59KTtcblxuZnVuY3Rpb24gc3BpbldlaWdodHMoYW5nbGUpIHtcbiAgICBhbmdsZSAqPSBNYXRoLlBJIC8gMTgwO1xuICAgIGNvbnN0IHMgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgY29uc3QgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAoMiAqIGMgKyAxKSAvIDMsXG4gICAgICAgICgtTWF0aC5zcXJ0KDMpICogcyAtIGMgKyAxKSAvIDMsXG4gICAgICAgIChNYXRoLnNxcnQoMykgKiBzIC0gYyArIDEpIC8gM1xuICAgIF07XG59XG5cbmZ1bmN0aW9uIGNvbnRyYXN0RmFjdG9yKGNvbnRyYXN0KSB7XG4gICAgcmV0dXJuIGNvbnRyYXN0ID4gMCA/XG4gICAgICAgIDEgLyAoMSAtIGNvbnRyYXN0KSA6XG4gICAgICAgIDEgKyBjb250cmFzdDtcbn1cblxuZnVuY3Rpb24gc2F0dXJhdGlvbkZhY3RvcihzYXR1cmF0aW9uKSB7XG4gICAgcmV0dXJuIHNhdHVyYXRpb24gPiAwID9cbiAgICAgICAgMSAtIDEgLyAoMS4wMDEgLSBzYXR1cmF0aW9uKSA6XG4gICAgICAgIC1zYXR1cmF0aW9uO1xufVxuXG5leHBvcnQge3Jhc3RlclVuaWZvcm1zLCByYXN0ZXJVbmlmb3JtVmFsdWVzfTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmV4cG9ydCB0eXBlIFN5bWJvbEljb25Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IFVuaWZvcm0xaSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBVbmlmb3JtMWksXG4gICAgJ3Vfc2l6ZV90JzogVW5pZm9ybTFmLFxuICAgICd1X3NpemUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IFVuaWZvcm0xZixcbiAgICAndV9waXRjaCc6IFVuaWZvcm0xZixcbiAgICAndV9yb3RhdGVfc3ltYm9sJzogVW5pZm9ybTFpLFxuICAgICd1X2FzcGVjdF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9mYWRlX2NoYW5nZSc6IFVuaWZvcm0xZixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfbGFiZWxfcGxhbmVfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2Nvb3JkX21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9pc190ZXh0JzogVW5pZm9ybTFmLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogVW5pZm9ybTFpLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfdGV4dHVyZSc6IFVuaWZvcm0xaVxufH07XG5cbmV4cG9ydCB0eXBlIFN5bWJvbFNERlVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6IFVuaWZvcm0xaSxcbiAgICAndV9zaXplX3QnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2l6ZSc6IFVuaWZvcm0xZixcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpdGNoJzogVW5pZm9ybTFmLFxuICAgICd1X3JvdGF0ZV9zeW1ib2wnOiBVbmlmb3JtMWksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogVW5pZm9ybTFmLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfY29vcmRfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2lzX3RleHQnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV90ZXh0dXJlJzogVW5pZm9ybTFpLFxuICAgICd1X2dhbW1hX3NjYWxlJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9pc19oYWxvJzogVW5pZm9ybTFmXG58fTtcblxuY29uc3Qgc3ltYm9sSWNvblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IFN5bWJvbEljb25Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfem9vbV9jb25zdGFudCksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpLFxuICAgICd1X3NpemVfdCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2l6ZV90KSxcbiAgICAndV9zaXplJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplKSxcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSxcbiAgICAndV9waXRjaCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl0Y2gpLFxuICAgICd1X3JvdGF0ZV9zeW1ib2wnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3JvdGF0ZV9zeW1ib2wpLFxuICAgICd1X2FzcGVjdF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfYXNwZWN0X3JhdGlvKSxcbiAgICAndV9mYWRlX2NoYW5nZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZV9jaGFuZ2UpLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xhYmVsX3BsYW5lX21hdHJpeCksXG4gICAgJ3VfY29vcmRfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9jb29yZF9tYXRyaXgpLFxuICAgICd1X2lzX3RleHQnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3RleHQpLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaF93aXRoX21hcCksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfdGV4dHVyZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4dHVyZSlcbn0pO1xuXG5jb25zdCBzeW1ib2xTREZVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBTeW1ib2xTREZVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfem9vbV9jb25zdGFudCksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpLFxuICAgICd1X3NpemVfdCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2l6ZV90KSxcbiAgICAndV9zaXplJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplKSxcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSxcbiAgICAndV9waXRjaCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl0Y2gpLFxuICAgICd1X3JvdGF0ZV9zeW1ib2wnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3JvdGF0ZV9zeW1ib2wpLFxuICAgICd1X2FzcGVjdF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfYXNwZWN0X3JhdGlvKSxcbiAgICAndV9mYWRlX2NoYW5nZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZV9jaGFuZ2UpLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xhYmVsX3BsYW5lX21hdHJpeCksXG4gICAgJ3VfY29vcmRfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9jb29yZF9tYXRyaXgpLFxuICAgICd1X2lzX3RleHQnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3RleHQpLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaF93aXRoX21hcCksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfdGV4dHVyZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4dHVyZSksXG4gICAgJ3VfZ2FtbWFfc2NhbGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2dhbW1hX3NjYWxlKSxcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RldmljZV9waXhlbF9yYXRpbyksXG4gICAgJ3VfaXNfaGFsbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfaGFsbylcbn0pO1xuXG5jb25zdCBzeW1ib2xJY29uVW5pZm9ybVZhbHVlcyA9IChcbiAgICBmdW5jdGlvblR5cGU6IHN0cmluZyxcbiAgICBzaXplOiA/e3VTaXplVDogbnVtYmVyLCB1U2l6ZTogbnVtYmVyfSxcbiAgICByb3RhdGVJblNoYWRlcjogYm9vbGVhbixcbiAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBsYWJlbFBsYW5lTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgZ2xDb29yZE1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGlzVGV4dDogYm9vbGVhbixcbiAgICB0ZXhTaXplOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPFN5bWJvbEljb25Vbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6ICsoZnVuY3Rpb25UeXBlID09PSAnY29uc3RhbnQnIHx8IGZ1bmN0aW9uVHlwZSA9PT0gJ3NvdXJjZScpLFxuICAgICAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiArKGZ1bmN0aW9uVHlwZSA9PT0gJ2NvbnN0YW50JyB8fCBmdW5jdGlvblR5cGUgPT09ICdjYW1lcmEnKSxcbiAgICAgICAgJ3Vfc2l6ZV90Jzogc2l6ZSA/IHNpemUudVNpemVUIDogMCxcbiAgICAgICAgJ3Vfc2l6ZSc6IHNpemUgPyBzaXplLnVTaXplIDogMCxcbiAgICAgICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLFxuICAgICAgICAndV9waXRjaCc6IHRyYW5zZm9ybS5waXRjaCAvIDM2MCAqIDIgKiBNYXRoLlBJLFxuICAgICAgICAndV9yb3RhdGVfc3ltYm9sJzogK3JvdGF0ZUluU2hhZGVyLFxuICAgICAgICAndV9hc3BlY3RfcmF0aW8nOiB0cmFuc2Zvcm0ud2lkdGggLyB0cmFuc2Zvcm0uaGVpZ2h0LFxuICAgICAgICAndV9mYWRlX2NoYW5nZSc6IHBhaW50ZXIub3B0aW9ucy5mYWRlRHVyYXRpb24gPyBwYWludGVyLnN5bWJvbEZhZGVDaGFuZ2UgOiAxLFxuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IGxhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICd1X2Nvb3JkX21hdHJpeCc6IGdsQ29vcmRNYXRyaXgsXG4gICAgICAgICd1X2lzX3RleHQnOiAraXNUZXh0LFxuICAgICAgICAndV9waXRjaF93aXRoX21hcCc6ICtwaXRjaFdpdGhNYXAsXG4gICAgICAgICd1X3RleHNpemUnOiB0ZXhTaXplLFxuICAgICAgICAndV90ZXh0dXJlJzogMFxuICAgIH07XG59O1xuXG5jb25zdCBzeW1ib2xTREZVbmlmb3JtVmFsdWVzID0gKFxuICAgIGZ1bmN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHNpemU6ID97dVNpemVUOiBudW1iZXIsIHVTaXplOiBudW1iZXJ9LFxuICAgIHJvdGF0ZUluU2hhZGVyOiBib29sZWFuLFxuICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGxhYmVsUGxhbmVNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBnbENvb3JkTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgaXNUZXh0OiBib29sZWFuLFxuICAgIHRleFNpemU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgaXNIYWxvOiBib29sZWFuXG4pOiBVbmlmb3JtVmFsdWVzPFN5bWJvbFNERlVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuXG4gICAgcmV0dXJuIGV4dGVuZChzeW1ib2xJY29uVW5pZm9ybVZhbHVlcyhmdW5jdGlvblR5cGUsIHNpemUsXG4gICAgICAgIHJvdGF0ZUluU2hhZGVyLCBwaXRjaFdpdGhNYXAsIHBhaW50ZXIsIG1hdHJpeCwgbGFiZWxQbGFuZU1hdHJpeCxcbiAgICAgICAgZ2xDb29yZE1hdHJpeCwgaXNUZXh0LCB0ZXhTaXplKSwge1xuICAgICAgICAndV9nYW1tYV9zY2FsZSc6IChwaXRjaFdpdGhNYXAgPyBNYXRoLmNvcyh0cmFuc2Zvcm0uX3BpdGNoKSAqIHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIDogMSksXG4gICAgICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxcbiAgICAgICAgJ3VfaXNfaGFsbyc6ICtpc0hhbG9cbiAgICB9KTtcbn07XG5cbmV4cG9ydCB7c3ltYm9sSWNvblVuaWZvcm1zLCBzeW1ib2xTREZVbmlmb3Jtcywgc3ltYm9sSWNvblVuaWZvcm1WYWx1ZXMsIHN5bWJvbFNERlVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtiZ1BhdHRlcm5Vbmlmb3JtVmFsdWVzfSBmcm9tICcuL3BhdHRlcm4nO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIEJhY2tncm91bmRVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2NvbG9yJzogVW5pZm9ybUNvbG9yXG58fTtcblxuZXhwb3J0IHR5cGUgQmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGF0dGVybl90bF9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fYnJfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX3RsX2InOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9icl9iJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfbWl4JzogVW5pZm9ybTFmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlX2EnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2NhbGVfYic6IFVuaWZvcm0xZixcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV90aWxlX3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGJhY2tncm91bmRVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBCYWNrZ3JvdW5kVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpLFxuICAgICd1X2NvbG9yJzogbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbnMudV9jb2xvcilcbn0pO1xuXG5jb25zdCBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfcGF0dGVybl90bF9hJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX3RsX2EpLFxuICAgICd1X3BhdHRlcm5fYnJfYSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl9icl9hKSxcbiAgICAndV9wYXR0ZXJuX3RsX2InOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5fdGxfYiksXG4gICAgJ3VfcGF0dGVybl9icl9iJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX2JyX2IpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X21peCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbWl4KSxcbiAgICAndV9wYXR0ZXJuX3NpemVfYSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl9zaXplX2EpLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX3NpemVfYiksXG4gICAgJ3Vfc2NhbGVfYSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfYSksXG4gICAgJ3Vfc2NhbGVfYic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfYiksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV90aWxlX3VuaXRzX3RvX3BpeGVscylcbn0pO1xuXG5jb25zdCBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBvcGFjaXR5OiBudW1iZXIsXG4gICAgY29sb3I6IENvbG9yXG4pOiBVbmlmb3JtVmFsdWVzPEJhY2tncm91bmRVbmlmb3Jtc1R5cGU+ID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICd1X29wYWNpdHknOiBvcGFjaXR5LFxuICAgICd1X2NvbG9yJzogY29sb3Jcbn0pO1xuXG5jb25zdCBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgb3BhY2l0eTogbnVtYmVyLFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgaW1hZ2U6IENyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4sXG4gICAgdGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn0sXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzXG4pOiBVbmlmb3JtVmFsdWVzPEJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNUeXBlPiA9PiBleHRlbmQoXG4gICAgYmdQYXR0ZXJuVW5pZm9ybVZhbHVlcyhpbWFnZSwgY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKSxcbiAgICB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3Vfb3BhY2l0eSc6IG9wYWNpdHlcbiAgICB9XG4pO1xuXG5leHBvcnQge1xuICAgIGJhY2tncm91bmRVbmlmb3JtcyxcbiAgICBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zLFxuICAgIGJhY2tncm91bmRVbmlmb3JtVmFsdWVzLFxuICAgIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZmlsbEV4dHJ1c2lvblVuaWZvcm1zLCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3Byb2dyYW0nO1xuaW1wb3J0IHtmaWxsVW5pZm9ybXMsIGZpbGxQYXR0ZXJuVW5pZm9ybXMsIGZpbGxPdXRsaW5lVW5pZm9ybXMsIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zfSBmcm9tICcuL2ZpbGxfcHJvZ3JhbSc7XG5pbXBvcnQge2NpcmNsZVVuaWZvcm1zfSBmcm9tICcuL2NpcmNsZV9wcm9ncmFtJztcbmltcG9ydCB7Y29sbGlzaW9uVW5pZm9ybXN9IGZyb20gJy4vY29sbGlzaW9uX3Byb2dyYW0nO1xuaW1wb3J0IHtkZWJ1Z1VuaWZvcm1zfSBmcm9tICcuL2RlYnVnX3Byb2dyYW0nO1xuaW1wb3J0IHtjbGlwcGluZ01hc2tVbmlmb3Jtc30gZnJvbSAnLi9jbGlwcGluZ19tYXNrX3Byb2dyYW0nO1xuaW1wb3J0IHtoZWF0bWFwVW5pZm9ybXMsIGhlYXRtYXBUZXh0dXJlVW5pZm9ybXN9IGZyb20gJy4vaGVhdG1hcF9wcm9ncmFtJztcbmltcG9ydCB7aGlsbHNoYWRlVW5pZm9ybXMsIGhpbGxzaGFkZVByZXBhcmVVbmlmb3Jtc30gZnJvbSAnLi9oaWxsc2hhZGVfcHJvZ3JhbSc7XG5pbXBvcnQge2xpbmVVbmlmb3JtcywgbGluZUdyYWRpZW50VW5pZm9ybXMsIGxpbmVQYXR0ZXJuVW5pZm9ybXMsIGxpbmVTREZVbmlmb3Jtc30gZnJvbSAnLi9saW5lX3Byb2dyYW0nO1xuaW1wb3J0IHtyYXN0ZXJVbmlmb3Jtc30gZnJvbSAnLi9yYXN0ZXJfcHJvZ3JhbSc7XG5pbXBvcnQge3N5bWJvbEljb25Vbmlmb3Jtcywgc3ltYm9sU0RGVW5pZm9ybXN9IGZyb20gJy4vc3ltYm9sX3Byb2dyYW0nO1xuaW1wb3J0IHtiYWNrZ3JvdW5kVW5pZm9ybXMsIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXN9IGZyb20gJy4vYmFja2dyb3VuZF9wcm9ncmFtJztcblxuZXhwb3J0IGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IHtcbiAgICBmaWxsRXh0cnVzaW9uOiBmaWxsRXh0cnVzaW9uVW5pZm9ybXMsXG4gICAgZmlsbEV4dHJ1c2lvblBhdHRlcm46IGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbDogZmlsbFVuaWZvcm1zLFxuICAgIGZpbGxQYXR0ZXJuOiBmaWxsUGF0dGVyblVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lOiBmaWxsT3V0bGluZVVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVybjogZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybXMsXG4gICAgY2lyY2xlOiBjaXJjbGVVbmlmb3JtcyxcbiAgICBjb2xsaXNpb25Cb3g6IGNvbGxpc2lvblVuaWZvcm1zLFxuICAgIGNvbGxpc2lvbkNpcmNsZTogY29sbGlzaW9uVW5pZm9ybXMsXG4gICAgZGVidWc6IGRlYnVnVW5pZm9ybXMsXG4gICAgY2xpcHBpbmdNYXNrOiBjbGlwcGluZ01hc2tVbmlmb3JtcyxcbiAgICBoZWF0bWFwOiBoZWF0bWFwVW5pZm9ybXMsXG4gICAgaGVhdG1hcFRleHR1cmU6IGhlYXRtYXBUZXh0dXJlVW5pZm9ybXMsXG4gICAgaGlsbHNoYWRlOiBoaWxsc2hhZGVVbmlmb3JtcyxcbiAgICBoaWxsc2hhZGVQcmVwYXJlOiBoaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXMsXG4gICAgbGluZTogbGluZVVuaWZvcm1zLFxuICAgIGxpbmVHcmFkaWVudDogbGluZUdyYWRpZW50VW5pZm9ybXMsXG4gICAgbGluZVBhdHRlcm46IGxpbmVQYXR0ZXJuVW5pZm9ybXMsXG4gICAgbGluZVNERjogbGluZVNERlVuaWZvcm1zLFxuICAgIHJhc3RlcjogcmFzdGVyVW5pZm9ybXMsXG4gICAgc3ltYm9sSWNvbjogc3ltYm9sSWNvblVuaWZvcm1zLFxuICAgIHN5bWJvbFNERjogc3ltYm9sU0RGVW5pZm9ybXMsXG4gICAgYmFja2dyb3VuZDogYmFja2dyb3VuZFVuaWZvcm1zLFxuICAgIGJhY2tncm91bmRQYXR0ZXJuOiBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlELCBDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbmV4cG9ydCB0eXBlIE1hc2sgPSB7XG4gICAgW251bWJlcl06IENhbm9uaWNhbFRpbGVJRFxufTtcblxuLy8gVXBkYXRlcyB0aGUgVGlsZU1hc2tzIGZvciBhbGwgcmVuZGVyYWJsZSB0aWxlcy4gQSBUaWxlTWFzayBkZXNjcmliZXMgYWxsIHJlZ2lvbnNcbi8vIHdpdGhpbiB0aGF0IHRpbGUgdGhhdCBhcmUgKm5vdCogY292ZXJlZCBieSBvdGhlciByZW5kZXJhYmxlIHRpbGVzLlxuLy8gRXhhbXBsZTogcmVuZGVyYWJsZVRpbGVzIGluIG91ciBsaXN0IGFyZSAyLzEvMywgMy8zLzYsIGFuZCA0LzUvMTMuIFRoZSBzY2hlbWF0aWMgZm9yIGNyZWF0aW5nIHRoZVxuLy8gVGlsZU1hc2sgZm9yIDIvMS8zIGxvb2tzIGxpa2UgdGhpczpcbi8vXG4vLyAgICDDosKUwozDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwqzDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwqzDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwpBcbi8vICAgIMOiwpTCgiAgICAgICAgw6LClMKCICAgICAgICDDosKUwoIjIyMjIyMjIyMjIyMjIyMjI8OiwpTCglxuLy8gICAgw6LClMKCIDQvNC8xMiDDosKUwoIgNC81LzEyIMOiwpTCgiMjIyMjIyMjIyMjIyMjIyMjw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgIMOiwpTCgiAgICAgICAgw6LClMKCIyMjIyMjIyMjIyMjIyMjIyPDosKUwoJcbi8vICAgIMOiwpTCnMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgDMvMi82w6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKkIyMjIyMzLzMvNiMjIyMjIyPDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgw6LClMKCIyMjIyMjIyPDosKUwoIjIyMjIyMjIyMjIyMjIyMjI8OiwpTCglxuLy8gICAgw6LClMKCIDQvNC8xMyDDosKUwoIjNC81LzEzI8OiwpTCgiMjIyMjIyMjIyMjIyMjIyMjw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgIMOiwpTCgiMjIyMjIyMjw6LClMKCIyMjIyMjIyMjIyMjIyMjIyPDosKUwoJcbi8vICAgIMOiwpTCnMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCtMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgDIvMS8zw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKkXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAzLzIvNyAgICAgIMOiwpTCgiAgICAgIDMvMy83ICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwpTDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwrTDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwphcbi8vXG4vLyBUaGUgVGlsZU1hc2sgZm9yIDIvMS8zIHRodXMgY29uc2lzdHMgb2YgdGhlIHRpbGVzIDQvNC8xMiwgNC81LzEyLCA0LzQvMTMsIDMvMi83LCBhbmQgMy8zLzcsXG4vLyBidXQgaXQgZG9lcyAqbm90KiBpbmNsdWRlIDQvNS8xMywgYW5kIDMvMy82LCBzaW5jZSB0aGVzZSBhcmUgb3RoZXIgcmVuZGVyYWJsZVRpbGVzLlxuLy8gQSBUaWxlTWFzayBhbHdheXMgY29udGFpbnMgVGlsZUlEcyAqcmVsYXRpdmUqIHRvIHRoZSB0aWxlIGl0IGlzIGdlbmVyYXRlZCBmb3IsIHNvIDIvMS8zIGlzXG4vLyBcInN1YnRyYWN0ZWRcIiBmcm9tIHRoZXNlIFRpbGVJRHMuIFRoZSBmaW5hbCBUaWxlTWFzayBmb3IgMi8xLzMgd2lsbCB0aHVzIGJlOlxuLy9cbi8vICAgIMOiwpTCjMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCrMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCrMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCkFxuLy8gICAgw6LClMKCICAgICAgICDDosKUwoIgICAgICAgIMOiwpTCgiMjIyMjIyMjIyMjIyMjIyMjw6LClMKCXG4vLyAgICDDosKUwoIgMi8wLzAgIMOiwpTCgiAyLzEvMCAgw6LClMKCIyMjIyMjIyMjIyMjIyMjIyPDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgw6LClMKCICAgICAgICDDosKUwoIjIyMjIyMjIyMjIyMjIyMjI8OiwpTCglxuLy8gICAgw6LClMKcw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMK8w6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKkIyMjIyMjIyMjIyMjIyMjIyPDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgw6LClMKCIyMjIyMjIyPDosKUwoIjIyMjIyMjIyMjIyMjIyMjI8OiwpTCglxuLy8gICAgw6LClMKCIDIvMC8xICDDosKUwoIjIyMjIyMjI8OiwpTCgiMjIyMjIyMjIyMjIyMjIyMjw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgIMOiwpTCgiMjIyMjIyMjw6LClMKCIyMjIyMjIyMjIyMjIyMjIyPDosKUwoJcbi8vICAgIMOiwpTCnMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCtMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCvMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCpFxuLy8gICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCglxuLy8gICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCglxuLy8gICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCglxuLy8gICAgw6LClMKCICAgICAgMS8wLzEgICAgICDDosKUwoIgICAgICAxLzEvMSAgICAgIMOiwpTCglxuLy8gICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCglxuLy8gICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCglxuLy8gICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCglxuLy8gICAgw6LClMKUw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMK0w6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKYXG4vL1xuLy8gT25seSBvdGhlciByZW5kZXJhYmxlIHRpbGVzIHRoYXQgYXJlICpjaGlsZHJlbiogb2YgdGhlIHRpbGUgd2UgYXJlIGdlbmVyYXRpbmcgdGhlIG1hc2sgZm9yIHdpbGxcbi8vIGJlIGNvbnNpZGVyZWQuIEZvciBleGFtcGxlLCBhZGRpbmcgVGlsZUlEIDQvOC8xMyB0byByZW5kZXJhYmxlVGlsZXMgd29uJ3QgYWZmZWN0IHRoZSBUaWxlTWFzayBmb3Jcbi8vIDIvMS8zLCBzaW5jZSBpdCBpcyBub3QgYSBkZXNjZW5kYW50IG9mIGl0LlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyZW5kZXJhYmxlVGlsZXM6IEFycmF5PFRpbGU+LCBjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgY29uc3Qgc29ydGVkUmVuZGVyYWJsZXMgPSByZW5kZXJhYmxlVGlsZXMuc29ydCgoYSwgYikgPT4geyByZXR1cm4gYS50aWxlSUQuaXNMZXNzVGhhbihiLnRpbGVJRCkgPyAtMSA6IGIudGlsZUlELmlzTGVzc1RoYW4oYS50aWxlSUQpID8gMSA6IDA7IH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZW5kZXJhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBtYXNrID0ge307XG4gICAgICAgIGNvbnN0IHRpbGUgPSAgc29ydGVkUmVuZGVyYWJsZXNbaV07XG4gICAgICAgIGNvbnN0IGNoaWxkQXJyYXkgPSBzb3J0ZWRSZW5kZXJhYmxlcy5zbGljZShpICsgMSk7XG4gICAgICAgIC8vIFRyeSB0byBhZGQgYWxsIHJlbWFpbmluZyBpZHMgYXMgY2hpbGRyZW4uIFdlIHNvcnRlZCB0aGUgdGlsZSBsaXN0XG4gICAgICAgIC8vIGJ5IHogZWFybGllciwgc28gYWxsIHByZWNlZGluZyBpdGVtcyBjYW5ub3QgYmUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnRcbiAgICAgICAgLy8gdGlsZS4gV2UgYWxzbyBjb21wdXRlIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgbmV4dCB3cmFwLCBiZWNhdXNlIGl0ZW1zIG9mIHRoZSBuZXh0IHdyYXBcbiAgICAgICAgLy8gY2FuIG5ldmVyIGJlIGNoaWxkcmVuIG9mIHRoZSBjdXJyZW50IHdyYXAuXG5cbiAgICAgICAgY29tcHV0ZVRpbGVNYXNrcyh0aWxlLnRpbGVJRC53cmFwcGVkKCksIHRpbGUudGlsZUlELCBjaGlsZEFycmF5LCBuZXcgT3ZlcnNjYWxlZFRpbGVJRCgwLCB0aWxlLnRpbGVJRC53cmFwICsgMSwgMCwgMCwgMCksIG1hc2spO1xuICAgICAgICB0aWxlLnNldE1hc2sobWFzaywgY29udGV4dCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlVGlsZU1hc2tzKHJvb3RUaWxlOiBPdmVyc2NhbGVkVGlsZUlELCByZWY6IE92ZXJzY2FsZWRUaWxlSUQsIGNoaWxkQXJyYXk6IEFycmF5PFRpbGU+LCBsb3dlckJvdW5kOiBPdmVyc2NhbGVkVGlsZUlELCBtYXNrOiBNYXNrKSB7XG4gICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBvciBhbnkgb2YgaXRzIGNoaWxkcmVuIGlzIGZvdW5kIGluIHRoZSBsaXN0LCB3ZSBuZWVkIHRvIHJlY3Vyc2UuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkVGlsZSA9IGNoaWxkQXJyYXlbaV07XG4gICAgICAgIC8vIGNoaWxkVGlsZSBpcyBmcm9tIGEgbGFyZ2VyIHdyYXAgdGhhbiB0aGUgcm9vdFRpbGUgc28gaXQgY2Fubm90IGJlIGEgY2hpbGQgdGlsZVxuICAgICAgICBpZiAobG93ZXJCb3VuZC5pc0xlc3NUaGFuKGNoaWxkVGlsZS50aWxlSUQpKSBicmVhaztcbiAgICAgICAgLy8gVGhlIGN1cnJlbnQgdGlsZSBpcyBtYXNrZWQgb3V0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoZSBtYXNrIHNldC5cbiAgICAgICAgaWYgKHJlZi5rZXkgPT09IGNoaWxkVGlsZS50aWxlSUQua2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoY2hpbGRUaWxlLnRpbGVJRC5pc0NoaWxkT2YocmVmKSkge1xuICAgICAgICAgICAgLy8gVGhlcmUncyBhdCBsZWFzdCBvbmUgY2hpbGQgdGlsZSB0aGF0IGlzIG1hc2tlZCBvdXQsIHNvIHJlY3Vyc2l2ZWx5IGRlc2NlbmRcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVmLmNoaWxkcmVuKEluZmluaXR5KTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2pdO1xuICAgICAgICAgICAgICAgIGNvbXB1dGVUaWxlTWFza3Mocm9vdFRpbGUsIGNoaWxkLCBjaGlsZEFycmF5LnNsaWNlKGkpLCBsb3dlckJvdW5kLCBtYXNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBXZSBjb3VsZG4ndCBmaW5kIGEgY2hpbGQsIHNvIGl0J3MgZGVmaW5pdGVseSBhIG1hc2tlZCBwYXJ0LlxuICAgIC8vIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcm9vdCB0aWxlIElEIGFuZCB0aGUgcmVmZXJlbmNlIHRpbGUgSUQsIHNpbmNlIFRpbGVNYXNrXG4gICAgLy8gZWxlbWVudHMgYXJlIGFsd2F5cyByZWxhdGl2ZSAoc2VlIGJlbG93IGZvciBleHBsYW5hdGlvbikuXG4gICAgY29uc3QgZGlmZlogPSByZWYub3ZlcnNjYWxlZFogLSByb290VGlsZS5vdmVyc2NhbGVkWjtcbiAgICBjb25zdCBtYXNrVGlsZUlkID0gbmV3IENhbm9uaWNhbFRpbGVJRChkaWZmWiwgcmVmLmNhbm9uaWNhbC54IC0gKHJvb3RUaWxlLmNhbm9uaWNhbC54IDw8IGRpZmZaKSwgcmVmLmNhbm9uaWNhbC55IC0gKHJvb3RUaWxlLmNhbm9uaWNhbC55IDw8IGRpZmZaKSk7XG4gICAgbWFza1ttYXNrVGlsZUlkLmtleV0gPSBtYXNrW21hc2tUaWxlSWQua2V5XSB8fCBtYXNrVGlsZUlkO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7Y29sbGlzaW9uVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2NvbGxpc2lvbl9wcm9ncmFtJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0NvbGxpc2lvbkRlYnVnO1xuXG5mdW5jdGlvbiBkcmF3Q29sbGlzaW9uRGVidWdHZW9tZXRyeShwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+LCBkcmF3Q2lyY2xlczogYm9vbGVhbixcbiAgICB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sIHRyYW5zbGF0ZUFuY2hvcjogJ21hcCcgfCAndmlld3BvcnQnLCBpc1RleHQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb25zdCBwcm9ncmFtID0gZHJhd0NpcmNsZXMgPyBwYWludGVyLnVzZVByb2dyYW0oJ2NvbGxpc2lvbkNpcmNsZScpIDogcGFpbnRlci51c2VQcm9ncmFtKCdjb2xsaXNpb25Cb3gnKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvb3JkID0gY29vcmRzW2ldO1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP1N5bWJvbEJ1Y2tldCA9ICh0aWxlLmdldEJ1Y2tldChsYXllcik6IGFueSk7XG4gICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYnVmZmVycyA9IGRyYXdDaXJjbGVzID8gKGlzVGV4dCA/IGJ1Y2tldC50ZXh0Q29sbGlzaW9uQ2lyY2xlIDogYnVja2V0Lmljb25Db2xsaXNpb25DaXJjbGUpIDogKGlzVGV4dCA/IGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94IDogYnVja2V0Lmljb25Db2xsaXNpb25Cb3gpO1xuICAgICAgICBpZiAoIWJ1ZmZlcnMpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgcG9zTWF0cml4ID0gY29vcmQucG9zTWF0cml4O1xuICAgICAgICBpZiAodHJhbnNsYXRlWzBdICE9PSAwIHx8IHRyYW5zbGF0ZVsxXSAhPT0gMCkge1xuICAgICAgICAgICAgcG9zTWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoY29vcmQucG9zTWF0cml4LCB0aWxlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGRyYXdDaXJjbGVzID8gZ2wuVFJJQU5HTEVTIDogZ2wuTElORVMsXG4gICAgICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsIFN0ZW5jaWxNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksXG4gICAgICAgICAgICBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICBjb2xsaXNpb25Vbmlmb3JtVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICBwYWludGVyLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICB0aWxlKSxcbiAgICAgICAgICAgIGxheWVyLmlkLCBidWZmZXJzLmxheW91dFZlcnRleEJ1ZmZlciwgYnVmZmVycy5pbmRleEJ1ZmZlcixcbiAgICAgICAgICAgIGJ1ZmZlcnMuc2VnbWVudHMsIG51bGwsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sIG51bGwsIG51bGwsXG4gICAgICAgICAgICBidWZmZXJzLmNvbGxpc2lvblZlcnRleEJ1ZmZlcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmF3Q29sbGlzaW9uRGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgdHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdLCB0cmFuc2xhdGVBbmNob3I6ICdtYXAnIHwgJ3ZpZXdwb3J0JywgaXNUZXh0OiBib29sZWFuKSB7XG4gICAgZHJhd0NvbGxpc2lvbkRlYnVnR2VvbWV0cnkocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGZhbHNlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvciwgaXNUZXh0KTtcbiAgICBkcmF3Q29sbGlzaW9uRGVidWdHZW9tZXRyeShwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdHJ1ZSwgdHJhbnNsYXRlLCB0cmFuc2xhdGVBbmNob3IsIGlzVGV4dCk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgZHJhd0NvbGxpc2lvbkRlYnVnIGZyb20gJy4vZHJhd19jb2xsaXNpb25fZGVidWcnO1xuXG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQgKiBhcyBzeW1ib2xQcm9qZWN0aW9uIGZyb20gJy4uL3N5bWJvbC9wcm9qZWN0aW9uJztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi4vc3ltYm9sL3N5bWJvbF9zaXplJztcbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmNvbnN0IGlkZW50aXR5TWF0NCA9IG1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2FkZER5bmFtaWNBdHRyaWJ1dGVzfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuaW1wb3J0IHtnZXRBbmNob3JBbGlnbm1lbnQsIFdyaXRpbmdNb2RlfSBmcm9tICcuLi9zeW1ib2wvc2hhcGluZyc7XG5pbXBvcnQgT05FX0VNIGZyb20gJy4uL3N5bWJvbC9vbmVfZW0nO1xuaW1wb3J0IHtldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0fSBmcm9tICcuLi9zeW1ib2wvc3ltYm9sX2xheW91dCc7XG5cbmltcG9ydCB7XG4gICAgc3ltYm9sSWNvblVuaWZvcm1WYWx1ZXMsXG4gICAgc3ltYm9sU0RGVW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vc3ltYm9sX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCwge1N5bWJvbEJ1ZmZlcnN9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXN9IGZyb20gJy4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtTeW1ib2xTREZVbmlmb3Jtc1R5cGV9IGZyb20gJy4uL3JlbmRlci9wcm9ncmFtL3N5bWJvbF9wcm9ncmFtJztcbmltcG9ydCB0eXBlIHtDcm9zc1RpbGVJRCwgVmFyaWFibGVPZmZzZXR9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3U3ltYm9scztcblxudHlwZSBTeW1ib2xUaWxlUmVuZGVyU3RhdGUgPSB7XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3IsXG4gICAgc29ydEtleTogbnVtYmVyLFxuICAgIHN0YXRlOiB7XG4gICAgICAgIHByb2dyYW06IGFueSxcbiAgICAgICAgYnVmZmVyczogU3ltYm9sQnVmZmVycyxcbiAgICAgICAgdW5pZm9ybVZhbHVlczogYW55LFxuICAgICAgICBhdGxhc1RleHR1cmU6IFRleHR1cmUsXG4gICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbjogYW55LFxuICAgICAgICBpc1NERjogYm9vbGVhbixcbiAgICAgICAgaGFzSGFsbzogYm9vbGVhblxuICAgIH1cbn07XG5cbmZ1bmN0aW9uIGRyYXdTeW1ib2xzKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4sIHZhcmlhYmxlT2Zmc2V0czoge1tDcm9zc1RpbGVJRF06IFZhcmlhYmxlT2Zmc2V0fSkge1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcblxuICAgIC8vIERpc2FibGUgdGhlIHN0ZW5jaWwgdGVzdCBzbyB0aGF0IGxhYmVscyBhcmVuJ3QgY2xpcHBlZCB0byB0aWxlIGJvdW5kYXJpZXMuXG4gICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcbiAgICBjb25zdCB2YXJpYWJsZVBsYWNlbWVudCA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICAvL0NvbXB1dGUgdmFyaWFibGUtb2Zmc2V0cyBiZWZvcmUgcGFpbnRpbmcgc2luY2UgaWNvbnMgYW5kIHRleHQgZGF0YSBwb3NpdGlvbmluZ1xuICAgIC8vZGVwZW5kIG9uIGVhY2ggb3RoZXIgaW4gdGhpcyBjYXNlLlxuICAgIGlmICh2YXJpYWJsZVBsYWNlbWVudCkge1xuICAgICAgICB1cGRhdGVWYXJpYWJsZUFuY2hvcnMoY29vcmRzLCBwYWludGVyLCBsYXllciwgc291cmNlQ2FjaGUsXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0c1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2ljb24tb3BhY2l0eScpLmNvbnN0YW50T3IoMSkgIT09IDApIHtcbiAgICAgICAgZHJhd0xheWVyU3ltYm9scyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgZmFsc2UsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlLWFuY2hvcicpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ2ljb24tcGl0Y2gtYWxpZ25tZW50JyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCdpY29uLWtlZXAtdXByaWdodCcpLFxuICAgICAgICAgICAgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChsYXllci5wYWludC5nZXQoJ3RleHQtb3BhY2l0eScpLmNvbnN0YW50T3IoMSkgIT09IDApIHtcbiAgICAgICAgZHJhd0xheWVyU3ltYm9scyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdHJ1ZSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgndGV4dC10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgndGV4dC10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ3RleHQta2VlcC11cHJpZ2h0JyksXG4gICAgICAgICAgICBzdGVuY2lsTW9kZSwgY29sb3JNb2RlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZUNhY2hlLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMpIHtcbiAgICAgICAgZHJhd0NvbGxpc2lvbkRlYnVnKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBsYXllci5wYWludC5nZXQoJ3RleHQtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ3RleHQtdHJhbnNsYXRlLWFuY2hvcicpLCB0cnVlKTtcbiAgICAgICAgZHJhd0NvbGxpc2lvbkRlYnVnKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlLWFuY2hvcicpLCBmYWxzZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVWYXJpYWJsZVJlbmRlclNoaWZ0KGFuY2hvciwgd2lkdGgsIGhlaWdodCwgdGV4dE9mZnNldCwgdGV4dEJveFNjYWxlLCByZW5kZXJUZXh0U2l6ZSk6IFBvaW50IHtcbiAgICBjb25zdCB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufSA9IGdldEFuY2hvckFsaWdubWVudChhbmNob3IpO1xuICAgIGNvbnN0IHNoaWZ0WCA9IC0oaG9yaXpvbnRhbEFsaWduIC0gMC41KSAqIHdpZHRoO1xuICAgIGNvbnN0IHNoaWZ0WSA9IC0odmVydGljYWxBbGlnbiAtIDAuNSkgKiBoZWlnaHQ7XG4gICAgY29uc3QgdmFyaWFibGVPZmZzZXQgPSBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGFuY2hvciwgdGV4dE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgKHNoaWZ0WCAvIHRleHRCb3hTY2FsZSArIHZhcmlhYmxlT2Zmc2V0WzBdKSAqIHJlbmRlclRleHRTaXplLFxuICAgICAgICAoc2hpZnRZIC8gdGV4dEJveFNjYWxlICsgdmFyaWFibGVPZmZzZXRbMV0pICogcmVuZGVyVGV4dFNpemVcbiAgICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVWYXJpYWJsZUFuY2hvcnMoY29vcmRzLCBwYWludGVyLCBsYXllciwgc291cmNlQ2FjaGUsIHJvdGF0aW9uQWxpZ25tZW50LCBwaXRjaEFsaWdubWVudCwgdmFyaWFibGVPZmZzZXRzKSB7XG4gICAgY29uc3QgdHIgPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gcm90YXRpb25BbGlnbm1lbnQgPT09ICdtYXAnO1xuICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IHBpdGNoQWxpZ25tZW50ID09PSAnbWFwJztcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiBTeW1ib2xCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCB8fCAhYnVja2V0LnRleHQgfHwgIWJ1Y2tldC50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3Qgc2l6ZURhdGEgPSBidWNrZXQudGV4dFNpemVEYXRhO1xuICAgICAgICBjb25zdCBzaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3Jab29tKHNpemVEYXRhLCB0ci56b29tKTtcblxuICAgICAgICBjb25zdCBwaXhlbFRvVGlsZVNjYWxlID0gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUGxhbmVNYXRyaXggPSBzeW1ib2xQcm9qZWN0aW9uLmdldExhYmVsUGxhbmVNYXRyaXgoY29vcmQucG9zTWF0cml4LCBwaXRjaFdpdGhNYXAsIHJvdGF0ZVdpdGhNYXAsIHBhaW50ZXIudHJhbnNmb3JtLCBwaXhlbFRvVGlsZVNjYWxlKTtcbiAgICAgICAgY29uc3QgdXBkYXRlVGV4dEZpdEljb24gPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJyAmJiAgYnVja2V0Lmhhc0ljb25EYXRhKCk7XG5cbiAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVTY2FsZSA9IE1hdGgucG93KDIsIHRyLnpvb20gLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgICAgICAgICB1cGRhdGVWYXJpYWJsZUFuY2hvcnNGb3JCdWNrZXQoYnVja2V0LCByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHZhcmlhYmxlT2Zmc2V0cywgc3ltYm9sU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ciwgbGFiZWxQbGFuZU1hdHJpeCwgY29vcmQucG9zTWF0cml4LCB0aWxlU2NhbGUsIHNpemUsIHVwZGF0ZVRleHRGaXRJY29uKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlVmFyaWFibGVBbmNob3JzRm9yQnVja2V0KGJ1Y2tldCwgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB2YXJpYWJsZU9mZnNldHMsIHN5bWJvbFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLCBsYWJlbFBsYW5lTWF0cml4LCBwb3NNYXRyaXgsIHRpbGVTY2FsZSwgc2l6ZSwgdXBkYXRlVGV4dEZpdEljb24pIHtcbiAgICBjb25zdCBwbGFjZWRTeW1ib2xzID0gYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXk7XG4gICAgY29uc3QgZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSA9IGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtcbiAgICBjb25zdCBkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5ID0gYnVja2V0Lmljb24uZHluYW1pY0xheW91dFZlcnRleEFycmF5O1xuICAgIGNvbnN0IHBsYWNlZFRleHRTaGlmdHMgPSB7fTtcblxuICAgIGR5bmFtaWNUZXh0TGF5b3V0VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IHBsYWNlZFN5bWJvbHMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgY29uc3Qgc3ltYm9sOiBhbnkgPSBwbGFjZWRTeW1ib2xzLmdldChzKTtcbiAgICAgICAgY29uc3Qgc2tpcE9yaWVudGF0aW9uID0gYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIXN5bWJvbC5wbGFjZWRPcmllbnRhdGlvbjtcbiAgICAgICAgY29uc3QgdmFyaWFibGVPZmZzZXQgPSAoIXN5bWJvbC5oaWRkZW4gJiYgc3ltYm9sLmNyb3NzVGlsZUlEICYmICFza2lwT3JpZW50YXRpb24pID8gdmFyaWFibGVPZmZzZXRzW3N5bWJvbC5jcm9zc1RpbGVJRF0gOiBudWxsO1xuXG4gICAgICAgIGlmICghdmFyaWFibGVPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIFRoZXNlIHN5bWJvbHMgYXJlIGZyb20gYSBqdXN0aWZpY2F0aW9uIHRoYXQgaXMgbm90IGJlaW5nIHVzZWQsIG9yIGEgbGFiZWwgdGhhdCB3YXNuJ3QgcGxhY2VkXG4gICAgICAgICAgICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoZSBleHRyYSBtYXRoIHRvIGZpZ3VyZSBvdXQgd2hhdCBpbmNyZW1lbnRhbCBzaGlmdCB0byBhcHBseS5cbiAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyhzeW1ib2wubnVtR2x5cGhzLCBkeW5hbWljVGV4dExheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgfSBlbHNlICB7XG4gICAgICAgICAgICBjb25zdCB0aWxlQW5jaG9yID0gbmV3IFBvaW50KHN5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSk7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRBbmNob3IgPSBzeW1ib2xQcm9qZWN0aW9uLnByb2plY3QodGlsZUFuY2hvciwgcGl0Y2hXaXRoTWFwID8gcG9zTWF0cml4IDogbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCBwZXJzcGVjdGl2ZVJhdGlvID0gMC41ICsgMC41ICogKHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIC8gcHJvamVjdGVkQW5jaG9yLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSk7XG4gICAgICAgICAgICBsZXQgcmVuZGVyVGV4dFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoYnVja2V0LnRleHRTaXplRGF0YSwgc2l6ZSwgc3ltYm9sKSAqIHBlcnNwZWN0aXZlUmF0aW8gLyBPTkVfRU07XG4gICAgICAgICAgICBpZiAocGl0Y2hXaXRoTWFwKSB7XG4gICAgICAgICAgICAgICAgLy8gR28gZnJvbSBzaXplIGluIHBpeGVscyB0byBlcXVpdmFsZW50IHNpemUgaW4gdGlsZSB1bml0c1xuICAgICAgICAgICAgICAgIHJlbmRlclRleHRTaXplICo9IGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyAvIHRpbGVTY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHQsIGFuY2hvciwgdGV4dE9mZnNldCwgdGV4dEJveFNjYWxlfSA9IHZhcmlhYmxlT2Zmc2V0O1xuXG4gICAgICAgICAgICBjb25zdCBzaGlmdCA9IGNhbGN1bGF0ZVZhcmlhYmxlUmVuZGVyU2hpZnQoXG4gICAgICAgICAgICAgICAgYW5jaG9yLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0T2Zmc2V0LCB0ZXh0Qm94U2NhbGUsIHJlbmRlclRleHRTaXplKTtcblxuICAgICAgICAgICAgLy8gVXN1YWwgY2FzZSBpcyB0aGF0IHdlIHRha2UgdGhlIHByb2plY3RlZCBhbmNob3IgYW5kIGFkZCB0aGUgcGl4ZWwtYmFzZWQgc2hpZnRcbiAgICAgICAgICAgIC8vIGNhbGN1bGF0ZWQgYWJvdmUuIEluIHRoZSAoc29tZXdoYXQgd2VpcmQpIGNhc2Ugb2YgcGl0Y2gtYWxpZ25lZCB0ZXh0LCB3ZSBhZGQgYW4gZXF1aXZhbGVudFxuICAgICAgICAgICAgLy8gdGlsZS11bml0IGJhc2VkIHNoaWZ0IHRvIHRoZSBhbmNob3IgYmVmb3JlIHByb2plY3RpbmcgdG8gdGhlIGxhYmVsIHBsYW5lLlxuICAgICAgICAgICAgY29uc3Qgc2hpZnRlZEFuY2hvciA9IHBpdGNoV2l0aE1hcCA/XG4gICAgICAgICAgICAgICAgc3ltYm9sUHJvamVjdGlvbi5wcm9qZWN0KHRpbGVBbmNob3IuYWRkKHNoaWZ0KSwgbGFiZWxQbGFuZU1hdHJpeCkucG9pbnQgOlxuICAgICAgICAgICAgICAgIHByb2plY3RlZEFuY2hvci5wb2ludC5hZGQocm90YXRlV2l0aE1hcCA/XG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0LnJvdGF0ZSgtdHJhbnNmb3JtLmFuZ2xlKSA6XG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0KTtcblxuICAgICAgICAgICAgY29uc3QgYW5nbGUgPSAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgc3ltYm9sLnBsYWNlZE9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCkgPyBNYXRoLlBJIC8gMiA6IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBnID0gMDsgZyA8IHN5bWJvbC5udW1HbHlwaHM7IGcrKykge1xuICAgICAgICAgICAgICAgIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGR5bmFtaWNUZXh0TGF5b3V0VmVydGV4QXJyYXksIHNoaWZ0ZWRBbmNob3IsIGFuZ2xlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vT25seSBvZmZzZXQgaG9yaXpvbnRhbCB0ZXh0IGljb25zXG4gICAgICAgICAgICBpZiAodXBkYXRlVGV4dEZpdEljb24gJiYgc3ltYm9sLmFzc29jaWF0ZWRJY29uSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHBsYWNlZFRleHRTaGlmdHNbc3ltYm9sLmFzc29jaWF0ZWRJY29uSW5kZXhdID0ge3NoaWZ0ZWRBbmNob3IsIGFuZ2xlfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1cGRhdGVUZXh0Rml0SWNvbikge1xuICAgICAgICBkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5LmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IHBsYWNlZEljb25zID0gYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGxhY2VkSWNvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBsYWNlZEljb24gPSBwbGFjZWRJY29ucy5nZXQoaSk7XG4gICAgICAgICAgICBpZiAocGxhY2VkSWNvbi5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xQcm9qZWN0aW9uLmhpZGVHbHlwaHMocGxhY2VkSWNvbi5udW1HbHlwaHMsIGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGlmdCA9IHBsYWNlZFRleHRTaGlmdHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKCFzaGlmdCkge1xuICAgICAgICAgICAgICAgICAgICBzeW1ib2xQcm9qZWN0aW9uLmhpZGVHbHlwaHMocGxhY2VkSWNvbi5udW1HbHlwaHMsIGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGcgPSAwOyBnIDwgcGxhY2VkSWNvbi5udW1HbHlwaHM7IGcrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRHluYW1pY0F0dHJpYnV0ZXMoZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSwgc2hpZnQuc2hpZnRlZEFuY2hvciwgc2hpZnQuYW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJ1Y2tldC5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5KTtcbiAgICB9XG4gICAgYnVja2V0LnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGR5bmFtaWNUZXh0TGF5b3V0VmVydGV4QXJyYXkpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVWZXJ0aWNhbExhYmVscyhidWNrZXQpIHtcbiAgICBjb25zdCBwbGFjZWRTeW1ib2xzID0gYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXk7XG4gICAgY29uc3QgZHluYW1pY0xheW91dFZlcnRleEFycmF5ID0gYnVja2V0LnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5O1xuICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgcGxhY2VkU3ltYm9scy5sZW5ndGg7IHMrKykge1xuICAgICAgICBjb25zdCBzeW1ib2w6IGFueSA9IHBsYWNlZFN5bWJvbHMuZ2V0KHMpO1xuICAgICAgICBjb25zdCBzaG91bGRIaWRlID0gc3ltYm9sLmhpZGRlbiB8fCAhc3ltYm9sLnBsYWNlZE9yaWVudGF0aW9uO1xuICAgICAgICBpZiAoc2hvdWxkSGlkZSkge1xuICAgICAgICAgICAgLy8gVGhlc2Ugc3ltYm9scyBhcmUgZnJvbSBhbiBvcmllbnRhdGlvbiB0aGF0IGlzIG5vdCBiZWluZyB1c2VkLCBvciBhIGxhYmVsIHRoYXQgd2Fzbid0IHBsYWNlZFxuICAgICAgICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGUgZXh0cmEgbWF0aCB0byBmaWd1cmUgb3V0IHdoYXQgaW5jcmVtZW50YWwgc2hpZnQgdG8gYXBwbHkuXG4gICAgICAgICAgICBzeW1ib2xQcm9qZWN0aW9uLmhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgfSBlbHNlICB7XG4gICAgICAgICAgICBjb25zdCB0aWxlQW5jaG9yID0gbmV3IFBvaW50KHN5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSk7XG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2wucGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSA/IE1hdGguUEkgLyAyIDogMDtcblxuICAgICAgICAgICAgZm9yIChsZXQgZyA9IDA7IGcgPCBzeW1ib2wubnVtR2x5cGhzOyBnKyspIHtcbiAgICAgICAgICAgICAgICBhZGREeW5hbWljQXR0cmlidXRlcyhkeW5hbWljTGF5b3V0VmVydGV4QXJyYXksIHRpbGVBbmNob3IsIGFuZ2xlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBidWNrZXQudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbn1cblxuZnVuY3Rpb24gZHJhd0xheWVyU3ltYm9scyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgaXNUZXh0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25BbGlnbm1lbnQsIHBpdGNoQWxpZ25tZW50LCBrZWVwVXByaWdodCwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSkge1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgdHIgPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgIGNvbnN0IHJvdGF0ZVdpdGhNYXAgPSByb3RhdGlvbkFsaWdubWVudCA9PT0gJ21hcCc7XG4gICAgY29uc3QgcGl0Y2hXaXRoTWFwID0gcGl0Y2hBbGlnbm1lbnQgPT09ICdtYXAnO1xuICAgIGNvbnN0IGFsb25nTGluZSA9IHJvdGF0ZVdpdGhNYXAgJiYgbGF5ZXIubGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnO1xuICAgIC8vIExpbmUgbGFiZWwgcm90YXRpb24gaGFwcGVucyBpbiBgdXBkYXRlTGluZUxhYmVsc2BcbiAgICAvLyBQaXRjaGVkIHBvaW50IGxhYmVscyBhcmUgYXV0b21hdGljYWxseSByb3RhdGVkIGJ5IHRoZSBsYWJlbFBsYW5lTWF0cml4IHByb2plY3Rpb25cbiAgICAvLyBVbnBpdGNoZWQgcG9pbnQgbGFiZWxzIG5lZWQgdG8gaGF2ZSB0aGVpciByb3RhdGlvbiBhcHBsaWVkIGFmdGVyIHByb2plY3Rpb25cbiAgICBjb25zdCByb3RhdGVJblNoYWRlciA9IHJvdGF0ZVdpdGhNYXAgJiYgIXBpdGNoV2l0aE1hcCAmJiAhYWxvbmdMaW5lO1xuXG4gICAgY29uc3Qgc29ydEZlYXR1cmVzQnlLZXkgPSBsYXllci5sYXlvdXQuZ2V0KCdzeW1ib2wtc29ydC1rZXknKS5jb25zdGFudE9yKDEpICE9PSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG5cbiAgICBsZXQgcHJvZ3JhbTtcbiAgICBsZXQgc2l6ZTtcbiAgICBjb25zdCB2YXJpYWJsZVBsYWNlbWVudCA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICBjb25zdCB0aWxlUmVuZGVyU3RhdGU6IEFycmF5PFN5bWJvbFRpbGVSZW5kZXJTdGF0ZT4gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiBTeW1ib2xCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBpc1RleHQgPyBidWNrZXQudGV4dCA6IGJ1Y2tldC5pY29uO1xuICAgICAgICBpZiAoIWJ1ZmZlcnMgfHwgIWJ1ZmZlcnMuc2VnbWVudHMuZ2V0KCkubGVuZ3RoKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWZmZXJzLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpO1xuXG4gICAgICAgIGNvbnN0IGlzU0RGID0gaXNUZXh0IHx8IGJ1Y2tldC5zZGZJY29ucztcblxuICAgICAgICBjb25zdCBzaXplRGF0YSA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0U2l6ZURhdGEgOiBidWNrZXQuaWNvblNpemVEYXRhO1xuXG4gICAgICAgIGlmICghcHJvZ3JhbSkge1xuICAgICAgICAgICAgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbShpc1NERiA/ICdzeW1ib2xTREYnIDogJ3N5bWJvbEljb24nLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICBzaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3Jab29tKHNpemVEYXRhLCB0ci56b29tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGxldCB0ZXhTaXplOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgICBsZXQgYXRsYXNUZXh0dXJlO1xuICAgICAgICBsZXQgYXRsYXNJbnRlcnBvbGF0aW9uO1xuICAgICAgICBpZiAoaXNUZXh0KSB7XG4gICAgICAgICAgICBhdGxhc1RleHR1cmUgPSB0aWxlLmdseXBoQXRsYXNUZXh0dXJlO1xuICAgICAgICAgICAgYXRsYXNJbnRlcnBvbGF0aW9uID0gZ2wuTElORUFSO1xuICAgICAgICAgICAgdGV4U2l6ZSA9IHRpbGUuZ2x5cGhBdGxhc1RleHR1cmUuc2l6ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWNvblNjYWxlZCA9IGxheWVyLmxheW91dC5nZXQoJ2ljb24tc2l6ZScpLmNvbnN0YW50T3IoMCkgIT09IDEgfHwgYnVja2V0Lmljb25zTmVlZExpbmVhcjtcbiAgICAgICAgICAgIGNvbnN0IGljb25UcmFuc2Zvcm1lZCA9IHBpdGNoV2l0aE1hcCB8fCB0ci5waXRjaCAhPT0gMDtcblxuICAgICAgICAgICAgYXRsYXNUZXh0dXJlID0gdGlsZS5pbWFnZUF0bGFzVGV4dHVyZTtcbiAgICAgICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbiA9IGlzU0RGIHx8IHBhaW50ZXIub3B0aW9ucy5yb3RhdGluZyB8fCBwYWludGVyLm9wdGlvbnMuem9vbWluZyB8fCBpY29uU2NhbGVkIHx8IGljb25UcmFuc2Zvcm1lZCA/XG4gICAgICAgICAgICAgICAgZ2wuTElORUFSIDpcbiAgICAgICAgICAgICAgICBnbC5ORUFSRVNUO1xuICAgICAgICAgICAgdGV4U2l6ZSA9IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHMgPSBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCBwYWludGVyLnRyYW5zZm9ybS56b29tKTtcbiAgICAgICAgY29uc3QgbGFiZWxQbGFuZU1hdHJpeCA9IHN5bWJvbFByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeChjb29yZC5wb3NNYXRyaXgsIHBpdGNoV2l0aE1hcCwgcm90YXRlV2l0aE1hcCwgcGFpbnRlci50cmFuc2Zvcm0sIHMpO1xuICAgICAgICBjb25zdCBnbENvb3JkTWF0cml4ID0gc3ltYm9sUHJvamVjdGlvbi5nZXRHbENvb3JkTWF0cml4KGNvb3JkLnBvc01hdHJpeCwgcGl0Y2hXaXRoTWFwLCByb3RhdGVXaXRoTWFwLCBwYWludGVyLnRyYW5zZm9ybSwgcyk7XG5cbiAgICAgICAgY29uc3QgaGFzVmFyaWFibGVBbmNob3JzID0gdmFyaWFibGVQbGFjZW1lbnQgJiYgYnVja2V0Lmhhc1RleHREYXRhKCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVRleHRGaXRJY29uID0gbGF5ZXIubGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpICE9PSAnbm9uZScgJiZcbiAgICAgICAgICAgIGhhc1ZhcmlhYmxlQW5jaG9ycyAmJlxuICAgICAgICAgICAgYnVja2V0Lmhhc0ljb25EYXRhKCk7XG5cbiAgICAgICAgaWYgKGFsb25nTGluZSkge1xuICAgICAgICAgICAgc3ltYm9sUHJvamVjdGlvbi51cGRhdGVMaW5lTGFiZWxzKGJ1Y2tldCwgY29vcmQucG9zTWF0cml4LCBwYWludGVyLCBpc1RleHQsIGxhYmVsUGxhbmVNYXRyaXgsIGdsQ29vcmRNYXRyaXgsIHBpdGNoV2l0aE1hcCwga2VlcFVwcmlnaHQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzVGV4dCAmJiBzaXplICYmIGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICF2YXJpYWJsZVBsYWNlbWVudCkge1xuICAgICAgICAgICAgdXBkYXRlVmVydGljYWxMYWJlbHMoYnVja2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IHBhaW50ZXIudHJhbnNsYXRlUG9zTWF0cml4KGNvb3JkLnBvc01hdHJpeCwgdGlsZSwgdHJhbnNsYXRlLCB0cmFuc2xhdGVBbmNob3IpLFxuICAgICAgICAgICAgdUxhYmVsUGxhbmVNYXRyaXggPSAoYWxvbmdMaW5lIHx8IChpc1RleHQgJiYgdmFyaWFibGVQbGFjZW1lbnQpIHx8IHVwZGF0ZVRleHRGaXRJY29uKSA/IGlkZW50aXR5TWF0NCA6IGxhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICB1Z2xDb29yZE1hdHJpeCA9IHBhaW50ZXIudHJhbnNsYXRlUG9zTWF0cml4KGdsQ29vcmRNYXRyaXgsIHRpbGUsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlQW5jaG9yLCB0cnVlKTtcblxuICAgICAgICBjb25zdCBoYXNIYWxvID0gaXNTREYgJiYgbGF5ZXIucGFpbnQuZ2V0KGlzVGV4dCA/ICd0ZXh0LWhhbG8td2lkdGgnIDogJ2ljb24taGFsby13aWR0aCcpLmNvbnN0YW50T3IoMSkgIT09IDA7XG5cbiAgICAgICAgbGV0IHVuaWZvcm1WYWx1ZXM7XG4gICAgICAgIGlmIChpc1NERikge1xuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IHN5bWJvbFNERlVuaWZvcm1WYWx1ZXMoc2l6ZURhdGEua2luZCxcbiAgICAgICAgICAgICAgICBzaXplLCByb3RhdGVJblNoYWRlciwgcGl0Y2hXaXRoTWFwLCBwYWludGVyLCBtYXRyaXgsXG4gICAgICAgICAgICAgICAgdUxhYmVsUGxhbmVNYXRyaXgsIHVnbENvb3JkTWF0cml4LCBpc1RleHQsIHRleFNpemUsIHRydWUpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzID0gc3ltYm9sSWNvblVuaWZvcm1WYWx1ZXMoc2l6ZURhdGEua2luZCxcbiAgICAgICAgICAgICAgICBzaXplLCByb3RhdGVJblNoYWRlciwgcGl0Y2hXaXRoTWFwLCBwYWludGVyLCBtYXRyaXgsXG4gICAgICAgICAgICAgICAgdUxhYmVsUGxhbmVNYXRyaXgsIHVnbENvb3JkTWF0cml4LCBpc1RleHQsIHRleFNpemUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICBwcm9ncmFtLFxuICAgICAgICAgICAgYnVmZmVycyxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsXG4gICAgICAgICAgICBhdGxhc1RleHR1cmUsXG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb24sXG4gICAgICAgICAgICBpc1NERixcbiAgICAgICAgICAgIGhhc0hhbG9cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNlZ21lbnRzID0gYnVmZmVycy5zZWdtZW50cy5nZXQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvbGRTZWdtZW50cykge1xuICAgICAgICAgICAgICAgIHRpbGVSZW5kZXJTdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHM6IG5ldyBTZWdtZW50VmVjdG9yKFtzZWdtZW50XSksXG4gICAgICAgICAgICAgICAgICAgIHNvcnRLZXk6ICgoc2VnbWVudC5zb3J0S2V5OiBhbnkpOiBudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZVJlbmRlclN0YXRlLnB1c2goe1xuICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBidWZmZXJzLnNlZ21lbnRzLFxuICAgICAgICAgICAgICAgIHNvcnRLZXk6IDAsXG4gICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgIHRpbGVSZW5kZXJTdGF0ZS5zb3J0KChhLCBiKSA9PiBhLnNvcnRLZXkgLSBiLnNvcnRLZXkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VnbWVudFN0YXRlIG9mIHRpbGVSZW5kZXJTdGF0ZSkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHNlZ21lbnRTdGF0ZS5zdGF0ZTtcblxuICAgICAgICBzdGF0ZS5hdGxhc1RleHR1cmUuYmluZChzdGF0ZS5hdGxhc0ludGVycG9sYXRpb24sIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gICAgICAgIGlmIChzdGF0ZS5pc1NERikge1xuICAgICAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9ICgoc3RhdGUudW5pZm9ybVZhbHVlczogYW55KTogVW5pZm9ybVZhbHVlczxTeW1ib2xTREZVbmlmb3Jtc1R5cGU+KTtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5oYXNIYWxvKSB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlc1sndV9pc19oYWxvJ10gPSAxO1xuICAgICAgICAgICAgICAgIGRyYXdTeW1ib2xFbGVtZW50cyhzdGF0ZS5idWZmZXJzLCBzZWdtZW50U3RhdGUuc2VnbWVudHMsIGxheWVyLCBwYWludGVyLCBzdGF0ZS5wcm9ncmFtLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIHVuaWZvcm1WYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlc1sndV9pc19oYWxvJ10gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGRyYXdTeW1ib2xFbGVtZW50cyhzdGF0ZS5idWZmZXJzLCBzZWdtZW50U3RhdGUuc2VnbWVudHMsIGxheWVyLCBwYWludGVyLCBzdGF0ZS5wcm9ncmFtLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIHN0YXRlLnVuaWZvcm1WYWx1ZXMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhd1N5bWJvbEVsZW1lbnRzKGJ1ZmZlcnMsIHNlZ21lbnRzLCBsYXllciwgcGFpbnRlciwgcHJvZ3JhbSwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCB1bmlmb3JtVmFsdWVzKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBidWZmZXJzLmxheW91dFZlcnRleEJ1ZmZlcixcbiAgICAgICAgYnVmZmVycy5pbmRleEJ1ZmZlciwgc2VnbWVudHMsIGxheWVyLnBhaW50LFxuICAgICAgICBwYWludGVyLnRyYW5zZm9ybS56b29tLCBidWZmZXJzLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpLFxuICAgICAgICBidWZmZXJzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsIGJ1ZmZlcnMub3BhY2l0eVZlcnRleEJ1ZmZlcik7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCBQcm9ncmFtIGZyb20gJy4vcHJvZ3JhbSc7XG5pbXBvcnQge2NpcmNsZVVuaWZvcm1WYWx1ZXN9IGZyb20gJy4vcHJvZ3JhbS9jaXJjbGVfcHJvZ3JhbSc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgQ2lyY2xlU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ2lyY2xlQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2NpcmNsZV9idWNrZXQnO1xuaW1wb3J0IHR5cGUgUHJvZ3JhbUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vZGF0YS9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSB7Q2lyY2xlVW5pZm9ybXNUeXBlfSBmcm9tICcuL3Byb2dyYW0vY2lyY2xlX3Byb2dyYW0nO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3Q2lyY2xlcztcblxudHlwZSBUaWxlUmVuZGVyU3RhdGUgPSB7XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb246IFByb2dyYW1Db25maWd1cmF0aW9uLFxuICAgIHByb2dyYW06IFByb2dyYW08Kj4sXG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyLFxuICAgIHVuaWZvcm1WYWx1ZXM6IFVuaWZvcm1WYWx1ZXM8Q2lyY2xlVW5pZm9ybXNUeXBlPlxufTtcblxudHlwZSBTZWdtZW50c1RpbGVSZW5kZXJTdGF0ZSA9IHtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcixcbiAgICBzb3J0S2V5OiBudW1iZXIsXG4gICAgc3RhdGU6IFRpbGVSZW5kZXJTdGF0ZVxufTtcblxuZnVuY3Rpb24gZHJhd0NpcmNsZXMocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogQ2lyY2xlU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcblxuICAgIGNvbnN0IG9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2NpcmNsZS1vcGFjaXR5Jyk7XG4gICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBsYXllci5wYWludC5nZXQoJ2NpcmNsZS1zdHJva2Utd2lkdGgnKTtcbiAgICBjb25zdCBzdHJva2VPcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtc3Ryb2tlLW9wYWNpdHknKTtcbiAgICBjb25zdCBzb3J0RmVhdHVyZXNCeUtleSA9IGxheWVyLmxheW91dC5nZXQoJ2NpcmNsZS1zb3J0LWtleScpLmNvbnN0YW50T3IoMSkgIT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChvcGFjaXR5LmNvbnN0YW50T3IoMSkgPT09IDAgJiYgKHN0cm9rZVdpZHRoLmNvbnN0YW50T3IoMSkgPT09IDAgfHwgc3Ryb2tlT3BhY2l0eS5jb25zdGFudE9yKDEpID09PSAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgLy8gVHVybiBvZmYgc3RlbmNpbCB0ZXN0aW5nIHRvIGFsbG93IGNpcmNsZXMgdG8gYmUgZHJhd24gYWNyb3NzIGJvdW5kYXJpZXMsXG4gICAgLy8gc28gdGhhdCBsYXJnZSBjaXJjbGVzIGFyZSBub3QgY2xpcHBlZCB0byB0aWxlc1xuICAgIGNvbnN0IHN0ZW5jaWxNb2RlID0gU3RlbmNpbE1vZGUuZGlzYWJsZWQ7XG4gICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG5cbiAgICBjb25zdCBzZWdtZW50c1JlbmRlclN0YXRlczogQXJyYXk8U2VnbWVudHNUaWxlUmVuZGVyU3RhdGU+ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb29yZCA9IGNvb3Jkc1tpXTtcblxuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0NpcmNsZUJ1Y2tldDwqPiA9ICh0aWxlLmdldEJ1Y2tldChsYXllcik6IGFueSk7XG4gICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBwcm9ncmFtQ29uZmlndXJhdGlvbiA9IGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgnY2lyY2xlJywgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBsYXlvdXRWZXJ0ZXhCdWZmZXIgPSBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyO1xuICAgICAgICBjb25zdCBpbmRleEJ1ZmZlciA9IGJ1Y2tldC5pbmRleEJ1ZmZlcjtcbiAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGNpcmNsZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgY29vcmQsIHRpbGUsIGxheWVyKTtcblxuICAgICAgICBjb25zdCBzdGF0ZTogVGlsZVJlbmRlclN0YXRlID0ge1xuICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBwcm9ncmFtLFxuICAgICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLFxuICAgICAgICAgICAgaW5kZXhCdWZmZXIsXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChzb3J0RmVhdHVyZXNCeUtleSkge1xuICAgICAgICAgICAgY29uc3Qgb2xkU2VnbWVudHMgPSBidWNrZXQuc2VnbWVudHMuZ2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygb2xkU2VnbWVudHMpIHtcbiAgICAgICAgICAgICAgICBzZWdtZW50c1JlbmRlclN0YXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHM6IG5ldyBTZWdtZW50VmVjdG9yKFtzZWdtZW50XSksXG4gICAgICAgICAgICAgICAgICAgIHNvcnRLZXk6ICgoc2VnbWVudC5zb3J0S2V5OiBhbnkpOiBudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VnbWVudHNSZW5kZXJTdGF0ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc2VnbWVudHM6IGJ1Y2tldC5zZWdtZW50cyxcbiAgICAgICAgICAgICAgICBzb3J0S2V5OiAwLFxuICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgIHNlZ21lbnRzUmVuZGVyU3RhdGVzLnNvcnQoKGEsIGIpID0+IGEuc29ydEtleSAtIGIuc29ydEtleSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzZWdtZW50c1N0YXRlIG9mIHNlZ21lbnRzUmVuZGVyU3RhdGVzKSB7XG4gICAgICAgIGNvbnN0IHtwcm9ncmFtQ29uZmlndXJhdGlvbiwgcHJvZ3JhbSwgbGF5b3V0VmVydGV4QnVmZmVyLCBpbmRleEJ1ZmZlciwgdW5pZm9ybVZhbHVlc30gPSBzZWdtZW50c1N0YXRlLnN0YXRlO1xuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHNlZ21lbnRzU3RhdGUuc2VnbWVudHM7XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCxcbiAgICAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlciwgaW5kZXhCdWZmZXIsIHNlZ21lbnRzLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sIHByb2dyYW1Db25maWd1cmF0aW9uKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGhlYXRtYXBVbmlmb3JtVmFsdWVzLFxuICAgIGhlYXRtYXBUZXh0dXJlVW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vaGVhdG1hcF9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBIZWF0bWFwU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIEhlYXRtYXBCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvaGVhdG1hcF9idWNrZXQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0hlYXRtYXA7XG5cbmZ1bmN0aW9uIGRyYXdIZWF0bWFwKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEhlYXRtYXBTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgaWYgKGxheWVyLnBhaW50LmdldCgnaGVhdG1hcC1vcGFjaXR5JykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICdvZmZzY3JlZW4nKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgICAgIC8vIEFsbG93IGtlcm5lbHMgdG8gYmUgZHJhd24gYWNyb3NzIGJvdW5kYXJpZXMsIHNvIHRoYXRcbiAgICAgICAgLy8gbGFyZ2Uga2VybmVscyBhcmUgbm90IGNsaXBwZWQgdG8gdGlsZXNcbiAgICAgICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICAgICAgLy8gVHVybiBvbiBhZGRpdGl2ZSBibGVuZGluZyBmb3Iga2VybmVscywgd2hpY2ggaXMgYSBrZXkgYXNwZWN0IG9mIGtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gZm9ybXVsYVxuICAgICAgICBjb25zdCBjb2xvck1vZGUgPSBuZXcgQ29sb3JNb2RlKFtnbC5PTkUsIGdsLk9ORV0sIENvbG9yLnRyYW5zcGFyZW50LCBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0pO1xuXG4gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCBsYXllcik7XG5cbiAgICAgICAgY29udGV4dC5jbGVhcih7Y29sb3I6IENvbG9yLnRyYW5zcGFyZW50fSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkID0gY29vcmRzW2ldO1xuXG4gICAgICAgICAgICAvLyBTa2lwIHRpbGVzIHRoYXQgaGF2ZSB1bmNvdmVyZWQgcGFyZW50cyB0byBhdm9pZCBmbGlja2VyaW5nOyB3ZSBkb24ndCBuZWVkXG4gICAgICAgICAgICAvLyB0byB1c2UgY29tcGxleCB0aWxlIG1hc2tpbmcgaGVyZSBiZWNhdXNlIHRoZSBjaGFuZ2UgYmV0d2VlbiB6b29tIGxldmVscyBpcyBzdWJ0bGUsXG4gICAgICAgICAgICAvLyBzbyBpdCdzIGZpbmUgdG8gc2ltcGx5IHJlbmRlciB0aGUgcGFyZW50IHVudGlsIGFsbCBpdHMgNCBjaGlsZHJlbiBhcmUgbG9hZGVkXG4gICAgICAgICAgICBpZiAoc291cmNlQ2FjaGUuaGFzUmVuZGVyYWJsZVBhcmVudChjb29yZCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQ6ID9IZWF0bWFwQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgICAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKCdoZWF0bWFwJywgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgY29uc3Qge3pvb219ID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICAgICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhlYXRtYXBVbmlmb3JtVmFsdWVzKGNvb3JkLnBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICAgICAgdGlsZSwgem9vbSwgbGF5ZXIucGFpbnQuZ2V0KCdoZWF0bWFwLWludGVuc2l0eScpKSxcbiAgICAgICAgICAgICAgICBsYXllci5pZCwgYnVja2V0LmxheW91dFZlcnRleEJ1ZmZlciwgYnVja2V0LmluZGV4QnVmZmVyLFxuICAgICAgICAgICAgICAgIGJ1Y2tldC5zZWdtZW50cywgbGF5ZXIucGFpbnQsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sXG4gICAgICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHBhaW50ZXIud2lkdGgsIHBhaW50ZXIuaGVpZ2h0XSk7XG5cbiAgICB9IGVsc2UgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50Jykge1xuICAgICAgICBwYWludGVyLmNvbnRleHQuc2V0Q29sb3JNb2RlKHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtcbiAgICAgICAgcmVuZGVyVGV4dHVyZVRvTWFwKHBhaW50ZXIsIGxheWVyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRGcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCBsYXllcikge1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUxKTtcblxuICAgIC8vIFVzZSBhIDR4IGRvd25zY2FsZWQgc2NyZWVuIHRleHR1cmUgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgIGNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCBwYWludGVyLndpZHRoIC8gNCwgcGFpbnRlci5oZWlnaHQgLyA0XSk7XG5cbiAgICBsZXQgZmJvID0gbGF5ZXIuaGVhdG1hcEZibztcblxuICAgIGlmICghZmJvKSB7XG4gICAgICAgIGNvbnN0IHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTtcblxuICAgICAgICBmYm8gPSBsYXllci5oZWF0bWFwRmJvID0gY29udGV4dC5jcmVhdGVGcmFtZWJ1ZmZlcihwYWludGVyLndpZHRoIC8gNCwgcGFpbnRlci5oZWlnaHQgLyA0KTtcblxuICAgICAgICBiaW5kVGV4dHVyZVRvRnJhbWVidWZmZXIoY29udGV4dCwgcGFpbnRlciwgdGV4dHVyZSwgZmJvKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuICAgICAgICBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoZmJvLmZyYW1lYnVmZmVyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRUZXh0dXJlVG9GcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCB0ZXh0dXJlLCBmYm8pIHtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgLy8gVXNlIHRoZSBoaWdoZXIgcHJlY2lzaW9uIGhhbGYtZmxvYXQgdGV4dHVyZSB3aGVyZSBhdmFpbGFibGUgKHByb2R1Y2luZyBtdWNoIHNtb290aGVyIGxvb2tpbmcgaGVhdG1hcHMpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgcGFpbnRlci53aWR0aCAvIDQsIHBhaW50ZXIuaGVpZ2h0IC8gNCwgMCwgZ2wuUkdCQSxcbiAgICAgICAgY29udGV4dC5leHRUZXh0dXJlSGFsZkZsb2F0ID8gY29udGV4dC5leHRUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTIDogZ2wuVU5TSUdORURfQllURSwgbnVsbCk7XG5cbiAgICBmYm8uY29sb3JBdHRhY2htZW50LnNldCh0ZXh0dXJlKTtcblxuICAgIC8vIElmIHVzaW5nIGhhbGYtZmxvYXQgdGV4dHVyZSBhcyBhIHJlbmRlciB0YXJnZXQgaXMgbm90IHN1cHBvcnRlZCwgZmFsbCBiYWNrIHRvIGEgbG93IHByZWNpc2lvbiB0ZXh0dXJlXG4gICAgaWYgKGNvbnRleHQuZXh0VGV4dHVyZUhhbGZGbG9hdCAmJiBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSAhPT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUpIHtcbiAgICAgICAgY29udGV4dC5leHRUZXh0dXJlSGFsZkZsb2F0ID0gbnVsbDtcbiAgICAgICAgZmJvLmNvbG9yQXR0YWNobWVudC5zZXREaXJ0eSgpO1xuICAgICAgICBiaW5kVGV4dHVyZVRvRnJhbWVidWZmZXIoY29udGV4dCwgcGFpbnRlciwgdGV4dHVyZSwgZmJvKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRleHR1cmVUb01hcChwYWludGVyLCBsYXllcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgLy8gSGVyZSB3ZSBiaW5kIHR3byBkaWZmZXJlbnQgdGV4dHVyZXMgZnJvbSB3aGljaCB3ZSdsbCBzYW1wbGUgaW4gZHJhd2luZ1xuICAgIC8vIGhlYXRtYXBzOiB0aGUga2VybmVsIHRleHR1cmUsIHByZXBhcmVkIGluIHRoZSBvZmZzY3JlZW4gcGFzcywgYW5kIGFcbiAgICAvLyBjb2xvciByYW1wIHRleHR1cmUuXG4gICAgY29uc3QgZmJvID0gbGF5ZXIuaGVhdG1hcEZibztcbiAgICBpZiAoIWZibykgcmV0dXJuO1xuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuXG4gICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMSk7XG4gICAgbGV0IGNvbG9yUmFtcFRleHR1cmUgPSBsYXllci5jb2xvclJhbXBUZXh0dXJlO1xuICAgIGlmICghY29sb3JSYW1wVGV4dHVyZSkge1xuICAgICAgICBjb2xvclJhbXBUZXh0dXJlID0gbGF5ZXIuY29sb3JSYW1wVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIGxheWVyLmNvbG9yUmFtcCwgZ2wuUkdCQSk7XG4gICAgfVxuICAgIGNvbG9yUmFtcFRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gICAgcGFpbnRlci51c2VQcm9ncmFtKCdoZWF0bWFwVGV4dHVyZScpLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLFxuICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsIFN0ZW5jaWxNb2RlLmRpc2FibGVkLCBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgbGF5ZXIsIDAsIDEpLFxuICAgICAgICBsYXllci5pZCwgcGFpbnRlci52aWV3cG9ydEJ1ZmZlciwgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcixcbiAgICAgICAgcGFpbnRlci52aWV3cG9ydFNlZ21lbnRzLCBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IHtcbiAgICBsaW5lVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZVNERlVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZUdyYWRpZW50VW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vbGluZV9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBMaW5lU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIExpbmVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZHJhd0xpbmUocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogTGluZVN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLW9wYWNpdHknKTtcbiAgICBjb25zdCB3aWR0aCA9IGxheWVyLnBhaW50LmdldCgnbGluZS13aWR0aCcpO1xuICAgIGlmIChvcGFjaXR5LmNvbnN0YW50T3IoMSkgPT09IDAgfHwgd2lkdGguY29uc3RhbnRPcigxKSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgZGFzaGFycmF5ID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLWRhc2hhcnJheScpO1xuICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldCgnbGluZS1wYXR0ZXJuJyk7XG4gICAgY29uc3QgaW1hZ2UgPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcigoMTogYW55KSk7XG5cbiAgICBjb25zdCBncmFkaWVudCA9IGxheWVyLnBhaW50LmdldCgnbGluZS1ncmFkaWVudCcpO1xuICAgIGNvbnN0IGNyb3NzZmFkZSA9IGxheWVyLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcblxuICAgIGNvbnN0IHByb2dyYW1JZCA9XG4gICAgICAgIGRhc2hhcnJheSA/ICdsaW5lU0RGJyA6XG4gICAgICAgIGltYWdlID8gJ2xpbmVQYXR0ZXJuJyA6XG4gICAgICAgIGdyYWRpZW50ID8gJ2xpbmVHcmFkaWVudCcgOiAnbGluZSc7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgIGxldCBmaXJzdFRpbGUgPSB0cnVlO1xuXG4gICAgaWYgKGdyYWRpZW50KSB7XG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGxldCBncmFkaWVudFRleHR1cmUgPSBsYXllci5ncmFkaWVudFRleHR1cmU7XG4gICAgICAgIGlmICghbGF5ZXIuZ3JhZGllbnQpIHJldHVybjtcbiAgICAgICAgaWYgKCFncmFkaWVudFRleHR1cmUpIGdyYWRpZW50VGV4dHVyZSA9IGxheWVyLmdyYWRpZW50VGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIGxheWVyLmdyYWRpZW50LCBnbC5SR0JBKTtcbiAgICAgICAgZ3JhZGllbnRUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG5cbiAgICAgICAgaWYgKGltYWdlICYmICF0aWxlLnBhdHRlcm5zTG9hZGVkKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0xpbmVCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByZXZQcm9ncmFtID0gcGFpbnRlci5jb250ZXh0LnByb2dyYW0uZ2V0KCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0ocHJvZ3JhbUlkLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IHByb2dyYW1DaGFuZ2VkID0gZmlyc3RUaWxlIHx8IHByb2dyYW0ucHJvZ3JhbSAhPT0gcHJldlByb2dyYW07XG5cbiAgICAgICAgY29uc3QgY29uc3RhbnRQYXR0ZXJuID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IobnVsbCk7XG4gICAgICAgIGlmIChjb25zdGFudFBhdHRlcm4gJiYgdGlsZS5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICBjb25zdCBhdGxhcyA9IHRpbGUuaW1hZ2VBdGxhcztcbiAgICAgICAgICAgIGNvbnN0IHBvc1RvID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4udG8udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBwb3NGcm9tID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4uZnJvbS50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGlmIChwb3NUbyAmJiBwb3NGcm9tKSBwcm9ncmFtQ29uZmlndXJhdGlvbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGRhc2hhcnJheSA/IGxpbmVTREZVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyLCBkYXNoYXJyYXksIGNyb3NzZmFkZSkgOlxuICAgICAgICAgICAgaW1hZ2UgPyBsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIsIGNyb3NzZmFkZSkgOlxuICAgICAgICAgICAgZ3JhZGllbnQgPyBsaW5lR3JhZGllbnRVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyKSA6XG4gICAgICAgICAgICBsaW5lVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllcik7XG5cbiAgICAgICAgaWYgKGRhc2hhcnJheSAmJiAocHJvZ3JhbUNoYW5nZWQgfHwgcGFpbnRlci5saW5lQXRsYXMuZGlydHkpKSB7XG4gICAgICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgICAgIHBhaW50ZXIubGluZUF0bGFzLmJpbmQoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICAgICAgdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbi51cGRhdGVQYXR0ZXJuUGFpbnRCdWZmZXJzKGNyb3NzZmFkZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsXG4gICAgICAgICAgICBwYWludGVyLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcoY29vcmQpLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCwgdW5pZm9ybVZhbHVlcyxcbiAgICAgICAgICAgIGxheWVyLmlkLCBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyLCBidWNrZXQuaW5kZXhCdWZmZXIsIGJ1Y2tldC5zZWdtZW50cyxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgZmlyc3RUaWxlID0gZmFsc2U7XG4gICAgICAgIC8vIG9uY2UgcmVmYWN0b3JlZCBzbyB0aGF0IGJvdW5kIHRleHR1cmUgc3RhdGUgaXMgbWFuYWdlZCwgd2UnbGwgYWxzbyBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIGZpcnN0VGlsZS9wcm9ncmFtQ2hhbmdlZCBsb2dpY1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBmaWxsVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbE91dGxpbmVVbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2ZpbGxfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgRmlsbFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBGaWxsQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0JztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdGaWxsO1xuXG5mdW5jdGlvbiBkcmF3RmlsbChwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBGaWxsU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGNvbnN0IGNvbG9yID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWNvbG9yJyk7XG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1vcGFjaXR5Jyk7XG5cbiAgICBpZiAob3BhY2l0eS5jb25zdGFudE9yKDEpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGNvbnN0IHBhdHRlcm4gPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtcGF0dGVybicpO1xuICAgIGNvbnN0IHBhc3MgPSBwYWludGVyLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSAmJlxuICAgICAgICAoIXBhdHRlcm4uY29uc3RhbnRPcigoMTogYW55KSkgJiZcbiAgICAgICAgY29sb3IuY29uc3RhbnRPcihDb2xvci50cmFuc3BhcmVudCkuYSA9PT0gMSAmJlxuICAgICAgICBvcGFjaXR5LmNvbnN0YW50T3IoMCkgPT09IDEpID8gJ29wYXF1ZScgOiAndHJhbnNsdWNlbnQnO1xuXG4gICAgLy8gRHJhdyBmaWxsXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gcGFzcykge1xuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKFxuICAgICAgICAgICAgMSwgcGFpbnRlci5yZW5kZXJQYXNzID09PSAnb3BhcXVlJyA/IERlcHRoTW9kZS5SZWFkV3JpdGUgOiBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgICAgICBkcmF3RmlsbFRpbGVzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIGNvbG9yTW9kZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIERyYXcgc3Ryb2tlXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50JyAmJiBsYXllci5wYWludC5nZXQoJ2ZpbGwtYW50aWFsaWFzJykpIHtcblxuICAgICAgICAvLyBJZiB3ZSBkZWZpbmVkIGEgZGlmZmVyZW50IGNvbG9yIGZvciB0aGUgZmlsbCBvdXRsaW5lLCB3ZSBhcmVcbiAgICAgICAgLy8gZ29pbmcgdG8gaWdub3JlIHRoZSBiaXRzIGluIDB4MDcgYW5kIGp1c3QgY2FyZSBhYm91dCB0aGUgZ2xvYmFsXG4gICAgICAgIC8vIGNsaXBwaW5nIG1hc2suXG4gICAgICAgIC8vIE90aGVyd2lzZSwgd2Ugb25seSB3YW50IHRvIGRyYXdGaWxsIHRoZSBhbnRpYWxpYXNlZCBwYXJ0cyB0aGF0IGFyZVxuICAgICAgICAvLyAqb3V0c2lkZSogdGhlIGN1cnJlbnQgc2hhcGUuIFRoaXMgaXMgaW1wb3J0YW50IGluIGNhc2UgdGhlIGZpbGxcbiAgICAgICAgLy8gb3Igc3Ryb2tlIGNvbG9yIGlzIHRyYW5zbHVjZW50LiBJZiB3ZSB3b3VsZG4ndCBjbGlwIHRvIG91dHNpZGVcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQgc2hhcGUsIHNvbWUgcGl4ZWxzIGZyb20gdGhlIG91dGxpbmUgc3Ryb2tlIG92ZXJsYXBwZWRcbiAgICAgICAgLy8gdGhlIChub24tYW50aWFsaWFzZWQpIGZpbGwuXG4gICAgICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoXG4gICAgICAgICAgICBsYXllci5nZXRQYWludFByb3BlcnR5KCdmaWxsLW91dGxpbmUtY29sb3InKSA/IDIgOiAwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgICAgICBkcmF3RmlsbFRpbGVzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIGNvbG9yTW9kZSwgdHJ1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmF3RmlsbFRpbGVzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIGNvbG9yTW9kZSwgaXNPdXRsaW5lKSB7XG4gICAgY29uc3QgZ2wgPSBwYWludGVyLmNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtcGF0dGVybicpO1xuICAgIGNvbnN0IGltYWdlID0gcGF0dGVyblByb3BlcnR5ICYmIHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKCgxOiBhbnkpKTtcbiAgICBjb25zdCBjcm9zc2ZhZGUgPSBsYXllci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7XG4gICAgbGV0IGRyYXdNb2RlLCBwcm9ncmFtTmFtZSwgdW5pZm9ybVZhbHVlcywgaW5kZXhCdWZmZXIsIHNlZ21lbnRzO1xuXG4gICAgaWYgKCFpc091dGxpbmUpIHtcbiAgICAgICAgcHJvZ3JhbU5hbWUgPSBpbWFnZSA/ICdmaWxsUGF0dGVybicgOiAnZmlsbCc7XG4gICAgICAgIGRyYXdNb2RlID0gZ2wuVFJJQU5HTEVTO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2dyYW1OYW1lID0gaW1hZ2UgJiYgIWxheWVyLmdldFBhaW50UHJvcGVydHkoJ2ZpbGwtb3V0bGluZS1jb2xvcicpID8gJ2ZpbGxPdXRsaW5lUGF0dGVybicgOiAnZmlsbE91dGxpbmUnO1xuICAgICAgICBkcmF3TW9kZSA9IGdsLkxJTkVTO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgaWYgKGltYWdlICYmICF0aWxlLnBhdHRlcm5zTG9hZGVkKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0ZpbGxCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0ocHJvZ3JhbU5hbWUsIHByb2dyYW1Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIHBhaW50ZXIuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgICAgICB0aWxlLmltYWdlQXRsYXNUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uLnVwZGF0ZVBhdHRlcm5QYWludEJ1ZmZlcnMoY3Jvc3NmYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnN0YW50UGF0dGVybiA9IHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKG51bGwpO1xuICAgICAgICBpZiAoY29uc3RhbnRQYXR0ZXJuICYmIHRpbGUuaW1hZ2VBdGxhcykge1xuICAgICAgICAgICAgY29uc3QgYXRsYXMgPSB0aWxlLmltYWdlQXRsYXM7XG4gICAgICAgICAgICBjb25zdCBwb3NUbyA9IGF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbY29uc3RhbnRQYXR0ZXJuLnRvLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgY29uc3QgcG9zRnJvbSA9IGF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbY29uc3RhbnRQYXR0ZXJuLmZyb20udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBpZiAocG9zVG8gJiYgcG9zRnJvbSkgcHJvZ3JhbUNvbmZpZ3VyYXRpb24uc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvLCBwb3NGcm9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbGVNYXRyaXggPSBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChjb29yZC5wb3NNYXRyaXgsIHRpbGUsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlJyksIGxheWVyLnBhaW50LmdldCgnZmlsbC10cmFuc2xhdGUtYW5jaG9yJykpO1xuXG4gICAgICAgIGlmICghaXNPdXRsaW5lKSB7XG4gICAgICAgICAgICBpbmRleEJ1ZmZlciA9IGJ1Y2tldC5pbmRleEJ1ZmZlcjtcbiAgICAgICAgICAgIHNlZ21lbnRzID0gYnVja2V0LnNlZ21lbnRzO1xuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IGltYWdlID9cbiAgICAgICAgICAgICAgICBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXModGlsZU1hdHJpeCwgcGFpbnRlciwgY3Jvc3NmYWRlLCB0aWxlKSA6XG4gICAgICAgICAgICAgICAgZmlsbFVuaWZvcm1WYWx1ZXModGlsZU1hdHJpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleEJ1ZmZlciA9IGJ1Y2tldC5pbmRleEJ1ZmZlcjI7XG4gICAgICAgICAgICBzZWdtZW50cyA9IGJ1Y2tldC5zZWdtZW50czI7XG4gICAgICAgICAgICBjb25zdCBkcmF3aW5nQnVmZmVyU2l6ZSA9IFtnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRdO1xuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IChwcm9ncmFtTmFtZSA9PT0gJ2ZpbGxPdXRsaW5lUGF0dGVybicgJiYgaW1hZ2UpID9cbiAgICAgICAgICAgICAgICBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzKHRpbGVNYXRyaXgsIHBhaW50ZXIsIGNyb3NzZmFkZSwgdGlsZSwgZHJhd2luZ0J1ZmZlclNpemUpIDpcbiAgICAgICAgICAgICAgICBmaWxsT3V0bGluZVVuaWZvcm1WYWx1ZXModGlsZU1hdHJpeCwgZHJhd2luZ0J1ZmZlclNpemUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KHBhaW50ZXIuY29udGV4dCwgZHJhd01vZGUsIGRlcHRoTW9kZSxcbiAgICAgICAgICAgIHBhaW50ZXIuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhjb29yZCksIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLCB1bmlmb3JtVmFsdWVzLFxuICAgICAgICAgICAgbGF5ZXIuaWQsIGJ1Y2tldC5sYXlvdXRWZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyLCBzZWdtZW50cyxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IENvbG9yTW9kZSBmcm9tICcuLi9nbC9jb2xvcl9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBmaWxsRXh0cnVzaW9uVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG59IGZyb20gJy4vcHJvZ3JhbS9maWxsX2V4dHJ1c2lvbl9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2ZpbGxfZXh0cnVzaW9uX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3O1xuXG5mdW5jdGlvbiBkcmF3KHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZTogU291cmNlQ2FjaGUsIGxheWVyOiBGaWxsRXh0cnVzaW9uU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGNvbnN0IG9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLW9wYWNpdHknKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50Jykge1xuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBuZXcgRGVwdGhNb2RlKHBhaW50ZXIuY29udGV4dC5nbC5MRVFVQUwsIERlcHRoTW9kZS5SZWFkV3JpdGUsIHBhaW50ZXIuZGVwdGhSYW5nZUZvcjNEKTtcblxuICAgICAgICBpZiAob3BhY2l0eSA9PT0gMSAmJiAhbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuJykuY29uc3RhbnRPcigoMTogYW55KSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgICAgICAgICAgZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLCBTdGVuY2lsTW9kZS5kaXNhYmxlZCwgY29sb3JNb2RlKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRHJhdyB0cmFuc3BhcmVudCBidWlsZGluZ3MgaW4gdHdvIHBhc3NlcyBzbyB0aGF0IG9ubHkgdGhlIGNsb3Nlc3Qgc3VyZmFjZSBpcyBkcmF3bi5cbiAgICAgICAgICAgIC8vIEZpcnN0IGRyYXcgYWxsIHRoZSBleHRydXNpb25zIGludG8gb25seSB0aGUgZGVwdGggYnVmZmVyLiBObyBjb2xvcnMgYXJlIGRyYXduLlxuICAgICAgICAgICAgZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLFxuICAgICAgICAgICAgICAgIFN0ZW5jaWxNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIENvbG9yTW9kZS5kaXNhYmxlZCk7XG5cbiAgICAgICAgICAgIC8vIFRoZW4gZHJhdyBhbGwgdGhlIGV4dHJ1c2lvbnMgYSBzZWNvbmQgdHlwZSwgb25seSBjb2xvcmluZyBmcmFnbWVudHMgaWYgdGhleSBoYXZlIHRoZVxuICAgICAgICAgICAgLy8gc2FtZSBkZXB0aCB2YWx1ZSBhcyB0aGUgY2xvc2VzdCBmcmFnbWVudCBpbiB0aGUgcHJldmlvdXMgcGFzcy4gVXNlIHRoZSBzdGVuY2lsIGJ1ZmZlclxuICAgICAgICAgICAgLy8gdG8gcHJldmVudCB0aGUgc2Vjb25kIGRyYXcgaW4gY2FzZXMgd2hlcmUgd2UgaGF2ZSBjb2luY2lkZW50IHBvbHlnb25zLlxuICAgICAgICAgICAgZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIuc3RlbmNpbE1vZGVGb3IzRCgpLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgcGF0dGVyblByb3BlcnR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuJyk7XG4gICAgY29uc3QgaW1hZ2UgPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcigoMTogYW55KSk7XG4gICAgY29uc3QgY3Jvc3NmYWRlID0gbGF5ZXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLW9wYWNpdHknKTtcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2UuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0ZpbGxFeHRydXNpb25CdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oaW1hZ2UgPyAnZmlsbEV4dHJ1c2lvblBhdHRlcm4nIDogJ2ZpbGxFeHRydXNpb24nLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICBwYWludGVyLmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICAgICAgdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbi51cGRhdGVQYXR0ZXJuUGFpbnRCdWZmZXJzKGNyb3NzZmFkZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25zdGFudFBhdHRlcm4gPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcihudWxsKTtcbiAgICAgICAgaWYgKGNvbnN0YW50UGF0dGVybiAmJiB0aWxlLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0bGFzID0gdGlsZS5pbWFnZUF0bGFzO1xuICAgICAgICAgICAgY29uc3QgcG9zVG8gPSBhdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2NvbnN0YW50UGF0dGVybi50by50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGNvbnN0IHBvc0Zyb20gPSBhdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2NvbnN0YW50UGF0dGVybi5mcm9tLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgaWYgKHBvc1RvICYmIHBvc0Zyb20pIHByb2dyYW1Db25maWd1cmF0aW9uLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbywgcG9zRnJvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXRyaXggPSBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChcbiAgICAgICAgICAgIGNvb3JkLnBvc01hdHJpeCxcbiAgICAgICAgICAgIHRpbGUsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yJykpO1xuXG4gICAgICAgIGNvbnN0IHNob3VsZFVzZVZlcnRpY2FsR3JhZGllbnQgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50Jyk7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSBpbWFnZSA/XG4gICAgICAgICAgICBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1WYWx1ZXMobWF0cml4LCBwYWludGVyLCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LCBvcGFjaXR5LCBjb29yZCwgY3Jvc3NmYWRlLCB0aWxlKSA6XG4gICAgICAgICAgICBmaWxsRXh0cnVzaW9uVW5pZm9ybVZhbHVlcyhtYXRyaXgsIHBhaW50ZXIsIHNob3VsZFVzZVZlcnRpY2FsR3JhZGllbnQsIG9wYWNpdHkpO1xuXG4gICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBjb250ZXh0LmdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuYmFja0NDVyxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyLCBidWNrZXQuaW5kZXhCdWZmZXIsXG4gICAgICAgICAgICBidWNrZXQuc2VnbWVudHMsIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tLFxuICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7XG4gICAgaGlsbHNoYWRlVW5pZm9ybVZhbHVlcyxcbiAgICBoaWxsc2hhZGVVbmlmb3JtUHJlcGFyZVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vaGlsbHNoYWRlX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIEhpbGxzaGFkZVN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGlsbHNoYWRlX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdIaWxsc2hhZGU7XG5cbmZ1bmN0aW9uIGRyYXdIaWxsc2hhZGUocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogSGlsbHNoYWRlU3R5bGVMYXllciwgdGlsZUlEczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAnb2Zmc2NyZWVuJyAmJiBwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3Qgc291cmNlTWF4Wm9vbSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLm1heHpvb207XG5cbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGZvciAoY29uc3QgdGlsZUlEIG9mIHRpbGVJRHMpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUodGlsZUlEKTtcbiAgICAgICAgaWYgKHRpbGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlICYmIHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ29mZnNjcmVlbicpIHtcbiAgICAgICAgICAgIHByZXBhcmVIaWxsc2hhZGUocGFpbnRlciwgdGlsZSwgbGF5ZXIsIHNvdXJjZU1heFpvb20sIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcpIHtcbiAgICAgICAgICAgIHJlbmRlckhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCBwYWludGVyLndpZHRoLCBwYWludGVyLmhlaWdodF0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJIaWxsc2hhZGUocGFpbnRlciwgdGlsZSwgbGF5ZXIsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IGZibyA9IHRpbGUuZmJvO1xuICAgIGlmICghZmJvKSByZXR1cm47XG5cbiAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKCdoaWxsc2hhZGUnKTtcblxuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuXG4gICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpO1xuXG4gICAgaWYgKHRpbGUubWFza2VkQm91bmRzQnVmZmVyICYmIHRpbGUubWFza2VkSW5kZXhCdWZmZXIgJiYgdGlsZS5zZWdtZW50cykge1xuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCB0aWxlLm1hc2tlZEJvdW5kc0J1ZmZlcixcbiAgICAgICAgICAgIHRpbGUubWFza2VkSW5kZXhCdWZmZXIsIHRpbGUuc2VnbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcywgbGF5ZXIuaWQsIHBhaW50ZXIucmFzdGVyQm91bmRzQnVmZmVyLFxuICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci5yYXN0ZXJCb3VuZHNTZWdtZW50cyk7XG4gICAgfVxufVxuXG4vLyBoaWxsc2hhZGUgcmVuZGVyaW5nIGlzIGRvbmUgaW4gdHdvIHN0ZXBzLiB0aGUgcHJlcGFyZSBzdGVwIGZpcnN0IGNhbGN1bGF0ZXMgdGhlIHNsb3BlIG9mIHRoZSB0ZXJyYWluIGluIHRoZSB4IGFuZCB5XG4vLyBkaXJlY3Rpb25zIGZvciBlYWNoIHBpeGVsLCBhbmQgc2F2ZXMgdGhvc2UgdmFsdWVzIHRvIGEgZnJhbWVidWZmZXIgdGV4dHVyZSBpbiB0aGUgciBhbmQgZyBjaGFubmVscy5cbmZ1bmN0aW9uIHByZXBhcmVIaWxsc2hhZGUocGFpbnRlciwgdGlsZSwgbGF5ZXIsIHNvdXJjZU1heFpvb20sIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IGRlbSA9IHRpbGUuZGVtO1xuICAgIGlmIChkZW0gJiYgZGVtLmRhdGEpIHtcbiAgICAgICAgY29uc3QgdGlsZVNpemUgPSBkZW0uZGltO1xuICAgICAgICBjb25zdCB0ZXh0dXJlU3RyaWRlID0gZGVtLnN0cmlkZTtcblxuICAgICAgICBjb25zdCBwaXhlbERhdGEgPSBkZW0uZ2V0UGl4ZWxzKCk7XG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTEpO1xuXG4gICAgICAgIGNvbnRleHQucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KGZhbHNlKTtcbiAgICAgICAgdGlsZS5kZW1UZXh0dXJlID0gdGlsZS5kZW1UZXh0dXJlIHx8IHBhaW50ZXIuZ2V0VGlsZVRleHR1cmUodGV4dHVyZVN0cmlkZSk7XG4gICAgICAgIGlmICh0aWxlLmRlbVRleHR1cmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbVRleHR1cmUgPSB0aWxlLmRlbVRleHR1cmU7XG4gICAgICAgICAgICBkZW1UZXh0dXJlLnVwZGF0ZShwaXhlbERhdGEsIHtwcmVtdWx0aXBseTogZmFsc2V9KTtcbiAgICAgICAgICAgIGRlbVRleHR1cmUuYmluZChnbC5ORUFSRVNULCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUuZGVtVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHBpeGVsRGF0YSwgZ2wuUkdCQSwge3ByZW11bHRpcGx5OiBmYWxzZX0pO1xuICAgICAgICAgICAgdGlsZS5kZW1UZXh0dXJlLmJpbmQoZ2wuTkVBUkVTVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBsZXQgZmJvID0gdGlsZS5mYm87XG5cbiAgICAgICAgaWYgKCFmYm8pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlclRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB7d2lkdGg6IHRpbGVTaXplLCBoZWlnaHQ6IHRpbGVTaXplLCBkYXRhOiBudWxsfSwgZ2wuUkdCQSk7XG4gICAgICAgICAgICByZW5kZXJUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcblxuICAgICAgICAgICAgZmJvID0gdGlsZS5mYm8gPSBjb250ZXh0LmNyZWF0ZUZyYW1lYnVmZmVyKHRpbGVTaXplLCB0aWxlU2l6ZSk7XG4gICAgICAgICAgICBmYm8uY29sb3JBdHRhY2htZW50LnNldChyZW5kZXJUZXh0dXJlLnRleHR1cmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KGZiby5mcmFtZWJ1ZmZlcik7XG4gICAgICAgIGNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCB0aWxlU2l6ZSwgdGlsZVNpemVdKTtcblxuICAgICAgICBwYWludGVyLnVzZVByb2dyYW0oJ2hpbGxzaGFkZVByZXBhcmUnKS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUyxcbiAgICAgICAgICAgIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgaGlsbHNoYWRlVW5pZm9ybVByZXBhcmVWYWx1ZXModGlsZS50aWxlSUQsIGRlbSwgc291cmNlTWF4Wm9vbSksXG4gICAgICAgICAgICBsYXllci5pZCwgcGFpbnRlci5yYXN0ZXJCb3VuZHNCdWZmZXIsXG4gICAgICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnJhc3RlckJvdW5kc1NlZ21lbnRzKTtcblxuICAgICAgICB0aWxlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSA9IGZhbHNlO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Y2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCBJbWFnZVNvdXJjZSBmcm9tICcuLi9zb3VyY2UvaW1hZ2Vfc291cmNlJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7cmFzdGVyVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL3Jhc3Rlcl9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBSYXN0ZXJTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3UmFzdGVyO1xuXG5mdW5jdGlvbiBkcmF3UmFzdGVyKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IFJhc3RlclN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG4gICAgaWYgKGxheWVyLnBhaW50LmdldCgncmFzdGVyLW9wYWNpdHknKSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgncmFzdGVyJyk7XG5cbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgIGNvbnN0IG1pblRpbGVaID0gY29vcmRzLmxlbmd0aCAmJiBjb29yZHNbMF0ub3ZlcnNjYWxlZFo7XG4gICAgY29uc3QgYWxpZ24gPSAhcGFpbnRlci5vcHRpb25zLm1vdmluZztcbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICAvLyBTZXQgdGhlIGxvd2VyIHpvb20gbGV2ZWwgdG8gc3VibGF5ZXIgMCwgYW5kIGhpZ2hlciB6b29tIGxldmVscyB0byBoaWdoZXIgc3VibGF5ZXJzXG4gICAgICAgIC8vIFVzZSBnbC5MRVNTIHRvIHByZXZlbnQgZG91YmxlIGRyYXdpbmcgaW4gYXJlYXMgd2hlcmUgdGlsZXMgb3ZlcmxhcC5cbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcihjb29yZC5vdmVyc2NhbGVkWiAtIG1pblRpbGVaLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItb3BhY2l0eScpID09PSAxID8gRGVwdGhNb2RlLlJlYWRXcml0ZSA6IERlcHRoTW9kZS5SZWFkT25seSwgZ2wuTEVTUyk7XG5cbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBjb25zdCBwb3NNYXRyaXggPSBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoY29vcmQudG9VbndyYXBwZWQoKSwgYWxpZ24pO1xuXG4gICAgICAgIHRpbGUucmVnaXN0ZXJGYWRlRHVyYXRpb24obGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItZmFkZS1kdXJhdGlvbicpKTtcblxuICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gc291cmNlQ2FjaGUuZmluZExvYWRlZFBhcmVudChjb29yZCwgMCksXG4gICAgICAgICAgICBmYWRlID0gZ2V0RmFkZVZhbHVlcyh0aWxlLCBwYXJlbnRUaWxlLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIHBhaW50ZXIudHJhbnNmb3JtKTtcblxuICAgICAgICBsZXQgcGFyZW50U2NhbGVCeSwgcGFyZW50VEw7XG5cbiAgICAgICAgY29uc3QgdGV4dHVyZUZpbHRlciA9IGxheWVyLnBhaW50LmdldCgncmFzdGVyLXJlc2FtcGxpbmcnKSA9PT0gJ25lYXJlc3QnID8gIGdsLk5FQVJFU1QgOiBnbC5MSU5FQVI7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgIHRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMSk7XG5cbiAgICAgICAgaWYgKHBhcmVudFRpbGUpIHtcbiAgICAgICAgICAgIHBhcmVudFRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG4gICAgICAgICAgICBwYXJlbnRTY2FsZUJ5ID0gTWF0aC5wb3coMiwgcGFyZW50VGlsZS50aWxlSUQub3ZlcnNjYWxlZFogLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgICAgICAgICBwYXJlbnRUTCA9IFt0aWxlLnRpbGVJRC5jYW5vbmljYWwueCAqIHBhcmVudFNjYWxlQnkgJSAxLCB0aWxlLnRpbGVJRC5jYW5vbmljYWwueSAqIHBhcmVudFNjYWxlQnkgJSAxXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS50ZXh0dXJlLmJpbmQodGV4dHVyZUZpbHRlciwgZ2wuQ0xBTVBfVE9fRURHRSwgZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSByYXN0ZXJVbmlmb3JtVmFsdWVzKHBvc01hdHJpeCwgcGFyZW50VEwgfHwgWzAsIDBdLCBwYXJlbnRTY2FsZUJ5IHx8IDEsIGZhZGUsIGxheWVyKTtcblxuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgSW1hZ2VTb3VyY2UpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBzb3VyY2UuYm91bmRzQnVmZmVyLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHNvdXJjZS5ib3VuZHNTZWdtZW50cyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGlsZS5tYXNrZWRCb3VuZHNCdWZmZXIgJiYgdGlsZS5tYXNrZWRJbmRleEJ1ZmZlciAmJiB0aWxlLnNlZ21lbnRzKSB7XG4gICAgICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgdGlsZS5tYXNrZWRCb3VuZHNCdWZmZXIsXG4gICAgICAgICAgICAgICAgdGlsZS5tYXNrZWRJbmRleEJ1ZmZlciwgdGlsZS5zZWdtZW50cywgbGF5ZXIucGFpbnQsXG4gICAgICAgICAgICAgICAgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgcGFpbnRlci5yYXN0ZXJCb3VuZHNCdWZmZXIsXG4gICAgICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci5yYXN0ZXJCb3VuZHNTZWdtZW50cyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEZhZGVWYWx1ZXModGlsZSwgcGFyZW50VGlsZSwgc291cmNlQ2FjaGUsIGxheWVyLCB0cmFuc2Zvcm0pIHtcbiAgICBjb25zdCBmYWRlRHVyYXRpb24gPSBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1mYWRlLWR1cmF0aW9uJyk7XG5cbiAgICBpZiAoZmFkZUR1cmF0aW9uID4gMCkge1xuICAgICAgICBjb25zdCBub3cgPSBicm93c2VyLm5vdygpO1xuICAgICAgICBjb25zdCBzaW5jZVRpbGUgPSAobm93IC0gdGlsZS50aW1lQWRkZWQpIC8gZmFkZUR1cmF0aW9uO1xuICAgICAgICBjb25zdCBzaW5jZVBhcmVudCA9IHBhcmVudFRpbGUgPyAobm93IC0gcGFyZW50VGlsZS50aW1lQWRkZWQpIC8gZmFkZUR1cmF0aW9uIDogLTE7XG5cbiAgICAgICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgICAgIGNvbnN0IGlkZWFsWiA9IHRyYW5zZm9ybS5jb3ZlcmluZ1pvb21MZXZlbCh7XG4gICAgICAgICAgICB0aWxlU2l6ZTogc291cmNlLnRpbGVTaXplLFxuICAgICAgICAgICAgcm91bmRab29tOiBzb3VyY2Uucm91bmRab29tXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGlmIG5vIHBhcmVudCBvciBwYXJlbnQgaXMgb2xkZXIsIGZhZGUgaW47IGlmIHBhcmVudCBpcyB5b3VuZ2VyLCBmYWRlIG91dFxuICAgICAgICBjb25zdCBmYWRlSW4gPSAhcGFyZW50VGlsZSB8fCBNYXRoLmFicyhwYXJlbnRUaWxlLnRpbGVJRC5vdmVyc2NhbGVkWiAtIGlkZWFsWikgPiBNYXRoLmFicyh0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWiAtIGlkZWFsWik7XG5cbiAgICAgICAgY29uc3QgY2hpbGRPcGFjaXR5ID0gKGZhZGVJbiAmJiB0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uKSA/IDEgOiBjbGFtcChmYWRlSW4gPyBzaW5jZVRpbGUgOiAxIC0gc2luY2VQYXJlbnQsIDAsIDEpO1xuXG4gICAgICAgIC8vIHdlIGRvbid0IGNyb3NzZmFkZSB0aWxlcyB0aGF0IHdlcmUganVzdCByZWZyZXNoZWQgdXBvbiBleHBpcmluZzpcbiAgICAgICAgLy8gb25jZSB0aGV5J3JlIG9sZCBlbm91Z2ggdG8gcGFzcyB0aGUgY3Jvc3NmYWRpbmcgdGhyZXNob2xkXG4gICAgICAgIC8vIChmYWRlRHVyYXRpb24pLCB1bnNldCB0aGUgYHJlZnJlc2hlZFVwb25FeHBpcmF0aW9uYCBmbGFnIHNvIHdlIGRvbid0XG4gICAgICAgIC8vIGluY29ycmVjdGx5IGZhaWwgdG8gY3Jvc3NmYWRlIHRoZW0gd2hlbiB6b29taW5nXG4gICAgICAgIGlmICh0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uICYmIHNpbmNlVGlsZSA+PSAxKSB0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBhcmVudFRpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICBtaXg6IDEgLSBjaGlsZE9wYWNpdHlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IGNoaWxkT3BhY2l0eSxcbiAgICAgICAgICAgICAgICBtaXg6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgIG1peDogMFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyxcbiAgICBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2JhY2tncm91bmRfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgQmFja2dyb3VuZFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvYmFja2dyb3VuZF9zdHlsZV9sYXllcic7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdCYWNrZ3JvdW5kO1xuXG5mdW5jdGlvbiBkcmF3QmFja2dyb3VuZChwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBCYWNrZ3JvdW5kU3R5bGVMYXllcikge1xuICAgIGNvbnN0IGNvbG9yID0gbGF5ZXIucGFpbnQuZ2V0KCdiYWNrZ3JvdW5kLWNvbG9yJyk7XG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnYmFja2dyb3VuZC1vcGFjaXR5Jyk7XG5cbiAgICBpZiAob3BhY2l0eSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG4gICAgY29uc3QgdGlsZVNpemUgPSB0cmFuc2Zvcm0udGlsZVNpemU7XG4gICAgY29uc3QgaW1hZ2UgPSBsYXllci5wYWludC5nZXQoJ2JhY2tncm91bmQtcGF0dGVybicpO1xuICAgIGlmIChwYWludGVyLmlzUGF0dGVybk1pc3NpbmcoaW1hZ2UpKSByZXR1cm47XG5cbiAgICBjb25zdCBwYXNzID0gKCFpbWFnZSAmJiBjb2xvci5hID09PSAxICYmIG9wYWNpdHkgPT09IDEgJiYgcGFpbnRlci5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkpID8gJ29wYXF1ZScgOiAndHJhbnNsdWNlbnQnO1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09IHBhc3MpIHJldHVybjtcblxuICAgIGNvbnN0IHN0ZW5jaWxNb2RlID0gU3RlbmNpbE1vZGUuZGlzYWJsZWQ7XG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBwYXNzID09PSAnb3BhcXVlJyA/IERlcHRoTW9kZS5SZWFkV3JpdGUgOiBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbShpbWFnZSA/ICdiYWNrZ3JvdW5kUGF0dGVybicgOiAnYmFja2dyb3VuZCcpO1xuXG4gICAgY29uc3QgdGlsZUlEcyA9IHRyYW5zZm9ybS5jb3ZlcmluZ1RpbGVzKHt0aWxlU2l6ZX0pO1xuXG4gICAgaWYgKGltYWdlKSB7XG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICBwYWludGVyLmltYWdlTWFuYWdlci5iaW5kKHBhaW50ZXIuY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3Jvc3NmYWRlID0gbGF5ZXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpO1xuICAgIGZvciAoY29uc3QgdGlsZUlEIG9mIHRpbGVJRHMpIHtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gcGFpbnRlci50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHRpbGVJRC50b1Vud3JhcHBlZCgpKTtcbiAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGltYWdlID9cbiAgICAgICAgICAgIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybVZhbHVlcyhtYXRyaXgsIG9wYWNpdHksIHBhaW50ZXIsIGltYWdlLCB7dGlsZUlELCB0aWxlU2l6ZX0sIGNyb3NzZmFkZSkgOlxuICAgICAgICAgICAgYmFja2dyb3VuZFVuaWZvcm1WYWx1ZXMobWF0cml4LCBvcGFjaXR5LCBjb2xvcik7XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgcGFpbnRlci50aWxlRXh0ZW50QnVmZmVyLFxuICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci50aWxlRXh0ZW50U2VnbWVudHMpO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHtQb3NBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQge0xpbmVJbmRleEFycmF5fSBmcm9tICcuLi9kYXRhL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IHBvc0F0dHJpYnV0ZXMgZnJvbSAnLi4vZGF0YS9wb3NfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2RlYnVnVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2RlYnVnX3Byb2dyYW0nO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0RlYnVnO1xuXG5mdW5jdGlvbiBkcmF3RGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHJhd0RlYnVnVGlsZShwYWludGVyLCBzb3VyY2VDYWNoZSwgY29vcmRzW2ldKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdEZWJ1Z1RpbGUocGFpbnRlciwgc291cmNlQ2FjaGUsIGNvb3JkKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBwb3NNYXRyaXggPSBjb29yZC5wb3NNYXRyaXg7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgnZGVidWcnKTtcblxuICAgIGNvbnN0IGRlcHRoTW9kZSA9IERlcHRoTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgIGNvbnN0IGlkID0gJyRkZWJ1Zyc7XG5cbiAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuTElORV9TVFJJUCwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgIGRlYnVnVW5pZm9ybVZhbHVlcyhwb3NNYXRyaXgsIENvbG9yLnJlZCksIGlkLFxuICAgICAgICBwYWludGVyLmRlYnVnQnVmZmVyLCBwYWludGVyLnRpbGVCb3JkZXJJbmRleEJ1ZmZlciwgcGFpbnRlci5kZWJ1Z1NlZ21lbnRzKTtcblxuICAgIGNvbnN0IHRpbGVSYXdEYXRhID0gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoY29vcmQua2V5KS5sYXRlc3RSYXdUaWxlRGF0YTtcbiAgICBjb25zdCB0aWxlQnl0ZUxlbmd0aCA9ICh0aWxlUmF3RGF0YSAmJiB0aWxlUmF3RGF0YS5ieXRlTGVuZ3RoKSB8fCAwO1xuICAgIGNvbnN0IHRpbGVTaXplS2IgPSBNYXRoLmZsb29yKHRpbGVCeXRlTGVuZ3RoIC8gMTAyNCk7XG4gICAgY29uc3QgdGlsZVNpemUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKS50aWxlU2l6ZTtcbiAgICBjb25zdCBzY2FsZVJhdGlvID0gNTEyIC8gTWF0aC5taW4odGlsZVNpemUsIDUxMik7XG4gICAgY29uc3QgdmVydGljZXMgPSBjcmVhdGVUZXh0VmVydGljZXMoYCR7Y29vcmQudG9TdHJpbmcoKX0gJHt0aWxlU2l6ZUtifWtiYCwgNTAsIDIwMCAqIHNjYWxlUmF0aW8sIDUgKiBzY2FsZVJhdGlvKTtcbiAgICBjb25zdCBkZWJ1Z1RleHRBcnJheSA9IG5ldyBQb3NBcnJheSgpO1xuICAgIGNvbnN0IGRlYnVnVGV4dEluZGljZXMgPSBuZXcgTGluZUluZGV4QXJyYXkoKTtcbiAgICBmb3IgKGxldCB2ID0gMDsgdiA8IHZlcnRpY2VzLmxlbmd0aDsgdiArPSAyKSB7XG4gICAgICAgIGRlYnVnVGV4dEFycmF5LmVtcGxhY2VCYWNrKHZlcnRpY2VzW3ZdLCB2ZXJ0aWNlc1t2ICsgMV0pO1xuICAgICAgICBkZWJ1Z1RleHRJbmRpY2VzLmVtcGxhY2VCYWNrKHYsIHYgKyAxKTtcbiAgICB9XG4gICAgY29uc3QgZGVidWdUZXh0QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIoZGVidWdUZXh0QXJyYXksIHBvc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgY29uc3QgZGVidWdUZXh0SW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKGRlYnVnVGV4dEluZGljZXMpO1xuICAgIGNvbnN0IGRlYnVnVGV4dFNlZ21lbnQgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgZGVidWdUZXh0QXJyYXkubGVuZ3RoIC8gMiwgZGVidWdUZXh0QXJyYXkubGVuZ3RoIC8gMik7XG5cbiAgICAvLyBEcmF3IHRoZSBoYWxvIHdpdGggbXVsdGlwbGUgMXB4IGxpbmVzIGluc3RlYWQgb2Ygb25lIHdpZGVyIGxpbmUgYmVjYXVzZVxuICAgIC8vIHRoZSBnbCBzcGVjIGRvZXNuJ3QgZ3VhcmFudGVlIHN1cHBvcnQgZm9yIGxpbmVzIHdpdGggd2lkdGggPiAxLlxuICAgIGNvbnN0IG9uZVBpeGVsID0gRVhURU5UIC8gKE1hdGgucG93KDIsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20gLSBjb29yZC5vdmVyc2NhbGVkWikgKiB0aWxlU2l6ZSAqIHNjYWxlUmF0aW8pO1xuXG4gICAgY29uc3QgaGFsb1dpZHRoID0gMTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBbXTtcbiAgICBmb3IgKGxldCB4ID0gLWhhbG9XaWR0aDsgeCA8PSBoYWxvV2lkdGg7IHgrKykge1xuICAgICAgICBmb3IgKGxldCB5ID0gLWhhbG9XaWR0aDsgeSA8PSBoYWxvV2lkdGg7IHkrKykge1xuICAgICAgICAgICAgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGRvbid0IGRyYXcgdGhlIGhhbG8gYXQgMCwwIHNpbmNlIHRoZSB0ZXh0IGlzIGRyYXduIHRoZXJlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucy5wdXNoKFt4LCB5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyYW5zbGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uc1tpXTtcblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuTElORVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgZGVidWdVbmlmb3JtVmFsdWVzKFxuICAgICAgICAgICAgICAgIG1hdDQudHJhbnNsYXRlKFtdLCBwb3NNYXRyaXgsIFtcbiAgICAgICAgICAgICAgICAgICAgb25lUGl4ZWwgKiB0cmFuc2xhdGlvblswXSxcbiAgICAgICAgICAgICAgICAgICAgb25lUGl4ZWwgKiB0cmFuc2xhdGlvblsxXSwgMF0pLFxuICAgICAgICAgICAgICAgIENvbG9yLndoaXRlKSxcbiAgICAgICAgICAgIGlkLCBkZWJ1Z1RleHRCdWZmZXIsIGRlYnVnVGV4dEluZGV4QnVmZmVyLCBkZWJ1Z1RleHRTZWdtZW50KTtcbiAgICB9XG5cbiAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuTElORVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBkZWJ1Z1VuaWZvcm1WYWx1ZXMocG9zTWF0cml4LCBDb2xvci5ibGFjayksIGlkLFxuICAgICAgICBkZWJ1Z1RleHRCdWZmZXIsIGRlYnVnVGV4dEluZGV4QnVmZmVyLCBkZWJ1Z1RleHRTZWdtZW50KTtcbn1cblxuLy8gRm9udCBkYXRhIEZyb20gSGVyc2hleSBTaW1wbGV4IEZvbnRcbi8vIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9kYXRhZm9ybWF0cy9oZXJzaGV5L1xuY29uc3Qgc2ltcGxleEZvbnQgPSB7XG4gICAgXCIgXCI6IFsxNiwgW11dLFxuICAgIFwiIVwiOiBbMTAsIFs1LCAyMSwgNSwgNywgLTEsIC0xLCA1LCAyLCA0LCAxLCA1LCAwLCA2LCAxLCA1LCAyXV0sXG4gICAgXCJcXFwiXCI6IFsxNiwgWzQsIDIxLCA0LCAxNCwgLTEsIC0xLCAxMiwgMjEsIDEyLCAxNF1dLFxuICAgIFwiI1wiOiBbMjEsIFsxMSwgMjUsIDQsIC03LCAtMSwgLTEsIDE3LCAyNSwgMTAsIC03LCAtMSwgLTEsIDQsIDEyLCAxOCwgMTIsIC0xLCAtMSwgMywgNiwgMTcsIDZdXSxcbiAgICBcIiRcIjogWzIwLCBbOCwgMjUsIDgsIC00LCAtMSwgLTEsIDEyLCAyNSwgMTIsIC00LCAtMSwgLTEsIDE3LCAxOCwgMTUsIDIwLCAxMiwgMjEsIDgsIDIxLCA1LCAyMCwgMywgMTgsIDMsIDE2LCA0LCAxNCwgNSwgMTMsIDcsIDEyLCAxMywgMTAsIDE1LCA5LCAxNiwgOCwgMTcsIDYsIDE3LCAzLCAxNSwgMSwgMTIsIDAsIDgsIDAsIDUsIDEsIDMsIDNdXSxcbiAgICBcIiVcIjogWzI0LCBbMjEsIDIxLCAzLCAwLCAtMSwgLTEsIDgsIDIxLCAxMCwgMTksIDEwLCAxNywgOSwgMTUsIDcsIDE0LCA1LCAxNCwgMywgMTYsIDMsIDE4LCA0LCAyMCwgNiwgMjEsIDgsIDIxLCAxMCwgMjAsIDEzLCAxOSwgMTYsIDE5LCAxOSwgMjAsIDIxLCAyMSwgLTEsIC0xLCAxNywgNywgMTUsIDYsIDE0LCA0LCAxNCwgMiwgMTYsIDAsIDE4LCAwLCAyMCwgMSwgMjEsIDMsIDIxLCA1LCAxOSwgNywgMTcsIDddXSxcbiAgICBcIiZcIjogWzI2LCBbMjMsIDEyLCAyMywgMTMsIDIyLCAxNCwgMjEsIDE0LCAyMCwgMTMsIDE5LCAxMSwgMTcsIDYsIDE1LCAzLCAxMywgMSwgMTEsIDAsIDcsIDAsIDUsIDEsIDQsIDIsIDMsIDQsIDMsIDYsIDQsIDgsIDUsIDksIDEyLCAxMywgMTMsIDE0LCAxNCwgMTYsIDE0LCAxOCwgMTMsIDIwLCAxMSwgMjEsIDksIDIwLCA4LCAxOCwgOCwgMTYsIDksIDEzLCAxMSwgMTAsIDE2LCAzLCAxOCwgMSwgMjAsIDAsIDIyLCAwLCAyMywgMSwgMjMsIDJdXSxcbiAgICBcIidcIjogWzEwLCBbNSwgMTksIDQsIDIwLCA1LCAyMSwgNiwgMjAsIDYsIDE4LCA1LCAxNiwgNCwgMTVdXSxcbiAgICBcIihcIjogWzE0LCBbMTEsIDI1LCA5LCAyMywgNywgMjAsIDUsIDE2LCA0LCAxMSwgNCwgNywgNSwgMiwgNywgLTIsIDksIC01LCAxMSwgLTddXSxcbiAgICBcIilcIjogWzE0LCBbMywgMjUsIDUsIDIzLCA3LCAyMCwgOSwgMTYsIDEwLCAxMSwgMTAsIDcsIDksIDIsIDcsIC0yLCA1LCAtNSwgMywgLTddXSxcbiAgICBcIipcIjogWzE2LCBbOCwgMjEsIDgsIDksIC0xLCAtMSwgMywgMTgsIDEzLCAxMiwgLTEsIC0xLCAxMywgMTgsIDMsIDEyXV0sXG4gICAgXCIrXCI6IFsyNiwgWzEzLCAxOCwgMTMsIDAsIC0xLCAtMSwgNCwgOSwgMjIsIDldXSxcbiAgICBcIixcIjogWzEwLCBbNiwgMSwgNSwgMCwgNCwgMSwgNSwgMiwgNiwgMSwgNiwgLTEsIDUsIC0zLCA0LCAtNF1dLFxuICAgIFwiLVwiOiBbMjYsIFs0LCA5LCAyMiwgOV1dLFxuICAgIFwiLlwiOiBbMTAsIFs1LCAyLCA0LCAxLCA1LCAwLCA2LCAxLCA1LCAyXV0sXG4gICAgXCIvXCI6IFsyMiwgWzIwLCAyNSwgMiwgLTddXSxcbiAgICBcIjBcIjogWzIwLCBbOSwgMjEsIDYsIDIwLCA0LCAxNywgMywgMTIsIDMsIDksIDQsIDQsIDYsIDEsIDksIDAsIDExLCAwLCAxNCwgMSwgMTYsIDQsIDE3LCA5LCAxNywgMTIsIDE2LCAxNywgMTQsIDIwLCAxMSwgMjEsIDksIDIxXV0sXG4gICAgXCIxXCI6IFsyMCwgWzYsIDE3LCA4LCAxOCwgMTEsIDIxLCAxMSwgMF1dLFxuICAgIFwiMlwiOiBbMjAsIFs0LCAxNiwgNCwgMTcsIDUsIDE5LCA2LCAyMCwgOCwgMjEsIDEyLCAyMSwgMTQsIDIwLCAxNSwgMTksIDE2LCAxNywgMTYsIDE1LCAxNSwgMTMsIDEzLCAxMCwgMywgMCwgMTcsIDBdXSxcbiAgICBcIjNcIjogWzIwLCBbNSwgMjEsIDE2LCAyMSwgMTAsIDEzLCAxMywgMTMsIDE1LCAxMiwgMTYsIDExLCAxNywgOCwgMTcsIDYsIDE2LCAzLCAxNCwgMSwgMTEsIDAsIDgsIDAsIDUsIDEsIDQsIDIsIDMsIDRdXSxcbiAgICBcIjRcIjogWzIwLCBbMTMsIDIxLCAzLCA3LCAxOCwgNywgLTEsIC0xLCAxMywgMjEsIDEzLCAwXV0sXG4gICAgXCI1XCI6IFsyMCwgWzE1LCAyMSwgNSwgMjEsIDQsIDEyLCA1LCAxMywgOCwgMTQsIDExLCAxNCwgMTQsIDEzLCAxNiwgMTEsIDE3LCA4LCAxNywgNiwgMTYsIDMsIDE0LCAxLCAxMSwgMCwgOCwgMCwgNSwgMSwgNCwgMiwgMywgNF1dLFxuICAgIFwiNlwiOiBbMjAsIFsxNiwgMTgsIDE1LCAyMCwgMTIsIDIxLCAxMCwgMjEsIDcsIDIwLCA1LCAxNywgNCwgMTIsIDQsIDcsIDUsIDMsIDcsIDEsIDEwLCAwLCAxMSwgMCwgMTQsIDEsIDE2LCAzLCAxNywgNiwgMTcsIDcsIDE2LCAxMCwgMTQsIDEyLCAxMSwgMTMsIDEwLCAxMywgNywgMTIsIDUsIDEwLCA0LCA3XV0sXG4gICAgXCI3XCI6IFsyMCwgWzE3LCAyMSwgNywgMCwgLTEsIC0xLCAzLCAyMSwgMTcsIDIxXV0sXG4gICAgXCI4XCI6IFsyMCwgWzgsIDIxLCA1LCAyMCwgNCwgMTgsIDQsIDE2LCA1LCAxNCwgNywgMTMsIDExLCAxMiwgMTQsIDExLCAxNiwgOSwgMTcsIDcsIDE3LCA0LCAxNiwgMiwgMTUsIDEsIDEyLCAwLCA4LCAwLCA1LCAxLCA0LCAyLCAzLCA0LCAzLCA3LCA0LCA5LCA2LCAxMSwgOSwgMTIsIDEzLCAxMywgMTUsIDE0LCAxNiwgMTYsIDE2LCAxOCwgMTUsIDIwLCAxMiwgMjEsIDgsIDIxXV0sXG4gICAgXCI5XCI6IFsyMCwgWzE2LCAxNCwgMTUsIDExLCAxMywgOSwgMTAsIDgsIDksIDgsIDYsIDksIDQsIDExLCAzLCAxNCwgMywgMTUsIDQsIDE4LCA2LCAyMCwgOSwgMjEsIDEwLCAyMSwgMTMsIDIwLCAxNSwgMTgsIDE2LCAxNCwgMTYsIDksIDE1LCA0LCAxMywgMSwgMTAsIDAsIDgsIDAsIDUsIDEsIDQsIDNdXSxcbiAgICBcIjpcIjogWzEwLCBbNSwgMTQsIDQsIDEzLCA1LCAxMiwgNiwgMTMsIDUsIDE0LCAtMSwgLTEsIDUsIDIsIDQsIDEsIDUsIDAsIDYsIDEsIDUsIDJdXSxcbiAgICBcIjtcIjogWzEwLCBbNSwgMTQsIDQsIDEzLCA1LCAxMiwgNiwgMTMsIDUsIDE0LCAtMSwgLTEsIDYsIDEsIDUsIDAsIDQsIDEsIDUsIDIsIDYsIDEsIDYsIC0xLCA1LCAtMywgNCwgLTRdXSxcbiAgICBcIjxcIjogWzI0LCBbMjAsIDE4LCA0LCA5LCAyMCwgMF1dLFxuICAgIFwiPVwiOiBbMjYsIFs0LCAxMiwgMjIsIDEyLCAtMSwgLTEsIDQsIDYsIDIyLCA2XV0sXG4gICAgXCI+XCI6IFsyNCwgWzQsIDE4LCAyMCwgOSwgNCwgMF1dLFxuICAgIFwiP1wiOiBbMTgsIFszLCAxNiwgMywgMTcsIDQsIDE5LCA1LCAyMCwgNywgMjEsIDExLCAyMSwgMTMsIDIwLCAxNCwgMTksIDE1LCAxNywgMTUsIDE1LCAxNCwgMTMsIDEzLCAxMiwgOSwgMTAsIDksIDcsIC0xLCAtMSwgOSwgMiwgOCwgMSwgOSwgMCwgMTAsIDEsIDksIDJdXSxcbiAgICBcIkBcIjogWzI3LCBbMTgsIDEzLCAxNywgMTUsIDE1LCAxNiwgMTIsIDE2LCAxMCwgMTUsIDksIDE0LCA4LCAxMSwgOCwgOCwgOSwgNiwgMTEsIDUsIDE0LCA1LCAxNiwgNiwgMTcsIDgsIC0xLCAtMSwgMTIsIDE2LCAxMCwgMTQsIDksIDExLCA5LCA4LCAxMCwgNiwgMTEsIDUsIC0xLCAtMSwgMTgsIDE2LCAxNywgOCwgMTcsIDYsIDE5LCA1LCAyMSwgNSwgMjMsIDcsIDI0LCAxMCwgMjQsIDEyLCAyMywgMTUsIDIyLCAxNywgMjAsIDE5LCAxOCwgMjAsIDE1LCAyMSwgMTIsIDIxLCA5LCAyMCwgNywgMTksIDUsIDE3LCA0LCAxNSwgMywgMTIsIDMsIDksIDQsIDYsIDUsIDQsIDcsIDIsIDksIDEsIDEyLCAwLCAxNSwgMCwgMTgsIDEsIDIwLCAyLCAyMSwgMywgLTEsIC0xLCAxOSwgMTYsIDE4LCA4LCAxOCwgNiwgMTksIDVdXSxcbiAgICBcIkFcIjogWzE4LCBbOSwgMjEsIDEsIDAsIC0xLCAtMSwgOSwgMjEsIDE3LCAwLCAtMSwgLTEsIDQsIDcsIDE0LCA3XV0sXG4gICAgXCJCXCI6IFsyMSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxMywgMjEsIDE2LCAyMCwgMTcsIDE5LCAxOCwgMTcsIDE4LCAxNSwgMTcsIDEzLCAxNiwgMTIsIDEzLCAxMSwgLTEsIC0xLCA0LCAxMSwgMTMsIDExLCAxNiwgMTAsIDE3LCA5LCAxOCwgNywgMTgsIDQsIDE3LCAyLCAxNiwgMSwgMTMsIDAsIDQsIDBdXSxcbiAgICBcIkNcIjogWzIxLCBbMTgsIDE2LCAxNywgMTgsIDE1LCAyMCwgMTMsIDIxLCA5LCAyMSwgNywgMjAsIDUsIDE4LCA0LCAxNiwgMywgMTMsIDMsIDgsIDQsIDUsIDUsIDMsIDcsIDEsIDksIDAsIDEzLCAwLCAxNSwgMSwgMTcsIDMsIDE4LCA1XV0sXG4gICAgXCJEXCI6IFsyMSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxMSwgMjEsIDE0LCAyMCwgMTYsIDE4LCAxNywgMTYsIDE4LCAxMywgMTgsIDgsIDE3LCA1LCAxNiwgMywgMTQsIDEsIDExLCAwLCA0LCAwXV0sXG4gICAgXCJFXCI6IFsxOSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxNywgMjEsIC0xLCAtMSwgNCwgMTEsIDEyLCAxMSwgLTEsIC0xLCA0LCAwLCAxNywgMF1dLFxuICAgIFwiRlwiOiBbMTgsIFs0LCAyMSwgNCwgMCwgLTEsIC0xLCA0LCAyMSwgMTcsIDIxLCAtMSwgLTEsIDQsIDExLCAxMiwgMTFdXSxcbiAgICBcIkdcIjogWzIxLCBbMTgsIDE2LCAxNywgMTgsIDE1LCAyMCwgMTMsIDIxLCA5LCAyMSwgNywgMjAsIDUsIDE4LCA0LCAxNiwgMywgMTMsIDMsIDgsIDQsIDUsIDUsIDMsIDcsIDEsIDksIDAsIDEzLCAwLCAxNSwgMSwgMTcsIDMsIDE4LCA1LCAxOCwgOCwgLTEsIC0xLCAxMywgOCwgMTgsIDhdXSxcbiAgICBcIkhcIjogWzIyLCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgMTgsIDIxLCAxOCwgMCwgLTEsIC0xLCA0LCAxMSwgMTgsIDExXV0sXG4gICAgXCJJXCI6IFs4LCBbNCwgMjEsIDQsIDBdXSxcbiAgICBcIkpcIjogWzE2LCBbMTIsIDIxLCAxMiwgNSwgMTEsIDIsIDEwLCAxLCA4LCAwLCA2LCAwLCA0LCAxLCAzLCAyLCAyLCA1LCAyLCA3XV0sXG4gICAgXCJLXCI6IFsyMSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDE4LCAyMSwgNCwgNywgLTEsIC0xLCA5LCAxMiwgMTgsIDBdXSxcbiAgICBcIkxcIjogWzE3LCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMCwgMTYsIDBdXSxcbiAgICBcIk1cIjogWzI0LCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMjEsIDEyLCAwLCAtMSwgLTEsIDIwLCAyMSwgMTIsIDAsIC0xLCAtMSwgMjAsIDIxLCAyMCwgMF1dLFxuICAgIFwiTlwiOiBbMjIsIFs0LCAyMSwgNCwgMCwgLTEsIC0xLCA0LCAyMSwgMTgsIDAsIC0xLCAtMSwgMTgsIDIxLCAxOCwgMF1dLFxuICAgIFwiT1wiOiBbMjIsIFs5LCAyMSwgNywgMjAsIDUsIDE4LCA0LCAxNiwgMywgMTMsIDMsIDgsIDQsIDUsIDUsIDMsIDcsIDEsIDksIDAsIDEzLCAwLCAxNSwgMSwgMTcsIDMsIDE4LCA1LCAxOSwgOCwgMTksIDEzLCAxOCwgMTYsIDE3LCAxOCwgMTUsIDIwLCAxMywgMjEsIDksIDIxXV0sXG4gICAgXCJQXCI6IFsyMSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxMywgMjEsIDE2LCAyMCwgMTcsIDE5LCAxOCwgMTcsIDE4LCAxNCwgMTcsIDEyLCAxNiwgMTEsIDEzLCAxMCwgNCwgMTBdXSxcbiAgICBcIlFcIjogWzIyLCBbOSwgMjEsIDcsIDIwLCA1LCAxOCwgNCwgMTYsIDMsIDEzLCAzLCA4LCA0LCA1LCA1LCAzLCA3LCAxLCA5LCAwLCAxMywgMCwgMTUsIDEsIDE3LCAzLCAxOCwgNSwgMTksIDgsIDE5LCAxMywgMTgsIDE2LCAxNywgMTgsIDE1LCAyMCwgMTMsIDIxLCA5LCAyMSwgLTEsIC0xLCAxMiwgNCwgMTgsIC0yXV0sXG4gICAgXCJSXCI6IFsyMSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxMywgMjEsIDE2LCAyMCwgMTcsIDE5LCAxOCwgMTcsIDE4LCAxNSwgMTcsIDEzLCAxNiwgMTIsIDEzLCAxMSwgNCwgMTEsIC0xLCAtMSwgMTEsIDExLCAxOCwgMF1dLFxuICAgIFwiU1wiOiBbMjAsIFsxNywgMTgsIDE1LCAyMCwgMTIsIDIxLCA4LCAyMSwgNSwgMjAsIDMsIDE4LCAzLCAxNiwgNCwgMTQsIDUsIDEzLCA3LCAxMiwgMTMsIDEwLCAxNSwgOSwgMTYsIDgsIDE3LCA2LCAxNywgMywgMTUsIDEsIDEyLCAwLCA4LCAwLCA1LCAxLCAzLCAzXV0sXG4gICAgXCJUXCI6IFsxNiwgWzgsIDIxLCA4LCAwLCAtMSwgLTEsIDEsIDIxLCAxNSwgMjFdXSxcbiAgICBcIlVcIjogWzIyLCBbNCwgMjEsIDQsIDYsIDUsIDMsIDcsIDEsIDEwLCAwLCAxMiwgMCwgMTUsIDEsIDE3LCAzLCAxOCwgNiwgMTgsIDIxXV0sXG4gICAgXCJWXCI6IFsxOCwgWzEsIDIxLCA5LCAwLCAtMSwgLTEsIDE3LCAyMSwgOSwgMF1dLFxuICAgIFwiV1wiOiBbMjQsIFsyLCAyMSwgNywgMCwgLTEsIC0xLCAxMiwgMjEsIDcsIDAsIC0xLCAtMSwgMTIsIDIxLCAxNywgMCwgLTEsIC0xLCAyMiwgMjEsIDE3LCAwXV0sXG4gICAgXCJYXCI6IFsyMCwgWzMsIDIxLCAxNywgMCwgLTEsIC0xLCAxNywgMjEsIDMsIDBdXSxcbiAgICBcIllcIjogWzE4LCBbMSwgMjEsIDksIDExLCA5LCAwLCAtMSwgLTEsIDE3LCAyMSwgOSwgMTFdXSxcbiAgICBcIlpcIjogWzIwLCBbMTcsIDIxLCAzLCAwLCAtMSwgLTEsIDMsIDIxLCAxNywgMjEsIC0xLCAtMSwgMywgMCwgMTcsIDBdXSxcbiAgICBcIltcIjogWzE0LCBbNCwgMjUsIDQsIC03LCAtMSwgLTEsIDUsIDI1LCA1LCAtNywgLTEsIC0xLCA0LCAyNSwgMTEsIDI1LCAtMSwgLTEsIDQsIC03LCAxMSwgLTddXSxcbiAgICBcIlxcXFxcIjogWzE0LCBbMCwgMjEsIDE0LCAtM11dLFxuICAgIFwiXVwiOiBbMTQsIFs5LCAyNSwgOSwgLTcsIC0xLCAtMSwgMTAsIDI1LCAxMCwgLTcsIC0xLCAtMSwgMywgMjUsIDEwLCAyNSwgLTEsIC0xLCAzLCAtNywgMTAsIC03XV0sXG4gICAgXCJeXCI6IFsxNiwgWzYsIDE1LCA4LCAxOCwgMTAsIDE1LCAtMSwgLTEsIDMsIDEyLCA4LCAxNywgMTMsIDEyLCAtMSwgLTEsIDgsIDE3LCA4LCAwXV0sXG4gICAgXCJfXCI6IFsxNiwgWzAsIC0yLCAxNiwgLTJdXSxcbiAgICBcImBcIjogWzEwLCBbNiwgMjEsIDUsIDIwLCA0LCAxOCwgNCwgMTYsIDUsIDE1LCA2LCAxNiwgNSwgMTddXSxcbiAgICBcImFcIjogWzE5LCBbMTUsIDE0LCAxNSwgMCwgLTEsIC0xLCAxNSwgMTEsIDEzLCAxMywgMTEsIDE0LCA4LCAxNCwgNiwgMTMsIDQsIDExLCAzLCA4LCAzLCA2LCA0LCAzLCA2LCAxLCA4LCAwLCAxMSwgMCwgMTMsIDEsIDE1LCAzXV0sXG4gICAgXCJiXCI6IFsxOSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDExLCA2LCAxMywgOCwgMTQsIDExLCAxNCwgMTMsIDEzLCAxNSwgMTEsIDE2LCA4LCAxNiwgNiwgMTUsIDMsIDEzLCAxLCAxMSwgMCwgOCwgMCwgNiwgMSwgNCwgM11dLFxuICAgIFwiY1wiOiBbMTgsIFsxNSwgMTEsIDEzLCAxMywgMTEsIDE0LCA4LCAxNCwgNiwgMTMsIDQsIDExLCAzLCA4LCAzLCA2LCA0LCAzLCA2LCAxLCA4LCAwLCAxMSwgMCwgMTMsIDEsIDE1LCAzXV0sXG4gICAgXCJkXCI6IFsxOSwgWzE1LCAyMSwgMTUsIDAsIC0xLCAtMSwgMTUsIDExLCAxMywgMTMsIDExLCAxNCwgOCwgMTQsIDYsIDEzLCA0LCAxMSwgMywgOCwgMywgNiwgNCwgMywgNiwgMSwgOCwgMCwgMTEsIDAsIDEzLCAxLCAxNSwgM11dLFxuICAgIFwiZVwiOiBbMTgsIFszLCA4LCAxNSwgOCwgMTUsIDEwLCAxNCwgMTIsIDEzLCAxMywgMTEsIDE0LCA4LCAxNCwgNiwgMTMsIDQsIDExLCAzLCA4LCAzLCA2LCA0LCAzLCA2LCAxLCA4LCAwLCAxMSwgMCwgMTMsIDEsIDE1LCAzXV0sXG4gICAgXCJmXCI6IFsxMiwgWzEwLCAyMSwgOCwgMjEsIDYsIDIwLCA1LCAxNywgNSwgMCwgLTEsIC0xLCAyLCAxNCwgOSwgMTRdXSxcbiAgICBcImdcIjogWzE5LCBbMTUsIDE0LCAxNSwgLTIsIDE0LCAtNSwgMTMsIC02LCAxMSwgLTcsIDgsIC03LCA2LCAtNiwgLTEsIC0xLCAxNSwgMTEsIDEzLCAxMywgMTEsIDE0LCA4LCAxNCwgNiwgMTMsIDQsIDExLCAzLCA4LCAzLCA2LCA0LCAzLCA2LCAxLCA4LCAwLCAxMSwgMCwgMTMsIDEsIDE1LCAzXV0sXG4gICAgXCJoXCI6IFsxOSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDEwLCA3LCAxMywgOSwgMTQsIDEyLCAxNCwgMTQsIDEzLCAxNSwgMTAsIDE1LCAwXV0sXG4gICAgXCJpXCI6IFs4LCBbMywgMjEsIDQsIDIwLCA1LCAyMSwgNCwgMjIsIDMsIDIxLCAtMSwgLTEsIDQsIDE0LCA0LCAwXV0sXG4gICAgXCJqXCI6IFsxMCwgWzUsIDIxLCA2LCAyMCwgNywgMjEsIDYsIDIyLCA1LCAyMSwgLTEsIC0xLCA2LCAxNCwgNiwgLTMsIDUsIC02LCAzLCAtNywgMSwgLTddXSxcbiAgICBcImtcIjogWzE3LCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgMTQsIDE0LCA0LCA0LCAtMSwgLTEsIDgsIDgsIDE1LCAwXV0sXG4gICAgXCJsXCI6IFs4LCBbNCwgMjEsIDQsIDBdXSxcbiAgICBcIm1cIjogWzMwLCBbNCwgMTQsIDQsIDAsIC0xLCAtMSwgNCwgMTAsIDcsIDEzLCA5LCAxNCwgMTIsIDE0LCAxNCwgMTMsIDE1LCAxMCwgMTUsIDAsIC0xLCAtMSwgMTUsIDEwLCAxOCwgMTMsIDIwLCAxNCwgMjMsIDE0LCAyNSwgMTMsIDI2LCAxMCwgMjYsIDBdXSxcbiAgICBcIm5cIjogWzE5LCBbNCwgMTQsIDQsIDAsIC0xLCAtMSwgNCwgMTAsIDcsIDEzLCA5LCAxNCwgMTIsIDE0LCAxNCwgMTMsIDE1LCAxMCwgMTUsIDBdXSxcbiAgICBcIm9cIjogWzE5LCBbOCwgMTQsIDYsIDEzLCA0LCAxMSwgMywgOCwgMywgNiwgNCwgMywgNiwgMSwgOCwgMCwgMTEsIDAsIDEzLCAxLCAxNSwgMywgMTYsIDYsIDE2LCA4LCAxNSwgMTEsIDEzLCAxMywgMTEsIDE0LCA4LCAxNF1dLFxuICAgIFwicFwiOiBbMTksIFs0LCAxNCwgNCwgLTcsIC0xLCAtMSwgNCwgMTEsIDYsIDEzLCA4LCAxNCwgMTEsIDE0LCAxMywgMTMsIDE1LCAxMSwgMTYsIDgsIDE2LCA2LCAxNSwgMywgMTMsIDEsIDExLCAwLCA4LCAwLCA2LCAxLCA0LCAzXV0sXG4gICAgXCJxXCI6IFsxOSwgWzE1LCAxNCwgMTUsIC03LCAtMSwgLTEsIDE1LCAxMSwgMTMsIDEzLCAxMSwgMTQsIDgsIDE0LCA2LCAxMywgNCwgMTEsIDMsIDgsIDMsIDYsIDQsIDMsIDYsIDEsIDgsIDAsIDExLCAwLCAxMywgMSwgMTUsIDNdXSxcbiAgICBcInJcIjogWzEzLCBbNCwgMTQsIDQsIDAsIC0xLCAtMSwgNCwgOCwgNSwgMTEsIDcsIDEzLCA5LCAxNCwgMTIsIDE0XV0sXG4gICAgXCJzXCI6IFsxNywgWzE0LCAxMSwgMTMsIDEzLCAxMCwgMTQsIDcsIDE0LCA0LCAxMywgMywgMTEsIDQsIDksIDYsIDgsIDExLCA3LCAxMywgNiwgMTQsIDQsIDE0LCAzLCAxMywgMSwgMTAsIDAsIDcsIDAsIDQsIDEsIDMsIDNdXSxcbiAgICBcInRcIjogWzEyLCBbNSwgMjEsIDUsIDQsIDYsIDEsIDgsIDAsIDEwLCAwLCAtMSwgLTEsIDIsIDE0LCA5LCAxNF1dLFxuICAgIFwidVwiOiBbMTksIFs0LCAxNCwgNCwgNCwgNSwgMSwgNywgMCwgMTAsIDAsIDEyLCAxLCAxNSwgNCwgLTEsIC0xLCAxNSwgMTQsIDE1LCAwXV0sXG4gICAgXCJ2XCI6IFsxNiwgWzIsIDE0LCA4LCAwLCAtMSwgLTEsIDE0LCAxNCwgOCwgMF1dLFxuICAgIFwid1wiOiBbMjIsIFszLCAxNCwgNywgMCwgLTEsIC0xLCAxMSwgMTQsIDcsIDAsIC0xLCAtMSwgMTEsIDE0LCAxNSwgMCwgLTEsIC0xLCAxOSwgMTQsIDE1LCAwXV0sXG4gICAgXCJ4XCI6IFsxNywgWzMsIDE0LCAxNCwgMCwgLTEsIC0xLCAxNCwgMTQsIDMsIDBdXSxcbiAgICBcInlcIjogWzE2LCBbMiwgMTQsIDgsIDAsIC0xLCAtMSwgMTQsIDE0LCA4LCAwLCA2LCAtNCwgNCwgLTYsIDIsIC03LCAxLCAtN11dLFxuICAgIFwielwiOiBbMTcsIFsxNCwgMTQsIDMsIDAsIC0xLCAtMSwgMywgMTQsIDE0LCAxNCwgLTEsIC0xLCAzLCAwLCAxNCwgMF1dLFxuICAgIFwie1wiOiBbMTQsIFs5LCAyNSwgNywgMjQsIDYsIDIzLCA1LCAyMSwgNSwgMTksIDYsIDE3LCA3LCAxNiwgOCwgMTQsIDgsIDEyLCA2LCAxMCwgLTEsIC0xLCA3LCAyNCwgNiwgMjIsIDYsIDIwLCA3LCAxOCwgOCwgMTcsIDksIDE1LCA5LCAxMywgOCwgMTEsIDQsIDksIDgsIDcsIDksIDUsIDksIDMsIDgsIDEsIDcsIDAsIDYsIC0yLCA2LCAtNCwgNywgLTYsIC0xLCAtMSwgNiwgOCwgOCwgNiwgOCwgNCwgNywgMiwgNiwgMSwgNSwgLTEsIDUsIC0zLCA2LCAtNSwgNywgLTYsIDksIC03XV0sXG4gICAgXCJ8XCI6IFs4LCBbNCwgMjUsIDQsIC03XV0sXG4gICAgXCJ9XCI6IFsxNCwgWzUsIDI1LCA3LCAyNCwgOCwgMjMsIDksIDIxLCA5LCAxOSwgOCwgMTcsIDcsIDE2LCA2LCAxNCwgNiwgMTIsIDgsIDEwLCAtMSwgLTEsIDcsIDI0LCA4LCAyMiwgOCwgMjAsIDcsIDE4LCA2LCAxNywgNSwgMTUsIDUsIDEzLCA2LCAxMSwgMTAsIDksIDYsIDcsIDUsIDUsIDUsIDMsIDYsIDEsIDcsIDAsIDgsIC0yLCA4LCAtNCwgNywgLTYsIC0xLCAtMSwgOCwgOCwgNiwgNiwgNiwgNCwgNywgMiwgOCwgMSwgOSwgLTEsIDksIC0zLCA4LCAtNSwgNywgLTYsIDUsIC03XV0sXG4gICAgXCJ+XCI6IFsyNCwgWzMsIDYsIDMsIDgsIDQsIDExLCA2LCAxMiwgOCwgMTIsIDEwLCAxMSwgMTQsIDgsIDE2LCA3LCAxOCwgNywgMjAsIDgsIDIxLCAxMCwgLTEsIC0xLCAzLCA4LCA0LCAxMCwgNiwgMTEsIDgsIDExLCAxMCwgMTAsIDE0LCA3LCAxNiwgNiwgMTgsIDYsIDIwLCA3LCAyMSwgMTAsIDIxLCAxMl1dXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVUZXh0VmVydGljZXModGV4dCwgbGVmdCwgYmFzZWxpbmUsIHNjYWxlKSB7XG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxO1xuXG4gICAgY29uc3Qgc3Ryb2tlcyA9IFtdO1xuICAgIGxldCBpLCBsZW4sIGosIGxlbjIsIGdseXBoLCB4LCB5LCBwcmV2O1xuXG4gICAgZm9yIChpID0gMCwgbGVuID0gdGV4dC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBnbHlwaCA9IHNpbXBsZXhGb250W3RleHRbaV1dO1xuICAgICAgICBpZiAoIWdseXBoKSBjb250aW51ZTtcbiAgICAgICAgcHJldiA9IG51bGw7XG5cbiAgICAgICAgZm9yIChqID0gMCwgbGVuMiA9IGdseXBoWzFdLmxlbmd0aDsgaiA8IGxlbjI7IGogKz0gMikge1xuICAgICAgICAgICAgaWYgKGdseXBoWzFdW2pdID09PSAtMSAmJiBnbHlwaFsxXVtqICsgMV0gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcHJldiA9IG51bGw7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeCA9IGxlZnQgKyBnbHlwaFsxXVtqXSAqIHNjYWxlO1xuICAgICAgICAgICAgICAgIHkgPSBiYXNlbGluZSAtIGdseXBoWzFdW2ogKyAxXSAqIHNjYWxlO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZXMucHVzaChwcmV2LngsIHByZXYueSwgeCwgeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByZXYgPSB7eCwgeX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGVmdCArPSBnbHlwaFswXSAqIHNjYWxlO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJva2VzO1xufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0N1c3RvbTtcblxuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIEN1c3RvbVN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcblxuZnVuY3Rpb24gZHJhd0N1c3RvbShwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBDdXN0b21TdHlsZUxheWVyKSB7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGltcGxlbWVudGF0aW9uID0gbGF5ZXIuaW1wbGVtZW50YXRpb247XG5cbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAnb2Zmc2NyZWVuJykge1xuXG4gICAgICAgIGNvbnN0IHByZXJlbmRlciA9IGltcGxlbWVudGF0aW9uLnByZXJlbmRlcjtcbiAgICAgICAgaWYgKHByZXJlbmRlcikge1xuICAgICAgICAgICAgcGFpbnRlci5zZXRDdXN0b21MYXllckRlZmF1bHRzKCk7XG4gICAgICAgICAgICBjb250ZXh0LnNldENvbG9yTW9kZShwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7XG5cbiAgICAgICAgICAgIHByZXJlbmRlci5jYWxsKGltcGxlbWVudGF0aW9uLCBjb250ZXh0LmdsLCBwYWludGVyLnRyYW5zZm9ybS5jdXN0b21MYXllck1hdHJpeCgpKTtcblxuICAgICAgICAgICAgY29udGV4dC5zZXREaXJ0eSgpO1xuICAgICAgICAgICAgcGFpbnRlci5zZXRCYXNlU3RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcpIHtcblxuICAgICAgICBwYWludGVyLnNldEN1c3RvbUxheWVyRGVmYXVsdHMoKTtcblxuICAgICAgICBjb250ZXh0LnNldENvbG9yTW9kZShwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7XG4gICAgICAgIGNvbnRleHQuc2V0U3RlbmNpbE1vZGUoU3RlbmNpbE1vZGUuZGlzYWJsZWQpO1xuXG4gICAgICAgIGNvbnN0IGRlcHRoTW9kZSA9IGltcGxlbWVudGF0aW9uLnJlbmRlcmluZ01vZGUgPT09ICczZCcgP1xuICAgICAgICAgICAgbmV3IERlcHRoTW9kZShwYWludGVyLmNvbnRleHQuZ2wuTEVRVUFMLCBEZXB0aE1vZGUuUmVhZFdyaXRlLCBwYWludGVyLmRlcHRoUmFuZ2VGb3IzRCkgOlxuICAgICAgICAgICAgcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuXG4gICAgICAgIGNvbnRleHQuc2V0RGVwdGhNb2RlKGRlcHRoTW9kZSk7XG5cbiAgICAgICAgaW1wbGVtZW50YXRpb24ucmVuZGVyKGNvbnRleHQuZ2wsIHBhaW50ZXIudHJhbnNmb3JtLmN1c3RvbUxheWVyTWF0cml4KCkpO1xuXG4gICAgICAgIGNvbnRleHQuc2V0RGlydHkoKTtcbiAgICAgICAgcGFpbnRlci5zZXRCYXNlU3RhdGUoKTtcbiAgICAgICAgY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHtSYXN0ZXJCb3VuZHNBcnJheSwgUG9zQXJyYXksIFRyaWFuZ2xlSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgcmFzdGVyQm91bmRzQXR0cmlidXRlcyBmcm9tICcuLi9kYXRhL3Jhc3Rlcl9ib3VuZHNfYXR0cmlidXRlcyc7XG5pbXBvcnQgcG9zQXR0cmlidXRlcyBmcm9tICcuLi9kYXRhL3Bvc19hdHRyaWJ1dGVzJztcbmltcG9ydCBQcm9ncmFtQ29uZmlndXJhdGlvbiBmcm9tICcuLi9kYXRhL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQgQ3Jvc3NUaWxlU3ltYm9sSW5kZXggZnJvbSAnLi4vc3ltYm9sL2Nyb3NzX3RpbGVfc3ltYm9sX2luZGV4JztcbmltcG9ydCAqIGFzIHNoYWRlcnMgZnJvbSAnLi4vc2hhZGVycyc7XG5pbXBvcnQgUHJvZ3JhbSBmcm9tICcuL3Byb2dyYW0nO1xuaW1wb3J0IHtwcm9ncmFtVW5pZm9ybXN9IGZyb20gJy4vcHJvZ3JhbS9wcm9ncmFtX3VuaWZvcm1zJztcbmltcG9ydCBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IENvbG9yTW9kZSBmcm9tICcuLi9nbC9jb2xvcl9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi90ZXh0dXJlJztcbmltcG9ydCB1cGRhdGVUaWxlTWFza3MgZnJvbSAnLi90aWxlX21hc2snO1xuaW1wb3J0IHtjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vY2xpcHBpbmdfbWFza19wcm9ncmFtJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHN5bWJvbCBmcm9tICcuL2RyYXdfc3ltYm9sJztcbmltcG9ydCBjaXJjbGUgZnJvbSAnLi9kcmF3X2NpcmNsZSc7XG5pbXBvcnQgaGVhdG1hcCBmcm9tICcuL2RyYXdfaGVhdG1hcCc7XG5pbXBvcnQgbGluZSBmcm9tICcuL2RyYXdfbGluZSc7XG5pbXBvcnQgZmlsbCBmcm9tICcuL2RyYXdfZmlsbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvbiBmcm9tICcuL2RyYXdfZmlsbF9leHRydXNpb24nO1xuaW1wb3J0IGhpbGxzaGFkZSBmcm9tICcuL2RyYXdfaGlsbHNoYWRlJztcbmltcG9ydCByYXN0ZXIgZnJvbSAnLi9kcmF3X3Jhc3Rlcic7XG5pbXBvcnQgYmFja2dyb3VuZCBmcm9tICcuL2RyYXdfYmFja2dyb3VuZCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnLi9kcmF3X2RlYnVnJztcbmltcG9ydCBjdXN0b20gZnJvbSAnLi9kcmF3X2N1c3RvbSc7XG5cbmNvbnN0IGRyYXcgPSB7XG4gICAgc3ltYm9sLFxuICAgIGNpcmNsZSxcbiAgICBoZWF0bWFwLFxuICAgIGxpbmUsXG4gICAgZmlsbCxcbiAgICAnZmlsbC1leHRydXNpb24nOiBmaWxsRXh0cnVzaW9uLFxuICAgIGhpbGxzaGFkZSxcbiAgICByYXN0ZXIsXG4gICAgYmFja2dyb3VuZCxcbiAgICBkZWJ1ZyxcbiAgICBjdXN0b21cbn07XG5cbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIFN0eWxlIGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0Nyb3NzRmFkZWR9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgTGluZUF0bGFzIGZyb20gJy4vbGluZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSBJbWFnZU1hbmFnZXIgZnJvbSAnLi9pbWFnZV9tYW5hZ2VyJztcbmltcG9ydCB0eXBlIEdseXBoTWFuYWdlciBmcm9tICcuL2dseXBoX21hbmFnZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtEZXB0aFJhbmdlVHlwZSwgRGVwdGhNYXNrVHlwZSwgRGVwdGhGdW5jVHlwZX0gZnJvbSAnLi4vZ2wvdHlwZXMnO1xuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJQYXNzID0gJ29mZnNjcmVlbicgfCAnb3BhcXVlJyB8ICd0cmFuc2x1Y2VudCc7XG5cbnR5cGUgUGFpbnRlck9wdGlvbnMgPSB7XG4gICAgc2hvd092ZXJkcmF3SW5zcGVjdG9yOiBib29sZWFuLFxuICAgIHNob3dUaWxlQm91bmRhcmllczogYm9vbGVhbixcbiAgICByb3RhdGluZzogYm9vbGVhbixcbiAgICB6b29taW5nOiBib29sZWFuLFxuICAgIG1vdmluZzogYm9vbGVhbixcbiAgICBmYWRlRHVyYXRpb246IG51bWJlclxufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgcGFpbnRlciBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtDYW52YXN9IGdsIGFuIGV4cGVyaW1lbnRhbC13ZWJnbCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBhaW50ZXIge1xuICAgIGNvbnRleHQ6IENvbnRleHQ7XG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm07XG4gICAgX3RpbGVUZXh0dXJlczogeyBbbnVtYmVyXTogQXJyYXk8VGV4dHVyZT4gfTtcbiAgICBudW1TdWJsYXllcnM6IG51bWJlcjtcbiAgICBkZXB0aEVwc2lsb246IG51bWJlcjtcbiAgICBlbXB0eVByb2dyYW1Db25maWd1cmF0aW9uOiBQcm9ncmFtQ29uZmlndXJhdGlvbjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIGRlcHRoUmJvOiBXZWJHTFJlbmRlcmJ1ZmZlcjtcbiAgICBkZXB0aFJib05lZWRzQ2xlYXI6IGJvb2xlYW47XG4gICAgdGlsZUV4dGVudEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIHRpbGVFeHRlbnRTZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBkZWJ1Z0J1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIGRlYnVnU2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgcmFzdGVyQm91bmRzQnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG4gICAgcmFzdGVyQm91bmRzU2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdmlld3BvcnRCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcbiAgICB2aWV3cG9ydFNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIHF1YWRUcmlhbmdsZUluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcbiAgICB0aWxlQm9yZGVySW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuICAgIF90aWxlQ2xpcHBpbmdNYXNrSURzOiB7IFtudW1iZXJdOiBudW1iZXIgfTtcbiAgICBzdGVuY2lsQ2xlYXJNb2RlOiBTdGVuY2lsTW9kZTtcbiAgICBzdHlsZTogU3R5bGU7XG4gICAgb3B0aW9uczogUGFpbnRlck9wdGlvbnM7XG4gICAgbGluZUF0bGFzOiBMaW5lQXRsYXM7XG4gICAgaW1hZ2VNYW5hZ2VyOiBJbWFnZU1hbmFnZXI7XG4gICAgZ2x5cGhNYW5hZ2VyOiBHbHlwaE1hbmFnZXI7XG4gICAgZGVwdGhSYW5nZUZvcjNEOiBEZXB0aFJhbmdlVHlwZTtcbiAgICBvcGFxdWVQYXNzQ3V0b2ZmOiBudW1iZXI7XG4gICAgcmVuZGVyUGFzczogUmVuZGVyUGFzcztcbiAgICBjdXJyZW50TGF5ZXI6IG51bWJlcjtcbiAgICBjdXJyZW50U3RlbmNpbFNvdXJjZTogP3N0cmluZztcbiAgICBuZXh0U3RlbmNpbElEOiBudW1iZXI7XG4gICAgaWQ6IHN0cmluZztcbiAgICBfc2hvd092ZXJkcmF3SW5zcGVjdG9yOiBib29sZWFuO1xuICAgIGNhY2hlOiB7IFtzdHJpbmddOiBQcm9ncmFtPCo+IH07XG4gICAgY3Jvc3NUaWxlU3ltYm9sSW5kZXg6IENyb3NzVGlsZVN5bWJvbEluZGV4O1xuICAgIHN5bWJvbEZhZGVDaGFuZ2U6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KGdsKTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgIHRoaXMuX3RpbGVUZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgIHRoaXMuc2V0dXAoKTtcblxuICAgICAgICAvLyBXaXRoaW4gZWFjaCBsYXllciB0aGVyZSBhcmUgbXVsdGlwbGUgZGlzdGluY3Qgei1wbGFuZXMgdGhhdCBjYW4gYmUgZHJhd24gdG8uXG4gICAgICAgIC8vIFRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIFdlYkdMIGRlcHRoIGJ1ZmZlci5cbiAgICAgICAgdGhpcy5udW1TdWJsYXllcnMgPSBTb3VyY2VDYWNoZS5tYXhVbmRlcnpvb21pbmcgKyBTb3VyY2VDYWNoZS5tYXhPdmVyem9vbWluZyArIDE7XG4gICAgICAgIHRoaXMuZGVwdGhFcHNpbG9uID0gMSAvIE1hdGgucG93KDIsIDE2KTtcblxuICAgICAgICB0aGlzLmRlcHRoUmJvTmVlZHNDbGVhciA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5lbXB0eVByb2dyYW1Db25maWd1cmF0aW9uID0gbmV3IFByb2dyYW1Db25maWd1cmF0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleCA9IG5ldyBDcm9zc1RpbGVTeW1ib2xJbmRleCgpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogVXBkYXRlIHRoZSBHTCB2aWV3cG9ydCwgcHJvamVjdGlvbiBtYXRyaXgsIGFuZCB0cmFuc2Zvcm1zIHRvIGNvbXBlbnNhdGVcbiAgICAgKiBmb3IgYSBuZXcgd2lkdGggYW5kIGhlaWdodCB2YWx1ZS5cbiAgICAgKi9cbiAgICByZXNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgdGhpcy5jb250ZXh0LnZpZXdwb3J0LnNldChbMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdKTtcblxuICAgICAgICBpZiAodGhpcy5zdHlsZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIHRoaXMuc3R5bGUuX29yZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5fbGF5ZXJzW2xheWVySWRdLnJlc2l6ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGVwdGhSYm8pIHtcbiAgICAgICAgICAgIGdsLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLmRlcHRoUmJvKTtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYm8gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0dXAoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICAgICAgY29uc3QgdGlsZUV4dGVudEFycmF5ID0gbmV3IFBvc0FycmF5KCk7XG4gICAgICAgIHRpbGVFeHRlbnRBcnJheS5lbXBsYWNlQmFjaygwLCAwKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCk7XG4gICAgICAgIHRpbGVFeHRlbnRBcnJheS5lbXBsYWNlQmFjaygwLCBFWFRFTlQpO1xuICAgICAgICB0aWxlRXh0ZW50QXJyYXkuZW1wbGFjZUJhY2soRVhURU5ULCBFWFRFTlQpO1xuICAgICAgICB0aGlzLnRpbGVFeHRlbnRCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aWxlRXh0ZW50QXJyYXksIHBvc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgIHRoaXMudGlsZUV4dGVudFNlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuXG4gICAgICAgIGNvbnN0IGRlYnVnQXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgZGVidWdBcnJheS5lbXBsYWNlQmFjaygwLCAwKTtcbiAgICAgICAgZGVidWdBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIDApO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKDAsIEVYVEVOVCk7XG4gICAgICAgIGRlYnVnQXJyYXkuZW1wbGFjZUJhY2soRVhURU5ULCBFWFRFTlQpO1xuICAgICAgICB0aGlzLmRlYnVnQnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIoZGVidWdBcnJheSwgcG9zQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy5kZWJ1Z1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDUpO1xuXG4gICAgICAgIGNvbnN0IHJhc3RlckJvdW5kc0FycmF5ID0gbmV3IFJhc3RlckJvdW5kc0FycmF5KCk7XG4gICAgICAgIHJhc3RlckJvdW5kc0FycmF5LmVtcGxhY2VCYWNrKDAsIDAsIDAsIDApO1xuICAgICAgICByYXN0ZXJCb3VuZHNBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIDAsIEVYVEVOVCwgMCk7XG4gICAgICAgIHJhc3RlckJvdW5kc0FycmF5LmVtcGxhY2VCYWNrKDAsIEVYVEVOVCwgMCwgRVhURU5UKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soRVhURU5ULCBFWFRFTlQsIEVYVEVOVCwgRVhURU5UKTtcbiAgICAgICAgdGhpcy5yYXN0ZXJCb3VuZHNCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcihyYXN0ZXJCb3VuZHNBcnJheSwgcmFzdGVyQm91bmRzQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy5yYXN0ZXJCb3VuZHNTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcblxuICAgICAgICBjb25zdCB2aWV3cG9ydEFycmF5ID0gbmV3IFBvc0FycmF5KCk7XG4gICAgICAgIHZpZXdwb3J0QXJyYXkuZW1wbGFjZUJhY2soMCwgMCk7XG4gICAgICAgIHZpZXdwb3J0QXJyYXkuZW1wbGFjZUJhY2soMSwgMCk7XG4gICAgICAgIHZpZXdwb3J0QXJyYXkuZW1wbGFjZUJhY2soMCwgMSk7XG4gICAgICAgIHZpZXdwb3J0QXJyYXkuZW1wbGFjZUJhY2soMSwgMSk7XG4gICAgICAgIHRoaXMudmlld3BvcnRCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih2aWV3cG9ydEFycmF5LCBwb3NBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLnZpZXdwb3J0U2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgMik7XG5cbiAgICAgICAgY29uc3QgdGlsZUxpbmVTdHJpcEluZGljZXMgPSBuZXcgTGluZVN0cmlwSW5kZXhBcnJheSgpO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygwKTtcbiAgICAgICAgdGlsZUxpbmVTdHJpcEluZGljZXMuZW1wbGFjZUJhY2soMSk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDMpO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygyKTtcbiAgICAgICAgdGlsZUxpbmVTdHJpcEluZGljZXMuZW1wbGFjZUJhY2soMCk7XG4gICAgICAgIHRoaXMudGlsZUJvcmRlckluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aWxlTGluZVN0cmlwSW5kaWNlcyk7XG5cbiAgICAgICAgY29uc3QgcXVhZFRyaWFuZ2xlSW5kaWNlcyA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgcXVhZFRyaWFuZ2xlSW5kaWNlcy5lbXBsYWNlQmFjaygwLCAxLCAyKTtcbiAgICAgICAgcXVhZFRyaWFuZ2xlSW5kaWNlcy5lbXBsYWNlQmFjaygyLCAxLCAzKTtcbiAgICAgICAgdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW5kZXhCdWZmZXIocXVhZFRyaWFuZ2xlSW5kaWNlcyk7XG5cbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuc3RlbmNpbENsZWFyTW9kZSA9IG5ldyBTdGVuY2lsTW9kZSh7ZnVuYzogZ2wuQUxXQVlTLCBtYXNrOiAwfSwgMHgwLCAweEZGLCBnbC5aRVJPLCBnbC5aRVJPLCBnbC5aRVJPKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlc2V0IHRoZSBkcmF3aW5nIGNhbnZhcyBieSBjbGVhcmluZyB0aGUgc3RlbmNpbCBidWZmZXIgc28gdGhhdCB3ZSBjYW4gZHJhd1xuICAgICAqIG5ldyB0aWxlcyBhdCB0aGUgc2FtZSBsb2NhdGlvbiwgd2hpbGUgcmV0YWluaW5nIHByZXZpb3VzbHkgZHJhd24gcGl4ZWxzLlxuICAgICAqL1xuICAgIGNsZWFyU3RlbmNpbCgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIHRoaXMubmV4dFN0ZW5jaWxJRCA9IDE7XG4gICAgICAgIHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gQXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzU0OTAsXG4gICAgICAgIC8vIHBlbmRpbmcgYW4gdXBzdHJlYW0gZml4LCB3ZSBkcmF3IGEgZnVsbHNjcmVlbiBzdGVuY2lsPTAgY2xpcHBpbmcgbWFzayBoZXJlLFxuICAgICAgICAvLyBlZmZlY3RpdmVseSBjbGVhcmluZyB0aGUgc3RlbmNpbCBidWZmZXI6IG9uY2UgYW4gdXBzdHJlYW0gcGF0Y2ggbGFuZHMsIHJlbW92ZVxuICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIGluIGZhdm9yIG9mIGNvbnRleHQuY2xlYXIoeyBzdGVuY2lsOiAweDAgfSlcblxuICAgICAgICBjb25zdCBtYXRyaXggPSBtYXQ0LmNyZWF0ZSgpO1xuICAgICAgICBtYXQ0Lm9ydGhvKG1hdHJpeCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIDAsIDEpO1xuICAgICAgICBtYXQ0LnNjYWxlKG1hdHJpeCwgbWF0cml4LCBbZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0LCAwXSk7XG5cbiAgICAgICAgdGhpcy51c2VQcm9ncmFtKCdjbGlwcGluZ01hc2snKS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUyxcbiAgICAgICAgICAgIERlcHRoTW9kZS5kaXNhYmxlZCwgdGhpcy5zdGVuY2lsQ2xlYXJNb2RlLCBDb2xvck1vZGUuZGlzYWJsZWQsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIGNsaXBwaW5nTWFza1VuaWZvcm1WYWx1ZXMobWF0cml4KSxcbiAgICAgICAgICAgICckY2xpcHBpbmcnLCB0aGlzLnZpZXdwb3J0QnVmZmVyLFxuICAgICAgICAgICAgdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgdGhpcy52aWV3cG9ydFNlZ21lbnRzKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MobGF5ZXI6IFN0eWxlTGF5ZXIsIHRpbGVJRHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlID09PSBsYXllci5zb3VyY2UgfHwgIWxheWVyLmlzVGlsZUNsaXBwZWQoKSB8fCAhdGlsZUlEcyB8fCAhdGlsZUlEcy5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlID0gbGF5ZXIuc291cmNlO1xuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAodGhpcy5uZXh0U3RlbmNpbElEICsgdGlsZUlEcy5sZW5ndGggPiAyNTYpIHtcbiAgICAgICAgICAgIC8vIHdlJ2xsIHJ1biBvdXQgb2YgZnJlc2ggSURzIHNvIHdlIG5lZWQgdG8gY2xlYXIgYW5kIHN0YXJ0IGZyb20gc2NyYXRjaFxuICAgICAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuc2V0Q29sb3JNb2RlKENvbG9yTW9kZS5kaXNhYmxlZCk7XG4gICAgICAgIGNvbnRleHQuc2V0RGVwdGhNb2RlKERlcHRoTW9kZS5kaXNhYmxlZCk7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHRoaXMudXNlUHJvZ3JhbSgnY2xpcHBpbmdNYXNrJyk7XG5cbiAgICAgICAgdGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEcyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgdGlsZUlEIG9mIHRpbGVJRHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1t0aWxlSUQua2V5XSA9IHRoaXMubmV4dFN0ZW5jaWxJRCsrO1xuXG4gICAgICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBEZXB0aE1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgLy8gVGVzdHMgd2lsbCBhbHdheXMgcGFzcywgYW5kIHJlZiB2YWx1ZSB3aWxsIGJlIHdyaXR0ZW4gdG8gc3RlbmNpbCBidWZmZXIuXG4gICAgICAgICAgICAgICAgbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBnbC5BTFdBWVMsIG1hc2s6IDB9LCBpZCwgMHhGRiwgZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuUkVQTEFDRSksXG4gICAgICAgICAgICAgICAgQ29sb3JNb2RlLmRpc2FibGVkLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsIGNsaXBwaW5nTWFza1VuaWZvcm1WYWx1ZXModGlsZUlELnBvc01hdHJpeCksXG4gICAgICAgICAgICAgICAgJyRjbGlwcGluZycsIHRoaXMudGlsZUV4dGVudEJ1ZmZlcixcbiAgICAgICAgICAgICAgICB0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCB0aGlzLnRpbGVFeHRlbnRTZWdtZW50cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGVuY2lsTW9kZUZvcjNEKCk6IFN0ZW5jaWxNb2RlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodGhpcy5uZXh0U3RlbmNpbElEICsgMSA+IDI1Nikge1xuICAgICAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0U3RlbmNpbElEKys7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICByZXR1cm4gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBnbC5OT1RFUVVBTCwgbWFzazogMHhGRn0sIGlkLCAweEZGLCBnbC5LRUVQLCBnbC5LRUVQLCBnbC5SRVBMQUNFKTtcbiAgICB9XG5cbiAgICBzdGVuY2lsTW9kZUZvckNsaXBwaW5nKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6IFN0ZW5jaWxNb2RlIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIHJldHVybiBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLkVRVUFMLCBtYXNrOiAweEZGfSwgdGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1t0aWxlSUQua2V5XSwgMHgwMCwgZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuUkVQTEFDRSk7XG4gICAgfVxuXG4gICAgY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpOiAkUmVhZE9ubHk8Q29sb3JNb2RlPiB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBpZiAodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBudW1PdmVyZHJhd1N0ZXBzID0gODtcbiAgICAgICAgICAgIGNvbnN0IGEgPSAxIC8gbnVtT3ZlcmRyYXdTdGVwcztcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvck1vZGUoW2dsLkNPTlNUQU5UX0NPTE9SLCBnbC5PTkVdLCBuZXcgQ29sb3IoYSwgYSwgYSwgMCksIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZW5kZXJQYXNzID09PSAnb3BhcXVlJykge1xuICAgICAgICAgICAgcmV0dXJuIENvbG9yTW9kZS51bmJsZW5kZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3JNb2RlLmFscGhhQmxlbmRlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlcHRoTW9kZUZvclN1YmxheWVyKG46IG51bWJlciwgbWFzazogRGVwdGhNYXNrVHlwZSwgZnVuYzogP0RlcHRoRnVuY1R5cGUpOiAkUmVhZE9ubHk8RGVwdGhNb2RlPiB7XG4gICAgICAgIGlmICghdGhpcy5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkpIHJldHVybiBEZXB0aE1vZGUuZGlzYWJsZWQ7XG4gICAgICAgIGNvbnN0IGRlcHRoID0gMSAtICgoMSArIHRoaXMuY3VycmVudExheWVyKSAqIHRoaXMubnVtU3VibGF5ZXJzICsgbikgKiB0aGlzLmRlcHRoRXBzaWxvbjtcbiAgICAgICAgcmV0dXJuIG5ldyBEZXB0aE1vZGUoZnVuYyB8fCB0aGlzLmNvbnRleHQuZ2wuTEVRVUFMLCBtYXNrLCBbZGVwdGgsIGRlcHRoXSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGUgb3BhcXVlIHBhc3MgYW5kIDNEIGxheWVycyBib3RoIHVzZSB0aGUgZGVwdGggYnVmZmVyLlxuICAgICAqIExheWVycyBkcmF3biBhYm92ZSAzRCBsYXllcnMgbmVlZCB0byBiZSBkcmF3biB1c2luZyB0aGVcbiAgICAgKiBwYWludGVyJ3MgYWxnb3JpdGhtIHNvIHRoYXQgdGhleSBhcHBlYXIgYWJvdmUgM0QgZmVhdHVyZXMuXG4gICAgICogVGhpcyByZXR1cm5zIHRydWUgZm9yIGxheWVycyB0aGF0IGNhbiBiZSBkcmF3biB1c2luZyB0aGVcbiAgICAgKiBvcGFxdWUgcGFzcy5cbiAgICAgKi9cbiAgICBvcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGF5ZXIgPCB0aGlzLm9wYXF1ZVBhc3NDdXRvZmY7XG4gICAgfVxuXG4gICAgcmVuZGVyKHN0eWxlOiBTdHlsZSwgb3B0aW9uczogUGFpbnRlck9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIHRoaXMubGluZUF0bGFzID0gc3R5bGUubGluZUF0bGFzO1xuICAgICAgICB0aGlzLmltYWdlTWFuYWdlciA9IHN0eWxlLmltYWdlTWFuYWdlcjtcbiAgICAgICAgdGhpcy5nbHlwaE1hbmFnZXIgPSBzdHlsZS5nbHlwaE1hbmFnZXI7XG5cbiAgICAgICAgdGhpcy5zeW1ib2xGYWRlQ2hhbmdlID0gc3R5bGUucGxhY2VtZW50LnN5bWJvbEZhZGVDaGFuZ2UoYnJvd3Nlci5ub3coKSk7XG5cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuYmVnaW5GcmFtZSgpO1xuXG4gICAgICAgIGNvbnN0IGxheWVySWRzID0gdGhpcy5zdHlsZS5fb3JkZXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlcyA9IHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgICAgICBpZiAoc291cmNlQ2FjaGUudXNlZCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZUNhY2hlLnByZXBhcmUodGhpcy5jb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvb3Jkc0FzY2VuZGluZzoge1tzdHJpbmddOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPn0gPSB7fTtcbiAgICAgICAgY29uc3QgY29vcmRzRGVzY2VuZGluZzoge1tzdHJpbmddOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPn0gPSB7fTtcbiAgICAgICAgY29uc3QgY29vcmRzRGVzY2VuZGluZ1N5bWJvbDoge1tzdHJpbmddOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPn0gPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbaWRdO1xuICAgICAgICAgICAgY29vcmRzQXNjZW5kaW5nW2lkXSA9IHNvdXJjZUNhY2hlLmdldFZpc2libGVDb29yZGluYXRlcygpO1xuICAgICAgICAgICAgY29vcmRzRGVzY2VuZGluZ1tpZF0gPSBjb29yZHNBc2NlbmRpbmdbaWRdLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgICAgICAgICAgY29vcmRzRGVzY2VuZGluZ1N5bWJvbFtpZF0gPSBzb3VyY2VDYWNoZS5nZXRWaXNpYmxlQ29vcmRpbmF0ZXModHJ1ZSkucmV2ZXJzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZS50eXBlICE9PSAncmFzdGVyJyAmJiBzb3VyY2UudHlwZSAhPT0gJ3Jhc3Rlci1kZW0nKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVUaWxlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHNBc2NlbmRpbmdbaWRdKSB2aXNpYmxlVGlsZXMucHVzaChzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKSk7XG4gICAgICAgICAgICB1cGRhdGVUaWxlTWFza3ModmlzaWJsZVRpbGVzLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcGFxdWVQYXNzQ3V0b2ZmID0gSW5maW5pdHk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVySWQgPSBsYXllcklkc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZF0uaXMzRCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGFxdWVQYXNzQ3V0b2ZmID0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9mZnNjcmVlbiBwYXNzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIFdlIGZpcnN0IGRvIGFsbCByZW5kZXJpbmcgdGhhdCByZXF1aXJlcyByZW5kZXJpbmcgdG8gYSBzZXBhcmF0ZVxuICAgICAgICAvLyBmcmFtZWJ1ZmZlciwgYW5kIHRoZW4gc2F2ZSB0aG9zZSBmb3IgcmVuZGVyaW5nIGJhY2sgdG8gdGhlIG1hcFxuICAgICAgICAvLyBsYXRlcjogaW4gZG9pbmcgdGhpcyB3ZSBhdm9pZCBkb2luZyBleHBlbnNpdmUgZnJhbWVidWZmZXIgcmVzdG9yZXMuXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyA9ICdvZmZzY3JlZW4nO1xuICAgICAgICB0aGlzLmRlcHRoUmJvTmVlZHNDbGVhciA9IHRydWU7XG5cbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIGxheWVySWRzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgIGlmICghbGF5ZXIuaGFzT2Zmc2NyZWVuUGFzcygpIHx8IGxheWVyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gY29vcmRzRGVzY2VuZGluZ1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgIT09ICdjdXN0b20nICYmICFjb29yZHMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJMYXllcih0aGlzLCBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXSwgbGF5ZXIsIGNvb3Jkcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWJpbmQgdGhlIG1haW4gZnJhbWVidWZmZXIgbm93IHRoYXQgYWxsIG9mZnNjcmVlbiBsYXllcnMgaGF2ZSBiZWVuIHJlbmRlcmVkOlxuICAgICAgICB0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKTtcblxuICAgICAgICAvLyBDbGVhciBidWZmZXJzIGluIHByZXBhcmF0aW9uIGZvciBkcmF3aW5nIHRvIHRoZSBtYWluIGZyYW1lYnVmZmVyXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6IG9wdGlvbnMuc2hvd092ZXJkcmF3SW5zcGVjdG9yID8gQ29sb3IuYmxhY2sgOiBDb2xvci50cmFuc3BhcmVudCwgZGVwdGg6IDF9KTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwoKTtcblxuICAgICAgICB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPSBvcHRpb25zLnNob3dPdmVyZHJhd0luc3BlY3RvcjtcbiAgICAgICAgdGhpcy5kZXB0aFJhbmdlRm9yM0QgPSBbMCwgMSAtICgoc3R5bGUuX29yZGVyLmxlbmd0aCArIDIpICogdGhpcy5udW1TdWJsYXllcnMgKiB0aGlzLmRlcHRoRXBzaWxvbildO1xuXG4gICAgICAgIC8vIE9wYXF1ZSBwYXNzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIERyYXcgb3BhcXVlIGxheWVycyB0b3AtdG8tYm90dG9tIGZpcnN0LlxuICAgICAgICB0aGlzLnJlbmRlclBhc3MgPSAnb3BhcXVlJztcblxuICAgICAgICBmb3IgKHRoaXMuY3VycmVudExheWVyID0gbGF5ZXJJZHMubGVuZ3RoIC0gMTsgdGhpcy5jdXJyZW50TGF5ZXIgPj0gMDsgdGhpcy5jdXJyZW50TGF5ZXItLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZHNbdGhpcy5jdXJyZW50TGF5ZXJdXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV07XG4gICAgICAgICAgICBjb25zdCBjb29yZHMgPSBjb29yZHNBc2NlbmRpbmdbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MobGF5ZXIsIGNvb3Jkcyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYW5zbHVjZW50IHBhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gRHJhdyBhbGwgb3RoZXIgbGF5ZXJzIGJvdHRvbS10by10b3AuXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyA9ICd0cmFuc2x1Y2VudCc7XG5cbiAgICAgICAgZm9yICh0aGlzLmN1cnJlbnRMYXllciA9IDA7IHRoaXMuY3VycmVudExheWVyIDwgbGF5ZXJJZHMubGVuZ3RoOyB0aGlzLmN1cnJlbnRMYXllcisrKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkc1t0aGlzLmN1cnJlbnRMYXllcl1dO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgLy8gRm9yIHN5bWJvbCBsYXllcnMgaW4gdGhlIHRyYW5zbHVjZW50IHBhc3MsIHdlIGFkZCBleHRyYSB0aWxlcyB0byB0aGUgcmVuZGVyYWJsZSBzZXRcbiAgICAgICAgICAgIC8vIGZvciBjcm9zcy10aWxlIHN5bWJvbCBmYWRpbmcuIFN5bWJvbCBsYXllcnMgZG9uJ3QgdXNlIHRpbGUgY2xpcHBpbmcsIHNvIG5vIG5lZWQgdG8gcmVuZGVyXG4gICAgICAgICAgICAvLyBzZXBhcmF0ZSBjbGlwcGluZyBtYXNrc1xuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gKGxheWVyLnR5cGUgPT09ICdzeW1ib2wnID8gY29vcmRzRGVzY2VuZGluZ1N5bWJvbCA6IGNvb3Jkc0Rlc2NlbmRpbmcpW2xheWVyLnNvdXJjZV07XG5cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKGxheWVyLCBjb29yZHNBc2NlbmRpbmdbbGF5ZXIuc291cmNlXSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1RpbGVCb3VuZGFyaWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgICAgIGRyYXcuZGVidWcodGhpcywgc291cmNlQ2FjaGVzW2lkXSwgY29vcmRzQXNjZW5kaW5nW2lkXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgZGVmYXVsdHMgZm9yIG1vc3QgR0wgdmFsdWVzIHNvIHRoYXQgYW55b25lIHVzaW5nIHRoZSBzdGF0ZSBhZnRlciB0aGUgcmVuZGVyXG4gICAgICAgIC8vIGVuY291bnRlcnMgbW9yZSBleHBlY3RlZCB2YWx1ZXMuXG4gICAgICAgIHRoaXMuY29udGV4dC5zZXREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgc2V0dXBPZmZzY3JlZW5EZXB0aFJlbmRlcmJ1ZmZlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgLy8gQWxsIG9mIHRoZSAzRCB0ZXh0dXJlcyB3aWxsIHVzZSB0aGUgc2FtZSBkZXB0aCByZW5kZXJidWZmZXIuXG4gICAgICAgIGlmICghdGhpcy5kZXB0aFJibykge1xuICAgICAgICAgICAgdGhpcy5kZXB0aFJibyA9IGNvbnRleHQuY3JlYXRlUmVuZGVyYnVmZmVyKGNvbnRleHQuZ2wuREVQVEhfQ09NUE9ORU5UMTYsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlckxheWVyKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IFN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICAgICAgaWYgKGxheWVyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pKSByZXR1cm47XG4gICAgICAgIGlmIChsYXllci50eXBlICE9PSAnYmFja2dyb3VuZCcgJiYgbGF5ZXIudHlwZSAhPT0gJ2N1c3RvbScgJiYgIWNvb3Jkcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5pZCA9IGxheWVyLmlkO1xuXG4gICAgICAgIGRyYXdbbGF5ZXIudHlwZV0ocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIHRoaXMuc3R5bGUucGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIGEgbWF0cml4IHRvIGluY29ycG9yYXRlIHRoZSAqLXRyYW5zbGF0ZSBhbmQgKi10cmFuc2xhdGUtYW5jaG9yIHByb3BlcnRpZXMgaW50byBpdC5cbiAgICAgKiBAcGFyYW0gaW5WaWV3cG9ydFBpeGVsVW5pdHNVbml0cyBUcnVlIHdoZW4gdGhlIHVuaXRzIGFjY2VwdGVkIGJ5IHRoZSBtYXRyaXggYXJlIGluIHZpZXdwb3J0IHBpeGVscyBpbnN0ZWFkIG9mIHRpbGUgdW5pdHMuXG4gICAgICogQHJldHVybnMge0Zsb2F0MzJBcnJheX0gbWF0cml4XG4gICAgICovXG4gICAgdHJhbnNsYXRlUG9zTWF0cml4KG1hdHJpeDogRmxvYXQzMkFycmF5LCB0aWxlOiBUaWxlLCB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sIHRyYW5zbGF0ZUFuY2hvcjogJ21hcCcgfCAndmlld3BvcnQnLCBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzPzogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRyYW5zbGF0ZVswXSAmJiAhdHJhbnNsYXRlWzFdKSByZXR1cm4gbWF0cml4O1xuXG4gICAgICAgIGNvbnN0IGFuZ2xlID0gaW5WaWV3cG9ydFBpeGVsVW5pdHNVbml0cyA/XG4gICAgICAgICAgICAodHJhbnNsYXRlQW5jaG9yID09PSAnbWFwJyA/IHRoaXMudHJhbnNmb3JtLmFuZ2xlIDogMCkgOlxuICAgICAgICAgICAgKHRyYW5zbGF0ZUFuY2hvciA9PT0gJ3ZpZXdwb3J0JyA/IC10aGlzLnRyYW5zZm9ybS5hbmdsZSA6IDApO1xuXG4gICAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICAgICAgY29uc3Qgc2luQSA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgICAgIGNvbnN0IGNvc0EgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgICAgICB0cmFuc2xhdGUgPSBbXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlWzBdICogY29zQSAtIHRyYW5zbGF0ZVsxXSAqIHNpbkEsXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlWzBdICogc2luQSArIHRyYW5zbGF0ZVsxXSAqIGNvc0FcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IFtcbiAgICAgICAgICAgIGluVmlld3BvcnRQaXhlbFVuaXRzVW5pdHMgPyB0cmFuc2xhdGVbMF0gOiBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCB0cmFuc2xhdGVbMF0sIHRoaXMudHJhbnNmb3JtLnpvb20pLFxuICAgICAgICAgICAgaW5WaWV3cG9ydFBpeGVsVW5pdHNVbml0cyA/IHRyYW5zbGF0ZVsxXSA6IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIHRyYW5zbGF0ZVsxXSwgdGhpcy50cmFuc2Zvcm0uem9vbSksXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZE1hdHJpeCA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZSh0cmFuc2xhdGVkTWF0cml4LCBtYXRyaXgsIHRyYW5zbGF0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRNYXRyaXg7XG4gICAgfVxuXG4gICAgc2F2ZVRpbGVUZXh0dXJlKHRleHR1cmU6IFRleHR1cmUpIHtcbiAgICAgICAgY29uc3QgdGV4dHVyZXMgPSB0aGlzLl90aWxlVGV4dHVyZXNbdGV4dHVyZS5zaXplWzBdXTtcbiAgICAgICAgaWYgKCF0ZXh0dXJlcykge1xuICAgICAgICAgICAgdGhpcy5fdGlsZVRleHR1cmVzW3RleHR1cmUuc2l6ZVswXV0gPSBbdGV4dHVyZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VGlsZVRleHR1cmUoc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHRleHR1cmVzID0gdGhpcy5fdGlsZVRleHR1cmVzW3NpemVdO1xuICAgICAgICByZXR1cm4gdGV4dHVyZXMgJiYgdGV4dHVyZXMubGVuZ3RoID4gMCA/IHRleHR1cmVzLnBvcCgpIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciBhIHBhdHRlcm4gaW1hZ2UgaXMgbmVlZGVkLCBhbmQgaWYgaXQgaXMsIHdoZXRoZXIgaXQgaXMgbm90IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYSBuZWVkZWQgaW1hZ2UgaXMgbWlzc2luZyBhbmQgcmVuZGVyaW5nIG5lZWRzIHRvIGJlIHNraXBwZWQuXG4gICAgICovXG4gICAgaXNQYXR0ZXJuTWlzc2luZyhpbWFnZTogP0Nyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFpbWFnZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpbWFnZVBvc0EgPSB0aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKGltYWdlLmZyb20udG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IGltYWdlUG9zQiA9IHRoaXMuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4oaW1hZ2UudG8udG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiAhaW1hZ2VQb3NBIHx8ICFpbWFnZVBvc0I7XG4gICAgfVxuXG4gICAgdXNlUHJvZ3JhbShuYW1lOiBzdHJpbmcsIHByb2dyYW1Db25maWd1cmF0aW9uOiBQcm9ncmFtQ29uZmlndXJhdGlvbiA9IHRoaXMuZW1wdHlQcm9ncmFtQ29uZmlndXJhdGlvbik6IFByb2dyYW08YW55PiB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlIHx8IHt9O1xuICAgICAgICBjb25zdCBrZXkgPSBgJHtuYW1lfSR7cHJvZ3JhbUNvbmZpZ3VyYXRpb24uY2FjaGVLZXkgfHwgJyd9JHt0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPyAnL292ZXJkcmF3JyA6ICcnfWA7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZVtrZXldKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW2tleV0gPSBuZXcgUHJvZ3JhbSh0aGlzLmNvbnRleHQsIHNoYWRlcnNbbmFtZV0sIHByb2dyYW1Db25maWd1cmF0aW9uLCBwcm9ncmFtVW5pZm9ybXNbbmFtZV0sIHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVba2V5XTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlc2V0IHNvbWUgR0wgc3RhdGUgdG8gZGVmYXVsdCB2YWx1ZXMgdG8gYXZvaWQgaGFyZC10by1kZWJ1ZyBidWdzXG4gICAgICogaW4gY3VzdG9tIGxheWVycy5cbiAgICAgKi9cbiAgICBzZXRDdXN0b21MYXllckRlZmF1bHRzKCkge1xuICAgICAgICAvLyBQcmV2ZW50IGN1c3RvbSBsYXllcnMgZnJvbSB1bmludGVudGlvbmFsbHkgbW9kaWZ5IHRoZSBsYXN0IFZBTyB1c2VkLlxuICAgICAgICAvLyBBbGwgb3RoZXIgc3RhdGUgaXMgc3RhdGUgaXMgcmVzdG9yZWQgb24gaXQncyBvd24sIGJ1dCBmb3IgVkFPcyBpdCdzXG4gICAgICAgIC8vIHNpbXBsZXIgdG8gdW5iaW5kIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB0cmFjayB0aGUgc3RhdGUgb2YgVkFPcy5cbiAgICAgICAgdGhpcy5jb250ZXh0LnVuYmluZFZBTygpO1xuXG4gICAgICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhpcyBzdGF0ZSBpcyBtZWFuaW5nZnVsIGFuZCBvZnRlbiBleHBlY3RlZC5cbiAgICAgICAgLy8gTGVhdmluZyB0aGlzIHN0YXRlIGRpcnR5IGNvdWxkIGNhdXNlIGEgbG90IG9mIGNvbmZ1c2lvbiBmb3IgdXNlcnMuXG4gICAgICAgIHRoaXMuY29udGV4dC5jdWxsRmFjZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnBpeGVsU3RvcmVVbnBhY2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFNldCBHTCBzdGF0ZSB0aGF0IGlzIHNoYXJlZCBieSBhbGwgbGF5ZXJzLlxuICAgICAqL1xuICAgIHNldEJhc2VTdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuY29udGV4dC5jdWxsRmFjZS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF0pO1xuICAgICAgICB0aGlzLmNvbnRleHQuYmxlbmRFcXVhdGlvbi5zZXQoZ2wuRlVOQ19BREQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFpbnRlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBNZXJjYXRvckNvb3JkaW5hdGUgZnJvbSAnLi4vZ2VvL21lcmNhdG9yX2Nvb3JkaW5hdGUnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgdGlsZUNvdmVyO1xuXG5mdW5jdGlvbiB0aWxlQ292ZXIoejogbnVtYmVyLCBib3VuZHM6IFtNZXJjYXRvckNvb3JkaW5hdGUsIE1lcmNhdG9yQ29vcmRpbmF0ZSwgTWVyY2F0b3JDb29yZGluYXRlLCBNZXJjYXRvckNvb3JkaW5hdGVdLFxuICAgIGFjdHVhbFo6IG51bWJlciwgcmVuZGVyV29ybGRDb3BpZXM6IGJvb2xlYW4gfCB2b2lkKTogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4ge1xuICAgIGlmIChyZW5kZXJXb3JsZENvcGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlbmRlcldvcmxkQ29waWVzID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdGlsZXMgPSAxIDw8IHo7XG4gICAgY29uc3QgdCA9IHt9O1xuXG4gICAgZnVuY3Rpb24gc2NhbkxpbmUoeDAsIHgxLCB5KSB7XG4gICAgICAgIGxldCB4LCB3LCB3eCwgY29vcmQ7XG4gICAgICAgIGlmICh5ID49IDAgJiYgeSA8PSB0aWxlcykge1xuICAgICAgICAgICAgZm9yICh4ID0geDA7IHggPCB4MTsgeCsrKSB7XG4gICAgICAgICAgICAgICAgdyA9IE1hdGguZmxvb3IoeCAvIHRpbGVzKTtcbiAgICAgICAgICAgICAgICB3eCA9ICh4ICUgdGlsZXMgKyB0aWxlcykgJSB0aWxlcztcbiAgICAgICAgICAgICAgICBpZiAodyA9PT0gMCB8fCByZW5kZXJXb3JsZENvcGllcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb29yZCA9IG5ldyBPdmVyc2NhbGVkVGlsZUlEKGFjdHVhbFosIHcsIHosIHd4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgdFtjb29yZC5rZXldID0gY29vcmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgem9vbWVkQm91bmRzID0gYm91bmRzLm1hcCgoY29vcmQpID0+IG5ldyBQb2ludChjb29yZC54LCBjb29yZC55KS5fbXVsdCh0aWxlcykpO1xuXG4gICAgLy8gRGl2aWRlIHRoZSBzY3JlZW4gdXAgaW4gdHdvIHRyaWFuZ2xlcyBhbmQgc2NhbiBlYWNoIG9mIHRoZW06XG4gICAgLy8gKy0tLS9cbiAgICAvLyB8IC8gfFxuICAgIC8vIC8tLS0rXG4gICAgc2NhblRyaWFuZ2xlKHpvb21lZEJvdW5kc1swXSwgem9vbWVkQm91bmRzWzFdLCB6b29tZWRCb3VuZHNbMl0sIDAsIHRpbGVzLCBzY2FuTGluZSk7XG4gICAgc2NhblRyaWFuZ2xlKHpvb21lZEJvdW5kc1syXSwgem9vbWVkQm91bmRzWzNdLCB6b29tZWRCb3VuZHNbMF0sIDAsIHRpbGVzLCBzY2FuTGluZSk7XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXModCkubWFwKChpZCkgPT4ge1xuICAgICAgICByZXR1cm4gdFtpZF07XG4gICAgfSk7XG59XG5cbi8vIFRha2VuIGZyb20gcG9seW1hcHMgc3JjL0xheWVyLmpzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2ltcGxlZ2VvL3BvbHltYXBzL2Jsb2IvbWFzdGVyL3NyYy9MYXllci5qcyNMMzMzLUwzODNcblxuZnVuY3Rpb24gZWRnZShhOiBQb2ludCwgYjogUG9pbnQpIHtcbiAgICBpZiAoYS55ID4gYi55KSB7IGNvbnN0IHQgPSBhOyBhID0gYjsgYiA9IHQ7IH1cbiAgICByZXR1cm4ge1xuICAgICAgICB4MDogYS54LFxuICAgICAgICB5MDogYS55LFxuICAgICAgICB4MTogYi54LFxuICAgICAgICB5MTogYi55LFxuICAgICAgICBkeDogYi54IC0gYS54LFxuICAgICAgICBkeTogYi55IC0gYS55XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblNwYW5zKGUwLCBlMSwgeW1pbiwgeW1heCwgc2NhbkxpbmUpIHtcbiAgICBjb25zdCB5MCA9IE1hdGgubWF4KHltaW4sIE1hdGguZmxvb3IoZTEueTApKTtcbiAgICBjb25zdCB5MSA9IE1hdGgubWluKHltYXgsIE1hdGguY2VpbChlMS55MSkpO1xuXG4gICAgLy8gc29ydCBlZGdlcyBieSB4LWNvb3JkaW5hdGVcbiAgICBpZiAoKGUwLngwID09PSBlMS54MCAmJiBlMC55MCA9PT0gZTEueTApID9cbiAgICAgICAgKGUwLngwICsgZTEuZHkgLyBlMC5keSAqIGUwLmR4IDwgZTEueDEpIDpcbiAgICAgICAgKGUwLngxIC0gZTEuZHkgLyBlMC5keSAqIGUwLmR4IDwgZTEueDApKSB7XG4gICAgICAgIGNvbnN0IHQgPSBlMDsgZTAgPSBlMTsgZTEgPSB0O1xuICAgIH1cblxuICAgIC8vIHNjYW4gbGluZXMhXG4gICAgY29uc3QgbTAgPSBlMC5keCAvIGUwLmR5O1xuICAgIGNvbnN0IG0xID0gZTEuZHggLyBlMS5keTtcbiAgICBjb25zdCBkMCA9IGUwLmR4ID4gMDsgLy8gdXNlIHkgKyAxIHRvIGNvbXB1dGUgeDBcbiAgICBjb25zdCBkMSA9IGUxLmR4IDwgMDsgLy8gdXNlIHkgKyAxIHRvIGNvbXB1dGUgeDFcbiAgICBmb3IgKGxldCB5ID0geTA7IHkgPCB5MTsgeSsrKSB7XG4gICAgICAgIGNvbnN0IHgwID0gbTAgKiBNYXRoLm1heCgwLCBNYXRoLm1pbihlMC5keSwgeSArIGQwIC0gZTAueTApKSArIGUwLngwO1xuICAgICAgICBjb25zdCB4MSA9IG0xICogTWF0aC5tYXgoMCwgTWF0aC5taW4oZTEuZHksIHkgKyBkMSAtIGUxLnkwKSkgKyBlMS54MDtcbiAgICAgICAgc2NhbkxpbmUoTWF0aC5mbG9vcih4MSksIE1hdGguY2VpbCh4MCksIHkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2NhblRyaWFuZ2xlKGE6IFBvaW50LCBiOiBQb2ludCwgYzogUG9pbnQsIHltaW4sIHltYXgsIHNjYW5MaW5lKSB7XG4gICAgbGV0IGFiID0gZWRnZShhLCBiKSxcbiAgICAgICAgYmMgPSBlZGdlKGIsIGMpLFxuICAgICAgICBjYSA9IGVkZ2UoYywgYSk7XG5cbiAgICBsZXQgdDtcblxuICAgIC8vIHNvcnQgZWRnZXMgYnkgeS1sZW5ndGhcbiAgICBpZiAoYWIuZHkgPiBiYy5keSkgeyB0ID0gYWI7IGFiID0gYmM7IGJjID0gdDsgfVxuICAgIGlmIChhYi5keSA+IGNhLmR5KSB7IHQgPSBhYjsgYWIgPSBjYTsgY2EgPSB0OyB9XG4gICAgaWYgKGJjLmR5ID4gY2EuZHkpIHsgdCA9IGJjOyBiYyA9IGNhOyBjYSA9IHQ7IH1cblxuICAgIC8vIHNjYW4gc3BhbiEgc2NhbiBzcGFuIVxuICAgIGlmIChhYi5keSkgc2NhblNwYW5zKGNhLCBhYiwgeW1pbiwgeW1heCwgc2NhbkxpbmUpO1xuICAgIGlmIChiYy5keSkgc2NhblNwYW5zKGNhLCBiYywgeW1pbiwgeW1heCwgc2NhbkxpbmUpO1xufVxuXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0IGZyb20gJy4vbG5nX2xhdCc7XG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSwge21lcmNhdG9yWGZyb21MbmcsIG1lcmNhdG9yWWZyb21MYXQsIG1lcmNhdG9yWmZyb21BbHRpdHVkZX0gZnJvbSAnLi9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7d3JhcCwgY2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCB0aWxlQ292ZXIgZnJvbSAnLi4vdXRpbC90aWxlX2NvdmVyJztcbmltcG9ydCB7VW53cmFwcGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCB7dmVjNCwgbWF0NCwgbWF0Mn0gZnJvbSAnZ2wtbWF0cml4JztcblxuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUQsIENhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG4vKipcbiAqIEEgc2luZ2xlIHRyYW5zZm9ybSwgZ2VuZXJhbGx5IHVzZWQgZm9yIGEgc2luZ2xlIHRpbGUgdG8gYmVcbiAqIHNjYWxlZCwgcm90YXRlZCwgYW5kIHpvb21lZC5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRyYW5zZm9ybSB7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICB0aWxlWm9vbTogbnVtYmVyO1xuICAgIGxuZ1JhbmdlOiA/W251bWJlciwgbnVtYmVyXTtcbiAgICBsYXRSYW5nZTogP1tudW1iZXIsIG51bWJlcl07XG4gICAgbWF4VmFsaWRMYXRpdHVkZTogbnVtYmVyO1xuICAgIHNjYWxlOiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBhbmdsZTogbnVtYmVyO1xuICAgIHJvdGF0aW9uTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgem9vbUZyYWN0aW9uOiBudW1iZXI7XG4gICAgcGl4ZWxzVG9HTFVuaXRzOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6IG51bWJlcjtcbiAgICBtZXJjYXRvck1hdHJpeDogQXJyYXk8bnVtYmVyPjtcbiAgICBwcm9qTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgYWxpZ25lZFByb2pNYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICBwaXhlbE1hdHJpeDogRmxvYXQ2NEFycmF5O1xuICAgIHBpeGVsTWF0cml4SW52ZXJzZTogRmxvYXQ2NEFycmF5O1xuICAgIGdsQ29vcmRNYXRyaXg6IEZsb2F0MzJBcnJheTtcbiAgICBsYWJlbFBsYW5lTWF0cml4OiBGbG9hdDMyQXJyYXk7XG4gICAgX2ZvdjogbnVtYmVyO1xuICAgIF9waXRjaDogbnVtYmVyO1xuICAgIF96b29tOiBudW1iZXI7XG4gICAgX3VubW9kaWZpZWQ6IGJvb2xlYW47XG4gICAgX3JlbmRlcldvcmxkQ29waWVzOiBib29sZWFuO1xuICAgIF9taW5ab29tOiBudW1iZXI7XG4gICAgX21heFpvb206IG51bWJlcjtcbiAgICBfY2VudGVyOiBMbmdMYXQ7XG4gICAgX2NvbnN0cmFpbmluZzogYm9vbGVhbjtcbiAgICBfcG9zTWF0cml4Q2FjaGU6IHtbbnVtYmVyXTogRmxvYXQzMkFycmF5fTtcbiAgICBfYWxpZ25lZFBvc01hdHJpeENhY2hlOiB7W251bWJlcl06IEZsb2F0MzJBcnJheX07XG5cbiAgICBjb25zdHJ1Y3RvcihtaW5ab29tOiA/bnVtYmVyLCBtYXhab29tOiA/bnVtYmVyLCByZW5kZXJXb3JsZENvcGllczogYm9vbGVhbiB8IHZvaWQpIHtcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjsgLy8gY29uc3RhbnRcbiAgICAgICAgdGhpcy5tYXhWYWxpZExhdGl0dWRlID0gODUuMDUxMTI5OyAvLyBjb25zdGFudFxuXG4gICAgICAgIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzID0gcmVuZGVyV29ybGRDb3BpZXMgPT09IHVuZGVmaW5lZCA/IHRydWUgOiByZW5kZXJXb3JsZENvcGllcztcbiAgICAgICAgdGhpcy5fbWluWm9vbSA9IG1pblpvb20gfHwgMDtcbiAgICAgICAgdGhpcy5fbWF4Wm9vbSA9IG1heFpvb20gfHwgMjI7XG5cbiAgICAgICAgdGhpcy5zZXRNYXhCb3VuZHMoKTtcblxuICAgICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuICAgICAgICB0aGlzLl9jZW50ZXIgPSBuZXcgTG5nTGF0KDAsIDApO1xuICAgICAgICB0aGlzLnpvb20gPSAwO1xuICAgICAgICB0aGlzLmFuZ2xlID0gMDtcbiAgICAgICAgdGhpcy5fZm92ID0gMC42NDM1MDExMDg3OTMyODQ0O1xuICAgICAgICB0aGlzLl9waXRjaCA9IDA7XG4gICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9wb3NNYXRyaXhDYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGUgPSB7fTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUcmFuc2Zvcm0ge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUcmFuc2Zvcm0odGhpcy5fbWluWm9vbSwgdGhpcy5fbWF4Wm9vbSwgdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpO1xuICAgICAgICBjbG9uZS50aWxlU2l6ZSA9IHRoaXMudGlsZVNpemU7XG4gICAgICAgIGNsb25lLmxhdFJhbmdlID0gdGhpcy5sYXRSYW5nZTtcbiAgICAgICAgY2xvbmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBjbG9uZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgY2xvbmUuX2NlbnRlciA9IHRoaXMuX2NlbnRlcjtcbiAgICAgICAgY2xvbmUuem9vbSA9IHRoaXMuem9vbTtcbiAgICAgICAgY2xvbmUuYW5nbGUgPSB0aGlzLmFuZ2xlO1xuICAgICAgICBjbG9uZS5fZm92ID0gdGhpcy5fZm92O1xuICAgICAgICBjbG9uZS5fcGl0Y2ggPSB0aGlzLl9waXRjaDtcbiAgICAgICAgY2xvbmUuX3VubW9kaWZpZWQgPSB0aGlzLl91bm1vZGlmaWVkO1xuICAgICAgICBjbG9uZS5fY2FsY01hdHJpY2VzKCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXQgbWluWm9vbSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fbWluWm9vbTsgfVxuICAgIHNldCBtaW5ab29tKHpvb206IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5fbWluWm9vbSA9PT0gem9vbSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9taW5ab29tID0gem9vbTtcbiAgICAgICAgdGhpcy56b29tID0gTWF0aC5tYXgodGhpcy56b29tLCB6b29tKTtcbiAgICB9XG5cbiAgICBnZXQgbWF4Wm9vbSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fbWF4Wm9vbTsgfVxuICAgIHNldCBtYXhab29tKHpvb206IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5fbWF4Wm9vbSA9PT0gem9vbSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9tYXhab29tID0gem9vbTtcbiAgICAgICAgdGhpcy56b29tID0gTWF0aC5taW4odGhpcy56b29tLCB6b29tKTtcbiAgICB9XG5cbiAgICBnZXQgcmVuZGVyV29ybGRDb3BpZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZW5kZXJXb3JsZENvcGllczsgfVxuICAgIHNldCByZW5kZXJXb3JsZENvcGllcyhyZW5kZXJXb3JsZENvcGllcz86ID9ib29sZWFuKSB7XG4gICAgICAgIGlmIChyZW5kZXJXb3JsZENvcGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZW5kZXJXb3JsZENvcGllcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyV29ybGRDb3BpZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlbmRlcldvcmxkQ29waWVzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZW5kZXJXb3JsZENvcGllcyA9IHJlbmRlcldvcmxkQ29waWVzO1xuICAgIH1cblxuICAgIGdldCB3b3JsZFNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGlsZVNpemUgKiB0aGlzLnNjYWxlO1xuICAgIH1cblxuICAgIGdldCBjZW50ZXJQb2ludCgpOiBQb2ludCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemUuX2RpdigyKTtcbiAgICB9XG5cbiAgICBnZXQgc2l6ZSgpOiBQb2ludCB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGdldCBiZWFyaW5nKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAtdGhpcy5hbmdsZSAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBiZWFyaW5nKGJlYXJpbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBiID0gLXdyYXAoYmVhcmluZywgLTE4MCwgMTgwKSAqIE1hdGguUEkgLyAxODA7XG4gICAgICAgIGlmICh0aGlzLmFuZ2xlID09PSBiKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbmdsZSA9IGI7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuXG4gICAgICAgIC8vIDJ4MiBtYXRyaXggZm9yIHJvdGF0aW5nIHBvaW50c1xuICAgICAgICB0aGlzLnJvdGF0aW9uTWF0cml4ID0gbWF0Mi5jcmVhdGUoKTtcbiAgICAgICAgbWF0Mi5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCwgdGhpcy5yb3RhdGlvbk1hdHJpeCwgdGhpcy5hbmdsZSk7XG4gICAgfVxuXG4gICAgZ2V0IHBpdGNoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXRjaCAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBwaXRjaChwaXRjaDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBjbGFtcChwaXRjaCwgMCwgNjApIC8gMTgwICogTWF0aC5QSTtcbiAgICAgICAgaWYgKHRoaXMuX3BpdGNoID09PSBwKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGl0Y2ggPSBwO1xuICAgICAgICB0aGlzLl9jYWxjTWF0cmljZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgZm92KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3YgLyBNYXRoLlBJICogMTgwO1xuICAgIH1cbiAgICBzZXQgZm92KGZvdjogbnVtYmVyKSB7XG4gICAgICAgIGZvdiA9IE1hdGgubWF4KDAuMDEsIE1hdGgubWluKDYwLCBmb3YpKTtcbiAgICAgICAgaWYgKHRoaXMuX2ZvdiA9PT0gZm92KSByZXR1cm47XG4gICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZm92ID0gZm92IC8gMTgwICogTWF0aC5QSTtcbiAgICAgICAgdGhpcy5fY2FsY01hdHJpY2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IHpvb20oKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3pvb207IH1cbiAgICBzZXQgem9vbSh6b29tOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgeiA9IE1hdGgubWluKE1hdGgubWF4KHpvb20sIHRoaXMubWluWm9vbSksIHRoaXMubWF4Wm9vbSk7XG4gICAgICAgIGlmICh0aGlzLl96b29tID09PSB6KSByZXR1cm47XG4gICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fem9vbSA9IHo7XG4gICAgICAgIHRoaXMuc2NhbGUgPSB0aGlzLnpvb21TY2FsZSh6KTtcbiAgICAgICAgdGhpcy50aWxlWm9vbSA9IE1hdGguZmxvb3Ioeik7XG4gICAgICAgIHRoaXMuem9vbUZyYWN0aW9uID0geiAtIHRoaXMudGlsZVpvb207XG4gICAgICAgIHRoaXMuX2NvbnN0cmFpbigpO1xuICAgICAgICB0aGlzLl9jYWxjTWF0cmljZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgY2VudGVyKCk6IExuZ0xhdCB7IHJldHVybiB0aGlzLl9jZW50ZXI7IH1cbiAgICBzZXQgY2VudGVyKGNlbnRlcjogTG5nTGF0KSB7XG4gICAgICAgIGlmIChjZW50ZXIubGF0ID09PSB0aGlzLl9jZW50ZXIubGF0ICYmIGNlbnRlci5sbmcgPT09IHRoaXMuX2NlbnRlci5sbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZW50ZXIgPSBjZW50ZXI7XG4gICAgICAgIHRoaXMuX2NvbnN0cmFpbigpO1xuICAgICAgICB0aGlzLl9jYWxjTWF0cmljZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSB6b29tIGxldmVsIHRoYXQgd2lsbCBjb3ZlciBhbGwgdGlsZXMgdGhlIHRyYW5zZm9ybVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGlsZVNpemVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMucm91bmRab29tXG4gICAgICogQHJldHVybnMge251bWJlcn0gem9vbSBsZXZlbFxuICAgICAqL1xuICAgIGNvdmVyaW5nWm9vbUxldmVsKG9wdGlvbnM6IHtyb3VuZFpvb20/OiBib29sZWFuLCB0aWxlU2l6ZTogbnVtYmVyfSkge1xuICAgICAgICByZXR1cm4gKG9wdGlvbnMucm91bmRab29tID8gTWF0aC5yb3VuZCA6IE1hdGguZmxvb3IpKFxuICAgICAgICAgICAgdGhpcy56b29tICsgdGhpcy5zY2FsZVpvb20odGhpcy50aWxlU2l6ZSAvIG9wdGlvbnMudGlsZVNpemUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFueSBcIndyYXBwZWRcIiBjb3BpZXMgb2YgYSBnaXZlbiB0aWxlIGNvb3JkaW5hdGUgdGhhdCBhcmUgdmlzaWJsZVxuICAgICAqIGluIHRoZSBjdXJyZW50IHZpZXcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcyh0aWxlSUQ6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbbmV3IFVud3JhcHBlZFRpbGVJRCgwLCB0aWxlSUQpXTtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKSB7XG4gICAgICAgICAgICBjb25zdCB1dGwgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQoMCwgMCkpO1xuICAgICAgICAgICAgY29uc3QgdXRyID0gdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KHRoaXMud2lkdGgsIDApKTtcbiAgICAgICAgICAgIGNvbnN0IHVibCA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCkpO1xuICAgICAgICAgICAgY29uc3QgdWJyID0gdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KDAsIHRoaXMuaGVpZ2h0KSk7XG4gICAgICAgICAgICBjb25zdCB3MCA9IE1hdGguZmxvb3IoTWF0aC5taW4odXRsLngsIHV0ci54LCB1YmwueCwgdWJyLngpKTtcbiAgICAgICAgICAgIGNvbnN0IHcxID0gTWF0aC5mbG9vcihNYXRoLm1heCh1dGwueCwgdXRyLngsIHVibC54LCB1YnIueCkpO1xuXG4gICAgICAgICAgICAvLyBBZGQgYW4gZXh0cmEgY29weSBvZiB0aGUgd29ybGQgb24gZWFjaCBzaWRlIHRvIHByb3Blcmx5IHJlbmRlciBJbWFnZVNvdXJjZXMgYW5kIENhbnZhc1NvdXJjZXMuXG4gICAgICAgICAgICAvLyBCb3RoIHNvdXJjZXMgZHJhdyBvdXRzaWRlIHRoZSB0aWxlIGJvdW5kYXJpZXMgb2YgdGhlIHRpbGUgdGhhdCBcImNvbnRhaW5zIHRoZW1cIiBzbyB3ZSBuZWVkXG4gICAgICAgICAgICAvLyB0byBhZGQgZXh0cmEgY29waWVzIG9uIGJvdGggc2lkZXMgaW4gY2FzZSBvZmZzY3JlZW4gdGlsZXMgbmVlZCB0byBkcmF3IGludG8gb24tc2NyZWVuIG9uZXMuXG4gICAgICAgICAgICBjb25zdCBleHRyYVdvcmxkQ29weSA9IDE7XG5cbiAgICAgICAgICAgIGZvciAobGV0IHcgPSB3MCAtIGV4dHJhV29ybGRDb3B5OyB3IDw9IHcxICsgZXh0cmFXb3JsZENvcHk7IHcrKykge1xuICAgICAgICAgICAgICAgIGlmICh3ID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgVW53cmFwcGVkVGlsZUlEKHcsIHRpbGVJRCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFsbCBjb29yZGluYXRlcyB0aGF0IGNvdWxkIGNvdmVyIHRoaXMgdHJhbnNmb3JtIGZvciBhIGNvdmVyaW5nXG4gICAgICogem9vbSBsZXZlbC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLnRpbGVTaXplXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMubWluem9vbVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLm1heHpvb21cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMucm91bmRab29tXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnJlcGFyc2VPdmVyc2NhbGVkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnJlbmRlcldvcmxkQ29waWVzXG4gICAgICogQHJldHVybnMge0FycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSBPdmVyc2NhbGVkVGlsZUlEc1xuICAgICAqL1xuICAgIGNvdmVyaW5nVGlsZXMoXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHRpbGVTaXplOiBudW1iZXIsXG4gICAgICAgICAgICBtaW56b29tPzogbnVtYmVyLFxuICAgICAgICAgICAgbWF4em9vbT86IG51bWJlcixcbiAgICAgICAgICAgIHJvdW5kWm9vbT86IGJvb2xlYW4sXG4gICAgICAgICAgICByZXBhcnNlT3ZlcnNjYWxlZD86IGJvb2xlYW4sXG4gICAgICAgICAgICByZW5kZXJXb3JsZENvcGllcz86IGJvb2xlYW5cbiAgICAgICAgfVxuICAgICk6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+IHtcbiAgICAgICAgbGV0IHogPSB0aGlzLmNvdmVyaW5nWm9vbUxldmVsKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBhY3R1YWxaID0gejtcblxuICAgICAgICBpZiAob3B0aW9ucy5taW56b29tICE9PSB1bmRlZmluZWQgJiYgeiA8IG9wdGlvbnMubWluem9vbSkgcmV0dXJuIFtdO1xuICAgICAgICBpZiAob3B0aW9ucy5tYXh6b29tICE9PSB1bmRlZmluZWQgJiYgeiA+IG9wdGlvbnMubWF4em9vbSkgeiA9IG9wdGlvbnMubWF4em9vbTtcblxuICAgICAgICBjb25zdCBjZW50ZXJDb29yZCA9IE1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KHRoaXMuY2VudGVyKTtcbiAgICAgICAgY29uc3QgbnVtVGlsZXMgPSBNYXRoLnBvdygyLCB6KTtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBuZXcgUG9pbnQobnVtVGlsZXMgKiBjZW50ZXJDb29yZC54IC0gMC41LCBudW1UaWxlcyAqIGNlbnRlckNvb3JkLnkgLSAwLjUpO1xuICAgICAgICBjb25zdCBjb3JuZXJDb29yZHMgPSBbXG4gICAgICAgICAgICB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQoMCwgMCkpLFxuICAgICAgICAgICAgdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KHRoaXMud2lkdGgsIDApKSxcbiAgICAgICAgICAgIHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCkpLFxuICAgICAgICAgICAgdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KDAsIHRoaXMuaGVpZ2h0KSlcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHRpbGVDb3Zlcih6LCBjb3JuZXJDb29yZHMsIG9wdGlvbnMucmVwYXJzZU92ZXJzY2FsZWQgPyBhY3R1YWxaIDogeiwgdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gY2VudGVyUG9pbnQuZGlzdChhLmNhbm9uaWNhbCkgLSBjZW50ZXJQb2ludC5kaXN0KGIuY2Fub25pY2FsKSk7XG4gICAgfVxuXG4gICAgcmVzaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5waXhlbHNUb0dMVW5pdHMgPSBbMiAvIHdpZHRoLCAtMiAvIGhlaWdodF07XG4gICAgICAgIHRoaXMuX2NvbnN0cmFpbigpO1xuICAgICAgICB0aGlzLl9jYWxjTWF0cmljZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgdW5tb2RpZmllZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3VubW9kaWZpZWQ7IH1cblxuICAgIHpvb21TY2FsZSh6b29tOiBudW1iZXIpIHsgcmV0dXJuIE1hdGgucG93KDIsIHpvb20pOyB9XG4gICAgc2NhbGVab29tKHNjYWxlOiBudW1iZXIpIHsgcmV0dXJuIE1hdGgubG9nKHNjYWxlKSAvIE1hdGguTE4yOyB9XG5cbiAgICBwcm9qZWN0KGxuZ2xhdDogTG5nTGF0KSB7XG4gICAgICAgIGNvbnN0IGxhdCA9IGNsYW1wKGxuZ2xhdC5sYXQsIC10aGlzLm1heFZhbGlkTGF0aXR1ZGUsIHRoaXMubWF4VmFsaWRMYXRpdHVkZSk7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQoXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JYZnJvbUxuZyhsbmdsYXQubG5nKSAqIHRoaXMud29ybGRTaXplLFxuICAgICAgICAgICAgICAgIG1lcmNhdG9yWWZyb21MYXQobGF0KSAqIHRoaXMud29ybGRTaXplKTtcbiAgICB9XG5cbiAgICB1bnByb2plY3QocG9pbnQ6IFBvaW50KTogTG5nTGF0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXJjYXRvckNvb3JkaW5hdGUocG9pbnQueCAvIHRoaXMud29ybGRTaXplLCBwb2ludC55IC8gdGhpcy53b3JsZFNpemUpLnRvTG5nTGF0KCk7XG4gICAgfVxuXG4gICAgZ2V0IHBvaW50KCk6IFBvaW50IHsgcmV0dXJuIHRoaXMucHJvamVjdCh0aGlzLmNlbnRlcik7IH1cblxuICAgIHNldExvY2F0aW9uQXRQb2ludChsbmdsYXQ6IExuZ0xhdCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZShwb2ludCk7XG4gICAgICAgIGNvbnN0IGIgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50KTtcbiAgICAgICAgY29uc3QgbG9jID0gdGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUobG5nbGF0KTtcbiAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShcbiAgICAgICAgICAgICAgICBsb2MueCAtIChhLnggLSBiLngpLFxuICAgICAgICAgICAgICAgIGxvYy55IC0gKGEueSAtIGIueSkpO1xuICAgICAgICB0aGlzLmNlbnRlciA9IHRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKG5ld0NlbnRlcik7XG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJXb3JsZENvcGllcykge1xuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLmNlbnRlci53cmFwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIGxvY2F0aW9uLCByZXR1cm4gdGhlIHNjcmVlbiBwb2ludCB0aGF0IGNvcnJlc3BvbmRzIHRvIGl0XG4gICAgICogQHBhcmFtIHtMbmdMYXR9IGxuZ2xhdCBsb2NhdGlvblxuICAgICAqIEByZXR1cm5zIHtQb2ludH0gc2NyZWVuIHBvaW50XG4gICAgICovXG4gICAgbG9jYXRpb25Qb2ludChsbmdsYXQ6IExuZ0xhdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb29yZGluYXRlUG9pbnQodGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUobG5nbGF0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBwb2ludCBvbiBzY3JlZW4sIHJldHVybiBpdHMgbG5nbGF0XG4gICAgICogQHBhcmFtIHtQb2ludH0gcCBzY3JlZW4gcG9pbnRcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBsbmdsYXQgbG9jYXRpb25cbiAgICAgKi9cbiAgICBwb2ludExvY2F0aW9uKHA6IFBvaW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLnBvaW50Q29vcmRpbmF0ZShwKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBnZW9ncmFwaGljYWwgbG5nbGF0LCByZXR1cm4gYW4gdW5yb3VuZGVkXG4gICAgICogY29vcmRpbmF0ZSB0aGF0IHJlcHJlc2VudHMgaXQgYXQgdGhpcyB0cmFuc2Zvcm0ncyB6b29tIGxldmVsLlxuICAgICAqIEBwYXJhbSB7TG5nTGF0fSBsbmdsYXRcbiAgICAgKiBAcmV0dXJucyB7Q29vcmRpbmF0ZX1cbiAgICAgKi9cbiAgICBsb2NhdGlvbkNvb3JkaW5hdGUobG5nbGF0OiBMbmdMYXQpIHtcbiAgICAgICAgcmV0dXJuIE1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KGxuZ2xhdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBDb29yZGluYXRlLCByZXR1cm4gaXRzIGdlb2dyYXBoaWNhbCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Nvb3JkaW5hdGV9IGNvb3JkXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gbG5nbGF0XG4gICAgICovXG4gICAgY29vcmRpbmF0ZUxvY2F0aW9uKGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgcmV0dXJuIGNvb3JkLnRvTG5nTGF0KCk7XG4gICAgfVxuXG4gICAgcG9pbnRDb29yZGluYXRlKHA6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldFogPSAwO1xuICAgICAgICAvLyBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZSBjb3JyZWN0IHByb2plY3RlZCB6IHZhbHVlIGZvciB0aGUgcG9pbnQsXG4gICAgICAgIC8vIHVucHJvamVjdCB0d28gcG9pbnRzIHRvIGdldCBhIGxpbmUgYW5kIHRoZW4gZmluZCB0aGUgcG9pbnQgb24gdGhhdFxuICAgICAgICAvLyBsaW5lIHdpdGggej0wXG5cbiAgICAgICAgY29uc3QgY29vcmQwID0gW3AueCwgcC55LCAwLCAxXTtcbiAgICAgICAgY29uc3QgY29vcmQxID0gW3AueCwgcC55LCAxLCAxXTtcblxuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQoY29vcmQwLCBjb29yZDAsIHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKTtcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KGNvb3JkMSwgY29vcmQxLCB0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSk7XG5cbiAgICAgICAgY29uc3QgdzAgPSBjb29yZDBbM107XG4gICAgICAgIGNvbnN0IHcxID0gY29vcmQxWzNdO1xuICAgICAgICBjb25zdCB4MCA9IGNvb3JkMFswXSAvIHcwO1xuICAgICAgICBjb25zdCB4MSA9IGNvb3JkMVswXSAvIHcxO1xuICAgICAgICBjb25zdCB5MCA9IGNvb3JkMFsxXSAvIHcwO1xuICAgICAgICBjb25zdCB5MSA9IGNvb3JkMVsxXSAvIHcxO1xuICAgICAgICBjb25zdCB6MCA9IGNvb3JkMFsyXSAvIHcwO1xuICAgICAgICBjb25zdCB6MSA9IGNvb3JkMVsyXSAvIHcxO1xuXG4gICAgICAgIGNvbnN0IHQgPSB6MCA9PT0gejEgPyAwIDogKHRhcmdldFogLSB6MCkgLyAoejEgLSB6MCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNZXJjYXRvckNvb3JkaW5hdGUoXG4gICAgICAgICAgICBpbnRlcnBvbGF0ZSh4MCwgeDEsIHQpIC8gdGhpcy53b3JsZFNpemUsXG4gICAgICAgICAgICBpbnRlcnBvbGF0ZSh5MCwgeTEsIHQpIC8gdGhpcy53b3JsZFNpemUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgY29vcmRpbmF0ZSwgcmV0dXJuIHRoZSBzY3JlZW4gcG9pbnQgdGhhdCBjb3JyZXNwb25kcyB0byBpdFxuICAgICAqIEBwYXJhbSB7Q29vcmRpbmF0ZX0gY29vcmRcbiAgICAgKiBAcmV0dXJucyB7UG9pbnR9IHNjcmVlbiBwb2ludFxuICAgICAqL1xuICAgIGNvb3JkaW5hdGVQb2ludChjb29yZDogTWVyY2F0b3JDb29yZGluYXRlKSB7XG4gICAgICAgIGNvbnN0IHAgPSBbY29vcmQueCAqIHRoaXMud29ybGRTaXplLCBjb29yZC55ICogdGhpcy53b3JsZFNpemUsIDAsIDFdO1xuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQocCwgcCwgdGhpcy5waXhlbE1hdHJpeCk7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQocFswXSAvIHBbM10sIHBbMV0gLyBwWzNdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBnZW9ncmFwaGljYWwgYm91bmRzLiBXaGVuIHRoZSBiZWFyaW5nIG9yIHBpdGNoIGlzIG5vbi16ZXJvLCB0aGUgdmlzaWJsZSByZWdpb24gaXMgbm90XG4gICAgICogYW4gYXhpcy1hbGlnbmVkIHJlY3RhbmdsZSwgYW5kIHRoZSByZXN1bHQgaXMgdGhlIHNtYWxsZXN0IGJvdW5kcyB0aGF0IGVuY29tcGFzc2VzIHRoZSB2aXNpYmxlIHJlZ2lvbi5cbiAgICAgKi9cbiAgICBnZXRCb3VuZHMoKTogTG5nTGF0Qm91bmRzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXRCb3VuZHMoKVxuICAgICAgICAgICAgLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IFBvaW50KDAsIDApKSlcbiAgICAgICAgICAgIC5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyBQb2ludCh0aGlzLndpZHRoLCAwKSkpXG4gICAgICAgICAgICAuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgUG9pbnQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpKSlcbiAgICAgICAgICAgIC5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyBQb2ludCgwLCB0aGlzLmhlaWdodCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGdlb2dyYXBoaWNhbCBib3VuZHMgdGhlIG1hcCBpcyBjb25zdHJhaW5lZCB0bywgb3IgYG51bGxgIGlmIG5vbmUgc2V0LlxuICAgICAqL1xuICAgIGdldE1heEJvdW5kcygpOiBMbmdMYXRCb3VuZHMgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhdFJhbmdlIHx8IHRoaXMubGF0UmFuZ2UubGVuZ3RoICE9PSAyIHx8XG4gICAgICAgICAgICAhdGhpcy5sbmdSYW5nZSB8fCB0aGlzLmxuZ1JhbmdlLmxlbmd0aCAhPT0gMikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXRCb3VuZHMoW3RoaXMubG5nUmFuZ2VbMF0sIHRoaXMubGF0UmFuZ2VbMF1dLCBbdGhpcy5sbmdSYW5nZVsxXSwgdGhpcy5sYXRSYW5nZVsxXV0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBnZW9ncmFwaGljYWwgY29uc3RyYWludHMuXG4gICAgICovXG4gICAgc2V0TWF4Qm91bmRzKGJvdW5kcz86IExuZ0xhdEJvdW5kcykge1xuICAgICAgICBpZiAoYm91bmRzKSB7XG4gICAgICAgICAgICB0aGlzLmxuZ1JhbmdlID0gW2JvdW5kcy5nZXRXZXN0KCksIGJvdW5kcy5nZXRFYXN0KCldO1xuICAgICAgICAgICAgdGhpcy5sYXRSYW5nZSA9IFtib3VuZHMuZ2V0U291dGgoKSwgYm91bmRzLmdldE5vcnRoKCldO1xuICAgICAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxuZ1JhbmdlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubGF0UmFuZ2UgPSBbLXRoaXMubWF4VmFsaWRMYXRpdHVkZSwgdGhpcy5tYXhWYWxpZExhdGl0dWRlXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgcG9zTWF0cml4IHRoYXQsIGdpdmVuIGEgdGlsZSBjb29yZGluYXRlLCB3b3VsZCBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIHRpbGUgb24gYSBtYXAuXG4gICAgICogQHBhcmFtIHtVbndyYXBwZWRUaWxlSUR9IHVud3JhcHBlZFRpbGVJRDtcbiAgICAgKi9cbiAgICBjYWxjdWxhdGVQb3NNYXRyaXgodW53cmFwcGVkVGlsZUlEOiBVbndyYXBwZWRUaWxlSUQsIGFsaWduZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IEZsb2F0MzJBcnJheSB7XG4gICAgICAgIGNvbnN0IHBvc01hdHJpeEtleSA9IHVud3JhcHBlZFRpbGVJRC5rZXk7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gYWxpZ25lZCA/IHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZSA6IHRoaXMuX3Bvc01hdHJpeENhY2hlO1xuICAgICAgICBpZiAoY2FjaGVbcG9zTWF0cml4S2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlW3Bvc01hdHJpeEtleV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYW5vbmljYWwgPSB1bndyYXBwZWRUaWxlSUQuY2Fub25pY2FsO1xuICAgICAgICBjb25zdCBzY2FsZSA9IHRoaXMud29ybGRTaXplIC8gdGhpcy56b29tU2NhbGUoY2Fub25pY2FsLnopO1xuICAgICAgICBjb25zdCB1bndyYXBwZWRYID0gY2Fub25pY2FsLnggKyBNYXRoLnBvdygyLCBjYW5vbmljYWwueikgKiB1bndyYXBwZWRUaWxlSUQud3JhcDtcblxuICAgICAgICBjb25zdCBwb3NNYXRyaXggPSBtYXQ0LmlkZW50aXR5KG5ldyBGbG9hdDY0QXJyYXkoMTYpKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUocG9zTWF0cml4LCBwb3NNYXRyaXgsIFt1bndyYXBwZWRYICogc2NhbGUsIGNhbm9uaWNhbC55ICogc2NhbGUsIDBdKTtcbiAgICAgICAgbWF0NC5zY2FsZShwb3NNYXRyaXgsIHBvc01hdHJpeCwgW3NjYWxlIC8gRVhURU5ULCBzY2FsZSAvIEVYVEVOVCwgMV0pO1xuICAgICAgICBtYXQ0Lm11bHRpcGx5KHBvc01hdHJpeCwgYWxpZ25lZCA/IHRoaXMuYWxpZ25lZFByb2pNYXRyaXggOiB0aGlzLnByb2pNYXRyaXgsIHBvc01hdHJpeCk7XG5cbiAgICAgICAgY2FjaGVbcG9zTWF0cml4S2V5XSA9IG5ldyBGbG9hdDMyQXJyYXkocG9zTWF0cml4KTtcbiAgICAgICAgcmV0dXJuIGNhY2hlW3Bvc01hdHJpeEtleV07XG4gICAgfVxuXG4gICAgY3VzdG9tTGF5ZXJNYXRyaXgoKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lcmNhdG9yTWF0cml4LnNsaWNlKCk7XG4gICAgfVxuXG4gICAgX2NvbnN0cmFpbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbnRlciB8fCAhdGhpcy53aWR0aCB8fCAhdGhpcy5oZWlnaHQgfHwgdGhpcy5fY29uc3RyYWluaW5nKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fY29uc3RyYWluaW5nID0gdHJ1ZTtcblxuICAgICAgICBsZXQgbWluWSA9IC05MDtcbiAgICAgICAgbGV0IG1heFkgPSA5MDtcbiAgICAgICAgbGV0IG1pblggPSAtMTgwO1xuICAgICAgICBsZXQgbWF4WCA9IDE4MDtcbiAgICAgICAgbGV0IHN5LCBzeCwgeDIsIHkyO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5zaXplLFxuICAgICAgICAgICAgdW5tb2RpZmllZCA9IHRoaXMuX3VubW9kaWZpZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMubGF0UmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhdFJhbmdlID0gdGhpcy5sYXRSYW5nZTtcbiAgICAgICAgICAgIG1pblkgPSBtZXJjYXRvcllmcm9tTGF0KGxhdFJhbmdlWzFdKSAqIHRoaXMud29ybGRTaXplO1xuICAgICAgICAgICAgbWF4WSA9IG1lcmNhdG9yWWZyb21MYXQobGF0UmFuZ2VbMF0pICogdGhpcy53b3JsZFNpemU7XG4gICAgICAgICAgICBzeSA9IG1heFkgLSBtaW5ZIDwgc2l6ZS55ID8gc2l6ZS55IC8gKG1heFkgLSBtaW5ZKSA6IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sbmdSYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgbG5nUmFuZ2UgPSB0aGlzLmxuZ1JhbmdlO1xuICAgICAgICAgICAgbWluWCA9IG1lcmNhdG9yWGZyb21MbmcobG5nUmFuZ2VbMF0pICogdGhpcy53b3JsZFNpemU7XG4gICAgICAgICAgICBtYXhYID0gbWVyY2F0b3JYZnJvbUxuZyhsbmdSYW5nZVsxXSkgKiB0aGlzLndvcmxkU2l6ZTtcbiAgICAgICAgICAgIHN4ID0gbWF4WCAtIG1pblggPCBzaXplLnggPyBzaXplLnggLyAobWF4WCAtIG1pblgpIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5wb2ludDtcblxuICAgICAgICAvLyBob3cgbXVjaCB0aGUgbWFwIHNob3VsZCBzY2FsZSB0byBmaXQgdGhlIHNjcmVlbiBpbnRvIGdpdmVuIGxhdGl0dWRlL2xvbmdpdHVkZSByYW5nZXNcbiAgICAgICAgY29uc3QgcyA9IE1hdGgubWF4KHN4IHx8IDAsIHN5IHx8IDApO1xuXG4gICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHRoaXMudW5wcm9qZWN0KG5ldyBQb2ludChcbiAgICAgICAgICAgICAgICBzeCA/IChtYXhYICsgbWluWCkgLyAyIDogcG9pbnQueCxcbiAgICAgICAgICAgICAgICBzeSA/IChtYXhZICsgbWluWSkgLyAyIDogcG9pbnQueSkpO1xuICAgICAgICAgICAgdGhpcy56b29tICs9IHRoaXMuc2NhbGVab29tKHMpO1xuICAgICAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IHVubW9kaWZpZWQ7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJhaW5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxhdFJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCB5ID0gcG9pbnQueSxcbiAgICAgICAgICAgICAgICBoMiA9IHNpemUueSAvIDI7XG5cbiAgICAgICAgICAgIGlmICh5IC0gaDIgPCBtaW5ZKSB5MiA9IG1pblkgKyBoMjtcbiAgICAgICAgICAgIGlmICh5ICsgaDIgPiBtYXhZKSB5MiA9IG1heFkgLSBoMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxuZ1JhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gcG9pbnQueCxcbiAgICAgICAgICAgICAgICB3MiA9IHNpemUueCAvIDI7XG5cbiAgICAgICAgICAgIGlmICh4IC0gdzIgPCBtaW5YKSB4MiA9IG1pblggKyB3MjtcbiAgICAgICAgICAgIGlmICh4ICsgdzIgPiBtYXhYKSB4MiA9IG1heFggLSB3MjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHBhbiB0aGUgbWFwIGlmIHRoZSBzY3JlZW4gZ29lcyBvZmYgdGhlIHJhbmdlXG4gICAgICAgIGlmICh4MiAhPT0gdW5kZWZpbmVkIHx8IHkyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy51bnByb2plY3QobmV3IFBvaW50KFxuICAgICAgICAgICAgICAgIHgyICE9PSB1bmRlZmluZWQgPyB4MiA6IHBvaW50LngsXG4gICAgICAgICAgICAgICAgeTIgIT09IHVuZGVmaW5lZCA/IHkyIDogcG9pbnQueSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IHVubW9kaWZpZWQ7XG4gICAgICAgIHRoaXMuX2NvbnN0cmFpbmluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIF9jYWxjTWF0cmljZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5oZWlnaHQpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgPSAwLjUgLyBNYXRoLnRhbih0aGlzLl9mb3YgLyAyKSAqIHRoaXMuaGVpZ2h0O1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBwb2ludCBbd2lkdGgvMiwgaGVpZ2h0LzJdIHRvIHRoZVxuICAgICAgICAvLyBjZW50ZXIgdG9wIHBvaW50IFt3aWR0aC8yLCAwXSBpbiBaIHVuaXRzLCB1c2luZyB0aGUgbGF3IG9mIHNpbmVzLlxuICAgICAgICAvLyAxIFogdW5pdCBpcyBlcXVpdmFsZW50IHRvIDEgaG9yaXpvbnRhbCBweCBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYXBcbiAgICAgICAgLy8gKHRoZSBkaXN0YW5jZSBiZXR3ZWVuW3dpZHRoLzIsIGhlaWdodC8yXSBhbmQgW3dpZHRoLzIgKyAxLCBoZWlnaHQvMl0pXG4gICAgICAgIGNvbnN0IGhhbGZGb3YgPSB0aGlzLl9mb3YgLyAyO1xuICAgICAgICBjb25zdCBncm91bmRBbmdsZSA9IE1hdGguUEkgLyAyICsgdGhpcy5fcGl0Y2g7XG4gICAgICAgIGNvbnN0IHRvcEhhbGZTdXJmYWNlRGlzdGFuY2UgPSBNYXRoLnNpbihoYWxmRm92KSAqIHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIE1hdGguc2luKE1hdGguUEkgLSBncm91bmRBbmdsZSAtIGhhbGZGb3YpO1xuICAgICAgICBjb25zdCBwb2ludCA9IHRoaXMucG9pbnQ7XG4gICAgICAgIGNvbnN0IHggPSBwb2ludC54LCB5ID0gcG9pbnQueTtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgeiBkaXN0YW5jZSBvZiB0aGUgZmFydGhlc3QgZnJhZ21lbnQgdGhhdCBzaG91bGQgYmUgcmVuZGVyZWQuXG4gICAgICAgIGNvbnN0IGZ1cnRoZXN0RGlzdGFuY2UgPSBNYXRoLmNvcyhNYXRoLlBJIC8gMiAtIHRoaXMuX3BpdGNoKSAqIHRvcEhhbGZTdXJmYWNlRGlzdGFuY2UgKyB0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U7XG4gICAgICAgIC8vIEFkZCBhIGJpdCBleHRyYSB0byBhdm9pZCBwcmVjaXNpb24gcHJvYmxlbXMgd2hlbiBhIGZyYWdtZW50J3MgZGlzdGFuY2UgaXMgZXhhY3RseSBgZnVydGhlc3REaXN0YW5jZWBcbiAgICAgICAgY29uc3QgZmFyWiA9IGZ1cnRoZXN0RGlzdGFuY2UgKiAxLjAxO1xuXG4gICAgICAgIC8vIFRoZSBsYXJnZXIgdGhlIHZhbHVlIG9mIG5lYXJaIGlzXG4gICAgICAgIC8vIC0gdGhlIG1vcmUgZGVwdGggcHJlY2lzaW9uIGlzIGF2YWlsYWJsZSBmb3IgZmVhdHVyZXMgKGdvb2QpXG4gICAgICAgIC8vIC0gY2xpcHBpbmcgc3RhcnRzIGFwcGVhcmluZyBzb29uZXIgd2hlbiB0aGUgY2FtZXJhIGlzIGNsb3NlIHRvIDNkIGZlYXR1cmVzIChiYWQpXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNtYWxsZXIgdmFsdWVzIHdvcmtlZCB3ZWxsIGZvciBtYXBib3gtZ2wtanMgYnV0IGRlY2tnbCB3YXMgZW5jb3VudGVyaW5nIHByZWNpc2lvbiBpc3N1ZXNcbiAgICAgICAgLy8gd2hlbiByZW5kZXJpbmcgaXQncyBsYXllcnMgdXNpbmcgY3VzdG9tIGxheWVycy4gVGhpcyB2YWx1ZSB3YXMgZXhwZXJpbWVudGFsbHkgY2hvc2VuIGFuZFxuICAgICAgICAvLyBzZWVtcyB0byBzb2x2ZSB6LWZpZ2h0aW5nIGlzc3VlcyBpbiBkZWNrZ2wgd2hpbGUgbm90IGNsaXBwaW5nIGJ1aWxkaW5ncyB0b28gY2xvc2UgdG8gdGhlIGNhbWVyYS5cbiAgICAgICAgY29uc3QgbmVhclogPSB0aGlzLmhlaWdodCAvIDUwO1xuXG4gICAgICAgIC8vIG1hdHJpeCBmb3IgY29udmVyc2lvbiBmcm9tIGxvY2F0aW9uIHRvIEdMIGNvb3JkaW5hdGVzICgtMSAuLiAxKVxuICAgICAgICBsZXQgbSA9IG5ldyBGbG9hdDY0QXJyYXkoMTYpO1xuICAgICAgICBtYXQ0LnBlcnNwZWN0aXZlKG0sIHRoaXMuX2ZvdiwgdGhpcy53aWR0aCAvIHRoaXMuaGVpZ2h0LCBuZWFyWiwgZmFyWik7XG5cbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbMSwgLTEsIDFdKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUobSwgbSwgWzAsIDAsIC10aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2VdKTtcbiAgICAgICAgbWF0NC5yb3RhdGVYKG0sIG0sIHRoaXMuX3BpdGNoKTtcbiAgICAgICAgbWF0NC5yb3RhdGVaKG0sIG0sIHRoaXMuYW5nbGUpO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbLXgsIC15LCAwXSk7XG5cbiAgICAgICAgLy8gVGhlIG1lcmNhdG9yTWF0cml4IGNhbiBiZSB1c2VkIHRvIHRyYW5zZm9ybSBwb2ludHMgZnJvbSBtZXJjYXRvciBjb29yZGluYXRlc1xuICAgICAgICAvLyAoWzAsIDBdIG53LCBbMSwgMV0gc2UpIHRvIEdMIGNvb3JkaW5hdGVzLlxuICAgICAgICB0aGlzLm1lcmNhdG9yTWF0cml4ID0gbWF0NC5zY2FsZShbXSwgbSwgW3RoaXMud29ybGRTaXplLCB0aGlzLndvcmxkU2l6ZSwgdGhpcy53b3JsZFNpemVdKTtcblxuICAgICAgICAvLyBzY2FsZSB2ZXJ0aWNhbGx5IHRvIG1ldGVycyBwZXIgcGl4ZWwgKGludmVyc2Ugb2YgZ3JvdW5kIHJlc29sdXRpb24pOlxuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxLCAxLCBtZXJjYXRvclpmcm9tQWx0aXR1ZGUoMSwgdGhpcy5jZW50ZXIubGF0KSAqIHRoaXMud29ybGRTaXplLCAxXSk7XG5cbiAgICAgICAgdGhpcy5wcm9qTWF0cml4ID0gbTtcblxuICAgICAgICAvLyBNYWtlIGEgc2Vjb25kIHByb2plY3Rpb24gbWF0cml4IHRoYXQgaXMgYWxpZ25lZCB0byBhIHBpeGVsIGdyaWQgZm9yIHJlbmRlcmluZyByYXN0ZXIgdGlsZXMuXG4gICAgICAgIC8vIFdlJ3JlIHJvdW5kaW5nIHRoZSAoZmxvYXRpbmcgcG9pbnQpIHgveSB2YWx1ZXMgdG8gYWNoaWV2ZSB0byBhdm9pZCByZW5kZXJpbmcgcmFzdGVyIGltYWdlcyB0byBmcmFjdGlvbmFsXG4gICAgICAgIC8vIGNvb3JkaW5hdGVzLiBBZGRpdGlvbmFsbHksIHdlIGFkanVzdCBieSBoYWxmIGEgcGl4ZWwgaW4gZWl0aGVyIGRpcmVjdGlvbiBpbiBjYXNlIHRoYXQgdmlld3BvcnQgZGltZW5zaW9uXG4gICAgICAgIC8vIGlzIGFuIG9kZCBpbnRlZ2VyIHRvIHByZXNlcnZlIHJlbmRlcmluZyB0byB0aGUgcGl4ZWwgZ3JpZC4gV2UncmUgcm90YXRpbmcgdGhpcyBzaGlmdCBiYXNlZCBvbiB0aGUgYW5nbGVcbiAgICAgICAgLy8gb2YgdGhlIHRyYW5zZm9ybWF0aW9uIHNvIHRoYXQgMMOCwrAsIDkww4LCsCwgMTgww4LCsCwgYW5kIDI3MMOCwrAgcmFzdGVycyBhcmUgY3Jpc3AsIGFuZCBhZGp1c3QgdGhlIHNoaWZ0IHNvIHRoYXRcbiAgICAgICAgLy8gaXQgaXMgYWx3YXlzIDw9IDAuNSBwaXhlbHMuXG4gICAgICAgIGNvbnN0IHhTaGlmdCA9ICh0aGlzLndpZHRoICUgMikgLyAyLCB5U2hpZnQgPSAodGhpcy5oZWlnaHQgJSAyKSAvIDIsXG4gICAgICAgICAgICBhbmdsZUNvcyA9IE1hdGguY29zKHRoaXMuYW5nbGUpLCBhbmdsZVNpbiA9IE1hdGguc2luKHRoaXMuYW5nbGUpLFxuICAgICAgICAgICAgZHggPSB4IC0gTWF0aC5yb3VuZCh4KSArIGFuZ2xlQ29zICogeFNoaWZ0ICsgYW5nbGVTaW4gKiB5U2hpZnQsXG4gICAgICAgICAgICBkeSA9IHkgLSBNYXRoLnJvdW5kKHkpICsgYW5nbGVDb3MgKiB5U2hpZnQgKyBhbmdsZVNpbiAqIHhTaGlmdDtcbiAgICAgICAgY29uc3QgYWxpZ25lZE0gPSBuZXcgRmxvYXQ2NEFycmF5KG0pO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShhbGlnbmVkTSwgYWxpZ25lZE0sIFsgZHggPiAwLjUgPyBkeCAtIDEgOiBkeCwgZHkgPiAwLjUgPyBkeSAtIDEgOiBkeSwgMCBdKTtcbiAgICAgICAgdGhpcy5hbGlnbmVkUHJvak1hdHJpeCA9IGFsaWduZWRNO1xuXG4gICAgICAgIG0gPSBtYXQ0LmNyZWF0ZSgpO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFt0aGlzLndpZHRoIC8gMiwgLXRoaXMuaGVpZ2h0IC8gMiwgMV0pO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbMSwgLTEsIDBdKTtcbiAgICAgICAgdGhpcy5sYWJlbFBsYW5lTWF0cml4ID0gbTtcblxuICAgICAgICBtID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbMSwgLTEsIDFdKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUobSwgbSwgWy0xLCAtMSwgMF0pO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsyIC8gdGhpcy53aWR0aCwgMiAvIHRoaXMuaGVpZ2h0LCAxXSk7XG4gICAgICAgIHRoaXMuZ2xDb29yZE1hdHJpeCA9IG07XG5cbiAgICAgICAgLy8gbWF0cml4IGZvciBjb252ZXJzaW9uIGZyb20gbG9jYXRpb24gdG8gc2NyZWVuIGNvb3JkaW5hdGVzXG4gICAgICAgIHRoaXMucGl4ZWxNYXRyaXggPSBtYXQ0Lm11bHRpcGx5KG5ldyBGbG9hdDY0QXJyYXkoMTYpLCB0aGlzLmxhYmVsUGxhbmVNYXRyaXgsIHRoaXMucHJvak1hdHJpeCk7XG5cbiAgICAgICAgLy8gaW52ZXJzZSBtYXRyaXggZm9yIGNvbnZlcnNpb24gZnJvbSBzY3JlZW4gY29vcmRpbmFlcyB0byBsb2NhdGlvblxuICAgICAgICBtID0gbWF0NC5pbnZlcnQobmV3IEZsb2F0NjRBcnJheSgxNiksIHRoaXMucGl4ZWxNYXRyaXgpO1xuICAgICAgICBpZiAoIW0pIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBpbnZlcnQgbWF0cml4XCIpO1xuICAgICAgICB0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSA9IG07XG5cbiAgICAgICAgdGhpcy5fcG9zTWF0cml4Q2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlID0ge307XG4gICAgfVxuXG4gICAgbWF4UGl0Y2hTY2FsZUZhY3RvcigpIHtcbiAgICAgICAgLy8gY2FsY01hdHJpY2VzIGhhc24ndCBydW4geWV0XG4gICAgICAgIGlmICghdGhpcy5waXhlbE1hdHJpeEludmVyc2UpIHJldHVybiAxO1xuXG4gICAgICAgIGNvbnN0IGNvb3JkID0gdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KDAsIDApKTtcbiAgICAgICAgY29uc3QgcCA9IFtjb29yZC54ICogdGhpcy53b3JsZFNpemUsIGNvb3JkLnkgKiB0aGlzLndvcmxkU2l6ZSwgMCwgMV07XG4gICAgICAgIGNvbnN0IHRvcFBvaW50ID0gdmVjNC50cmFuc2Zvcm1NYXQ0KHAsIHAsIHRoaXMucGl4ZWxNYXRyaXgpO1xuICAgICAgICByZXR1cm4gdG9wUG9pbnRbM10gLyB0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGUgY2FtZXJhIGxvb2tzIGF0IHRoZSBtYXAgZnJvbSBhIDNEIChsbmcsIGxhdCwgYWx0aXR1ZGUpIGxvY2F0aW9uLiBMZXQncyB1c2UgYGNhbWVyYUxvY2F0aW9uYFxuICAgICAqIGFzIHRoZSBuYW1lIGZvciB0aGUgbG9jYXRpb24gdW5kZXIgdGhlIGNhbWVyYSBhbmQgb24gdGhlIHN1cmZhY2Ugb2YgdGhlIGVhcnRoIChsbmcsIGxhdCwgMCkuXG4gICAgICogYGNhbWVyYVBvaW50YCBpcyB0aGUgcHJvamVjdGVkIHBvc2l0aW9uIG9mIHRoZSBgY2FtZXJhTG9jYXRpb25gLlxuICAgICAqXG4gICAgICogVGhpcyBwb2ludCBpcyB1c2VmdWwgdG8gdXMgYmVjYXVzZSBvbmx5IGZpbGwtZXh0cnVzaW9ucyB0aGF0IGFyZSBiZXR3ZWVuIGBjYW1lcmFQb2ludGAgYW5kXG4gICAgICogdGhlIHF1ZXJ5IHBvaW50IG9uIHRoZSBzdXJmYWNlIG9mIHRoZSBlYXJ0aCBjYW4gZXh0ZW5kIGFuZCBpbnRlcnNlY3QgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogV2hlbiB0aGUgbWFwIGlzIG5vdCBwaXRjaGVkIHRoZSBgY2FtZXJhUG9pbnRgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGNlbnRlciBvZiB0aGUgbWFwIGJlY2F1c2VcbiAgICAgKiB0aGUgY2FtZXJhIGlzIHJpZ2h0IGFib3ZlIHRoZSBjZW50ZXIgb2YgdGhlIG1hcC5cbiAgICAgKi9cbiAgICBnZXRDYW1lcmFQb2ludCgpIHtcbiAgICAgICAgY29uc3QgcGl0Y2ggPSB0aGlzLl9waXRjaDtcbiAgICAgICAgY29uc3QgeU9mZnNldCA9IE1hdGgudGFuKHBpdGNoKSAqICh0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgfHwgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNlbnRlclBvaW50LmFkZChuZXcgUG9pbnQoMCwgeU9mZnNldCkpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogV2hlbiB0aGUgbWFwIGlzIHBpdGNoZWQsIHNvbWUgb2YgdGhlIDNEIGZlYXR1cmVzIHRoYXQgaW50ZXJzZWN0IGEgcXVlcnkgd2lsbCBub3QgaW50ZXJzZWN0XG4gICAgICogdGhlIHF1ZXJ5IGF0IHRoZSBzdXJmYWNlIG9mIHRoZSBlYXJ0aC4gSW5zdGVhZCB0aGUgZmVhdHVyZSBtYXkgYmUgY2xvc2VyIGFuZCBvbmx5IGludGVyc2VjdFxuICAgICAqIHRoZSBxdWVyeSBiZWNhdXNlIGl0IGV4dHJ1ZGVzIGludG8gdGhlIGFpci5cbiAgICAgKlxuICAgICAqIFRoaXMgcmV0dXJucyBhIGdlb21ldHJ5IHRoYXQgaW5jbHVkZXMgYWxsIG9mIHRoZSBvcmlnaW5hbCBxdWVyeSBhcyB3ZWxsIGFzIGFsbCBwb3NzaWJsZSBhcmVzIG9mIHRoZVxuICAgICAqIHNjcmVlbiB3aGVyZSB0aGUgKmJhc2UqIG9mIGEgdmlzaWJsZSBleHRydXNpb24gY291bGQgYmUuXG4gICAgICogIC0gRm9yIHBvaW50IHF1ZXJpZXMsIHRoZSBsaW5lIGZyb20gdGhlIHF1ZXJ5IHBvaW50IHRvIHRoZSBcImNhbWVyYSBwb2ludFwiXG4gICAgICogIC0gRm9yIG90aGVyIGdlb21ldHJpZXMsIHRoZSBlbnZlbG9wZSBvZiB0aGUgcXVlcnkgZ2VvbWV0cnkgYW5kIHRoZSBcImNhbWVyYSBwb2ludFwiXG4gICAgICovXG4gICAgZ2V0Q2FtZXJhUXVlcnlHZW9tZXRyeShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4pOiBBcnJheTxQb2ludD4ge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5nZXRDYW1lcmFQb2ludCgpO1xuXG4gICAgICAgIGlmIChxdWVyeUdlb21ldHJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIFtxdWVyeUdlb21ldHJ5WzBdLCBjXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBtaW5YID0gYy54O1xuICAgICAgICAgICAgbGV0IG1pblkgPSBjLnk7XG4gICAgICAgICAgICBsZXQgbWF4WCA9IGMueDtcbiAgICAgICAgICAgIGxldCBtYXhZID0gYy55O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcC54KTtcbiAgICAgICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcC55KTtcbiAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcC54KTtcbiAgICAgICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcC55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KG1pblgsIG1pblkpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChtYXhYLCBtaW5ZKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQobWF4WCwgbWF4WSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KG1pblgsIG1heFkpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChtaW5YLCBtaW5ZKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJhbnNmb3JtO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbi8qKlxuICogVGhyb3R0bGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIHJ1biBhdCBtb3N0IGV2ZXJ5IGBwZXJpb2RgIG1pbGxpc2Vjb25kcy5cbiBUaHJvdHRsZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gcnVuIGF0IG1vc3QgZXZlcnkgcGVyaW9kIG1pbGxpc2Vjb25kcy5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRocm90dGxlKGZuOiAoKSA9PiB2b2lkLCB0aW1lOiBudW1iZXIpOiAoKSA9PiA/VGltZW91dElEIHtcbiAgICBsZXQgcGVuZGluZyA9IGZhbHNlO1xuICAgIGxldCB0aW1lcklkOiA/VGltZW91dElEID0gbnVsbDtcblxuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgICB0aW1lcklkID0gbnVsbDtcbiAgICAgICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dChsYXRlciwgdGltZSk7XG4gICAgICAgICAgICBwZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcGVuZGluZyA9IHRydWU7XG4gICAgICAgIGlmICghdGltZXJJZCkge1xuICAgICAgICAgICAgbGF0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGltZXJJZDtcbiAgICB9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtiaW5kQWxsfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnLi4vdXRpbC90aHJvdHRsZSc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5cbi8qXG4gKiBBZGRzIHRoZSBtYXAncyBwb3NpdGlvbiB0byBpdHMgcGFnZSdzIGxvY2F0aW9uIGhhc2guXG4gKiBQYXNzZWQgYXMgYW4gb3B0aW9uIHRvIHRoZSBtYXAgb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIHtIYXNofSBgdGhpc2BcbiAqL1xuY2xhc3MgSGFzaCB7XG4gICAgX21hcDogTWFwO1xuICAgIF91cGRhdGVIYXNoOiAoKSA9PiA/VGltZW91dElEO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbkhhc2hDaGFuZ2UnLFxuICAgICAgICAgICAgJ191cGRhdGVIYXNoJ1xuICAgICAgICBdLCB0aGlzKTtcblxuICAgICAgICAvLyBNb2JpbGUgU2FmYXJpIGRvZXNuJ3QgYWxsb3cgdXBkYXRpbmcgdGhlIGhhc2ggbW9yZSB0aGFuIDEwMCB0aW1lcyBwZXIgMzAgc2Vjb25kcy5cbiAgICAgICAgdGhpcy5fdXBkYXRlSGFzaCA9IHRocm90dGxlKHRoaXMuX3VwZGF0ZUhhc2hVbnRocm90dGxlZC5iaW5kKHRoaXMpLCAzMCAqIDEwMDAgLyAxMDApO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTWFwIGVsZW1lbnQgdG8gbGlzdGVuIGZvciBjb29yZGluYXRlIGNoYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBtYXBcbiAgICAgKiBAcmV0dXJucyB7SGFzaH0gYHRoaXNgXG4gICAgICovXG4gICAgYWRkVG8obWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRoaXMuX29uSGFzaENoYW5nZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9tYXAub24oJ21vdmVlbmQnLCB0aGlzLl91cGRhdGVIYXNoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBSZW1vdmVzIGhhc2hcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRoaXMuX29uSGFzaENoYW5nZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlSGFzaCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVIYXNoKCkpO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldEhhc2hTdHJpbmcobWFwRmVlZGJhY2s/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IHRoaXMuX21hcC5nZXRDZW50ZXIoKSxcbiAgICAgICAgICAgIHpvb20gPSBNYXRoLnJvdW5kKHRoaXMuX21hcC5nZXRab29tKCkgKiAxMDApIC8gMTAwLFxuICAgICAgICAgICAgLy8gZGVyaXZlZCBmcm9tIGVxdWF0aW9uOiA1MTJweCAqIDJeeiAvIDM2MCAvIDEwXmQgPCAwLjVweFxuICAgICAgICAgICAgcHJlY2lzaW9uID0gTWF0aC5jZWlsKCh6b29tICogTWF0aC5MTjIgKyBNYXRoLmxvZyg1MTIgLyAzNjAgLyAwLjUpKSAvIE1hdGguTE4xMCksXG4gICAgICAgICAgICBtID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiksXG4gICAgICAgICAgICBsbmcgPSBNYXRoLnJvdW5kKGNlbnRlci5sbmcgKiBtKSAvIG0sXG4gICAgICAgICAgICBsYXQgPSBNYXRoLnJvdW5kKGNlbnRlci5sYXQgKiBtKSAvIG0sXG4gICAgICAgICAgICBiZWFyaW5nID0gdGhpcy5fbWFwLmdldEJlYXJpbmcoKSxcbiAgICAgICAgICAgIHBpdGNoID0gdGhpcy5fbWFwLmdldFBpdGNoKCk7XG4gICAgICAgIGxldCBoYXNoID0gJyc7XG4gICAgICAgIGlmIChtYXBGZWVkYmFjaykge1xuICAgICAgICAgICAgLy8gbmV3IG1hcCBmZWVkYmFjayBzaXRlIGhhcyBzb21lIGNvbnN0cmFpbnRzIHRoYXQgZG9uJ3QgYWxsb3dcbiAgICAgICAgICAgIC8vIHVzIHRvIHVzZSB0aGUgc2FtZSBoYXNoIGZvcm1hdCBhcyB3ZSBkbyBmb3IgdGhlIE1hcCBoYXNoIG9wdGlvbi5cbiAgICAgICAgICAgIGhhc2ggKz0gYCMvJHtsbmd9LyR7bGF0fS8ke3pvb219YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhhc2ggKz0gYCMke3pvb219LyR7bGF0fS8ke2xuZ31gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJlYXJpbmcgfHwgcGl0Y2gpIGhhc2ggKz0gKGAvJHtNYXRoLnJvdW5kKGJlYXJpbmcgKiAxMCkgLyAxMH1gKTtcbiAgICAgICAgaWYgKHBpdGNoKSBoYXNoICs9IChgLyR7TWF0aC5yb3VuZChwaXRjaCl9YCk7XG4gICAgICAgIHJldHVybiBoYXNoO1xuICAgIH1cblxuICAgIF9vbkhhc2hDaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IGxvYyA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoJyMnLCAnJykuc3BsaXQoJy8nKTtcbiAgICAgICAgaWYgKGxvYy5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgdGhpcy5fbWFwLmp1bXBUbyh7XG4gICAgICAgICAgICAgICAgY2VudGVyOiBbK2xvY1syXSwgK2xvY1sxXV0sXG4gICAgICAgICAgICAgICAgem9vbTogK2xvY1swXSxcbiAgICAgICAgICAgICAgICBiZWFyaW5nOiArKGxvY1szXSB8fCAwKSxcbiAgICAgICAgICAgICAgICBwaXRjaDogKyhsb2NbNF0gfHwgMClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF91cGRhdGVIYXNoVW50aHJvdHRsZWQoKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldEhhc2hTdHJpbmcoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwgJycsIGhhc2gpO1xuICAgICAgICB9IGNhdGNoIChTZWN1cml0eUVycm9yKSB7XG4gICAgICAgICAgICAvLyBJRTExIGRvZXMgbm90IGFsbG93IHRoaXMgaWYgdGhlIHBhZ2UgaXMgd2l0aGluIGFuIGlmcmFtZSBjcmVhdGVkXG4gICAgICAgICAgICAvLyB3aXRoIGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LndyaXRlKC4uLikuXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzQxMFxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhhc2g7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uL3V0aWwvZG9tJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHR5cGUgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcblxuLyoqXG4gKiBgTWFwTW91c2VFdmVudGAgaXMgdGhlIGV2ZW50IHR5cGUgZm9yIG1vdXNlLXJlbGF0ZWQgbWFwIGV2ZW50cy5cbiAqIEBleHRlbmRzIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBNb3VzZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBldmVudCB0eXBlLlxuICAgICAqL1xuICAgIHR5cGU6ICdtb3VzZWRvd24nXG4gICAgICAgIHwgJ21vdXNldXAnXG4gICAgICAgIHwgJ2NsaWNrJ1xuICAgICAgICB8ICdkYmxjbGljaydcbiAgICAgICAgfCAnbW91c2Vtb3ZlJ1xuICAgICAgICB8ICdtb3VzZW92ZXInXG4gICAgICAgIHwgJ21vdXNlZW50ZXInXG4gICAgICAgIHwgJ21vdXNlbGVhdmUnXG4gICAgICAgIHwgJ21vdXNlb3V0J1xuICAgICAgICB8ICdjb250ZXh0bWVudSc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYE1hcGAgb2JqZWN0IHRoYXQgZmlyZWQgdGhlIGV2ZW50LlxuICAgICAqL1xuICAgIHRhcmdldDogTWFwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBldmVudCB3aGljaCBjYXVzZWQgdGhlIG1hcCBldmVudC5cbiAgICAgKi9cbiAgICBvcmlnaW5hbEV2ZW50OiBNb3VzZUV2ZW50O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBjdXJzb3IsIHJlbGF0aXZlIHRvIHRoZSBtYXAgYW5kIG1lYXN1cmVkIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lci5cbiAgICAgKi9cbiAgICBwb2ludDogUG9pbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZ2VvZ3JhcGhpYyBsb2NhdGlvbiBvbiB0aGUgbWFwIG9mIHRoZSBtb3VzZSBjdXJzb3IuXG4gICAgICovXG4gICAgbG5nTGF0OiBMbmdMYXQ7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBtYXAgYmVoYXZpb3JzOlxuICAgICAqXG4gICAgICogICAqIE9uIGBtb3VzZWRvd25gIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBEcmFnUGFuSGFuZGxlcn1cbiAgICAgKiAgICogT24gYG1vdXNlZG93bmAgZXZlbnRzLCB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfVxuICAgICAqICAgKiBPbiBgbW91c2Vkb3duYCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9XG4gICAgICogICAqIE9uIGBkYmxjbGlja2AgZXZlbnRzLCB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIERvdWJsZUNsaWNrWm9vbUhhbmRsZXJ9XG4gICAgICpcbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYHRydWVgIGlmIGBwcmV2ZW50RGVmYXVsdGAgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG5cbiAgICBfZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBtYXA6IE1hcCwgb3JpZ2luYWxFdmVudDogTW91c2VFdmVudCwgZGF0YTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBET00ubW91c2VQb3MobWFwLmdldENhbnZhc0NvbnRhaW5lcigpLCBvcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gbWFwLnVucHJvamVjdChwb2ludCk7XG4gICAgICAgIHN1cGVyKHR5cGUsIGV4dGVuZCh7cG9pbnQsIGxuZ0xhdCwgb3JpZ2luYWxFdmVudH0sIGRhdGEpKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRhcmdldCA9IG1hcDtcbiAgICB9XG59XG5cbi8qKlxuICogYE1hcFRvdWNoRXZlbnRgIGlzIHRoZSBldmVudCB0eXBlIGZvciB0b3VjaC1yZWxhdGVkIG1hcCBldmVudHMuXG4gKiBAZXh0ZW5kcyB7T2JqZWN0fVxuICovXG5leHBvcnQgY2xhc3MgTWFwVG91Y2hFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnQgdHlwZS5cbiAgICAgKi9cbiAgICB0eXBlOiAndG91Y2hzdGFydCdcbiAgICAgICAgfCAndG91Y2hlbmQnXG4gICAgICAgIHwgJ3RvdWNoY2FuY2VsJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBgTWFwYCBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgdGFyZ2V0OiBNYXA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGV2ZW50IHdoaWNoIGNhdXNlZCB0aGUgbWFwIGV2ZW50LlxuICAgICAqL1xuICAgIG9yaWdpbmFsRXZlbnQ6IFRvdWNoRXZlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZ2VvZ3JhcGhpYyBsb2NhdGlvbiBvbiB0aGUgbWFwIG9mIHRoZSBjZW50ZXIgb2YgdGhlIHRvdWNoIGV2ZW50IHBvaW50cy5cbiAgICAgKi9cbiAgICBsbmdMYXQ6IExuZ0xhdDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBjb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG9mIHRoZSB0b3VjaCBldmVudCBwb2ludHMsIHJlbGF0aXZlIHRvIHRoZSBtYXAgYW5kIG1lYXN1cmVkIGZyb20gdGhlIHRvcCBsZWZ0XG4gICAgICogY29ybmVyLlxuICAgICAqL1xuICAgIHBvaW50OiBQb2ludDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBwaXhlbCBjb29yZGluYXRlcyBjb3JyZXNwb25kaW5nIHRvIGFcbiAgICAgKiBbdG91Y2ggZXZlbnQncyBgdG91Y2hlc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ub3VjaEV2ZW50L3RvdWNoZXMpIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHBvaW50czogQXJyYXk8UG9pbnQ+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbnMgb24gdGhlIG1hcCBjb3JyZXNwb25kaW5nIHRvIGFcbiAgICAgKiBbdG91Y2ggZXZlbnQncyBgdG91Y2hlc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ub3VjaEV2ZW50L3RvdWNoZXMpIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGxuZ0xhdHM6IEFycmF5PExuZ0xhdD47XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBtYXAgYmVoYXZpb3JzOlxuICAgICAqXG4gICAgICogICAqIE9uIGB0b3VjaHN0YXJ0YCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9XG4gICAgICogICAqIE9uIGB0b3VjaHN0YXJ0YCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgVG91Y2hab29tUm90YXRlSGFuZGxlcn1cbiAgICAgKlxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgaWYgYHByZXZlbnREZWZhdWx0YCBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICovXG4gICAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cblxuICAgIF9kZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIG1hcDogTWFwLCBvcmlnaW5hbEV2ZW50OiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IERPTS50b3VjaFBvcyhtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCksIG9yaWdpbmFsRXZlbnQpO1xuICAgICAgICBjb25zdCBsbmdMYXRzID0gcG9pbnRzLm1hcCgodCkgPT4gbWFwLnVucHJvamVjdCh0KSk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzLnJlZHVjZSgocHJldiwgY3VyciwgaSwgYXJyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcHJldi5hZGQoY3Vyci5kaXYoYXJyLmxlbmd0aCkpO1xuICAgICAgICB9LCBuZXcgUG9pbnQoMCwgMCkpO1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBtYXAudW5wcm9qZWN0KHBvaW50KTtcbiAgICAgICAgc3VwZXIodHlwZSwge3BvaW50cywgcG9pbnQsIGxuZ0xhdHMsIGxuZ0xhdCwgb3JpZ2luYWxFdmVudH0pO1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIGBNYXBXaGVlbEV2ZW50YCBpcyB0aGUgZXZlbnQgdHlwZSBmb3IgdGhlIGB3aGVlbGAgbWFwIGV2ZW50LlxuICogQGV4dGVuZHMge09iamVjdH1cbiAqL1xuZXhwb3J0IGNsYXNzIE1hcFdoZWVsRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50IHR5cGUuXG4gICAgICovXG4gICAgdHlwZTogJ3doZWVsJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBgTWFwYCBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgdGFyZ2V0OiBNYXA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGV2ZW50IHdoaWNoIGNhdXNlZCB0aGUgbWFwIGV2ZW50LlxuICAgICAqL1xuICAgIG9yaWdpbmFsRXZlbnQ6IFdoZWVsRXZlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIFNjcm9sbFpvb21IYW5kbGVyfS5cbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYHRydWVgIGlmIGBwcmV2ZW50RGVmYXVsdGAgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG5cbiAgICBfZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBtYXA6IE1hcCwgb3JpZ2luYWxFdmVudDogV2hlZWxFdmVudCkge1xuICAgICAgICBzdXBlcih0eXBlLCB7b3JpZ2luYWxFdmVudH0pO1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgYE1hcEJveFpvb21FdmVudGAgaXMgdGhlIGV2ZW50IHR5cGUgZm9yIGJveHpvb20tcmVsYXRlZCBtYXAgZXZlbnRzLlxuICogYG9yaWdpbmFsRXZlbnRgIGNhbiBiZSBhIHtAbGluayBNYXAuZXZlbnQ6Y2xpY2t9IHdoZW4gdGhlIHpvb20gaXMgdHJpZ2dlcmVkIGJ5IGEgVUkgZXZlbnQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFwQm94Wm9vbUV2ZW50XG4gKiBAcHJvcGVydHkge01vdXNlRXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuZXhwb3J0IHR5cGUgTWFwQm94Wm9vbUV2ZW50ID0ge1xuICAgIHR5cGU6ICdib3h6b29tc3RhcnQnXG4gICAgICAgIHwgJ2JveHpvb21lbmQnXG4gICAgICAgIHwgJ2JveHpvb21jYW5jZWwnLFxuICAgIG1hcDogTWFwLFxuICAgIG9yaWdpbmFsRXZlbnQ6IE1vdXNlRXZlbnRcbn07XG5cbi8qKlxuICogQSBgTWFwRGF0YUV2ZW50YCBvYmplY3QgaXMgZW1pdHRlZCB3aXRoIHRoZSB7QGxpbmsgTWFwLmV2ZW50OmRhdGF9XG4gKiBhbmQge0BsaW5rIE1hcC5ldmVudDpkYXRhbG9hZGluZ30gZXZlbnRzLiBQb3NzaWJsZSB2YWx1ZXMgZm9yXG4gKiBgZGF0YVR5cGVgcyBhcmU6XG4gKlxuICogLSBgJ3NvdXJjZSdgOiBUaGUgbm9uLXRpbGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYW55IHNvdXJjZVxuICogLSBgJ3N0eWxlJ2A6IFRoZSBbc3R5bGVdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKSB1c2VkIGJ5IHRoZSBtYXBcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYXBEYXRhRXZlbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCBoYXMgY2hhbmdlZC4gT25lIG9mIGAnc291cmNlJ2AsIGAnc3R5bGUnYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzU291cmNlTG9hZGVkXSBUcnVlIGlmIHRoZSBldmVudCBoYXMgYSBgZGF0YVR5cGVgIG9mIGBzb3VyY2VgIGFuZCB0aGUgc291cmNlIGhhcyBubyBvdXRzdGFuZGluZyBuZXR3b3JrIHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFtzb3VyY2VdIFRoZSBbc3R5bGUgc3BlYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc291cmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzKSBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc291cmNlRGF0YVR5cGVdIEluY2x1ZGVkIGlmIHRoZSBldmVudCBoYXMgYSBgZGF0YVR5cGVgIG9mIGBzb3VyY2VgIGFuZCB0aGUgZXZlbnQgc2lnbmFsc1xuICogdGhhdCBpbnRlcm5hbCBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIG9yIGNoYW5nZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYG1ldGFkYXRhYCBhbmQgYGNvbnRlbnRgLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFt0aWxlXSBUaGUgdGlsZSBiZWluZyBsb2FkZWQgb3IgY2hhbmdlZCwgaWYgdGhlIGV2ZW50IGhhcyBhIGBkYXRhVHlwZWAgb2YgYHNvdXJjZWAgYW5kXG4gKiB0aGUgZXZlbnQgaXMgcmVsYXRlZCB0byBsb2FkaW5nIG9mIGEgdGlsZS5cbiAqIEBwcm9wZXJ0eSB7Q29vcmRpbmF0ZX0gW2Nvb3JkXSBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgdGlsZSBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYCBhbmRcbiAqIHRoZSBldmVudCBpcyByZWxhdGVkIHRvIGxvYWRpbmcgb2YgYSB0aWxlLlxuICovXG5leHBvcnQgdHlwZSBNYXBEYXRhRXZlbnQgPSB7XG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGFUeXBlOiBzdHJpbmdcbn07XG5cbmV4cG9ydCB0eXBlIE1hcENvbnRleHRFdmVudCA9IHtcbiAgICB0eXBlOiAnd2ViZ2xjb250ZXh0bG9zdCcgfCAnd2ViZ2xjb250ZXh0cmVzdG9yZWQnLFxuICAgIG9yaWdpbmFsRXZlbnQ6IFdlYkdMQ29udGV4dEV2ZW50XG59XG5cbmV4cG9ydCB0eXBlIE1hcEV2ZW50ID1cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIHByZXNzZWQgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2Vkb3duXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAnbW91c2Vkb3duJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyByZWxlYXNlZCB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZXVwXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAnbW91c2V1cCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgbW92ZWQgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2VvdmVyXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0dldCBjb29yZGluYXRlcyBvZiB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9tb3VzZS1wb3NpdGlvbi8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHVuZGVyIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hvdmVyLXN0eWxlcy8pXG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGhvdmVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWhvdmVyLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZW92ZXInXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIG1vdmVkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdXNlbW92ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAc2VlIFtHZXQgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbW91c2UtcG9zaXRpb24vKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB1bmRlciB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9ob3Zlci1zdHlsZXMvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBvdmVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWhvdmVyLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZW1vdmUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIHByZXNzZWQgYW5kIHJlbGVhc2VkIGF0IHRoZSBzYW1lIHBvaW50IG9uIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY2xpY2tcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQHNlZSBbTWVhc3VyZSBkaXN0YW5jZXNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWVhc3VyZS8pXG4gICAgICogQHNlZSBbQ2VudGVyIHRoZSBtYXAgb24gYSBjbGlja2VkIHN5bWJvbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jZW50ZXItb24tc3ltYm9sLylcbiAgICAgKi9cbiAgICB8ICdjbGljaydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgY2xpY2tlZCB0d2ljZSBhdCB0aGUgc2FtZSBwb2ludCBvbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IGRibGNsaWNrXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RibGNsaWNrJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBlbnRlcnMgYSB2aXNpYmxlIHBvcnRpb24gb2YgYSBzcGVjaWZpZWQgbGF5ZXIgZnJvbVxuICAgICAqIG91dHNpZGUgdGhhdCBsYXllciBvciBvdXRzaWRlIHRoZSBtYXAgY2FudmFzLiBUaGlzIGV2ZW50IGNhbiBvbmx5IGJlIGxpc3RlbmVkIGZvciB2aWEgdGhlIHRocmVlLWFyZ3VtZW50XG4gICAgICogdmVyc2lvbiBvZiB7QGxpbmsgTWFwI29ufSwgd2hlcmUgdGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2VlbnRlclxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdtb3VzZWVudGVyJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBsZWF2ZXMgYSB2aXNpYmxlIHBvcnRpb24gb2YgYSBzcGVjaWZpZWQgbGF5ZXIsIG9yIGxlYXZlc1xuICAgICAqIHRoZSBtYXAgY2FudmFzLiBUaGlzIGV2ZW50IGNhbiBvbmx5IGJlIGxpc3RlbmVkIGZvciB2aWEgdGhlIHRocmVlLWFyZ3VtZW50IHZlcnNpb24gb2Yge0BsaW5rIE1hcCNvbn0sXG4gICAgICogd2hlcmUgdGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2VsZWF2ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgdW5kZXIgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaG92ZXItc3R5bGVzLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZWxlYXZlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50IGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBsZWF2ZXMgdGhlIG1hcCdzIGNhbnZhcy5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZW91dFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdtb3VzZW91dCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHJpZ2h0IGJ1dHRvbiBvZiB0aGUgbW91c2UgaXMgY2xpY2tlZCBvciB0aGUgY29udGV4dCBtZW51IGtleSBpcyBwcmVzc2VkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbnRleHRtZW51XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2NvbnRleHRtZW51J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFtgd2hlZWxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvd2hlZWwpIGV2ZW50IG9jY3VycyB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCB3aGVlbFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcFdoZWVsRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICd3aGVlbCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoc3RhcnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvdG91Y2hzdGFydCkgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IHRvdWNoc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAndG91Y2hzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoZW5kYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3RvdWNoZW5kKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAndG91Y2hlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgW2B0b3VjaG1vdmVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvdG91Y2htb3ZlKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2htb3ZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3RvdWNobW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoY2FuY2VsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3RvdWNoY2FuY2VsKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hjYW5jZWxcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAndG91Y2hjYW5jZWwnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBqdXN0IGJlZm9yZSB0aGUgbWFwIGJlZ2lucyBhIHRyYW5zaXRpb24gZnJvbSBvbmVcbiAgICAgKiB2aWV3IHRvIGFub3RoZXIsIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjanVtcFRvfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3Zlc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ21vdmVzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24gZnJvbSBvbmUgdmlldyB0b1xuICAgICAqIGFub3RoZXIsIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ21vdmUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBqdXN0IGFmdGVyIHRoZSBtYXAgY29tcGxldGVzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZVxuICAgICAqIHZpZXcgdG8gYW5vdGhlciwgYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNqdW1wVG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqIEBzZWUgW1BsYXkgbWFwIGxvY2F0aW9ucyBhcyBhIHNsaWRlc2hvd10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wbGF5YmFjay1sb2NhdGlvbnMvKVxuICAgICAqIEBzZWUgW0ZpbHRlciBmZWF0dXJlcyB3aXRoaW4gbWFwIHZpZXddKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLWZlYXR1cmVzLXdpdGhpbi1tYXAtdmlldy8pXG4gICAgICovXG4gICAgfCAnbW92ZWVuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gc3RhcnRzLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RyYWdzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdkcmFnJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBlbmRzLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnZW5kXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7e29yaWdpbmFsRXZlbnQ6IERyYWdFdmVudH19IGRhdGFcbiAgICAgKi9cbiAgICB8ICdkcmFnZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQganVzdCBiZWZvcmUgdGhlIG1hcCBiZWdpbnMgYSB0cmFuc2l0aW9uIGZyb20gb25lIHpvb20gbGV2ZWwgdG8gYW5vdGhlcixcbiAgICAgKiBhcyB0aGUgcmVzdWx0IG9mIGVpdGhlciB1c2VyIGludGVyYWN0aW9uIG9yIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgTWFwI2ZseVRvfS5cbiAgICAgKlxuICAgICAqIEBldmVudCB6b29tc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3pvb21zdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24gZnJvbSBvbmUgem9vbSBsZXZlbCB0byBhbm90aGVyLFxuICAgICAqIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHpvb21cbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW1VwZGF0ZSBhIGNob3JvcGxldGggbGF5ZXIgYnkgem9vbSBsZXZlbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91cGRhdGluZy1jaG9yb3BsZXRoLylcbiAgICAgKi9cbiAgICB8ICd6b29tJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQganVzdCBhZnRlciB0aGUgbWFwIGNvbXBsZXRlcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgem9vbSBsZXZlbCB0byBhbm90aGVyLFxuICAgICAqIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHpvb21lbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3pvb21lbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIHN0YXJ0cy4gU2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcm90YXRlc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3JvdGF0ZXN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgcmVwZWF0ZWRseSBkdXJpbmcgYSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uIFNlZSB7QGxpbmsgRHJhZ1JvdGF0ZUhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IHJvdGF0ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAncm90YXRlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBlbmRzLiBTZWUge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCByb3RhdGVlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3JvdGF0ZWVuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW5ldmVyIHRoZSBtYXAncyBwaXRjaCAodGlsdCkgYmVnaW5zIGEgY2hhbmdlIGFzXG4gICAgICogdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30gLlxuICAgICAqXG4gICAgICogQGV2ZW50IHBpdGNoc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBFdmVudERhdGF9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdwaXRjaHN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbmV2ZXIgdGhlIG1hcCdzIHBpdGNoICh0aWx0KSBjaGFuZ2VzIGFzLlxuICAgICAqIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHBpdGNoXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRXZlbnREYXRhfSBkYXRhXG4gICAgICovXG4gICAgfCAncGl0Y2gnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgbWFwJ3MgcGl0Y2ggKHRpbHQpIGZpbmlzaGVzIGNoYW5naW5nIGFzXG4gICAgICogdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcGl0Y2hlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBFdmVudERhdGF9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdwaXRjaGVuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gc3RhcnRzLiBTZWUge0BsaW5rIEJveFpvb21IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBib3h6b29tc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBCb3hab29tRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdib3h6b29tc3RhcnQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGVuZHMuICBTZWUge0BsaW5rIEJveFpvb21IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBib3h6b29tZW5kXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICogQHByb3BlcnR5IHtNYXBCb3hab29tRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdib3h6b29tZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIGEgXCJib3ggem9vbVwiIGludGVyYWN0aW9uLCBvciB3aGVuIHRoZSBib3VuZGluZyBib3ggZG9lcyBub3QgbWVldCB0aGUgbWluaW11bSBzaXplIHRocmVzaG9sZC5cbiAgICAgKiBTZWUge0BsaW5rIEJveFpvb21IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBib3h6b29tY2FuY2VsXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwQm94Wm9vbUV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnYm94em9vbWNhbmNlbCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYXAgaGFzIGJlZW4gcmVzaXplZC5cbiAgICAgKlxuICAgICAqIEBldmVudCByZXNpemVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAncmVzaXplJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgV2ViR0wgY29udGV4dCBpcyBsb3N0LlxuICAgICAqXG4gICAgICogQGV2ZW50IHdlYmdsY29udGV4dGxvc3RcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAnd2ViZ2xjb250ZXh0bG9zdCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIFdlYkdMIGNvbnRleHQgaXMgcmVzdG9yZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgd2ViZ2xjb250ZXh0cmVzdG9yZWRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAnd2ViZ2xjb250ZXh0cmVzdG9yZWQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBpbW1lZGlhdGVseSBhZnRlciBhbGwgbmVjZXNzYXJ5IHJlc291cmNlcyBoYXZlIGJlZW4gZG93bmxvYWRlZFxuICAgICAqIGFuZCB0aGUgZmlyc3QgdmlzdWFsbHkgY29tcGxldGUgcmVuZGVyaW5nIG9mIHRoZSBtYXAgaGFzIG9jY3VycmVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAc2VlIFtEcmF3IEdlb0pTT04gcG9pbnRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dlb2pzb24tbWFya2Vycy8pXG4gICAgICogQHNlZSBbQWRkIGxpdmUgcmVhbHRpbWUgZGF0YV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLWdlb2pzb24vKVxuICAgICAqIEBzZWUgW0FuaW1hdGUgYSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hbmltYXRlLXBvaW50LWFsb25nLWxpbmUvKVxuICAgICAqL1xuICAgIHwgJ2xvYWQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuZXZlciB0aGUgbWFwIGlzIGRyYXduIHRvIHRoZSBzY3JlZW4sIGFzIHRoZSByZXN1bHQgb2ZcbiAgICAgKlxuICAgICAqIC0gYSBjaGFuZ2UgdG8gdGhlIG1hcCdzIHBvc2l0aW9uLCB6b29tLCBwaXRjaCwgb3IgYmVhcmluZ1xuICAgICAqIC0gYSBjaGFuZ2UgdG8gdGhlIG1hcCdzIHN0eWxlXG4gICAgICogLSBhIGNoYW5nZSB0byBhIEdlb0pTT04gc291cmNlXG4gICAgICogLSB0aGUgbG9hZGluZyBvZiBhIHZlY3RvciB0aWxlLCBHZW9KU09OIGZpbGUsIGdseXBoLCBvciBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBldmVudCByZW5kZXJcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAncmVuZGVyJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgdGhlIGxhc3QgZnJhbWUgcmVuZGVyZWQgYmVmb3JlIHRoZSBtYXAgZW50ZXJzIGFuXG4gICAgICogXCJpZGxlXCIgc3RhdGU6XG4gICAgICpcbiAgICAgKiAtIE5vIGNhbWVyYSB0cmFuc2l0aW9ucyBhcmUgaW4gcHJvZ3Jlc3NcbiAgICAgKiAtIEFsbCBjdXJyZW50bHkgcmVxdWVzdGVkIHRpbGVzIGhhdmUgbG9hZGVkXG4gICAgICogLSBBbGwgZmFkZS90cmFuc2l0aW9uIGFuaW1hdGlvbnMgaGF2ZSBjb21wbGV0ZWRcbiAgICAgKlxuICAgICAqIEBldmVudCBpZGxlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIHwgJ2lkbGUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgbWFwIGhhcyBiZWVuIHJlbW92ZWQgd2l0aCB7QGxpbmsgTWFwLmV2ZW50OnJlbW92ZX0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcmVtb3ZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIHwgJ3JlbW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzLiBUaGlzIGlzIEdMIEpTJ3MgcHJpbWFyeSBlcnJvciByZXBvcnRpbmdcbiAgICAgKiBtZWNoYW5pc20uIFdlIHVzZSBhbiBldmVudCBpbnN0ZWFkIG9mIGB0aHJvd2AgdG8gYmV0dGVyIGFjY29tbW9kYXRlXG4gICAgICogYXN5bmNyb25vdXMgb3BlcmF0aW9ucy4gSWYgbm8gbGlzdGVuZXJzIGFyZSBib3VuZCB0byB0aGUgYGVycm9yYCBldmVudCwgdGhlXG4gICAgICogZXJyb3Igd2lsbCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7e2Vycm9yOiB7bWVzc2FnZTogc3RyaW5nfX19IGRhdGFcbiAgICAgKi9cbiAgICB8ICdlcnJvcidcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW55IG1hcCBkYXRhIGxvYWRzIG9yIGNoYW5nZXMuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqXG4gICAgICogQGV2ZW50IGRhdGFcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdkYXRhJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbWFwJ3Mgc3R5bGUgbG9hZHMgb3IgY2hhbmdlcy4gU2VlXG4gICAgICoge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3R5bGVkYXRhXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRGF0YUV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnc3R5bGVkYXRhJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBvbmUgb2YgdGhlIG1hcCdzIHNvdXJjZXMgbG9hZHMgb3IgY2hhbmdlcywgaW5jbHVkaW5nIGlmIGEgdGlsZSBiZWxvbmdpbmdcbiAgICAgKiB0byBhIHNvdXJjZSBsb2FkcyBvciBjaGFuZ2VzLiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc291cmNlZGF0YVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3NvdXJjZWRhdGEnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGFueSBtYXAgZGF0YSAoc3R5bGUsIHNvdXJjZSwgdGlsZSwgZXRjKSBiZWdpbnMgbG9hZGluZyBvclxuICAgICAqIGNoYW5naW5nIGFzeW5jcm9ub3VzbHkuIEFsbCBgZGF0YWxvYWRpbmdgIGV2ZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBgZGF0YWBcbiAgICAgKiBvciBgZXJyb3JgIGV2ZW50LiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZGF0YWxvYWRpbmdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdkYXRhbG9hZGluZydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1hcCdzIHN0eWxlIGJlZ2lucyBsb2FkaW5nIG9yIGNoYW5naW5nIGFzeW5jcm9ub3VzbHkuXG4gICAgICogQWxsIGBzdHlsZWRhdGFsb2FkaW5nYCBldmVudHMgYXJlIGZvbGxvd2VkIGJ5IGEgYHN0eWxlZGF0YWBcbiAgICAgKiBvciBgZXJyb3JgIGV2ZW50LiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3R5bGVkYXRhbG9hZGluZ1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3N0eWxlZGF0YWxvYWRpbmcnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIG9uZSBvZiB0aGUgbWFwJ3Mgc291cmNlcyBiZWdpbnMgbG9hZGluZyBvciBjaGFuZ2luZyBhc3luY3Jvbm91c2x5LlxuICAgICAqIEFsbCBgc291cmNlZGF0YWxvYWRpbmdgIGV2ZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBgc291cmNlZGF0YWAgb3IgYGVycm9yYCBldmVudC5cbiAgICAgKiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc291cmNlZGF0YWxvYWRpbmdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdzb3VyY2VkYXRhbG9hZGluZydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW4gaWNvbiBvciBwYXR0ZXJuIG5lZWRlZCBieSB0aGUgc3R5bGUgaXMgbWlzc2luZy4gVGhlIG1pc3NpbmcgaW1hZ2UgY2FuXG4gICAgICogYmUgYWRkZWQgd2l0aCB7QGxpbmsgTWFwI2FkZEltYWdlfSB3aXRoaW4gdGhpcyBldmVudCBsaXN0ZW5lciBjYWxsYmFjayB0byBwcmV2ZW50IHRoZSBpbWFnZSBmcm9tXG4gICAgICogYmVpbmcgc2tpcHBlZC4gVGhpcyBldmVudCBjYW4gYmUgdXNlZCB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSBpY29ucyBhbmQgcGF0dGVybnMuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3R5bGVpbWFnZW1pc3NpbmdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIFRoZSBpZCBvZiB0aGUgbWlzc2luZyBpbWFnZS5cbiAgICAgKlxuICAgICAqIEBzZWUgW0dlbmVyYXRlIGFuZCBhZGQgYSBtaXNzaW5nIGljb24gdG8gdGhlIG1hcF0oaHR0cHM6Ly9tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS1taXNzaW5nLWdlbmVyYXRlZC8pXG4gICAgICovXG4gICAgfCAnc3R5bGVpbWFnZW1pc3NpbmcnXG5cbiAgICAvKipcbiAgICAgKiBAZXZlbnQgc3R5bGUubG9hZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHwgJ3N0eWxlLmxvYWQnO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmltcG9ydCB7ZWFzZSBhcyBfZWFzZSwgYmluZEFsbCwgYmV6aWVyfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uLy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi8uLi91dGlsL3Rhc2tfcXVldWUnO1xuXG4vLyBkZWx0YVkgdmFsdWUgZm9yIG1vdXNlIHNjcm9sbCB3aGVlbCBpZGVudGlmaWNhdGlvblxuY29uc3Qgd2hlZWxab29tRGVsdGEgPSA0LjAwMDI0NDE0MDYyNTtcblxuLy8gVGhlc2UgbWFnaWMgbnVtYmVycyBjb250cm9sIHRoZSByYXRlIG9mIHpvb20uIFRyYWNrcGFkIGV2ZW50cyBmaXJlIGF0IGEgZ3JlYXRlclxuLy8gZnJlcXVlbmN5IHRoYW4gbW91c2Ugc2Nyb2xsIHdoZWVsLCBzbyByZWR1Y2UgdGhlIHpvb20gcmF0ZSBwZXIgd2hlZWwgdGlja1xuY29uc3QgZGVmYXVsdFpvb21SYXRlID0gMSAvIDEwMDtcbmNvbnN0IHdoZWVsWm9vbVJhdGUgPSAxIC8gNDUwO1xuXG4vLyB1cHBlciBib3VuZCBvbiBob3cgbXVjaCB3ZSBzY2FsZSB0aGUgbWFwIGluIGFueSBzaW5nbGUgcmVuZGVyIGZyYW1lOyB0aGlzXG4vLyBpcyB1c2VkIHRvIGxpbWl0IHpvb20gcmF0ZSBpbiB0aGUgY2FzZSBvZiB2ZXJ5IGZhc3Qgc2Nyb2xsaW5nXG5jb25zdCBtYXhTY2FsZVBlckZyYW1lID0gMjtcblxuLyoqXG4gKiBUaGUgYFNjcm9sbFpvb21IYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSB0aGUgbWFwIGJ5IHNjcm9sbGluZy5cbiAqL1xuY2xhc3MgU2Nyb2xsWm9vbUhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3pvb21pbmc6IGJvb2xlYW47XG4gICAgX2Fyb3VuZENlbnRlcjogYm9vbGVhbjtcbiAgICBfYXJvdW5kOiBQb2ludDtcbiAgICBfYXJvdW5kUG9pbnQ6IFBvaW50O1xuICAgIF90eXBlOiAnd2hlZWwnIHwgJ3RyYWNrcGFkJyB8IG51bGw7XG4gICAgX2xhc3RWYWx1ZTogbnVtYmVyO1xuICAgIF90aW1lb3V0OiA/VGltZW91dElEOyAvLyB1c2VkIGZvciBkZWxheWVkLWhhbmRsaW5nIG9mIGEgc2luZ2xlIHdoZWVsIG1vdmVtZW50XG4gICAgX2ZpbmlzaFRpbWVvdXQ6ID9UaW1lb3V0SUQ7IC8vIHVzZWQgdG8gZGVsYXkgZmluYWwgJ3ttb3ZlLHpvb219ZW5kJyBldmVudHNcblxuICAgIF9sYXN0V2hlZWxFdmVudDogYW55O1xuICAgIF9sYXN0V2hlZWxFdmVudFRpbWU6IG51bWJlcjtcblxuICAgIF9zdGFydFpvb206ID9udW1iZXI7XG4gICAgX3RhcmdldFpvb206ID9udW1iZXI7XG4gICAgX2RlbHRhOiBudW1iZXI7XG4gICAgX2Vhc2luZzogPygobnVtYmVyKSA9PiBudW1iZXIpO1xuICAgIF9wcmV2RWFzZTogP3tzdGFydDogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyLCBlYXNpbmc6IChudW1iZXIpID0+IG51bWJlcn07XG5cbiAgICBfZnJhbWVJZDogP1Rhc2tJRDtcblxuICAgIF9kZWZhdWx0Wm9vbVJhdGU6IG51bWJlcjtcbiAgICBfd2hlZWxab29tUmF0ZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2VsID0gbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuXG4gICAgICAgIHRoaXMuX2RlbHRhID0gMDtcblxuICAgICAgICB0aGlzLl9kZWZhdWx0Wm9vbVJhdGUgPSBkZWZhdWx0Wm9vbVJhdGU7XG4gICAgICAgIHRoaXMuX3doZWVsWm9vbVJhdGUgPSB3aGVlbFpvb21SYXRlO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbldoZWVsJyxcbiAgICAgICAgICAgICdfb25UaW1lb3V0JyxcbiAgICAgICAgICAgICdfb25TY3JvbGxGcmFtZScsXG4gICAgICAgICAgICAnX29uU2Nyb2xsRmluaXNoZWQnXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgem9vbSByYXRlIG9mIGEgdHJhY2twYWRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3pvb21SYXRlID0gMS8xMDBdXG4gICAgICovXG4gICAgc2V0Wm9vbVJhdGUoem9vbVJhdGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9kZWZhdWx0Wm9vbVJhdGUgPSB6b29tUmF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHpvb20gcmF0ZSBvZiBhIG1vdXNlIHdoZWVsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aGVlbFpvb21SYXRlID0gMS80NTBdXG4gICAgICovXG4gICAgc2V0V2hlZWxab29tUmF0ZSh3aGVlbFpvb21SYXRlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fd2hlZWxab29tUmF0ZSA9IHdoZWVsWm9vbVJhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcInNjcm9sbCB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICAvKlxuICAgICogQWN0aXZlIHN0YXRlIGlzIHR1cm5lZCBvbiBhbmQgb2ZmIHdpdGggZXZlcnkgc2Nyb2xsIHdoZWVsIGV2ZW50IGFuZCBpcyBzZXQgYmFjayB0byBmYWxzZSBiZWZvcmUgdGhlIG1hcFxuICAgICogcmVuZGVyIGlzIGNhbGxlZCwgc28gX2FjdGl2ZSBpcyBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBzY3JvbGwgem9vbSBhbmltYXRpb24gaXMgaW5cbiAgICAqIHByb2dyZXNzLlxuICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcbiAgICB9XG5cbiAgICBpc1pvb21pbmcoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX3pvb21pbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYXJvdW5kXSBJZiBcImNlbnRlclwiIGlzIHBhc3NlZCwgbWFwIHdpbGwgem9vbSBhcm91bmQgY2VudGVyIG9mIG1hcFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC5zY3JvbGxab29tLmVuYWJsZSgpO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogIG1hcC5zY3JvbGxab29tLmVuYWJsZSh7IGFyb3VuZDogJ2NlbnRlcicgfSlcbiAgICAgKi9cbiAgICBlbmFibGUob3B0aW9uczogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9hcm91bmRDZW50ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuYXJvdW5kID09PSAnY2VudGVyJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJzY3JvbGwgdG8gem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC5zY3JvbGxab29tLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uV2hlZWwoZTogV2hlZWxFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcblxuICAgICAgICAvLyBSZW1vdmUgYGFueWAgY2FzdCB3aGVuIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy80ODc5IGlzIGZpeGVkLlxuICAgICAgICBsZXQgdmFsdWUgPSBlLmRlbHRhTW9kZSA9PT0gKHdpbmRvdy5XaGVlbEV2ZW50OiBhbnkpLkRPTV9ERUxUQV9MSU5FID8gZS5kZWx0YVkgKiA0MCA6IGUuZGVsdGFZO1xuICAgICAgICBjb25zdCBub3cgPSBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgdGltZURlbHRhID0gbm93IC0gKHRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZSB8fCAwKTtcblxuICAgICAgICB0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWUgPSBub3c7XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSAwICYmICh2YWx1ZSAlIHdoZWVsWm9vbURlbHRhKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gVGhpcyBvbmUgaXMgZGVmaW5pdGVseSBhIG1vdXNlIHdoZWVsIGV2ZW50LlxuICAgICAgICAgICAgdGhpcy5fdHlwZSA9ICd3aGVlbCc7XG5cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gMCAmJiBNYXRoLmFicyh2YWx1ZSkgPCA0KSB7XG4gICAgICAgICAgICAvLyBUaGlzIG9uZSBpcyBkZWZpbml0ZWx5IGEgdHJhY2twYWQgZXZlbnQgYmVjYXVzZSBpdCBpcyBzbyBzbWFsbC5cbiAgICAgICAgICAgIHRoaXMuX3R5cGUgPSAndHJhY2twYWQnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodGltZURlbHRhID4gNDAwKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGxpa2VseSBhIG5ldyBzY3JvbGwgYWN0aW9uLlxuICAgICAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sYXN0VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgLy8gU3RhcnQgYSB0aW1lb3V0IGluIGNhc2UgdGhpcyB3YXMgYSBzaW5ndWxhciBldmVudCwgYW5kIGRlbHkgaXQgYnkgdXAgdG8gNDBtcy5cbiAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuX29uVGltZW91dCwgNDAsIGUpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3R5cGUpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSByZXBlYXRpbmcgZXZlbnQsIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSB0eXBlIG9mIGV2ZW50IGp1c3QgeWV0LlxuICAgICAgICAgICAgLy8gSWYgdGhlIGRlbHRhIHBlciB0aW1lIGlzIHNtYWxsLCB3ZSBhc3N1bWUgaXQncyBhIGZhc3QgdHJhY2twYWQ7IG90aGVyd2lzZSB3ZSBzd2l0Y2ggaW50byB3aGVlbCBtb2RlLlxuICAgICAgICAgICAgdGhpcy5fdHlwZSA9IChNYXRoLmFicyh0aW1lRGVsdGEgKiB2YWx1ZSkgPCAyMDApID8gJ3RyYWNrcGFkJyA6ICd3aGVlbCc7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBvdXIgZGVsYXllZCBldmVudCBpc24ndCBmaXJlZCBhZ2FpbiwgYmVjYXVzZSB3ZSBhY2N1bXVsYXRlXG4gICAgICAgICAgICAvLyB0aGUgcHJldmlvdXMgZXZlbnQgKHdoaWNoIHdhcyBsZXNzIHRoYW4gNDBtcyBhZ28pIGludG8gdGhpcyBldmVudC5cbiAgICAgICAgICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX2xhc3RWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNsb3cgZG93biB6b29tIGlmIHNoaWZ0IGtleSBpcyBoZWxkIGZvciBtb3JlIHByZWNpc2Ugem9vbWluZ1xuICAgICAgICBpZiAoZS5zaGlmdEtleSAmJiB2YWx1ZSkgdmFsdWUgPSB2YWx1ZSAvIDQ7XG5cbiAgICAgICAgLy8gT25seSBmaXJlIHRoZSBjYWxsYmFjayBpZiB3ZSBhY3R1YWxseSBrbm93IHdoYXQgdHlwZSBvZiBzY3JvbGxpbmcgZGV2aWNlIHRoZSB1c2VyIHVzZXMuXG4gICAgICAgIGlmICh0aGlzLl90eXBlKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0V2hlZWxFdmVudCA9IGU7XG4gICAgICAgICAgICB0aGlzLl9kZWx0YSAtPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgX29uVGltZW91dChpbml0aWFsRXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLl90eXBlID0gJ3doZWVsJztcbiAgICAgICAgdGhpcy5fZGVsdGEgLT0gdGhpcy5fbGFzdFZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnQoaW5pdGlhbEV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zdGFydChlOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kZWx0YSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuaXNab29taW5nKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3pvb21pbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCdtb3Zlc3RhcnQnLCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnem9vbXN0YXJ0Jywge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmluaXNoVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2ZpbmlzaFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcblxuICAgICAgICB0aGlzLl9hcm91bmQgPSBMbmdMYXQuY29udmVydCh0aGlzLl9hcm91bmRDZW50ZXIgPyB0aGlzLl9tYXAuZ2V0Q2VudGVyKCkgOiB0aGlzLl9tYXAudW5wcm9qZWN0KHBvcykpO1xuICAgICAgICB0aGlzLl9hcm91bmRQb2ludCA9IHRoaXMuX21hcC50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludCh0aGlzLl9hcm91bmQpO1xuICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSB0aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblNjcm9sbEZyYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vblNjcm9sbEZyYW1lKCkge1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMuX21hcC50cmFuc2Zvcm07XG5cbiAgICAgICAgLy8gaWYgd2UndmUgaGFkIHNjcm9sbCBldmVudHMgc2luY2UgdGhlIGxhc3QgcmVuZGVyIGZyYW1lLCBjb25zdW1lIHRoZVxuICAgICAgICAvLyBhY2N1bXVsYXRlZCBkZWx0YSwgYW5kIHVwZGF0ZSB0aGUgdGFyZ2V0IHpvb20gbGV2ZWwgYWNjb3JkaW5nbHlcbiAgICAgICAgaWYgKHRoaXMuX2RlbHRhICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBGb3IgdHJhY2twYWQgZXZlbnRzIGFuZCBzaW5nbGUgbW91c2Ugd2hlZWwgdGlja3MsIHVzZSB0aGUgZGVmYXVsdCB6b29tIHJhdGVcbiAgICAgICAgICAgIGNvbnN0IHpvb21SYXRlID0gKHRoaXMuX3R5cGUgPT09ICd3aGVlbCcgJiYgTWF0aC5hYnModGhpcy5fZGVsdGEpID4gd2hlZWxab29tRGVsdGEpID8gdGhpcy5fd2hlZWxab29tUmF0ZSA6IHRoaXMuX2RlZmF1bHRab29tUmF0ZTtcbiAgICAgICAgICAgIC8vIFNjYWxlIGJ5IHNpZ21vaWQgb2Ygc2Nyb2xsIHdoZWVsIGRlbHRhLlxuICAgICAgICAgICAgbGV0IHNjYWxlID0gbWF4U2NhbGVQZXJGcmFtZSAvICgxICsgTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhICogem9vbVJhdGUpKSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWx0YSA8IDAgJiYgc2NhbGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBzY2FsZSA9IDEgLyBzY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZnJvbVNjYWxlID0gdHlwZW9mIHRoaXMuX3RhcmdldFpvb20gPT09ICdudW1iZXInID8gdHIuem9vbVNjYWxlKHRoaXMuX3RhcmdldFpvb20pIDogdHIuc2NhbGU7XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRab29tID0gTWF0aC5taW4odHIubWF4Wm9vbSwgTWF0aC5tYXgodHIubWluWm9vbSwgdHIuc2NhbGVab29tKGZyb21TY2FsZSAqIHNjYWxlKSkpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbW91c2Ugd2hlZWwsIHJlZnJlc2ggdGhlIHN0YXJ0aW5nIHpvb20gYW5kIGVhc2luZ1xuICAgICAgICAgICAgLy8gZnVuY3Rpb24gd2UncmUgdXNpbmcgdG8gc21vb3RoIG91dCB0aGUgem9vbWluZyBiZXR3ZWVuIHdoZWVsXG4gICAgICAgICAgICAvLyBldmVudHNcbiAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSAnd2hlZWwnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRab29tID0gdHIuem9vbTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXNpbmcgPSB0aGlzLl9zbW9vdGhPdXRFYXNpbmcoMjAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZGVsdGEgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0Wm9vbSA9IHR5cGVvZiB0aGlzLl90YXJnZXRab29tID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRab29tIDogdHIuem9vbTtcbiAgICAgICAgY29uc3Qgc3RhcnRab29tID0gdGhpcy5fc3RhcnRab29tO1xuICAgICAgICBjb25zdCBlYXNpbmcgPSB0aGlzLl9lYXNpbmc7XG5cbiAgICAgICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl90eXBlID09PSAnd2hlZWwnICYmIHN0YXJ0Wm9vbSAmJiBlYXNpbmcpIHtcbiAgICAgICAgICAgIGFzc2VydChlYXNpbmcgJiYgdHlwZW9mIHN0YXJ0Wm9vbSA9PT0gJ251bWJlcicpO1xuXG4gICAgICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oKGJyb3dzZXIubm93KCkgLSB0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWUpIC8gMjAwLCAxKTtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBlYXNpbmcodCk7XG4gICAgICAgICAgICB0ci56b29tID0gaW50ZXJwb2xhdGUoc3RhcnRab29tLCB0YXJnZXRab29tLCBrKTtcbiAgICAgICAgICAgIGlmICh0IDwgMSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZnJhbWVJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25TY3JvbGxGcmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ci56b29tID0gdGFyZ2V0Wm9vbTtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0aGlzLl9hcm91bmQsIHRoaXMuX2Fyb3VuZFBvaW50KTtcblxuICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFdoZWVsRXZlbnR9KSk7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnem9vbScsIHtvcmlnaW5hbEV2ZW50OiB0aGlzLl9sYXN0V2hlZWxFdmVudH0pKTtcblxuICAgICAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fZmluaXNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3pvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ3pvb21lbmQnLCB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFdoZWVsRXZlbnR9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCdtb3ZlZW5kJywge29yaWdpbmFsRXZlbnQ6IHRoaXMuX2xhc3RXaGVlbEV2ZW50fSkpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90YXJnZXRab29tO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zbW9vdGhPdXRFYXNpbmcoZHVyYXRpb246IG51bWJlcikge1xuICAgICAgICBsZXQgZWFzaW5nID0gX2Vhc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ByZXZFYXNlKSB7XG4gICAgICAgICAgICBjb25zdCBlYXNlID0gdGhpcy5fcHJldkVhc2UsXG4gICAgICAgICAgICAgICAgdCA9IChicm93c2VyLm5vdygpIC0gZWFzZS5zdGFydCkgLyBlYXNlLmR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIHNwZWVkID0gZWFzZS5lYXNpbmcodCArIDAuMDEpIC0gZWFzZS5lYXNpbmcodCksXG5cbiAgICAgICAgICAgICAgICAvLyBRdWljayBoYWNrIHRvIG1ha2UgbmV3IGJlemllciB0aGF0IGlzIGNvbnRpbnVvdXMgd2l0aCBsYXN0XG4gICAgICAgICAgICAgICAgeCA9IDAuMjcgLyBNYXRoLnNxcnQoc3BlZWQgKiBzcGVlZCArIDAuMDAwMSkgKiAwLjAxLFxuICAgICAgICAgICAgICAgIHkgPSBNYXRoLnNxcnQoMC4yNyAqIDAuMjcgLSB4ICogeCk7XG5cbiAgICAgICAgICAgIGVhc2luZyA9IGJlemllcih4LCB5LCAwLjI1LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByZXZFYXNlID0ge1xuICAgICAgICAgICAgc3RhcnQ6IGJyb3dzZXIubm93KCksXG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgIGVhc2luZ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBlYXNpbmc7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTY3JvbGxab29tSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG4vKipcbiAqIFRoZSBgQm94Wm9vbUhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byB6b29tIHRoZSBtYXAgdG8gZml0IHdpdGhpbiBhIGJvdW5kaW5nIGJveC5cbiAqIFRoZSBib3VuZGluZyBib3ggaXMgZGVmaW5lZCBieSBjbGlja2luZyBhbmQgaG9sZGluZyBgc2hpZnRgIHdoaWxlIGRyYWdnaW5nIHRoZSBjdXJzb3IuXG4gKi9cbmNsYXNzIEJveFpvb21IYW5kbGVyIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2VsOiBIVE1MRWxlbWVudDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcbiAgICBfYWN0aXZlOiBib29sZWFuO1xuICAgIF9zdGFydFBvczogUG9pbnQ7XG4gICAgX2xhc3RQb3M6IFBvaW50O1xuICAgIF9ib3g6IEhUTUxFbGVtZW50O1xuICAgIF9jbGlja1RvbGVyYW5jZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCwgb3B0aW9uczoge1xuICAgICAgICBjbGlja1RvbGVyYW5jZT86IG51bWJlclxuICAgIH0pIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9lbCA9IG1hcC5nZXRDYW52YXNDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gbWFwLmdldENvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9jbGlja1RvbGVyYW5jZSA9IG9wdGlvbnMuY2xpY2tUb2xlcmFuY2UgfHwgMTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25Nb3VzZU1vdmUnLFxuICAgICAgICAgICAgJ19vbk1vdXNlVXAnLFxuICAgICAgICAgICAgJ19vbktleURvd24nXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuYm94Wm9vbS5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLmJveFpvb20uZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Nb3VzZURvd24oZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgaWYgKCEoZS5zaGlmdEtleSAmJiBlLmJ1dHRvbiA9PT0gMCkpIHJldHVybjtcblxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXAsIGZhbHNlKTtcblxuICAgICAgICBET00uZGlzYWJsZURyYWcoKTtcbiAgICAgICAgdGhpcy5fc3RhcnRQb3MgPSB0aGlzLl9sYXN0UG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfb25Nb3VzZU1vdmUoZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBwb3MgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUpO1xuXG4gICAgICAgIGlmICh0aGlzLl9sYXN0UG9zLmVxdWFscyhwb3MpIHx8ICghdGhpcy5fYm94ICYmIHBvcy5kaXN0KHRoaXMuX3N0YXJ0UG9zKSA8IHRoaXMuX2NsaWNrVG9sZXJhbmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcDAgPSB0aGlzLl9zdGFydFBvcztcbiAgICAgICAgdGhpcy5fbGFzdFBvcyA9IHBvcztcblxuICAgICAgICBpZiAoIXRoaXMuX2JveCkge1xuICAgICAgICAgICAgdGhpcy5fYm94ID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWJveHpvb20nLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWNyb3NzaGFpcicpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdib3h6b29tc3RhcnQnLCBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbihwMC54LCBwb3MueCksXG4gICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgocDAueCwgcG9zLngpLFxuICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKHAwLnksIHBvcy55KSxcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChwMC55LCBwb3MueSk7XG5cbiAgICAgICAgRE9NLnNldFRyYW5zZm9ybSh0aGlzLl9ib3gsIGB0cmFuc2xhdGUoJHttaW5YfXB4LCR7bWluWX1weClgKTtcblxuICAgICAgICB0aGlzLl9ib3guc3R5bGUud2lkdGggPSBgJHttYXhYIC0gbWluWH1weGA7XG4gICAgICAgIHRoaXMuX2JveC5zdHlsZS5oZWlnaHQgPSBgJHttYXhZIC0gbWluWX1weGA7XG4gICAgfVxuXG4gICAgX29uTW91c2VVcChlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmIChlLmJ1dHRvbiAhPT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHAwID0gdGhpcy5fc3RhcnRQb3MsXG4gICAgICAgICAgICBwMSA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG5cbiAgICAgICAgdGhpcy5fZmluaXNoKCk7XG5cbiAgICAgICAgRE9NLnN1cHByZXNzQ2xpY2soKTtcblxuICAgICAgICBpZiAocDAueCA9PT0gcDEueCAmJiBwMC55ID09PSBwMS55KSB7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2JveHpvb21jYW5jZWwnLCBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX21hcFxuICAgICAgICAgICAgICAgIC5maXRTY3JlZW5Db29yZGluYXRlcyhwMCwgcDEsIHRoaXMuX21hcC5nZXRCZWFyaW5nKCksIHtsaW5lYXI6IHRydWV9KVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnYm94em9vbWVuZCcsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgICB0aGlzLl9maW5pc2goKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnYm94em9vbWNhbmNlbCcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2ZpbmlzaCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fb25Nb3VzZVVwLCBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWNyb3NzaGFpcicpO1xuXG4gICAgICAgIGlmICh0aGlzLl9ib3gpIHtcbiAgICAgICAgICAgIERPTS5yZW1vdmUodGhpcy5fYm94KTtcbiAgICAgICAgICAgIHRoaXMuX2JveCA9IChudWxsOiBhbnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgRE9NLmVuYWJsZURyYWcoKTtcblxuICAgICAgICBkZWxldGUgdGhpcy5fc3RhcnRQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0UG9zO1xuICAgIH1cblxuICAgIF9maXJlRXZlbnQodHlwZTogc3RyaW5nLCBlOiAqKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQodHlwZSwge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb3hab29tSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge2JlemllciwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi8uLi91dGlsL3Rhc2tfcXVldWUnO1xuXG5jb25zdCBpbmVydGlhTGluZWFyaXR5ID0gMC4yNSxcbiAgICBpbmVydGlhRWFzaW5nID0gYmV6aWVyKDAsIDAsIGluZXJ0aWFMaW5lYXJpdHksIDEpLFxuICAgIGluZXJ0aWFNYXhTcGVlZCA9IDE4MCwgLy8gZGVnL3NcbiAgICBpbmVydGlhRGVjZWxlcmF0aW9uID0gNzIwOyAvLyBkZWcvc14yXG5cbi8qKlxuICogVGhlIGBEcmFnUm90YXRlSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHJvdGF0ZSB0aGUgbWFwIGJ5IGNsaWNraW5nIGFuZFxuICogZHJhZ2dpbmcgdGhlIGN1cnNvciB3aGlsZSBob2xkaW5nIHRoZSByaWdodCBtb3VzZSBidXR0b24gb3IgYGN0cmxgIGtleS5cbiAqL1xuY2xhc3MgRHJhZ1JvdGF0ZUhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9zdGF0ZTogJ2Rpc2FibGVkJyB8ICdlbmFibGVkJyB8ICdwZW5kaW5nJyB8ICdhY3RpdmUnO1xuICAgIF9idXR0b246ICdyaWdodCcgfCAnbGVmdCc7XG4gICAgX2V2ZW50QnV0dG9uOiBudW1iZXI7XG4gICAgX2JlYXJpbmdTbmFwOiBudW1iZXI7XG4gICAgX3BpdGNoV2l0aFJvdGF0ZTogYm9vbGVhbjtcblxuICAgIF9zdGFydFBvczogUG9pbnQ7XG4gICAgX3ByZXZQb3M6IFBvaW50O1xuICAgIF9sYXN0UG9zOiBQb2ludDtcbiAgICBfc3RhcnRUaW1lOiBudW1iZXI7XG4gICAgX2xhc3RNb3ZlRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gICAgX2luZXJ0aWE6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+O1xuICAgIF9jZW50ZXI6IFBvaW50O1xuICAgIF9mcmFtZUlkOiA/VGFza0lEO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwYm94IEdMIEpTIG1hcCB0byBhZGQgdGhlIGhhbmRsZXIgdG8uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5iZWFyaW5nU25hcF0gVGhlIHRocmVzaG9sZCwgbWVhc3VyZWQgaW4gZGVncmVlcywgdGhhdCBkZXRlcm1pbmVzIHdoZW4gdGhlIG1hcCdzXG4gICAgICogICBiZWFyaW5nIHdpbGwgc25hcCB0byBub3J0aC5cbiAgICAgKiBAcGFyYW0ge2Jvb2x9IFtvcHRpb25zLnBpdGNoV2l0aFJvdGF0ZT10cnVlXSBDb250cm9sIHRoZSBtYXAgcGl0Y2ggaW4gYWRkaXRpb24gdG8gdGhlIGJlYXJpbmdcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiB7XG4gICAgICAgIGJ1dHRvbj86ICdyaWdodCcgfCAnbGVmdCcsXG4gICAgICAgIGVsZW1lbnQ/OiBIVE1MRWxlbWVudCxcbiAgICAgICAgYmVhcmluZ1NuYXA/OiBudW1iZXIsXG4gICAgICAgIHBpdGNoV2l0aFJvdGF0ZT86IGJvb2xlYW5cbiAgICB9KSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSBvcHRpb25zLmVsZW1lbnQgfHwgbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgIHRoaXMuX2J1dHRvbiA9IG9wdGlvbnMuYnV0dG9uIHx8ICdyaWdodCc7XG4gICAgICAgIHRoaXMuX2JlYXJpbmdTbmFwID0gb3B0aW9ucy5iZWFyaW5nU25hcCB8fCAwO1xuICAgICAgICB0aGlzLl9waXRjaFdpdGhSb3RhdGUgPSBvcHRpb25zLnBpdGNoV2l0aFJvdGF0ZSAhPT0gZmFsc2U7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnb25Nb3VzZURvd24nLFxuICAgICAgICAgICAgJ19vbk1vdXNlTW92ZScsXG4gICAgICAgICAgICAnX29uTW91c2VVcCcsXG4gICAgICAgICAgICAnX29uQmx1cicsXG4gICAgICAgICAgICAnX29uRHJhZ0ZyYW1lJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUgIT09ICdkaXNhYmxlZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlID09PSAnYWN0aXZlJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kcmFnUm90YXRlLmVuYWJsZSgpO1xuICAgICAqL1xuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmRyYWdSb3RhdGUuZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncm90YXRlZW5kJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGl0Y2hXaXRoUm90YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdwaXRjaGVuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ2VuYWJsZWQnKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnO1xuXG4gICAgICAgIGlmICh0b3VjaEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2J1dHRvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50QnV0dG9uID0gRE9NLm1vdXNlQnV0dG9uKGUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudEJ1dHRvbiAhPT0gKGUuY3RybEtleSA/IDAgOiAyKSkgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IERPTS5tb3VzZUJ1dHRvbihlKSAhPT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50QnV0dG9uID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5kaXNhYmxlRHJhZygpO1xuXG4gICAgICAgIC8vIEJpbmQgd2luZG93LWxldmVsIGV2ZW50IGxpc3RlbmVycyBmb3IgbW92ZSBhbmQgdXAvZW5kIGV2ZW50cy4gSW4gdGhlIGFic2VuY2Ugb2ZcbiAgICAgICAgLy8gdGhlIHBvaW50ZXIgY2FwdHVyZSBBUEksIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIG5lY2Vzc2FyeSBwbGF0Zm9ybXMsXG4gICAgICAgIC8vIHdpbmRvdy1sZXZlbCBldmVudCBsaXN0ZW5lcnMgZ2l2ZSB1cyB0aGUgYmVzdCBzaG90IGF0IGNhcHR1cmluZyBldmVudHMgdGhhdFxuICAgICAgICAvLyBmYWxsIG91dHNpZGUgdGhlIG1hcCBjYW52YXMgZWxlbWVudC4gVXNlIGB7Y2FwdHVyZTogdHJ1ZX1gIGZvciB0aGUgbW92ZSBldmVudFxuICAgICAgICAvLyB0byBwcmV2ZW50IG1hcCBtb3ZlIGV2ZW50cyBmcm9tIGJlaW5nIGZpcmVkIGR1cmluZyBhIGRyYWcuXG4gICAgICAgIGlmICh0b3VjaEV2ZW50KSB7XG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHtjYXB0dXJlOiB0cnVlfSk7XG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVhY3RpdmF0ZSB3aGVuIHRoZSB3aW5kb3cgbG9zZXMgZm9jdXMuIE90aGVyd2lzZSBpZiBhIG1vdXNldXAgb2NjdXJzIHdoZW4gdGhlIHdpbmRvd1xuICAgICAgICAvLyBpc24ndCBpbiBmb2N1cywgZHJhZ2dpbmcgd2lsbCBjb250aW51ZSBldmVuIHRob3VnaCB0aGUgbW91c2UgaXMgbm8gbG9uZ2VyIHByZXNzZWQuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25CbHVyKTtcblxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgdGhpcy5faW5lcnRpYSA9IFtbYnJvd3Nlci5ub3coKSwgdGhpcy5fbWFwLmdldEJlYXJpbmcoKV1dO1xuICAgICAgICB0aGlzLl9zdGFydFBvcyA9IHRoaXMuX3ByZXZQb3MgPSB0aGlzLl9sYXN0UG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcbiAgICAgICAgdGhpcy5fY2VudGVyID0gdGhpcy5fbWFwLnRyYW5zZm9ybS5jZW50ZXJQb2ludDsgIC8vIENlbnRlciBvZiByb3RhdGlvblxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBfb25Nb3VzZU1vdmUoZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBwb3MgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUpO1xuICAgICAgICBpZiAodGhpcy5fbGFzdFBvcy5lcXVhbHMocG9zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdE1vdmVFdmVudCA9IGU7XG4gICAgICAgIHRoaXMuX2xhc3RQb3MgPSBwb3M7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2FjdGl2ZSc7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ3JvdGF0ZXN0YXJ0JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ21vdmVzdGFydCcsIGUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncGl0Y2hzdGFydCcsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25EcmFnRnJhbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uRHJhZ0ZyYW1lKCkge1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBjb25zdCBlID0gdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy5fbWFwLnRyYW5zZm9ybTtcblxuICAgICAgICBjb25zdCBwMSA9IHRoaXMuX3ByZXZQb3MsXG4gICAgICAgICAgICBwMiA9IHRoaXMuX2xhc3RQb3MsXG4gICAgICAgICAgICBiZWFyaW5nRGlmZiA9IChwMS54IC0gcDIueCkgKiAwLjgsXG4gICAgICAgICAgICBwaXRjaERpZmYgPSAocDEueSAtIHAyLnkpICogLTAuNSxcbiAgICAgICAgICAgIGJlYXJpbmcgPSB0ci5iZWFyaW5nIC0gYmVhcmluZ0RpZmYsXG4gICAgICAgICAgICBwaXRjaCA9IHRyLnBpdGNoIC0gcGl0Y2hEaWZmLFxuICAgICAgICAgICAgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWEsXG4gICAgICAgICAgICBsYXN0ID0gaW5lcnRpYVtpbmVydGlhLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuICAgICAgICBpbmVydGlhLnB1c2goW2Jyb3dzZXIubm93KCksIHRoaXMuX21hcC5fbm9ybWFsaXplQmVhcmluZyhiZWFyaW5nLCBsYXN0WzFdKV0pO1xuXG4gICAgICAgIHRyLmJlYXJpbmcgPSBiZWFyaW5nO1xuICAgICAgICBpZiAodGhpcy5fcGl0Y2hXaXRoUm90YXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ3BpdGNoJywgZSk7XG4gICAgICAgICAgICB0ci5waXRjaCA9IHBpdGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdyb3RhdGUnLCBlKTtcbiAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlJywgZSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQ7XG4gICAgICAgIHRoaXMuX3ByZXZQb3MgPSB0aGlzLl9sYXN0UG9zO1xuICAgIH1cblxuICAgIF9vbk1vdXNlVXAoZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB0b3VjaEV2ZW50ID0gZS50eXBlID09PSAndG91Y2hlbmQnO1xuXG4gICAgICAgIGlmICh0b3VjaEV2ZW50ICYmICh0aGlzLl9zdGFydFBvcyA9PT0gdGhpcy5fbGFzdFBvcykgJiYgKERhdGUubm93KCkgLSB0aGlzLl9zdGFydFRpbWUpIDwgMzAwKSB7XG4gICAgICAgICAgICB0aGlzLl9lbC5jbGljaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKERPTS5tb3VzZUJ1dHRvbihlKSAhPT0gdGhpcy5fZXZlbnRCdXR0b24pIHJldHVybjtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xuICAgICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICBET00uc3VwcHJlc3NDbGljaygpO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICB0aGlzLl9kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICB0aGlzLl9pbmVydGlhbFJvdGF0ZShlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkJsdXIoZTogRm9jdXNFdmVudCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdyb3RhdGVlbmQnLCBlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9waXRjaFdpdGhSb3RhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ3BpdGNoZW5kJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ21vdmVlbmQnLCBlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91bmJpbmQoKSB7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwge2NhcHR1cmU6IHRydWV9KTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHtjYXB0dXJlOiB0cnVlfSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuX29uTW91c2VVcCk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25CbHVyKTtcbiAgICAgICAgRE9NLmVuYWJsZURyYWcoKTtcbiAgICB9XG5cbiAgICBfZGVhY3RpdmF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCk7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fcHJldlBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RQb3M7XG4gICAgfVxuXG4gICAgX2luZXJ0aWFsUm90YXRlKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdyb3RhdGVlbmQnLCBlKTtcbiAgICAgICAgdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7XG5cbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5fbWFwLFxuICAgICAgICAgICAgbWFwQmVhcmluZyA9IG1hcC5nZXRCZWFyaW5nKCksXG4gICAgICAgICAgICBpbmVydGlhID0gdGhpcy5faW5lcnRpYTtcblxuICAgICAgICBjb25zdCBmaW5pc2ggPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobWFwQmVhcmluZykgPCB0aGlzLl9iZWFyaW5nU25hcCkge1xuICAgICAgICAgICAgICAgIG1hcC5yZXNldE5vcnRoKHtub01vdmVTdGFydDogdHJ1ZX0sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZWVuZCcsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSkgdGhpcy5fZmlyZUV2ZW50KCdwaXRjaGVuZCcsIGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpbmVydGlhLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3QgPSBpbmVydGlhWzBdLFxuICAgICAgICAgICAgbGFzdCA9IGluZXJ0aWFbaW5lcnRpYS5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgIHByZXZpb3VzID0gaW5lcnRpYVtpbmVydGlhLmxlbmd0aCAtIDJdO1xuICAgICAgICBsZXQgYmVhcmluZyA9IG1hcC5fbm9ybWFsaXplQmVhcmluZyhtYXBCZWFyaW5nLCBwcmV2aW91c1sxXSk7XG4gICAgICAgIGNvbnN0IGZsaW5nRGlmZiA9IGxhc3RbMV0gLSBmaXJzdFsxXSxcbiAgICAgICAgICAgIHNpZ24gPSBmbGluZ0RpZmYgPCAwID8gLTEgOiAxLFxuICAgICAgICAgICAgZmxpbmdEdXJhdGlvbiA9IChsYXN0WzBdIC0gZmlyc3RbMF0pIC8gMTAwMDtcblxuICAgICAgICBpZiAoZmxpbmdEaWZmID09PSAwIHx8IGZsaW5nRHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNwZWVkID0gTWF0aC5hYnMoZmxpbmdEaWZmICogKGluZXJ0aWFMaW5lYXJpdHkgLyBmbGluZ0R1cmF0aW9uKSk7ICAvLyBkZWcvc1xuICAgICAgICBpZiAoc3BlZWQgPiBpbmVydGlhTWF4U3BlZWQpIHtcbiAgICAgICAgICAgIHNwZWVkID0gaW5lcnRpYU1heFNwZWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzcGVlZCAvIChpbmVydGlhRGVjZWxlcmF0aW9uICogaW5lcnRpYUxpbmVhcml0eSksXG4gICAgICAgICAgICBvZmZzZXQgPSBzaWduICogc3BlZWQgKiAoZHVyYXRpb24gLyAyKTtcblxuICAgICAgICBiZWFyaW5nICs9IG9mZnNldDtcblxuICAgICAgICBpZiAoTWF0aC5hYnMobWFwLl9ub3JtYWxpemVCZWFyaW5nKGJlYXJpbmcsIDApKSA8IHRoaXMuX2JlYXJpbmdTbmFwKSB7XG4gICAgICAgICAgICBiZWFyaW5nID0gbWFwLl9ub3JtYWxpemVCZWFyaW5nKDAsIGJlYXJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFwLnJvdGF0ZVRvKGJlYXJpbmcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAqIDEwMDAsXG4gICAgICAgICAgICBlYXNpbmc6IGluZXJ0aWFFYXNpbmcsXG4gICAgICAgICAgICBub01vdmVTdGFydDogdHJ1ZVxuICAgICAgICB9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgIH1cblxuICAgIF9maXJlRXZlbnQodHlwZTogc3RyaW5nLCBlOiAqKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQodHlwZSwgZSA/IHtvcmlnaW5hbEV2ZW50OiBlfSA6IHt9KSk7XG4gICAgfVxuXG4gICAgX2RyYWluSW5lcnRpYUJ1ZmZlcigpIHtcbiAgICAgICAgY29uc3QgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWEsXG4gICAgICAgICAgICBub3cgPSBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgY3V0b2ZmID0gMTYwOyAgIC8vbXNlY1xuXG4gICAgICAgIHdoaWxlIChpbmVydGlhLmxlbmd0aCA+IDAgJiYgbm93IC0gaW5lcnRpYVswXVswXSA+IGN1dG9mZilcbiAgICAgICAgICAgIGluZXJ0aWEuc2hpZnQoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyYWdSb3RhdGVIYW5kbGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2JlemllciwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi8uLi91dGlsL3Rhc2tfcXVldWUnO1xuXG5jb25zdCBpbmVydGlhTGluZWFyaXR5ID0gMC4zLFxuICAgIGluZXJ0aWFFYXNpbmcgPSBiZXppZXIoMCwgMCwgaW5lcnRpYUxpbmVhcml0eSwgMSksXG4gICAgaW5lcnRpYU1heFNwZWVkID0gMTQwMCwgLy8gcHgvc1xuICAgIGluZXJ0aWFEZWNlbGVyYXRpb24gPSAyNTAwOyAvLyBweC9zXjJcblxuLyoqXG4gKiBUaGUgYERyYWdQYW5IYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gcGFuIHRoZSBtYXAgYnkgY2xpY2tpbmcgYW5kIGRyYWdnaW5nXG4gKiB0aGUgY3Vyc29yLlxuICovXG5jbGFzcyBEcmFnUGFuSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX3N0YXRlOiAnZGlzYWJsZWQnIHwgJ2VuYWJsZWQnIHwgJ3BlbmRpbmcnIHwgJ2FjdGl2ZSc7XG4gICAgX3N0YXJ0UG9zOiBQb2ludDtcbiAgICBfbW91c2VEb3duUG9zOiBQb2ludDtcbiAgICBfcHJldlBvczogUG9pbnQ7XG4gICAgX2xhc3RQb3M6IFBvaW50O1xuICAgIF9zdGFydFRvdWNoOiA/QXJyYXk8UG9pbnQ+O1xuICAgIF9sYXN0VG91Y2g6ID9BcnJheTxQb2ludD47XG4gICAgX2xhc3RNb3ZlRXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50IHwgdm9pZDtcbiAgICBfaW5lcnRpYTogQXJyYXk8W251bWJlciwgUG9pbnRdPjtcbiAgICBfZnJhbWVJZDogP1Rhc2tJRDtcbiAgICBfY2xpY2tUb2xlcmFuY2U6IG51bWJlcjtcbiAgICBfc2hvdWxkU3RhcnQ6ID9ib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCwgb3B0aW9uczoge1xuICAgICAgICBjbGlja1RvbGVyYW5jZT86IG51bWJlclxuICAgIH0pIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9lbCA9IG1hcC5nZXRDYW52YXNDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICB0aGlzLl9jbGlja1RvbGVyYW5jZSA9IG9wdGlvbnMuY2xpY2tUb2xlcmFuY2UgfHwgMTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25Nb3ZlJyxcbiAgICAgICAgICAgICdfb25Nb3VzZVVwJyxcbiAgICAgICAgICAgICdfb25Ub3VjaEVuZCcsXG4gICAgICAgICAgICAnX29uQmx1cicsXG4gICAgICAgICAgICAnX29uRHJhZ0ZyYW1lJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUgIT09ICdkaXNhYmxlZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlID09PSAnYWN0aXZlJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kcmFnUGFuLmVuYWJsZSgpO1xuICAgICAqL1xuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZWwuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4nKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmRyYWdQYW4uZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC10b3VjaC1kcmFnLXBhbicpO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnZHJhZ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ2VuYWJsZWQnKSByZXR1cm47XG4gICAgICAgIGlmIChlLmN0cmxLZXkgfHwgRE9NLm1vdXNlQnV0dG9uKGUpICE9PSAwKSByZXR1cm47XG5cbiAgICAgICAgLy8gQmluZCB3aW5kb3ctbGV2ZWwgZXZlbnQgbGlzdGVuZXJzIGZvciBtb3VzZW1vdmUvdXAgZXZlbnRzLiBJbiB0aGUgYWJzZW5jZSBvZlxuICAgICAgICAvLyB0aGUgcG9pbnRlciBjYXB0dXJlIEFQSSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSBhbGwgbmVjZXNzYXJ5IHBsYXRmb3JtcyxcbiAgICAgICAgLy8gd2luZG93LWxldmVsIGV2ZW50IGxpc3RlbmVycyBnaXZlIHVzIHRoZSBiZXN0IHNob3QgYXQgY2FwdHVyaW5nIGV2ZW50cyB0aGF0XG4gICAgICAgIC8vIGZhbGwgb3V0c2lkZSB0aGUgbWFwIGNhbnZhcyBlbGVtZW50LiBVc2UgYHtjYXB0dXJlOiB0cnVlfWAgZm9yIHRoZSBtb3ZlIGV2ZW50XG4gICAgICAgIC8vIHRvIHByZXZlbnQgbWFwIG1vdmUgZXZlbnRzIGZyb20gYmVpbmcgZmlyZWQgZHVyaW5nIGEgZHJhZy5cbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3ZlLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fb25Nb3VzZVVwKTtcblxuICAgICAgICB0aGlzLl9zdGFydChlKTtcbiAgICB9XG5cbiAgICBvblRvdWNoU3RhcnQoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgaWYgKGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMSkgeyAvLyBtdWx0aS1maW5nZXIgdG91Y2hcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGRyYWdnaW5nIChlLmcuIHdpdGggb25lIGZpbmdlcikgYW5kIGFkZCBhbm90aGVyIGZpbmdlcixcbiAgICAgICAgICAgIC8vIGtlZXAgdGhlIGhhbmRsZXIgYWN0aXZlIGJ1dCBkb24ndCBhdHRlbXB0IHRvIC5fc3RhcnQoKSBhZ2FpblxuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycgfHwgdGhpcy5fc3RhdGUgPT09ICdhY3RpdmUnKSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCaW5kIHdpbmRvdy1sZXZlbCBldmVudCBsaXN0ZW5lcnMgZm9yIHRvdWNobW92ZS9lbmQgZXZlbnRzLiBJbiB0aGUgYWJzZW5jZSBvZlxuICAgICAgICAvLyB0aGUgcG9pbnRlciBjYXB0dXJlIEFQSSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSBhbGwgbmVjZXNzYXJ5IHBsYXRmb3JtcyxcbiAgICAgICAgLy8gd2luZG93LWxldmVsIGV2ZW50IGxpc3RlbmVycyBnaXZlIHVzIHRoZSBiZXN0IHNob3QgYXQgY2FwdHVyaW5nIGV2ZW50cyB0aGF0XG4gICAgICAgIC8vIGZhbGwgb3V0c2lkZSB0aGUgbWFwIGNhbnZhcyBlbGVtZW50LiBVc2UgYHtjYXB0dXJlOiB0cnVlfWAgZm9yIHRoZSBtb3ZlIGV2ZW50XG4gICAgICAgIC8vIHRvIHByZXZlbnQgbWFwIG1vdmUgZXZlbnRzIGZyb20gYmVpbmcgZmlyZWQgZHVyaW5nIGEgZHJhZy5cbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB7Y2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vblRvdWNoRW5kKTtcblxuICAgICAgICB0aGlzLl9zdGFydChlKTtcbiAgICB9XG5cbiAgICBfc3RhcnQoZTogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgLy8gRGVhY3RpdmF0ZSB3aGVuIHRoZSB3aW5kb3cgbG9zZXMgZm9jdXMuIE90aGVyd2lzZSBpZiBhIG1vdXNldXAgb2NjdXJzIHdoZW4gdGhlIHdpbmRvd1xuICAgICAgICAvLyBpc24ndCBpbiBmb2N1cywgZHJhZ2dpbmcgd2lsbCBjb250aW51ZSBldmVuIHRob3VnaCB0aGUgbW91c2UgaXMgbm8gbG9uZ2VyIHByZXNzZWQuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25CbHVyKTtcblxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgdGhpcy5fc3RhcnRQb3MgPSB0aGlzLl9tb3VzZURvd25Qb3MgPSB0aGlzLl9wcmV2UG9zID0gdGhpcy5fbGFzdFBvcyA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG4gICAgICAgIHRoaXMuX3N0YXJ0VG91Y2ggPSB0aGlzLl9sYXN0VG91Y2ggPSAod2luZG93LlRvdWNoRXZlbnQgJiYgZSBpbnN0YW5jZW9mIHdpbmRvdy5Ub3VjaEV2ZW50KSA/IERPTS50b3VjaFBvcyh0aGlzLl9lbCwgZSkgOiBudWxsO1xuICAgICAgICB0aGlzLl9pbmVydGlhID0gW1ticm93c2VyLm5vdygpLCB0aGlzLl9zdGFydFBvc11dO1xuICAgIH1cblxuICAgIF90b3VjaGVzTWF0Y2gobGFzdFRvdWNoOiA/QXJyYXk8UG9pbnQ+LCB0aGlzVG91Y2g6ID9BcnJheTxQb2ludD4pIHtcbiAgICAgICAgaWYgKCFsYXN0VG91Y2ggfHwgIXRoaXNUb3VjaCB8fCBsYXN0VG91Y2gubGVuZ3RoICE9PSB0aGlzVG91Y2gubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBsYXN0VG91Y2guZXZlcnkoKHBvcywgaSkgPT4gdGhpc1RvdWNoW2ldID09PSBwb3MpO1xuICAgIH1cblxuICAgIF9vbk1vdmUoZTogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IHRvdWNoUG9zID0gKHdpbmRvdy5Ub3VjaEV2ZW50ICYmIGUgaW5zdGFuY2VvZiB3aW5kb3cuVG91Y2hFdmVudCkgPyBET00udG91Y2hQb3ModGhpcy5fZWwsIGUpIDogbnVsbDtcbiAgICAgICAgY29uc3QgcG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcblxuICAgICAgICBjb25zdCBtYXRjaGVzTGFzdFBvcyA9IHRvdWNoUG9zID8gdGhpcy5fdG91Y2hlc01hdGNoKHRoaXMuX2xhc3RUb3VjaCwgdG91Y2hQb3MpIDogdGhpcy5fbGFzdFBvcy5lcXVhbHMocG9zKTtcblxuICAgICAgICBpZiAobWF0Y2hlc0xhc3RQb3MgfHwgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycgJiYgcG9zLmRpc3QodGhpcy5fbW91c2VEb3duUG9zKSA8IHRoaXMuX2NsaWNrVG9sZXJhbmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdE1vdmVFdmVudCA9IGU7XG4gICAgICAgIHRoaXMuX2xhc3RQb3MgPSBwb3M7XG4gICAgICAgIHRoaXMuX2xhc3RUb3VjaCA9IHRvdWNoUG9zO1xuICAgICAgICB0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTtcbiAgICAgICAgdGhpcy5faW5lcnRpYS5wdXNoKFticm93c2VyLm5vdygpLCB0aGlzLl9sYXN0UG9zXSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2FjdGl2ZSc7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRTdGFydCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSB0aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vbkRyYWdGcmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgaW4gZWFjaCByZW5kZXIgZnJhbWUgd2hpbGUgZHJhZ2dpbmcgaXMgaGFwcGVuaW5nLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX29uRHJhZ0ZyYW1lKCkge1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBjb25zdCBlID0gdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcC50b3VjaFpvb21Sb3RhdGUuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgdGhpcy5fYWJvcnQoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2hvdWxkU3RhcnQpIHtcbiAgICAgICAgICAgIC8vIHdlIHRyZWF0IHRoZSBmaXJzdCBkcmFnIGZyYW1lIChyYXRoZXIgdGhhbiB0aGUgbW91c2Vkb3duIGV2ZW50KVxuICAgICAgICAgICAgLy8gYXMgdGhlIHN0YXJ0IG9mIHRoZSBkcmFnXG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2RyYWdzdGFydCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3Zlc3RhcnQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3VsZFN0YXJ0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkgcmV0dXJuOyAvLyBJdCdzIHBvc3NpYmxlIGZvciB0aGUgZHJhZ3N0YXJ0IGV2ZW50IHRvIHRyaWdnZXIgYSBkaXNhYmxlKCkgY2FsbCAoIzI0MTkpIHNvIHdlIG11c3QgYWNjb3VudCBmb3IgdGhhdFxuXG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy5fbWFwLnRyYW5zZm9ybTtcbiAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KHRyLnBvaW50TG9jYXRpb24odGhpcy5fcHJldlBvcyksIHRoaXMuX2xhc3RQb3MpO1xuICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2RyYWcnLCBlKTtcbiAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlJywgZSk7XG5cbiAgICAgICAgdGhpcy5fcHJldlBvcyA9IHRoaXMuX2xhc3RQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50O1xuICAgIH1cblxuICAgIF9vbk1vdXNlVXAoZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoRE9NLm1vdXNlQnV0dG9uKGUpICE9PSAwKSByZXR1cm47XG4gICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgY2FzZSAnYWN0aXZlJzpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgRE9NLnN1cHByZXNzQ2xpY2soKTtcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5faW5lcnRpYWxQYW4oZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25Ub3VjaEVuZChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmICghZS50b3VjaGVzIHx8IGUudG91Y2hlcy5sZW5ndGggPT09IDApIHsgLy8gb25seSBzdG9wIGRyYWcgaWYgYWxsIGZpbmdlcnMgaGF2ZSBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luZXJ0aWFsUGFuKGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmFibGVkJzpcbiAgICAgICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgIC8vIHNvbWUgZmluZ2VyKHMpIHN0aWxsIHRvdWNoaW5nIHRoZSBzY3JlZW5cbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgY2FzZSAnYWN0aXZlJzpcbiAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgYWxyZWFkeSBkcmFnZ2luZzsgY29udGludWVcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VuYWJsZWQnOlxuICAgICAgICAgICAgICAgIC8vIG5vdCBjdXJyZW50bHkgZHJhZ2dpbmc7IGdldCByZWFkeSB0byBzdGFydCBhIG5ldyBkcmFnXG4gICAgICAgICAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQoZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWJvcnQoZTogRm9jdXNFdmVudCB8IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgY2FzZSAnYWN0aXZlJzpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9zaG91bGRTdGFydCkgeyAvLyBJZiB3ZSBzY2hlZHVsZWQgdGhlIGRyYWdzdGFydCBidXQgbmV2ZXIgZmlyZWQsIG5vdGhpbmcgdG8gZW5kXG4gICAgICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSBzdGFydGVkIHRoZSBkcmFnLCBlbmQgaXRcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2RyYWdlbmQnLCBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ21vdmVlbmQnLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgaWYgKCh3aW5kb3cuVG91Y2hFdmVudCAmJiBlIGluc3RhbmNlb2Ygd2luZG93LlRvdWNoRXZlbnQpICYmIGUudG91Y2hlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGZpbmdlcnMgdG91Y2hpbmcsIHJlYXR0YWNoIHRvdWNoZW5kIGxpc3RlbmVyIGluIGNhc2VcbiAgICAgICAgICAgICAgICAvLyBhbGwgYnV0IG9uZSBmaW5nZXIgaXMgcmVtb3ZlZCBhbmQgd2UgbmVlZCB0byByZXN0YXJ0IGEgZHJhZyBvbiB0b3VjaGVuZFxuICAgICAgICAgICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2VuYWJsZWQnOlxuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkJsdXIoZTogRm9jdXNFdmVudCkge1xuICAgICAgICB0aGlzLl9hYm9ydChlKTtcbiAgICB9XG5cbiAgICBfdW5iaW5kKCkge1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9vbk1vdmUsIHtjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiBmYWxzZX0pO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX29uVG91Y2hFbmQpO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdmUsIHtjYXB0dXJlOiB0cnVlfSk7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdibHVyJywgdGhpcy5fb25CbHVyKTtcbiAgICB9XG5cbiAgICBfZGVhY3RpdmF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCk7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fcHJldlBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX21vdXNlRG93blBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFRvdWNoO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFRvdWNoO1xuICAgICAgICBkZWxldGUgdGhpcy5fc2hvdWxkU3RhcnQ7XG4gICAgfVxuXG4gICAgX2luZXJ0aWFsUGFuKGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnZHJhZ2VuZCcsIGUpO1xuXG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuICAgICAgICBjb25zdCBpbmVydGlhID0gdGhpcy5faW5lcnRpYTtcbiAgICAgICAgaWYgKGluZXJ0aWEubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJywgZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0ID0gaW5lcnRpYVtpbmVydGlhLmxlbmd0aCAtIDFdLFxuICAgICAgICAgICAgZmlyc3QgPSBpbmVydGlhWzBdLFxuICAgICAgICAgICAgZmxpbmdPZmZzZXQgPSBsYXN0WzFdLnN1YihmaXJzdFsxXSksXG4gICAgICAgICAgICBmbGluZ0R1cmF0aW9uID0gKGxhc3RbMF0gLSBmaXJzdFswXSkgLyAxMDAwO1xuXG4gICAgICAgIGlmIChmbGluZ0R1cmF0aW9uID09PSAwIHx8IGxhc3RbMV0uZXF1YWxzKGZpcnN0WzFdKSkge1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJywgZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjYWxjdWxhdGUgcHgvcyB2ZWxvY2l0eSAmIGFkanVzdCBmb3IgaW5jcmVhc2VkIGluaXRpYWwgYW5pbWF0aW9uIHNwZWVkIHdoZW4gZWFzaW5nIG91dFxuICAgICAgICBjb25zdCB2ZWxvY2l0eSA9IGZsaW5nT2Zmc2V0Lm11bHQoaW5lcnRpYUxpbmVhcml0eSAvIGZsaW5nRHVyYXRpb24pO1xuICAgICAgICBsZXQgc3BlZWQgPSB2ZWxvY2l0eS5tYWcoKTsgLy8gcHgvc1xuXG4gICAgICAgIGlmIChzcGVlZCA+IGluZXJ0aWFNYXhTcGVlZCkge1xuICAgICAgICAgICAgc3BlZWQgPSBpbmVydGlhTWF4U3BlZWQ7XG4gICAgICAgICAgICB2ZWxvY2l0eS5fdW5pdCgpLl9tdWx0KHNwZWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gc3BlZWQgLyAoaW5lcnRpYURlY2VsZXJhdGlvbiAqIGluZXJ0aWFMaW5lYXJpdHkpLFxuICAgICAgICAgICAgb2Zmc2V0ID0gdmVsb2NpdHkubXVsdCgtZHVyYXRpb24gLyAyKTtcblxuICAgICAgICB0aGlzLl9tYXAucGFuQnkob2Zmc2V0LCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLFxuICAgICAgICAgICAgZWFzaW5nOiBpbmVydGlhRWFzaW5nLFxuICAgICAgICAgICAgbm9Nb3ZlU3RhcnQ6IHRydWVcbiAgICAgICAgfSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICB9XG5cbiAgICBfZmlyZUV2ZW50KHR5cGU6IHN0cmluZywgZTogKikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KHR5cGUsIGUgPyB7b3JpZ2luYWxFdmVudDogZX0gOiB7fSkpO1xuICAgIH1cblxuICAgIF9kcmFpbkluZXJ0aWFCdWZmZXIoKSB7XG4gICAgICAgIGNvbnN0IGluZXJ0aWEgPSB0aGlzLl9pbmVydGlhLFxuICAgICAgICAgICAgbm93ID0gYnJvd3Nlci5ub3coKSxcbiAgICAgICAgICAgIGN1dG9mZiA9IDE2MDsgICAvLyBtc2VjXG5cbiAgICAgICAgd2hpbGUgKGluZXJ0aWEubGVuZ3RoID4gMCAmJiBub3cgLSBpbmVydGlhWzBdWzBdID4gY3V0b2ZmKSBpbmVydGlhLnNoaWZ0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcmFnUGFuSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbmNvbnN0IHBhblN0ZXAgPSAxMDAsXG4gICAgYmVhcmluZ1N0ZXAgPSAxNSxcbiAgICBwaXRjaFN0ZXAgPSAxMDtcblxuLyoqXG4gKiBUaGUgYEtleWJvYXJkSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20sIHJvdGF0ZSwgYW5kIHBhbiB0aGUgbWFwIHVzaW5nXG4gKiB0aGUgZm9sbG93aW5nIGtleWJvYXJkIHNob3J0Y3V0czpcbiAqXG4gKiAtIGA9YCAvIGArYDogSW5jcmVhc2UgdGhlIHpvb20gbGV2ZWwgYnkgMS5cbiAqIC0gYFNoaWZ0LT1gIC8gYFNoaWZ0LStgOiBJbmNyZWFzZSB0aGUgem9vbSBsZXZlbCBieSAyLlxuICogLSBgLWA6IERlY3JlYXNlIHRoZSB6b29tIGxldmVsIGJ5IDEuXG4gKiAtIGBTaGlmdC0tYDogRGVjcmVhc2UgdGhlIHpvb20gbGV2ZWwgYnkgMi5cbiAqIC0gQXJyb3cga2V5czogUGFuIGJ5IDEwMCBwaXhlbHMuXG4gKiAtIGBTaGlmdCvDosKHwqJgOiBJbmNyZWFzZSB0aGUgcm90YXRpb24gYnkgMTUgZGVncmVlcy5cbiAqIC0gYFNoaWZ0K8OiwofCoGA6IERlY3JlYXNlIHRoZSByb3RhdGlvbiBieSAxNSBkZWdyZWVzLlxuICogLSBgU2hpZnQrw6LCh8KhYDogSW5jcmVhc2UgdGhlIHBpdGNoIGJ5IDEwIGRlZ3JlZXMuXG4gKiAtIGBTaGlmdCvDosKHwqNgOiBEZWNyZWFzZSB0aGUgcGl0Y2ggYnkgMTAgZGVncmVlcy5cbiAqL1xuY2xhc3MgS2V5Ym9hcmRIYW5kbGVyIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2VsOiBIVE1MRWxlbWVudDtcbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9lbCA9IG1hcC5nZXRDYW52YXNDb250YWluZXIoKTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25LZXlEb3duJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIga2V5Ym9hcmQgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYga2V5Ym9hcmQgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmtleWJvYXJkLmVuYWJsZSgpO1xuICAgICAqL1xuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmtleWJvYXJkLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBfb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHJldHVybjtcblxuICAgICAgICBsZXQgem9vbURpciA9IDA7XG4gICAgICAgIGxldCBiZWFyaW5nRGlyID0gMDtcbiAgICAgICAgbGV0IHBpdGNoRGlyID0gMDtcbiAgICAgICAgbGV0IHhEaXIgPSAwO1xuICAgICAgICBsZXQgeURpciA9IDA7XG5cbiAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgY2FzZSAxMDc6XG4gICAgICAgIGNhc2UgMTcxOlxuICAgICAgICBjYXNlIDE4NzpcbiAgICAgICAgICAgIHpvb21EaXIgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxODk6XG4gICAgICAgIGNhc2UgMTA5OlxuICAgICAgICBjYXNlIDE3MzpcbiAgICAgICAgICAgIHpvb21EaXIgPSAtMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGJlYXJpbmdEaXIgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHhEaXIgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGJlYXJpbmdEaXIgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgeERpciA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBwaXRjaERpciA9IDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB5RGlyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBwaXRjaERpciA9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB5RGlyID0gMTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5fbWFwO1xuICAgICAgICBjb25zdCB6b29tID0gbWFwLmdldFpvb20oKTtcblxuICAgICAgICBjb25zdCBlYXNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAsXG4gICAgICAgICAgICBkZWxheUVuZEV2ZW50czogNTAwLFxuICAgICAgICAgICAgZWFzaW5nOiBlYXNlT3V0LFxuXG4gICAgICAgICAgICB6b29tOiB6b29tRGlyID8gTWF0aC5yb3VuZCh6b29tKSArIHpvb21EaXIgKiAoZS5zaGlmdEtleSA/IDIgOiAxKSA6IHpvb20sXG4gICAgICAgICAgICBiZWFyaW5nOiBtYXAuZ2V0QmVhcmluZygpICsgYmVhcmluZ0RpciAqIGJlYXJpbmdTdGVwLFxuICAgICAgICAgICAgcGl0Y2g6IG1hcC5nZXRQaXRjaCgpICsgcGl0Y2hEaXIgKiBwaXRjaFN0ZXAsXG4gICAgICAgICAgICBvZmZzZXQ6IFsteERpciAqIHBhblN0ZXAsIC15RGlyICogcGFuU3RlcF0sXG4gICAgICAgICAgICBjZW50ZXI6IG1hcC5nZXRDZW50ZXIoKVxuICAgICAgICB9O1xuXG4gICAgICAgIG1hcC5lYXNlVG8oZWFzZU9wdGlvbnMsIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlYXNlT3V0KHQpIHtcbiAgICByZXR1cm4gdCAqICgyIC0gdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtleWJvYXJkSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5pbXBvcnQgdHlwZSB7TWFwTW91c2VFdmVudCwgTWFwVG91Y2hFdmVudH0gZnJvbSAnLi4vZXZlbnRzJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vLyBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gdHdvIHRhcCBQb2ludHMgZm9yIHRoZW0gdG8gcXVhbGlmeSBhcyBhIGRvdWJsZS10YXBcbmNvbnN0IG1heERpc3QgPSAzMDtcblxuLyoqXG4gKiBUaGUgYERvdWJsZUNsaWNrWm9vbUhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byB6b29tIHRoZSBtYXAgYXQgYSBwb2ludCBieVxuICogZG91YmxlIGNsaWNraW5nIG9yIGRvdWJsZSB0YXBwaW5nLlxuICovXG5jbGFzcyBEb3VibGVDbGlja1pvb21IYW5kbGVyIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgX2FjdGl2ZTogYm9vbGVhbjtcbiAgICBfdGFwcGVkOiA/VGltZW91dElEO1xuICAgIF90YXBwZWRQb2ludDogP1BvaW50O1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uRGJsQ2xpY2snLFxuICAgICAgICAgICAgJ19vblpvb21FbmQnXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmRvdWJsZUNsaWNrWm9vbS5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kb3VibGVDbGlja1pvb20uZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Ub3VjaFN0YXJ0KGU6IE1hcFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIGlmIChlLnBvaW50cy5sZW5ndGggPiAxKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLl90YXBwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhcHBlZFBvaW50ID0gZS5wb2ludHNbMF07XG4gICAgICAgICAgICB0aGlzLl90YXBwZWQgPSBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5fdGFwcGVkID0gbnVsbDsgdGhpcy5fdGFwcGVkUG9pbnQgPSBudWxsOyB9LCAzMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3VGFwID0gZS5wb2ludHNbMF07XG4gICAgICAgICAgICBjb25zdCBmaXJzdFRhcCA9IHRoaXMuX3RhcHBlZFBvaW50O1xuXG4gICAgICAgICAgICBpZiAoZmlyc3RUYXAgJiYgZmlyc3RUYXAuZGlzdChuZXdUYXApIDw9IG1heERpc3QpIHtcbiAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudCBkdXBsaWNhdGUgem9vbSBvbiBkYmxjbGlja1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb25Ub3VjaEVuZCA9ICgpID0+IHsgLy8gaWdub3JlIHRoZSB0b3VjaGVuZCBldmVudCwgYXMgaXQgaGFzIG5vIHBvaW50IHdlIGNhbiB6b29tIHRvXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90YXBwZWQpIHsgLy8gbWFrZSBzdXJlIHdlIGFyZSBzdGlsbCB3aXRoaW4gdGhlIHRpbWVvdXQgd2luZG93XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl96b29tKGUpOyAvLyBwYXNzIHRoZSBvcmlnaW5hbCB0b3VjaHN0YXJ0IGV2ZW50LCB3aXRoIHRoZSB0YXBwZWQgcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaGNhbmNlbCcsIG9uVG91Y2hDYW5jZWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldFRhcHBlZCgpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvblRvdWNoQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldFRhcHBlZCgpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub25jZSgndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub25jZSgndG91Y2hjYW5jZWwnLCBvblRvdWNoQ2FuY2VsKTtcblxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gdG91Y2hlcyBhcmUgdG9vIGZhciBhcGFydCwgZG9uJ3Qgem9vbVxuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0VGFwcGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcmVzZXRUYXBwZWQoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90YXBwZWQpO1xuICAgICAgICB0aGlzLl90YXBwZWQgPSBudWxsO1xuICAgICAgICB0aGlzLl90YXBwZWRQb2ludCA9IG51bGw7XG4gICAgfVxuXG4gICAgb25EYmxDbGljayhlOiBNYXBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICBlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fem9vbShlKTtcbiAgICB9XG5cbiAgICBfem9vbShlOiBNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9tYXAub24oJ3pvb21lbmQnLCB0aGlzLl9vblpvb21FbmQpO1xuICAgICAgICB0aGlzLl9tYXAuem9vbVRvKFxuICAgICAgICAgICAgdGhpcy5fbWFwLmdldFpvb20oKSArIChlLm9yaWdpbmFsRXZlbnQuc2hpZnRLZXkgPyAtMSA6IDEpLFxuICAgICAgICAgICAge2Fyb3VuZDogZS5sbmdMYXR9LFxuICAgICAgICAgICAgZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9vblpvb21FbmQoKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCd6b29tZW5kJywgdGhpcy5fb25ab29tRW5kKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERvdWJsZUNsaWNrWm9vbUhhbmRsZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB7YmV6aWVyLCBiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi8uLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHtFdmVudH0gZnJvbSAnLi4vLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIExuZ0xhdCBmcm9tICcuLi8uLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi8uLi91dGlsL3Rhc2tfcXVldWUnO1xuXG5jb25zdCBpbmVydGlhTGluZWFyaXR5ID0gMC4xNSxcbiAgICBpbmVydGlhRWFzaW5nID0gYmV6aWVyKDAsIDAsIGluZXJ0aWFMaW5lYXJpdHksIDEpLFxuICAgIGluZXJ0aWFEZWNlbGVyYXRpb24gPSAxMiwgLy8gc2NhbGUgLyBzXjJcbiAgICBpbmVydGlhTWF4U3BlZWQgPSAyLjUsIC8vIHNjYWxlIC8gc1xuICAgIHNpZ25pZmljYW50U2NhbGVUaHJlc2hvbGQgPSAwLjE1LFxuICAgIHNpZ25pZmljYW50Um90YXRlVGhyZXNob2xkID0gMTA7XG5cbi8qKlxuICogVGhlIGBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSBhbmQgcm90YXRlIHRoZSBtYXAgYnlcbiAqIHBpbmNoaW5nIG9uIGEgdG91Y2hzY3JlZW4uXG4gKi9cbmNsYXNzIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hcm91bmRDZW50ZXI6IGJvb2xlYW47XG4gICAgX3JvdGF0aW9uRGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgX3N0YXJ0VmVjOiBQb2ludDtcbiAgICBfc3RhcnRBcm91bmQ6IExuZ0xhdDtcbiAgICBfc3RhcnRTY2FsZTogbnVtYmVyO1xuICAgIF9zdGFydEJlYXJpbmc6IG51bWJlcjtcbiAgICBfZ2VzdHVyZUludGVudDogJ3JvdGF0ZScgfCAnem9vbScgfCB2b2lkO1xuICAgIF9pbmVydGlhOiBBcnJheTxbbnVtYmVyLCBudW1iZXIsIFBvaW50XT47XG4gICAgX2xhc3RUb3VjaEV2ZW50OiBUb3VjaEV2ZW50O1xuICAgIF9mcmFtZUlkOiA/VGFza0lEO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2VsID0gbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbk1vdmUnLFxuICAgICAgICAgICAgJ19vbkVuZCcsXG4gICAgICAgICAgICAnX29uVG91Y2hGcmFtZSdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwicGluY2ggdG8gcm90YXRlIGFuZCB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFyb3VuZF0gSWYgXCJjZW50ZXJcIiBpcyBwYXNzZWQsIG1hcCB3aWxsIHpvb20gYXJvdW5kIHRoZSBjZW50ZXJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmVuYWJsZSgpO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmVuYWJsZSh7IGFyb3VuZDogJ2NlbnRlcicgfSk7XG4gICAgICovXG4gICAgZW5hYmxlKG9wdGlvbnM6ID97YXJvdW5kPzogJ2NlbnRlcid9KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlJyk7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9hcm91bmRDZW50ZXIgPSAhIW9wdGlvbnMgJiYgb3B0aW9ucy5hcm91bmQgPT09ICdjZW50ZXInO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC50b3VjaFpvb21Sb3RhdGUuZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZScpO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwicGluY2ggdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24sIGxlYXZpbmcgdGhlIFwicGluY2ggdG8gem9vbVwiXG4gICAgICogaW50ZXJhY3Rpb24gZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmRpc2FibGVSb3RhdGlvbigpO1xuICAgICAqL1xuICAgIGRpc2FibGVSb3RhdGlvbigpIHtcbiAgICAgICAgdGhpcy5fcm90YXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgXCJwaW5jaCB0byByb3RhdGVcIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmVuYWJsZSgpO1xuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGVSb3RhdGlvbigpO1xuICAgICAqL1xuICAgIGVuYWJsZVJvdGF0aW9uKCkge1xuICAgICAgICB0aGlzLl9yb3RhdGlvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBoYW5kbGVyIGlzIGVuYWJsZWQgYW5kIGhhcyBkZXRlY3RlZCB0aGUgc3RhcnQgb2YgYSB6b29tL3JvdGF0ZSBnZXN0dXJlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJcbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFbmFibGVkKCkgJiYgISF0aGlzLl9nZXN0dXJlSW50ZW50O1xuICAgIH1cblxuICAgIG9uU3RhcnQoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggIT09IDIpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwMCA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZS50b3VjaGVzWzBdKSxcbiAgICAgICAgICAgIHAxID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlLnRvdWNoZXNbMV0pLFxuICAgICAgICAgICAgY2VudGVyID0gcDAuYWRkKHAxKS5kaXYoMik7XG5cbiAgICAgICAgdGhpcy5fc3RhcnRWZWMgPSBwMC5zdWIocDEpO1xuICAgICAgICB0aGlzLl9zdGFydEFyb3VuZCA9IHRoaXMuX21hcC50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihjZW50ZXIpO1xuICAgICAgICB0aGlzLl9nZXN0dXJlSW50ZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9pbmVydGlhID0gW107XG5cbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB7cGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vbkVuZCk7XG4gICAgfVxuXG4gICAgX2dldFRvdWNoRXZlbnREYXRhKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcDAgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUudG91Y2hlc1swXSksXG4gICAgICAgICAgICBwMSA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZS50b3VjaGVzWzFdKTtcblxuICAgICAgICBjb25zdCB2ZWMgPSBwMC5zdWIocDEpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmVjLFxuICAgICAgICAgICAgY2VudGVyOiBwMC5hZGQocDEpLmRpdigyKSxcbiAgICAgICAgICAgIHNjYWxlOiB2ZWMubWFnKCkgLyB0aGlzLl9zdGFydFZlYy5tYWcoKSxcbiAgICAgICAgICAgIGJlYXJpbmc6IHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQgPyAwIDogdmVjLmFuZ2xlV2l0aCh0aGlzLl9zdGFydFZlYykgKiAxODAgLyBNYXRoLlBJXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX29uTW92ZShlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoICE9PSAyKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qge3ZlYywgc2NhbGUsIGJlYXJpbmd9ID0gdGhpcy5fZ2V0VG91Y2hFdmVudERhdGEoZSk7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lICdpbnRlbnQnIGJ5IHdoaWNoZXZlciB0aHJlc2hvbGQgaXMgc3VycGFzc2VkIGZpcnN0LFxuICAgICAgICAvLyB0aGVuIGtlZXAgdGhhdCBzdGF0ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgZ2VzdHVyZS5cbiAgICAgICAgaWYgKCF0aGlzLl9nZXN0dXJlSW50ZW50KSB7XG4gICAgICAgICAgICAvLyB3aGVuIHJvdGF0aW9uIGlzIGRpc2FibGVkLCBhbnkgc2NhbGUgY2hhbmdlIHRyaWdnZXJzIHRoZSB6b29tIGdlc3R1cmUgdG8gc3RhcnRcbiAgICAgICAgICAgIGNvbnN0IHNjYWxpbmdTaWduaWZpY2FudGx5ID0gKHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQgJiYgc2NhbGUgIT09IDEpIHx8IChNYXRoLmFicygxIC0gc2NhbGUpID4gc2lnbmlmaWNhbnRTY2FsZVRocmVzaG9sZCksXG4gICAgICAgICAgICAgICAgcm90YXRpbmdTaWduaWZpY2FudGx5ID0gKE1hdGguYWJzKGJlYXJpbmcpID4gc2lnbmlmaWNhbnRSb3RhdGVUaHJlc2hvbGQpO1xuXG4gICAgICAgICAgICBpZiAocm90YXRpbmdTaWduaWZpY2FudGx5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VzdHVyZUludGVudCA9ICdyb3RhdGUnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzY2FsaW5nU2lnbmlmaWNhbnRseSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlc3R1cmVJbnRlbnQgPSAnem9vbSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9nZXN0dXJlSW50ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KGAke3RoaXMuX2dlc3R1cmVJbnRlbnR9c3RhcnRgLCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ21vdmVzdGFydCcsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0VmVjID0gdmVjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdFRvdWNoRXZlbnQgPSBlO1xuICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSB0aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblRvdWNoRnJhbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIF9vblRvdWNoRnJhbWUoKSB7XG4gICAgICAgIHRoaXMuX2ZyYW1lSWQgPSBudWxsO1xuXG4gICAgICAgIGNvbnN0IGdlc3R1cmVJbnRlbnQgPSB0aGlzLl9nZXN0dXJlSW50ZW50O1xuICAgICAgICBpZiAoIWdlc3R1cmVJbnRlbnQpIHJldHVybjtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMuX21hcC50cmFuc2Zvcm07XG5cbiAgICAgICAgaWYgKCF0aGlzLl9zdGFydFNjYWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGFydFNjYWxlID0gdHIuc2NhbGU7XG4gICAgICAgICAgICB0aGlzLl9zdGFydEJlYXJpbmcgPSB0ci5iZWFyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge2NlbnRlciwgYmVhcmluZywgc2NhbGV9ID0gdGhpcy5fZ2V0VG91Y2hFdmVudERhdGEodGhpcy5fbGFzdFRvdWNoRXZlbnQpO1xuICAgICAgICBjb25zdCBhcm91bmQgPSB0ci5wb2ludExvY2F0aW9uKGNlbnRlcik7XG4gICAgICAgIGNvbnN0IGFyb3VuZFBvaW50ID0gdHIubG9jYXRpb25Qb2ludChhcm91bmQpO1xuXG4gICAgICAgIGlmIChnZXN0dXJlSW50ZW50ID09PSAncm90YXRlJykge1xuICAgICAgICAgICAgdHIuYmVhcmluZyA9IHRoaXMuX3N0YXJ0QmVhcmluZyArIGJlYXJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICB0ci56b29tID0gdHIuc2NhbGVab29tKHRoaXMuX3N0YXJ0U2NhbGUgKiBzY2FsZSk7XG4gICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0aGlzLl9zdGFydEFyb3VuZCwgYXJvdW5kUG9pbnQpO1xuXG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudChnZXN0dXJlSW50ZW50LCB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFRvdWNoRXZlbnR9KSk7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnbW92ZScsIHtvcmlnaW5hbEV2ZW50OiB0aGlzLl9sYXN0VG91Y2hFdmVudH0pKTtcblxuICAgICAgICB0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTtcbiAgICAgICAgdGhpcy5faW5lcnRpYS5wdXNoKFticm93c2VyLm5vdygpLCBzY2FsZSwgY2VudGVyXSk7XG4gICAgfVxuXG4gICAgX29uRW5kKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB7cGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vbkVuZCk7XG5cbiAgICAgICAgY29uc3QgZ2VzdHVyZUludGVudCA9IHRoaXMuX2dlc3R1cmVJbnRlbnQ7XG4gICAgICAgIGNvbnN0IHN0YXJ0U2NhbGUgPSB0aGlzLl9zdGFydFNjYWxlO1xuXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX2dlc3R1cmVJbnRlbnQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFNjYWxlO1xuICAgICAgICBkZWxldGUgdGhpcy5fc3RhcnRCZWFyaW5nO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFRvdWNoRXZlbnQ7XG5cbiAgICAgICAgaWYgKCFnZXN0dXJlSW50ZW50KSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KGAke2dlc3R1cmVJbnRlbnR9ZW5kYCwge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG5cbiAgICAgICAgdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7XG5cbiAgICAgICAgY29uc3QgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWEsXG4gICAgICAgICAgICBtYXAgPSB0aGlzLl9tYXA7XG5cbiAgICAgICAgaWYgKGluZXJ0aWEubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgbWFwLnNuYXBUb05vcnRoKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdCA9IGluZXJ0aWFbaW5lcnRpYS5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgIGZpcnN0ID0gaW5lcnRpYVswXSxcbiAgICAgICAgICAgIGxhc3RTY2FsZSA9IG1hcC50cmFuc2Zvcm0uc2NhbGVab29tKHN0YXJ0U2NhbGUgKiBsYXN0WzFdKSxcbiAgICAgICAgICAgIGZpcnN0U2NhbGUgPSBtYXAudHJhbnNmb3JtLnNjYWxlWm9vbShzdGFydFNjYWxlICogZmlyc3RbMV0pLFxuICAgICAgICAgICAgc2NhbGVPZmZzZXQgPSBsYXN0U2NhbGUgLSBmaXJzdFNjYWxlLFxuICAgICAgICAgICAgc2NhbGVEdXJhdGlvbiA9IChsYXN0WzBdIC0gZmlyc3RbMF0pIC8gMTAwMCxcbiAgICAgICAgICAgIHAgPSBsYXN0WzJdO1xuXG4gICAgICAgIGlmIChzY2FsZUR1cmF0aW9uID09PSAwIHx8IGxhc3RTY2FsZSA9PT0gZmlyc3RTY2FsZSkge1xuICAgICAgICAgICAgbWFwLnNuYXBUb05vcnRoKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHNjYWxlL3Mgc3BlZWQgYW5kIGFkanVzdCBmb3IgaW5jcmVhc2VkIGluaXRpYWwgYW5pbWF0aW9uIHNwZWVkIHdoZW4gZWFzaW5nXG4gICAgICAgIGxldCBzcGVlZCA9IHNjYWxlT2Zmc2V0ICogaW5lcnRpYUxpbmVhcml0eSAvIHNjYWxlRHVyYXRpb247IC8vIHNjYWxlL3NcblxuICAgICAgICBpZiAoTWF0aC5hYnMoc3BlZWQpID4gaW5lcnRpYU1heFNwZWVkKSB7XG4gICAgICAgICAgICBpZiAoc3BlZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc3BlZWQgPSBpbmVydGlhTWF4U3BlZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNwZWVkID0gLWluZXJ0aWFNYXhTcGVlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5hYnMoc3BlZWQgLyAoaW5lcnRpYURlY2VsZXJhdGlvbiAqIGluZXJ0aWFMaW5lYXJpdHkpKSAqIDEwMDA7XG4gICAgICAgIGxldCB0YXJnZXRTY2FsZSA9IGxhc3RTY2FsZSArIHNwZWVkICogZHVyYXRpb24gLyAyMDAwO1xuXG4gICAgICAgIGlmICh0YXJnZXRTY2FsZSA8IDApIHtcbiAgICAgICAgICAgIHRhcmdldFNjYWxlID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC5lYXNlVG8oe1xuICAgICAgICAgICAgem9vbTogdGFyZ2V0U2NhbGUsXG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgIGVhc2luZzogaW5lcnRpYUVhc2luZyxcbiAgICAgICAgICAgIGFyb3VuZDogdGhpcy5fYXJvdW5kQ2VudGVyID8gbWFwLmdldENlbnRlcigpIDogbWFwLnVucHJvamVjdChwKSxcbiAgICAgICAgICAgIG5vTW92ZVN0YXJ0OiB0cnVlXG4gICAgICAgIH0sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgfVxuXG4gICAgX2RyYWluSW5lcnRpYUJ1ZmZlcigpIHtcbiAgICAgICAgY29uc3QgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWEsXG4gICAgICAgICAgICBub3cgPSBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgY3V0b2ZmID0gMTYwOyAvLyBtc2VjXG5cbiAgICAgICAgd2hpbGUgKGluZXJ0aWEubGVuZ3RoID4gMiAmJiBub3cgLSBpbmVydGlhWzBdWzBdID4gY3V0b2ZmKSBpbmVydGlhLnNoaWZ0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtNYXBNb3VzZUV2ZW50LCBNYXBUb3VjaEV2ZW50LCBNYXBXaGVlbEV2ZW50fSBmcm9tICcuLi91aS9ldmVudHMnO1xuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHNjcm9sbFpvb20gZnJvbSAnLi9oYW5kbGVyL3Njcm9sbF96b29tJztcbmltcG9ydCBib3hab29tIGZyb20gJy4vaGFuZGxlci9ib3hfem9vbSc7XG5pbXBvcnQgZHJhZ1JvdGF0ZSBmcm9tICcuL2hhbmRsZXIvZHJhZ19yb3RhdGUnO1xuaW1wb3J0IGRyYWdQYW4gZnJvbSAnLi9oYW5kbGVyL2RyYWdfcGFuJztcbmltcG9ydCBrZXlib2FyZCBmcm9tICcuL2hhbmRsZXIva2V5Ym9hcmQnO1xuaW1wb3J0IGRvdWJsZUNsaWNrWm9vbSBmcm9tICcuL2hhbmRsZXIvZGJsY2xpY2tfem9vbSc7XG5pbXBvcnQgdG91Y2hab29tUm90YXRlIGZyb20gJy4vaGFuZGxlci90b3VjaF96b29tX3JvdGF0ZSc7XG5cbmNvbnN0IGhhbmRsZXJzID0ge1xuICAgIHNjcm9sbFpvb20sXG4gICAgYm94Wm9vbSxcbiAgICBkcmFnUm90YXRlLFxuICAgIGRyYWdQYW4sXG4gICAga2V5Ym9hcmQsXG4gICAgZG91YmxlQ2xpY2tab29tLFxuICAgIHRvdWNoWm9vbVJvdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmluZEhhbmRsZXJzKG1hcDogTWFwLCBvcHRpb25zOiB7aW50ZXJhY3RpdmU6IGJvb2xlYW4sIGNsaWNrVG9sZXJhbmNlOiBudW1iZXJ9KSB7XG4gICAgY29uc3QgZWwgPSBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG4gICAgbGV0IGNvbnRleHRNZW51RXZlbnQgPSBudWxsO1xuICAgIGxldCBtb3VzZURvd24gPSBmYWxzZTtcbiAgICBsZXQgc3RhcnRQb3MgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIGluIGhhbmRsZXJzKSB7XG4gICAgICAgIChtYXA6IGFueSlbbmFtZV0gPSBuZXcgaGFuZGxlcnNbbmFtZV0obWFwLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJhY3RpdmUgJiYgb3B0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgKG1hcDogYW55KVtuYW1lXS5lbmFibGUob3B0aW9uc1tuYW1lXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ21vdXNlb3V0Jywgb25Nb3VzZU91dCk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ21vdXNlb3ZlcicsIG9uTW91c2VPdmVyKTtcblxuICAgIC8vIEJpbmQgdG91Y2hzdGFydCBhbmQgdG91Y2htb3ZlIHdpdGggcGFzc2l2ZTogZmFsc2UgYmVjYXVzZSwgZXZlbiB0aG91Z2hcbiAgICAvLyB0aGV5IG9ubHkgZmlyZSBhIG1hcCBldmVudHMgYW5kIHRoZXJlZm9yZSBjb3VsZCB0aGVvcmV0aWNhbGx5IGJlXG4gICAgLy8gcGFzc2l2ZSwgYmluZGluZyB3aXRoIHBhc3NpdmU6IHRydWUgY2F1c2VzIGlPUyBub3QgdG8gcmVzcGVjdFxuICAgIC8vIGUucHJldmVudERlZmF1bHQoKSBpbiBfb3RoZXJfIGhhbmRsZXJzLCBldmVuIGlmIHRoZXkgYXJlIG5vbi1wYXNzaXZlXG4gICAgLy8gKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjUxKVxuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSwge3Bhc3NpdmU6IGZhbHNlfSk7XG5cbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICd0b3VjaGNhbmNlbCcsIG9uVG91Y2hDYW5jZWwpO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnY2xpY2snLCBvbkNsaWNrKTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2RibGNsaWNrJywgb25EYmxDbGljayk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdjb250ZXh0bWVudScsIG9uQ29udGV4dE1lbnUpO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnd2hlZWwnLCBvbldoZWVsLCB7cGFzc2l2ZTogZmFsc2V9KTtcblxuICAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgICAgc3RhcnRQb3MgPSBET00ubW91c2VQb3MoZWwsIGUpO1xuXG4gICAgICAgIGNvbnN0IG1hcEV2ZW50ID0gbmV3IE1hcE1vdXNlRXZlbnQoJ21vdXNlZG93bicsIG1hcCwgZSk7XG4gICAgICAgIG1hcC5maXJlKG1hcEV2ZW50KTtcblxuICAgICAgICBpZiAobWFwRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJhY3RpdmUgJiYgIW1hcC5kb3VibGVDbGlja1pvb20uaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgbWFwLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC5ib3hab29tLm9uTW91c2VEb3duKGUpO1xuXG4gICAgICAgIGlmICghbWFwLmJveFpvb20uaXNBY3RpdmUoKSAmJiAhbWFwLmRyYWdQYW4uaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgbWFwLmRyYWdSb3RhdGUub25Nb3VzZURvd24oZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1hcC5ib3hab29tLmlzQWN0aXZlKCkgJiYgIW1hcC5kcmFnUm90YXRlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIG1hcC5kcmFnUGFuLm9uTW91c2VEb3duKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Nb3VzZVVwKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgcm90YXRpbmcgPSBtYXAuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpO1xuXG4gICAgICAgIGlmIChjb250ZXh0TWVudUV2ZW50ICYmICFyb3RhdGluZykge1xuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBjYXNlIGZvciBNYWNcbiAgICAgICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdjb250ZXh0bWVudScsIG1hcCwgY29udGV4dE1lbnVFdmVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dE1lbnVFdmVudCA9IG51bGw7XG4gICAgICAgIG1vdXNlRG93biA9IGZhbHNlO1xuXG4gICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdtb3VzZXVwJywgbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAobWFwLmRyYWdQYW4uaXNBY3RpdmUoKSkgcmV0dXJuO1xuICAgICAgICBpZiAobWFwLmRyYWdSb3RhdGUuaXNBY3RpdmUoKSkgcmV0dXJuO1xuXG4gICAgICAgIGxldCB0YXJnZXQ6ID9Ob2RlID0gKGUudGFyZ2V0OiBhbnkpO1xuICAgICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPT0gZWwpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICBpZiAodGFyZ2V0ICE9PSBlbCkgcmV0dXJuO1xuXG4gICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdtb3VzZW1vdmUnLCBtYXAsIGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdXNlT3ZlcihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGxldCB0YXJnZXQ6ID9Ob2RlID0gKGUudGFyZ2V0OiBhbnkpO1xuICAgICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPT0gZWwpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICBpZiAodGFyZ2V0ICE9PSBlbCkgcmV0dXJuO1xuXG4gICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdtb3VzZW92ZXInLCBtYXAsIGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdXNlT3V0KGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ21vdXNlb3V0JywgbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Ub3VjaFN0YXJ0KGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgY29uc3QgbWFwRXZlbnQgPSBuZXcgTWFwVG91Y2hFdmVudCgndG91Y2hzdGFydCcsIG1hcCwgZSk7XG4gICAgICAgIG1hcC5maXJlKG1hcEV2ZW50KTtcblxuICAgICAgICBpZiAobWFwRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIG1hcC5zdG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1hcC5ib3hab29tLmlzQWN0aXZlKCkgJiYgIW1hcC5kcmFnUm90YXRlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIG1hcC5kcmFnUGFuLm9uVG91Y2hTdGFydChlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC50b3VjaFpvb21Sb3RhdGUub25TdGFydChlKTtcbiAgICAgICAgbWFwLmRvdWJsZUNsaWNrWm9vbS5vblRvdWNoU3RhcnQobWFwRXZlbnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgbWFwLmZpcmUobmV3IE1hcFRvdWNoRXZlbnQoJ3RvdWNobW92ZScsIG1hcCwgZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uVG91Y2hFbmQoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBtYXAuZmlyZShuZXcgTWFwVG91Y2hFdmVudCgndG91Y2hlbmQnLCBtYXAsIGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblRvdWNoQ2FuY2VsKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgbWFwLmZpcmUobmV3IE1hcFRvdWNoRXZlbnQoJ3RvdWNoY2FuY2VsJywgbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25DbGljayhlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IERPTS5tb3VzZVBvcyhlbCwgZSk7XG4gICAgICAgIGlmICghc3RhcnRQb3MgfHwgcG9zLmVxdWFscyhzdGFydFBvcykgfHwgcG9zLmRpc3Qoc3RhcnRQb3MpIDwgb3B0aW9ucy5jbGlja1RvbGVyYW5jZSkge1xuICAgICAgICAgICAgbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ2NsaWNrJywgbWFwLCBlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbkRibENsaWNrKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgbWFwRXZlbnQgPSBuZXcgTWFwTW91c2VFdmVudCgnZGJsY2xpY2snLCBtYXAsIGUpO1xuICAgICAgICBtYXAuZmlyZShtYXBFdmVudCk7XG5cbiAgICAgICAgaWYgKG1hcEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC5kb3VibGVDbGlja1pvb20ub25EYmxDbGljayhtYXBFdmVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Db250ZXh0TWVudShlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHJvdGF0aW5nID0gbWFwLmRyYWdSb3RhdGUuaXNBY3RpdmUoKTtcbiAgICAgICAgaWYgKCFtb3VzZURvd24gJiYgIXJvdGF0aW5nKSB7XG4gICAgICAgICAgICAvLyBXaW5kb3dzOiBjb250ZXh0bWVudSBmaXJlZCBvbiBtb3VzZXVwLCBzbyBmaXJlIGV2ZW50IG5vd1xuICAgICAgICAgICAgbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ2NvbnRleHRtZW51JywgbWFwLCBlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobW91c2VEb3duKSB7XG4gICAgICAgICAgICAvLyBNYWM6IGNvbnRleHRtZW51IGZpcmVkIG9uIG1vdXNlZG93bjsgd2Ugc2F2ZSBpdCB1bnRpbCBtb3VzZXVwIGZvciBjb25zaXN0ZW5jeSdzIHNha2VcbiAgICAgICAgICAgIGNvbnRleHRNZW51RXZlbnQgPSBlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJldmVudCBicm93c2VyIGNvbnRleHQgbWVudSB3aGVuIG5lY2Vzc2FyeTsgd2UgZG9uJ3QgYWxsb3cgaXQgd2l0aCByb3RhdGlvblxuICAgICAgICAvLyBiZWNhdXNlIHdlIGNhbid0IGRpc2Nlcm4gcm90YXRpb24gZ2VzdHVyZSBzdGFydCBmcm9tIGNvbnRleHRtZW51IG9uIE1hY1xuICAgICAgICBpZiAobWFwLmRyYWdSb3RhdGUuaXNFbmFibGVkKCkgfHwgbWFwLmxpc3RlbnMoJ2NvbnRleHRtZW51JykpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uV2hlZWwoZTogV2hlZWxFdmVudCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgbWFwLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hcEV2ZW50ID0gbmV3IE1hcFdoZWVsRXZlbnQoJ3doZWVsJywgbWFwLCBlKTtcbiAgICAgICAgbWFwLmZpcmUobWFwRXZlbnQpO1xuXG4gICAgICAgIGlmIChtYXBFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBtYXAuc2Nyb2xsWm9vbS5vbldoZWVsKGUpO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgYmluZEFsbCxcbiAgICBleHRlbmQsXG4gICAgZGVlcEVxdWFsLFxuICAgIHdhcm5PbmNlLFxuICAgIGNsYW1wLFxuICAgIHdyYXAsXG4gICAgZWFzZSBhcyBkZWZhdWx0RWFzaW5nLFxuICAgIHBpY2tcbn0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB0eXBlIHtMbmdMYXRCb3VuZHNMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IHR5cGUge1Rhc2tJRH0gZnJvbSAnLi4vdXRpbC90YXNrX3F1ZXVlJztcbmltcG9ydCB0eXBlIHtQb2ludExpa2V9IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vKipcbiAqIE9wdGlvbnMgY29tbW9uIHRvIHtAbGluayBNYXAjanVtcFRvfSwge0BsaW5rIE1hcCNlYXNlVG99LCBhbmQge0BsaW5rIE1hcCNmbHlUb30sIGNvbnRyb2xsaW5nIHRoZSBkZXNpcmVkIGxvY2F0aW9uLFxuICogem9vbSwgYmVhcmluZywgYW5kIHBpdGNoIG9mIHRoZSBjYW1lcmEuIEFsbCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbCwgYW5kIHdoZW4gYSBwcm9wZXJ0eSBpcyBvbWl0dGVkLCB0aGUgY3VycmVudFxuICogY2FtZXJhIHZhbHVlIGZvciB0aGF0IHByb3BlcnR5IHdpbGwgcmVtYWluIHVuY2hhbmdlZC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYW1lcmFPcHRpb25zXG4gKiBAcHJvcGVydHkge0xuZ0xhdExpa2V9IGNlbnRlciBUaGUgZGVzaXJlZCBjZW50ZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gem9vbSBUaGUgZGVzaXJlZCB6b29tIGxldmVsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJlYXJpbmcgVGhlIGRlc2lyZWQgYmVhcmluZywgaW4gZGVncmVlcy4gVGhlIGJlYXJpbmcgaXMgdGhlIGNvbXBhc3MgZGlyZWN0aW9uIHRoYXRcbiAqIGlzIFwidXBcIjsgZm9yIGV4YW1wbGUsIGEgYmVhcmluZyBvZiA5MMOCwrAgb3JpZW50cyB0aGUgbWFwIHNvIHRoYXQgZWFzdCBpcyB1cC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwaXRjaCBUaGUgZGVzaXJlZCBwaXRjaCwgaW4gZGVncmVlcy5cbiAqIEBwcm9wZXJ0eSB7TG5nTGF0TGlrZX0gYXJvdW5kIElmIGB6b29tYCBpcyBzcGVjaWZpZWQsIGBhcm91bmRgIGRldGVybWluZXMgdGhlIHBvaW50IGFyb3VuZCB3aGljaCB0aGUgem9vbSBpcyBjZW50ZXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgQ2FtZXJhT3B0aW9ucyA9IHtcbiAgICBjZW50ZXI/OiBMbmdMYXRMaWtlLFxuICAgIHpvb20/OiBudW1iZXIsXG4gICAgYmVhcmluZz86IG51bWJlcixcbiAgICBwaXRjaD86IG51bWJlcixcbiAgICBhcm91bmQ/OiBMbmdMYXRMaWtlXG59O1xuXG4vKipcbiAqIE9wdGlvbnMgY29tbW9uIHRvIG1hcCBtb3ZlbWVudCBtZXRob2RzIHRoYXQgaW52b2x2ZSBhbmltYXRpb24sIHN1Y2ggYXMge0BsaW5rIE1hcCNwYW5CeX0gYW5kXG4gKiB7QGxpbmsgTWFwI2Vhc2VUb30sIGNvbnRyb2xsaW5nIHRoZSBkdXJhdGlvbiBhbmQgZWFzaW5nIGZ1bmN0aW9uIG9mIHRoZSBhbmltYXRpb24uIEFsbCBwcm9wZXJ0aWVzXG4gKiBhcmUgb3B0aW9uYWwuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQW5pbWF0aW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGR1cmF0aW9uIFRoZSBhbmltYXRpb24ncyBkdXJhdGlvbiwgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZWFzaW5nIEEgZnVuY3Rpb24gdGFraW5nIGEgdGltZSBpbiB0aGUgcmFuZ2UgMC4uMSBhbmQgcmV0dXJuaW5nIGEgbnVtYmVyIHdoZXJlIDAgaXNcbiAqICAgdGhlIGluaXRpYWwgc3RhdGUgYW5kIDEgaXMgdGhlIGZpbmFsIHN0YXRlLlxuICogQHByb3BlcnR5IHtQb2ludExpa2V9IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGNlbnRlciByZWxhdGl2ZSB0byByZWFsIG1hcCBjb250YWluZXIgY2VudGVyIGF0IHRoZSBlbmQgb2YgYW5pbWF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbmltYXRlIElmIGBmYWxzZWAsIG5vIGFuaW1hdGlvbiB3aWxsIG9jY3VyLlxuICovXG5leHBvcnQgdHlwZSBBbmltYXRpb25PcHRpb25zID0ge1xuICAgIGR1cmF0aW9uPzogbnVtYmVyLFxuICAgIGVhc2luZz86IChudW1iZXIpID0+IG51bWJlcixcbiAgICBvZmZzZXQ/OiBQb2ludExpa2UsXG4gICAgYW5pbWF0ZT86IGJvb2xlYW5cbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc2V0dGluZyBwYWRkaW5nIG9uIGEgY2FsbCB0byB7QGxpbmsgTWFwI2ZpdEJvdW5kc30uIEFsbCBwcm9wZXJ0aWVzIG9mIHRoaXMgb2JqZWN0IG11c3QgYmVcbiAqIG5vbi1uZWdhdGl2ZSBpbnRlZ2Vycy5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYWRkaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCBQYWRkaW5nIGluIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIG1hcCBjYW52YXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm90dG9tIFBhZGRpbmcgaW4gcGl4ZWxzIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgbWFwIGNhbnZhcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IFBhZGRpbmcgaW4gcGl4ZWxzIGZyb20gdGhlIGxlZnQgb2YgdGhlIG1hcCBjYW52YXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgUGFkZGluZyBpbiBwaXhlbHMgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIG1hcCBjYW52YXMuXG4gKi9cblxuY2xhc3MgQ2FtZXJhIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm07XG4gICAgX21vdmluZzogYm9vbGVhbjtcbiAgICBfem9vbWluZzogYm9vbGVhbjtcbiAgICBfcm90YXRpbmc6IGJvb2xlYW47XG4gICAgX3BpdGNoaW5nOiBib29sZWFuO1xuXG4gICAgX2JlYXJpbmdTbmFwOiBudW1iZXI7XG4gICAgX2Vhc2VFbmRUaW1lb3V0SUQ6IFRpbWVvdXRJRDtcbiAgICBfZWFzZVN0YXJ0OiBudW1iZXI7XG4gICAgX2Vhc2VPcHRpb25zOiB7ZHVyYXRpb246IG51bWJlciwgZWFzaW5nOiAobnVtYmVyKSA9PiBudW1iZXJ9O1xuXG4gICAgX29uRWFzZUZyYW1lOiAobnVtYmVyKSA9PiB2b2lkO1xuICAgIF9vbkVhc2VFbmQ6ICgpID0+IHZvaWQ7XG4gICAgX2Vhc2VGcmFtZUlkOiA/VGFza0lEO1xuXG4gICAgK19yZXF1ZXN0UmVuZGVyRnJhbWU6ICgoKSA9PiB2b2lkKSA9PiBUYXNrSUQ7XG4gICAgK19jYW5jZWxSZW5kZXJGcmFtZTogKFRhc2tJRCkgPT4gdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybTogVHJhbnNmb3JtLCBvcHRpb25zOiB7YmVhcmluZ1NuYXA6IG51bWJlcn0pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fbW92aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3pvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgIHRoaXMuX2JlYXJpbmdTbmFwID0gb3B0aW9ucy5iZWFyaW5nU25hcDtcblxuICAgICAgICBiaW5kQWxsKFsnX3JlbmRlckZyYW1lQ2FsbGJhY2snXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50LlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50LlxuICAgICAqL1xuICAgIGdldENlbnRlcigpOiBMbmdMYXQgeyByZXR1cm4gbmV3IExuZ0xhdCh0aGlzLnRyYW5zZm9ybS5jZW50ZXIubG5nLCB0aGlzLnRyYW5zZm9ybS5jZW50ZXIubGF0KTsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50LiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe2NlbnRlcjogY2VudGVyfSlgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gY2VudGVyIFRoZSBjZW50ZXJwb2ludCB0byBzZXQuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldENlbnRlcihbLTc0LCAzOF0pO1xuICAgICAqL1xuICAgIHNldENlbnRlcihjZW50ZXI6IExuZ0xhdExpa2UsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qdW1wVG8oe2NlbnRlcn0sIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFucyB0aGUgbWFwIGJ5IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIGJ5IHdoaWNoIHRvIHBhbiB0aGUgbWFwLlxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBzZWUgW05hdmlnYXRlIHRoZSBtYXAgd2l0aCBnYW1lLWxpa2UgY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2FtZS1jb250cm9scy8pXG4gICAgICovXG4gICAgcGFuQnkob2Zmc2V0OiBQb2ludExpa2UsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgb2Zmc2V0ID0gUG9pbnQuY29udmVydChvZmZzZXQpLm11bHQoLTEpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5Ubyh0aGlzLnRyYW5zZm9ybS5jZW50ZXIsIGV4dGVuZCh7b2Zmc2V0fSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFucyB0aGUgbWFwIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24sIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIGxuZ2xhdCBUaGUgbG9jYXRpb24gdG8gcGFuIHRoZSBtYXAgdG8uXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgcGFuVG8obG5nbGF0OiBMbmdMYXRMaWtlLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhc2VUbyhleHRlbmQoe1xuICAgICAgICAgICAgY2VudGVyOiBsbmdsYXRcbiAgICAgICAgfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsLlxuICAgICAqL1xuICAgIGdldFpvb20oKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnpvb207IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIHpvb20gbGV2ZWwuIEVxdWl2YWxlbnQgdG8gYGp1bXBUbyh7em9vbTogem9vbX0pYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHpvb20gVGhlIHpvb20gbGV2ZWwgdG8gc2V0ICgwLTIwKS5cbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gem9vbSB0aGUgbWFwIHRvIDVcbiAgICAgKiBtYXAuc2V0Wm9vbSg1KTtcbiAgICAgKi9cbiAgICBzZXRab29tKHpvb206IG51bWJlciwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuanVtcFRvKHt6b29tfSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogWm9vbXMgdGhlIG1hcCB0byB0aGUgc3BlY2lmaWVkIHpvb20gbGV2ZWwsIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHpvb20gVGhlIHpvb20gbGV2ZWwgdG8gdHJhbnNpdGlvbiB0by5cbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgem9vbVRvKHpvb206IG51bWJlciwgb3B0aW9uczogPyBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFzZVRvKGV4dGVuZCh7XG4gICAgICAgICAgICB6b29tXG4gICAgICAgIH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluY3JlYXNlcyB0aGUgbWFwJ3Mgem9vbSBsZXZlbCBieSAxLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgem9vbUluKG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkgKyAxLCBvcHRpb25zLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNyZWFzZXMgdGhlIG1hcCdzIHpvb20gbGV2ZWwgYnkgMS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHpvb21PdXQob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKSAtIDEsIG9wdGlvbnMsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGN1cnJlbnQgYmVhcmluZy4gVGhlIGJlYXJpbmcgaXMgdGhlIGNvbXBhc3MgZGlyZWN0aW9uIHRoYXQgaXMgXFxcInVwXFxcIjsgZm9yIGV4YW1wbGUsIGEgYmVhcmluZ1xuICAgICAqIG9mIDkww4LCsCBvcmllbnRzIHRoZSBtYXAgc28gdGhhdCBlYXN0IGlzIHVwLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgY3VycmVudCBiZWFyaW5nLlxuICAgICAqIEBzZWUgW05hdmlnYXRlIHRoZSBtYXAgd2l0aCBnYW1lLWxpa2UgY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2FtZS1jb250cm9scy8pXG4gICAgICovXG4gICAgZ2V0QmVhcmluZygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZzsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwJ3MgYmVhcmluZyAocm90YXRpb24pLiBUaGUgYmVhcmluZyBpcyB0aGUgY29tcGFzcyBkaXJlY3Rpb24gdGhhdCBpcyBcXFwidXBcXFwiOyBmb3IgZXhhbXBsZSwgYSBiZWFyaW5nXG4gICAgICogb2YgOTDDgsKwIG9yaWVudHMgdGhlIG1hcCBzbyB0aGF0IGVhc3QgaXMgdXAuXG4gICAgICpcbiAgICAgKiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe2JlYXJpbmc6IGJlYXJpbmd9KWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBiZWFyaW5nIFRoZSBkZXNpcmVkIGJlYXJpbmcuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gcm90YXRlIHRoZSBtYXAgdG8gOTAgZGVncmVlc1xuICAgICAqIG1hcC5zZXRCZWFyaW5nKDkwKTtcbiAgICAgKi9cbiAgICBzZXRCZWFyaW5nKGJlYXJpbmc6IG51bWJlciwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuanVtcFRvKHtiZWFyaW5nfSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUm90YXRlcyB0aGUgbWFwIHRvIHRoZSBzcGVjaWZpZWQgYmVhcmluZywgd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uLiBUaGUgYmVhcmluZyBpcyB0aGUgY29tcGFzcyBkaXJlY3Rpb25cbiAgICAgKiB0aGF0IGlzIFxcXCJ1cFxcXCI7IGZvciBleGFtcGxlLCBhIGJlYXJpbmcgb2YgOTDDgsKwIG9yaWVudHMgdGhlIG1hcCBzbyB0aGF0IGVhc3QgaXMgdXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBiZWFyaW5nIFRoZSBkZXNpcmVkIGJlYXJpbmcuXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgcm90YXRlVG8oYmVhcmluZzogbnVtYmVyLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhc2VUbyhleHRlbmQoe1xuICAgICAgICAgICAgYmVhcmluZ1xuICAgICAgICB9LCBvcHRpb25zKSwgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGVzIHRoZSBtYXAgc28gdGhhdCBub3J0aCBpcyB1cCAoMMOCwrAgYmVhcmluZyksIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgcmVzZXROb3J0aChvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMucm90YXRlVG8oMCwgZXh0ZW5kKHtkdXJhdGlvbjogMTAwMH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGVzIGFuZCBwaXRjaGVzIHRoZSBtYXAgc28gdGhhdCBub3J0aCBpcyB1cCAoMMOCwrAgYmVhcmluZykgYW5kIHBpdGNoIGlzIDDDgsKwLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHJlc2V0Tm9ydGhQaXRjaChvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuZWFzZVRvKGV4dGVuZCh7XG4gICAgICAgICAgICBiZWFyaW5nOiAwLFxuICAgICAgICAgICAgcGl0Y2g6IDAsXG4gICAgICAgICAgICBkdXJhdGlvbjogMTAwMFxuICAgICAgICB9LCBvcHRpb25zKSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU25hcHMgdGhlIG1hcCBzbyB0aGF0IG5vcnRoIGlzIHVwICgww4LCsCBiZWFyaW5nKSwgaWYgdGhlIGN1cnJlbnQgYmVhcmluZyBpcyBjbG9zZSBlbm91Z2ggdG8gaXQgKGkuZS4gd2l0aGluIHRoZVxuICAgICAqIGBiZWFyaW5nU25hcGAgdGhyZXNob2xkKS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc25hcFRvTm9ydGgob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5nZXRCZWFyaW5nKCkpIDwgdGhpcy5fYmVhcmluZ1NuYXApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc2V0Tm9ydGgob3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBjdXJyZW50IHBpdGNoICh0aWx0KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMgVGhlIG1hcCdzIGN1cnJlbnQgcGl0Y2gsIG1lYXN1cmVkIGluIGRlZ3JlZXMgYXdheSBmcm9tIHRoZSBwbGFuZSBvZiB0aGUgc2NyZWVuLlxuICAgICAqL1xuICAgIGdldFBpdGNoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5waXRjaDsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwJ3MgcGl0Y2ggKHRpbHQpLiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe3BpdGNoOiBwaXRjaH0pYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHBpdGNoIFRoZSBwaXRjaCB0byBzZXQsIG1lYXN1cmVkIGluIGRlZ3JlZXMgYXdheSBmcm9tIHRoZSBwbGFuZSBvZiB0aGUgc2NyZWVuICgwLTYwKS5cbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIHBpdGNoc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRQaXRjaChwaXRjaDogbnVtYmVyLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5qdW1wVG8oe3BpdGNofSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0ge0xhdExuZ0JvdW5kc0xpa2V9IGJvdW5kcyBDYWxjdWxhdGUgdGhlIGNlbnRlciBmb3IgdGhlc2UgYm91bmRzIGluIHRoZSB2aWV3cG9ydCBhbmQgdXNlXG4gICAgICogICAgICB0aGUgaGlnaGVzdCB6b29tIGxldmVsIHVwIHRvIGFuZCBpbmNsdWRpbmcgYE1hcCNnZXRNYXhab29tKClgIHRoYXQgZml0c1xuICAgICAqICAgICAgaW4gdGhlIHZpZXdwb3J0LiBMYXRMbmdCb3VuZHMgcmVwcmVzZW50IGEgYm94IHRoYXQgaXMgYWx3YXlzIGF4aXMtYWxpZ25lZCB3aXRoIGJlYXJpbmcgMC5cbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgUGFkZGluZ09wdGlvbnN9IFtvcHRpb25zLnBhZGRpbmddIFRoZSBhbW91bnQgb2YgcGFkZGluZyBpbiBwaXhlbHMgdG8gYWRkIHRvIHRoZSBnaXZlbiBib3VuZHMuXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IFtvcHRpb25zLm9mZnNldD1bMCwgMF1dIFRoZSBjZW50ZXIgb2YgdGhlIGdpdmVuIGJvdW5kcyByZWxhdGl2ZSB0byB0aGUgbWFwJ3MgY2VudGVyLCBtZWFzdXJlZCBpbiBwaXhlbHMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFpvb21dIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gYWxsb3cgd2hlbiB0aGUgY2FtZXJhIHdvdWxkIHRyYW5zaXRpb24gdG8gdGhlIHNwZWNpZmllZCBib3VuZHMuXG4gICAgICogQHJldHVybnMge0NhbWVyYU9wdGlvbnMgfCB2b2lkfSBJZiBtYXAgaXMgYWJsZSB0byBmaXQgdG8gcHJvdmlkZWQgYm91bmRzLCByZXR1cm5zIGBDYW1lcmFPcHRpb25zYCB3aXRoXG4gICAgICogICAgICBgY2VudGVyYCwgYHpvb21gLCBhbmQgYGJlYXJpbmdgLiBJZiBtYXAgaXMgdW5hYmxlIHRvIGZpdCwgbWV0aG9kIHdpbGwgd2FybiBhbmQgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBiYm94ID0gW1stNzksIDQzXSwgWy03MywgNDVdXTtcbiAgICAgKiB2YXIgbmV3Q2FtZXJhVHJhbnNmb3JtID0gbWFwLmNhbWVyYUZvckJvdW5kcyhiYm94LCB7XG4gICAgICogICBwYWRkaW5nOiB7dG9wOiAxMCwgYm90dG9tOjI1LCBsZWZ0OiAxNSwgcmlnaHQ6IDV9XG4gICAgICogfSk7XG4gICAgICovXG4gICAgY2FtZXJhRm9yQm91bmRzKGJvdW5kczogTG5nTGF0Qm91bmRzTGlrZSwgb3B0aW9ucz86IENhbWVyYU9wdGlvbnMpOiB2b2lkIHwgQ2FtZXJhT3B0aW9ucyAmIEFuaW1hdGlvbk9wdGlvbnMge1xuICAgICAgICBib3VuZHMgPSBMbmdMYXRCb3VuZHMuY29udmVydChib3VuZHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyhib3VuZHMuZ2V0Tm9ydGhXZXN0KCksIGJvdW5kcy5nZXRTb3V0aEVhc3QoKSwgMCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjZW50ZXIgb2YgdGhlc2UgdHdvIHBvaW50cyBpbiB0aGUgdmlld3BvcnQgYW5kIHVzZVxuICAgICAqIHRoZSBoaWdoZXN0IHpvb20gbGV2ZWwgdXAgdG8gYW5kIGluY2x1ZGluZyBgTWFwI2dldE1heFpvb20oKWAgdGhhdCBmaXRzXG4gICAgICogdGhlIHBvaW50cyBpbiB0aGUgdmlld3BvcnQgYXQgdGhlIHNwZWNpZmllZCBiZWFyaW5nLlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBwMCBGaXJzdCBwb2ludFxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gcDEgU2Vjb25kIHBvaW50XG4gICAgICogQHBhcmFtIGJlYXJpbmcgRGVzaXJlZCBtYXAgYmVhcmluZyBhdCBlbmQgb2YgYW5pbWF0aW9uLCBpbiBkZWdyZWVzXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IFBhZGRpbmdPcHRpb25zfSBbb3B0aW9ucy5wYWRkaW5nXSBUaGUgYW1vdW50IG9mIHBhZGRpbmcgaW4gcGl4ZWxzIHRvIGFkZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfSBbb3B0aW9ucy5vZmZzZXQ9WzAsIDBdXSBUaGUgY2VudGVyIG9mIHRoZSBnaXZlbiBib3VuZHMgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGNlbnRlciwgbWVhc3VyZWQgaW4gcGl4ZWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhab29tXSBUaGUgbWF4aW11bSB6b29tIGxldmVsIHRvIGFsbG93IHdoZW4gdGhlIGNhbWVyYSB3b3VsZCB0cmFuc2l0aW9uIHRvIHRoZSBzcGVjaWZpZWQgYm91bmRzLlxuICAgICAqIEByZXR1cm5zIHtDYW1lcmFPcHRpb25zIHwgdm9pZH0gSWYgbWFwIGlzIGFibGUgdG8gZml0IHRvIHByb3ZpZGVkIGJvdW5kcywgcmV0dXJucyBgQ2FtZXJhT3B0aW9uc2Agd2l0aFxuICAgICAqICAgICAgYGNlbnRlcmAsIGB6b29tYCwgYW5kIGBiZWFyaW5nYC4gSWYgbWFwIGlzIHVuYWJsZSB0byBmaXQsIG1ldGhvZCB3aWxsIHdhcm4gYW5kIHJldHVybiB1bmRlZmluZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwMCA9IFstNzksIDQzXTtcbiAgICAgKiB2YXIgcDEgPSBbLTczLCA0NV07XG4gICAgICogdmFyIGJlYXJpbmcgPSA5MDtcbiAgICAgKiB2YXIgbmV3Q2FtZXJhVHJhbnNmb3JtID0gbWFwLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKHAwLCBwMSwgYmVhcmluZywge1xuICAgICAqICAgcGFkZGluZzoge3RvcDogMTAsIGJvdHRvbToyNSwgbGVmdDogMTUsIHJpZ2h0OiA1fVxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIF9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKHAwOiBMbmdMYXRMaWtlLCBwMTogTG5nTGF0TGlrZSwgYmVhcmluZzogbnVtYmVyLCBvcHRpb25zPzogQ2FtZXJhT3B0aW9ucyk6IHZvaWQgfCBDYW1lcmFPcHRpb25zICYgQW5pbWF0aW9uT3B0aW9ucyB7XG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe1xuICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgbGVmdDogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9mZnNldDogWzAsIDBdLFxuICAgICAgICAgICAgbWF4Wm9vbTogdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbVxuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFkZGluZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBvcHRpb25zLnBhZGRpbmc7XG4gICAgICAgICAgICBvcHRpb25zLnBhZGRpbmcgPSB7XG4gICAgICAgICAgICAgICAgdG9wOiBwLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogcCxcbiAgICAgICAgICAgICAgICByaWdodDogcCxcbiAgICAgICAgICAgICAgICBsZWZ0OiBwXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVlcEVxdWFsKE9iamVjdC5rZXlzKG9wdGlvbnMucGFkZGluZykuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pLCBbXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJ0b3BcIl0pKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgICBcIm9wdGlvbnMucGFkZGluZyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBvciBhbiBPYmplY3Qgd2l0aCBrZXlzICdib3R0b20nLCAnbGVmdCcsICdyaWdodCcsICd0b3AnXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtO1xuXG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoZSB1cHBlciByaWdodCBhbmQgbG93ZXIgbGVmdCBvZiB0aGUgYm94IGRlZmluZWQgYnkgcDAgYW5kIHAxXG4gICAgICAgIC8vIGluIGEgY29vcmRpbmF0ZSBzeXN0ZW0gcm90YXRlIHRvIG1hdGNoIHRoZSBkZXN0aW5hdGlvbiBiZWFyaW5nLlxuICAgICAgICBjb25zdCBwMHdvcmxkID0gdHIucHJvamVjdChMbmdMYXQuY29udmVydChwMCkpO1xuICAgICAgICBjb25zdCBwMXdvcmxkID0gdHIucHJvamVjdChMbmdMYXQuY29udmVydChwMSkpO1xuICAgICAgICBjb25zdCBwMHJvdGF0ZWQgPSBwMHdvcmxkLnJvdGF0ZSgtYmVhcmluZyAqIE1hdGguUEkgLyAxODApO1xuICAgICAgICBjb25zdCBwMXJvdGF0ZWQgPSBwMXdvcmxkLnJvdGF0ZSgtYmVhcmluZyAqIE1hdGguUEkgLyAxODApO1xuXG4gICAgICAgIGNvbnN0IHVwcGVyUmlnaHQgPSBuZXcgUG9pbnQoTWF0aC5tYXgocDByb3RhdGVkLngsIHAxcm90YXRlZC54KSwgTWF0aC5tYXgocDByb3RhdGVkLnksIHAxcm90YXRlZC55KSk7XG4gICAgICAgIGNvbnN0IGxvd2VyTGVmdCA9IG5ldyBQb2ludChNYXRoLm1pbihwMHJvdGF0ZWQueCwgcDFyb3RhdGVkLngpLCBNYXRoLm1pbihwMHJvdGF0ZWQueSwgcDFyb3RhdGVkLnkpKTtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgem9vbTogY29uc2lkZXIgdGhlIG9yaWdpbmFsIGJib3ggYW5kIHBhZGRpbmcuXG4gICAgICAgIGNvbnN0IHNpemUgPSB1cHBlclJpZ2h0LnN1Yihsb3dlckxlZnQpO1xuICAgICAgICBjb25zdCBzY2FsZVggPSAodHIud2lkdGggLSBvcHRpb25zLnBhZGRpbmcubGVmdCAtIG9wdGlvbnMucGFkZGluZy5yaWdodCkgLyBzaXplLng7XG4gICAgICAgIGNvbnN0IHNjYWxlWSA9ICh0ci5oZWlnaHQgLSBvcHRpb25zLnBhZGRpbmcudG9wIC0gb3B0aW9ucy5wYWRkaW5nLmJvdHRvbSkgLyBzaXplLnk7XG5cbiAgICAgICAgaWYgKHNjYWxlWSA8IDAgfHwgc2NhbGVYIDwgMCkge1xuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICAgJ01hcCBjYW5ub3QgZml0IHdpdGhpbiBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLCBwYWRkaW5nLCBhbmQvb3Igb2Zmc2V0LidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6b29tID0gTWF0aC5taW4odHIuc2NhbGVab29tKHRyLnNjYWxlICogTWF0aC5taW4oc2NhbGVYLCBzY2FsZVkpKSwgb3B0aW9ucy5tYXhab29tKTtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgY2VudGVyOiBhcHBseSB0aGUgem9vbSwgdGhlIGNvbmZpZ3VyZWQgb2Zmc2V0LCBhcyB3ZWxsIGFzIG9mZnNldCB0aGF0IGV4aXN0cyBhcyBhIHJlc3VsdCBvZiBwYWRkaW5nLlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBQb2ludC5jb252ZXJ0KG9wdGlvbnMub2Zmc2V0KTtcbiAgICAgICAgY29uc3QgcGFkZGluZ09mZnNldFggPSAob3B0aW9ucy5wYWRkaW5nLmxlZnQgLSBvcHRpb25zLnBhZGRpbmcucmlnaHQpIC8gMjtcbiAgICAgICAgY29uc3QgcGFkZGluZ09mZnNldFkgPSAob3B0aW9ucy5wYWRkaW5nLnRvcCAtIG9wdGlvbnMucGFkZGluZy5ib3R0b20pIC8gMjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0QXRJbml0aWFsWm9vbSA9IG5ldyBQb2ludChvZmZzZXQueCArIHBhZGRpbmdPZmZzZXRYLCBvZmZzZXQueSArIHBhZGRpbmdPZmZzZXRZKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0QXRGaW5hbFpvb20gPSBvZmZzZXRBdEluaXRpYWxab29tLm11bHQodHIuc2NhbGUgLyB0ci56b29tU2NhbGUoem9vbSkpO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlciA9ICB0ci51bnByb2plY3QocDB3b3JsZC5hZGQocDF3b3JsZCkuZGl2KDIpLnN1YihvZmZzZXRBdEZpbmFsWm9vbSkpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjZW50ZXIsXG4gICAgICAgICAgICB6b29tLFxuICAgICAgICAgICAgYmVhcmluZ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMgYW5kIHpvb21zIHRoZSBtYXAgdG8gY29udGFpbiBpdHMgdmlzaWJsZSBhcmVhIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGdlb2dyYXBoaWNhbCBib3VuZHMuXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gcmVzZXQgdGhlIG1hcCdzIGJlYXJpbmcgdG8gMCBpZiBiZWFyaW5nIGlzIG5vbnplcm8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBib3VuZHMgQ2VudGVyIHRoZXNlIGJvdW5kcyBpbiB0aGUgdmlld3BvcnQgYW5kIHVzZSB0aGUgaGlnaGVzdFxuICAgICAqICAgICAgem9vbSBsZXZlbCB1cCB0byBhbmQgaW5jbHVkaW5nIGBNYXAjZ2V0TWF4Wm9vbSgpYCB0aGF0IGZpdHMgdGhlbSBpbiB0aGUgdmlld3BvcnQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHN1cHBvcnRzIGFsbCBwcm9wZXJ0aWVzIGZyb20ge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9IGFuZCB7QGxpbmsgQ2FtZXJhT3B0aW9uc30gaW4gYWRkaXRpb24gdG8gdGhlIGZpZWxkcyBiZWxvdy5cbiAgICAgKiBAcGFyYW0ge251bWJlciB8IFBhZGRpbmdPcHRpb25zfSBbb3B0aW9ucy5wYWRkaW5nXSBUaGUgYW1vdW50IG9mIHBhZGRpbmcgaW4gcGl4ZWxzIHRvIGFkZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGluZWFyPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBtYXAgdHJhbnNpdGlvbnMgdXNpbmdcbiAgICAgKiAgICAge0BsaW5rIE1hcCNlYXNlVG99LiBJZiBgZmFsc2VgLCB0aGUgbWFwIHRyYW5zaXRpb25zIHVzaW5nIHtAbGluayBNYXAjZmx5VG99LiBTZWVcbiAgICAgKiAgICAgdGhvc2UgZnVuY3Rpb25zIGFuZCB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30gZm9yIGluZm9ybWF0aW9uIGFib3V0IG9wdGlvbnMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmVhc2luZ10gQW4gZWFzaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0ZWQgdHJhbnNpdGlvbi4gU2VlIHtAbGluayBBbmltYXRpb25PcHRpb25zfS5cbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0PVswLCAwXV0gVGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gYm91bmRzIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBjZW50ZXIsIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbV0gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBhbGxvdyB3aGVuIHRoZSBtYXAgdmlldyB0cmFuc2l0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW2V2ZW50RGF0YV0gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2Bcblx0ICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYmJveCA9IFtbLTc5LCA0M10sIFstNzMsIDQ1XV07XG4gICAgICogbWFwLmZpdEJvdW5kcyhiYm94LCB7XG4gICAgICogICBwYWRkaW5nOiB7dG9wOiAxMCwgYm90dG9tOjI1LCBsZWZ0OiAxNSwgcmlnaHQ6IDV9XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbRml0IGEgbWFwIHRvIGEgYm91bmRpbmcgYm94XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpdGJvdW5kcy8pXG4gICAgICovXG4gICAgZml0Qm91bmRzKGJvdW5kczogTG5nTGF0Qm91bmRzTGlrZSwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMgJiBDYW1lcmFPcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKFxuICAgICAgICAgICAgdGhpcy5jYW1lcmFGb3JCb3VuZHMoYm91bmRzLCBvcHRpb25zKSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMsIHJvdGF0ZXMgYW5kIHpvb21zIHRoZSBtYXAgdG8gdG8gZml0IHRoZSBib3ggbWFkZSBieSBwb2ludHMgcDAgYW5kIHAxXG4gICAgICogb25jZSB0aGUgbWFwIGlzIHJvdGF0ZWQgdG8gdGhlIHNwZWNpZmllZCBiZWFyaW5nLiBUbyB6b29tIHdpdGhvdXQgcm90YXRpbmcsXG4gICAgICogcGFzcyBpbiB0aGUgY3VycmVudCBtYXAgYmVhcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHAwIEZpcnN0IHBvaW50IG9uIHNjcmVlbiwgaW4gcGl4ZWwgY29vcmRpbmF0ZXNcbiAgICAgKiBAcGFyYW0gcDEgU2Vjb25kIHBvaW50IG9uIHNjcmVlbiwgaW4gcGl4ZWwgY29vcmRpbmF0ZXNcbiAgICAgKiBAcGFyYW0gYmVhcmluZyBEZXNpcmVkIG1hcCBiZWFyaW5nIGF0IGVuZCBvZiBhbmltYXRpb24sIGluIGRlZ3JlZXNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgUGFkZGluZ09wdGlvbnN9IFtvcHRpb25zLnBhZGRpbmddIFRoZSBhbW91bnQgb2YgcGFkZGluZyBpbiBwaXhlbHMgdG8gYWRkIHRvIHRoZSBnaXZlbiBib3VuZHMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5saW5lYXI9ZmFsc2VdIElmIGB0cnVlYCwgdGhlIG1hcCB0cmFuc2l0aW9ucyB1c2luZ1xuICAgICAqICAgICB7QGxpbmsgTWFwI2Vhc2VUb30uIElmIGBmYWxzZWAsIHRoZSBtYXAgdHJhbnNpdGlvbnMgdXNpbmcge0BsaW5rIE1hcCNmbHlUb30uIFNlZVxuICAgICAqICAgICB0aG9zZSBmdW5jdGlvbnMgYW5kIHtAbGluayBBbmltYXRpb25PcHRpb25zfSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgb3B0aW9ucyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZWFzaW5nXSBBbiBlYXNpbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRlZCB0cmFuc2l0aW9uLiBTZWUge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9LlxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfSBbb3B0aW9ucy5vZmZzZXQ9WzAsIDBdXSBUaGUgY2VudGVyIG9mIHRoZSBnaXZlbiBib3VuZHMgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGNlbnRlciwgbWVhc3VyZWQgaW4gcGl4ZWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhab29tXSBUaGUgbWF4aW11bSB6b29tIGxldmVsIHRvIGFsbG93IHdoZW4gdGhlIG1hcCB2aWV3IHRyYW5zaXRpb25zIHRvIHRoZSBzcGVjaWZpZWQgYm91bmRzLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2Bcblx0ICogQGV4YW1wbGVcbiAgICAgKiB2YXIgcDAgPSBbMjIwLCA0MDBdO1xuICAgICAqIHZhciBwMSA9IFs1MDAsIDkwMF07XG4gICAgICogbWFwLmZpdFNjcmVlbkNvb3JkaW5hdGVzKHAwLCBwMSwgbWFwLmdldEJlYXJpbmcoKSwge1xuICAgICAqICAgcGFkZGluZzoge3RvcDogMTAsIGJvdHRvbToyNSwgbGVmdDogMTUsIHJpZ2h0OiA1fVxuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW1VzZWQgYnkgQm94Wm9vbUhhbmRsZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2FwaS8jYm94em9vbWhhbmRsZXIpXG4gICAgICovXG4gICAgZml0U2NyZWVuQ29vcmRpbmF0ZXMocDA6IFBvaW50TGlrZSwgcDE6IFBvaW50TGlrZSwgYmVhcmluZzogbnVtYmVyLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucyAmIENhbWVyYU9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZml0SW50ZXJuYWwoXG4gICAgICAgICAgICB0aGlzLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oUG9pbnQuY29udmVydChwMCkpLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oUG9pbnQuY29udmVydChwMSkpLFxuICAgICAgICAgICAgICAgIGJlYXJpbmcsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICBfZml0SW50ZXJuYWwoY2FsY3VsYXRlZE9wdGlvbnM/OiBDYW1lcmFPcHRpb25zICYgQW5pbWF0aW9uT3B0aW9ucywgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMgJiBDYW1lcmFPcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgLy8gY2FtZXJhRm9yQm91bmRzIHdhcm5zICsgcmV0dXJucyB1bmRlZmluZWQgaWYgdW5hYmxlIHRvIGZpdDpcbiAgICAgICAgaWYgKCFjYWxjdWxhdGVkT3B0aW9ucykgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZChjYWxjdWxhdGVkT3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubGluZWFyID9cbiAgICAgICAgICAgIHRoaXMuZWFzZVRvKG9wdGlvbnMsIGV2ZW50RGF0YSkgOlxuICAgICAgICAgICAgdGhpcy5mbHlUbyhvcHRpb25zLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYW55IGNvbWJpbmF0aW9uIG9mIGNlbnRlciwgem9vbSwgYmVhcmluZywgYW5kIHBpdGNoLCB3aXRob3V0XG4gICAgICogYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi4gVGhlIG1hcCB3aWxsIHJldGFpbiBpdHMgY3VycmVudCB2YWx1ZXMgZm9yIGFueVxuICAgICAqIGRldGFpbHMgbm90IHNwZWNpZmllZCBpbiBgb3B0aW9uc2AuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIHBpdGNoc3RhcnRcbiAgICAgKiBAZmlyZXMgcm90YXRlXG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBwaXRjaFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAZmlyZXMgcGl0Y2hlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBqdW1wVG8ob3B0aW9uczogQ2FtZXJhT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmFuc2Zvcm07XG4gICAgICAgIGxldCB6b29tQ2hhbmdlZCA9IGZhbHNlLFxuICAgICAgICAgICAgYmVhcmluZ0NoYW5nZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIHBpdGNoQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICgnem9vbScgaW4gb3B0aW9ucyAmJiB0ci56b29tICE9PSArb3B0aW9ucy56b29tKSB7XG4gICAgICAgICAgICB6b29tQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB0ci56b29tID0gK29wdGlvbnMuem9vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNlbnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ci5jZW50ZXIgPSBMbmdMYXQuY29udmVydChvcHRpb25zLmNlbnRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2JlYXJpbmcnIGluIG9wdGlvbnMgJiYgdHIuYmVhcmluZyAhPT0gK29wdGlvbnMuYmVhcmluZykge1xuICAgICAgICAgICAgYmVhcmluZ0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgdHIuYmVhcmluZyA9ICtvcHRpb25zLmJlYXJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3BpdGNoJyBpbiBvcHRpb25zICYmIHRyLnBpdGNoICE9PSArb3B0aW9ucy5waXRjaCkge1xuICAgICAgICAgICAgcGl0Y2hDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyLnBpdGNoID0gK29wdGlvbnMucGl0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3Zlc3RhcnQnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdtb3ZlJywgZXZlbnREYXRhKSk7XG5cbiAgICAgICAgaWYgKHpvb21DaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tc3RhcnQnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnem9vbScsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCd6b29tZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmVhcmluZ0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZXN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZScsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVlbmQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwaXRjaENoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3BpdGNoc3RhcnQnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgncGl0Y2gnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgncGl0Y2hlbmQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3ZlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbnkgY29tYmluYXRpb24gb2YgY2VudGVyLCB6b29tLCBiZWFyaW5nLCBhbmQgcGl0Y2gsIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvblxuICAgICAqIGJldHdlZW4gb2xkIGFuZCBuZXcgdmFsdWVzLiBUaGUgbWFwIHdpbGwgcmV0YWluIGl0cyBjdXJyZW50IHZhbHVlcyBmb3IgYW55XG4gICAgICogZGV0YWlscyBub3Qgc3BlY2lmaWVkIGluIGBvcHRpb25zYC5cbiAgICAgKlxuICAgICAqIE5vdGU6IFRoZSB0cmFuc2l0aW9uIHdpbGwgaGFwcGVuIGluc3RhbnRseSBpZiB0aGUgdXNlciBoYXMgZW5hYmxlZFxuICAgICAqIHRoZSBgcmVkdWNlZCBtb3Rpb25gIGFjY2VzaWJpbGl0eSBmZWF0dXJlIGVuYWJsZWQgaW4gdGhlaXIgb3BlcmF0aW5nIHN5c3RlbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBkZXNjcmliaW5nIHRoZSBkZXN0aW5hdGlvbiBhbmQgYW5pbWF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLlxuICAgICAqICAgICAgICAgICAgQWNjZXB0cyB7QGxpbmsgQ2FtZXJhT3B0aW9uc30gYW5kIHtAbGluayBBbmltYXRpb25PcHRpb25zfS5cbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgcGl0Y2hzdGFydFxuICAgICAqIEBmaXJlcyByb3RhdGVcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIHBpdGNoXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEBmaXJlcyBwaXRjaGVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBzZWUgW05hdmlnYXRlIHRoZSBtYXAgd2l0aCBnYW1lLWxpa2UgY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2FtZS1jb250cm9scy8pXG4gICAgICovXG4gICAgZWFzZVRvKG9wdGlvbnM6IENhbWVyYU9wdGlvbnMgJiBBbmltYXRpb25PcHRpb25zICYge2RlbGF5RW5kRXZlbnRzPzogbnVtYmVyfSwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe1xuICAgICAgICAgICAgb2Zmc2V0OiBbMCwgMF0sXG4gICAgICAgICAgICBkdXJhdGlvbjogNTAwLFxuICAgICAgICAgICAgZWFzaW5nOiBkZWZhdWx0RWFzaW5nXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlIHx8IGJyb3dzZXIucHJlZmVyc1JlZHVjZWRNb3Rpb24pIG9wdGlvbnMuZHVyYXRpb24gPSAwO1xuXG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICBzdGFydFpvb20gPSB0aGlzLmdldFpvb20oKSxcbiAgICAgICAgICAgIHN0YXJ0QmVhcmluZyA9IHRoaXMuZ2V0QmVhcmluZygpLFxuICAgICAgICAgICAgc3RhcnRQaXRjaCA9IHRoaXMuZ2V0UGl0Y2goKSxcblxuICAgICAgICAgICAgem9vbSA9ICd6b29tJyBpbiBvcHRpb25zID8gK29wdGlvbnMuem9vbSA6IHN0YXJ0Wm9vbSxcbiAgICAgICAgICAgIGJlYXJpbmcgPSAnYmVhcmluZycgaW4gb3B0aW9ucyA/IHRoaXMuX25vcm1hbGl6ZUJlYXJpbmcob3B0aW9ucy5iZWFyaW5nLCBzdGFydEJlYXJpbmcpIDogc3RhcnRCZWFyaW5nLFxuICAgICAgICAgICAgcGl0Y2ggPSAncGl0Y2gnIGluIG9wdGlvbnMgPyArb3B0aW9ucy5waXRjaCA6IHN0YXJ0UGl0Y2g7XG5cbiAgICAgICAgY29uc3QgcG9pbnRBdE9mZnNldCA9IHRyLmNlbnRlclBvaW50LmFkZChQb2ludC5jb252ZXJ0KG9wdGlvbnMub2Zmc2V0KSk7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uQXRPZmZzZXQgPSB0ci5wb2ludExvY2F0aW9uKHBvaW50QXRPZmZzZXQpO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBMbmdMYXQuY29udmVydChvcHRpb25zLmNlbnRlciB8fCBsb2NhdGlvbkF0T2Zmc2V0KTtcbiAgICAgICAgdGhpcy5fbm9ybWFsaXplQ2VudGVyKGNlbnRlcik7XG5cbiAgICAgICAgY29uc3QgZnJvbSA9IHRyLnByb2plY3QobG9jYXRpb25BdE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdHIucHJvamVjdChjZW50ZXIpLnN1Yihmcm9tKTtcbiAgICAgICAgY29uc3QgZmluYWxTY2FsZSA9IHRyLnpvb21TY2FsZSh6b29tIC0gc3RhcnRab29tKTtcblxuICAgICAgICBsZXQgYXJvdW5kLCBhcm91bmRQb2ludDtcblxuICAgICAgICBpZiAob3B0aW9ucy5hcm91bmQpIHtcbiAgICAgICAgICAgIGFyb3VuZCA9IExuZ0xhdC5jb252ZXJ0KG9wdGlvbnMuYXJvdW5kKTtcbiAgICAgICAgICAgIGFyb3VuZFBvaW50ID0gdHIubG9jYXRpb25Qb2ludChhcm91bmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fem9vbWluZyA9ICh6b29tICE9PSBzdGFydFpvb20pO1xuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IChzdGFydEJlYXJpbmcgIT09IGJlYXJpbmcpO1xuICAgICAgICB0aGlzLl9waXRjaGluZyA9IChwaXRjaCAhPT0gc3RhcnRQaXRjaCk7XG5cbiAgICAgICAgdGhpcy5fcHJlcGFyZUVhc2UoZXZlbnREYXRhLCBvcHRpb25zLm5vTW92ZVN0YXJ0KTtcblxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fZWFzZUVuZFRpbWVvdXRJRCk7XG5cbiAgICAgICAgdGhpcy5fZWFzZSgoaykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3pvb21pbmcpIHtcbiAgICAgICAgICAgICAgICB0ci56b29tID0gaW50ZXJwb2xhdGUoc3RhcnRab29tLCB6b29tLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9yb3RhdGluZykge1xuICAgICAgICAgICAgICAgIHRyLmJlYXJpbmcgPSBpbnRlcnBvbGF0ZShzdGFydEJlYXJpbmcsIGJlYXJpbmcsIGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgdHIucGl0Y2ggPSBpbnRlcnBvbGF0ZShzdGFydFBpdGNoLCBwaXRjaCwgayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhcm91bmQpIHtcbiAgICAgICAgICAgICAgICB0ci5zZXRMb2NhdGlvbkF0UG9pbnQoYXJvdW5kLCBhcm91bmRQb2ludCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gdHIuem9vbVNjYWxlKHRyLnpvb20gLSBzdGFydFpvb20pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2UgPSB6b29tID4gc3RhcnRab29tID9cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oMiwgZmluYWxTY2FsZSkgOlxuICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLjUsIGZpbmFsU2NhbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwZWVkdXAgPSBNYXRoLnBvdyhiYXNlLCAxIC0gayk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gdHIudW5wcm9qZWN0KGZyb20uYWRkKGRlbHRhLm11bHQoayAqIHNwZWVkdXApKS5tdWx0KHNjYWxlKSk7XG4gICAgICAgICAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KHRyLnJlbmRlcldvcmxkQ29waWVzID8gbmV3Q2VudGVyLndyYXAoKSA6IG5ld0NlbnRlciwgcG9pbnRBdE9mZnNldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpcmVNb3ZlRXZlbnRzKGV2ZW50RGF0YSk7XG5cbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVsYXlFbmRFdmVudHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXNlRW5kVGltZW91dElEID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9hZnRlckVhc2UoZXZlbnREYXRhKSwgb3B0aW9ucy5kZWxheUVuZEV2ZW50cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FmdGVyRWFzZShldmVudERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfcHJlcGFyZUVhc2UoZXZlbnREYXRhPzogT2JqZWN0LCBub01vdmVTdGFydDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9tb3ZpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICghbm9Nb3ZlU3RhcnQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmVzdGFydCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl96b29taW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tc3RhcnQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZXN0YXJ0JywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3BpdGNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdwaXRjaHN0YXJ0JywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZmlyZU1vdmVFdmVudHMoZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCBldmVudERhdGEpKTtcbiAgICAgICAgaWYgKHRoaXMuX3pvb21pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3pvb20nLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZScsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9waXRjaGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncGl0Y2gnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hZnRlckVhc2UoZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHdhc1pvb21pbmcgPSB0aGlzLl96b29taW5nO1xuICAgICAgICBjb25zdCB3YXNSb3RhdGluZyA9IHRoaXMuX3JvdGF0aW5nO1xuICAgICAgICBjb25zdCB3YXNQaXRjaGluZyA9IHRoaXMuX3BpdGNoaW5nO1xuICAgICAgICB0aGlzLl9tb3ZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fem9vbWluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9waXRjaGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh3YXNab29taW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhc1JvdGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVlbmQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2FzUGl0Y2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3BpdGNoZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYW55IGNvbWJpbmF0aW9uIG9mIGNlbnRlciwgem9vbSwgYmVhcmluZywgYW5kIHBpdGNoLCBhbmltYXRpbmcgdGhlIHRyYW5zaXRpb24gYWxvbmcgYSBjdXJ2ZSB0aGF0XG4gICAgICogZXZva2VzIGZsaWdodC4gVGhlIGFuaW1hdGlvbiBzZWFtbGVzc2x5IGluY29ycG9yYXRlcyB6b29taW5nIGFuZCBwYW5uaW5nIHRvIGhlbHBcbiAgICAgKiB0aGUgdXNlciBtYWludGFpbiBoZXIgYmVhcmluZ3MgZXZlbiBhZnRlciB0cmF2ZXJzaW5nIGEgZ3JlYXQgZGlzdGFuY2UuXG4gICAgICpcbiAgICAgKiBOb3RlOiBUaGUgYW5pbWF0aW9uIHdpbGwgYmUgc2tpcHBlZCwgYW5kIHRoaXMgd2lsbCBiZWhhdmUgZXF1aXZhbGVudGx5IHRvIGBqdW1wVG9gXG4gICAgICogaWYgdGhlIHVzZXIgaGFzIHRoZSBgcmVkdWNlZCBtb3Rpb25gIGFjY2VzaWJpbGl0eSBmZWF0dXJlIGVuYWJsZWQgaW4gdGhlaXIgb3BlcmF0aW5nIHN5c3RlbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBkZXNjcmliaW5nIHRoZSBkZXN0aW5hdGlvbiBhbmQgYW5pbWF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLlxuICAgICAqICAgICBBY2NlcHRzIHtAbGluayBDYW1lcmFPcHRpb25zfSwge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9LFxuICAgICAqICAgICBhbmQgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmN1cnZlPTEuNDJdIFRoZSB6b29taW5nIFwiY3VydmVcIiB0aGF0IHdpbGwgb2NjdXIgYWxvbmcgdGhlXG4gICAgICogICAgIGZsaWdodCBwYXRoLiBBIGhpZ2ggdmFsdWUgbWF4aW1pemVzIHpvb21pbmcgZm9yIGFuIGV4YWdnZXJhdGVkIGFuaW1hdGlvbiwgd2hpbGUgYSBsb3dcbiAgICAgKiAgICAgdmFsdWUgbWluaW1pemVzIHpvb21pbmcgZm9yIGFuIGVmZmVjdCBjbG9zZXIgdG8ge0BsaW5rIE1hcCNlYXNlVG99LiAxLjQyIGlzIHRoZSBhdmVyYWdlXG4gICAgICogICAgIHZhbHVlIHNlbGVjdGVkIGJ5IHBhcnRpY2lwYW50cyBpbiB0aGUgdXNlciBzdHVkeSBkaXNjdXNzZWQgaW5cbiAgICAgKiAgICAgW3ZhbiBXaWprICgyMDAzKV0oaHR0cHM6Ly93d3cud2luLnR1ZS5ubC9+dmFud2lqay96b29tcGFuLnBkZikuIEEgdmFsdWUgb2ZcbiAgICAgKiAgICAgYE1hdGgucG93KDYsIDAuMjUpYCB3b3VsZCBiZSBlcXVpdmFsZW50IHRvIHRoZSByb290IG1lYW4gc3F1YXJlZCBhdmVyYWdlIHZlbG9jaXR5LiBBXG4gICAgICogICAgIHZhbHVlIG9mIDEgd291bGQgcHJvZHVjZSBhIGNpcmN1bGFyIG1vdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluWm9vbV0gVGhlIHplcm8tYmFzZWQgem9vbSBsZXZlbCBhdCB0aGUgcGVhayBvZiB0aGUgZmxpZ2h0IHBhdGguIElmXG4gICAgICogICAgIGBvcHRpb25zLmN1cnZlYCBpcyBzcGVjaWZpZWQsIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNwZWVkPTEuMl0gVGhlIGF2ZXJhZ2Ugc3BlZWQgb2YgdGhlIGFuaW1hdGlvbiBkZWZpbmVkIGluIHJlbGF0aW9uIHRvXG4gICAgICogICAgIGBvcHRpb25zLmN1cnZlYC4gQSBzcGVlZCBvZiAxLjIgbWVhbnMgdGhhdCB0aGUgbWFwIGFwcGVhcnMgdG8gbW92ZSBhbG9uZyB0aGUgZmxpZ2h0IHBhdGhcbiAgICAgKiAgICAgYnkgMS4yIHRpbWVzIGBvcHRpb25zLmN1cnZlYCBzY3JlZW5mdWxzIGV2ZXJ5IHNlY29uZC4gQSBfc2NyZWVuZnVsXyBpcyB0aGUgbWFwJ3MgdmlzaWJsZSBzcGFuLlxuICAgICAqICAgICBJdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgZml4ZWQgcGh5c2ljYWwgZGlzdGFuY2UsIGJ1dCB2YXJpZXMgYnkgem9vbSBsZXZlbC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2NyZWVuU3BlZWRdIFRoZSBhdmVyYWdlIHNwZWVkIG9mIHRoZSBhbmltYXRpb24gbWVhc3VyZWQgaW4gc2NyZWVuZnVsc1xuICAgICAqICAgICBwZXIgc2Vjb25kLCBhc3N1bWluZyBhIGxpbmVhciB0aW1pbmcgY3VydmUuIElmIGBvcHRpb25zLnNwZWVkYCBpcyBzcGVjaWZpZWQsIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heER1cmF0aW9uXSBUaGUgYW5pbWF0aW9uJ3MgbWF4aW11bSBkdXJhdGlvbiwgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzLlxuICAgICAqICAgICBJZiBkdXJhdGlvbiBleGNlZWRzIG1heGltdW0gZHVyYXRpb24sIGl0IHJlc2V0cyB0byAwLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBwaXRjaHN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyByb3RhdGVcbiAgICAgKiBAZmlyZXMgcGl0Y2hcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQGZpcmVzIHBpdGNoZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBmbHkgd2l0aCBkZWZhdWx0IG9wdGlvbnMgdG8gbnVsbCBpc2xhbmRcbiAgICAgKiBtYXAuZmx5VG8oe2NlbnRlcjogWzAsIDBdLCB6b29tOiA5fSk7XG4gICAgICogLy8gdXNpbmcgZmx5VG8gb3B0aW9uc1xuICAgICAqIG1hcC5mbHlUbyh7XG4gICAgICogICBjZW50ZXI6IFswLCAwXSxcbiAgICAgKiAgIHpvb206IDksXG4gICAgICogICBzcGVlZDogMC4yLFxuICAgICAqICAgY3VydmU6IDEsXG4gICAgICogICBlYXNpbmcodCkge1xuICAgICAqICAgICByZXR1cm4gdDtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtGbHkgdG8gYSBsb2NhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9mbHl0by8pXG4gICAgICogQHNlZSBbU2xvd2x5IGZseSB0byBhIGxvY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZseXRvLW9wdGlvbnMvKVxuICAgICAqIEBzZWUgW0ZseSB0byBhIGxvY2F0aW9uIGJhc2VkIG9uIHNjcm9sbCBwb3NpdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9zY3JvbGwtZmx5LXRvLylcbiAgICAgKi9cbiAgICBmbHlUbyhvcHRpb25zOiBPYmplY3QsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8ganVtcFRvIGlmIHVzZXIgaGFzIHNldCBwcmVmZXJzLXJlZHVjZWQtbW90aW9uXG4gICAgICAgIGlmIChicm93c2VyLnByZWZlcnNSZWR1Y2VkTW90aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBjb2VyY2VkT3B0aW9ucyA9IChwaWNrKG9wdGlvbnMsIFsnY2VudGVyJywgJ3pvb20nLCAnYmVhcmluZycsICdwaXRjaCcsICdhcm91bmQnXSk6IENhbWVyYU9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuanVtcFRvKGNvZXJjZWRPcHRpb25zLCBldmVudERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcyBtZXRob2QgaW1wbGVtZW50cyBhbiDDosKAwpxvcHRpbWFsIHBhdGjDosKAwp0gYW5pbWF0aW9uLCBhcyBkZXRhaWxlZCBpbjpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gVmFuIFdpamssIEphcmtlIEouOyBOdWlqLCBXaW0gQS4gQS4gw6LCgMKcU21vb3RoIGFuZCBlZmZpY2llbnQgem9vbWluZyBhbmQgcGFubmluZy7DosKAwp0gSU5GT1ZJU1xuICAgICAgICAvLyAgIMOiwoDCmTAzLiBwcC4gMTXDosKAwpMyMi4gPGh0dHBzOi8vd3d3Lndpbi50dWUubmwvfnZhbndpamsvem9vbXBhbi5wZGYjcGFnZT01Pi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlcmUgYXBwbGljYWJsZSwgbG9jYWwgdmFyaWFibGUgZG9jdW1lbnRhdGlvbiBiZWdpbnMgd2l0aCB0aGUgYXNzb2NpYXRlZCB2YXJpYWJsZSBvclxuICAgICAgICAvLyBmdW5jdGlvbiBpbiB2YW4gV2lqayAoMjAwMykuXG5cbiAgICAgICAgdGhpcy5zdG9wKCk7XG5cbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7XG4gICAgICAgICAgICBvZmZzZXQ6IFswLCAwXSxcbiAgICAgICAgICAgIHNwZWVkOiAxLjIsXG4gICAgICAgICAgICBjdXJ2ZTogMS40MixcbiAgICAgICAgICAgIGVhc2luZzogZGVmYXVsdEVhc2luZ1xuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtLFxuICAgICAgICAgICAgc3RhcnRab29tID0gdGhpcy5nZXRab29tKCksXG4gICAgICAgICAgICBzdGFydEJlYXJpbmcgPSB0aGlzLmdldEJlYXJpbmcoKSxcbiAgICAgICAgICAgIHN0YXJ0UGl0Y2ggPSB0aGlzLmdldFBpdGNoKCk7XG5cbiAgICAgICAgY29uc3Qgem9vbSA9ICd6b29tJyBpbiBvcHRpb25zID8gY2xhbXAoK29wdGlvbnMuem9vbSwgdHIubWluWm9vbSwgdHIubWF4Wm9vbSkgOiBzdGFydFpvb207XG4gICAgICAgIGNvbnN0IGJlYXJpbmcgPSAnYmVhcmluZycgaW4gb3B0aW9ucyA/IHRoaXMuX25vcm1hbGl6ZUJlYXJpbmcob3B0aW9ucy5iZWFyaW5nLCBzdGFydEJlYXJpbmcpIDogc3RhcnRCZWFyaW5nO1xuICAgICAgICBjb25zdCBwaXRjaCA9ICdwaXRjaCcgaW4gb3B0aW9ucyA/ICtvcHRpb25zLnBpdGNoIDogc3RhcnRQaXRjaDtcblxuICAgICAgICBjb25zdCBzY2FsZSA9IHRyLnpvb21TY2FsZSh6b29tIC0gc3RhcnRab29tKTtcbiAgICAgICAgY29uc3QgcG9pbnRBdE9mZnNldCA9IHRyLmNlbnRlclBvaW50LmFkZChQb2ludC5jb252ZXJ0KG9wdGlvbnMub2Zmc2V0KSk7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uQXRPZmZzZXQgPSB0ci5wb2ludExvY2F0aW9uKHBvaW50QXRPZmZzZXQpO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBMbmdMYXQuY29udmVydChvcHRpb25zLmNlbnRlciB8fCBsb2NhdGlvbkF0T2Zmc2V0KTtcbiAgICAgICAgdGhpcy5fbm9ybWFsaXplQ2VudGVyKGNlbnRlcik7XG5cbiAgICAgICAgY29uc3QgZnJvbSA9IHRyLnByb2plY3QobG9jYXRpb25BdE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdHIucHJvamVjdChjZW50ZXIpLnN1Yihmcm9tKTtcblxuICAgICAgICBsZXQgcmhvID0gb3B0aW9ucy5jdXJ2ZTtcblxuICAgICAgICAvLyB3w6LCgsKAOiBJbml0aWFsIHZpc2libGUgc3BhbiwgbWVhc3VyZWQgaW4gcGl4ZWxzIGF0IHRoZSBpbml0aWFsIHNjYWxlLlxuICAgICAgICBjb25zdCB3MCA9IE1hdGgubWF4KHRyLndpZHRoLCB0ci5oZWlnaHQpLFxuICAgICAgICAgICAgLy8gd8OiwoLCgTogRmluYWwgdmlzaWJsZSBzcGFuLCBtZWFzdXJlZCBpbiBwaXhlbHMgd2l0aCByZXNwZWN0IHRvIHRoZSBpbml0aWFsIHNjYWxlLlxuICAgICAgICAgICAgdzEgPSB3MCAvIHNjYWxlLFxuICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIHRoZSBmbGlnaHQgcGF0aCBhcyBwcm9qZWN0ZWQgb250byB0aGUgZ3JvdW5kIHBsYW5lLCBtZWFzdXJlZCBpbiBwaXhlbHMgZnJvbVxuICAgICAgICAgICAgLy8gdGhlIHdvcmxkIGltYWdlIG9yaWdpbiBhdCB0aGUgaW5pdGlhbCBzY2FsZS5cbiAgICAgICAgICAgIHUxID0gZGVsdGEubWFnKCk7XG5cbiAgICAgICAgaWYgKCdtaW5ab29tJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5ab29tID0gY2xhbXAoTWF0aC5taW4ob3B0aW9ucy5taW5ab29tLCBzdGFydFpvb20sIHpvb20pLCB0ci5taW5ab29tLCB0ci5tYXhab29tKTtcbiAgICAgICAgICAgIC8vIHc8c3ViPm08L3N1Yj46IE1heGltdW0gdmlzaWJsZSBzcGFuLCBtZWFzdXJlZCBpbiBwaXhlbHMgd2l0aCByZXNwZWN0IHRvIHRoZSBpbml0aWFsXG4gICAgICAgICAgICAvLyBzY2FsZS5cbiAgICAgICAgICAgIGNvbnN0IHdNYXggPSB3MCAvIHRyLnpvb21TY2FsZShtaW5ab29tIC0gc3RhcnRab29tKTtcbiAgICAgICAgICAgIHJobyA9IE1hdGguc3FydCh3TWF4IC8gdTEgKiAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIMOPwoHDgsKyXG4gICAgICAgIGNvbnN0IHJobzIgPSByaG8gKiByaG87XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHLDocK1wqI6IFJldHVybnMgdGhlIHpvb20tb3V0IGZhY3RvciBhdCBvbmUgZW5kIG9mIHRoZSBhbmltYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBpIDAgZm9yIHRoZSBhc2NlbnQgb3IgMSBmb3IgdGhlIGRlc2NlbnQuXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiByKGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodzEgKiB3MSAtIHcwICogdzAgKyAoaSA/IC0xIDogMSkgKiByaG8yICogcmhvMiAqIHUxICogdTEpIC8gKDIgKiAoaSA/IHcxIDogdzApICogcmhvMiAqIHUxKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmxvZyhNYXRoLnNxcnQoYiAqIGIgKyAxKSAtIGIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2luaChuKSB7IHJldHVybiAoTWF0aC5leHAobikgLSBNYXRoLmV4cCgtbikpIC8gMjsgfVxuICAgICAgICBmdW5jdGlvbiBjb3NoKG4pIHsgcmV0dXJuIChNYXRoLmV4cChuKSArIE1hdGguZXhwKC1uKSkgLyAyOyB9XG4gICAgICAgIGZ1bmN0aW9uIHRhbmgobikgeyByZXR1cm4gc2luaChuKSAvIGNvc2gobik7IH1cblxuICAgICAgICAvLyByw6LCgsKAOiBab29tLW91dCBmYWN0b3IgZHVyaW5nIGFzY2VudC5cbiAgICAgICAgY29uc3QgcjAgPSByKDApO1xuXG4gICAgICAgIC8vIHcocyk6IFJldHVybnMgdGhlIHZpc2libGUgc3BhbiBvbiB0aGUgZ3JvdW5kLCBtZWFzdXJlZCBpbiBwaXhlbHMgd2l0aCByZXNwZWN0IHRvIHRoZVxuICAgICAgICAvLyBpbml0aWFsIHNjYWxlLiBBc3N1bWVzIGFuIGFuZ3VsYXIgZmllbGQgb2YgdmlldyBvZiAyIGFyY3RhbiDDgsK9IMOiwonCiCA1M8OCwrAuXG4gICAgICAgIGxldCB3OiAobnVtYmVyKSA9PiBudW1iZXIgPSBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgcmV0dXJuIChjb3NoKHIwKSAvIGNvc2gocjAgKyByaG8gKiBzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdShzKTogUmV0dXJucyB0aGUgZGlzdGFuY2UgYWxvbmcgdGhlIGZsaWdodCBwYXRoIGFzIHByb2plY3RlZCBvbnRvIHRoZSBncm91bmQgcGxhbmUsXG4gICAgICAgIC8vIG1lYXN1cmVkIGluIHBpeGVscyBmcm9tIHRoZSB3b3JsZCBpbWFnZSBvcmlnaW4gYXQgdGhlIGluaXRpYWwgc2NhbGUuXG4gICAgICAgIGxldCB1OiAobnVtYmVyKSA9PiBudW1iZXIgPSBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgcmV0dXJuIHcwICogKChjb3NoKHIwKSAqIHRhbmgocjAgKyByaG8gKiBzKSAtIHNpbmgocjApKSAvIHJobzIpIC8gdTE7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUzogVG90YWwgbGVuZ3RoIG9mIHRoZSBmbGlnaHQgcGF0aCwgbWVhc3VyZWQgaW4gw4/CgS1zY3JlZW5mdWxzLlxuICAgICAgICBsZXQgUyA9IChyKDEpIC0gcjApIC8gcmhvO1xuXG4gICAgICAgIC8vIFdoZW4gdcOiwoLCgCA9IHXDosKCwoEsIHRoZSBvcHRpbWFsIHBhdGggZG9lc27DosKAwpl0IHJlcXVpcmUgYm90aCBhc2NlbnQgYW5kIGRlc2NlbnQuXG4gICAgICAgIGlmIChNYXRoLmFicyh1MSkgPCAwLjAwMDAwMSB8fCAhaXNGaW5pdGUoUykpIHtcbiAgICAgICAgICAgIC8vIFBlcmZvcm0gYSBtb3JlIG9yIGxlc3MgaW5zdGFudGFuZW91cyB0cmFuc2l0aW9uIGlmIHRoZSBwYXRoIGlzIHRvbyBzaG9ydC5cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh3MCAtIHcxKSA8IDAuMDAwMDAxKSByZXR1cm4gdGhpcy5lYXNlVG8ob3B0aW9ucywgZXZlbnREYXRhKTtcblxuICAgICAgICAgICAgY29uc3QgayA9IHcxIDwgdzAgPyAtMSA6IDE7XG4gICAgICAgICAgICBTID0gTWF0aC5hYnMoTWF0aC5sb2codzEgLyB3MCkpIC8gcmhvO1xuXG4gICAgICAgICAgICB1ID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuICAgICAgICAgICAgdyA9IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIE1hdGguZXhwKGsgKiByaG8gKiBzKTsgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnZHVyYXRpb24nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZHVyYXRpb24gPSArb3B0aW9ucy5kdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFYgPSAnc2NyZWVuU3BlZWQnIGluIG9wdGlvbnMgPyArb3B0aW9ucy5zY3JlZW5TcGVlZCAvIHJobyA6ICtvcHRpb25zLnNwZWVkO1xuICAgICAgICAgICAgb3B0aW9ucy5kdXJhdGlvbiA9IDEwMDAgKiBTIC8gVjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm1heER1cmF0aW9uICYmIG9wdGlvbnMuZHVyYXRpb24gPiBvcHRpb25zLm1heER1cmF0aW9uKSB7XG4gICAgICAgICAgICBvcHRpb25zLmR1cmF0aW9uID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3pvb21pbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IChzdGFydEJlYXJpbmcgIT09IGJlYXJpbmcpO1xuICAgICAgICB0aGlzLl9waXRjaGluZyA9IChwaXRjaCAhPT0gc3RhcnRQaXRjaCk7XG5cbiAgICAgICAgdGhpcy5fcHJlcGFyZUVhc2UoZXZlbnREYXRhLCBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5fZWFzZSgoaykgPT4ge1xuICAgICAgICAgICAgLy8gczogVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGFsb25nIHRoZSBmbGlnaHQgcGF0aCwgbWVhc3VyZWQgaW4gw4/CgS1zY3JlZW5mdWxzLlxuICAgICAgICAgICAgY29uc3QgcyA9IGsgKiBTO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSAxIC8gdyhzKTtcbiAgICAgICAgICAgIHRyLnpvb20gPSBrID09PSAxID8gem9vbSA6IHN0YXJ0Wm9vbSArIHRyLnNjYWxlWm9vbShzY2FsZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9yb3RhdGluZykge1xuICAgICAgICAgICAgICAgIHRyLmJlYXJpbmcgPSBpbnRlcnBvbGF0ZShzdGFydEJlYXJpbmcsIGJlYXJpbmcsIGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgdHIucGl0Y2ggPSBpbnRlcnBvbGF0ZShzdGFydFBpdGNoLCBwaXRjaCwgayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IGsgPT09IDEgPyBjZW50ZXIgOiB0ci51bnByb2plY3QoZnJvbS5hZGQoZGVsdGEubXVsdCh1KHMpKSkubXVsdChzY2FsZSkpO1xuICAgICAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KHRyLnJlbmRlcldvcmxkQ29waWVzID8gbmV3Q2VudGVyLndyYXAoKSA6IG5ld0NlbnRlciwgcG9pbnRBdE9mZnNldCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpcmVNb3ZlRXZlbnRzKGV2ZW50RGF0YSk7XG5cbiAgICAgICAgfSwgKCkgPT4gdGhpcy5fYWZ0ZXJFYXNlKGV2ZW50RGF0YSksIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlzRWFzaW5nKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lYXNlRnJhbWVJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9wcyBhbnkgYW5pbWF0ZWQgdHJhbnNpdGlvbiB1bmRlcndheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc3RvcCgpOiB0aGlzIHtcbiAgICAgICAgaWYgKHRoaXMuX2Vhc2VGcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9lYXNlRnJhbWVJZCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fZWFzZUZyYW1lSWQ7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb25FYXNlRnJhbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fb25FYXNlRW5kKSB7XG4gICAgICAgICAgICAvLyBUaGUgX29uRWFzZUVuZCBmdW5jdGlvbiBtaWdodCBlbWl0IGV2ZW50cyB3aGljaCB0cmlnZ2VyIG5ld1xuICAgICAgICAgICAgLy8gYW5pbWF0aW9uLCB3aGljaCBzZXRzIGEgbmV3IF9vbkVhc2VFbmQuIEVuc3VyZSB3ZSBkb24ndCBkZWxldGVcbiAgICAgICAgICAgIC8vIGl0IHVuaW50ZW50aW9uYWxseS5cbiAgICAgICAgICAgIGNvbnN0IG9uRWFzZUVuZCA9IHRoaXMuX29uRWFzZUVuZDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vbkVhc2VFbmQ7XG4gICAgICAgICAgICBvbkVhc2VFbmQuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfZWFzZShmcmFtZTogKG51bWJlcikgPT4gdm9pZCxcbiAgICAgICAgICBmaW5pc2g6ICgpID0+IHZvaWQsXG4gICAgICAgICAgb3B0aW9uczoge2FuaW1hdGU6IGJvb2xlYW4sIGR1cmF0aW9uOiBudW1iZXIsIGVhc2luZzogKG51bWJlcikgPT4gbnVtYmVyfSkge1xuICAgICAgICBpZiAob3B0aW9ucy5hbmltYXRlID09PSBmYWxzZSB8fCBvcHRpb25zLmR1cmF0aW9uID09PSAwKSB7XG4gICAgICAgICAgICBmcmFtZSgxKTtcbiAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZWFzZVN0YXJ0ID0gYnJvd3Nlci5ub3coKTtcbiAgICAgICAgICAgIHRoaXMuX2Vhc2VPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMuX29uRWFzZUZyYW1lID0gZnJhbWU7XG4gICAgICAgICAgICB0aGlzLl9vbkVhc2VFbmQgPSBmaW5pc2g7XG4gICAgICAgICAgICB0aGlzLl9lYXNlRnJhbWVJZCA9IHRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGxiYWNrIGZvciBtYXAuX3JlcXVlc3RSZW5kZXJGcmFtZVxuICAgIF9yZW5kZXJGcmFtZUNhbGxiYWNrKCkge1xuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oKGJyb3dzZXIubm93KCkgLSB0aGlzLl9lYXNlU3RhcnQpIC8gdGhpcy5fZWFzZU9wdGlvbnMuZHVyYXRpb24sIDEpO1xuICAgICAgICB0aGlzLl9vbkVhc2VGcmFtZSh0aGlzLl9lYXNlT3B0aW9ucy5lYXNpbmcodCkpO1xuICAgICAgICBpZiAodCA8IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vhc2VGcmFtZUlkID0gdGhpcy5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGJlYXJpbmcgc28gdGhhdCBpdCdzIG51bWVyaWNhbGx5IGNsb3NlIHRvIHRoZSBjdXJyZW50IG9uZSBzbyB0aGF0IGl0IGludGVycG9sYXRlcyBwcm9wZXJseVxuICAgIF9ub3JtYWxpemVCZWFyaW5nKGJlYXJpbmc6IG51bWJlciwgY3VycmVudEJlYXJpbmc6IG51bWJlcikge1xuICAgICAgICBiZWFyaW5nID0gd3JhcChiZWFyaW5nLCAtMTgwLCAxODApO1xuICAgICAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMoYmVhcmluZyAtIGN1cnJlbnRCZWFyaW5nKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJlYXJpbmcgLSAzNjAgLSBjdXJyZW50QmVhcmluZykgPCBkaWZmKSBiZWFyaW5nIC09IDM2MDtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJlYXJpbmcgKyAzNjAgLSBjdXJyZW50QmVhcmluZykgPCBkaWZmKSBiZWFyaW5nICs9IDM2MDtcbiAgICAgICAgcmV0dXJuIGJlYXJpbmc7XG4gICAgfVxuXG4gICAgLy8gSWYgYSBwYXRoIGNyb3NzaW5nIHRoZSBhbnRpbWVyaWRpYW4gd291bGQgYmUgc2hvcnRlciwgZXh0ZW5kIHRoZSBmaW5hbCBjb29yZGluYXRlIHNvIHRoYXRcbiAgICAvLyBpbnRlcnBvbGF0aW5nIGJldHdlZW4gdGhlIHR3byBlbmRwb2ludHMgd2lsbCBjcm9zcyBpdC5cbiAgICBfbm9ybWFsaXplQ2VudGVyKGNlbnRlcjogTG5nTGF0KSB7XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmFuc2Zvcm07XG4gICAgICAgIGlmICghdHIucmVuZGVyV29ybGRDb3BpZXMgfHwgdHIubG5nUmFuZ2UpIHJldHVybjtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IGNlbnRlci5sbmcgLSB0ci5jZW50ZXIubG5nO1xuICAgICAgICBjZW50ZXIubG5nICs9XG4gICAgICAgICAgICBkZWx0YSA+IDE4MCA/IC0zNjAgOlxuICAgICAgICAgICAgZGVsdGEgPCAtMTgwID8gMzYwIDogMDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbWVyYTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuaW1wb3J0IHtiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi8uLi91dGlsL2NvbmZpZyc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgY29tcGFjdD86IGJvb2xlYW4sXG4gICAgY3VzdG9tQXR0cmlidXRpb24/OiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+XG59O1xuXG4vKipcbiAqIEFuIGBBdHRyaWJ1dGlvbkNvbnRyb2xgIGNvbnRyb2wgcHJlc2VudHMgdGhlIG1hcCdzIFthdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL2F0dHJpYnV0aW9uLykuXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jb21wYWN0XSBJZiBgdHJ1ZWAgZm9yY2UgYSBjb21wYWN0IGF0dHJpYnV0aW9uIHRoYXQgc2hvd3MgdGhlIGZ1bGwgYXR0cmlidXRpb24gb24gbW91c2UgaG92ZXIsIG9yIGlmIGBmYWxzZWAgZm9yY2UgdGhlIGZ1bGwgYXR0cmlidXRpb24gY29udHJvbC4gVGhlIGRlZmF1bHQgaXMgYSByZXNwb25zaXZlIGF0dHJpYnV0aW9uIHRoYXQgY29sbGFwc2VzIHdoZW4gdGhlIG1hcCBpcyBsZXNzIHRoYW4gNjQwIHBpeGVscyB3aWRlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBBcnJheTxzdHJpbmc+fSBbb3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbl0gU3RyaW5nIG9yIHN0cmluZ3MgdG8gc2hvdyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgYXR0cmlidXRpb25zLlxuICogQGV4YW1wbGVcbiAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHthdHRyaWJ1dGlvbkNvbnRyb2w6IGZhbHNlfSlcbiAqICAgICAuYWRkQ29udHJvbChuZXcgbWFwYm94Z2wuQXR0cmlidXRpb25Db250cm9sKHtcbiAqICAgICAgICAgY29tcGFjdDogdHJ1ZVxuICogICAgIH0pKTtcbiAqL1xuY2xhc3MgQXR0cmlidXRpb25Db250cm9sIHtcbiAgICBvcHRpb25zOiBPcHRpb25zO1xuICAgIF9tYXA6IE1hcDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfaW5uZXJDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9lZGl0TGluazogP0hUTUxBbmNob3JFbGVtZW50O1xuICAgIF9hdHRyaWJIVE1MOiBzdHJpbmc7XG4gICAgc3R5bGVJZDogc3RyaW5nO1xuICAgIHN0eWxlT3duZXI6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ191cGRhdGVFZGl0TGluaycsXG4gICAgICAgICAgICAnX3VwZGF0ZURhdGEnLFxuICAgICAgICAgICAgJ191cGRhdGVDb21wYWN0J1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0UG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiAnYm90dG9tLXJpZ2h0JztcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICBjb25zdCBjb21wYWN0ID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5jb21wYWN0O1xuXG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1hdHRyaWInKTtcbiAgICAgICAgdGhpcy5faW5uZXJDb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY3RybC1hdHRyaWItaW5uZXInLCB0aGlzLl9jb250YWluZXIpO1xuXG4gICAgICAgIGlmIChjb21wYWN0KSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCk7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdzdHlsZWRhdGEnLCB0aGlzLl91cGRhdGVEYXRhKTtcbiAgICAgICAgdGhpcy5fbWFwLm9uKCdzb3VyY2VkYXRhJywgdGhpcy5fdXBkYXRlRGF0YSk7XG4gICAgICAgIHRoaXMuX21hcC5vbignbW92ZWVuZCcsIHRoaXMuX3VwZGF0ZUVkaXRMaW5rKTtcblxuICAgICAgICBpZiAoY29tcGFjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ3Jlc2l6ZScsIHRoaXMuX3VwZGF0ZUNvbXBhY3QpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29tcGFjdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3N0eWxlZGF0YScsIHRoaXMuX3VwZGF0ZURhdGEpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzb3VyY2VkYXRhJywgdGhpcy5fdXBkYXRlRGF0YSk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmVlbmQnLCB0aGlzLl91cGRhdGVFZGl0TGluayk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3Jlc2l6ZScsIHRoaXMuX3VwZGF0ZUNvbXBhY3QpO1xuXG4gICAgICAgIHRoaXMuX21hcCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUVkaXRMaW5rKCkge1xuICAgICAgICBsZXQgZWRpdExpbmsgPSB0aGlzLl9lZGl0TGluaztcbiAgICAgICAgaWYgKCFlZGl0TGluaykge1xuICAgICAgICAgICAgZWRpdExpbmsgPSB0aGlzLl9lZGl0TGluayA9ICh0aGlzLl9jb250YWluZXIucXVlcnlTZWxlY3RvcignLm1hcGJveC1pbXByb3ZlLW1hcCcpOiBhbnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gW1xuICAgICAgICAgICAge2tleTogXCJvd25lclwiLCB2YWx1ZTogdGhpcy5zdHlsZU93bmVyfSxcbiAgICAgICAgICAgIHtrZXk6IFwiaWRcIiwgdmFsdWU6IHRoaXMuc3R5bGVJZH0sXG4gICAgICAgICAgICB7a2V5OiBcImFjY2Vzc190b2tlblwiLCB2YWx1ZTogdGhpcy5fbWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4gfHwgY29uZmlnLkFDQ0VTU19UT0tFTn1cbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoZWRpdExpbmspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtU3RyaW5nID0gcGFyYW1zLnJlZHVjZSgoYWNjLCBuZXh0LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5leHQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGAke25leHQua2V5fT0ke25leHQudmFsdWV9JHtpIDwgcGFyYW1zLmxlbmd0aCAtIDEgPyAnJicgOiAnJ31gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwgYD9gKTtcbiAgICAgICAgICAgIGVkaXRMaW5rLmhyZWYgPSBgJHtjb25maWcuRkVFREJBQ0tfVVJMfS8ke3BhcmFtU3RyaW5nfSR7dGhpcy5fbWFwLl9oYXNoID8gdGhpcy5fbWFwLl9oYXNoLmdldEhhc2hTdHJpbmcodHJ1ZSkgOiAnJ31gO1xuICAgICAgICAgICAgZWRpdExpbmsucmVsID0gXCJub29wZW5lciBub2ZvbGxvd1wiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZURhdGEoZTogYW55KSB7XG4gICAgICAgIGlmIChlICYmIChlLnNvdXJjZURhdGFUeXBlID09PSAnbWV0YWRhdGEnIHx8IGUuZGF0YVR5cGUgPT09ICdzdHlsZScpKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlQXR0cmlidXRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuX21hcC5zdHlsZSkgcmV0dXJuO1xuICAgICAgICBsZXQgYXR0cmlidXRpb25zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24pIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbikpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbnMgPSBhdHRyaWJ1dGlvbnMuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24ubWFwKGF0dHJpYnV0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRpb24gIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbnMucHVzaCh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZXNoZWV0OiBhbnkgPSB0aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldDtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVPd25lciA9IHN0eWxlc2hlZXQub3duZXI7XG4gICAgICAgICAgICB0aGlzLnN0eWxlSWQgPSBzdHlsZXNoZWV0LmlkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGVzID0gdGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDYWNoZS51c2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5hdHRyaWJ1dGlvbiAmJiBhdHRyaWJ1dGlvbnMuaW5kZXhPZihzb3VyY2UuYXR0cmlidXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbnMucHVzaChzb3VyY2UuYXR0cmlidXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlbW92ZSBhbnkgZW50cmllcyB0aGF0IGFyZSBzdWJzdHJpbmdzIG9mIGFub3RoZXIgZW50cnkuXG4gICAgICAgIC8vIGZpcnN0IHNvcnQgYnkgbGVuZ3RoIHNvIHRoYXQgc3Vic3RyaW5ncyBjb21lIGZpcnN0XG4gICAgICAgIGF0dHJpYnV0aW9ucy5zb3J0KChhLCBiKSA9PiBhLmxlbmd0aCAtIGIubGVuZ3RoKTtcbiAgICAgICAgYXR0cmlidXRpb25zID0gYXR0cmlidXRpb25zLmZpbHRlcigoYXR0cmliLCBpKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBhdHRyaWJ1dGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRpb25zW2pdLmluZGV4T2YoYXR0cmliKSA+PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGNoZWNrIGlmIGF0dHJpYnV0aW9uIHN0cmluZyBpcyBkaWZmZXJlbnQgdG8gbWluaW1pemUgRE9NIGNoYW5nZXNcbiAgICAgICAgY29uc3QgYXR0cmliSFRNTCA9IGF0dHJpYnV0aW9ucy5qb2luKCcgfCAnKTtcbiAgICAgICAgaWYgKGF0dHJpYkhUTUwgPT09IHRoaXMuX2F0dHJpYkhUTUwpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9hdHRyaWJIVE1MID0gYXR0cmliSFRNTDtcblxuICAgICAgICBpZiAoYXR0cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5faW5uZXJDb250YWluZXIuaW5uZXJIVE1MID0gYXR0cmliSFRNTDtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1hdHRyaWItZW1wdHknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1hdHRyaWItZW1wdHknKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgb2xkIERPTSBub2RlIGZyb20gX2VkaXRMaW5rXG4gICAgICAgIHRoaXMuX2VkaXRMaW5rID0gbnVsbDtcbiAgICB9XG5cbiAgICBfdXBkYXRlQ29tcGFjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKS5vZmZzZXRXaWR0aCA8PSA2NDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jb21wYWN0Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0dHJpYnV0aW9uQ29udHJvbDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG4vKipcbiAqIEEgYExvZ29Db250cm9sYCBpcyBhIGNvbnRyb2wgdGhhdCBhZGRzIHRoZSBNYXBib3ggd2F0ZXJtYXJrXG4gKiB0byB0aGUgbWFwIGFzIHJlcXVpcmVkIGJ5IHRoZSBbdGVybXMgb2Ygc2VydmljZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS90b3MvKSBmb3IgTWFwYm94XG4gKiB2ZWN0b3IgdGlsZXMgYW5kIGNvcmUgc3R5bGVzLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwcml2YXRlXG4qKi9cblxuY2xhc3MgTG9nb0NvbnRyb2wge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBiaW5kQWxsKFsnX3VwZGF0ZUxvZ28nXSwgdGhpcyk7XG4gICAgICAgIGJpbmRBbGwoWydfdXBkYXRlQ29tcGFjdCddLCB0aGlzKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jdHJsJyk7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IERPTS5jcmVhdGUoJ2EnLCAnbWFwYm94Z2wtY3RybC1sb2dvJyk7XG4gICAgICAgIGFuY2hvci50YXJnZXQgPSBcIl9ibGFua1wiO1xuICAgICAgICBhbmNob3IucmVsID0gXCJub29wZW5lciBub2ZvbGxvd1wiO1xuICAgICAgICBhbmNob3IuaHJlZiA9IFwiaHR0cHM6Ly93d3cubWFwYm94LmNvbS9cIjtcbiAgICAgICAgYW5jaG9yLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgXCJNYXBib3ggbG9nb1wiKTtcbiAgICAgICAgYW5jaG9yLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcIm5vb3BlbmVyIG5vZm9sbG93XCIpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoYW5jaG9yKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdzb3VyY2VkYXRhJywgdGhpcy5fdXBkYXRlTG9nbyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxvZ28oKTtcblxuICAgICAgICB0aGlzLl9tYXAub24oJ3Jlc2l6ZScsIHRoaXMuX3VwZGF0ZUNvbXBhY3QpO1xuICAgICAgICB0aGlzLl91cGRhdGVDb21wYWN0KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzb3VyY2VkYXRhJywgdGhpcy5fdXBkYXRlTG9nbyk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3Jlc2l6ZScsIHRoaXMuX3VwZGF0ZUNvbXBhY3QpO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICdib3R0b20tbGVmdCc7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUxvZ28oZTogYW55KSB7XG4gICAgICAgIGlmICghZSB8fCBlLnNvdXJjZURhdGFUeXBlID09PSAnbWV0YWRhdGEnKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheSA9IHRoaXMuX2xvZ29SZXF1aXJlZCgpID8gJ2Jsb2NrJyA6ICdub25lJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9sb2dvUmVxdWlyZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwLnN0eWxlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGVzID0gdGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlc1tpZF0uZ2V0U291cmNlKCk7XG4gICAgICAgICAgICBpZiAoc291cmNlLm1hcGJveF9sb2dvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUNvbXBhY3QoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckNoaWxkcmVuID0gdGhpcy5fY29udGFpbmVyLmNoaWxkcmVuO1xuICAgICAgICBpZiAoY29udGFpbmVyQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSBjb250YWluZXJDaGlsZHJlblswXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGggPCAyNTApIHtcbiAgICAgICAgICAgICAgICBhbmNob3IuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbmNob3IuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ29Db250cm9sO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmV4cG9ydCB0eXBlIFRhc2tJRCA9IG51bWJlcjsgLy8gY2FuJ3QgbWFyayBvcGFxdWUgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG93dHlwZS9mbG93LXJlbW92ZS10eXBlcy9wdWxsLzYxXG50eXBlIFRhc2sgPSB7XG4gICAgY2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gICAgaWQ6IFRhc2tJRDtcbiAgICBjYW5jZWxsZWQ6IGJvb2xlYW47XG59O1xuXG5jbGFzcyBUYXNrUXVldWUge1xuICAgIF9xdWV1ZTogQXJyYXk8VGFzaz47XG4gICAgX2lkOiBUYXNrSUQ7XG4gICAgX2NsZWFyZWQ6IGJvb2xlYW47XG4gICAgX2N1cnJlbnRseVJ1bm5pbmc6IEFycmF5PFRhc2s+IHwgZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpICB7XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuX2lkID0gMDtcbiAgICAgICAgdGhpcy5fY2xlYXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlSdW5uaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYWRkKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogVGFza0lEIHtcbiAgICAgICAgY29uc3QgaWQgPSArK3RoaXMuX2lkO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IHRoaXMuX3F1ZXVlO1xuICAgICAgICBxdWV1ZS5wdXNoKHtjYWxsYmFjaywgaWQsIGNhbmNlbGxlZDogZmFsc2V9KTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIHJlbW92ZShpZDogVGFza0lEKSB7XG4gICAgICAgIGNvbnN0IHJ1bm5pbmcgPSB0aGlzLl9jdXJyZW50bHlSdW5uaW5nO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IHJ1bm5pbmcgPyB0aGlzLl9xdWV1ZS5jb25jYXQocnVubmluZykgOiB0aGlzLl9xdWV1ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHF1ZXVlKSB7XG4gICAgICAgICAgICBpZiAodGFzay5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcnVuKCkge1xuICAgICAgICBhc3NlcnQoIXRoaXMuX2N1cnJlbnRseVJ1bm5pbmcpO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IHRoaXMuX2N1cnJlbnRseVJ1bm5pbmcgPSB0aGlzLl9xdWV1ZTtcblxuICAgICAgICAvLyBUYXNrcyBxdWV1ZWQgYnkgY2FsbGJhY2tzIGluIHRoZSBjdXJyZW50IHF1ZXVlIHNob3VsZCBiZSBleGVjdXRlZFxuICAgICAgICAvLyBvbiB0aGUgbmV4dCBydW4sIG5vdCB0aGUgY3VycmVudCBydW4uXG4gICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHF1ZXVlKSB7XG4gICAgICAgICAgICBpZiAodGFzay5jYW5jZWxsZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFzay5jYWxsYmFjaygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NsZWFyZWQpIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2xlYXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlSdW5uaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50bHlSdW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGVhcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFza1F1ZXVlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt2ZXJzaW9ufSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHtleHRlbmQsIGJpbmRBbGwsIHdhcm5PbmNlLCB1bmlxdWVJZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmNvbnN0IHtIVE1MSW1hZ2VFbGVtZW50LCBIVE1MRWxlbWVudH0gPSB3aW5kb3c7XG5pbXBvcnQgRE9NIGZyb20gJy4uL3V0aWwvZG9tJztcbmltcG9ydCB7Z2V0SW1hZ2UsIGdldEpTT04sIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcbmltcG9ydCB7UmVxdWVzdE1hbmFnZXJ9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCBTdHlsZSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCBQYWludGVyIGZyb20gJy4uL3JlbmRlci9wYWludGVyJztcbmltcG9ydCBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgSGFzaCBmcm9tICcuL2hhc2gnO1xuaW1wb3J0IGJpbmRIYW5kbGVycyBmcm9tICcuL2JpbmRfaGFuZGxlcnMnO1xuaW1wb3J0IENhbWVyYSBmcm9tICcuL2NhbWVyYSc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi4vZ2VvL2xuZ19sYXRfYm91bmRzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBBdHRyaWJ1dGlvbkNvbnRyb2wgZnJvbSAnLi9jb250cm9sL2F0dHJpYnV0aW9uX2NvbnRyb2wnO1xuaW1wb3J0IExvZ29Db250cm9sIGZyb20gJy4vY29udHJvbC9sb2dvX2NvbnRyb2wnO1xuaW1wb3J0IGlzU3VwcG9ydGVkIGZyb20gJ0BtYXBib3gvbWFwYm94LWdsLXN1cHBvcnRlZCc7XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtNYXBNb3VzZUV2ZW50fSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgVGFza1F1ZXVlIGZyb20gJy4uL3V0aWwvdGFza19xdWV1ZSc7XG5pbXBvcnQgd2VicFN1cHBvcnRlZCBmcm9tICcuLi91dGlsL3dlYnBfc3VwcG9ydGVkJztcbmltcG9ydCB7c2V0Q2FjaGVMaW1pdHN9IGZyb20gJy4uL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge1BvaW50TGlrZX0gZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9ufSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdEJvdW5kc0xpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQgdHlwZSB7U3R5bGVPcHRpb25zLCBTdHlsZVNldHRlck9wdGlvbnN9IGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB0eXBlIHtNYXBFdmVudCwgTWFwRGF0YUV2ZW50fSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZUludGVyZmFjZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSBTY3JvbGxab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvc2Nyb2xsX3pvb20nO1xuaW1wb3J0IHR5cGUgQm94Wm9vbUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL2JveF96b29tJztcbmltcG9ydCB0eXBlIERyYWdSb3RhdGVIYW5kbGVyIGZyb20gJy4vaGFuZGxlci9kcmFnX3JvdGF0ZSc7XG5pbXBvcnQgdHlwZSBEcmFnUGFuSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvZHJhZ19wYW4nO1xuaW1wb3J0IHR5cGUgS2V5Ym9hcmRIYW5kbGVyIGZyb20gJy4vaGFuZGxlci9rZXlib2FyZCc7XG5pbXBvcnQgdHlwZSBEb3VibGVDbGlja1pvb21IYW5kbGVyIGZyb20gJy4vaGFuZGxlci9kYmxjbGlja196b29tJztcbmltcG9ydCB0eXBlIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL3RvdWNoX3pvb21fcm90YXRlJztcbmltcG9ydCB0eXBlIHtUYXNrSUR9IGZyb20gJy4uL3V0aWwvdGFza19xdWV1ZSc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7XG4gICAgTGF5ZXJTcGVjaWZpY2F0aW9uLFxuICAgIEZpbHRlclNwZWNpZmljYXRpb24sXG4gICAgU3R5bGVTcGVjaWZpY2F0aW9uLFxuICAgIExpZ2h0U3BlY2lmaWNhdGlvbixcbiAgICBTb3VyY2VTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG50eXBlIENvbnRyb2xQb3NpdGlvbiA9ICd0b3AtbGVmdCcgfCAndG9wLXJpZ2h0JyB8ICdib3R0b20tbGVmdCcgfCAnYm90dG9tLXJpZ2h0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG50eXBlIElDb250cm9sID0ge1xuICAgIG9uQWRkKG1hcDogTWFwKTogSFRNTEVsZW1lbnQ7XG4gICAgb25SZW1vdmUobWFwOiBNYXApOiB2b2lkO1xuXG4gICAgK2dldERlZmF1bHRQb3NpdGlvbj86ICgpID0+IENvbnRyb2xQb3NpdGlvbjtcbn1cbi8qIGVzbGludC1lbmFibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cblxudHlwZSBNYXBPcHRpb25zID0ge1xuICAgIGhhc2g/OiBib29sZWFuLFxuICAgIGludGVyYWN0aXZlPzogYm9vbGVhbixcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50IHwgc3RyaW5nLFxuICAgIGJlYXJpbmdTbmFwPzogbnVtYmVyLFxuICAgIGF0dHJpYnV0aW9uQ29udHJvbD86IGJvb2xlYW4sXG4gICAgY3VzdG9tQXR0cmlidXRpb24/OiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+LFxuICAgIGxvZ29Qb3NpdGlvbj86IENvbnRyb2xQb3NpdGlvbixcbiAgICBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PzogYm9vbGVhbixcbiAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI/OiBib29sZWFuLFxuICAgIGFudGlhbGlhcz86IGJvb2xlYW4sXG4gICAgcmVmcmVzaEV4cGlyZWRUaWxlcz86IGJvb2xlYW4sXG4gICAgbWF4Qm91bmRzPzogTG5nTGF0Qm91bmRzTGlrZSxcbiAgICBzY3JvbGxab29tPzogYm9vbGVhbixcbiAgICBtaW5ab29tPzogP251bWJlcixcbiAgICBtYXhab29tPzogP251bWJlcixcbiAgICBib3hab29tPzogYm9vbGVhbixcbiAgICBkcmFnUm90YXRlPzogYm9vbGVhbixcbiAgICBkcmFnUGFuPzogYm9vbGVhbixcbiAgICBrZXlib2FyZD86IGJvb2xlYW4sXG4gICAgZG91YmxlQ2xpY2tab29tPzogYm9vbGVhbixcbiAgICB0b3VjaFpvb21Sb3RhdGU/OiBib29sZWFuLFxuICAgIHRyYWNrUmVzaXplPzogYm9vbGVhbixcbiAgICBjZW50ZXI/OiBMbmdMYXRMaWtlLFxuICAgIHpvb20/OiBudW1iZXIsXG4gICAgYmVhcmluZz86IG51bWJlcixcbiAgICBwaXRjaD86IG51bWJlcixcbiAgICByZW5kZXJXb3JsZENvcGllcz86IGJvb2xlYW4sXG4gICAgbWF4VGlsZUNhY2hlU2l6ZT86IG51bWJlcixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogUmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9uLFxuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmdcbn07XG5cbmNvbnN0IGRlZmF1bHRNaW5ab29tID0gMDtcbmNvbnN0IGRlZmF1bHRNYXhab29tID0gMjI7XG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBjZW50ZXI6IFswLCAwXSxcbiAgICB6b29tOiAwLFxuICAgIGJlYXJpbmc6IDAsXG4gICAgcGl0Y2g6IDAsXG5cbiAgICBtaW5ab29tOiBkZWZhdWx0TWluWm9vbSxcbiAgICBtYXhab29tOiBkZWZhdWx0TWF4Wm9vbSxcblxuICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgIHNjcm9sbFpvb206IHRydWUsXG4gICAgYm94Wm9vbTogdHJ1ZSxcbiAgICBkcmFnUm90YXRlOiB0cnVlLFxuICAgIGRyYWdQYW46IHRydWUsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgZG91YmxlQ2xpY2tab29tOiB0cnVlLFxuICAgIHRvdWNoWm9vbVJvdGF0ZTogdHJ1ZSxcblxuICAgIGJlYXJpbmdTbmFwOiA3LFxuICAgIGNsaWNrVG9sZXJhbmNlOiAzLFxuXG4gICAgaGFzaDogZmFsc2UsXG4gICAgYXR0cmlidXRpb25Db250cm9sOiB0cnVlLFxuXG4gICAgZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDogZmFsc2UsXG4gICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICB0cmFja1Jlc2l6ZTogdHJ1ZSxcbiAgICByZW5kZXJXb3JsZENvcGllczogdHJ1ZSxcbiAgICByZWZyZXNoRXhwaXJlZFRpbGVzOiB0cnVlLFxuICAgIG1heFRpbGVDYWNoZVNpemU6IG51bGwsXG4gICAgbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiAnc2Fucy1zZXJpZicsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogbnVsbCxcbiAgICBhY2Nlc3NUb2tlbjogbnVsbCxcbiAgICBmYWRlRHVyYXRpb246IDMwMCxcbiAgICBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IHRydWVcbn07XG5cbi8qKlxuICogVGhlIGBNYXBgIG9iamVjdCByZXByZXNlbnRzIHRoZSBtYXAgb24geW91ciBwYWdlLiBJdCBleHBvc2VzIG1ldGhvZHNcbiAqIGFuZCBwcm9wZXJ0aWVzIHRoYXQgZW5hYmxlIHlvdSB0byBwcm9ncmFtbWF0aWNhbGx5IGNoYW5nZSB0aGUgbWFwLFxuICogYW5kIGZpcmVzIGV2ZW50cyBhcyB1c2VycyBpbnRlcmFjdCB3aXRoIGl0LlxuICpcbiAqIFlvdSBjcmVhdGUgYSBgTWFwYCBieSBzcGVjaWZ5aW5nIGEgYGNvbnRhaW5lcmAgYW5kIG90aGVyIG9wdGlvbnMuXG4gKiBUaGVuIE1hcGJveCBHTCBKUyBpbml0aWFsaXplcyB0aGUgbWFwIG9uIHRoZSBwYWdlIGFuZCByZXR1cm5zIHlvdXIgYE1hcGBcbiAqIG9iamVjdC5cbiAqXG4gKiBAZXh0ZW5kcyBFdmVudGVkXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudHxzdHJpbmd9IG9wdGlvbnMuY29udGFpbmVyIFRoZSBIVE1MIGVsZW1lbnQgaW4gd2hpY2ggTWFwYm94IEdMIEpTIHdpbGwgcmVuZGVyIHRoZSBtYXAsIG9yIHRoZSBlbGVtZW50J3Mgc3RyaW5nIGBpZGAuIFRoZSBzcGVjaWZpZWQgZWxlbWVudCBtdXN0IGhhdmUgbm8gY2hpbGRyZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluWm9vbT0wXSBUaGUgbWluaW11bSB6b29tIGxldmVsIG9mIHRoZSBtYXAgKDAtMjQpLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFpvb209MjJdIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcCAoMC0yNCkuXG4gKiBAcGFyYW0ge09iamVjdHxzdHJpbmd9IFtvcHRpb25zLnN0eWxlXSBUaGUgbWFwJ3MgTWFwYm94IHN0eWxlLiBUaGlzIG11c3QgYmUgYW4gYSBKU09OIG9iamVjdCBjb25mb3JtaW5nIHRvXG4gKiB0aGUgc2NoZW1hIGRlc2NyaWJlZCBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL21hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKSwgb3IgYSBVUkwgdG9cbiAqIHN1Y2ggSlNPTi5cbiAqXG4gKiBUbyBsb2FkIGEgc3R5bGUgZnJvbSB0aGUgTWFwYm94IEFQSSwgeW91IGNhbiB1c2UgYSBVUkwgb2YgdGhlIGZvcm0gYG1hcGJveDovL3N0eWxlcy86b3duZXIvOnN0eWxlYCxcbiAqIHdoZXJlIGA6b3duZXJgIGlzIHlvdXIgTWFwYm94IGFjY291bnQgbmFtZSBhbmQgYDpzdHlsZWAgaXMgdGhlIHN0eWxlIElELiBPciB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICogW3RoZSBwcmVkZWZpbmVkIE1hcGJveCBzdHlsZXNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwcy8pOlxuICpcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3N0cmVldHMtdjEwYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvb3V0ZG9vcnMtdjEwYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbGlnaHQtdjlgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9kYXJrLXY5YFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvc2F0ZWxsaXRlLXY5YFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvc2F0ZWxsaXRlLXN0cmVldHMtdjEwYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1wcmV2aWV3LWRheS12MmBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tcHJldmlldy1uaWdodC12MmBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tZ3VpZGFuY2UtZGF5LXYyYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1ndWlkYW5jZS1uaWdodC12MmBcbiAqXG4gKiBUaWxlc2V0cyBob3N0ZWQgd2l0aCBNYXBib3ggY2FuIGJlIHN0eWxlLW9wdGltaXplZCBpZiB5b3UgYXBwZW5kIGA/b3B0aW1pemU9dHJ1ZWAgdG8gdGhlIGVuZCBvZiB5b3VyIHN0eWxlIFVSTCwgbGlrZSBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXY5P29wdGltaXplPXRydWVgLlxuICogTGVhcm4gbW9yZSBhYm91dCBzdHlsZS1vcHRpbWl6ZWQgdmVjdG9yIHRpbGVzIGluIG91ciBbQVBJIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vbWFwcy8jcmV0cmlldmUtdGlsZXMpLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaGFzaD1mYWxzZV0gSWYgYHRydWVgLCB0aGUgbWFwJ3MgcG9zaXRpb24gKHpvb20sIGNlbnRlciBsYXRpdHVkZSwgY2VudGVyIGxvbmdpdHVkZSwgYmVhcmluZywgYW5kIHBpdGNoKSB3aWxsIGJlIHN5bmNlZCB3aXRoIHRoZSBoYXNoIGZyYWdtZW50IG9mIHRoZSBwYWdlJ3MgVVJMLlxuICogICBGb3IgZXhhbXBsZSwgYGh0dHA6Ly9wYXRoL3RvL215L3BhZ2UuaHRtbCMyLjU5LzM5LjI2LzUzLjA3Ly0yNC4xLzYwYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaW50ZXJhY3RpdmU9dHJ1ZV0gSWYgYGZhbHNlYCwgbm8gbW91c2UsIHRvdWNoLCBvciBrZXlib2FyZCBsaXN0ZW5lcnMgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgbWFwLCBzbyBpdCB3aWxsIG5vdCByZXNwb25kIHRvIGludGVyYWN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJlYXJpbmdTbmFwPTddIFRoZSB0aHJlc2hvbGQsIG1lYXN1cmVkIGluIGRlZ3JlZXMsIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIHRoZSBtYXAnc1xuICogICBiZWFyaW5nIHdpbGwgc25hcCB0byBub3J0aC4gRm9yIGV4YW1wbGUsIHdpdGggYSBgYmVhcmluZ1NuYXBgIG9mIDcsIGlmIHRoZSB1c2VyIHJvdGF0ZXNcbiAqICAgdGhlIG1hcCB3aXRoaW4gNyBkZWdyZWVzIG9mIG5vcnRoLCB0aGUgbWFwIHdpbGwgYXV0b21hdGljYWxseSBzbmFwIHRvIGV4YWN0IG5vcnRoLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5waXRjaFdpdGhSb3RhdGU9dHJ1ZV0gSWYgYGZhbHNlYCwgdGhlIG1hcCdzIHBpdGNoICh0aWx0KSBjb250cm9sIHdpdGggXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIHdpbGwgYmUgZGlzYWJsZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY2xpY2tUb2xlcmFuY2U9M10gVGhlIG1heCBudW1iZXIgb2YgcGl4ZWxzIGEgdXNlciBjYW4gc2hpZnQgdGhlIG1vdXNlIHBvaW50ZXIgZHVyaW5nIGEgY2xpY2sgZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYSB2YWxpZCBjbGljayAoYXMgb3Bwb3NlZCB0byBhIG1vdXNlIGRyYWcpLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2w9dHJ1ZV0gSWYgYHRydWVgLCBhbiB7QGxpbmsgQXR0cmlidXRpb25Db250cm9sfSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEFycmF5PHN0cmluZz59IFtvcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uXSBTdHJpbmcgb3Igc3RyaW5ncyB0byBzaG93IGluIGFuIHtAbGluayBBdHRyaWJ1dGlvbkNvbnRyb2x9LiBPbmx5IGFwcGxpY2FibGUgaWYgYG9wdGlvbnMuYXR0cmlidXRpb25Db250cm9sYCBpcyBgdHJ1ZWAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9nb1Bvc2l0aW9uPSdib3R0b20tbGVmdCddIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhlIE1hcGJveCB3b3JkbWFyayBvbiB0aGUgbWFwLiBWYWxpZCBvcHRpb25zIGFyZSBgdG9wLWxlZnRgLGB0b3AtcmlnaHRgLCBgYm90dG9tLWxlZnRgLCBgYm90dG9tLXJpZ2h0YC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD1mYWxzZV0gSWYgYHRydWVgLCBtYXAgY3JlYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBwZXJmb3JtYW5jZSBvZiBNYXBib3hcbiAqICAgR0wgSlMgd291bGQgYmUgZHJhbWF0aWNhbGx5IHdvcnNlIHRoYW4gZXhwZWN0ZWQgKGkuZS4gYSBzb2Z0d2FyZSByZW5kZXJlciB3b3VsZCBiZSB1c2VkKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBtYXAncyBjYW52YXMgY2FuIGJlIGV4cG9ydGVkIHRvIGEgUE5HIHVzaW5nIGBtYXAuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKClgLiBUaGlzIGlzIGBmYWxzZWAgYnkgZGVmYXVsdCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYW50aWFsaWFzXSBJZiBgdHJ1ZWAsIHRoZSBnbCBjb250ZXh0IHdpbGwgYmUgY3JlYXRlZCB3aXRoIE1TQUEgYW50aWFsaWFzaW5nLCB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciBhbnRpYWxpYXNpbmcgY3VzdG9tIGxheWVycy4gdGhpcyBpcyBgZmFsc2VgIGJ5IGRlZmF1bHQgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJlZnJlc2hFeHBpcmVkVGlsZXM9dHJ1ZV0gSWYgYGZhbHNlYCwgdGhlIG1hcCB3b24ndCBhdHRlbXB0IHRvIHJlLXJlcXVlc3QgdGlsZXMgb25jZSB0aGV5IGV4cGlyZSBwZXIgdGhlaXIgSFRUUCBgY2FjaGVDb250cm9sYC9gZXhwaXJlc2AgaGVhZGVycy5cbiAqIEBwYXJhbSB7TG5nTGF0Qm91bmRzTGlrZX0gW29wdGlvbnMubWF4Qm91bmRzXSBJZiBzZXQsIHRoZSBtYXAgd2lsbCBiZSBjb25zdHJhaW5lZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW29wdGlvbnMuc2Nyb2xsWm9vbT10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcInNjcm9sbCB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC4gQW4gYE9iamVjdGAgdmFsdWUgaXMgcGFzc2VkIGFzIG9wdGlvbnMgdG8ge0BsaW5rIFNjcm9sbFpvb21IYW5kbGVyI2VuYWJsZX0uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmJveFpvb209dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQgKHNlZSB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZHJhZ1JvdGF0ZT10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZCAoc2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kcmFnUGFuPXRydWVdIElmIGB0cnVlYCwgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkIChzZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmtleWJvYXJkPXRydWVdIElmIGB0cnVlYCwga2V5Ym9hcmQgc2hvcnRjdXRzIGFyZSBlbmFibGVkIChzZWUge0BsaW5rIEtleWJvYXJkSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kb3VibGVDbGlja1pvb209dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQgKHNlZSB7QGxpbmsgRG91YmxlQ2xpY2tab29tSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW29wdGlvbnMudG91Y2hab29tUm90YXRlPXRydWVdIElmIGB0cnVlYCwgdGhlIFwicGluY2ggdG8gcm90YXRlIGFuZCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC4gQW4gYE9iamVjdGAgdmFsdWUgaXMgcGFzc2VkIGFzIG9wdGlvbnMgdG8ge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIjZW5hYmxlfS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhY2tSZXNpemU9dHJ1ZV0gIElmIGB0cnVlYCwgdGhlIG1hcCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzaXplIHdoZW4gdGhlIGJyb3dzZXIgd2luZG93IHJlc2l6ZXMuXG4gKiBAcGFyYW0ge0xuZ0xhdExpa2V9IFtvcHRpb25zLmNlbnRlcj1bMCwgMF1dIFRoZSBpbml0YWwgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50IG9mIHRoZSBtYXAuIElmIGBjZW50ZXJgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgWzAsIDBdYCBOb3RlOiBNYXBib3ggR0wgdXNlcyBsb25naXR1ZGUsIGxhdGl0dWRlIGNvb3JkaW5hdGUgb3JkZXIgKGFzIG9wcG9zZWQgdG8gbGF0aXR1ZGUsIGxvbmdpdHVkZSkgdG8gbWF0Y2ggR2VvSlNPTi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy56b29tPTBdIFRoZSBpbml0aWFsIHpvb20gbGV2ZWwgb2YgdGhlIG1hcC4gSWYgYHpvb21gIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgMGAuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmVhcmluZz0wXSBUaGUgaW5pdGlhbCBiZWFyaW5nIChyb3RhdGlvbikgb2YgdGhlIG1hcCwgbWVhc3VyZWQgaW4gZGVncmVlcyBjb3VudGVyLWNsb2Nrd2lzZSBmcm9tIG5vcnRoLiBJZiBgYmVhcmluZ2AgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9ucywgTWFwYm94IEdMIEpTIHdpbGwgbG9vayBmb3IgaXQgaW4gdGhlIG1hcCdzIHN0eWxlIG9iamVjdC4gSWYgaXQgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgc3R5bGUsIGVpdGhlciwgaXQgd2lsbCBkZWZhdWx0IHRvIGAwYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5waXRjaD0wXSBUaGUgaW5pdGlhbCBwaXRjaCAodGlsdCkgb2YgdGhlIG1hcCwgbWVhc3VyZWQgaW4gZGVncmVlcyBhd2F5IGZyb20gdGhlIHBsYW5lIG9mIHRoZSBzY3JlZW4gKDAtNjApLiBJZiBgcGl0Y2hgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgMGAuXG4gKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc0xpa2V9IFtvcHRpb25zLmJvdW5kc10gVGhlIGluaXRpYWwgYm91bmRzIG9mIHRoZSBtYXAuIElmIGBib3VuZHNgIGlzIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIGBjZW50ZXJgIGFuZCBgem9vbWAgY29uc3RydWN0b3Igb3B0aW9ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5maXRCb3VuZHNPcHRpb25zXSBBIFtgZml0Qm91bmRzYF0oI21hcCNmaXRib3VuZHMpIG9wdGlvbnMgb2JqZWN0IHRvIHVzZSBfb25seV8gd2hlbiBmaXR0aW5nIHRoZSBpbml0aWFsIGBib3VuZHNgIHByb3ZpZGVkIGFib3ZlLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yZW5kZXJXb3JsZENvcGllcz10cnVlXSAgSWYgYHRydWVgLCBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHdvcmxkIHdpbGwgYmUgcmVuZGVyZWQgc2lkZSBieSBzaWRlIGJleW9uZCAtMTgwIGFuZCAxODAgZGVncmVlcyBsb25naXR1ZGUuIElmIHNldCB0byBgZmFsc2VgOlxuICogLSBXaGVuIHRoZSBtYXAgaXMgem9vbWVkIG91dCBmYXIgZW5vdWdoIHRoYXQgYSBzaW5nbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHdvcmxkIGRvZXMgbm90IGZpbGwgdGhlIG1hcCdzIGVudGlyZVxuICogY29udGFpbmVyLCB0aGVyZSB3aWxsIGJlIGJsYW5rIHNwYWNlIGJleW9uZCAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUuXG4gKiAtIEZlYXR1cmVzIHRoYXQgY3Jvc3MgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlIHdpbGwgYmUgY3V0IGluIHR3byAod2l0aCBvbmUgcG9ydGlvbiBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGVcbiAqIG1hcCBhbmQgdGhlIG90aGVyIG9uIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIG1hcCkgYXQgZXZlcnkgem9vbSBsZXZlbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhUaWxlQ2FjaGVTaXplPW51bGxdICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGlsZXMgc3RvcmVkIGluIHRoZSB0aWxlIGNhY2hlIGZvciBhIGdpdmVuIHNvdXJjZS4gSWYgb21pdHRlZCwgdGhlIGNhY2hlIHdpbGwgYmUgZHluYW1pY2FsbHkgc2l6ZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld3BvcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PSdzYW5zLXNlcmlmJ10gRGVmaW5lcyBhIENTU1xuICogICBmb250LWZhbWlseSBmb3IgbG9jYWxseSBvdmVycmlkaW5nIGdlbmVyYXRpb24gb2YgZ2x5cGhzIGluIHRoZSAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocycsICdIaXJhZ2FuYScsICdLYXRha2FuYScgYW5kICdIYW5ndWwgU3lsbGFibGVzJyByYW5nZXMuXG4gKiAgIEluIHRoZXNlIHJhbmdlcywgZm9udCBzZXR0aW5ncyBmcm9tIHRoZSBtYXAncyBzdHlsZSB3aWxsIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgZm9udC13ZWlnaHQga2V5d29yZHMgKGxpZ2h0L3JlZ3VsYXIvbWVkaXVtL2JvbGQpLlxuICogICBTZXQgdG8gYGZhbHNlYCwgdG8gZW5hYmxlIGZvbnQgc2V0dGluZ3MgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUgZm9yIHRoZXNlIGdseXBoIHJhbmdlcy4gIE5vdGUgdGhhdCBbTWFwYm94IFN0dWRpb10oaHR0cHM6Ly9zdHVkaW8ubWFwYm94LmNvbS8pIHNldHMgdGhpcyB2YWx1ZSB0byBgZmFsc2VgIGJ5IGRlZmF1bHQuXG4gKiAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIGF2b2lkIGJhbmR3aWR0aC1pbnRlbnNpdmUgZ2x5cGggc2VydmVyIHJlcXVlc3RzLiAoU2VlIFtVc2UgbG9jYWxseSBnZW5lcmF0ZWQgaWRlb2dyYXBoc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9sb2NhbC1pZGVvZ3JhcGhzKS4pXG4gKiBAcGFyYW0ge1JlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbn0gW29wdGlvbnMudHJhbnNmb3JtUmVxdWVzdD1udWxsXSBBIGNhbGxiYWNrIHJ1biBiZWZvcmUgdGhlIE1hcCBtYWtlcyBhIHJlcXVlc3QgZm9yIGFuIGV4dGVybmFsIFVSTC4gVGhlIGNhbGxiYWNrIGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgdXJsLCBzZXQgaGVhZGVycywgb3Igc2V0IHRoZSBjcmVkZW50aWFscyBwcm9wZXJ0eSBmb3IgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzLlxuICogICBFeHBlY3RlZCB0byByZXR1cm4gYW4gb2JqZWN0IHdpdGggYSBgdXJsYCBwcm9wZXJ0eSBhbmQgb3B0aW9uYWxseSBgaGVhZGVyc2AgYW5kIGBjcmVkZW50aWFsc2AgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29sbGVjdFJlc291cmNlVGltaW5nPWZhbHNlXSBJZiBgdHJ1ZWAsIFJlc291cmNlIFRpbWluZyBBUEkgaW5mb3JtYXRpb24gd2lsbCBiZSBjb2xsZWN0ZWQgZm9yIHJlcXVlc3RzIG1hZGUgYnkgR2VvSlNPTiBhbmQgVmVjdG9yIFRpbGUgd2ViIHdvcmtlcnMgKHRoaXMgaW5mb3JtYXRpb24gaXMgbm9ybWFsbHkgaW5hY2Nlc3NpYmxlIGZyb20gdGhlIG1haW4gSmF2YXNjcmlwdCB0aHJlYWQpLiBJbmZvcm1hdGlvbiB3aWxsIGJlIHJldHVybmVkIGluIGEgYHJlc291cmNlVGltaW5nYCBwcm9wZXJ0eSBvZiByZWxldmFudCBgZGF0YWAgZXZlbnRzLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmZhZGVEdXJhdGlvbj0zMDBdIENvbnRyb2xzIHRoZSBkdXJhdGlvbiBvZiB0aGUgZmFkZS1pbi9mYWRlLW91dCBhbmltYXRpb24gZm9yIGxhYmVsIGNvbGxpc2lvbnMsIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBzZXR0aW5nIGFmZmVjdHMgYWxsIHN5bWJvbCBsYXllcnMuIFRoaXMgc2V0dGluZyBkb2VzIG5vdCBhZmZlY3QgdGhlIGR1cmF0aW9uIG9mIHJ1bnRpbWUgc3R5bGluZyB0cmFuc2l0aW9ucyBvciByYXN0ZXIgdGlsZSBjcm9zcy1mYWRpbmcuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNyb3NzU291cmNlQ29sbGlzaW9ucz10cnVlXSBJZiBgdHJ1ZWAsIHN5bWJvbHMgZnJvbSBtdWx0aXBsZSBzb3VyY2VzIGNhbiBjb2xsaWRlIHdpdGggZWFjaCBvdGhlciBkdXJpbmcgY29sbGlzaW9uIGRldGVjdGlvbi4gSWYgYGZhbHNlYCwgY29sbGlzaW9uIGRldGVjdGlvbiBpcyBydW4gc2VwYXJhdGVseSBmb3IgdGhlIHN5bWJvbHMgaW4gZWFjaCBzb3VyY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYWNjZXNzVG9rZW49bnVsbF0gSWYgc3BlY2lmaWVkLCBtYXAgd2lsbCB1c2UgdGhpcyB0b2tlbiBpbnN0ZWFkIG9mIHRoZSBvbmUgZGVmaW5lZCBpbiBtYXBib3hnbC5hY2Nlc3NUb2tlbi5cblxuICogQGV4YW1wbGVcbiAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHtcbiAqICAgY29udGFpbmVyOiAnbWFwJyxcbiAqICAgY2VudGVyOiBbLTEyMi40MjA2NzksIDM3Ljc3MjUzN10sXG4gKiAgIHpvb206IDEzLFxuICogICBzdHlsZTogc3R5bGVfb2JqZWN0LFxuICogICBoYXNoOiB0cnVlLFxuICogICB0cmFuc2Zvcm1SZXF1ZXN0OiAodXJsLCByZXNvdXJjZVR5cGUpPT4ge1xuICogICAgIGlmKHJlc291cmNlVHlwZSA9PT0gJ1NvdXJjZScgJiYgdXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly9teUhvc3QnKSkge1xuICogICAgICAgcmV0dXJuIHtcbiAqICAgICAgICB1cmw6IHVybC5yZXBsYWNlKCdodHRwJywgJ2h0dHBzJyksXG4gKiAgICAgICAgaGVhZGVyczogeyAnbXktY3VzdG9tLWhlYWRlcic6IHRydWV9LFxuICogICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScgIC8vIEluY2x1ZGUgY29va2llcyBmb3IgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzXG4gKiAgICAgIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH0pO1xuICogQHNlZSBbRGlzcGxheSBhIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZXMvKVxuICovXG5jbGFzcyBNYXAgZXh0ZW5kcyBDYW1lcmEge1xuICAgIHN0eWxlOiBTdHlsZTtcbiAgICBwYWludGVyOiBQYWludGVyO1xuXG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX21pc3NpbmdDU1NDYW5hcnk6IEhUTUxFbGVtZW50O1xuICAgIF9jYW52YXNDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9jb250cm9sQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfY29udHJvbFBvc2l0aW9uczoge1tzdHJpbmddOiBIVE1MRWxlbWVudH07XG4gICAgX2ludGVyYWN0aXZlOiA/Ym9vbGVhbjtcbiAgICBfc2hvd1RpbGVCb3VuZGFyaWVzOiA/Ym9vbGVhbjtcbiAgICBfc2hvd0NvbGxpc2lvbkJveGVzOiA/Ym9vbGVhbjtcbiAgICBfc2hvd092ZXJkcmF3SW5zcGVjdG9yOiBib29sZWFuO1xuICAgIF9yZXBhaW50OiA/Ym9vbGVhbjtcbiAgICBfdmVydGljZXM6ID9ib29sZWFuO1xuICAgIF9jYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICAgIF9tYXhUaWxlQ2FjaGVTaXplOiBudW1iZXI7XG4gICAgX2ZyYW1lOiA/Q2FuY2VsYWJsZTtcbiAgICBfc3R5bGVEaXJ0eTogP2Jvb2xlYW47XG4gICAgX3NvdXJjZXNEaXJ0eTogP2Jvb2xlYW47XG4gICAgX3BsYWNlbWVudERpcnR5OiA/Ym9vbGVhbjtcbiAgICBfbG9hZGVkOiBib29sZWFuO1xuICAgIF90cmFja1Jlc2l6ZTogYm9vbGVhbjtcbiAgICBfcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBib29sZWFuO1xuICAgIF9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiBib29sZWFuO1xuICAgIF9hbnRpYWxpYXM6IGJvb2xlYW47XG4gICAgX3JlZnJlc2hFeHBpcmVkVGlsZXM6IGJvb2xlYW47XG4gICAgX2hhc2g6IEhhc2g7XG4gICAgX2RlbGVnYXRlZExpc3RlbmVyczogYW55O1xuICAgIF9mYWRlRHVyYXRpb246IG51bWJlcjtcbiAgICBfY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuO1xuICAgIF9jcm9zc0ZhZGluZ0ZhY3RvcjogbnVtYmVyO1xuICAgIF9jb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW47XG4gICAgX3JlbmRlclRhc2tRdWV1ZTogVGFza1F1ZXVlO1xuICAgIF9jb250cm9sczogQXJyYXk8SUNvbnRyb2w+O1xuICAgIF9tYXBJZDogbnVtYmVyO1xuICAgIF9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6IHN0cmluZztcbiAgICBfcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBTY3JvbGxab29tSGFuZGxlcn0sIHdoaWNoIGltcGxlbWVudHMgem9vbWluZyBpbiBhbmQgb3V0IHdpdGggYSBzY3JvbGwgd2hlZWwgb3IgdHJhY2twYWQuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBzY3JvbGxab29tYCBpbiB0aGUge0BsaW5rIFNjcm9sbFpvb21IYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIHNjcm9sbFpvb206IFNjcm9sbFpvb21IYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBCb3hab29tSGFuZGxlcn0sIHdoaWNoIGltcGxlbWVudHMgem9vbWluZyB1c2luZyBhIGRyYWcgZ2VzdHVyZSB3aXRoIHRoZSBTaGlmdCBrZXkgcHJlc3NlZC5cbiAgICAgKiBGaW5kIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMgdXNpbmcgYGJveFpvb21gIGluIHRoZSB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9IHNlY3Rpb24uXG4gICAgICovXG4gICAgYm94Wm9vbTogQm94Wm9vbUhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfSwgd2hpY2ggaW1wbGVtZW50cyByb3RhdGluZyB0aGUgbWFwIHdoaWxlIGRyYWdnaW5nIHdpdGggdGhlIHJpZ2h0XG4gICAgICogbW91c2UgYnV0dG9uIG9yIHdpdGggdGhlIENvbnRyb2wga2V5IHByZXNzZWQuIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgZHJhZ1JvdGF0ZWBcbiAgICAgKiBpbiB0aGUge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGRyYWdSb3RhdGU6IERyYWdSb3RhdGVIYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBEcmFnUGFuSGFuZGxlcn0sIHdoaWNoIGltcGxlbWVudHMgZHJhZ2dpbmcgdGhlIG1hcCB3aXRoIGEgbW91c2Ugb3IgdG91Y2ggZ2VzdHVyZS5cbiAgICAgKiBGaW5kIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMgdXNpbmcgYGRyYWdQYW5gIGluIHRoZSB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9IHNlY3Rpb24uXG4gICAgICovXG4gICAgZHJhZ1BhbjogRHJhZ1BhbkhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIEtleWJvYXJkSGFuZGxlcn0sIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byB6b29tLCByb3RhdGUsIGFuZCBwYW4gdGhlIG1hcCB1c2luZyBrZXlib2FyZFxuICAgICAqIHNob3J0Y3V0cy4gRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBrZXlib2FyZGAgaW4gdGhlIHtAbGluayBLZXlib2FyZEhhbmRsZXJ9IHNlY3Rpb24uXG4gICAgICovXG4gICAga2V5Ym9hcmQ6IEtleWJvYXJkSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgRG91YmxlQ2xpY2tab29tSGFuZGxlcn0sIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byB6b29tIGJ5IGRvdWJsZSBjbGlja2luZy5cbiAgICAgKiBGaW5kIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMgdXNpbmcgYGRvdWJsZUNsaWNrWm9vbWAgaW4gdGhlIHtAbGluayBEb3VibGVDbGlja1pvb21IYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGRvdWJsZUNsaWNrWm9vbTogRG91YmxlQ2xpY2tab29tSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgVG91Y2hab29tUm90YXRlSGFuZGxlcn0sIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byB6b29tIG9yIHJvdGF0ZSB0aGUgbWFwIHdpdGggdG91Y2ggZ2VzdHVyZXMuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGB0b3VjaFpvb21Sb3RhdGVgIGluIHRoZSB7QGxpbmsgVG91Y2hab29tUm90YXRlSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICB0b3VjaFpvb21Sb3RhdGU6IFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNYXBPcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5taW5ab29tICE9IG51bGwgJiYgb3B0aW9ucy5tYXhab29tICE9IG51bGwgJiYgb3B0aW9ucy5taW5ab29tID4gb3B0aW9ucy5tYXhab29tKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gbWluWm9vbWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybShvcHRpb25zLm1pblpvb20sIG9wdGlvbnMubWF4Wm9vbSwgb3B0aW9ucy5yZW5kZXJXb3JsZENvcGllcyk7XG4gICAgICAgIHN1cGVyKHRyYW5zZm9ybSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5faW50ZXJhY3RpdmUgPSBvcHRpb25zLmludGVyYWN0aXZlO1xuICAgICAgICB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID0gb3B0aW9ucy5tYXhUaWxlQ2FjaGVTaXplO1xuICAgICAgICB0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0ID0gb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O1xuICAgICAgICB0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcbiAgICAgICAgdGhpcy5fYW50aWFsaWFzID0gb3B0aW9ucy5hbnRpYWxpYXM7XG4gICAgICAgIHRoaXMuX3RyYWNrUmVzaXplID0gb3B0aW9ucy50cmFja1Jlc2l6ZTtcbiAgICAgICAgdGhpcy5fYmVhcmluZ1NuYXAgPSBvcHRpb25zLmJlYXJpbmdTbmFwO1xuICAgICAgICB0aGlzLl9yZWZyZXNoRXhwaXJlZFRpbGVzID0gb3B0aW9ucy5yZWZyZXNoRXhwaXJlZFRpbGVzO1xuICAgICAgICB0aGlzLl9mYWRlRHVyYXRpb24gPSBvcHRpb25zLmZhZGVEdXJhdGlvbjtcbiAgICAgICAgdGhpcy5fY3Jvc3NTb3VyY2VDb2xsaXNpb25zID0gb3B0aW9ucy5jcm9zc1NvdXJjZUNvbGxpc2lvbnM7XG4gICAgICAgIHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yID0gMTtcbiAgICAgICAgdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nID0gb3B0aW9ucy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG4gICAgICAgIHRoaXMuX3JlbmRlclRhc2tRdWV1ZSA9IG5ldyBUYXNrUXVldWUoKTtcbiAgICAgICAgdGhpcy5fY29udHJvbHMgPSBbXTtcbiAgICAgICAgdGhpcy5fbWFwSWQgPSB1bmlxdWVJZCgpO1xuXG4gICAgICAgIHRoaXMuX3JlcXVlc3RNYW5hZ2VyID0gbmV3IFJlcXVlc3RNYW5hZ2VyKG9wdGlvbnMudHJhbnNmb3JtUmVxdWVzdCwgb3B0aW9ucy5hY2Nlc3NUb2tlbik7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnRhaW5lciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRpb25zLmNvbnRhaW5lcik7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29udGFpbmVyICcke29wdGlvbnMuY29udGFpbmVyfScgbm90IGZvdW5kLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGU6ICdjb250YWluZXInIG11c3QgYmUgYSBTdHJpbmcgb3IgSFRNTEVsZW1lbnQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5tYXhCb3VuZHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TWF4Qm91bmRzKG9wdGlvbnMubWF4Qm91bmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbldpbmRvd09ubGluZScsXG4gICAgICAgICAgICAnX29uV2luZG93UmVzaXplJyxcbiAgICAgICAgICAgICdfY29udGV4dExvc3QnLFxuICAgICAgICAgICAgJ19jb250ZXh0UmVzdG9yZWQnXG4gICAgICAgIF0sIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX3NldHVwQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX3NldHVwUGFpbnRlcigpO1xuICAgICAgICBpZiAodGhpcy5wYWludGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0wuYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uKCdtb3ZlJywgKCkgPT4gdGhpcy5fdXBkYXRlKGZhbHNlKSk7XG4gICAgICAgIHRoaXMub24oJ21vdmVlbmQnLCAoKSA9PiB0aGlzLl91cGRhdGUoZmFsc2UpKTtcbiAgICAgICAgdGhpcy5vbignem9vbScsICgpID0+IHRoaXMuX3VwZGF0ZSh0cnVlKSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgdGhpcy5fb25XaW5kb3dPbmxpbmUsIGZhbHNlKTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9vbldpbmRvd1Jlc2l6ZSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmluZEhhbmRsZXJzKHRoaXMsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX2hhc2ggPSBvcHRpb25zLmhhc2ggJiYgKG5ldyBIYXNoKCkpLmFkZFRvKHRoaXMpO1xuICAgICAgICAvLyBkb24ndCBzZXQgcG9zaXRpb24gZnJvbSBvcHRpb25zIGlmIHNldCB0aHJvdWdoIGhhc2hcbiAgICAgICAgaWYgKCF0aGlzLl9oYXNoIHx8ICF0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG8oe1xuICAgICAgICAgICAgICAgIGNlbnRlcjogb3B0aW9ucy5jZW50ZXIsXG4gICAgICAgICAgICAgICAgem9vbTogb3B0aW9ucy56b29tLFxuICAgICAgICAgICAgICAgIGJlYXJpbmc6IG9wdGlvbnMuYmVhcmluZyxcbiAgICAgICAgICAgICAgICBwaXRjaDogb3B0aW9ucy5waXRjaFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJvdW5kcykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maXRCb3VuZHMob3B0aW9ucy5ib3VuZHMsIGV4dGVuZCh7fSwgb3B0aW9ucy5maXRCb3VuZHNPcHRpb25zLCB7ZHVyYXRpb246IDB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuXG4gICAgICAgIHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSA9IG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O1xuICAgICAgICBpZiAob3B0aW9ucy5zdHlsZSkgdGhpcy5zZXRTdHlsZShvcHRpb25zLnN0eWxlLCB7bG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiBvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbClcbiAgICAgICAgICAgIHRoaXMuYWRkQ29udHJvbChuZXcgQXR0cmlidXRpb25Db250cm9sKHtjdXN0b21BdHRyaWJ1dGlvbjogb3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbn0pKTtcblxuICAgICAgICB0aGlzLmFkZENvbnRyb2wobmV3IExvZ29Db250cm9sKCksIG9wdGlvbnMubG9nb1Bvc2l0aW9uKTtcblxuICAgICAgICB0aGlzLm9uKCdzdHlsZS5sb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNmb3JtLnVubW9kaWZpZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBUbygodGhpcy5zdHlsZS5zdHlsZXNoZWV0OiBhbnkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub24oJ2RhdGEnLCAoZXZlbnQ6IE1hcERhdGFFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKGV2ZW50LmRhdGFUeXBlID09PSAnc3R5bGUnKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoYCR7ZXZlbnQuZGF0YVR5cGV9ZGF0YWAsIGV2ZW50KSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uKCdkYXRhbG9hZGluZycsIChldmVudDogTWFwRGF0YUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KGAke2V2ZW50LmRhdGFUeXBlfWRhdGFsb2FkaW5nYCwgZXZlbnQpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAqIFJldHVybnMgYSB1bmlxdWUgbnVtYmVyIGZvciB0aGlzIG1hcCBpbnN0YW5jZSB3aGljaCBpcyB1c2VkIGZvciB0aGUgTWFwTG9hZEV2ZW50XG4gICAgKiB0byBtYWtlIHN1cmUgd2Ugb25seSBmaXJlIG9uZSBldmVudCBwZXIgaW5zdGFudGlhdGVkIG1hcCBvYmplY3QuXG4gICAgKiBAcHJpdmF0ZVxuICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAqL1xuICAgIF9nZXRNYXBJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcElkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSB7QGxpbmsgSUNvbnRyb2x9IHRvIHRoZSBtYXAsIGNhbGxpbmcgYGNvbnRyb2wub25BZGQodGhpcylgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtJQ29udHJvbH0gY29udHJvbCBUaGUge0BsaW5rIElDb250cm9sfSB0byBhZGQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwb3NpdGlvbl0gcG9zaXRpb24gb24gdGhlIG1hcCB0byB3aGljaCB0aGUgY29udHJvbCB3aWxsIGJlIGFkZGVkLlxuICAgICAqIFZhbGlkIHZhbHVlcyBhcmUgYCd0b3AtbGVmdCdgLCBgJ3RvcC1yaWdodCdgLCBgJ2JvdHRvbS1sZWZ0J2AsIGFuZCBgJ2JvdHRvbS1yaWdodCdgLiBEZWZhdWx0cyB0byBgJ3RvcC1yaWdodCdgLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gQWRkIHpvb20gYW5kIHJvdGF0aW9uIGNvbnRyb2xzIHRvIHRoZSBtYXAuXG4gICAgICogbWFwLmFkZENvbnRyb2wobmV3IG1hcGJveGdsLk5hdmlnYXRpb25Db250cm9sKCkpO1xuICAgICAqIEBzZWUgW0Rpc3BsYXkgbWFwIG5hdmlnYXRpb24gY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbmF2aWdhdGlvbi8pXG4gICAgICovXG4gICAgYWRkQ29udHJvbChjb250cm9sOiBJQ29udHJvbCwgcG9zaXRpb24/OiBDb250cm9sUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgJiYgY29udHJvbC5nZXREZWZhdWx0UG9zaXRpb24pIHtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gY29udHJvbC5nZXREZWZhdWx0UG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcG9zaXRpb24gPSAndG9wLXJpZ2h0JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wub25BZGQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHRvIG1hcC5hZGRDb250cm9sKCkuIEFyZ3VtZW50IG11c3QgYmUgYSBjb250cm9sIHdpdGggb25BZGQgYW5kIG9uUmVtb3ZlIG1ldGhvZHMuJykpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250cm9sRWxlbWVudCA9IGNvbnRyb2wub25BZGQodGhpcyk7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLnB1c2goY29udHJvbCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb25Db250YWluZXIgPSB0aGlzLl9jb250cm9sUG9zaXRpb25zW3Bvc2l0aW9uXTtcbiAgICAgICAgaWYgKHBvc2l0aW9uLmluZGV4T2YoJ2JvdHRvbScpICE9PSAtMSkge1xuICAgICAgICAgICAgcG9zaXRpb25Db250YWluZXIuaW5zZXJ0QmVmb3JlKGNvbnRyb2xFbGVtZW50LCBwb3NpdGlvbkNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uQ29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRyb2xFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBjb250cm9sIGZyb20gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SUNvbnRyb2x9IGNvbnRyb2wgVGhlIHtAbGluayBJQ29udHJvbH0gdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRGVmaW5lIGEgbmV3IG5hdmlnYXRpb24gY29udHJvbC5cbiAgICAgKiB2YXIgbmF2aWdhdGlvbiA9IG5ldyBtYXBib3hnbC5OYXZpZ2F0aW9uQ29udHJvbCgpO1xuICAgICAqIC8vIEFkZCB6b29tIGFuZCByb3RhdGlvbiBjb250cm9scyB0byB0aGUgbWFwLlxuICAgICAqIG1hcC5hZGRDb250cm9sKG5hdmlnYXRpb24pO1xuICAgICAqIC8vIFJlbW92ZSB6b29tIGFuZCByb3RhdGlvbiBjb250cm9scyBmcm9tIHRoZSBtYXAuXG4gICAgICogbWFwLnJlbW92ZUNvbnRyb2wobmF2aWdhdGlvbik7XG4gICAgICovXG4gICAgcmVtb3ZlQ29udHJvbChjb250cm9sOiBJQ29udHJvbCkge1xuICAgICAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wub25SZW1vdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHRvIG1hcC5yZW1vdmVDb250cm9sKCkuIEFyZ3VtZW50IG11c3QgYmUgYSBjb250cm9sIHdpdGggb25BZGQgYW5kIG9uUmVtb3ZlIG1ldGhvZHMuJykpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaSA9IHRoaXMuX2NvbnRyb2xzLmluZGV4T2YoY29udHJvbCk7XG4gICAgICAgIGlmIChjaSA+IC0xKSB0aGlzLl9jb250cm9scy5zcGxpY2UoY2ksIDEpO1xuICAgICAgICBjb250cm9sLm9uUmVtb3ZlKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNpemVzIHRoZSBtYXAgYWNjb3JkaW5nIHRvIHRoZSBkaW1lbnNpb25zIG9mIGl0c1xuICAgICAqIGBjb250YWluZXJgIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBDaGVja3MgaWYgdGhlIG1hcCBjb250YWluZXIgc2l6ZSBjaGFuZ2VkIGFuZCB1cGRhdGVzIHRoZSBtYXAgaWYgaXQgaGFzIGNoYW5nZWQuXG4gICAgICogVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIG1hcCdzIGBjb250YWluZXJgIGlzIHJlc2l6ZWQgcHJvZ3JhbW1hdGljYWxseVxuICAgICAqIG9yIHdoZW4gdGhlIG1hcCBpcyBzaG93biBhZnRlciBiZWluZyBpbml0aWFsbHkgaGlkZGVuIHdpdGggQ1NTLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgcGFzc2VkIHRvIGBtb3Zlc3RhcnRgLCBgbW92ZWAsIGByZXNpemVgLCBhbmQgYG1vdmVlbmRgXG4gICAgICogICBldmVudHMgdGhhdCBnZXQgdHJpZ2dlcmVkIGFzIGEgcmVzdWx0IG9mIHJlc2l6ZS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBkaWZmZXJlbnRpYXRpbmcgdGhlXG4gICAgICogICBzb3VyY2Ugb2YgYW4gZXZlbnQgKGZvciBleGFtcGxlLCB1c2VyLWluaXRpYXRlZCBvciBwcm9ncmFtbWF0aWNhbGx5LXRyaWdnZXJlZCBldmVudHMpLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gUmVzaXplIHRoZSBtYXAgd2hlbiB0aGUgbWFwIGNvbnRhaW5lciBpcyBzaG93blxuICAgICAqIC8vIGFmdGVyIGJlaW5nIGluaXRpYWxseSBoaWRkZW4gd2l0aCBDU1MuXG4gICAgICogdmFyIG1hcERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXAnKTtcbiAgICAgKiBpZiAobWFwRGl2LnN0eWxlLnZpc2liaWxpdHkgPT09IHRydWUpIG1hcC5yZXNpemUoKTtcbiAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZGltZW5zaW9uc1swXTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZGltZW5zaW9uc1sxXTtcblxuICAgICAgICB0aGlzLl9yZXNpemVDYW52YXMod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5wYWludGVyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3Zlc3RhcnQnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdtb3ZlJywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgncmVzaXplJywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnbW92ZWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBnZW9ncmFwaGljYWwgYm91bmRzLiBXaGVuIHRoZSBiZWFyaW5nIG9yIHBpdGNoIGlzIG5vbi16ZXJvLCB0aGUgdmlzaWJsZSByZWdpb24gaXMgbm90XG4gICAgICogYW4gYXhpcy1hbGlnbmVkIHJlY3RhbmdsZSwgYW5kIHRoZSByZXN1bHQgaXMgdGhlIHNtYWxsZXN0IGJvdW5kcyB0aGF0IGVuY29tcGFzc2VzIHRoZSB2aXNpYmxlIHJlZ2lvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBib3VuZHMgPSBtYXAuZ2V0Qm91bmRzKCk7XG4gICAgICovXG4gICAgZ2V0Qm91bmRzKCk6IExuZ0xhdEJvdW5kcyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5nZXRCb3VuZHMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGdlb2dyYXBoaWNhbCBib3VuZHMgdGhlIG1hcCBpcyBjb25zdHJhaW5lZCB0bywgb3IgYG51bGxgIGlmIG5vbmUgc2V0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1heEJvdW5kcyA9IG1hcC5nZXRNYXhCb3VuZHMoKTtcbiAgICAgKi9cbiAgICBnZXRNYXhCb3VuZHMoKTogTG5nTGF0Qm91bmRzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5nZXRNYXhCb3VuZHMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGNsZWFycyB0aGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGJvdW5kcy5cbiAgICAgKlxuICAgICAqIFBhbiBhbmQgem9vbSBvcGVyYXRpb25zIGFyZSBjb25zdHJhaW5lZCB3aXRoaW4gdGhlc2UgYm91bmRzLlxuICAgICAqIElmIGEgcGFuIG9yIHpvb20gaXMgcGVyZm9ybWVkIHRoYXQgd291bGRcbiAgICAgKiBkaXNwbGF5IHJlZ2lvbnMgb3V0c2lkZSB0aGVzZSBib3VuZHMsIHRoZSBtYXAgd2lsbFxuICAgICAqIGluc3RlYWQgZGlzcGxheSBhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsXG4gICAgICogYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIG9wZXJhdGlvbidzIHJlcXVlc3Qgd2hpbGUgc3RpbGxcbiAgICAgKiByZW1haW5pbmcgd2l0aGluIHRoZSBib3VuZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc0xpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBib3VuZHMgVGhlIG1heGltdW0gYm91bmRzIHRvIHNldC4gSWYgYG51bGxgIG9yIGB1bmRlZmluZWRgIGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgbWFwJ3MgbWF4aW11bSBib3VuZHMuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBEZWZpbmUgYm91bmRzIHRoYXQgY29uZm9ybSB0byB0aGUgYExuZ0xhdEJvdW5kc0xpa2VgIG9iamVjdC5cbiAgICAgKiB2YXIgYm91bmRzID0gW1xuICAgICAqICAgWy03NC4wNDcyOCwgNDAuNjgzOTJdLCAvLyBbd2VzdCwgc291dGhdXG4gICAgICogICBbLTczLjkxMDU4LCA0MC44Nzc2NF0gIC8vIFtlYXN0LCBub3J0aF1cbiAgICAgKiBdO1xuICAgICAqIC8vIFNldCB0aGUgbWFwJ3MgbWF4IGJvdW5kcy5cbiAgICAgKiBtYXAuc2V0TWF4Qm91bmRzKGJvdW5kcyk7XG4gICAgICovXG4gICAgc2V0TWF4Qm91bmRzKGJvdW5kczogTG5nTGF0Qm91bmRzTGlrZSkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybS5zZXRNYXhCb3VuZHMoTG5nTGF0Qm91bmRzLmNvbnZlcnQoYm91bmRzKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGNsZWFycyB0aGUgbWFwJ3MgbWluaW11bSB6b29tIGxldmVsLlxuICAgICAqIElmIHRoZSBtYXAncyBjdXJyZW50IHpvb20gbGV2ZWwgaXMgbG93ZXIgdGhhbiB0aGUgbmV3IG1pbmltdW0sXG4gICAgICogdGhlIG1hcCB3aWxsIHpvb20gdG8gdGhlIG5ldyBtaW5pbXVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBtaW5ab29tIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgdG8gc2V0ICgwLTI0KS5cbiAgICAgKiAgIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGN1cnJlbnQgbWluaW11bSB6b29tIChpLmUuIHNldHMgaXQgdG8gMCkuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0TWluWm9vbSgxMi4yNSk7XG4gICAgICovXG4gICAgc2V0TWluWm9vbShtaW5ab29tPzogP251bWJlcikge1xuXG4gICAgICAgIG1pblpvb20gPSBtaW5ab29tID09PSBudWxsIHx8IG1pblpvb20gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNaW5ab29tIDogbWluWm9vbTtcblxuICAgICAgICBpZiAobWluWm9vbSA+PSBkZWZhdWx0TWluWm9vbSAmJiBtaW5ab29tIDw9IHRoaXMudHJhbnNmb3JtLm1heFpvb20pIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLm1pblpvb20gPSBtaW5ab29tO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdldFpvb20oKSA8IG1pblpvb20pIHRoaXMuc2V0Wm9vbShtaW5ab29tKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgfSBlbHNlIHRocm93IG5ldyBFcnJvcihgbWluWm9vbSBtdXN0IGJlIGJldHdlZW4gJHtkZWZhdWx0TWluWm9vbX0gYW5kIHRoZSBjdXJyZW50IG1heFpvb20sIGluY2x1c2l2ZWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIG1pbmltdW0gYWxsb3dhYmxlIHpvb20gbGV2ZWwuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBtaW5ab29tXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbWluWm9vbSA9IG1hcC5nZXRNaW5ab29tKCk7XG4gICAgICovXG4gICAgZ2V0TWluWm9vbSgpIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb207IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBtYXhpbXVtIHpvb20gbGV2ZWwuXG4gICAgICogSWYgdGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbCBpcyBoaWdoZXIgdGhhbiB0aGUgbmV3IG1heGltdW0sXG4gICAgICogdGhlIG1hcCB3aWxsIHpvb20gdG8gdGhlIG5ldyBtYXhpbXVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBtYXhab29tIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gc2V0LlxuICAgICAqICAgSWYgYG51bGxgIG9yIGB1bmRlZmluZWRgIGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY3VycmVudCBtYXhpbXVtIHpvb20gKHNldHMgaXQgdG8gMjIpLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldE1heFpvb20oMTguNzUpO1xuICAgICAqL1xuICAgIHNldE1heFpvb20obWF4Wm9vbT86ID9udW1iZXIpIHtcblxuICAgICAgICBtYXhab29tID0gbWF4Wm9vbSA9PT0gbnVsbCB8fCBtYXhab29tID09PSB1bmRlZmluZWQgPyBkZWZhdWx0TWF4Wm9vbSA6IG1heFpvb207XG5cbiAgICAgICAgaWYgKG1heFpvb20gPj0gdGhpcy50cmFuc2Zvcm0ubWluWm9vbSkge1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSA9IG1heFpvb207XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Wm9vbSgpID4gbWF4Wm9vbSkgdGhpcy5zZXRab29tKG1heFpvb20pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblpvb21gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBtYXhpbXVtIGFsbG93YWJsZSB6b29tIGxldmVsLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn0gbWF4Wm9vbVxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1heFpvb20gPSBtYXAuZ2V0TWF4Wm9vbSgpO1xuICAgICAqL1xuICAgIGdldE1heFpvb20oKSB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5tYXhab29tOyB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiBgcmVuZGVyV29ybGRDb3BpZXNgLiBJZiBgdHJ1ZWAsIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgd29ybGQgd2lsbCBiZSByZW5kZXJlZCBzaWRlIGJ5IHNpZGUgYmV5b25kIC0xODAgYW5kIDE4MCBkZWdyZWVzIGxvbmdpdHVkZS4gSWYgc2V0IHRvIGBmYWxzZWA6XG4gICAgICogLSBXaGVuIHRoZSBtYXAgaXMgem9vbWVkIG91dCBmYXIgZW5vdWdoIHRoYXQgYSBzaW5nbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHdvcmxkIGRvZXMgbm90IGZpbGwgdGhlIG1hcCdzIGVudGlyZVxuICAgICAqIGNvbnRhaW5lciwgdGhlcmUgd2lsbCBiZSBibGFuayBzcGFjZSBiZXlvbmQgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLlxuICAgICAqIC0gRmVhdHVyZXMgdGhhdCBjcm9zcyAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUgd2lsbCBiZSBjdXQgaW4gdHdvICh3aXRoIG9uZSBwb3J0aW9uIG9uIHRoZSByaWdodCBlZGdlIG9mIHRoZVxuICAgICAqIG1hcCBhbmQgdGhlIG90aGVyIG9uIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIG1hcCkgYXQgZXZlcnkgem9vbSBsZXZlbC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmVuZGVyV29ybGRDb3BpZXNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciB3b3JsZENvcGllc1JlbmRlcmVkID0gbWFwLmdldFJlbmRlcldvcmxkQ29waWVzKCk7XG4gICAgICogQHNlZSBbUmVuZGVyIHdvcmxkIGNvcGllc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcmVuZGVyLXdvcmxkLWNvcGllcy8pXG4gICAgICovXG4gICAgZ2V0UmVuZGVyV29ybGRDb3BpZXMoKSB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllczsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RhdGUgb2YgYHJlbmRlcldvcmxkQ29waWVzYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVuZGVyV29ybGRDb3BpZXMgSWYgYHRydWVgLCBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHdvcmxkIHdpbGwgYmUgcmVuZGVyZWQgc2lkZSBieSBzaWRlIGJleW9uZCAtMTgwIGFuZCAxODAgZGVncmVlcyBsb25naXR1ZGUuIElmIHNldCB0byBgZmFsc2VgOlxuICAgICAqIC0gV2hlbiB0aGUgbWFwIGlzIHpvb21lZCBvdXQgZmFyIGVub3VnaCB0aGF0IGEgc2luZ2xlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3b3JsZCBkb2VzIG5vdCBmaWxsIHRoZSBtYXAncyBlbnRpcmVcbiAgICAgKiBjb250YWluZXIsIHRoZXJlIHdpbGwgYmUgYmxhbmsgc3BhY2UgYmV5b25kIDE4MCBhbmQgLTE4MCBkZWdyZWVzIGxvbmdpdHVkZS5cbiAgICAgKiAtIEZlYXR1cmVzIHRoYXQgY3Jvc3MgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlIHdpbGwgYmUgY3V0IGluIHR3byAod2l0aCBvbmUgcG9ydGlvbiBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGVcbiAgICAgKiBtYXAgYW5kIHRoZSBvdGhlciBvbiB0aGUgbGVmdCBlZGdlIG9mIHRoZSBtYXApIGF0IGV2ZXJ5IHpvb20gbGV2ZWwuXG4gICAgICpcbiAgICAgKiBgdW5kZWZpbmVkYCBpcyB0cmVhdGVkIGFzIGB0cnVlYCwgYG51bGxgIGlzIHRyZWF0ZWQgYXMgYGZhbHNlYC5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRSZW5kZXJXb3JsZENvcGllcyh0cnVlKTtcbiAgICAgKiBAc2VlIFtSZW5kZXIgd29ybGQgY29waWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9yZW5kZXItd29ybGQtY29waWVzLylcbiAgICAgKi9cbiAgICBzZXRSZW5kZXJXb3JsZENvcGllcyhyZW5kZXJXb3JsZENvcGllcz86ID9ib29sZWFuKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzID0gcmVuZGVyV29ybGRDb3BpZXM7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEge0BsaW5rIFBvaW50fSByZXByZXNlbnRpbmcgcGl4ZWwgY29vcmRpbmF0ZXMsIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBgY29udGFpbmVyYCxcbiAgICAgKiB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHNwZWNpZmllZCBnZW9ncmFwaGljYWwgbG9jYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IGxuZ2xhdCBUaGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIHRvIHByb2plY3QuXG4gICAgICogQHJldHVybnMge1BvaW50fSBUaGUge0BsaW5rIFBvaW50fSBjb3JyZXNwb25kaW5nIHRvIGBsbmdsYXRgLCByZWxhdGl2ZSB0byB0aGUgbWFwJ3MgYGNvbnRhaW5lcmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgY29vcmRpbmF0ZSA9IFstMTIyLjQyMDY3OSwgMzcuNzcyNTM3XTtcbiAgICAgKiB2YXIgcG9pbnQgPSBtYXAucHJvamVjdChjb29yZGluYXRlKTtcbiAgICAgKi9cbiAgICBwcm9qZWN0KGxuZ2xhdDogTG5nTGF0TGlrZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChMbmdMYXQuY29udmVydChsbmdsYXQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEge0BsaW5rIExuZ0xhdH0gcmVwcmVzZW50aW5nIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyB0aGF0IGNvcnJlc3BvbmRcbiAgICAgKiB0byB0aGUgc3BlY2lmaWVkIHBpeGVsIGNvb3JkaW5hdGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IHBvaW50IFRoZSBwaXhlbCBjb29yZGluYXRlcyB0byB1bnByb2plY3QuXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIHtAbGluayBMbmdMYXR9IGNvcnJlc3BvbmRpbmcgdG8gYHBvaW50YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICogICAvLyBXaGVuIHRoZSBtYXAgaXMgY2xpY2tlZCwgZ2V0IHRoZSBnZW9ncmFwaGljIGNvb3JkaW5hdGUuXG4gICAgICogICB2YXIgY29vcmRpbmF0ZSA9IG1hcC51bnByb2plY3QoZS5wb2ludCk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgdW5wcm9qZWN0KHBvaW50OiBQb2ludExpa2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oUG9pbnQuY29udmVydChwb2ludCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFwIGlzIHBhbm5pbmcsIHpvb21pbmcsIHJvdGF0aW5nLCBvciBwaXRjaGluZyBkdWUgdG8gYSBjYW1lcmEgYW5pbWF0aW9uIG9yIHVzZXIgZ2VzdHVyZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBpc01vdmluZyA9IG1hcC5pc01vdmluZygpO1xuICAgICAqL1xuICAgIGlzTW92aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW92aW5nIHx8XG4gICAgICAgICAgICB0aGlzLmRyYWdQYW4uaXNBY3RpdmUoKSB8fFxuICAgICAgICAgICAgdGhpcy5kcmFnUm90YXRlLmlzQWN0aXZlKCkgfHxcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsWm9vbS5pc0FjdGl2ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFwIGlzIHpvb21pbmcgZHVlIHRvIGEgY2FtZXJhIGFuaW1hdGlvbiBvciB1c2VyIGdlc3R1cmUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgaXNab29taW5nID0gbWFwLmlzWm9vbWluZygpO1xuICAgICAqL1xuICAgIGlzWm9vbWluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3pvb21pbmcgfHxcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsWm9vbS5pc1pvb21pbmcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1hcCBpcyByb3RhdGluZyBkdWUgdG8gYSBjYW1lcmEgYW5pbWF0aW9uIG9yIHVzZXIgZ2VzdHVyZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5pc1JvdGF0aW5nKCk7XG4gICAgICovXG4gICAgaXNSb3RhdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdGF0aW5nIHx8XG4gICAgICAgICAgICB0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgZm9yIGV2ZW50cyBvZiBhIHNwZWNpZmllZCB0eXBlLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBuYW1lIG9uXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIGFkZCBhIGxpc3RlbiBmb3IuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICAgKiAgIFRoZSBsaXN0ZW5lciBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZGF0YSBvYmplY3QgcGFzc2VkIHRvIGBmaXJlYCxcbiAgICAgKiAgIGV4dGVuZGVkIHdpdGggYHRhcmdldGAgYW5kIGB0eXBlYCBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIGZvciBldmVudHMgb2YgYSBzcGVjaWZpZWQgdHlwZSBvY2N1cnJpbmcgb24gZmVhdHVyZXMgaW4gYSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBsaXN0ZW4gZm9yOyBvbmUgb2YgYCdtb3VzZWRvd24nYCwgYCdtb3VzZXVwJ2AsIGAnY2xpY2snYCwgYCdkYmxjbGljaydgLFxuICAgICAqIGAnbW91c2Vtb3ZlJ2AsIGAnbW91c2VlbnRlcidgLCBgJ21vdXNlbGVhdmUnYCwgYCdtb3VzZW92ZXInYCwgYCdtb3VzZW91dCdgLCBgJ2NvbnRleHRtZW51J2AsIGAndG91Y2hzdGFydCdgLFxuICAgICAqIGAndG91Y2hlbmQnYCwgb3IgYCd0b3VjaGNhbmNlbCdgLiBgbW91c2VlbnRlcmAgYW5kIGBtb3VzZW92ZXJgIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGN1cnNvciBlbnRlcnNcbiAgICAgKiBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgc3BlY2lmaWVkIGxheWVyIGZyb20gb3V0c2lkZSB0aGF0IGxheWVyIG9yIG91dHNpZGUgdGhlIG1hcCBjYW52YXMuIGBtb3VzZWxlYXZlYFxuICAgICAqIGFuZCBgbW91c2VvdXRgIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGN1cnNvciBsZWF2ZXMgYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHNwZWNpZmllZCBsYXllciwgb3IgbGVhdmVzXG4gICAgICogdGhlIG1hcCBjYW52YXMuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIGEgc3R5bGUgbGF5ZXIuIE9ubHkgZXZlbnRzIHdob3NlIGxvY2F0aW9uIGlzIHdpdGhpbiBhIHZpc2libGVcbiAgICAgKiBmZWF0dXJlIGluIHRoaXMgbGF5ZXIgd2lsbCB0cmlnZ2VyIHRoZSBsaXN0ZW5lci4gVGhlIGV2ZW50IHdpbGwgaGF2ZSBhIGBmZWF0dXJlc2AgcHJvcGVydHkgY29udGFpbmluZ1xuICAgICAqIGFuIGFycmF5IG9mIHRoZSBtYXRjaGluZyBmZWF0dXJlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIG9uKHR5cGU6IE1hcEV2ZW50LCBsYXllcklkOiBhbnksIGxpc3RlbmVyOiBhbnkpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5vbih0eXBlLCBsYXllcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbGVnYXRlZExpc3RlbmVyID0gKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PT0gJ21vdXNlb3ZlcicpIHtcbiAgICAgICAgICAgICAgICBsZXQgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5nZXRMYXllcihsYXllcklkKSA/IHRoaXMucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUucG9pbnQsIHtsYXllcnM6IFtsYXllcklkXX0pIDogW107XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1vdXNlaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBuZXcgTWFwTW91c2VFdmVudCh0eXBlLCB0aGlzLCBlLm9yaWdpbmFsRXZlbnQsIHtmZWF0dXJlc30pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgbW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB7bGF5ZXI6IGxheWVySWQsIGxpc3RlbmVyLCBkZWxlZ2F0ZXM6IHttb3VzZW1vdmUsIG1vdXNlb3V0fX07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdtb3VzZWxlYXZlJyB8fCB0eXBlID09PSAnbW91c2VvdXQnKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3VzZW1vdmUgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCkgPyB0aGlzLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLnBvaW50LCB7bGF5ZXJzOiBbbGF5ZXJJZF19KSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb3VzZWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIG5ldyBNYXBNb3VzZUV2ZW50KHR5cGUsIHRoaXMsIGUub3JpZ2luYWxFdmVudCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3VzZW91dCA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb3VzZWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIG5ldyBNYXBNb3VzZUV2ZW50KHR5cGUsIHRoaXMsIGUub3JpZ2luYWxFdmVudCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge2xheWVyOiBsYXllcklkLCBsaXN0ZW5lciwgZGVsZWdhdGVzOiB7bW91c2Vtb3ZlLCBtb3VzZW91dH19O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxlZ2F0ZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5nZXRMYXllcihsYXllcklkKSA/IHRoaXMucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUucG9pbnQsIHtsYXllcnM6IFtsYXllcklkXX0pIDogW107XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBtdXRhdGUgdGhlIG9yaWdpbmFsIGV2ZW50LCBzbyB0aGF0IHByZXZlbnREZWZhdWx0IHdvcmtzIGFzIGV4cGVjdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlLmZlYXR1cmVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge2xheWVyOiBsYXllcklkLCBsaXN0ZW5lciwgZGVsZWdhdGVzOiB7W3R5cGVdOiBkZWxlZ2F0ZX19O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuXG4gICAgICAgIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyA9IHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyB8fCB7fTtcbiAgICAgICAgdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdID0gdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdIHx8IFtdO1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV0ucHVzaChkZWxlZ2F0ZWRMaXN0ZW5lcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBpbiBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMub24oKGV2ZW50OiBhbnkpLCBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXNbZXZlbnRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgcHJldmlvdXNseSBhZGRlZCB3aXRoIGBNYXAjb25gLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBuYW1lIG9mZlxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSBwcmV2aW91c2x5IHVzZWQgdG8gaW5zdGFsbCB0aGUgbGlzdGVuZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHByZXZpb3VzbHkgaW5zdGFsbGVkIGFzIGEgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFuIGV2ZW50IGxpc3RlbmVyIGZvciBsYXllci1zcGVjaWZpYyBldmVudHMgcHJldmlvdXNseSBhZGRlZCB3aXRoIGBNYXAjb25gLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgcHJldmlvdXNseSB1c2VkIHRvIGluc3RhbGwgdGhlIGxpc3RlbmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBsYXllciBJRCBwcmV2aW91c2x5IHVzZWQgdG8gaW5zdGFsbCB0aGUgbGlzdGVuZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHByZXZpb3VzbHkgaW5zdGFsbGVkIGFzIGEgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgb2ZmKHR5cGU6IE1hcEV2ZW50LCBsYXllcklkOiBhbnksIGxpc3RlbmVyOiBhbnkpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5vZmYodHlwZSwgbGF5ZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzICYmIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0eXBlXSkge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxlZ2F0ZWRMaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGVkTGlzdGVuZXIubGF5ZXIgPT09IGxheWVySWQgJiYgZGVsZWdhdGVkTGlzdGVuZXIubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgaW4gZGVsZWdhdGVkTGlzdGVuZXIuZGVsZWdhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZigoZXZlbnQ6IGFueSksIGRlbGVnYXRlZExpc3RlbmVyLmRlbGVnYXRlc1tldmVudF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgW0dlb0pTT05dKGh0dHA6Ly9nZW9qc29uLm9yZy8pXG4gICAgICogW0ZlYXR1cmUgb2JqZWN0c10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc5NDYjc2VjdGlvbi0zLjIpXG4gICAgICogcmVwcmVzZW50aW5nIHZpc2libGUgZmVhdHVyZXMgdGhhdCBzYXRpc2Z5IHRoZSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V8QXJyYXk8UG9pbnRMaWtlPn0gW2dlb21ldHJ5XSAtIFRoZSBnZW9tZXRyeSBvZiB0aGUgcXVlcnkgcmVnaW9uOlxuICAgICAqIGVpdGhlciBhIHNpbmdsZSBwb2ludCBvciBzb3V0aHdlc3QgYW5kIG5vcnRoZWFzdCBwb2ludHMgZGVzY3JpYmluZyBhIGJvdW5kaW5nIGJveC5cbiAgICAgKiBPbWl0dGluZyB0aGlzIHBhcmFtZXRlciAoaS5lLiBjYWxsaW5nIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSB3aXRoIHplcm8gYXJndW1lbnRzLFxuICAgICAqIG9yIHdpdGggb25seSBhIGBvcHRpb25zYCBhcmd1bWVudCkgaXMgZXF1aXZhbGVudCB0byBwYXNzaW5nIGEgYm91bmRpbmcgYm94IGVuY29tcGFzc2luZyB0aGUgZW50aXJlXG4gICAgICogbWFwIHZpZXdwb3J0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtvcHRpb25zLmxheWVyc10gQW4gYXJyYXkgb2YgW3N0eWxlIGxheWVyIElEc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVyLWlkKSBmb3IgdGhlIHF1ZXJ5IHRvIGluc3BlY3QuXG4gICAgICogICBPbmx5IGZlYXR1cmVzIHdpdGhpbiB0aGVzZSBsYXllcnMgd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgbGF5ZXJzIHdpbGwgYmUgY2hlY2tlZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5maWx0ZXJdIEEgW2ZpbHRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jb3RoZXItZmlsdGVyKVxuICAgICAqICAgdG8gbGltaXQgcXVlcnkgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgdGhlIFtvcHRpb25zLmZpbHRlcl0gY29uZm9ybXMgdG8gdGhlIE1hcGJveCBHTCBTdHlsZSBTcGVjaWZpY2F0aW9uLiBEaXNhYmxpbmcgdmFsaWRhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGhhdmUgcHJldmlvdXNseSB2YWxpZGF0ZWQgdGhlIHZhbHVlcyB5b3Ugd2lsbCBiZSBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQW4gYXJyYXkgb2YgW0dlb0pTT05dKGh0dHA6Ly9nZW9qc29uLm9yZy8pXG4gICAgICogW2ZlYXR1cmUgb2JqZWN0c10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc5NDYjc2VjdGlvbi0zLjIpLlxuICAgICAqXG4gICAgICogVGhlIGBwcm9wZXJ0aWVzYCB2YWx1ZSBvZiBlYWNoIHJldHVybmVkIGZlYXR1cmUgb2JqZWN0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIG9mIGl0cyBzb3VyY2UgZmVhdHVyZS4gRm9yIEdlb0pTT04gc291cmNlcywgb25seVxuICAgICAqIHN0cmluZyBhbmQgbnVtZXJpYyBwcm9wZXJ0eSB2YWx1ZXMgYXJlIHN1cHBvcnRlZCAoaS5lLiBgbnVsbGAsIGBBcnJheWAsIGFuZCBgT2JqZWN0YCB2YWx1ZXMgYXJlIG5vdCBzdXBwb3J0ZWQpLlxuICAgICAqXG4gICAgICogRWFjaCBmZWF0dXJlIGluY2x1ZGVzIHRvcC1sZXZlbCBgbGF5ZXJgLCBgc291cmNlYCwgYW5kIGBzb3VyY2VMYXllcmAgcHJvcGVydGllcy4gVGhlIGBsYXllcmAgcHJvcGVydHkgaXMgYW4gb2JqZWN0XG4gICAgICogcmVwcmVzZW50aW5nIHRoZSBzdHlsZSBsYXllciB0byAgd2hpY2ggdGhlIGZlYXR1cmUgYmVsb25ncy4gTGF5b3V0IGFuZCBwYWludCBwcm9wZXJ0aWVzIGluIHRoaXMgb2JqZWN0IGNvbnRhaW4gdmFsdWVzXG4gICAgICogd2hpY2ggYXJlIGZ1bGx5IGV2YWx1YXRlZCBmb3IgdGhlIGdpdmVuIHpvb20gbGV2ZWwgYW5kIGZlYXR1cmUuXG4gICAgICpcbiAgICAgKiBPbmx5IGZlYXR1cmVzIHRoYXQgYXJlIGN1cnJlbnRseSByZW5kZXJlZCBhcmUgaW5jbHVkZWQuIFNvbWUgZmVhdHVyZXMgd2lsbCAqKm5vdCoqIGJlIGluY2x1ZGVkLCBsaWtlOlxuICAgICAqXG4gICAgICogLSBGZWF0dXJlcyBmcm9tIGxheWVycyB3aG9zZSBgdmlzaWJpbGl0eWAgcHJvcGVydHkgaXMgYFwibm9uZVwiYC5cbiAgICAgKiAtIEZlYXR1cmVzIGZyb20gbGF5ZXJzIHdob3NlIHpvb20gcmFuZ2UgZXhjbHVkZXMgdGhlIGN1cnJlbnQgem9vbSBsZXZlbC5cbiAgICAgKiAtIFN5bWJvbCBmZWF0dXJlcyB0aGF0IGhhdmUgYmVlbiBoaWRkZW4gZHVlIHRvIHRleHQgb3IgaWNvbiBjb2xsaXNpb24uXG4gICAgICpcbiAgICAgKiBGZWF0dXJlcyBmcm9tIGFsbCBvdGhlciBsYXllcnMgYXJlIGluY2x1ZGVkLCBpbmNsdWRpbmcgZmVhdHVyZXMgdGhhdCBtYXkgaGF2ZSBubyB2aXNpYmxlXG4gICAgICogY29udHJpYnV0aW9uIHRvIHRoZSByZW5kZXJlZCByZXN1bHQ7IGZvciBleGFtcGxlLCBiZWNhdXNlIHRoZSBsYXllcidzIG9wYWNpdHkgb3IgY29sb3IgYWxwaGEgY29tcG9uZW50IGlzIHNldCB0b1xuICAgICAqIDAuXG4gICAgICpcbiAgICAgKiBUaGUgdG9wbW9zdCByZW5kZXJlZCBmZWF0dXJlIGFwcGVhcnMgZmlyc3QgaW4gdGhlIHJldHVybmVkIGFycmF5LCBhbmQgc3Vic2VxdWVudCBmZWF0dXJlcyBhcmUgc29ydGVkIGJ5XG4gICAgICogZGVzY2VuZGluZyB6LW9yZGVyLiBGZWF0dXJlcyB0aGF0IGFyZSByZW5kZXJlZCBtdWx0aXBsZSB0aW1lcyAoZHVlIHRvIHdyYXBwaW5nIGFjcm9zcyB0aGUgYW50aW1lcmlkaWFuIGF0IGxvd1xuICAgICAqIHpvb20gbGV2ZWxzKSBhcmUgcmV0dXJuZWQgb25seSBvbmNlICh0aG91Z2ggc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNhdmVhdCkuXG4gICAgICpcbiAgICAgKiBCZWNhdXNlIGZlYXR1cmVzIGNvbWUgZnJvbSB0aWxlZCB2ZWN0b3IgZGF0YSBvciBHZW9KU09OIGRhdGEgdGhhdCBpcyBjb252ZXJ0ZWQgdG8gdGlsZXMgaW50ZXJuYWxseSwgZmVhdHVyZVxuICAgICAqIGdlb21ldHJpZXMgbWF5IGJlIHNwbGl0IG9yIGR1cGxpY2F0ZWQgYWNyb3NzIHRpbGUgYm91bmRhcmllcyBhbmQsIGFzIGEgcmVzdWx0LCBmZWF0dXJlcyBtYXkgYXBwZWFyIG11bHRpcGxlXG4gICAgICogdGltZXMgaW4gcXVlcnkgcmVzdWx0cy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlcmUgaXMgYSBoaWdod2F5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIGEgcXVlcnkuXG4gICAgICogVGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5IHdpbGwgYmUgdGhvc2UgcGFydHMgb2YgdGhlIGhpZ2h3YXkgdGhhdCBsaWUgd2l0aGluIHRoZSBtYXAgdGlsZXMgY292ZXJpbmcgdGhlIGJvdW5kaW5nXG4gICAgICogcmVjdGFuZ2xlLCBldmVuIGlmIHRoZSBoaWdod2F5IGV4dGVuZHMgaW50byBvdGhlciB0aWxlcywgYW5kIHRoZSBwb3J0aW9uIG9mIHRoZSBoaWdod2F5IHdpdGhpbiBlYWNoIG1hcCB0aWxlXG4gICAgICogd2lsbCBiZSByZXR1cm5lZCBhcyBhIHNlcGFyYXRlIGZlYXR1cmUuIFNpbWlsYXJseSwgYSBwb2ludCBmZWF0dXJlIG5lYXIgYSB0aWxlIGJvdW5kYXJ5IG1heSBhcHBlYXIgaW4gbXVsdGlwbGVcbiAgICAgKiB0aWxlcyBkdWUgdG8gdGlsZSBidWZmZXJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEZpbmQgYWxsIGZlYXR1cmVzIGF0IGEgcG9pbnRcbiAgICAgKiB2YXIgZmVhdHVyZXMgPSBtYXAucXVlcnlSZW5kZXJlZEZlYXR1cmVzKFxuICAgICAqICAgWzIwLCAzNV0sXG4gICAgICogICB7IGxheWVyczogWydteS1sYXllci1uYW1lJ10gfVxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEZpbmQgYWxsIGZlYXR1cmVzIHdpdGhpbiBhIHN0YXRpYyBib3VuZGluZyBib3hcbiAgICAgKiB2YXIgZmVhdHVyZXMgPSBtYXAucXVlcnlSZW5kZXJlZEZlYXR1cmVzKFxuICAgICAqICAgW1sxMCwgMjBdLCBbMzAsIDUwXV0sXG4gICAgICogICB7IGxheWVyczogWydteS1sYXllci1uYW1lJ10gfVxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEZpbmQgYWxsIGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveCBhcm91bmQgYSBwb2ludFxuICAgICAqIHZhciB3aWR0aCA9IDEwO1xuICAgICAqIHZhciBoZWlnaHQgPSAyMDtcbiAgICAgKiB2YXIgZmVhdHVyZXMgPSBtYXAucXVlcnlSZW5kZXJlZEZlYXR1cmVzKFtcbiAgICAgKiAgIFtwb2ludC54IC0gd2lkdGggLyAyLCBwb2ludC55IC0gaGVpZ2h0IC8gMl0sXG4gICAgICogICBbcG9pbnQueCArIHdpZHRoIC8gMiwgcG9pbnQueSArIGhlaWdodCAvIDJdXG4gICAgICogXSwgeyBsYXllcnM6IFsnbXktbGF5ZXItbmFtZSddIH0pO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBRdWVyeSBhbGwgcmVuZGVyZWQgZmVhdHVyZXMgZnJvbSBhIHNpbmdsZSBsYXllclxuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoeyBsYXllcnM6IFsnbXktbGF5ZXItbmFtZSddIH0pO1xuICAgICAqIEBzZWUgW0dldCBmZWF0dXJlcyB1bmRlciB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9xdWVyeXJlbmRlcmVkZmVhdHVyZXMvKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbRmlsdGVyIGZlYXR1cmVzIHdpdGhpbiBtYXAgdmlld10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maWx0ZXItZmVhdHVyZXMtd2l0aGluLW1hcC12aWV3LylcbiAgICAgKi9cbiAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMoZ2VvbWV0cnk/OiBQb2ludExpa2UgfCBbUG9pbnRMaWtlLCBQb2ludExpa2VdLCBvcHRpb25zPzogT2JqZWN0KSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJhbWV0ZXIgY2FuIGJlIG9taXR0ZWQgZW50aXJlbHksIG1ha2luZyB0aGlzIGVmZmVjdGl2ZWx5IGFuIG92ZXJsb2FkZWQgbWV0aG9kXG4gICAgICAgIC8vIHdpdGggdHdvIHNpZ25hdHVyZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMoZ2VvbWV0cnk6IFBvaW50TGlrZSB8IFtQb2ludExpa2UsIFBvaW50TGlrZV0sIG9wdGlvbnM/OiBPYmplY3QpXG4gICAgICAgIC8vICAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMob3B0aW9ucz86IE9iamVjdClcbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlcmUgbm8gd2F5IHRvIGV4cHJlc3MgdGhhdCBpbiBhIHdheSB0aGF0J3MgY29tcGF0aWJsZSB3aXRoIGJvdGggZmxvdyBhbmQgZG9jdW1lbnRhdGlvbi5qcy5cbiAgICAgICAgLy8gUmVsYXRlZDogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE1NTZcblxuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgJiYgZ2VvbWV0cnkgIT09IHVuZGVmaW5lZCAmJiAhKGdlb21ldHJ5IGluc3RhbmNlb2YgUG9pbnQpICYmICFBcnJheS5pc0FycmF5KGdlb21ldHJ5KSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IChnZW9tZXRyeTogT2JqZWN0KTtcbiAgICAgICAgICAgIGdlb21ldHJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvbWV0cnkgfHwgW1swLCAwXSwgW3RoaXMudHJhbnNmb3JtLndpZHRoLCB0aGlzLnRyYW5zZm9ybS5oZWlnaHRdXTtcblxuICAgICAgICBsZXQgcXVlcnlHZW9tZXRyeTtcbiAgICAgICAgaWYgKGdlb21ldHJ5IGluc3RhbmNlb2YgUG9pbnQgfHwgdHlwZW9mIGdlb21ldHJ5WzBdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSA9IFtQb2ludC5jb252ZXJ0KGdlb21ldHJ5KV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0bCA9IFBvaW50LmNvbnZlcnQoZ2VvbWV0cnlbMF0pO1xuICAgICAgICAgICAgY29uc3QgYnIgPSBQb2ludC5jb252ZXJ0KGdlb21ldHJ5WzFdKTtcbiAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnkgPSBbdGwsIG5ldyBQb2ludChici54LCB0bC55KSwgYnIsIG5ldyBQb2ludCh0bC54LCBici55KSwgdGxdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHF1ZXJ5R2VvbWV0cnksIG9wdGlvbnMsIHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFtHZW9KU09OXShodHRwOi8vZ2VvanNvbi5vcmcvKVxuICAgICAqIFtGZWF0dXJlIG9iamVjdHNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3OTQ2I3NlY3Rpb24tMy4yKVxuICAgICAqIHJlcHJlc2VudGluZyBmZWF0dXJlcyB3aXRoaW4gdGhlIHNwZWNpZmllZCB2ZWN0b3IgdGlsZSBvciBHZW9KU09OIHNvdXJjZSB0aGF0IHNhdGlzZnkgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlSWQgVGhlIElEIG9mIHRoZSB2ZWN0b3IgdGlsZSBvciBHZW9KU09OIHNvdXJjZSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtZXRlcnNdXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbWV0ZXJzLnNvdXJjZUxheWVyXSBUaGUgbmFtZSBvZiB0aGUgW3NvdXJjZSBsYXllcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zb3VyY2UtbGF5ZXIvKVxuICAgICAqICAgdG8gcXVlcnkuICpGb3IgdmVjdG9yIHRpbGUgc291cmNlcywgdGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuKiBGb3IgR2VvSlNPTiBzb3VyY2VzLCBpdCBpcyBpZ25vcmVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJhbWV0ZXJzLmZpbHRlcl0gQSBbZmlsdGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNvdGhlci1maWx0ZXIpXG4gICAgICogICB0byBsaW1pdCBxdWVyeSByZXN1bHRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BhcmFtZXRlcnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgW3BhcmFtZXRlcnMuZmlsdGVyXSBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBbiBhcnJheSBvZiBbR2VvSlNPTl0oaHR0cDovL2dlb2pzb24ub3JnLylcbiAgICAgKiBbRmVhdHVyZSBvYmplY3RzXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NiNzZWN0aW9uLTMuMikuXG4gICAgICpcbiAgICAgKiBJbiBjb250cmFzdCB0byB7QGxpbmsgTWFwI3F1ZXJ5UmVuZGVyZWRGZWF0dXJlc30sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbGwgZmVhdHVyZXMgbWF0Y2hpbmcgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMsXG4gICAgICogd2hldGhlciBvciBub3QgdGhleSBhcmUgcmVuZGVyZWQgYnkgdGhlIGN1cnJlbnQgc3R5bGUgKGkuZS4gdmlzaWJsZSkuIFRoZSBkb21haW4gb2YgdGhlIHF1ZXJ5IGluY2x1ZGVzIGFsbCBjdXJyZW50bHktbG9hZGVkXG4gICAgICogdmVjdG9yIHRpbGVzIGFuZCBHZW9KU09OIHNvdXJjZSB0aWxlczogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aWxlcyBvdXRzaWRlIHRoZSBjdXJyZW50bHlcbiAgICAgKiB2aXNpYmxlIHZpZXdwb3J0LlxuICAgICAqXG4gICAgICogQmVjYXVzZSBmZWF0dXJlcyBjb21lIGZyb20gdGlsZWQgdmVjdG9yIGRhdGEgb3IgR2VvSlNPTiBkYXRhIHRoYXQgaXMgY29udmVydGVkIHRvIHRpbGVzIGludGVybmFsbHksIGZlYXR1cmVcbiAgICAgKiBnZW9tZXRyaWVzIG1heSBiZSBzcGxpdCBvciBkdXBsaWNhdGVkIGFjcm9zcyB0aWxlIGJvdW5kYXJpZXMgYW5kLCBhcyBhIHJlc3VsdCwgZmVhdHVyZXMgbWF5IGFwcGVhciBtdWx0aXBsZVxuICAgICAqIHRpbWVzIGluIHF1ZXJ5IHJlc3VsdHMuIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoZXJlIGlzIGEgaGlnaHdheSBydW5uaW5nIHRocm91Z2ggdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiBhIHF1ZXJ5LlxuICAgICAqIFRoZSByZXN1bHRzIG9mIHRoZSBxdWVyeSB3aWxsIGJlIHRob3NlIHBhcnRzIG9mIHRoZSBoaWdod2F5IHRoYXQgbGllIHdpdGhpbiB0aGUgbWFwIHRpbGVzIGNvdmVyaW5nIHRoZSBib3VuZGluZ1xuICAgICAqIHJlY3RhbmdsZSwgZXZlbiBpZiB0aGUgaGlnaHdheSBleHRlbmRzIGludG8gb3RoZXIgdGlsZXMsIGFuZCB0aGUgcG9ydGlvbiBvZiB0aGUgaGlnaHdheSB3aXRoaW4gZWFjaCBtYXAgdGlsZVxuICAgICAqIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzZXBhcmF0ZSBmZWF0dXJlLiBTaW1pbGFybHksIGEgcG9pbnQgZmVhdHVyZSBuZWFyIGEgdGlsZSBib3VuZGFyeSBtYXkgYXBwZWFyIGluIG11bHRpcGxlXG4gICAgICogdGlsZXMgZHVlIHRvIHRpbGUgYnVmZmVyaW5nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBGaW5kIGFsbCBmZWF0dXJlcyBpbiBvbmUgc291cmNlIGxheWVyIGluIGEgdmVjdG9yIHNvdXJjZVxuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVNvdXJjZUZlYXR1cmVzKCd5b3VyLXNvdXJjZS1pZCcsIHtcbiAgICAgKiAgIHNvdXJjZUxheWVyOiAneW91ci1zb3VyY2UtbGF5ZXInXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgY29udGFpbmluZyBzaW1pbGFyIGRhdGFdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcXVlcnktc2ltaWxhci1mZWF0dXJlcy8pXG4gICAgICovXG4gICAgcXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VJZDogc3RyaW5nLCBwYXJhbWV0ZXJzOiA/e3NvdXJjZUxheWVyOiA/c3RyaW5nLCBmaWx0ZXI6ID9BcnJheTxhbnk+LCB2YWxpZGF0ZT86IGJvb2xlYW59KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnF1ZXJ5U291cmNlRmVhdHVyZXMoc291cmNlSWQsIHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIG1hcCdzIE1hcGJveCBzdHlsZSBvYmplY3Qgd2l0aCBhIG5ldyB2YWx1ZS4gSWYgYSBzdHlsZSBhbHJlYWR5IGlzIHNldCBhbmQgb3B0aW9ucy5kaWZmIGlzIHRydWUsXG4gICAgICogdGhpcyBjb21wYXJlcyB0aGUgc3R5bGUgYWdhaW5zdCB0aGUgbWFwJ3MgY3VycmVudCBzdGF0ZSBhbmQgcGVyZm9ybXMgb25seSB0aGUgY2hhbmdlcyBuZWNlc3NhcnkgdG8gbWFrZVxuICAgICAqIHRoZSBtYXAgc3R5bGUgbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3R5bGUgQSBKU09OIG9iamVjdCBjb25mb3JtaW5nIHRvIHRoZSBzY2hlbWEgZGVzY3JpYmVkIGluIHRoZVxuICAgICAqICAgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL21hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKSwgb3IgYSBVUkwgdG8gc3VjaCBKU09OLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRpZmY9dHJ1ZV0gSWYgZmFsc2UsIGZvcmNlIGEgJ2Z1bGwnIHVwZGF0ZSwgcmVtb3ZpbmcgdGhlIGN1cnJlbnQgc3R5bGVcbiAgICAgKiAgIGFuZCBidWlsZGluZyB0aGUgZ2l2ZW4gb25lIGluc3RlYWQgb2YgYXR0ZW1wdGluZyBhIGRpZmYtYmFzZWQgdXBkYXRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk9J3NhbnMtc2VyaWYnXSBEZWZpbmVzIGEgQ1NTXG4gICAgICogICBmb250LWZhbWlseSBmb3IgbG9jYWxseSBvdmVycmlkaW5nIGdlbmVyYXRpb24gb2YgZ2x5cGhzIGluIHRoZSAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocycsICdIaXJhZ2FuYScsICdLYXRha2FuYScgYW5kICdIYW5ndWwgU3lsbGFibGVzJyByYW5nZXMuXG4gICAgICogICBJbiB0aGVzZSByYW5nZXMsIGZvbnQgc2V0dGluZ3MgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUgd2lsbCBiZSBpZ25vcmVkLCBleGNlcHQgZm9yIGZvbnQtd2VpZ2h0IGtleXdvcmRzIChsaWdodC9yZWd1bGFyL21lZGl1bS9ib2xkKS5cbiAgICAgKiAgIFNldCB0byBgZmFsc2VgLCB0byBlbmFibGUgZm9udCBzZXR0aW5ncyBmcm9tIHRoZSBtYXAncyBzdHlsZSBmb3IgdGhlc2UgZ2x5cGggcmFuZ2VzLlxuICAgICAqICAgRm9yY2VzIGEgZnVsbCB1cGRhdGUuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQHNlZSBbQ2hhbmdlIGEgbWFwJ3Mgc3R5bGVdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvc2V0c3R5bGUvKVxuICAgICAqL1xuICAgIHNldFN0eWxlKHN0eWxlOiBTdHlsZVNwZWNpZmljYXRpb24gfCBzdHJpbmcgfCBudWxsLCBvcHRpb25zPzoge2RpZmY/OiBib29sZWFufSAmIFN0eWxlT3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCB7bG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiB0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoKG9wdGlvbnMuZGlmZiAhPT0gZmFsc2UgJiYgb3B0aW9ucy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkgPT09IHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSkgJiYgdGhpcy5zdHlsZSAmJiBzdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlmZlN0eWxlKHN0eWxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5ID0gb3B0aW9ucy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlU3R5bGUoc3R5bGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVN0eWxlKHN0eWxlOiBTdHlsZVNwZWNpZmljYXRpb24gfCBzdHJpbmcgfCBudWxsLCAgb3B0aW9ucz86IHtkaWZmPzogYm9vbGVhbn0gJiBTdHlsZU9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuX3JlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdHlsZSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3R5bGU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBuZXcgU3R5bGUodGhpcywgb3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQodGhpcywge3N0eWxlOiB0aGlzLnN0eWxlfSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUubG9hZFVSTChzdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmxvYWRKU09OKHN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9kaWZmU3R5bGUoc3R5bGU6IFN0eWxlU3BlY2lmaWNhdGlvbiB8IHN0cmluZywgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChzdHlsZSk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5TdHlsZSk7XG4gICAgICAgICAgICBnZXRKU09OKHJlcXVlc3QsIChlcnJvcjogP0Vycm9yLCBqc29uOiA/T2JqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnJvcikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVEaWZmKGpzb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpZmYoc3R5bGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZURpZmYoc3R5bGU6IFN0eWxlU3BlY2lmaWNhdGlvbiwgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHlsZS5zZXRTdGF0ZShzdHlsZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gcGVyZm9ybSBzdHlsZSBkaWZmOiAke2UubWVzc2FnZSB8fCBlLmVycm9yIHx8IGV9LiAgUmVidWlsZGluZyB0aGUgc3R5bGUgZnJvbSBzY3JhdGNoLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTdHlsZShzdHlsZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBNYXBib3ggc3R5bGUgb2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZCB0byByZWNyZWF0ZSB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LlxuICAgICAqL1xuICAgIGdldFN0eWxlKCkge1xuICAgICAgICBpZiAodGhpcy5zdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCdzIHN0eWxlIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzdHlsZSBpcyBmdWxseSBsb2FkZWQuXG4gICAgICovXG4gICAgaXNTdHlsZUxvYWRlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0eWxlKSByZXR1cm4gd2Fybk9uY2UoJ1RoZXJlIGlzIG5vIHN0eWxlIGFkZGVkIHRvIHRoZSBtYXAuJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmxvYWRlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBzb3VyY2UgdG8gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgc291cmNlIHRvIGFkZC4gTXVzdCBub3QgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBzb3VyY2VzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QsIGNvbmZvcm1pbmcgdG8gdGhlXG4gICAgICogTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24ncyBbc291cmNlIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMpIG9yXG4gICAgICoge0BsaW5rIENhbnZhc1NvdXJjZU9wdGlvbnN9LlxuICAgICAqIEBmaXJlcyBzb3VyY2UuYWRkXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuYWRkU291cmNlKCdteS1kYXRhJywge1xuICAgICAqICAgdHlwZTogJ3ZlY3RvcicsXG4gICAgICogICB1cmw6ICdtYXBib3g6Ly9teXVzZXJuYW1lLnRpbGVzZXRpZCdcbiAgICAgKiB9KTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5hZGRTb3VyY2UoJ215LWRhdGEnLCB7XG4gICAgICogICBcInR5cGVcIjogXCJnZW9qc29uXCIsXG4gICAgICogICBcImRhdGFcIjoge1xuICAgICAqICAgICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXG4gICAgICogICAgIFwiZ2VvbWV0cnlcIjoge1xuICAgICAqICAgICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gICAgICogICAgICAgXCJjb29yZGluYXRlc1wiOiBbLTc3LjAzMjMsIDM4LjkxMzFdXG4gICAgICogICAgIH0sXG4gICAgICogICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICogICAgICAgXCJ0aXRsZVwiOiBcIk1hcGJveCBEQ1wiLFxuICAgICAqICAgICAgIFwibWFya2VyLXN5bWJvbFwiOiBcIm1vbnVtZW50XCJcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIH0pO1xuICAgICAqIEBzZWUgVmVjdG9yIHNvdXJjZTogW1Nob3cgYW5kIGhpZGUgbGF5ZXJzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90b2dnbGUtbGF5ZXJzLylcbiAgICAgKiBAc2VlIEdlb0pTT04gc291cmNlOiBbQWRkIGxpdmUgcmVhbHRpbWUgZGF0YV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbGl2ZS1nZW9qc29uLylcbiAgICAgKiBAc2VlIFJhc3RlciBERU0gc291cmNlOiBbQWRkIGhpbGxzaGFkaW5nXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9oaWxsc2hhZGUvKVxuICAgICAqL1xuICAgIGFkZFNvdXJjZShpZDogc3RyaW5nLCBzb3VyY2U6IFNvdXJjZVNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy5zdHlsZS5hZGRTb3VyY2UoaWQsIHNvdXJjZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzb3VyY2UgaXMgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgc291cmNlIHRvIGJlIGNoZWNrZWQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNvdXJjZSBpcyBsb2FkZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc291cmNlTG9hZGVkID0gbWFwLmlzU291cmNlTG9hZGVkKCdiYXRoeW1ldHJ5LWRhdGEnKTtcbiAgICAgKi9cbiAgICBpc1NvdXJjZUxvYWRlZChpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc3R5bGUgJiYgdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbaWRdO1xuICAgICAgICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIElEICcke2lkfSdgKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2UubG9hZGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGFsbCB0aWxlcyBpbiB0aGUgdmlld3BvcnQgZnJvbSBhbGwgc291cmNlcyBvblxuICAgICAqIHRoZSBzdHlsZSBhcmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYWxsIHRpbGVzIGFyZSBsb2FkZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgdGlsZXNMb2FkZWQgPSBtYXAuYXJlVGlsZXNMb2FkZWQoKTtcbiAgICAgKi9cblxuICAgIGFyZVRpbGVzTG9hZGVkKCkge1xuICAgICAgICBjb25zdCBzb3VyY2VzID0gdGhpcy5zdHlsZSAmJiB0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VzW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVzID0gc291cmNlLl90aWxlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgdCBpbiB0aWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1t0XTtcbiAgICAgICAgICAgICAgICBpZiAoISh0aWxlLnN0YXRlID09PSAnbG9hZGVkJyB8fCB0aWxlLnN0YXRlID09PSAnZXJyb3JlZCcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIFtjdXN0b20gc291cmNlIHR5cGVdKCNDdXN0b20gU291cmNlcyksIG1ha2luZyBpdCBhdmFpbGFibGUgZm9yIHVzZSB3aXRoXG4gICAgICoge0BsaW5rIE1hcCNhZGRTb3VyY2V9LlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSB0eXBlOyBzb3VyY2UgZGVmaW5pdGlvbiBvYmplY3RzIHVzZSB0aGlzIG5hbWUgaW4gdGhlIGB7dHlwZTogLi4ufWAgZmllbGQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gU291cmNlVHlwZSBBIHtAbGluayBTb3VyY2V9IGNvbnN0cnVjdG9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aGVuIHRoZSBzb3VyY2UgdHlwZSBpcyByZWFkeSBvciB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICAgICAqL1xuICAgIGFkZFNvdXJjZVR5cGUobmFtZTogc3RyaW5nLCBTb3VyY2VUeXBlOiBhbnksIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5hZGRTb3VyY2VUeXBlKG5hbWUsIFNvdXJjZVR5cGUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgc291cmNlIGZyb20gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgc291cmNlIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5yZW1vdmVTb3VyY2UoJ2JhdGh5bWV0cnktZGF0YScpO1xuICAgICAqL1xuICAgIHJlbW92ZVNvdXJjZShpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlU291cmNlKGlkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzb3VyY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIElEIGluIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSUQgb2YgdGhlIHNvdXJjZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgez9PYmplY3R9IFRoZSBzdHlsZSBzb3VyY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIElELCBvciBgdW5kZWZpbmVkYFxuICAgICAqICAgaWYgdGhlIElEIGNvcnJlc3BvbmRzIHRvIG5vIGV4aXN0aW5nIHNvdXJjZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc291cmNlT2JqZWN0ID0gbWFwLmdldFNvdXJjZSgncG9pbnRzJyk7XG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICogQHNlZSBbQW5pbWF0ZSBhIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FuaW1hdGUtcG9pbnQtYWxvbmctbGluZS8pXG4gICAgICogQHNlZSBbQWRkIGxpdmUgcmVhbHRpbWUgZGF0YV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLWdlb2pzb24vKVxuICAgICAqL1xuICAgIGdldFNvdXJjZShpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldFNvdXJjZShpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGFuIGltYWdlIHRvIHRoZSBzdHlsZS4gVGhpcyBpbWFnZSBjYW4gYmUgZGlzcGxheWVkIG9uIHRoZSBtYXAgbGlrZSBhbnkgb3RoZXIgaWNvbiBpbiB0aGUgc3R5bGUnc1xuICAgICAqIFtzcHJpdGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3ByaXRlLykgdXNpbmcgdGhlIGltYWdlJ3MgSUQgd2l0aFxuICAgICAqIFtgaWNvbi1pbWFnZWBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXlvdXQtc3ltYm9sLWljb24taW1hZ2UpLFxuICAgICAqIFtgYmFja2dyb3VuZC1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWJhY2tncm91bmQtYmFja2dyb3VuZC1wYXR0ZXJuKSxcbiAgICAgKiBbYGZpbGwtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1maWxsLWZpbGwtcGF0dGVybiksXG4gICAgICogb3IgW2BsaW5lLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtbGluZS1saW5lLXBhdHRlcm4pLlxuICAgICAqIEEge0BsaW5rIE1hcCNlcnJvcn0gZXZlbnQgd2lsbCBiZSBmaXJlZCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGluIHRoZSBzcHJpdGUgdG8gYWRkIHRoaXMgaW1hZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBpbWFnZS5cbiAgICAgKiBAcGFyYW0gaW1hZ2UgVGhlIGltYWdlIGFzIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsIG9yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgXG4gICAgICogcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYC5cbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zLnBpeGVsUmF0aW8gVGhlIHJhdGlvIG9mIHBpeGVscyBpbiB0aGUgaW1hZ2UgdG8gcGh5c2ljYWwgcGl4ZWxzIG9uIHRoZSBzY3JlZW5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5zZGYgV2hldGhlciB0aGUgaW1hZ2Ugc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGFuIFNERiBpbWFnZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJZiB0aGUgc3R5bGUncyBzcHJpdGUgZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGFuIGltYWdlIHdpdGggSUQgJ2NhdCcsXG4gICAgICogLy8gYWRkIHRoZSBpbWFnZSAnY2F0LWljb24ucG5nJyB0byB0aGUgc3R5bGUncyBzcHJpdGUgd2l0aCB0aGUgSUQgJ2NhdCcuXG4gICAgICogaWYgKCFtYXAuaGFzSW1hZ2UoJ2NhdCcpKSBtYXAuYWRkSW1hZ2UoJ2NhdCcsICcuL2NhdC1pY29uLnBuZycpO1xuICAgICAqXG4gICAgICogQHNlZSBVc2UgYEhUTUxJbWFnZUVsZW1lbnRgOiBbQWRkIGFuIGljb24gdG8gdGhlIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGQtaW1hZ2UvKVxuICAgICAqIEBzZWUgVXNlIGBJbWFnZURhdGFgOiBbQWRkIGEgZ2VuZXJhdGVkIGljb24gdG8gdGhlIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGQtaW1hZ2UtZ2VuZXJhdGVkLylcbiAgICAgKi9cbiAgICBhZGRJbWFnZShpZDogc3RyaW5nLFxuICAgICAgICAgICAgIGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50IHwgSW1hZ2VEYXRhIHwge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXl9IHwgU3R5bGVJbWFnZUludGVyZmFjZSxcbiAgICAgICAgICAgICB7cGl4ZWxSYXRpbyA9IDEsIHNkZiA9IGZhbHNlfToge3BpeGVsUmF0aW8/OiBudW1iZXIsIHNkZj86IGJvb2xlYW59ID0ge30pIHtcblxuICAgICAgICBjb25zdCB2ZXJzaW9uID0gMDtcblxuICAgICAgICBpZiAoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgZGF0YX0gPSBicm93c2VyLmdldEltYWdlRGF0YShpbWFnZSk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmFkZEltYWdlKGlkLCB7ZGF0YTogbmV3IFJHQkFJbWFnZSh7d2lkdGgsIGhlaWdodH0sIGRhdGEpLCBwaXhlbFJhdGlvLCBzZGYsIHZlcnNpb259KTtcbiAgICAgICAgfSBlbHNlIGlmIChpbWFnZS53aWR0aCA9PT0gdW5kZWZpbmVkIHx8IGltYWdlLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLmFkZEltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCAnICtcbiAgICAgICAgICAgICAgICAnb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCcpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgZGF0YX0gPSBpbWFnZTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJbWFnZSA9ICgoaW1hZ2U6IGFueSk6IFN0eWxlSW1hZ2VJbnRlcmZhY2UpO1xuXG4gICAgICAgICAgICB0aGlzLnN0eWxlLmFkZEltYWdlKGlkLCB7XG4gICAgICAgICAgICAgICAgZGF0YTogbmV3IFJHQkFJbWFnZSh7d2lkdGgsIGhlaWdodH0sIG5ldyBVaW50OEFycmF5KGRhdGEpKSxcbiAgICAgICAgICAgICAgICBwaXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgIHNkZixcbiAgICAgICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgICAgIHVzZXJJbWFnZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh1c2VySW1hZ2Uub25BZGQpIHtcbiAgICAgICAgICAgICAgICB1c2VySW1hZ2Uub25BZGQodGhpcywgaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFuIGV4aXN0aW5nIGltYWdlIGluIGEgc3R5bGUuIFRoaXMgaW1hZ2UgY2FuIGJlIGRpc3BsYXllZCBvbiB0aGUgbWFwIGxpa2UgYW55IG90aGVyIGljb24gaW4gdGhlIHN0eWxlJ3NcbiAgICAgKiBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pIHVzaW5nIHRoZSBpbWFnZSdzIElEIHdpdGhcbiAgICAgKiBbYGljb24taW1hZ2VgXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5b3V0LXN5bWJvbC1pY29uLWltYWdlKSxcbiAgICAgKiBbYGJhY2tncm91bmQtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtcGF0dGVybiksXG4gICAgICogW2BmaWxsLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtZmlsbC1maWxsLXBhdHRlcm4pLFxuICAgICAqIG9yIFtgbGluZS1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWxpbmUtbGluZS1wYXR0ZXJuKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGltYWdlLlxuICAgICAqIEBwYXJhbSBpbWFnZSBUaGUgaW1hZ2UgYXMgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWBcbiAgICAgKiBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJZiBhbiBpbWFnZSB3aXRoIHRoZSBJRCAnY2F0JyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgc3R5bGUncyBzcHJpdGUsXG4gICAgICogLy8gcmVwbGFjZSB0aGF0IGltYWdlIHdpdGggYSBuZXcgaW1hZ2UsICdvdGhlci1jYXQtaWNvbi5wbmcnLlxuICAgICAqIGlmIChtYXAuaGFzSW1hZ2UoJ2NhdCcpKSBtYXAudXBkYXRlSW1hZ2UoJ2NhdCcsICcuL290aGVyLWNhdC1pY29uLnBuZycpO1xuICAgICAqL1xuICAgIHVwZGF0ZUltYWdlKGlkOiBzdHJpbmcsXG4gICAgICAgIGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50IHwgSW1hZ2VEYXRhIHwge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXl9IHwgU3R5bGVJbWFnZUludGVyZmFjZSkge1xuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSW1hZ2UgPSB0aGlzLnN0eWxlLmdldEltYWdlKGlkKTtcbiAgICAgICAgaWYgKCFleGlzdGluZ0ltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnVGhlIG1hcCBoYXMgbm8gaW1hZ2Ugd2l0aCB0aGF0IGlkLiBJZiB5b3UgYXJlIGFkZGluZyBhIG5ldyBpbWFnZSB1c2UgYG1hcC5hZGRJbWFnZSguLi4pYCBpbnN0ZWFkLicpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgPyBicm93c2VyLmdldEltYWdlRGF0YShpbWFnZSkgOiBpbWFnZTtcbiAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHQsIGRhdGF9ID0gaW1hZ2VEYXRhO1xuXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkIHx8IGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLnVwZGF0ZUltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCAnICtcbiAgICAgICAgICAgICAgICAnb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCcpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod2lkdGggIT09IGV4aXN0aW5nSW1hZ2UuZGF0YS53aWR0aCB8fCBoZWlnaHQgIT09IGV4aXN0aW5nSW1hZ2UuZGF0YS5oZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdUaGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgdXBkYXRlZCBpbWFnZSBtdXN0IGJlIHRoYXQgc2FtZSBhcyB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgaW1hZ2UnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29weSA9ICEoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KTtcbiAgICAgICAgZXhpc3RpbmdJbWFnZS5kYXRhLnJlcGxhY2UoZGF0YSwgY29weSk7XG5cbiAgICAgICAgdGhpcy5zdHlsZS51cGRhdGVJbWFnZShpZCwgZXhpc3RpbmdJbWFnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgd2hldGhlciBvciBub3QgYW4gaW1hZ2Ugd2l0aCBhIHNwZWNpZmljIElEIGV4aXN0cyBpbiB0aGUgc3R5bGUuIFRoaXMgY2hlY2tzIGJvdGggaW1hZ2VzXG4gICAgICogaW4gdGhlIHN0eWxlJ3Mgb3JpZ2luYWwgW3Nwcml0ZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zcHJpdGUvKSBhbmQgYW55IGltYWdlc1xuICAgICAqIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIGF0IHJ1bnRpbWUgdXNpbmcge0BsaW5rIGFkZEltYWdlfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGltYWdlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59ICBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBpbWFnZSBleGlzdHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBDaGVjayBpZiBhbiBpbWFnZSB3aXRoIHRoZSBJRCAnY2F0JyBleGlzdHMgaW5cbiAgICAgKiAvLyB0aGUgc3R5bGUncyBzcHJpdGUuXG4gICAgICogdmFyIGNhdEljb25FeGlzdHMgPSBtYXAuaGFzSW1hZ2UoJ2NhdCcpO1xuICAgICAqL1xuICAgIGhhc0ltYWdlKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBpbWFnZSBpZCcpKSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISF0aGlzLnN0eWxlLmdldEltYWdlKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gaW1hZ2UgZnJvbSBhIHN0eWxlLiBUaGlzIGNhbiBiZSBhbiBpbWFnZSBmcm9tIHRoZSBzdHlsZSdzIG9yaWdpbmFsXG4gICAgICogW3Nwcml0ZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zcHJpdGUvKSBvciBhbnkgaW1hZ2VzXG4gICAgICogdGhhdCBoYXZlIGJlZW4gYWRkZWQgYXQgcnVudGltZSB1c2luZyB7QGxpbmsgYWRkSW1hZ2V9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgaW1hZ2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIElmIGFuIGltYWdlIHdpdGggdGhlIElEICdjYXQnIGV4aXN0cyBpblxuICAgICAqIC8vIHRoZSBzdHlsZSdzIHNwcml0ZSwgcmVtb3ZlIGl0LlxuICAgICAqIGlmIChtYXAuaGFzSW1hZ2UoJ2NhdCcpKSBtYXAucmVtb3ZlSW1hZ2UoJ2NhdCcpO1xuICAgICAqL1xuICAgIHJlbW92ZUltYWdlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVJbWFnZShpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBhbiBpbWFnZSBmcm9tIGFuIGV4dGVybmFsIFVSTCB0byBiZSB1c2VkIHdpdGggYE1hcCNhZGRJbWFnZWAuIEV4dGVybmFsXG4gICAgICogZG9tYWlucyBtdXN0IHN1cHBvcnQgW0NPUlNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQWNjZXNzX2NvbnRyb2xfQ09SUykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgb2YgdGhlIGltYWdlIGZpbGUuIEltYWdlIGZpbGUgbXVzdCBiZSBpbiBwbmcsIHdlYnAsIG9yIGpwZyBmb3JtYXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgRXhwZWN0aW5nIGBjYWxsYmFjayhlcnJvciwgZGF0YSlgLiBDYWxsZWQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZCBvciB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBMb2FkIGFuIGltYWdlIGZyb20gYW4gZXh0ZXJuYWwgVVJMLlxuICAgICAqIG1hcC5sb2FkSW1hZ2UoJ2h0dHA6Ly9wbGFjZWtpdHRlbi5jb20vNTAvNTAnLCBmdW5jdGlvbihlcnJvciwgaW1hZ2UpIHtcbiAgICAgKiAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICogICAvLyBBZGQgdGhlIGxvYWRlZCBpbWFnZSB0byB0aGUgc3R5bGUncyBzcHJpdGUgd2l0aCB0aGUgSUQgJ2tpdHRlbicuXG4gICAgICogICBtYXAuYWRkSW1hZ2UoJ2tpdHRlbicsIGltYWdlKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0FkZCBhbiBpY29uIHRvIHRoZSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLylcbiAgICAgKi9cbiAgICBsb2FkSW1hZ2UodXJsOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICBnZXRJbWFnZSh0aGlzLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLkltYWdlKSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyBhbiBBcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIElEcyBvZiBhbGwgaW1hZ2VzIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gdGhlIG1hcC5cbiAgICAqIFRoaXMgaW5jbHVkZXMgYm90aCBpbWFnZXMgZnJvbSB0aGUgc3R5bGUncyBvcmlnaW5hbCBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pXG4gICAgKiBhbmQgYW55IGltYWdlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBhdCBydW50aW1lIHVzaW5nIHtAbGluayBhZGRJbWFnZX0uXG4gICAgKlxuICAgICogQHJldHVybnMge0FycmF5PHN0cmluZz59IEFuIEFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgYWxsIHNwcml0ZXMvaW1hZ2VzIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gdGhlIG1hcC5cbiAgICAqXG4gICAgKiBAZXhhbXBsZVxuICAgICogdmFyIGFsbEltYWdlcyA9IG1hcC5saXN0SW1hZ2VzKCk7XG4gICAgKlxuICAgICovXG4gICAgbGlzdEltYWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUubGlzdEltYWdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBbTWFwYm94IHN0eWxlIGxheWVyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXJzKVxuICAgICAqIHRvIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIEEgbGF5ZXIgZGVmaW5lcyBob3cgZGF0YSBmcm9tIGEgc3BlY2lmaWVkIHNvdXJjZSB3aWxsIGJlIHN0eWxlZC4gUmVhZCBtb3JlIGFib3V0IGxheWVyIHR5cGVzXG4gICAgICogYW5kIGF2YWlsYWJsZSBwYWludCBhbmQgbGF5b3V0IHByb3BlcnRpZXMgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVycykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdCB8IEN1c3RvbUxheWVySW50ZXJmYWNlfSBsYXllciBUaGUgc3R5bGUgbGF5ZXIgdG8gYWRkLCBjb25mb3JtaW5nIHRvIHRoZSBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbidzXG4gICAgICogICBbbGF5ZXIgZGVmaW5pdGlvbl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVycykuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtiZWZvcmVJZF0gVGhlIElEIG9mIGFuIGV4aXN0aW5nIGxheWVyIHRvIGluc2VydCB0aGUgbmV3IGxheWVyIGJlZm9yZS5cbiAgICAgKiAgIElmIHRoaXMgYXJndW1lbnQgaXMgb21pdHRlZCwgdGhlIGxheWVyIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGF5ZXJzIGFycmF5LlxuICAgICAqXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEFkZCBhIGNpcmNsZSBsYXllciB3aXRoIGEgdmVjdG9yIHNvdXJjZS5cbiAgICAgKiBtYXAuYWRkTGF5ZXIoe1xuICAgICAqICAgaWQ6ICdwb2ludHMtb2YtaW50ZXJlc3QnLFxuICAgICAqICAgc291cmNlOiB7XG4gICAgICogICAgIHR5cGU6ICd2ZWN0b3InLFxuICAgICAqICAgICB1cmw6ICdtYXBib3g6Ly9tYXBib3gubWFwYm94LXN0cmVldHMtdjgnXG4gICAgICogICB9LFxuICAgICAqICAgJ3NvdXJjZS1sYXllcic6ICdwb2lfbGFiZWwnLFxuICAgICAqICAgdHlwZTogJ2NpcmNsZScsXG4gICAgICogICBwYWludDoge1xuICAgICAqICAgICAvLyBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbiBwYWludCBwcm9wZXJ0aWVzXG4gICAgICogICB9LFxuICAgICAqICAgbGF5b3V0OiB7XG4gICAgICogICAgIC8vIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uIGxheW91dCBwcm9wZXJ0aWVzXG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAc2VlIFtDcmVhdGUgYW5kIHN0eWxlIGNsdXN0ZXJzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NsdXN0ZXIvKVxuICAgICAqIEBzZWUgW0FkZCBhIHZlY3RvciB0aWxlIHNvdXJjZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS92ZWN0b3Itc291cmNlLylcbiAgICAgKiBAc2VlIFtBZGQgYSBXTVMgc291cmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3dtcy8pXG4gICAgICovXG4gICAgYWRkTGF5ZXIobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbiB8IEN1c3RvbUxheWVySW50ZXJmYWNlLCBiZWZvcmVJZD86IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLmFkZExheWVyKGxheWVyLCBiZWZvcmVJZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYSBsYXllciB0byBhIGRpZmZlcmVudCB6LXBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gbW92ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZUlkXSBUaGUgSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYmVmb3JlLlxuICAgICAqICAgSWYgdGhpcyBhcmd1bWVudCBpcyBvbWl0dGVkLCB0aGUgbGF5ZXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBsYXllcnMgYXJyYXkuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIE1vdmUgYSBsYXllciB3aXRoIElEICdsYWJlbCcgYmVmb3JlIHRoZSBsYXllciB3aXRoIElEICd3YXRlcndheXMnLlxuICAgICAqIG1hcC5tb3ZlTGF5ZXIoJ2xhYmVsJywgJ3dhdGVyd2F5cycpO1xuICAgICAqL1xuICAgIG1vdmVMYXllcihpZDogc3RyaW5nLCBiZWZvcmVJZD86IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLm1vdmVMYXllcihpZCwgYmVmb3JlSWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIElEIGZyb20gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogSWYgbm8gc3VjaCBsYXllciBleGlzdHMsIGFuIGBlcnJvcmAgZXZlbnQgaXMgZmlyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgaWQgb2YgdGhlIGxheWVyIHRvIHJlbW92ZVxuICAgICAqIEBmaXJlcyBlcnJvclxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJZiBhIGxheWVyIHdpdGggSUQgJ3N0YXRlLWRhdGEnIGV4aXN0cywgcmVtb3ZlIGl0LlxuICAgICAqIGlmIChtYXAuZ2V0TGF5ZXIoJ3N0YXRlLWRhdGEnKSkgbWFwLnJlbW92ZUxheWVyKCdzdGF0ZS1kYXRhJyk7XG4gICAgICovXG4gICAgcmVtb3ZlTGF5ZXIoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZUxheWVyKGlkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXllciB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgaW4gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHs/T2JqZWN0fSBUaGUgbGF5ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIElELCBvciBgdW5kZWZpbmVkYFxuICAgICAqICAgaWYgdGhlIElEIGNvcnJlc3BvbmRzIHRvIG5vIGV4aXN0aW5nIGxheWVycy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHN0YXRlRGF0YUxheWVyID0gbWFwLmdldExheWVyKCdzdGF0ZS1kYXRhJyk7XG4gICAgICpcbiAgICAgKiBAc2VlIFtGaWx0ZXIgc3ltYm9scyBieSB0b2dnbGluZyBhIGxpc3RdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLW1hcmtlcnMvKVxuICAgICAqIEBzZWUgW0ZpbHRlciBzeW1ib2xzIGJ5IHRleHQgaW5wdXRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLW1hcmtlcnMtYnktaW5wdXQvKVxuICAgICAqL1xuICAgIGdldExheWVyKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5ZXIoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHpvb20gZXh0ZW50IGZvciB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLiBUaGUgem9vbSBleHRlbnQgaW5jbHVkZXMgdGhlXG4gICAgICogW21pbmltdW0gem9vbSBsZXZlbF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVyLW1pbnpvb20pXG4gICAgICogYW5kIFttYXhpbXVtIHpvb20gbGV2ZWxdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXllci1tYXh6b29tKSlcbiAgICAgKiBhdCB3aGljaCB0aGUgbGF5ZXIgd2lsbCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIE5vdGU6IEZvciBzdHlsZSBsYXllcnMgdXNpbmcgdmVjdG9yIHNvdXJjZXMsIHN0eWxlIGxheWVycyBjYW5ub3QgYmUgcmVuZGVyZWQgYXQgem9vbSBsZXZlbHMgbG93ZXIgdGhhbiB0aGVcbiAgICAgKiBtaW5pbXVtIHpvb20gbGV2ZWwgb2YgdGhlIF9zb3VyY2UgbGF5ZXJfIGJlY2F1c2UgdGhlIGRhdGEgZG9lcyBub3QgZXhpc3QgYXQgdGhvc2Ugem9vbSBsZXZlbHMuIElmIHRoZSBtaW5pbXVtXG4gICAgICogem9vbSBsZXZlbCBvZiB0aGUgc291cmNlIGxheWVyIGlzIGhpZ2hlciB0aGFuIHRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgZGVmaW5lZCBpbiB0aGUgc3R5bGUgbGF5ZXIsIHRoZSBzdHlsZVxuICAgICAqIGxheWVyIHdpbGwgbm90IGJlIHJlbmRlcmVkIGF0IGFsbCB6b29tIGxldmVscyBpbiB0aGUgem9vbSByYW5nZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gd2hpY2ggdGhlIHpvb20gZXh0ZW50IHdpbGwgYmUgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWluem9vbSBUaGUgbWluaW11bSB6b29tIHRvIHNldCAoMC0yNCkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heHpvb20gVGhlIG1heGltdW0gem9vbSB0byBzZXQgKDAtMjQpLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0TGF5ZXJab29tUmFuZ2UoJ215LWxheWVyJywgMiwgNSk7XG4gICAgICpcbiAgICAgKi9cbiAgICBzZXRMYXllclpvb21SYW5nZShsYXllcklkOiBzdHJpbmcsIG1pbnpvb206IG51bWJlciwgbWF4em9vbTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0TGF5ZXJab29tUmFuZ2UobGF5ZXJJZCwgbWluem9vbSwgbWF4em9vbSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVyIGZvciB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byB3aGljaCB0aGUgZmlsdGVyIHdpbGwgYmUgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5IHwgbnVsbCB8IHVuZGVmaW5lZH0gZmlsdGVyIFRoZSBmaWx0ZXIsIGNvbmZvcm1pbmcgdG8gdGhlIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uJ3NcbiAgICAgKiAgIFtmaWx0ZXIgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jb3RoZXItZmlsdGVyKS4gIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgYW55IGV4aXN0aW5nIGZpbHRlciBmcm9tIHRoZSBsYXllci5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy52YWxpZGF0ZT10cnVlXSBXaGV0aGVyIHRvIGNoZWNrIGlmIHRoZSBmaWx0ZXIgY29uZm9ybXMgdG8gdGhlIE1hcGJveCBHTCBTdHlsZSBTcGVjaWZpY2F0aW9uLiBEaXNhYmxpbmcgdmFsaWRhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGhhdmUgcHJldmlvdXNseSB2YWxpZGF0ZWQgdGhlIHZhbHVlcyB5b3Ugd2lsbCBiZSBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRGaWx0ZXIoJ215LWxheWVyJywgWyc9PScsICduYW1lJywgJ1VTQSddKTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0ZpbHRlciBmZWF0dXJlcyB3aXRoaW4gbWFwIHZpZXddKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLWZlYXR1cmVzLXdpdGhpbi1tYXAtdmlldy8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIGNvbnRhaW5pbmcgc2ltaWxhciBkYXRhXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3F1ZXJ5LXNpbWlsYXItZmVhdHVyZXMvKVxuICAgICAqIEBzZWUgW0NyZWF0ZSBhIHRpbWVsaW5lIGFuaW1hdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90aW1lbGluZS1hbmltYXRpb24vKVxuICAgICAqL1xuICAgIHNldEZpbHRlcihsYXllcklkOiBzdHJpbmcsIGZpbHRlcjogP0ZpbHRlclNwZWNpZmljYXRpb24sICBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnN0eWxlLnNldEZpbHRlcihsYXllcklkLCBmaWx0ZXIsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZpbHRlciBhcHBsaWVkIHRvIHRoZSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIHN0eWxlIGxheWVyIHdob3NlIGZpbHRlciB0byBnZXQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBUaGUgbGF5ZXIncyBmaWx0ZXIuXG4gICAgICovXG4gICAgZ2V0RmlsdGVyKGxheWVySWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRGaWx0ZXIobGF5ZXJJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBwYWludCBwcm9wZXJ0eSBpbiB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBzZXQgdGhlIHBhaW50IHByb3BlcnR5IGluLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwYWludCBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBhaW50IHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiAgIE11c3QgYmUgb2YgYSB0eXBlIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvcGVydHksIGFzIGRlZmluZWQgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8pLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgYHZhbHVlYCBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRQYWludFByb3BlcnR5KCdteS1sYXllcicsICdmaWxsLWNvbG9yJywgJyNmYWFmZWUnKTtcbiAgICAgKiBAc2VlIFtDaGFuZ2UgYSBsYXllcidzIGNvbG9yIHdpdGggYnV0dG9uc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jb2xvci1zd2l0Y2hlci8pXG4gICAgICogQHNlZSBbQWRqdXN0IGEgbGF5ZXIncyBvcGFjaXR5XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkanVzdC1sYXllci1vcGFjaXR5LylcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLXBvaW50LylcbiAgICAgKi9cbiAgICBzZXRQYWludFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkobGF5ZXJJZCwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgcGFpbnQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gZ2V0IHRoZSBwYWludCBwcm9wZXJ0eSBmcm9tLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIGEgcGFpbnQgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwYWludCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBnZXRQYWludFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldFBhaW50UHJvcGVydHkobGF5ZXJJZCwgbmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBsYXlvdXQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gc2V0IHRoZSBsYXlvdXQgcHJvcGVydHkgaW4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGxheW91dCBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGxheW91dCBwcm9wZXJ0eS4gTXVzdCBiZSBvZiBhIHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBwcm9wZXJ0eSwgYXMgZGVmaW5lZCBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLykuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiBgdmFsdWVgIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldExheW91dFByb3BlcnR5KCdteS1sYXllcicsICd2aXNpYmlsaXR5JywgJ25vbmUnKTtcbiAgICAgKi9cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eShsYXllcklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRMYXlvdXRQcm9wZXJ0eShsYXllcklkLCBuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBsYXlvdXQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gZ2V0IHRoZSBsYXlvdXQgcHJvcGVydHkgZnJvbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbGF5b3V0IHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgbGF5b3V0IHByb3BlcnR5LlxuICAgICAqL1xuICAgIGdldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldExheW91dFByb3BlcnR5KGxheWVySWQsIG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFueSBjb21iaW5hdGlvbiBvZiBsaWdodCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGlnaHQgTGlnaHQgcHJvcGVydGllcyB0byBzZXQuIE11c3QgY29uZm9ybSB0byB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNsaWdodCkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgZmlsdGVyIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldExpZ2h0KGxpZ2h0OiBMaWdodFNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0TGlnaHQobGlnaHQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBsaWdodCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBsaWdodCBMaWdodCBwcm9wZXJ0aWVzIG9mIHRoZSBzdHlsZS5cbiAgICAgKi9cbiAgICBnZXRMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGlnaHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiBhIGZlYXR1cmUuIFRoZSBgc3RhdGVgIG9iamVjdCBpcyBtZXJnZWQgaW4gd2l0aCB0aGUgZXhpc3Rpbmcgc3RhdGUgb2YgdGhlIGZlYXR1cmUuXG4gICAgICogRmVhdHVyZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIgYGlkYCBhdHRyaWJ1dGUsIHdoaWNoIG11c3QgYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZyB0aGF0IGNhbiBiZVxuICAgICAqIGNhc3QgdG8gYW4gaW50ZWdlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmZWF0dXJlIEZlYXR1cmUgaWRlbnRpZmllci4gRmVhdHVyZSBvYmplY3RzIHJldHVybmVkIGZyb21cbiAgICAgKiB7QGxpbmsgTWFwI3F1ZXJ5UmVuZGVyZWRGZWF0dXJlc30gb3IgZXZlbnQgaGFuZGxlcnMgY2FuIGJlIHVzZWQgYXMgZmVhdHVyZSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gZmVhdHVyZS5pZCBVbmlxdWUgaWQgb2YgdGhlIGZlYXR1cmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZlYXR1cmUuc291cmNlIFRoZSBJZCBvZiB0aGUgdmVjdG9yIHNvdXJjZSBvciBHZW9KU09OIHNvdXJjZSBmb3IgdGhlIGZlYXR1cmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmZWF0dXJlLnNvdXJjZUxheWVyXSAob3B0aW9uYWwpICAqRm9yIHZlY3RvciB0aWxlIHNvdXJjZXMsIHRoZSBzb3VyY2VMYXllciBpc1xuICAgICAqICByZXF1aXJlZC4qXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIEEgc2V0IG9mIGtleS12YWx1ZSBwYWlycy4gVGhlIHZhbHVlcyBzaG91bGQgYmUgdmFsaWQgSlNPTiB0eXBlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoZSBgZmVhdHVyZS5pZGAgYXR0cmlidXRlIG9uIGRhdGEgc2V0cy4gRm9yIEdlb0pTT04gc291cmNlcyB3aXRob3V0XG4gICAgICogZmVhdHVyZSBpZHMsIHNldCB0aGUgYGdlbmVyYXRlSWRgIG9wdGlvbiBpbiB0aGUgYEdlb0pTT05Tb3VyY2VTcGVjaWZpY2F0aW9uYCB0byBhdXRvLWFzc2lnbiB0aGVtLiBUaGlzXG4gICAgICogb3B0aW9uIGFzc2lnbnMgaWRzIGJhc2VkIG9uIGEgZmVhdHVyZSdzIGluZGV4IGluIHRoZSBzb3VyY2UgZGF0YS4gSWYgeW91IGNoYW5nZSBmZWF0dXJlIGRhdGEgdXNpbmdcbiAgICAgKiBgbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpLnNldERhdGEoLi4pYCwgeW91IG1heSBuZWVkIHRvIHJlLWFwcGx5IHN0YXRlIHRha2luZyBpbnRvIGFjY291bnQgdXBkYXRlZCBgaWRgIHZhbHVlcy5cbiAgICAgKi9cbiAgICBzZXRGZWF0dXJlU3RhdGUoZmVhdHVyZTogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudW1iZXI7IH0sIHN0YXRlOiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRGZWF0dXJlU3RhdGUoZmVhdHVyZSwgc3RhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBmZWF0dXJlIHN0YXRlLCBzZXR0aW5nIGl0IGJhY2sgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3IuIElmIG9ubHlcbiAgICAgKiBzb3VyY2UgaXMgc3BlY2lmaWVkLCByZW1vdmVzIGFsbCBzdGF0ZXMgb2YgdGhhdCBzb3VyY2UuIElmXG4gICAgICogdGFyZ2V0LmlkIGlzIGFsc28gc3BlY2lmaWVkLCByZW1vdmVzIGFsbCBrZXlzIGZvciB0aGF0IGZlYXR1cmUncyBzdGF0ZS5cbiAgICAgKiBJZiBrZXkgaXMgYWxzbyBzcGVjaWZpZWQsIHJlbW92ZXMgdGhhdCBrZXkgZnJvbSB0aGF0IGZlYXR1cmUncyBzdGF0ZS5cbiAgICAgKiBGZWF0dXJlcyBhcmUgaWRlbnRpZmllZCBieSB0aGVpciBgaWRgIGF0dHJpYnV0ZSwgd2hpY2ggbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGEgc3RyaW5nIHRoYXQgY2FuIGJlXG4gICAgICogY2FzdCB0byBhbiBpbnRlZ2VyLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgSWRlbnRpZmllciBvZiB3aGVyZSB0byBzZXQgc3RhdGU6IGNhbiBiZSBhIHNvdXJjZSwgYSBmZWF0dXJlLCBvciBhIHNwZWNpZmljIGtleSBvZiBmZWF0dXJlLlxuICAgICAqIEZlYXR1cmUgb2JqZWN0cyByZXR1cm5lZCBmcm9tIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSBvciBldmVudCBoYW5kbGVycyBjYW4gYmUgdXNlZCBhcyBmZWF0dXJlIGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSB0YXJnZXQuaWQgKG9wdGlvbmFsKSBVbmlxdWUgaWQgb2YgdGhlIGZlYXR1cmUuIE9wdGlvbmFsIGlmIGtleSBpcyBub3Qgc3BlY2lmaWVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQuc291cmNlIFRoZSBJZCBvZiB0aGUgdmVjdG9yIHNvdXJjZSBvciBHZW9KU09OIHNvdXJjZSBmb3IgdGhlIGZlYXR1cmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXQuc291cmNlTGF5ZXJdIChvcHRpb25hbCkgICpGb3IgdmVjdG9yIHRpbGUgc291cmNlcywgdGhlIHNvdXJjZUxheWVyIGlzXG4gICAgICogIHJlcXVpcmVkLipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IChvcHRpb25hbCkgVGhlIGtleSBpbiB0aGUgZmVhdHVyZSBzdGF0ZSB0byByZXNldC5cbiAgICAqL1xuICAgIHJlbW92ZUZlYXR1cmVTdGF0ZSh0YXJnZXQ6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZD86IHN0cmluZyB8IG51bWJlcjsgfSwga2V5Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlRmVhdHVyZVN0YXRlKHRhcmdldCwga2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN0YXRlIG9mIGEgZmVhdHVyZS5cbiAgICAgKiBGZWF0dXJlcyBhcmUgaWRlbnRpZmllZCBieSB0aGVpciBgaWRgIGF0dHJpYnV0ZSwgd2hpY2ggbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGEgc3RyaW5nIHRoYXQgY2FuIGJlXG4gICAgICogY2FzdCB0byBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGZlYXR1cmUgRmVhdHVyZSBpZGVudGlmaWVyLiBGZWF0dXJlIG9iamVjdHMgcmV0dXJuZWQgZnJvbVxuICAgICAqIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSBvciBldmVudCBoYW5kbGVycyBjYW4gYmUgdXNlZCBhcyBmZWF0dXJlIGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBmZWF0dXJlLmlkIFVuaXF1ZSBpZCBvZiB0aGUgZmVhdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmVhdHVyZS5zb3VyY2UgVGhlIElkIG9mIHRoZSB2ZWN0b3Igc291cmNlIG9yIEdlb0pTT04gc291cmNlIGZvciB0aGUgZmVhdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZlYXR1cmUuc291cmNlTGF5ZXJdIChvcHRpb25hbCkgICpGb3IgdmVjdG9yIHRpbGUgc291cmNlcywgdGhlIHNvdXJjZUxheWVyIGlzXG4gICAgICogIHJlcXVpcmVkLipcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzdGF0ZSBvZiB0aGUgZmVhdHVyZS5cbiAgICAgKi9cbiAgICBnZXRGZWF0dXJlU3RhdGUoZmVhdHVyZTogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudW1iZXI7IH0pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRGZWF0dXJlU3RhdGUoZmVhdHVyZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgY29udGFpbmluZyBIVE1MIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSBtYXAncyBjb250YWluZXIuXG4gICAgICovXG4gICAgZ2V0Q29udGFpbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIEhUTUwgZWxlbWVudCBjb250YWluaW5nIHRoZSBtYXAncyBgPGNhbnZhcz5gIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBhZGQgbm9uLUdMIG92ZXJsYXlzIHRvIHRoZSBtYXAsIHlvdSBzaG91bGQgYXBwZW5kIHRoZW0gdG8gdGhpcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogVGhpcyBpcyB0aGUgZWxlbWVudCB0byB3aGljaCBldmVudCBiaW5kaW5ncyBmb3IgbWFwIGludGVyYWN0aXZpdHkgKHN1Y2ggYXMgcGFubmluZyBhbmQgem9vbWluZykgYXJlXG4gICAgICogYXR0YWNoZWQuIEl0IHdpbGwgcmVjZWl2ZSBidWJibGVkIGV2ZW50cyBmcm9tIGNoaWxkIGVsZW1lbnRzIHN1Y2ggYXMgdGhlIGA8Y2FudmFzPmAsIGJ1dCBub3QgZnJvbVxuICAgICAqIG1hcCBjb250cm9scy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gVGhlIGNvbnRhaW5lciBvZiB0aGUgbWFwJ3MgYDxjYW52YXM+YC5cbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLXBvaW50LylcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgd2l0aGluIGEgYm91bmRpbmcgYm94XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3VzaW5nLWJveC1xdWVyeXJlbmRlcmVkZmVhdHVyZXMvKVxuICAgICAqL1xuICAgIGdldENhbnZhc0NvbnRhaW5lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbnZhc0NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBgPGNhbnZhcz5gIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSBtYXAncyBgPGNhbnZhcz5gIGVsZW1lbnQuXG4gICAgICogQHNlZSBbTWVhc3VyZSBkaXN0YW5jZXNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWVhc3VyZS8pXG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGhvdmVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWhvdmVyLylcbiAgICAgKiBAc2VlIFtDZW50ZXIgdGhlIG1hcCBvbiBhIGNsaWNrZWQgc3ltYm9sXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NlbnRlci1vbi1zeW1ib2wvKVxuICAgICAqL1xuICAgIGdldENhbnZhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbnZhcztcbiAgICB9XG5cbiAgICBfY29udGFpbmVyRGltZW5zaW9ucygpIHtcbiAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgbGV0IGhlaWdodCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGggfHwgNDAwO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodCB8fCAzMDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xuICAgIH1cblxuICAgIF9kZXRlY3RNaXNzaW5nQ1NTKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21wdXRlZENvbG9yID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fbWlzc2luZ0NTU0NhbmFyeSkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpO1xuICAgICAgICBpZiAoY29tcHV0ZWRDb2xvciAhPT0gJ3JnYigyNTAsIDEyOCwgMTE0KScpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdUaGlzIHBhZ2UgYXBwZWFycyB0byBiZSBtaXNzaW5nIENTUyBkZWNsYXJhdGlvbnMgZm9yICcgK1xuICAgICAgICAgICAgICAgICdNYXBib3ggR0wgSlMsIHdoaWNoIG1heSBjYXVzZSB0aGUgbWFwIHRvIGRpc3BsYXkgaW5jb3JyZWN0bHkuICcgK1xuICAgICAgICAgICAgICAgICdQbGVhc2UgZW5zdXJlIHlvdXIgcGFnZSBpbmNsdWRlcyBtYXBib3gtZ2wuY3NzLCBhcyBkZXNjcmliZWQgJyArXG4gICAgICAgICAgICAgICAgJ2luIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2FwaS8uJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfc2V0dXBDb250YWluZXIoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcjtcbiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLW1hcCcpO1xuXG4gICAgICAgIGNvbnN0IG1pc3NpbmdDU1NDYW5hcnkgPSB0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5ID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWNhbmFyeScsIGNvbnRhaW5lcik7XG4gICAgICAgIG1pc3NpbmdDU1NDYW5hcnkuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICB0aGlzLl9kZXRlY3RNaXNzaW5nQ1NTKCk7XG5cbiAgICAgICAgY29uc3QgY2FudmFzQ29udGFpbmVyID0gdGhpcy5fY2FudmFzQ29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWNhbnZhcy1jb250YWluZXInLCBjb250YWluZXIpO1xuICAgICAgICBpZiAodGhpcy5faW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIGNhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1pbnRlcmFjdGl2ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FudmFzID0gRE9NLmNyZWF0ZSgnY2FudmFzJywgJ21hcGJveGdsLWNhbnZhcycsIGNhbnZhc0NvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5fY29udGV4dExvc3QsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5fY29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdNYXAnKTtcblxuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpO1xuICAgICAgICB0aGlzLl9yZXNpemVDYW52YXMoZGltZW5zaW9uc1swXSwgZGltZW5zaW9uc1sxXSk7XG5cbiAgICAgICAgY29uc3QgY29udHJvbENvbnRhaW5lciA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY29udHJvbC1jb250YWluZXInLCBjb250YWluZXIpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSB0aGlzLl9jb250cm9sUG9zaXRpb25zID0ge307XG4gICAgICAgIFsndG9wLWxlZnQnLCAndG9wLXJpZ2h0JywgJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCddLmZvckVhY2goKHBvc2l0aW9uTmFtZSkgPT4ge1xuICAgICAgICAgICAgcG9zaXRpb25zW3Bvc2l0aW9uTmFtZV0gPSBET00uY3JlYXRlKCdkaXYnLCBgbWFwYm94Z2wtY3RybC0ke3Bvc2l0aW9uTmFtZX1gLCBjb250cm9sQ29udGFpbmVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3Jlc2l6ZUNhbnZhcyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblxuICAgICAgICAvLyBSZXF1ZXN0IHRoZSByZXF1aXJlZCBjYW52YXMgc2l6ZSB0YWtpbmcgdGhlIHBpeGVscmF0aW8gaW50byBhY2NvdW50LlxuICAgICAgICB0aGlzLl9jYW52YXMud2lkdGggPSBwaXhlbFJhdGlvICogd2lkdGg7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5oZWlnaHQgPSBwaXhlbFJhdGlvICogaGVpZ2h0O1xuXG4gICAgICAgIC8vIE1haW50YWluIHRoZSBzYW1lIGNhbnZhcyBzaXplLCBwb3RlbnRpYWxseSBkb3duc2NhbGluZyBpdCBmb3IgSGlEUEkgZGlzcGxheXNcbiAgICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgICAgICB0aGlzLl9jYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICBfc2V0dXBQYWludGVyKCkge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZXh0ZW5kKHt9LCBpc1N1cHBvcnRlZC53ZWJHTENvbnRleHRBdHRyaWJ1dGVzLCB7XG4gICAgICAgICAgICBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiB0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LFxuICAgICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsXG4gICAgICAgICAgICBhbnRpYWxpYXM6IHRoaXMuX2FudGlhbGlhcyB8fCBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGF0dHJpYnV0ZXMpIHx8XG4gICAgICAgICAgICB0aGlzLl9jYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgYXR0cmlidXRlcyk7XG5cbiAgICAgICAgaWYgKCFnbCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0wnKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYWludGVyID0gbmV3IFBhaW50ZXIoZ2wsIHRoaXMudHJhbnNmb3JtKTtcblxuICAgICAgICB3ZWJwU3VwcG9ydGVkLnRlc3RTdXBwb3J0KGdsKTtcbiAgICB9XG5cbiAgICBfY29udGV4dExvc3QoZXZlbnQ6ICopIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd3ZWJnbGNvbnRleHRsb3N0Jywge29yaWdpbmFsRXZlbnQ6IGV2ZW50fSkpO1xuICAgIH1cblxuICAgIF9jb250ZXh0UmVzdG9yZWQoZXZlbnQ6ICopIHtcbiAgICAgICAgdGhpcy5fc2V0dXBQYWludGVyKCk7XG4gICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHtvcmlnaW5hbEV2ZW50OiBldmVudH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCBpcyBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGBmYWxzZWAgaWYgdGhlIHN0eWxlIGlzIG5vdCB5ZXQgZnVsbHkgbG9hZGVkLFxuICAgICAqIG9yIGlmIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIHRvIHRoZSBzb3VyY2VzIG9yIHN0eWxlIHRoYXRcbiAgICAgKiBoYXMgbm90IHlldCBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKi9cbiAgICBsb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5fc3R5bGVEaXJ0eSAmJiAhdGhpcy5fc291cmNlc0RpcnR5ICYmICEhdGhpcy5zdHlsZSAmJiB0aGlzLnN0eWxlLmxvYWRlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGlzIG1hcCdzIHN0eWxlIGFuZCBzb3VyY2VzLCBhbmQgcmUtcmVuZGVyIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVwZGF0ZVN0eWxlIG1hcmsgdGhlIG1hcCdzIHN0eWxlIGZvciByZXByb2Nlc3NpbmcgYXNcbiAgICAgKiB3ZWxsIGFzIGl0cyBzb3VyY2VzXG4gICAgICogQHJldHVybnMge01hcH0gdGhpc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3VwZGF0ZSh1cGRhdGVTdHlsZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0eWxlKSByZXR1cm4gdGhpcztcblxuICAgICAgICB0aGlzLl9zdHlsZURpcnR5ID0gdGhpcy5fc3R5bGVEaXJ0eSB8fCB1cGRhdGVTdHlsZTtcbiAgICAgICAgdGhpcy5fc291cmNlc0RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVwYWludCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcXVlc3QgdGhhdCB0aGUgZ2l2ZW4gY2FsbGJhY2sgYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBuZXh0IHJlbmRlclxuICAgICAqIGZyYW1lLiAgU2NoZWR1bGUgYSByZW5kZXIgZnJhbWUgaWYgb25lIGlzIG5vdCBhbHJlYWR5IHNjaGVkdWxlZC5cbiAgICAgKiBAcmV0dXJucyBBbiBpZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgY2FsbGJhY2tcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9yZXF1ZXN0UmVuZGVyRnJhbWUoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiBUYXNrSUQge1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5hZGQoY2FsbGJhY2spO1xuICAgIH1cblxuICAgIF9jYW5jZWxSZW5kZXJGcmFtZShpZDogVGFza0lEKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5yZW1vdmUoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGwgd2hlbiBhIChyZS0pcmVuZGVyIG9mIHRoZSBtYXAgaXMgcmVxdWlyZWQ6XG4gICAgICogLSBUaGUgc3R5bGUgaGFzIGNoYW5nZWQgKGBzZXRQYWludFByb3BlcnR5KClgLCBldGMuKVxuICAgICAqIC0gU291cmNlIGRhdGEgaGFzIGNoYW5nZWQgKGUuZy4gdGlsZXMgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nKVxuICAgICAqIC0gVGhlIG1hcCBoYXMgaXMgbW92aW5nIChvciBqdXN0IGZpbmlzaGVkIG1vdmluZylcbiAgICAgKiAtIEEgdHJhbnNpdGlvbiBpcyBpbiBwcm9ncmVzc1xuICAgICAqXG4gICAgICogQHJldHVybnMge01hcH0gdGhpc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlbmRlcigpIHtcbiAgICAgICAgLy8gQSBjdXN0b20gbGF5ZXIgbWF5IGhhdmUgdXNlZCB0aGUgY29udGV4dCBhc3luY2hyb25vdXNseS4gTWFyayB0aGUgc3RhdGUgYXMgZGlydHkuXG4gICAgICAgIHRoaXMucGFpbnRlci5jb250ZXh0LnNldERpcnR5KCk7XG4gICAgICAgIHRoaXMucGFpbnRlci5zZXRCYXNlU3RhdGUoKTtcblxuICAgICAgICB0aGlzLl9yZW5kZXJUYXNrUXVldWUucnVuKCk7XG5cbiAgICAgICAgbGV0IGNyb3NzRmFkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgLy8gSWYgdGhlIHN0eWxlIGhhcyBjaGFuZ2VkLCB0aGUgbWFwIGlzIGJlaW5nIHpvb21lZCwgb3IgYSB0cmFuc2l0aW9uIG9yIGZhZGUgaXMgaW4gcHJvZ3Jlc3M6XG4gICAgICAgIC8vICAtIEFwcGx5IHN0eWxlIGNoYW5nZXMgKGluIGEgYmF0Y2gpXG4gICAgICAgIC8vICAtIFJlY2FsY3VsYXRlIHBhaW50IHByb3BlcnRpZXMuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlICYmIHRoaXMuX3N0eWxlRGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0eWxlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMudHJhbnNmb3JtLnpvb207XG4gICAgICAgICAgICBjb25zdCBub3cgPSBicm93c2VyLm5vdygpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS56b29tSGlzdG9yeS51cGRhdGUoem9vbSwgbm93KTtcblxuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh6b29tLCB7XG4gICAgICAgICAgICAgICAgbm93LFxuICAgICAgICAgICAgICAgIGZhZGVEdXJhdGlvbjogdGhpcy5fZmFkZUR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIHpvb21IaXN0b3J5OiB0aGlzLnN0eWxlLnpvb21IaXN0b3J5LFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IHRoaXMuc3R5bGUuZ2V0VHJhbnNpdGlvbigpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgZmFjdG9yID0gcGFyYW1ldGVycy5jcm9zc0ZhZGluZ0ZhY3RvcigpO1xuICAgICAgICAgICAgaWYgKGZhY3RvciAhPT0gMSB8fCBmYWN0b3IgIT09IHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yKSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NGYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yID0gZmFjdG9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0eWxlLnVwZGF0ZShwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdlIGFyZSBpbiBfcmVuZGVyIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gaW4tcHJvZ3Jlc3MgcGFpbnRcbiAgICAgICAgLy8gdHJhbnNpdGlvbiwgdXBkYXRlIHNvdXJjZSBjYWNoZXMgdG8gY2hlY2sgZm9yIGFuZCBsb2FkIGFueSB0aWxlcyB3ZVxuICAgICAgICAvLyBuZWVkIGZvciB0aGUgY3VycmVudCB0cmFuc2Zvcm1cbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgJiYgdGhpcy5fc291cmNlc0RpcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuX3VwZGF0ZVNvdXJjZXModGhpcy50cmFuc2Zvcm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGxhY2VtZW50RGlydHkgPSB0aGlzLnN0eWxlICYmIHRoaXMuc3R5bGUuX3VwZGF0ZVBsYWNlbWVudCh0aGlzLnBhaW50ZXIudHJhbnNmb3JtLCB0aGlzLnNob3dDb2xsaXNpb25Cb3hlcywgdGhpcy5fZmFkZUR1cmF0aW9uLCB0aGlzLl9jcm9zc1NvdXJjZUNvbGxpc2lvbnMpO1xuXG4gICAgICAgIC8vIEFjdHVhbGx5IGRyYXdcbiAgICAgICAgdGhpcy5wYWludGVyLnJlbmRlcih0aGlzLnN0eWxlLCB7XG4gICAgICAgICAgICBzaG93VGlsZUJvdW5kYXJpZXM6IHRoaXMuc2hvd1RpbGVCb3VuZGFyaWVzLFxuICAgICAgICAgICAgc2hvd092ZXJkcmF3SW5zcGVjdG9yOiB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IsXG4gICAgICAgICAgICByb3RhdGluZzogdGhpcy5pc1JvdGF0aW5nKCksXG4gICAgICAgICAgICB6b29taW5nOiB0aGlzLmlzWm9vbWluZygpLFxuICAgICAgICAgICAgbW92aW5nOiB0aGlzLmlzTW92aW5nKCksXG4gICAgICAgICAgICBmYWRlRHVyYXRpb246IHRoaXMuX2ZhZGVEdXJhdGlvblxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyZW5kZXInKSk7XG5cbiAgICAgICAgaWYgKHRoaXMubG9hZGVkKCkgJiYgIXRoaXMuX2xvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2xvYWQnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiAodGhpcy5zdHlsZS5oYXNUcmFuc2l0aW9ucygpIHx8IGNyb3NzRmFkaW5nKSkge1xuICAgICAgICAgICAgdGhpcy5fc3R5bGVEaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiAhdGhpcy5fcGxhY2VtZW50RGlydHkpIHtcbiAgICAgICAgICAgIC8vIFNpbmNlIG5vIGZhZGUgb3BlcmF0aW9ucyBhcmUgaW4gcHJvZ3Jlc3MsIHdlIGNhbiByZWxlYXNlXG4gICAgICAgICAgICAvLyBhbGwgdGlsZXMgaGVsZCBmb3IgZmFkaW5nLiBJZiB3ZSBkaWRuJ3QgZG8gdGhpcywgdGhlIHRpbGVzXG4gICAgICAgICAgICAvLyB3b3VsZCBqdXN0IHNpdCBpbiB0aGUgU291cmNlQ2FjaGVzIHVudGlsIHRoZSBuZXh0IHJlbmRlclxuICAgICAgICAgICAgdGhpcy5zdHlsZS5fcmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2NoZWR1bGUgYW5vdGhlciByZW5kZXIgZnJhbWUgaWYgaXQncyBuZWVkZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEV2ZW4gdGhvdWdoIGBfc3R5bGVEaXJ0eWAgYW5kIGBfc291cmNlc0RpcnR5YCBhcmUgcmVzZXQgaW4gdGhpc1xuICAgICAgICAvLyBtZXRob2QsIHN5bmNocm9ub3VzIGV2ZW50cyBmaXJlZCBkdXJpbmcgU3R5bGUjdXBkYXRlIG9yXG4gICAgICAgIC8vIFN0eWxlI191cGRhdGVTb3VyY2VzIGNvdWxkIGhhdmUgY2F1c2VkIHRoZW0gdG8gYmUgc2V0IGFnYWluLlxuICAgICAgICBpZiAodGhpcy5fc291cmNlc0RpcnR5IHx8IHRoaXMuX3JlcGFpbnQgfHwgdGhpcy5fc3R5bGVEaXJ0eSB8fCB0aGlzLl9wbGFjZW1lbnREaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVwYWludCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTW92aW5nKCkgJiYgdGhpcy5sb2FkZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnaWRsZScpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhbiB1cCBhbmQgcmVsZWFzZSBhbGwgaW50ZXJuYWwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcC5cbiAgICAgKlxuICAgICAqIFRoaXMgaW5jbHVkZXMgRE9NIGVsZW1lbnRzLCBldmVudCBiaW5kaW5ncywgd2ViIHdvcmtlcnMsIGFuZCBXZWJHTCByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBtZXRob2Qgd2hlbiB5b3UgYXJlIGRvbmUgdXNpbmcgdGhlIG1hcCBhbmQgd2lzaCB0byBlbnN1cmUgdGhhdCBpdCBub1xuICAgICAqIGxvbmdlciBjb25zdW1lcyBicm93c2VyIHJlc291cmNlcy4gQWZ0ZXJ3YXJkcywgeW91IG11c3Qgbm90IGNhbGwgYW55IG90aGVyXG4gICAgICogbWV0aG9kcyBvbiB0aGUgbWFwLlxuICAgICAqL1xuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2hhc2gpIHRoaXMuX2hhc2gucmVtb3ZlKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuX2NvbnRyb2xzKSBjb250cm9sLm9uUmVtb3ZlKHRoaXMpO1xuICAgICAgICB0aGlzLl9jb250cm9scyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZSkge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2V0U3R5bGUobnVsbCk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uV2luZG93UmVzaXplLCBmYWxzZSk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb25saW5lJywgdGhpcy5fb25XaW5kb3dPbmxpbmUsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHRoaXMucGFpbnRlci5jb250ZXh0LmdsLmdldEV4dGVuc2lvbignV0VCR0xfbG9zZV9jb250ZXh0Jyk7XG4gICAgICAgIGlmIChleHRlbnNpb24pIGV4dGVuc2lvbi5sb3NlQ29udGV4dCgpO1xuICAgICAgICByZW1vdmVOb2RlKHRoaXMuX2NhbnZhc0NvbnRhaW5lcik7XG4gICAgICAgIHJlbW92ZU5vZGUodGhpcy5fY29udHJvbENvbnRhaW5lcik7XG4gICAgICAgIHJlbW92ZU5vZGUodGhpcy5fbWlzc2luZ0NTU0NhbmFyeSk7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1tYXAnKTtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncmVtb3ZlJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIHJlbmRlcmluZyBvZiBhIHNpbmdsZSBmcmFtZS4gVXNlIHRoaXMgbWV0aG9kIHdpdGggY3VzdG9tIGxheWVycyB0b1xuICAgICAqIHJlcGFpbnQgdGhlIG1hcCB3aGVuIHRoZSBsYXllciBjaGFuZ2VzLiBDYWxsaW5nIHRoaXMgbXVsdGlwbGUgdGltZXMgYmVmb3JlIHRoZVxuICAgICAqIG5leHQgZnJhbWUgaXMgcmVuZGVyZWQgd2lsbCBzdGlsbCByZXN1bHQgaW4gb25seSBhIHNpbmdsZSBmcmFtZSBiZWluZyByZW5kZXJlZC5cbiAgICAgKi9cbiAgICB0cmlnZ2VyUmVwYWludCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgJiYgIXRoaXMuX2ZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGJyb3dzZXIuZnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uV2luZG93T25saW5lKCkge1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICBfb25XaW5kb3dSZXNpemUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl90cmFja1Jlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemUoe29yaWdpbmFsRXZlbnQ6IGV2ZW50fSkuX3VwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgd2lsbCByZW5kZXIgYW4gb3V0bGluZVxuICAgICAqIGFyb3VuZCBlYWNoIHRpbGUgYW5kIHRoZSB0aWxlIElELiBUaGVzZSB0aWxlIGJvdW5kYXJpZXMgYXJlIHVzZWZ1bCBmb3JcbiAgICAgKiBkZWJ1Z2dpbmcuXG4gICAgICpcbiAgICAgKiBUaGUgdW5jb21wcmVzc2VkIGZpbGUgc2l6ZSBvZiB0aGUgZmlyc3QgdmVjdG9yIHNvdXJjZSBpcyBkcmF3biBpbiB0aGUgdG9wIGxlZnRcbiAgICAgKiBjb3JuZXIgb2YgZWFjaCB0aWxlLCBuZXh0IHRvIHRoZSB0aWxlIElELlxuICAgICAqXG4gICAgICogQG5hbWUgc2hvd1RpbGVCb3VuZGFyaWVzXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqL1xuICAgIGdldCBzaG93VGlsZUJvdW5kYXJpZXMoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3Nob3dUaWxlQm91bmRhcmllczsgfVxuICAgIHNldCBzaG93VGlsZUJvdW5kYXJpZXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dUaWxlQm91bmRhcmllcyA9PT0gdmFsdWUpIHJldHVybjtcbiAgICAgICAgdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIHdpbGwgcmVuZGVyIGJveGVzXG4gICAgICogYXJvdW5kIGFsbCBzeW1ib2xzIGluIHRoZSBkYXRhIHNvdXJjZSwgcmV2ZWFsaW5nIHdoaWNoIHN5bWJvbHNcbiAgICAgKiB3ZXJlIHJlbmRlcmVkIG9yIHdoaWNoIHdlcmUgaGlkZGVuIGR1ZSB0byBjb2xsaXNpb25zLlxuICAgICAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzaG93Q29sbGlzaW9uQm94ZXNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICovXG4gICAgZ2V0IHNob3dDb2xsaXNpb25Cb3hlcygpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzOyB9XG4gICAgc2V0IHNob3dDb2xsaXNpb25Cb3hlcyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIHR1cm4gY29sbGlzaW9uIGJveGVzIG9uIHdlIGhhdmUgdG8gZ2VuZXJhdGUgdGhlbSBmb3IgZXhpc3RpbmcgdGlsZXNcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgdHVybiB0aGVtIG9mZiwgdGhlcmUncyBubyBjb3N0IHRvIGxlYXZpbmcgZXhpc3RpbmcgYm94ZXMgaW4gcGxhY2VcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgY2FsbCBhbiB1cGRhdGUgdG8gcmVtb3ZlIGNvbGxpc2lvbiBib3hlc1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIEdldHMgYW5kIHNldHMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIHNob3VsZCBjb2xvci1jb2RlXG4gICAgICogZWFjaCBmcmFnbWVudCB0byBzaG93IGhvdyBtYW55IHRpbWVzIGl0IGhhcyBiZWVuIHNoYWRlZC5cbiAgICAgKiBXaGl0ZSBmcmFnbWVudHMgaGF2ZSBiZWVuIHNoYWRlZCA4IG9yIG1vcmUgdGltZXMuXG4gICAgICogQmxhY2sgZnJhZ21lbnRzIGhhdmUgYmVlbiBzaGFkZWQgMCB0aW1lcy5cbiAgICAgKiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuICAgICAqXG4gICAgICogQG5hbWUgc2hvd092ZXJkcmF3XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqL1xuICAgIGdldCBzaG93T3ZlcmRyYXdJbnNwZWN0b3IoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcjsgfVxuICAgIHNldCBzaG93T3ZlcmRyYXdJbnNwZWN0b3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciA9PT0gdmFsdWUpIHJldHVybjtcbiAgICAgICAgdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIHdpbGxcbiAgICAgKiBjb250aW51b3VzbHkgcmVwYWludC4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yIGFuYWx5emluZyBwZXJmb3JtYW5jZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlcGFpbnRcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICovXG4gICAgZ2V0IHJlcGFpbnQoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3JlcGFpbnQ7IH1cbiAgICBzZXQgcmVwYWludCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fcmVwYWludCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlcGFpbnQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaG93IHZlcnRpY2VzXG4gICAgZ2V0IHZlcnRpY2VzKCk6IGJvb2xlYW4geyByZXR1cm4gISF0aGlzLl92ZXJ0aWNlczsgfVxuICAgIHNldCB2ZXJ0aWNlcyh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLl92ZXJ0aWNlcyA9IHZhbHVlOyB0aGlzLl91cGRhdGUoKTsgfVxuXG4gICAgLy8gZm9yIGNhY2hlIGJyb3dzZXIgdGVzdHNcbiAgICBfc2V0Q2FjaGVMaW1pdHMobGltaXQ6IG51bWJlciwgY2hlY2tUaHJlc2hvbGQ6IG51bWJlcikge1xuICAgICAgICBzZXRDYWNoZUxpbWl0cyhsaW1pdCwgY2hlY2tUaHJlc2hvbGQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJzaW9uIG9mIE1hcGJveCBHTCBKUyBpbiB1c2UgYXMgc3BlY2lmaWVkIGluIHBhY2thZ2UuanNvbiwgQ0hBTkdFTE9HLm1kLCBhbmQgdGhlIEdpdEh1YiByZWxlYXNlLlxuICAgICAqXG4gICAgICogQG5hbWUgdmVyc2lvblxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAdmFyIHtzdHJpbmd9IHZlcnNpb25cbiAgICAgKi9cblxuICAgIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7IHJldHVybiB2ZXJzaW9uOyB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hcDtcblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShub2RlKSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgaW50ZXJhY3RpdmUgY29udHJvbHMgYWRkZWQgdG8gdGhlIG1hcC4gVGhpcyBpcyBhblxuICogc3BlY2lmaWNhdGlvbiBmb3IgaW1wbGVtZW50ZXJzIHRvIG1vZGVsOiBpdCBpcyBub3RcbiAqIGFuIGV4cG9ydGVkIG1ldGhvZCBvciBjbGFzcy5cbiAqXG4gKiBDb250cm9scyBtdXN0IGltcGxlbWVudCBgb25BZGRgIGFuZCBgb25SZW1vdmVgLCBhbmQgbXVzdCBvd24gYW5cbiAqIGVsZW1lbnQsIHdoaWNoIGlzIG9mdGVuIGEgYGRpdmAgZWxlbWVudC4gVG8gdXNlIE1hcGJveCBHTCBKUydzXG4gKiBkZWZhdWx0IGNvbnRyb2wgc3R5bGluZywgYWRkIHRoZSBgbWFwYm94Z2wtY3RybGAgY2xhc3MgdG8geW91ciBjb250cm9sJ3NcbiAqIG5vZGUuXG4gKlxuICogQGludGVyZmFjZSBJQ29udHJvbFxuICogQGV4YW1wbGVcbiAqIC8vIENvbnRyb2wgaW1wbGVtZW50ZWQgYXMgRVM2IGNsYXNzXG4gKiBjbGFzcyBIZWxsb1dvcmxkQ29udHJvbCB7XG4gKiAgICAgb25BZGQobWFwKSB7XG4gKiAgICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAqICAgICAgICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gKiAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUgPSAnbWFwYm94Z2wtY3RybCc7XG4gKiAgICAgICAgIHRoaXMuX2NvbnRhaW5lci50ZXh0Q29udGVudCA9ICdIZWxsbywgd29ybGQnO1xuICogICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICogICAgIH1cbiAqXG4gKiAgICAgb25SZW1vdmUoKSB7XG4gKiAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gKiAgICAgICAgIHRoaXMuX21hcCA9IHVuZGVmaW5lZDtcbiAqICAgICB9XG4gKiB9XG4gKlxuICogLy8gQ29udHJvbCBpbXBsZW1lbnRlZCBhcyBFUzUgcHJvdG90eXBpY2FsIGNsYXNzXG4gKiBmdW5jdGlvbiBIZWxsb1dvcmxkQ29udHJvbCgpIHsgfVxuICpcbiAqIEhlbGxvV29ybGRDb250cm9sLnByb3RvdHlwZS5vbkFkZCA9IGZ1bmN0aW9uKG1hcCkge1xuICogICAgIHRoaXMuX21hcCA9IG1hcDtcbiAqICAgICB0aGlzLl9jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAqICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0gJ21hcGJveGdsLWN0cmwnO1xuICogICAgIHRoaXMuX2NvbnRhaW5lci50ZXh0Q29udGVudCA9ICdIZWxsbywgd29ybGQnO1xuICogICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gKiB9O1xuICpcbiAqIEhlbGxvV29ybGRDb250cm9sLnByb3RvdHlwZS5vblJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAqICAgICAgdGhpcy5fY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcbiAqICAgICAgdGhpcy5fbWFwID0gdW5kZWZpbmVkO1xuICogfTtcbiAqL1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgY29udHJvbCBvbiB0aGUgbWFwIGFuZCBnaXZlIGl0IGEgY2hhbmNlIHRvIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVyc1xuICogYW5kIHJlc291cmNlcy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHtAbGluayBNYXAjYWRkQ29udHJvbH1cbiAqIGludGVybmFsbHkuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgSUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgb25BZGRcbiAqIEBwYXJhbSB7TWFwfSBtYXAgdGhlIE1hcCB0aGlzIGNvbnRyb2wgd2lsbCBiZSBhZGRlZCB0b1xuICogQHJldHVybnMge0hUTUxFbGVtZW50fSBUaGUgY29udHJvbCdzIGNvbnRhaW5lciBlbGVtZW50LiBUaGlzIHNob3VsZFxuICogYmUgY3JlYXRlZCBieSB0aGUgY29udHJvbCBhbmQgcmV0dXJuZWQgYnkgb25BZGQgd2l0aG91dCBiZWluZyBhdHRhY2hlZFxuICogdG8gdGhlIERPTTogdGhlIG1hcCB3aWxsIGluc2VydCB0aGUgY29udHJvbCdzIGVsZW1lbnQgaW50byB0aGUgRE9NXG4gKiBhcyBuZWNlc3NhcnkuXG4gKi9cblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGEgY29udHJvbCBvbiB0aGUgbWFwIGFuZCBnaXZlIGl0IGEgY2hhbmNlIHRvIGRldGFjaCBldmVudCBsaXN0ZW5lcnNcbiAqIGFuZCByZXNvdXJjZXMuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB7QGxpbmsgTWFwI3JlbW92ZUNvbnRyb2x9XG4gKiBpbnRlcm5hbGx5LlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIElDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uUmVtb3ZlXG4gKiBAcGFyYW0ge01hcH0gbWFwIHRoZSBNYXAgdGhpcyBjb250cm9sIHdpbGwgYmUgcmVtb3ZlZCBmcm9tXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfSB0aGVyZSBpcyBubyByZXF1aXJlZCByZXR1cm4gdmFsdWUgZm9yIHRoaXMgbWV0aG9kXG4gKi9cblxuLyoqXG4gKiBPcHRpb25hbGx5IHByb3ZpZGUgYSBkZWZhdWx0IHBvc2l0aW9uIGZvciB0aGlzIGNvbnRyb2wuIElmIHRoaXMgbWV0aG9kXG4gKiBpcyBpbXBsZW1lbnRlZCBhbmQge0BsaW5rIE1hcCNhZGRDb250cm9sfSBpcyBjYWxsZWQgd2l0aG91dCB0aGUgYHBvc2l0aW9uYFxuICogcGFyYW1ldGVyLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZ2V0RGVmYXVsdFBvc2l0aW9uIHdpbGwgYmUgdXNlZCBhcyB0aGVcbiAqIGNvbnRyb2wncyBwb3NpdGlvbi5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBJQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBnZXREZWZhdWx0UG9zaXRpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IGEgY29udHJvbCBwb3NpdGlvbiwgb25lIG9mIHRoZSB2YWx1ZXMgdmFsaWQgaW4gYWRkQ29udHJvbC5cbiAqL1xuXG4vKipcbiAqIEEgW2BQb2ludGAgZ2VvbWV0cnldKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvcG9pbnQtZ2VvbWV0cnkpIG9iamVjdCwgd2hpY2ggaGFzXG4gKiBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzIHJlcHJlc2VudGluZyBzY3JlZW4gY29vcmRpbmF0ZXMgaW4gcGl4ZWxzLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBvaW50XG4gKi9cblxuLyoqXG4gKiBBIHtAbGluayBQb2ludH0gb3IgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgcmVwcmVzZW50aW5nIGB4YCBhbmQgYHlgIHNjcmVlbiBjb29yZGluYXRlcyBpbiBwaXhlbHMuXG4gKlxuICogQHR5cGVkZWYgeyhQb2ludCB8IEFycmF5PG51bWJlcj4pfSBQb2ludExpa2VcbiAqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2V4dGVuZCwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBEcmFnUm90YXRlSGFuZGxlciBmcm9tICcuLi9oYW5kbGVyL2RyYWdfcm90YXRlJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBzaG93Q29tcGFzcz86IGJvb2xlYW4sXG4gICAgc2hvd1pvb20/OiBib29sZWFuLFxuICAgIHZpc3VhbGl6ZVBpdGNoPzogYm9vbGVhblxufTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgc2hvd0NvbXBhc3M6IHRydWUsXG4gICAgc2hvd1pvb206IHRydWUsXG4gICAgdmlzdWFsaXplUGl0Y2g6IGZhbHNlXG59O1xuXG4vKipcbiAqIEEgYE5hdmlnYXRpb25Db250cm9sYCBjb250cm9sIGNvbnRhaW5zIHpvb20gYnV0dG9ucyBhbmQgYSBjb21wYXNzLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2hvd0NvbXBhc3M9dHJ1ZV0gSWYgYHRydWVgIHRoZSBjb21wYXNzIGJ1dHRvbiBpcyBpbmNsdWRlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2hvd1pvb209dHJ1ZV0gSWYgYHRydWVgIHRoZSB6b29tLWluIGFuZCB6b29tLW91dCBidXR0b25zIGFyZSBpbmNsdWRlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudmlzdWFsaXplUGl0Y2g9ZmFsc2VdIElmIGB0cnVlYCB0aGUgcGl0Y2ggaXMgdmlzdWFsaXplZCBieSByb3RhdGluZyBYLWF4aXMgb2YgY29tcGFzcy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbmF2ID0gbmV3IG1hcGJveGdsLk5hdmlnYXRpb25Db250cm9sKCk7XG4gKiBtYXAuYWRkQ29udHJvbChuYXYsICd0b3AtbGVmdCcpO1xuICogQHNlZSBbRGlzcGxheSBtYXAgbmF2aWdhdGlvbiBjb250cm9sc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9uYXZpZ2F0aW9uLylcbiAqIEBzZWUgW0FkZCBhIHRoaXJkIHBhcnR5IHZlY3RvciB0aWxlIHNvdXJjZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90aGlyZC1wYXJ0eS8pXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25Db250cm9sIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgb3B0aW9uczogT3B0aW9ucztcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfem9vbUluQnV0dG9uOiBIVE1MRWxlbWVudDtcbiAgICBfem9vbU91dEJ1dHRvbjogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbXBhc3M6IEhUTUxFbGVtZW50O1xuICAgIF9jb21wYXNzQXJyb3c6IEhUTUxFbGVtZW50O1xuICAgIF9oYW5kbGVyOiBEcmFnUm90YXRlSGFuZGxlcjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCcpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCAoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dab29tKSB7XG4gICAgICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICAgICAnX3VwZGF0ZVpvb21CdXR0b25zJ1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl96b29tSW5CdXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oJ21hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLXpvb20taW4nLCAnWm9vbSBpbicsIChlKSA9PiB0aGlzLl9tYXAuem9vbUluKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgIHRoaXMuX3pvb21PdXRCdXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oJ21hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLXpvb20tb3V0JywgJ1pvb20gb3V0JywgKGUpID0+IHRoaXMuX21hcC56b29tT3V0KHt9LCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dDb21wYXNzKSB7XG4gICAgICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICAgICAnX3JvdGF0ZUNvbXBhc3NBcnJvdydcbiAgICAgICAgICAgIF0sIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5fY29tcGFzcyA9IHRoaXMuX2NyZWF0ZUJ1dHRvbignbWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtY29tcGFzcycsICdSZXNldCBiZWFyaW5nIHRvIG5vcnRoJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5yZXNldE5vcnRoUGl0Y2goe30sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnJlc2V0Tm9ydGgoe30sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jb21wYXNzQXJyb3cgPSBET00uY3JlYXRlKCdzcGFuJywgJ21hcGJveGdsLWN0cmwtY29tcGFzcy1hcnJvdycsIHRoaXMuX2NvbXBhc3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVpvb21CdXR0b25zKCkge1xuICAgICAgICBjb25zdCB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKTtcbiAgICAgICAgaWYgKHpvb20gPT09IHRoaXMuX21hcC5nZXRNYXhab29tKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3pvb21JbkJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWljb24tZGlzYWJsZWQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3pvb21JbkJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWljb24tZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoem9vbSA9PT0gdGhpcy5fbWFwLmdldE1pblpvb20oKSkge1xuICAgICAgICAgICAgdGhpcy5fem9vbU91dEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWljb24tZGlzYWJsZWQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3pvb21PdXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1pY29uLWRpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcm90YXRlQ29tcGFzc0Fycm93KCkge1xuICAgICAgICBjb25zdCByb3RhdGUgPSB0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2ggP1xuICAgICAgICAgICAgYHNjYWxlKCR7MSAvIE1hdGgucG93KE1hdGguY29zKHRoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2ggKiAoTWF0aC5QSSAvIDE4MCkpLCAwLjUpfSkgcm90YXRlWCgke3RoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2h9ZGVnKSByb3RhdGVaKCR7dGhpcy5fbWFwLnRyYW5zZm9ybS5hbmdsZSAqICgxODAgLyBNYXRoLlBJKX1kZWcpYCA6XG4gICAgICAgICAgICBgcm90YXRlKCR7dGhpcy5fbWFwLnRyYW5zZm9ybS5hbmdsZSAqICgxODAgLyBNYXRoLlBJKX1kZWcpYDtcblxuICAgICAgICB0aGlzLl9jb21wYXNzQXJyb3cuc3R5bGUudHJhbnNmb3JtID0gcm90YXRlO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Wm9vbSkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCd6b29tJywgdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dDb21wYXNzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdwaXRjaCcsIHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ3JvdGF0ZScsIHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyk7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3coKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZXIgPSBuZXcgRHJhZ1JvdGF0ZUhhbmRsZXIobWFwLCB7YnV0dG9uOiAnbGVmdCcsIGVsZW1lbnQ6IHRoaXMuX2NvbXBhc3N9KTtcbiAgICAgICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHRoaXMuX2NvbXBhc3MsICdtb3VzZWRvd24nLCB0aGlzLl9oYW5kbGVyLm9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHRoaXMuX2NvbXBhc3MsICd0b3VjaHN0YXJ0JywgdGhpcy5faGFuZGxlci5vbk1vdXNlRG93biwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVyLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Wm9vbSkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignem9vbScsIHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dDb21wYXNzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigncGl0Y2gnLCB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigncm90YXRlJywgdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KTtcbiAgICAgICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2NvbXBhc3MsICdtb3VzZWRvd24nLCB0aGlzLl9oYW5kbGVyLm9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2NvbXBhc3MsICd0b3VjaHN0YXJ0JywgdGhpcy5faGFuZGxlci5vbk1vdXNlRG93biwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVyLmRpc2FibGUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9oYW5kbGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX21hcDtcbiAgICB9XG5cbiAgICBfY3JlYXRlQnV0dG9uKGNsYXNzTmFtZTogc3RyaW5nLCBhcmlhTGFiZWw6IHN0cmluZywgZm46ICgpID0+IG1peGVkKSB7XG4gICAgICAgIGNvbnN0IGEgPSBET00uY3JlYXRlKCdidXR0b24nLCBjbGFzc05hbWUsIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIGEudHlwZSA9ICdidXR0b24nO1xuICAgICAgICBhLnRpdGxlID0gYXJpYUxhYmVsO1xuICAgICAgICBhLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGFyaWFMYWJlbCk7XG4gICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmbik7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkNvbnRyb2w7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5cbi8qKlxuICogR2l2ZW4gYSBMbmdMYXQsIHByaW9yIHByb2plY3RlZCBwb3NpdGlvbiwgYW5kIGEgdHJhbnNmb3JtLCByZXR1cm4gYSBuZXcgTG5nTGF0IHNoaWZ0ZWRcbiAqIG4gw4PClyAzNjDDgsKwIGVhc3Qgb3Igd2VzdCBmb3Igc29tZSBuIMOiwonCpSAwIHN1Y2ggdGhhdDpcbiAqXG4gKiAqIHRoZSBwcm9qZWN0ZWQgbG9jYXRpb24gb2YgdGhlIHJlc3VsdCBpcyBvbiBzY3JlZW4sIGlmIHBvc3NpYmxlLCBhbmQgc2Vjb25kYXJpbHk6XG4gKiAqIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHByb2plY3RlZCBsb2NhdGlvbiBvZiB0aGUgcmVzdWx0IGFuZCB0aGUgcHJpb3IgcG9zaXRpb25cbiAqICAgaXMgbWluaW1pemVkLlxuICpcbiAqIFRoZSBvYmplY3QgaXMgdG8gcHJlc2VydmUgcGVyY2VpdmVkIG9iamVjdCBjb25zdGFuY3kgZm9yIFBvcHVwcyBhbmQgTWFya2VycyBhcyBtdWNoIGFzXG4gKiBwb3NzaWJsZTsgdGhleSBzaG91bGQgYXZvaWQgc2hpZnRpbmcgbGFyZ2UgZGlzdGFuY2VzIGFjcm9zcyB0aGUgc2NyZWVuLCBldmVuIHdoZW4gdGhlXG4gKiBtYXAgY2VudGVyIGNoYW5nZXMgYnkgw4LCsTM2MMOCwrAgZHVlIHRvIGF1dG9tYXRpYyB3cmFwcGluZywgYW5kIHdoZW4gYWJvdXQgdG8gZ28gb2ZmIHNjcmVlbixcbiAqIHNob3VsZCB3cmFwIGp1c3QgZW5vdWdoIHRvIGF2b2lkIGRvaW5nIHNvLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxuZ0xhdDogTG5nTGF0LCBwcmlvclBvczogP1BvaW50LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSk6IExuZ0xhdCB7XG4gICAgbG5nTGF0ID0gbmV3IExuZ0xhdChsbmdMYXQubG5nLCBsbmdMYXQubGF0KTtcblxuICAgIC8vIEZpcnN0LCB0cnkgc2hpZnRpbmcgb25lIHdvcmxkIGluIGVpdGhlciBkaXJlY3Rpb24sIGFuZCBzZWUgaWYgZWl0aGVyIGlzIGNsb3NlciB0byB0aGVcbiAgICAvLyBwcmlvciBwb3NpdGlvbi4gVGhpcyBwcmVzZXJ2ZXMgb2JqZWN0IGNvbnN0YW5jeSB3aGVuIHRoZSBtYXAgY2VudGVyIGlzIGF1dG8td3JhcHBlZFxuICAgIC8vIGR1cmluZyBhbmltYXRpb25zLlxuICAgIGlmIChwcmlvclBvcykge1xuICAgICAgICBjb25zdCBsZWZ0ICA9IG5ldyBMbmdMYXQobG5nTGF0LmxuZyAtIDM2MCwgbG5nTGF0LmxhdCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gbmV3IExuZ0xhdChsbmdMYXQubG5nICsgMzYwLCBsbmdMYXQubGF0KTtcbiAgICAgICAgY29uc3QgZGVsdGEgPSB0cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChsbmdMYXQpLmRpc3RTcXIocHJpb3JQb3MpO1xuICAgICAgICBpZiAodHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQobGVmdCkuZGlzdFNxcihwcmlvclBvcykgPCBkZWx0YSkge1xuICAgICAgICAgICAgbG5nTGF0ID0gbGVmdDtcbiAgICAgICAgfSBlbHNlIGlmICh0cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChyaWdodCkuZGlzdFNxcihwcmlvclBvcykgPCBkZWx0YSkge1xuICAgICAgICAgICAgbG5nTGF0ID0gcmlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZWNvbmQsIHdyYXAgdG93YXJkIHRoZSBjZW50ZXIgdW50aWwgdGhlIG5ldyBwb3NpdGlvbiBpcyBvbiBzY3JlZW4sIG9yIHdlIGNhbid0IGdldFxuICAgIC8vIGFueSBjbG9zZXIuXG4gICAgd2hpbGUgKE1hdGguYWJzKGxuZ0xhdC5sbmcgLSB0cmFuc2Zvcm0uY2VudGVyLmxuZykgPiAxODApIHtcbiAgICAgICAgY29uc3QgcG9zID0gdHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQobG5nTGF0KTtcbiAgICAgICAgaWYgKHBvcy54ID49IDAgJiYgcG9zLnkgPj0gMCAmJiBwb3MueCA8PSB0cmFuc2Zvcm0ud2lkdGggJiYgcG9zLnkgPD0gdHJhbnNmb3JtLmhlaWdodCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxuZ0xhdC5sbmcgPiB0cmFuc2Zvcm0uY2VudGVyLmxuZykge1xuICAgICAgICAgICAgbG5nTGF0LmxuZyAtPSAzNjA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsbmdMYXQubG5nICs9IDM2MDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsbmdMYXQ7XG59XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgdHlwZSBBbmNob3IgPVxuICAgIHwgJ2NlbnRlcidcbiAgICB8ICd0b3AnXG4gICAgfCAnYm90dG9tJ1xuICAgIHwgJ2xlZnQnXG4gICAgfCAncmlnaHQnXG4gICAgfCAndG9wLWxlZnQnXG4gICAgfCAndG9wLXJpZ2h0J1xuICAgIHwgJ2JvdHRvbS1sZWZ0J1xuICAgIHwgJ2JvdHRvbS1yaWdodCc7XG5cbmV4cG9ydCBjb25zdCBhbmNob3JUcmFuc2xhdGU6IHtbQW5jaG9yXTogc3RyaW5nfSA9IHtcbiAgICAnY2VudGVyJzogJ3RyYW5zbGF0ZSgtNTAlLC01MCUpJyxcbiAgICAndG9wJzogJ3RyYW5zbGF0ZSgtNTAlLDApJyxcbiAgICAndG9wLWxlZnQnOiAndHJhbnNsYXRlKDAsMCknLFxuICAgICd0b3AtcmlnaHQnOiAndHJhbnNsYXRlKC0xMDAlLDApJyxcbiAgICAnYm90dG9tJzogJ3RyYW5zbGF0ZSgtNTAlLC0xMDAlKScsXG4gICAgJ2JvdHRvbS1sZWZ0JzogJ3RyYW5zbGF0ZSgwLC0xMDAlKScsXG4gICAgJ2JvdHRvbS1yaWdodCc6ICd0cmFuc2xhdGUoLTEwMCUsLTEwMCUpJyxcbiAgICAnbGVmdCc6ICd0cmFuc2xhdGUoMCwtNTAlKScsXG4gICAgJ3JpZ2h0JzogJ3RyYW5zbGF0ZSgtMTAwJSwtNTAlKSdcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUFuY2hvckNsYXNzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBhbmNob3I6IEFuY2hvciwgcHJlZml4OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjbGFzc0xpc3QgPSBlbGVtZW50LmNsYXNzTGlzdDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhbmNob3JUcmFuc2xhdGUpIHtcbiAgICAgICAgY2xhc3NMaXN0LnJlbW92ZShgbWFwYm94Z2wtJHtwcmVmaXh9LWFuY2hvci0ke2tleX1gKTtcbiAgICB9XG4gICAgY2xhc3NMaXN0LmFkZChgbWFwYm94Z2wtJHtwcmVmaXh9LWFuY2hvci0ke2FuY2hvcn1gKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vdXRpbC9kb20nO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBzbWFydFdyYXAgZnJvbSAnLi4vdXRpbC9zbWFydF93cmFwJztcbmltcG9ydCB7YmluZEFsbCwgZXh0ZW5kfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHt0eXBlIEFuY2hvciwgYW5jaG9yVHJhbnNsYXRlLCBhcHBseUFuY2hvckNsYXNzfSBmcm9tICcuL2FuY2hvcic7XG5pbXBvcnQge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4vbWFwJztcbmltcG9ydCB0eXBlIFBvcHVwIGZyb20gJy4vcG9wdXAnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gXCIuLi9nZW8vbG5nX2xhdFwiO1xuaW1wb3J0IHR5cGUge01hcE1vdXNlRXZlbnQsIE1hcFRvdWNoRXZlbnR9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCB0eXBlIHtQb2ludExpa2V9IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgZWxlbWVudD86IEhUTUxFbGVtZW50LFxuICAgIG9mZnNldD86IFBvaW50TGlrZSxcbiAgICBhbmNob3I/OiBBbmNob3IsXG4gICAgY29sb3I/OiBzdHJpbmcsXG4gICAgZHJhZ2dhYmxlPzogYm9vbGVhblxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFya2VyIGNvbXBvbmVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW29wdGlvbnMuZWxlbWVudF0gRE9NIGVsZW1lbnQgdG8gdXNlIGFzIGEgbWFya2VyLiBUaGUgZGVmYXVsdCBpcyBhIGxpZ2h0IGJsdWUsIGRyb3BsZXQtc2hhcGVkIFNWRyBtYXJrZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5jaG9yPSdjZW50ZXInXSBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBwYXJ0IG9mIHRoZSBNYXJrZXIgdGhhdCBzaG91bGQgYmUgcG9zaXRpb25lZCBjbG9zZXN0IHRvIHRoZSBjb29yZGluYXRlIHNldCB2aWEge0BsaW5rIE1hcmtlciNzZXRMbmdMYXR9LlxuICogICBPcHRpb25zIGFyZSBgJ2NlbnRlcidgLCBgJ3RvcCdgLCBgJ2JvdHRvbSdgLCBgJ2xlZnQnYCwgYCdyaWdodCdgLCBgJ3RvcC1sZWZ0J2AsIGAndG9wLXJpZ2h0J2AsIGAnYm90dG9tLWxlZnQnYCwgYW5kIGAnYm90dG9tLXJpZ2h0J2AuXG4gKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0XSBUaGUgb2Zmc2V0IGluIHBpeGVscyBhcyBhIHtAbGluayBQb2ludExpa2V9IG9iamVjdCB0byBhcHBseSByZWxhdGl2ZSB0byB0aGUgZWxlbWVudCdzIGNlbnRlci4gTmVnYXRpdmVzIGluZGljYXRlIGxlZnQgYW5kIHVwLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbG9yPScjM0ZCMUNFJ10gVGhlIGNvbG9yIHRvIHVzZSBmb3IgdGhlIGRlZmF1bHQgbWFya2VyIGlmIG9wdGlvbnMuZWxlbWVudCBpcyBub3QgcHJvdmlkZWQuIFRoZSBkZWZhdWx0IGlzIGxpZ2h0IGJsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRyYWdnYWJsZT1mYWxzZV0gQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgYSBtYXJrZXIgaXMgYWJsZSB0byBiZSBkcmFnZ2VkIHRvIGEgbmV3IHBvc2l0aW9uIG9uIHRoZSBtYXAuXG4gKiBAZXhhbXBsZVxuICogdmFyIG1hcmtlciA9IG5ldyBtYXBib3hnbC5NYXJrZXIoKVxuICogICAuc2V0TG5nTGF0KFszMC41LCA1MC41XSlcbiAqICAgLmFkZFRvKG1hcCk7XG4gKiBAc2VlIFtBZGQgY3VzdG9tIGljb25zIHdpdGggTWFya2Vyc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jdXN0b20tbWFya2VyLWljb25zLylcbiAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBNYXJrZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLW1hcmtlci8pXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hcmtlciBleHRlbmRzIEV2ZW50ZWQge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfYW5jaG9yOiBBbmNob3I7XG4gICAgX29mZnNldDogUG9pbnQ7XG4gICAgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIF9wb3B1cDogP1BvcHVwO1xuICAgIF9sbmdMYXQ6IExuZ0xhdDtcbiAgICBfcG9zOiA/UG9pbnQ7XG4gICAgX2NvbG9yOiA/c3RyaW5nO1xuICAgIF9kZWZhdWx0TWFya2VyOiBib29sZWFuO1xuICAgIF9kcmFnZ2FibGU6IGJvb2xlYW47XG4gICAgX3N0YXRlOiAnaW5hY3RpdmUnIHwgJ3BlbmRpbmcnIHwgJ2FjdGl2ZSc7IC8vIHVzZWQgZm9yIGhhbmRsaW5nIGRyYWcgZXZlbnRzXG4gICAgX3Bvc2l0aW9uRGVsdGE6ID9udW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogT3B0aW9ucywgbGVnYWN5T3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgLS0gdGhlIGNvbnN0cnVjdG9yIHVzZWQgdG8gYWNjZXB0IHRoZSBlbGVtZW50IGFzIGFcbiAgICAgICAgLy8gcmVxdWlyZWQgZmlyc3QgYXJndW1lbnQsIGJlZm9yZSBpdCB3YXMgbWFkZSBvcHRpb25hbC5cbiAgICAgICAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQgfHwgbGVnYWN5T3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7ZWxlbWVudDogb3B0aW9uc30sIGxlZ2FjeU9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX3VwZGF0ZScsXG4gICAgICAgICAgICAnX29uTW92ZScsXG4gICAgICAgICAgICAnX29uVXAnLFxuICAgICAgICAgICAgJ19hZGREcmFnSGFuZGxlcicsXG4gICAgICAgICAgICAnX29uTWFwQ2xpY2snXG4gICAgICAgIF0sIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX2FuY2hvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hbmNob3IgfHwgJ2NlbnRlcic7XG4gICAgICAgIHRoaXMuX2NvbG9yID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbG9yIHx8ICcjM0ZCMUNFJztcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gb3B0aW9ucyAmJiBvcHRpb25zLmRyYWdnYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAnaW5hY3RpdmUnO1xuXG4gICAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9kZWZhdWx0TWFya2VyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBET00uY3JlYXRlKCdkaXYnKTtcblxuICAgICAgICAgICAgLy8gY3JlYXRlIGRlZmF1bHQgbWFwIG1hcmtlciBTVkdcbiAgICAgICAgICAgIGNvbnN0IHN2ZyA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnc3ZnJyk7XG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgJzQxcHgnKTtcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnd2lkdGgnLCAnMjdweCcpO1xuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZU5TKG51bGwsICd2aWV3Qm94JywgJzAgMCAyNyA0MScpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXJrZXJMYXJnZSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgbWFya2VyTGFyZ2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZScsICdub25lJyk7XG4gICAgICAgICAgICBtYXJrZXJMYXJnZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnc3Ryb2tlLXdpZHRoJywgJzEnKTtcbiAgICAgICAgICAgIG1hcmtlckxhcmdlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJ25vbmUnKTtcbiAgICAgICAgICAgIG1hcmtlckxhcmdlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsLXJ1bGUnLCAnZXZlbm9kZCcpO1xuXG4gICAgICAgICAgICBjb25zdCBwYWdlMSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgcGFnZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwtcnVsZScsICdub256ZXJvJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNoYWRvdyA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgc2hhZG93LnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDMuMCwgMjkuMCknKTtcbiAgICAgICAgICAgIHNoYWRvdy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjMDAwMDAwJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVsbGlwc2VzID0gW1xuICAgICAgICAgICAgICAgIHsncngnOiAnMTAuNScsICdyeSc6ICc1LjI1MDAyMjczJ30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICcxMC41JywgJ3J5JzogJzUuMjUwMDIyNzMnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzkuNScsICdyeSc6ICc0Ljc3Mjc1MDA3J30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc4LjUnLCAncnknOiAnNC4yOTU0OTkzNid9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnNy41JywgJ3J5JzogJzMuODE4MjIzMDgnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzYuNScsICdyeSc6ICczLjM0MDk0Njc5J30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc1LjUnLCAncnknOiAnMi44NjM2NzA1MSd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnNC41JywgJ3J5JzogJzIuMzg2MzY4NjQnfVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkYXRhIG9mIGVsbGlwc2VzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxsaXBzZSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZWxsaXBzZScpO1xuICAgICAgICAgICAgICAgIGVsbGlwc2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ29wYWNpdHknLCAnMC4wNCcpO1xuICAgICAgICAgICAgICAgIGVsbGlwc2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N4JywgJzEwLjUnKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeScsICc1LjgwMDI5MDA4Jyk7XG4gICAgICAgICAgICAgICAgZWxsaXBzZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncngnLCBkYXRhWydyeCddKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdyeScsIGRhdGFbJ3J5J10pO1xuICAgICAgICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChlbGxpcHNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgYmFja2dyb3VuZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsIHRoaXMuX2NvbG9yKTtcblxuICAgICAgICAgICAgY29uc3QgYmdQYXRoID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJyk7XG4gICAgICAgICAgICBiZ1BhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCAnTTI3LDEzLjUgQzI3LDE5LjA3NDY0NCAyMC4yNTAwMDEsMjcuMDAwMDAyIDE0Ljc1LDM0LjUwMDAwMiBDMTQuMDE2NjY1LDM1LjUwMDAwNCAxMi45ODMzMzUsMzUuNTAwMDA0IDEyLjI1LDM0LjUwMDAwMiBDNi43NDk5OTkzLDI3LjAwMDAwMiAwLDE5LjIyMjU2MiAwLDEzLjUgQzAsNi4wNDQxNTU5IDYuMDQ0MTU1OSwwIDEzLjUsMCBDMjAuOTU1ODQ0LDAgMjcsNi4wNDQxNTU5IDI3LDEzLjUgWicpO1xuXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLmFwcGVuZENoaWxkKGJnUGF0aCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJvcmRlciA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgYm9yZGVyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdvcGFjaXR5JywgJzAuMjUnKTtcbiAgICAgICAgICAgIGJvcmRlci5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjMDAwMDAwJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJvcmRlclBhdGggPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKTtcbiAgICAgICAgICAgIGJvcmRlclBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCAnTTEzLjUsMCBDNi4wNDQxNTU5LDAgMCw2LjA0NDE1NTkgMCwxMy41IEMwLDE5LjIyMjU2MiA2Ljc0OTk5OTMsMjcgMTIuMjUsMzQuNSBDMTMsMzUuNTIyNzI3IDE0LjAxNjY2NCwzNS41MDAwMDQgMTQuNzUsMzQuNSBDMjAuMjUwMDAxLDI3IDI3LDE5LjA3NDY0NCAyNywxMy41IEMyNyw2LjA0NDE1NTkgMjAuOTU1ODQ0LDAgMTMuNSwwIFogTTEzLjUsMSBDMjAuNDE1NDA0LDEgMjYsNi41ODQ1OTYgMjYsMTMuNSBDMjYsMTUuODk4NjU3IDI0LjQ5NTU4NCwxOS4xODE0MzEgMjIuMjIwNzAzLDIyLjczODI4MSBDMTkuOTQ1ODIzLDI2LjI5NTEzMiAxNi43MDUxMTksMzAuMTQyMTY3IDEzLjk0MzM1OSwzMy45MDgyMDMgQzEzLjc0MzQ0NSwzNC4xODA4MTQgMTMuNjEyNzE1LDM0LjMyMjczOCAxMy41LDM0LjQ0MTQwNiBDMTMuMzg3Mjg1LDM0LjMyMjczOCAxMy4yNTY1NTUsMzQuMTgwODE0IDEzLjA1NjY0MSwzMy45MDgyMDMgQzEwLjI4NDQ4MSwzMC4xMjc5ODUgNy40MTQ4Njg0LDI2LjMxNDE1OSA1LjAxNTYyNSwyMi43NzM0MzggQzIuNjE2MzgxNiwxOS4yMzI3MTUgMSwxNS45NTM1MzggMSwxMy41IEMxLDYuNTg0NTk2IDYuNTg0NTk2LDEgMTMuNSwxIFonKTtcblxuICAgICAgICAgICAgYm9yZGVyLmFwcGVuZENoaWxkKGJvcmRlclBhdGgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYWtpID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdnJyk7XG4gICAgICAgICAgICBtYWtpLnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDYuMCwgNy4wKScpO1xuICAgICAgICAgICAgbWFraS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjRkZGRkZGJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZUNvbnRhaW5lciA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgY2lyY2xlQ29udGFpbmVyLnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDguMCwgOC4wKScpO1xuXG4gICAgICAgICAgICBjb25zdCBjaXJjbGUxID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdjaXJjbGUnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnIzAwMDAwMCcpO1xuICAgICAgICAgICAgY2lyY2xlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnb3BhY2l0eScsICcwLjI1Jyk7XG4gICAgICAgICAgICBjaXJjbGUxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeCcsICc1LjUnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N5JywgJzUuNScpO1xuICAgICAgICAgICAgY2lyY2xlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncicsICc1LjQ5OTk5NjInKTtcblxuICAgICAgICAgICAgY29uc3QgY2lyY2xlMiA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnY2lyY2xlJyk7XG4gICAgICAgICAgICBjaXJjbGUyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJyNGRkZGRkYnKTtcbiAgICAgICAgICAgIGNpcmNsZTIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N4JywgJzUuNScpO1xuICAgICAgICAgICAgY2lyY2xlMi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3knLCAnNS41Jyk7XG4gICAgICAgICAgICBjaXJjbGUyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdyJywgJzUuNDk5OTk2MicpO1xuXG4gICAgICAgICAgICBjaXJjbGVDb250YWluZXIuYXBwZW5kQ2hpbGQoY2lyY2xlMSk7XG4gICAgICAgICAgICBjaXJjbGVDb250YWluZXIuYXBwZW5kQ2hpbGQoY2lyY2xlMik7XG5cbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKHNoYWRvdyk7XG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChiYWNrZ3JvdW5kKTtcbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKGJvcmRlcik7XG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChtYWtpKTtcbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKGNpcmNsZUNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChwYWdlMSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnKTtcblxuICAgICAgICAgICAgLy8gaWYgbm8gZWxlbWVudCBhbmQgbm8gb2Zmc2V0IG9wdGlvbiBnaXZlbiBhcHBseSBhbiBvZmZzZXQgZm9yIHRoZSBkZWZhdWx0IG1hcmtlclxuICAgICAgICAgICAgLy8gdGhlIC0xNCBhcyB0aGUgeSB2YWx1ZSBvZiB0aGUgZGVmYXVsdCBtYXJrZXIgb2Zmc2V0IHdhcyBkZXRlcm1pbmVkIGFzIGZvbGxvd3NcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyB0aGUgbWFya2VyIHRpcCBpcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBzaGFkb3cgZWxsaXBzZSBmcm9tIHRoZSBkZWZhdWx0IHN2Z1xuICAgICAgICAgICAgLy8gdGhlIHkgdmFsdWUgb2YgdGhlIGNlbnRlciBvZiB0aGUgc2hhZG93IGVsbGlwc2UgcmVsYXRpdmUgdG8gdGhlIHN2ZyB0b3AgbGVmdCBpcyBcInNoYWRvdyB0cmFuc2Zvcm0gdHJhbnNsYXRlLXkgKDI5LjApICsgZWxsaXBzZSBjeSAoNS44MDAyOTAwOClcIlxuICAgICAgICAgICAgLy8gb2Zmc2V0IHRvIHRoZSBzdmcgY2VudGVyIFwiaGVpZ2h0ICg0MSAvIDIpXCIgZ2l2ZXMgKDI5LjAgKyA1LjgwMDI5MDA4KSAtICg0MSAvIDIpIGFuZCByb3VuZGVkIGZvciBhbiBpbnRlZ2VyIHBpeGVsIG9mZnNldCBnaXZlcyAxNFxuICAgICAgICAgICAgLy8gbmVnYXRpdmUgaXMgdXNlZCB0byBtb3ZlIHRoZSBtYXJrZXIgdXAgZnJvbSB0aGUgY2VudGVyIHNvIHRoZSB0aXAgaXMgYXQgdGhlIE1hcmtlciBsbmdMYXRcbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IFBvaW50LmNvbnZlcnQob3B0aW9ucyAmJiBvcHRpb25zLm9mZnNldCB8fCBbMCwgLTE0XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gUG9pbnQuY29udmVydChvcHRpb25zICYmIG9wdGlvbnMub2Zmc2V0IHx8IFswLCAwXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLW1hcmtlcicpO1xuICAgICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIChlOiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwcGx5QW5jaG9yQ2xhc3ModGhpcy5fZWxlbWVudCwgdGhpcy5fYW5jaG9yLCAnbWFya2VyJyk7XG5cbiAgICAgICAgdGhpcy5fcG9wdXAgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEF0dGFjaGVzIHRoZSBtYXJrZXIgdG8gYSBtYXBcbiAgICAgKiBAcGFyYW0ge01hcH0gbWFwXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgYWRkVG8obWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCk7XG4gICAgICAgIG1hcC5vbignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgIG1hcC5vbignbW92ZWVuZCcsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgIHRoaXMuc2V0RHJhZ2dhYmxlKHRoaXMuX2RyYWdnYWJsZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgIC8vIElmIHdlIGF0dGFjaGVkIHRoZSBgY2xpY2tgIGxpc3RlbmVyIHRvIHRoZSBtYXJrZXIgZWxlbWVudCwgdGhlIHBvcHVwXG4gICAgICAgIC8vIHdvdWxkIGNsb3NlIG9uY2UgdGhlIGV2ZW50IHByb3BvZ2F0ZWQgdG8gYG1hcGAgZHVlIHRvIHRoZVxuICAgICAgICAvLyBgUG9wdXAjX29uQ2xpY2tDbG9zZWAgbGlzdGVuZXIuXG4gICAgICAgIHRoaXMuX21hcC5vbignY2xpY2snLCB0aGlzLl9vbk1hcENsaWNrKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBtYXJrZXIgZnJvbSBhIG1hcFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1hcmtlciA9IG5ldyBtYXBib3hnbC5NYXJrZXIoKS5hZGRUbyhtYXApO1xuICAgICAqIG1hcmtlci5yZW1vdmUoKTtcbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ2NsaWNrJywgdGhpcy5fb25NYXBDbGljayk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmVlbmQnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vkb3duJywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2hzdGFydCcsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNldXAnLCB0aGlzLl9vblVwKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNoZW5kJywgdGhpcy5fb25VcCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXA7XG4gICAgICAgIH1cbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB0aGlzLl9wb3B1cC5yZW1vdmUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBtYXJrZXIncyBnZW9ncmFwaGljYWwgbG9jYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGUgbG9uZ2l0dWRlIG9mIHRoZSByZXN1bHQgbWF5IGRpZmZlciBieSBhIG11bHRpcGxlIG9mIDM2MCBkZWdyZWVzIGZyb20gdGhlIGxvbmdpdHVkZSBwcmV2aW91c2x5XG4gICAgICogc2V0IGJ5IGBzZXRMbmdMYXRgIGJlY2F1c2UgYE1hcmtlcmAgd3JhcHMgdGhlIGFuY2hvciBsb25naXR1ZGUgYWNyb3NzIGNvcGllcyBvZiB0aGUgd29ybGQgdG8ga2VlcFxuICAgICAqIHRoZSBtYXJrZXIgb24gc2NyZWVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0xuZ0xhdH1cbiAgICAgKi9cbiAgICBnZXRMbmdMYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sbmdMYXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBtYXJrZXIncyBnZW9ncmFwaGljYWwgcG9zaXRpb24gYW5kIG1vdmUgaXQuXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0TG5nTGF0KGxuZ2xhdDogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9sbmdMYXQgPSBMbmdMYXQuY29udmVydChsbmdsYXQpO1xuICAgICAgICB0aGlzLl9wb3MgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYE1hcmtlcmAncyBIVE1MIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAgICovXG4gICAgZ2V0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmluZHMgYSBQb3B1cCB0byB0aGUgTWFya2VyXG4gICAgICogQHBhcmFtIHBvcHVwIGFuIGluc3RhbmNlIG9mIHRoZSBgUG9wdXBgIGNsYXNzLiBJZiB1bmRlZmluZWQgb3IgbnVsbCwgYW55IHBvcHVwXG4gICAgICogc2V0IG9uIHRoaXMgYE1hcmtlcmAgaW5zdGFuY2UgaXMgdW5zZXRcbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRQb3B1cChwb3B1cDogP1BvcHVwKSB7XG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9wdXApIHtcbiAgICAgICAgICAgIGlmICghKCdvZmZzZXQnIGluIHBvcHVwLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFya2VySGVpZ2h0ID0gNDEgLSAoNS44IC8gMik7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFya2VyUmFkaXVzID0gMTMuNTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lYXJPZmZzZXQgPSBNYXRoLnNxcnQoTWF0aC5wb3cobWFya2VyUmFkaXVzLCAyKSAvIDIpO1xuICAgICAgICAgICAgICAgIHBvcHVwLm9wdGlvbnMub2Zmc2V0ID0gdGhpcy5fZGVmYXVsdE1hcmtlciA/IHtcbiAgICAgICAgICAgICAgICAgICAgJ3RvcCc6IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgJ3RvcC1sZWZ0JzogWzAsIDBdLFxuICAgICAgICAgICAgICAgICAgICAndG9wLXJpZ2h0JzogWzAsIDBdLFxuICAgICAgICAgICAgICAgICAgICAnYm90dG9tJzogWzAsIC1tYXJrZXJIZWlnaHRdLFxuICAgICAgICAgICAgICAgICAgICAnYm90dG9tLWxlZnQnOiBbbGluZWFyT2Zmc2V0LCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzICsgbGluZWFyT2Zmc2V0KSAqIC0xXSxcbiAgICAgICAgICAgICAgICAgICAgJ2JvdHRvbS1yaWdodCc6IFstbGluZWFyT2Zmc2V0LCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzICsgbGluZWFyT2Zmc2V0KSAqIC0xXSxcbiAgICAgICAgICAgICAgICAgICAgJ2xlZnQnOiBbbWFya2VyUmFkaXVzLCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzKSAqIC0xXSxcbiAgICAgICAgICAgICAgICAgICAgJ3JpZ2h0JzogWy1tYXJrZXJSYWRpdXMsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMpICogLTFdXG4gICAgICAgICAgICAgICAgfSA6IHRoaXMuX29mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3BvcHVwID0gcG9wdXA7XG4gICAgICAgICAgICBpZiAodGhpcy5fbG5nTGF0KSB0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9vbk1hcENsaWNrKGU6IE1hcE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGUub3JpZ2luYWxFdmVudC50YXJnZXQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50O1xuXG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCAmJiAodGFyZ2V0RWxlbWVudCA9PT0gZWxlbWVudCB8fCBlbGVtZW50LmNvbnRhaW5zKCh0YXJnZXRFbGVtZW50OiBhbnkpKSkpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIFBvcHVwIGluc3RhbmNlIHRoYXQgaXMgYm91bmQgdG8gdGhlIE1hcmtlclxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gcG9wdXBcbiAgICAgKi9cbiAgICBnZXRQb3B1cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIG9yIGNsb3NlcyB0aGUgYm91bmQgcG9wdXAsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZVxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHRvZ2dsZVBvcHVwKCkge1xuICAgICAgICBjb25zdCBwb3B1cCA9IHRoaXMuX3BvcHVwO1xuXG4gICAgICAgIGlmICghcG9wdXApIHJldHVybiB0aGlzO1xuICAgICAgICBlbHNlIGlmIChwb3B1cC5pc09wZW4oKSkgcG9wdXAucmVtb3ZlKCk7XG4gICAgICAgIGVsc2UgcG9wdXAuYWRkVG8odGhpcy5fbWFwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3VwZGF0ZShlPzoge3R5cGU6ICdtb3ZlJyB8ICdtb3ZlZW5kJ30pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXApIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcykge1xuICAgICAgICAgICAgdGhpcy5fbG5nTGF0ID0gc21hcnRXcmFwKHRoaXMuX2xuZ0xhdCwgdGhpcy5fcG9zLCB0aGlzLl9tYXAudHJhbnNmb3JtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BvcyA9IHRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCkuX2FkZCh0aGlzLl9vZmZzZXQpO1xuXG4gICAgICAgIC8vIGJlY2F1c2Ugcm91bmRpbmcgdGhlIGNvb3JkaW5hdGVzIGF0IGV2ZXJ5IGBtb3ZlYCBldmVudCBjYXVzZXMgc3R1dHRlcmVkIHpvb21pbmdcbiAgICAgICAgLy8gd2Ugb25seSByb3VuZCB0aGVtIHdoZW4gX3VwZGF0ZSBpcyBjYWxsZWQgd2l0aCBgbW92ZWVuZGAgb3Igd2hlbiBpdHMgY2FsbGVkIHdpdGhcbiAgICAgICAgLy8gbm8gYXJndW1lbnRzICh3aGVuIHRoZSBNYXJrZXIgaXMgaW5pdGlhbGl6ZWQgb3IgTWFya2VyI3NldExuZ0xhdCBpcyBpbnZva2VkKS5cbiAgICAgICAgaWYgKCFlIHx8IGUudHlwZSA9PT0gXCJtb3ZlZW5kXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcyA9IHRoaXMuX3Bvcy5yb3VuZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgRE9NLnNldFRyYW5zZm9ybSh0aGlzLl9lbGVtZW50LCBgJHthbmNob3JUcmFuc2xhdGVbdGhpcy5fYW5jaG9yXX0gdHJhbnNsYXRlKCR7dGhpcy5fcG9zLnh9cHgsICR7dGhpcy5fcG9zLnl9cHgpYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBtYXJrZXIncyBvZmZzZXQuXG4gICAgICogQHJldHVybnMge1BvaW50fVxuICAgICAqL1xuICAgIGdldE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29mZnNldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBvZmZzZXQgb2YgdGhlIG1hcmtlclxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfSBvZmZzZXQgVGhlIG9mZnNldCBpbiBwaXhlbHMgYXMgYSB7QGxpbmsgUG9pbnRMaWtlfSBvYmplY3QgdG8gYXBwbHkgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQncyBjZW50ZXIuIE5lZ2F0aXZlcyBpbmRpY2F0ZSBsZWZ0IGFuZCB1cC5cbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRPZmZzZXQob2Zmc2V0OiBQb2ludExpa2UpIHtcbiAgICAgICAgdGhpcy5fb2Zmc2V0ID0gUG9pbnQuY29udmVydChvZmZzZXQpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX29uTW92ZShlOiBNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudCkge1xuICAgICAgICB0aGlzLl9wb3MgPSBlLnBvaW50LnN1Yih0aGlzLl9wb3NpdGlvbkRlbHRhKTtcbiAgICAgICAgdGhpcy5fbG5nTGF0ID0gdGhpcy5fbWFwLnVucHJvamVjdCh0aGlzLl9wb3MpO1xuICAgICAgICB0aGlzLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpO1xuICAgICAgICAvLyBzdXBwcmVzcyBjbGljayBldmVudCBzbyB0aGF0IHBvcHVwcyBkb24ndCB0b2dnbGUgb24gZHJhZ1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIGRyYWdzdGFydCBvbmx5IGZpcmVzIG9uIHRoZSBmaXJzdCBtb3ZlIGV2ZW50IGFmdGVyIG1vdXNlZG93bi5cbiAgICAgICAgLy8gdGhpcyBjYW4ndCBiZSBvbiBtb3VzZWRvd24gYmVjYXVzZSB0aGF0IGV2ZW50IGRvZXNuJ3QgbmVjZXNzYXJpbHlcbiAgICAgICAgLy8gaW1wbHkgdGhhdCBhIGRyYWcgaXMgYWJvdXQgdG8gaGFwcGVuLlxuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnYWN0aXZlJztcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGaXJlZCB3aGVuIGRyYWdnaW5nIHN0YXJ0c1xuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBldmVudCBkcmFnc3RhcnRcbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBNYXJrZXJcbiAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7TWFya2VyfSBtYXJrZXIgb2JqZWN0IHRoYXQgaXMgYmVpbmcgZHJhZ2dlZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkcmFnc3RhcnQnKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZWQgd2hpbGUgZHJhZ2dpbmdcbiAgICAgICAgICpcbiAgICAgICAgICogQGV2ZW50IGRyYWdcbiAgICAgICAgICogQG1lbWJlcm9mIE1hcmtlclxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICogQHByb3BlcnR5IHtNYXJrZXJ9IG1hcmtlciBvYmplY3QgdGhhdCBpcyBiZWluZyBkcmFnZ2VkXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkcmFnJykpO1xuICAgIH1cblxuICAgIF9vblVwKCkge1xuICAgICAgICAvLyByZXZlcnQgdG8gbm9ybWFsIHBvaW50ZXIgZXZlbnQgaGFuZGxpbmdcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgICAgICB0aGlzLl9wb3NpdGlvbkRlbHRhID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlKTtcblxuICAgICAgICAvLyBvbmx5IGZpcmUgZHJhZ2VuZCBpZiBpdCB3YXMgcHJlY2VkZWQgYnkgYXQgbGVhc3Qgb25lIGRyYWcgZXZlbnRcbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAnYWN0aXZlJykge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAqIEZpcmVkIHdoZW4gdGhlIG1hcmtlciBpcyBmaW5pc2hlZCBiZWluZyBkcmFnZ2VkXG4gICAgICAgICAgICAqXG4gICAgICAgICAgICAqIEBldmVudCBkcmFnZW5kXG4gICAgICAgICAgICAqIEBtZW1iZXJvZiBNYXJrZXJcbiAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAgICAqIEBwcm9wZXJ0eSB7TWFya2VyfSBtYXJrZXIgb2JqZWN0IHRoYXQgd2FzIGRyYWdnZWRcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkcmFnZW5kJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RhdGUgPSAnaW5hY3RpdmUnO1xuICAgIH1cblxuICAgIF9hZGREcmFnSGFuZGxlcihlOiBNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5fZWxlbWVudC5jb250YWlucygoZS5vcmlnaW5hbEV2ZW50LnRhcmdldDogYW55KSkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBpeGVsIGRpc3RhbmNlIGJldHdlZW4gdGhlIGNsaWNrIHBvaW50XG4gICAgICAgICAgICAvLyBhbmQgdGhlIG1hcmtlciBwb3NpdGlvbiwgd2l0aCB0aGUgb2Zmc2V0IGFjY291bnRlZCBmb3IuIFRoZW4gd2VcbiAgICAgICAgICAgIC8vIGNhbiBzdWJ0cmFjdCB0aGlzIGRpc3RhbmNlIGZyb20gdGhlIG1vdXNlbW92ZSBldmVudCdzIHBvc2l0aW9uXG4gICAgICAgICAgICAvLyB0byBjYWxjdWxhdGUgdGhlIG5ldyBtYXJrZXIgcG9zaXRpb24uXG4gICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGUgbWFya2VyICdqdW1wcycgdG8gdGhlIGNsaWNrIHBvc2l0aW9uXG4gICAgICAgICAgICAvLyBjcmVhdGluZyBhIGphcnJpbmcgVVggZWZmZWN0LlxuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25EZWx0YSA9IGUucG9pbnQuc3ViKHRoaXMuX3BvcykuYWRkKHRoaXMuX29mZnNldCk7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ3BlbmRpbmcnO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCd0b3VjaG1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uY2UoJ21vdXNldXAnLCB0aGlzLl9vblVwKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbmNlKCd0b3VjaGVuZCcsIHRoaXMuX29uVXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYGRyYWdnYWJsZWAgcHJvcGVydHkgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG1hcmtlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Nob3VsZEJlRHJhZ2dhYmxlPWZhbHNlXSBUdXJucyBkcmFnIGZ1bmN0aW9uYWxpdHkgb24vb2ZmXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0RHJhZ2dhYmxlKHNob3VsZEJlRHJhZ2dhYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2RyYWdnYWJsZSA9ICEhc2hvdWxkQmVEcmFnZ2FibGU7IC8vIGNvbnZlcnQgcG9zc2libGUgdW5kZWZpbmVkIHZhbHVlIHRvIGZhbHNlXG5cbiAgICAgICAgLy8gaGFuZGxlIGNhc2Ugd2hlcmUgbWFwIG1heSBub3QgZXhpc3QgeWV0XG4gICAgICAgIC8vIGUuZy4gd2hlbiBzZXREcmFnZ2FibGUgaXMgY2FsbGVkIGJlZm9yZSBhZGRUb1xuICAgICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQmVEcmFnZ2FibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNlZG93bicsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub24oJ3RvdWNoc3RhcnQnLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlZG93bicsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaHN0YXJ0JywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtYXJrZXIgY2FuIGJlIGRyYWdnZWRcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc0RyYWdnYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyYWdnYWJsZTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi8uLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsLCB3YXJuT25jZX0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IE1hcmtlciBmcm9tICcuLi9tYXJrZXInO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcbmltcG9ydCB0eXBlIHtBbmltYXRpb25PcHRpb25zLCBDYW1lcmFPcHRpb25zfSBmcm9tICcuLi9jYW1lcmEnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgcG9zaXRpb25PcHRpb25zPzogUG9zaXRpb25PcHRpb25zLFxuICAgIGZpdEJvdW5kc09wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zICYgQ2FtZXJhT3B0aW9ucyxcbiAgICB0cmFja1VzZXJMb2NhdGlvbj86IGJvb2xlYW4sXG4gICAgc2hvd1VzZXJMb2NhdGlvbj86IGJvb2xlYW5cbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgIHBvc2l0aW9uT3B0aW9uczoge1xuICAgICAgICBlbmFibGVIaWdoQWNjdXJhY3k6IGZhbHNlLFxuICAgICAgICBtYXhpbXVtQWdlOiAwLFxuICAgICAgICB0aW1lb3V0OiA2MDAwIC8qIDYgc2VjICovXG4gICAgfSxcbiAgICBmaXRCb3VuZHNPcHRpb25zOiB7XG4gICAgICAgIG1heFpvb206IDE1XG4gICAgfSxcbiAgICB0cmFja1VzZXJMb2NhdGlvbjogZmFsc2UsXG4gICAgc2hvd1VzZXJMb2NhdGlvbjogdHJ1ZVxufTtcbmNvbnN0IGNsYXNzTmFtZSA9ICdtYXBib3hnbC1jdHJsJztcblxubGV0IHN1cHBvcnRzR2VvbG9jYXRpb247XG5cbmZ1bmN0aW9uIGNoZWNrR2VvbG9jYXRpb25TdXBwb3J0KGNhbGxiYWNrKSB7XG4gICAgaWYgKHN1cHBvcnRzR2VvbG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhzdXBwb3J0c0dlb2xvY2F0aW9uKTtcblxuICAgIH0gZWxzZSBpZiAod2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIG5hdmlnYXRvci5wZXJtaXNzaW9ucyBoYXMgaW5jb21wbGV0ZSBicm93c2VyIHN1cHBvcnRcbiAgICAgICAgLy8gaHR0cDovL2Nhbml1c2UuY29tLyNmZWF0PXBlcm1pc3Npb25zLWFwaVxuICAgICAgICAvLyBUZXN0IGZvciB0aGUgY2FzZSB3aGVyZSBhIGJyb3dzZXIgZGlzYWJsZXMgR2VvbG9jYXRpb24gYmVjYXVzZSBvZiBhblxuICAgICAgICAvLyBpbnNlY3VyZSBvcmlnaW5cbiAgICAgICAgd2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTogJ2dlb2xvY2F0aW9uJ30pLnRoZW4oKHApID0+IHtcbiAgICAgICAgICAgIHN1cHBvcnRzR2VvbG9jYXRpb24gPSBwLnN0YXRlICE9PSAnZGVuaWVkJztcbiAgICAgICAgICAgIGNhbGxiYWNrKHN1cHBvcnRzR2VvbG9jYXRpb24pO1xuICAgICAgICB9KTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cHBvcnRzR2VvbG9jYXRpb24gPSAhIXdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb247XG4gICAgICAgIGNhbGxiYWNrKHN1cHBvcnRzR2VvbG9jYXRpb24pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIGBHZW9sb2NhdGVDb250cm9sYCBjb250cm9sIHByb3ZpZGVzIGEgYnV0dG9uIHRoYXQgdXNlcyB0aGUgYnJvd3NlcidzIGdlb2xvY2F0aW9uXG4gKiBBUEkgdG8gbG9jYXRlIHRoZSB1c2VyIG9uIHRoZSBtYXAuXG4gKlxuICogTm90IGFsbCBicm93c2VycyBzdXBwb3J0IGdlb2xvY2F0aW9uLFxuICogYW5kIHNvbWUgdXNlcnMgbWF5IGRpc2FibGUgdGhlIGZlYXR1cmUuIEdlb2xvY2F0aW9uIHN1cHBvcnQgZm9yIG1vZGVyblxuICogYnJvd3NlcnMgaW5jbHVkaW5nIENocm9tZSByZXF1aXJlcyBzaXRlcyB0byBiZSBzZXJ2ZWQgb3ZlciBIVFRQUy4gSWZcbiAqIGdlb2xvY2F0aW9uIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSwgdGhlIEdlb2xvY2F0ZUNvbnRyb2wgd2lsbCBub3RcbiAqIGJlIHZpc2libGUuXG4gKlxuICogVGhlIHpvb20gbGV2ZWwgYXBwbGllZCB3aWxsIGRlcGVuZCBvbiB0aGUgYWNjdXJhY3kgb2YgdGhlIGdlb2xvY2F0aW9uIHByb3ZpZGVkIGJ5IHRoZSBkZXZpY2UuXG4gKlxuICogVGhlIEdlb2xvY2F0ZUNvbnRyb2wgaGFzIHR3byBtb2Rlcy4gSWYgYHRyYWNrVXNlckxvY2F0aW9uYCBpcyBgZmFsc2VgIChkZWZhdWx0KSB0aGUgY29udHJvbCBhY3RzIGFzIGEgYnV0dG9uLCB3aGljaCB3aGVuIHByZXNzZWQgd2lsbCBzZXQgdGhlIG1hcCdzIGNhbWVyYSB0byB0YXJnZXQgdGhlIHVzZXIgbG9jYXRpb24uIElmIHRoZSB1c2VyIG1vdmVzLCB0aGUgbWFwIHdvbid0IHVwZGF0ZS4gVGhpcyBpcyBtb3N0IHN1aXRlZCBmb3IgdGhlIGRlc2t0b3AuIElmIGB0cmFja1VzZXJMb2NhdGlvbmAgaXMgYHRydWVgIHRoZSBjb250cm9sIGFjdHMgYXMgYSB0b2dnbGUgYnV0dG9uIHRoYXQgd2hlbiBhY3RpdmUgdGhlIHVzZXIncyBsb2NhdGlvbiBpcyBhY3RpdmVseSBtb25pdG9yZWQgZm9yIGNoYW5nZXMuIEluIHRoaXMgbW9kZSB0aGUgR2VvbG9jYXRlQ29udHJvbCBoYXMgdGhyZWUgc3RhdGVzOlxuICogKiBhY3RpdmUgLSB0aGUgbWFwJ3MgY2FtZXJhIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyBhcyB0aGUgdXNlcidzIGxvY2F0aW9uIGNoYW5nZXMsIGtlZXBpbmcgdGhlIGxvY2F0aW9uIGRvdCBpbiB0aGUgY2VudGVyLlxuICogKiBwYXNzaXZlIC0gdGhlIHVzZXIncyBsb2NhdGlvbiBkb3QgYXV0b21hdGljYWxseSB1cGRhdGVzLCBidXQgdGhlIG1hcCdzIGNhbWVyYSBkb2VzIG5vdC5cbiAqICogZGlzYWJsZWRcbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucG9zaXRpb25PcHRpb25zPXtlbmFibGVIaWdoQWNjdXJhY3k6IGZhbHNlLCB0aW1lb3V0OiA2MDAwfV0gQSBHZW9sb2NhdGlvbiBBUEkgW1Bvc2l0aW9uT3B0aW9uc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Bvc2l0aW9uT3B0aW9ucykgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLmZpdEJvdW5kc09wdGlvbnM9e21heFpvb206IDE1fV0gQSBbYGZpdEJvdW5kc2BdKCNtYXAjZml0Ym91bmRzKSBvcHRpb25zIG9iamVjdCB0byB1c2Ugd2hlbiB0aGUgbWFwIGlzIHBhbm5lZCBhbmQgem9vbWVkIHRvIHRoZSB1c2VyJ3MgbG9jYXRpb24uIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBhIGBtYXhab29tYCBvZiAxNSB0byBsaW1pdCBob3cgZmFyIHRoZSBtYXAgd2lsbCB6b29tIGluIGZvciB2ZXJ5IGFjY3VyYXRlIGxvY2F0aW9ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbj1mYWxzZV0gSWYgYHRydWVgIHRoZSBHZW9sb2NhdGUgQ29udHJvbCBiZWNvbWVzIGEgdG9nZ2xlIGJ1dHRvbiBhbmQgd2hlbiBhY3RpdmUgdGhlIG1hcCB3aWxsIHJlY2VpdmUgdXBkYXRlcyB0byB0aGUgdXNlcidzIGxvY2F0aW9uIGFzIGl0IGNoYW5nZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbj10cnVlXSBCeSBkZWZhdWx0IGEgZG90IHdpbGwgYmUgc2hvd24gb24gdGhlIG1hcCBhdCB0aGUgdXNlcidzIGxvY2F0aW9uLiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuYWRkQ29udHJvbChuZXcgbWFwYm94Z2wuR2VvbG9jYXRlQ29udHJvbCh7XG4gKiAgICAgcG9zaXRpb25PcHRpb25zOiB7XG4gKiAgICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZVxuICogICAgIH0sXG4gKiAgICAgdHJhY2tVc2VyTG9jYXRpb246IHRydWVcbiAqIH0pKTtcbiAqIEBzZWUgW0xvY2F0ZSB0aGUgdXNlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9sb2NhdGUtdXNlci8pXG4gKi9cbmNsYXNzIEdlb2xvY2F0ZUNvbnRyb2wgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgb3B0aW9uczogT3B0aW9ucztcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZG90RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgX2dlb2xvY2F0ZUJ1dHRvbjogSFRNTEVsZW1lbnQ7XG4gICAgX2dlb2xvY2F0aW9uV2F0Y2hJRDogbnVtYmVyO1xuICAgIF90aW1lb3V0SWQ6ID9UaW1lb3V0SUQ7XG4gICAgX3dhdGNoU3RhdGU6IHN0cmluZztcbiAgICBfbGFzdEtub3duUG9zaXRpb246IGFueTtcbiAgICBfdXNlckxvY2F0aW9uRG90TWFya2VyOiBNYXJrZXI7XG4gICAgX3NldHVwOiBib29sZWFuOyAvLyBzZXQgdG8gdHJ1ZSBvbmNlIHRoZSBjb250cm9sIGhhcyBiZWVuIHNldHVwXG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vblN1Y2Nlc3MnLFxuICAgICAgICAgICAgJ19vbkVycm9yJyxcbiAgICAgICAgICAgICdfZmluaXNoJyxcbiAgICAgICAgICAgICdfc2V0dXBVSScsXG4gICAgICAgICAgICAnX3VwZGF0ZUNhbWVyYScsXG4gICAgICAgICAgICAnX3VwZGF0ZU1hcmtlcidcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9jb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCBgJHtjbGFzc05hbWV9ICR7Y2xhc3NOYW1lfS1ncm91cGApO1xuICAgICAgICBjaGVja0dlb2xvY2F0aW9uU3VwcG9ydCh0aGlzLl9zZXR1cFVJKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgLy8gY2xlYXIgdGhlIGdlb2xvY2F0aW9uIHdhdGNoIGlmIGV4aXN0c1xuICAgICAgICBpZiAodGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBtYXJrZXIgZnJvbSB0aGUgbWFwXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiAmJiB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fbWFwID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICB9XG5cbiAgICBfb25TdWNjZXNzKHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICAvLyBrZWVwIGEgcmVjb3JkIG9mIHRoZSBwb3NpdGlvbiBzbyB0aGF0IGlmIHRoZSBzdGF0ZSBpcyBCQUNLR1JPVU5EIGFuZCB0aGUgdXNlclxuICAgICAgICAgICAgLy8gY2xpY2tzIHRoZSBidXR0b24sIHdlIGNhbiBtb3ZlIHRvIEFDVElWRV9MT0NLIGltbWVkaWF0ZWx5IHdpdGhvdXQgd2FpdGluZyBmb3JcbiAgICAgICAgICAgIC8vIHdhdGNoUG9zaXRpb24gdG8gdHJpZ2dlciBfb25TdWNjZXNzXG4gICAgICAgICAgICB0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiA9IHBvc2l0aW9uO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1dBSVRJTkdfQUNUSVZFJzpcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9MT0NLJzpcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfTE9DSyc7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORCc6XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EX0VSUk9SJzpcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkQnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGBVbmV4cGVjdGVkIHdhdGNoU3RhdGUgJHt0aGlzLl93YXRjaFN0YXRlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgc2hvd1VzZXJMb2NhdGlvbiBhbmQgdGhlIHdhdGNoIHN0YXRlIGlzbid0IG9mZiB0aGVuIHVwZGF0ZSB0aGUgbWFya2VyIGxvY2F0aW9uXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiAmJiB0aGlzLl93YXRjaFN0YXRlICE9PSAnT0ZGJykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFya2VyKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGluIG5vcm1hbCBtb2RlIChub3Qgd2F0Y2ggbW9kZSksIG9yIGlmIGluIHdhdGNoIG1vZGUgYW5kIHRoZSBzdGF0ZSBpcyBhY3RpdmUgd2F0Y2hcbiAgICAgICAgLy8gdGhlbiB1cGRhdGUgdGhlIGNhbWVyYVxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiB8fCB0aGlzLl93YXRjaFN0YXRlID09PSAnQUNUSVZFX0xPQ0snKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDYW1lcmEocG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdnZW9sb2NhdGUnLCBwb3NpdGlvbikpO1xuICAgICAgICB0aGlzLl9maW5pc2goKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlQ2FtZXJhKHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgTG5nTGF0KHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsIHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSk7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHBvc2l0aW9uLmNvb3Jkcy5hY2N1cmFjeTtcbiAgICAgICAgY29uc3QgYmVhcmluZyA9IHRoaXMuX21hcC5nZXRCZWFyaW5nKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe2JlYXJpbmd9LCB0aGlzLm9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fbWFwLmZpdEJvdW5kcyhjZW50ZXIudG9Cb3VuZHMocmFkaXVzKSwgb3B0aW9ucywge1xuICAgICAgICAgICAgZ2VvbG9jYXRlU291cmNlOiB0cnVlIC8vIHRhZyB0aGlzIGNhbWVyYSBjaGFuZ2Ugc28gaXQgd29uJ3QgY2F1c2UgdGhlIGNvbnRyb2wgdG8gY2hhbmdlIHRvIGJhY2tncm91bmQgc3RhdGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZU1hcmtlcihwb3NpdGlvbjogP1Bvc2l0aW9uKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnNldExuZ0xhdChbcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlXSkuYWRkVG8odGhpcy5fbWFwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkVycm9yKGVycm9yOiBQb3NpdGlvbkVycm9yKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gUEVSTUlTU0lPTl9ERU5JRURcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhcldhdGNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQUNUSVZFX0VSUk9SJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9MT0NLJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfRVJST1InO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHVybiBtYXJrZXIgZ3JleVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdCQUNLR1JPVU5EX0VSUk9SJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHVybiBtYXJrZXIgZ3JleVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdBQ1RJVkVfRVJST1InOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGBVbmV4cGVjdGVkIHdhdGNoU3RhdGUgJHt0aGlzLl93YXRjaFN0YXRlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl93YXRjaFN0YXRlICE9PSAnT0ZGJyAmJiB0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZG90RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdC1zdGFsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZXJyb3InLCBlcnJvcikpO1xuXG4gICAgICAgIHRoaXMuX2ZpbmlzaCgpO1xuICAgIH1cblxuICAgIF9maW5pc2goKSB7XG4gICAgICAgIGlmICh0aGlzLl90aW1lb3V0SWQpIHsgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7IH1cbiAgICAgICAgdGhpcy5fdGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIF9zZXR1cFVJKHN1cHBvcnRlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAoc3VwcG9ydGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoJ0dlb2xvY2F0aW9uIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSwgdGhlIEdlb2xvY2F0ZUNvbnRyb2wgd2lsbCBub3QgYmUgdmlzaWJsZS4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCAoZTogTW91c2VFdmVudCkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uID0gRE9NLmNyZWF0ZSgnYnV0dG9uJyxcbiAgICAgICAgICAgIGAke2NsYXNzTmFtZX0taWNvbiAke2NsYXNzTmFtZX0tZ2VvbG9jYXRlYCxcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZSA9ICdGaW5kIG15IGxvY2F0aW9uJztcbiAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdGaW5kIG15IGxvY2F0aW9uJyk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHNob3dVc2VyTG9jYXRpb24gaXMgZW5hYmxlZCwga2VlcCB0aGUgR2VvbG9jYXRlIGJ1dHRvbiBkaXNhYmxlZCB1bnRpbCB0aGUgZGV2aWNlIGxvY2F0aW9uIG1hcmtlciBpcyBzZXR1cCBvbiB0aGUgbWFwXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZG90RWxlbWVudCA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdCcpO1xuXG4gICAgICAgICAgICB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIgPSBuZXcgTWFya2VyKHRoaXMuX2RvdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLFxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuX3NldHVwID0gdHJ1ZTtcblxuICAgICAgICAvLyB3aGVuIHRoZSBjYW1lcmEgaXMgY2hhbmdlZCAoYW5kIGl0J3Mgbm90IGFzIGEgcmVzdWx0IG9mIHRoZSBHZW9sb2NhdGlvbiBDb250cm9sKSBjaGFuZ2VcbiAgICAgICAgLy8gdGhlIHdhdGNoIG1vZGUgdG8gYmFja2dyb3VuZCB3YXRjaCwgc28gdGhhdCB0aGUgbWFya2VyIGlzIHVwZGF0ZWQgYnV0IG5vdCB0aGUgY2FtZXJhLlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmVzdGFydCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyb21SZXNpemUgPSBldmVudC5vcmlnaW5hbEV2ZW50ICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQudHlwZSA9PT0gJ3Jlc2l6ZSc7XG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC5nZW9sb2NhdGVTb3VyY2UgJiYgdGhpcy5fd2F0Y2hTdGF0ZSA9PT0gJ0FDVElWRV9MT0NLJyAmJiAhZnJvbVJlc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgndHJhY2t1c2VybG9jYXRpb25lbmQnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIGEgZ2VvbG9jYXRpb25cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAgaWYgY2FsbGVkIGJlZm9yZSBjb250cm9sIHdhcyBhZGRlZCB0byBhIG1hcCwgb3RoZXJ3aXNlIHJldHVybnMgYHRydWVgLlxuICAgICAqL1xuICAgIHRyaWdnZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5fc2V0dXApIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdHZW9sb2NhdGUgY29udHJvbCB0cmlnZ2VyZWQgYmVmb3JlIGFkZGVkIHRvIGEgbWFwJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHdhdGNoU3RhdGUgYW5kIGRvIGFueSBvdXRnb2luZyBzdGF0ZSBjbGVhbnVwXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ09GRic6XG4gICAgICAgICAgICAgICAgLy8gdHVybiBvbiB0aGUgR2VvbG9jYXRlIENvbnRyb2xcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ1dBSVRJTkdfQUNUSVZFJztcblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3RyYWNrdXNlcmxvY2F0aW9uc3RhcnQnKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfTE9DSyc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfRVJST1InOlxuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORF9FUlJPUic6XG4gICAgICAgICAgICAgICAgLy8gdHVybiBvZmYgdGhlIEdlb2xvY2F0ZSBDb250cm9sXG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdPRkYnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd0cmFja3VzZXJsb2NhdGlvbmVuZCcpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JBQ0tHUk9VTkQnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQUNUSVZFX0xPQ0snO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGNhbWVyYSB0byBsYXN0IGtub3duIGxvY2F0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKSB0aGlzLl91cGRhdGVDYW1lcmEodGhpcy5fbGFzdEtub3duUG9zaXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgndHJhY2t1c2VybG9jYXRpb25zdGFydCcpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW5jb21pbmcgc3RhdGUgc2V0dXBcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fd2F0Y2hTdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAnV0FJVElOR19BQ1RJVkUnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQUNUSVZFX0xPQ0snOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORF9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvcicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnT0ZGJzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbWFuYWdlIGdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24gLyBnZW9sb2NhdGlvbi5jbGVhcldhdGNoXG4gICAgICAgICAgICBpZiAodGhpcy5fd2F0Y2hTdGF0ZSA9PT0gJ09GRicgJiYgdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhciB3YXRjaFBvc2l0aW9uIGFzIHdlJ3ZlIGNoYW5nZWQgdG8gYW4gT0ZGIHN0YXRlXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJXYXRjaCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGVuYWJsZSB3YXRjaFBvc2l0aW9uIHNpbmNlIHdhdGNoU3RhdGUgaXMgbm90IE9GRiBhbmQgdGhlcmUgaXMgbm8gd2F0Y2hQb3NpdGlvbiBhbHJlYWR5IHJ1bm5pbmdcblxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9IHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25TdWNjZXNzLCB0aGlzLl9vbkVycm9yLCB0aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuX29uU3VjY2VzcywgdGhpcy5fb25FcnJvciwgdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyk7XG5cbiAgICAgICAgICAgIC8vIFRoaXMgdGltZW91dCBlbnN1cmVzIHRoYXQgd2Ugc3RpbGwgY2FsbCBmaW5pc2goKSBldmVuIGlmXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBkZWNsaW5lcyB0byBzaGFyZSB0aGVpciBsb2NhdGlvbiBpbiBGaXJlZm94XG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaCwgMTAwMDAgLyogMTBzZWMgKi8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2NsZWFyV2F0Y2goKSB7XG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpO1xuXG4gICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFya2VyKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHZW9sb2NhdGVDb250cm9sO1xuXG4vKiBHZW9sb2NhdGUgQ29udHJvbCBXYXRjaCBTdGF0ZXNcbiAqIFRoaXMgaXMgdGhlIHByaXZhdGUgc3RhdGUgb2YgdGhlIGNvbnRyb2wuXG4gKlxuICogT0ZGXG4gKiAgICBvZmYvaW5hY3RpdmVcbiAqIFdBSVRJTkdfQUNUSVZFXG4gKiAgICBHZW9sb2NhdGUgQ29udHJvbCB3YXMgY2xpY2tlZCBidXQgc3RpbGwgd2FpdGluZyBmb3IgR2VvbG9jYXRpb24gQVBJIHJlc3BvbnNlIHdpdGggdXNlciBsb2NhdGlvblxuICogQUNUSVZFX0xPQ0tcbiAqICAgIFNob3dpbmcgdGhlIHVzZXIgbG9jYXRpb24gYXMgYSBkb3QgQU5EIHRyYWNraW5nIHRoZSBjYW1lcmEgdG8gYmUgZml4ZWQgdG8gdGhlaXIgbG9jYXRpb24uIElmIHRoZWlyIGxvY2F0aW9uIGNoYW5nZXMgdGhlIG1hcCBtb3ZlcyB0byBmb2xsb3cuXG4gKiBBQ1RJVkVfRVJST1JcbiAqICAgIFRoZXJlIHdhcyBlbiBlcnJvciBmcm9tIHRoZSBHZW9sb2NhdGlvbiBBUEkgd2hpbGUgdHJ5aW5nIHRvIHNob3cgYW5kIHRyYWNrIHRoZSB1c2VyIGxvY2F0aW9uLlxuICogQkFDS0dST1VORFxuICogICAgU2hvd2luZyB0aGUgdXNlciBsb2NhdGlvbiBhcyBhIGRvdCBidXQgdGhlIGNhbWVyYSBkb2Vzbid0IGZvbGxvdyB0aGVpciBsb2NhdGlvbiBhcyBpdCBjaGFuZ2VzLlxuICogQkFDS0dST1VORF9FUlJPUlxuICogICAgVGhlcmUgd2FzIGFuIGVycm9yIGZyb20gdGhlIEdlb2xvY2F0aW9uIEFQSSB3aGlsZSB0cnlpbmcgdG8gc2hvdyAoYnV0IG5vdCB0cmFjaykgdGhlIHVzZXIgbG9jYXRpb24uXG4gKi9cblxuLyoqXG4gKiBGaXJlZCBvbiBlYWNoIEdlb2xvY2F0aW9uIEFQSSBwb3NpdGlvbiB1cGRhdGUgd2hpY2ggcmV0dXJuZWQgYXMgc3VjY2Vzcy5cbiAqXG4gKiBAZXZlbnQgZ2VvbG9jYXRlXG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAcHJvcGVydHkge1Bvc2l0aW9ufSBkYXRhIFRoZSByZXR1cm5lZCBbUG9zaXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbikgb2JqZWN0IGZyb20gdGhlIGNhbGxiYWNrIGluIFtHZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL2dldEN1cnJlbnRQb3NpdGlvbikgb3IgW0dlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL3dhdGNoUG9zaXRpb24pLlxuICpcbiAqL1xuXG4vKipcbiAqIEZpcmVkIG9uIGVhY2ggR2VvbG9jYXRpb24gQVBJIHBvc2l0aW9uIHVwZGF0ZSB3aGljaCByZXR1cm5lZCBhcyBhbiBlcnJvci5cbiAqXG4gKiBAZXZlbnQgZXJyb3JcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb25FcnJvcn0gZGF0YSBUaGUgcmV0dXJuZWQgW1Bvc2l0aW9uRXJyb3JdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbkVycm9yKSBvYmplY3QgZnJvbSB0aGUgY2FsbGJhY2sgaW4gW0dlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vZ2V0Q3VycmVudFBvc2l0aW9uKSBvciBbR2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vd2F0Y2hQb3NpdGlvbikuXG4gKlxuICovXG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgR2VvbG9jYXRlIENvbnRyb2wgY2hhbmdlcyB0byB0aGUgYWN0aXZlIGxvY2sgc3RhdGUsIHdoaWNoIGhhcHBlbnMgZWl0aGVyIHVwb24gZmlyc3Qgb2J0YWluaW5nIGEgc3VjY2Vzc2Z1bCBHZW9sb2NhdGlvbiBBUEkgcG9zaXRpb24gZm9yIHRoZSB1c2VyIChhIGdlb2xvY2F0ZSBldmVudCB3aWxsIGZvbGxvdyksIG9yIHRoZSB1c2VyIGNsaWNrcyB0aGUgZ2VvbG9jYXRlIGJ1dHRvbiB3aGVuIGluIHRoZSBiYWNrZ3JvdW5kIHN0YXRlIHdoaWNoIHVzZXMgdGhlIGxhc3Qga25vd24gcG9zaXRpb24gdG8gcmVjZW50ZXIgdGhlIG1hcCBhbmQgZW50ZXIgYWN0aXZlIGxvY2sgc3RhdGUgKG5vIGdlb2xvY2F0ZSBldmVudCB3aWxsIGZvbGxvdyB1bmxlc3MgdGhlIHVzZXJzJ3MgbG9jYXRpb24gY2hhbmdlcykuXG4gKlxuICogQGV2ZW50IHRyYWNrdXNlcmxvY2F0aW9uc3RhcnRcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqXG4gKi9cblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSBHZW9sb2NhdGUgQ29udHJvbCBjaGFuZ2VzIHRvIHRoZSBiYWNrZ3JvdW5kIHN0YXRlLCB3aGljaCBoYXBwZW5zIHdoZW4gYSB1c2VyIGNoYW5nZXMgdGhlIGNhbWVyYSBkdXJpbmcgYW4gYWN0aXZlIHBvc2l0aW9uIGxvY2suIFRoaXMgb25seSBhcHBsaWVzIHdoZW4gdHJhY2tVc2VyTG9jYXRpb24gaXMgdHJ1ZS4gSW4gdGhlIGJhY2tncm91bmQgc3RhdGUsIHRoZSBkb3Qgb24gdGhlIG1hcCB3aWxsIHVwZGF0ZSB3aXRoIGxvY2F0aW9uIHVwZGF0ZXMgYnV0IHRoZSBjYW1lcmEgd2lsbCBub3QuXG4gKlxuICogQGV2ZW50IHRyYWNrdXNlcmxvY2F0aW9uZW5kXG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKlxuICovXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxudHlwZSBVbml0ID0gJ2ltcGVyaWFsJyB8ICdtZXRyaWMnIHwgJ25hdXRpY2FsJztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIG1heFdpZHRoPzogbnVtYmVyLFxuICAgIHVuaXQ/OiBVbml0O1xufTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgbWF4V2lkdGg6IDEwMCxcbiAgICB1bml0OiAnbWV0cmljJ1xufTtcblxuLyoqXG4gKiBBIGBTY2FsZUNvbnRyb2xgIGNvbnRyb2wgZGlzcGxheXMgdGhlIHJhdGlvIG9mIGEgZGlzdGFuY2Ugb24gdGhlIG1hcCB0byB0aGUgY29ycmVzcG9uZGluZyBkaXN0YW5jZSBvbiB0aGUgZ3JvdW5kLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXaWR0aD0nMTAwJ10gVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBzY2FsZSBjb250cm9sIGluIHBpeGVscy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy51bml0PSdtZXRyaWMnXSBVbml0IG9mIHRoZSBkaXN0YW5jZSAoYCdpbXBlcmlhbCdgLCBgJ21ldHJpYydgIG9yIGAnbmF1dGljYWwnYCkuXG4gKiBAZXhhbXBsZVxuICogdmFyIHNjYWxlID0gbmV3IG1hcGJveGdsLlNjYWxlQ29udHJvbCh7XG4gKiAgICAgbWF4V2lkdGg6IDgwLFxuICogICAgIHVuaXQ6ICdpbXBlcmlhbCdcbiAqIH0pO1xuICogbWFwLmFkZENvbnRyb2woc2NhbGUpO1xuICpcbiAqIHNjYWxlLnNldFVuaXQoJ21ldHJpYycpO1xuICovXG5jbGFzcyBTY2FsZUNvbnRyb2wge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBvcHRpb25zOiBPcHRpb25zO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25Nb3ZlJyxcbiAgICAgICAgICAgICdzZXRVbml0J1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0UG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiAnYm90dG9tLWxlZnQnO1xuICAgIH1cblxuICAgIF9vbk1vdmUoKSB7XG4gICAgICAgIHVwZGF0ZVNjYWxlKHRoaXMuX21hcCwgdGhpcy5fY29udGFpbmVyLCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1zY2FsZScsIG1hcC5nZXRDb250YWluZXIoKSk7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgdGhpcy5fb25Nb3ZlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgdGhpcy5fbWFwID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHNjYWxlJ3MgdW5pdCBvZiB0aGUgZGlzdGFuY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1bml0IFVuaXQgb2YgdGhlIGRpc3RhbmNlIChgJ2ltcGVyaWFsJ2AsIGAnbWV0cmljJ2Agb3IgYCduYXV0aWNhbCdgKS5cbiAgICAgKi9cbiAgICBzZXRVbml0KHVuaXQ6IFVuaXQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnVuaXQgPSB1bml0O1xuICAgICAgICB1cGRhdGVTY2FsZSh0aGlzLl9tYXAsIHRoaXMuX2NvbnRhaW5lciwgdGhpcy5vcHRpb25zKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNjYWxlQ29udHJvbDtcblxuZnVuY3Rpb24gdXBkYXRlU2NhbGUobWFwLCBjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgICAvLyBBIGhvcml6b250YWwgc2NhbGUgaXMgaW1hZ2luZWQgdG8gYmUgcHJlc2VudCBhdCBjZW50ZXIgb2YgdGhlIG1hcFxuICAgIC8vIGNvbnRhaW5lciB3aXRoIG1heGltdW0gbGVuZ3RoIChEZWZhdWx0KSBhcyAxMDBweC5cbiAgICAvLyBVc2luZyBzcGhlcmljYWwgbGF3IG9mIGNvc2luZXMgYXBwcm94aW1hdGlvbiwgdGhlIHJlYWwgZGlzdGFuY2UgaXNcbiAgICAvLyBmb3VuZCBiZXR3ZWVuIHRoZSB0d28gY29vcmRpbmF0ZXMuXG4gICAgY29uc3QgbWF4V2lkdGggPSBvcHRpb25zICYmIG9wdGlvbnMubWF4V2lkdGggfHwgMTAwO1xuXG4gICAgY29uc3QgeSA9IG1hcC5fY29udGFpbmVyLmNsaWVudEhlaWdodCAvIDI7XG4gICAgY29uc3QgbWF4TWV0ZXJzID0gZ2V0RGlzdGFuY2UobWFwLnVucHJvamVjdChbMCwgeV0pLCBtYXAudW5wcm9qZWN0KFttYXhXaWR0aCwgeV0pKTtcbiAgICAvLyBUaGUgcmVhbCBkaXN0YW5jZSBjb3JyZXNwb25kaW5nIHRvIDEwMHB4IHNjYWxlIGxlbmd0aCBpcyByb3VuZGVkIG9mZiB0b1xuICAgIC8vIG5lYXIgcHJldHR5IG51bWJlciBhbmQgdGhlIHNjYWxlIGxlbmd0aCBmb3IgdGhlIHNhbWUgaXMgZm91bmQgb3V0LlxuICAgIC8vIERlZmF1bHQgdW5pdCBvZiB0aGUgc2NhbGUgaXMgYmFzZWQgb24gVXNlcidzIGxvY2FsZS5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVuaXQgPT09ICdpbXBlcmlhbCcpIHtcbiAgICAgICAgY29uc3QgbWF4RmVldCA9IDMuMjgwOCAqIG1heE1ldGVycztcbiAgICAgICAgaWYgKG1heEZlZXQgPiA1MjgwKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhNaWxlcyA9IG1heEZlZXQgLyA1MjgwO1xuICAgICAgICAgICAgc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4TWlsZXMsICdtaScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4RmVldCwgJ2Z0Jyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bml0ID09PSAnbmF1dGljYWwnKSB7XG4gICAgICAgIGNvbnN0IG1heE5hdXRpY2FscyA9IG1heE1ldGVycyAvIDE4NTI7XG4gICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heE5hdXRpY2FscywgJ25tJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4TWV0ZXJzLCAnbScpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4RGlzdGFuY2UsIHVuaXQpIHtcbiAgICBsZXQgZGlzdGFuY2UgPSBnZXRSb3VuZE51bShtYXhEaXN0YW5jZSk7XG4gICAgY29uc3QgcmF0aW8gPSBkaXN0YW5jZSAvIG1heERpc3RhbmNlO1xuXG4gICAgaWYgKHVuaXQgPT09ICdtJyAmJiBkaXN0YW5jZSA+PSAxMDAwKSB7XG4gICAgICAgIGRpc3RhbmNlID0gZGlzdGFuY2UgLyAxMDAwO1xuICAgICAgICB1bml0ID0gJ2ttJztcbiAgICB9XG5cbiAgICBjb250YWluZXIuc3R5bGUud2lkdGggPSBgJHttYXhXaWR0aCAqIHJhdGlvfXB4YDtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gZGlzdGFuY2UgKyB1bml0O1xufVxuXG5mdW5jdGlvbiBnZXREaXN0YW5jZShsYXRsbmcxLCBsYXRsbmcyKSB7XG4gICAgLy8gVXNlcyBzcGhlcmljYWwgbGF3IG9mIGNvc2luZXMgYXBwcm94aW1hdGlvbi5cbiAgICBjb25zdCBSID0gNjM3MTAwMDtcblxuICAgIGNvbnN0IHJhZCA9IE1hdGguUEkgLyAxODAsXG4gICAgICAgIGxhdDEgPSBsYXRsbmcxLmxhdCAqIHJhZCxcbiAgICAgICAgbGF0MiA9IGxhdGxuZzIubGF0ICogcmFkLFxuICAgICAgICBhID0gTWF0aC5zaW4obGF0MSkgKiBNYXRoLnNpbihsYXQyKSArXG4gICAgICAgICAgTWF0aC5jb3MobGF0MSkgKiBNYXRoLmNvcyhsYXQyKSAqIE1hdGguY29zKChsYXRsbmcyLmxuZyAtIGxhdGxuZzEubG5nKSAqIHJhZCk7XG5cbiAgICBjb25zdCBtYXhNZXRlcnMgPSBSICogTWF0aC5hY29zKE1hdGgubWluKGEsIDEpKTtcbiAgICByZXR1cm4gbWF4TWV0ZXJzO1xuXG59XG5cbmZ1bmN0aW9uIGdldERlY2ltYWxSb3VuZE51bShkKSB7XG4gICAgY29uc3QgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBNYXRoLmNlaWwoLU1hdGgubG9nKGQpIC8gTWF0aC5MTjEwKSk7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoZCAqIG11bHRpcGxpZXIpIC8gbXVsdGlwbGllcjtcbn1cblxuZnVuY3Rpb24gZ2V0Um91bmROdW0obnVtKSB7XG4gICAgY29uc3QgcG93MTAgPSBNYXRoLnBvdygxMCwgKGAke01hdGguZmxvb3IobnVtKX1gKS5sZW5ndGggLSAxKTtcbiAgICBsZXQgZCA9IG51bSAvIHBvdzEwO1xuXG4gICAgZCA9IGQgPj0gMTAgPyAxMCA6XG4gICAgICAgIGQgPj0gNSA/IDUgOlxuICAgICAgICBkID49IDMgPyAzIDpcbiAgICAgICAgZCA+PSAyID8gMiA6XG4gICAgICAgIGQgPj0gMSA/IDEgOiBnZXREZWNpbWFsUm91bmROdW0oZCk7XG5cbiAgICByZXR1cm4gcG93MTAgKiBkO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmltcG9ydCB7YmluZEFsbCwgd2Fybk9uY2V9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBjb250YWluZXI/OiBIVE1MRWxlbWVudFxufTtcblxuLyoqXG4gKiBBIGBGdWxsc2NyZWVuQ29udHJvbGAgY29udHJvbCBjb250YWlucyBhIGJ1dHRvbiBmb3IgdG9nZ2xpbmcgdGhlIG1hcCBpbiBhbmQgb3V0IG9mIGZ1bGxzY3JlZW4gbW9kZS5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbb3B0aW9ucy5jb250YWluZXJdIGBjb250YWluZXJgIGlzIHRoZSBbY29tcGF0aWJsZSBET00gZWxlbWVudF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVxdWVzdEZ1bGxTY3JlZW4jQ29tcGF0aWJsZV9lbGVtZW50cykgd2hpY2ggc2hvdWxkIGJlIG1hZGUgZnVsbCBzY3JlZW4uIEJ5IGRlZmF1bHQsIHRoZSBtYXAgY29udGFpbmVyIGVsZW1lbnQgd2lsbCBiZSBtYWRlIGZ1bGwgc2NyZWVuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuYWRkQ29udHJvbChuZXcgbWFwYm94Z2wuRnVsbHNjcmVlbkNvbnRyb2woe2NvbnRhaW5lcjogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpfSkpO1xuICogQHNlZSBbVmlldyBhIGZ1bGxzY3JlZW4gbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2Z1bGxzY3JlZW4vKVxuICovXG5cbmNsYXNzIEZ1bGxzY3JlZW5Db250cm9sIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2NvbnRyb2xDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9mdWxsc2NyZWVuOiBib29sZWFuO1xuICAgIF9mdWxsc2NyZWVuY2hhbmdlOiBzdHJpbmc7XG4gICAgX2Z1bGxzY3JlZW5CdXR0b246IEhUTUxFbGVtZW50O1xuICAgIF9jbGFzc05hbWU6IHN0cmluZztcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fZnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKCdGdWxsIHNjcmVlbiBjb250cm9sIFxcJ2NvbnRhaW5lclxcJyBtdXN0IGJlIGEgRE9NIGVsZW1lbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uQ2xpY2tGdWxsc2NyZWVuJyxcbiAgICAgICAgICAgICdfY2hhbmdlSWNvbidcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIGlmICgnb25mdWxsc2NyZWVuY2hhbmdlJyBpbiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UgPSAnZnVsbHNjcmVlbmNoYW5nZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoJ29ubW96ZnVsbHNjcmVlbmNoYW5nZScgaW4gd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuY2hhbmdlID0gJ21vemZ1bGxzY3JlZW5jaGFuZ2UnO1xuICAgICAgICB9IGVsc2UgaWYgKCdvbndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnIGluIHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbmNoYW5nZSA9ICd3ZWJraXRmdWxsc2NyZWVuY2hhbmdlJztcbiAgICAgICAgfSBlbHNlIGlmICgnb25tc2Z1bGxzY3JlZW5jaGFuZ2UnIGluIHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbmNoYW5nZSA9ICdNU0Z1bGxzY3JlZW5DaGFuZ2UnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9ICdtYXBib3hnbC1jdHJsJztcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIGlmICghdGhpcy5fY29udGFpbmVyKSB0aGlzLl9jb250YWluZXIgPSB0aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xDb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCBgJHt0aGlzLl9jbGFzc05hbWV9IG1hcGJveGdsLWN0cmwtZ3JvdXBgKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQoKSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBVSSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udHJvbENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgd2Fybk9uY2UoJ1RoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVlbiBtb2RlLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250cm9sQ29udGFpbmVyO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRyb2xDb250YWluZXIpO1xuICAgICAgICB0aGlzLl9tYXAgPSAobnVsbDogYW55KTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSwgdGhpcy5fY2hhbmdlSWNvbik7XG4gICAgfVxuXG4gICAgX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQoKSB7XG4gICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tb3pGdWxsU2NyZWVuRW5hYmxlZCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tc0Z1bGxzY3JlZW5FbmFibGVkIHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX3NldHVwVUkoKSB7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24gPSBET00uY3JlYXRlKCdidXR0b24nLCAoYCR7dGhpcy5fY2xhc3NOYW1lfS1pY29uICR7dGhpcy5fY2xhc3NOYW1lfS1mdWxsc2NyZWVuYCksIHRoaXMuX2NvbnRyb2xDb250YWluZXIpO1xuICAgICAgICBidXR0b24udHlwZSA9ICdidXR0b24nO1xuICAgICAgICB0aGlzLl91cGRhdGVUaXRsZSgpO1xuICAgICAgICB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGlja0Z1bGxzY3JlZW4pO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLCB0aGlzLl9jaGFuZ2VJY29uKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlVGl0bGUoKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5faXNGdWxsc2NyZWVuKCkgPyBcIkV4aXQgZnVsbHNjcmVlblwiIDogXCJFbnRlciBmdWxsc2NyZWVuXCI7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCB0aXRsZSk7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24udGl0bGUgPSB0aXRsZTtcbiAgICB9XG5cbiAgICBfaXNGdWxsc2NyZWVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZnVsbHNjcmVlbjtcbiAgICB9XG5cbiAgICBfY2hhbmdlSWNvbigpIHtcbiAgICAgICAgY29uc3QgZnVsbHNjcmVlbkVsZW1lbnQgPVxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50IHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLm1vekZ1bGxTY3JlZW5FbGVtZW50IHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50IHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLm1zRnVsbHNjcmVlbkVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKChmdWxsc2NyZWVuRWxlbWVudCA9PT0gdGhpcy5fY29udGFpbmVyKSAhPT0gdGhpcy5fZnVsbHNjcmVlbikge1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbiA9ICF0aGlzLl9mdWxsc2NyZWVuO1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKGAke3RoaXMuX2NsYXNzTmFtZX0tc2hyaW5rYCk7XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoYCR7dGhpcy5fY2xhc3NOYW1lfS1mdWxsc2NyZWVuYCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUaXRsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uQ2xpY2tGdWxsc2NyZWVuKCkge1xuICAgICAgICBpZiAodGhpcy5faXNGdWxsc2NyZWVuKCkpIHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tc0V4aXRGdWxsc2NyZWVuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fY29udGFpbmVyOiBhbnkpLm1velJlcXVlc3RGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAodGhpcy5fY29udGFpbmVyOiBhbnkpLm1velJlcXVlc3RGdWxsU2NyZWVuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX2NvbnRhaW5lcjogYW55KS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAodGhpcy5fY29udGFpbmVyOiBhbnkpLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fY29udGFpbmVyOiBhbnkpLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAodGhpcy5fY29udGFpbmVyOiBhbnkpLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZ1bGxzY3JlZW5Db250cm9sO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtleHRlbmQsIGJpbmRBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHNtYXJ0V3JhcCBmcm9tICcuLi91dGlsL3NtYXJ0X3dyYXAnO1xuaW1wb3J0IHt0eXBlIEFuY2hvciwgYW5jaG9yVHJhbnNsYXRlLCBhcHBseUFuY2hvckNsYXNzfSBmcm9tICcuL2FuY2hvcic7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge1BvaW50TGlrZX0gZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgIGNsb3NlT25DbGljazogdHJ1ZSxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIG1heFdpZHRoOiBcIjI0MHB4XCJcbn07XG5cbmV4cG9ydCB0eXBlIE9mZnNldCA9IG51bWJlciB8IFBvaW50TGlrZSB8IHtbQW5jaG9yXTogUG9pbnRMaWtlfTtcblxuZXhwb3J0IHR5cGUgUG9wdXBPcHRpb25zID0ge1xuICAgIGNsb3NlQnV0dG9uPzogYm9vbGVhbixcbiAgICBjbG9zZU9uQ2xpY2s/OiBib29sZWFuLFxuICAgIGFuY2hvcj86IEFuY2hvcixcbiAgICBvZmZzZXQ/OiBPZmZzZXQsXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICAgIG1heFdpZHRoPzogc3RyaW5nXG59O1xuXG4vKipcbiAqIEEgcG9wdXAgY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2xvc2VCdXR0b249dHJ1ZV0gSWYgYHRydWVgLCBhIGNsb3NlIGJ1dHRvbiB3aWxsIGFwcGVhciBpbiB0aGVcbiAqICAgdG9wIHJpZ2h0IGNvcm5lciBvZiB0aGUgcG9wdXAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNsb3NlT25DbGljaz10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBwb3B1cCB3aWxsIGNsb3NlZCB3aGVuIHRoZVxuICogICBtYXAgaXMgY2xpY2tlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmNob3JdIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgcGFydCBvZiB0aGUgUG9wdXAgdGhhdCBzaG91bGRcbiAqICAgYmUgcG9zaXRpb25lZCBjbG9zZXN0IHRvIHRoZSBjb29yZGluYXRlIHNldCB2aWEge0BsaW5rIFBvcHVwI3NldExuZ0xhdH0uXG4gKiAgIE9wdGlvbnMgYXJlIGAnY2VudGVyJ2AsIGAndG9wJ2AsIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBgJ3JpZ2h0J2AsIGAndG9wLWxlZnQnYCxcbiAqICAgYCd0b3AtcmlnaHQnYCwgYCdib3R0b20tbGVmdCdgLCBhbmQgYCdib3R0b20tcmlnaHQnYC4gSWYgdW5zZXQgdGhlIGFuY2hvciB3aWxsIGJlXG4gKiAgIGR5bmFtaWNhbGx5IHNldCB0byBlbnN1cmUgdGhlIHBvcHVwIGZhbGxzIHdpdGhpbiB0aGUgbWFwIGNvbnRhaW5lciB3aXRoIGEgcHJlZmVyZW5jZVxuICogICBmb3IgYCdib3R0b20nYC5cbiAqIEBwYXJhbSB7bnVtYmVyfFBvaW50TGlrZXxPYmplY3R9IFtvcHRpb25zLm9mZnNldF0gLVxuICogIEEgcGl4ZWwgb2Zmc2V0IGFwcGxpZWQgdG8gdGhlIHBvcHVwJ3MgbG9jYXRpb24gc3BlY2lmaWVkIGFzOlxuICogICAtIGEgc2luZ2xlIG51bWJlciBzcGVjaWZ5aW5nIGEgZGlzdGFuY2UgZnJvbSB0aGUgcG9wdXAncyBsb2NhdGlvblxuICogICAtIGEge0BsaW5rIFBvaW50TGlrZX0gc3BlY2lmeWluZyBhIGNvbnN0YW50IG9mZnNldFxuICogICAtIGFuIG9iamVjdCBvZiB7QGxpbmsgUG9pbnR9cyBzcGVjaWZpbmcgYW4gb2Zmc2V0IGZvciBlYWNoIGFuY2hvciBwb3NpdGlvblxuICogIE5lZ2F0aXZlIG9mZnNldHMgaW5kaWNhdGUgbGVmdCBhbmQgdXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2xhc3NOYW1lXSBTcGFjZS1zZXBhcmF0ZWQgQ1NTIGNsYXNzIG5hbWVzIHRvIGFkZCB0byBwb3B1cCBjb250YWluZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5tYXhXaWR0aD0nMjQwcHgnXSAtXG4gKiAgQSBzdHJpbmcgdGhhdCBzZXRzIHRoZSBDU1MgcHJvcGVydHkgb2YgdGhlIHBvcHVwJ3MgbWF4aW11bSB3aWR0aCwgZWcgYCczMDBweCdgLlxuICogIFRvIGVuc3VyZSB0aGUgcG9wdXAgcmVzaXplcyB0byBmaXQgaXRzIGNvbnRlbnQsIHNldCB0aGlzIHByb3BlcnR5IHRvIGAnbm9uZSdgLlxuICogIEF2YWlsYWJsZSB2YWx1ZXMgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXgtd2lkdGhcbiAqIEBleGFtcGxlXG4gKiB2YXIgbWFya2VySGVpZ2h0ID0gNTAsIG1hcmtlclJhZGl1cyA9IDEwLCBsaW5lYXJPZmZzZXQgPSAyNTtcbiAqIHZhciBwb3B1cE9mZnNldHMgPSB7XG4gKiAgJ3RvcCc6IFswLCAwXSxcbiAqICAndG9wLWxlZnQnOiBbMCwwXSxcbiAqICAndG9wLXJpZ2h0JzogWzAsMF0sXG4gKiAgJ2JvdHRvbSc6IFswLCAtbWFya2VySGVpZ2h0XSxcbiAqICAnYm90dG9tLWxlZnQnOiBbbGluZWFyT2Zmc2V0LCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzICsgbGluZWFyT2Zmc2V0KSAqIC0xXSxcbiAqICAnYm90dG9tLXJpZ2h0JzogWy1saW5lYXJPZmZzZXQsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMgKyBsaW5lYXJPZmZzZXQpICogLTFdLFxuICogICdsZWZ0JzogW21hcmtlclJhZGl1cywgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cykgKiAtMV0sXG4gKiAgJ3JpZ2h0JzogWy1tYXJrZXJSYWRpdXMsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMpICogLTFdXG4gKiAgfTtcbiAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCh7b2Zmc2V0OiBwb3B1cE9mZnNldHMsIGNsYXNzTmFtZTogJ215LWNsYXNzJ30pXG4gKiAgIC5zZXRMbmdMYXQoZS5sbmdMYXQpXG4gKiAgIC5zZXRIVE1MKFwiPGgxPkhlbGxvIFdvcmxkITwvaDE+XCIpXG4gKiAgIC5zZXRNYXhXaWR0aChcIjMwMHB4XCIpXG4gKiAgIC5hZGRUbyhtYXApO1xuICogQHNlZSBbRGlzcGxheSBhIHBvcHVwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLylcbiAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBob3Zlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1ob3Zlci8pXG4gKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gY2xpY2tdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24tY2xpY2svKVxuICogQHNlZSBbQXR0YWNoIGEgcG9wdXAgdG8gYSBtYXJrZXIgaW5zdGFuY2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvc2V0LXBvcHVwLylcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9wdXAgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgb3B0aW9uczogUG9wdXBPcHRpb25zO1xuICAgIF9jb250ZW50OiBIVE1MRWxlbWVudDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfY2xvc2VCdXR0b246IEhUTUxFbGVtZW50O1xuICAgIF90aXA6IEhUTUxFbGVtZW50O1xuICAgIF9sbmdMYXQ6IExuZ0xhdDtcbiAgICBfdHJhY2tQb2ludGVyOiBib29sZWFuO1xuICAgIF9wb3M6ID9Qb2ludDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBvcHVwT3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZShkZWZhdWx0T3B0aW9ucyksIG9wdGlvbnMpO1xuICAgICAgICBiaW5kQWxsKFsnX3VwZGF0ZScsICdfb25DbGlja0Nsb3NlJywgJ3JlbW92ZSddLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBwb3B1cCB0byBhIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TWFwfSBtYXAgVGhlIE1hcGJveCBHTCBKUyBtYXAgdG8gYWRkIHRoZSBwb3B1cCB0by5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIGFkZFRvKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignY2xpY2snLCB0aGlzLl9vbkNsaWNrQ2xvc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdyZW1vdmUnLCB0aGlzLnJlbW92ZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLl90cmFja1BvaW50ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2Vtb3ZlJywgKGUpID0+IHsgdGhpcy5fdXBkYXRlKGUucG9pbnQpOyB9KTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2V1cCcsIChlKSA9PiB7IHRoaXMuX3VwZGF0ZShlLnBvaW50KTsgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgcG9wdXAgaXMgb3BlbmVkIG1hbnVhbGx5IG9yIHByb2dyYW1hdGljYWxseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV2ZW50IG9wZW5cbiAgICAgICAgICogQG1lbWJlcm9mIFBvcHVwXG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKiBAcHJvcGVydHkge1BvcHVwfSBwb3B1cCBvYmplY3QgdGhhdCB3YXMgb3BlbmVkXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdvcGVuJykpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBvcHVwIGlzIG9wZW4sIGBmYWxzZWAgaWYgaXQgaXMgY2xvc2VkLlxuICAgICAqL1xuICAgIGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fbWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHBvcHVwIGZyb20gdGhlIG1hcCBpdCBoYXMgYmVlbiBhZGRlZCB0by5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKCkuYWRkVG8obWFwKTtcbiAgICAgKiBwb3B1cC5yZW1vdmUoKTtcbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fY29udGFpbmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdjbGljaycsIHRoaXMuX29uQ2xpY2tDbG9zZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdyZW1vdmUnLCB0aGlzLnJlbW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZW1vdmUnKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXA7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgcG9wdXAgaXMgY2xvc2VkIG1hbnVhbGx5IG9yIHByb2dyYW1hdGljYWxseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV2ZW50IGNsb3NlXG4gICAgICAgICAqIEBtZW1iZXJvZiBQb3B1cFxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICogQHByb3BlcnR5IHtQb3B1cH0gcG9wdXAgb2JqZWN0IHRoYXQgd2FzIGNsb3NlZFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnY2xvc2UnKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIG9mIHRoZSBwb3B1cCdzIGFuY2hvci5cbiAgICAgKlxuICAgICAqIFRoZSBsb25naXR1ZGUgb2YgdGhlIHJlc3VsdCBtYXkgZGlmZmVyIGJ5IGEgbXVsdGlwbGUgb2YgMzYwIGRlZ3JlZXMgZnJvbSB0aGUgbG9uZ2l0dWRlIHByZXZpb3VzbHlcbiAgICAgKiBzZXQgYnkgYHNldExuZ0xhdGAgYmVjYXVzZSBgUG9wdXBgIHdyYXBzIHRoZSBhbmNob3IgbG9uZ2l0dWRlIGFjcm9zcyBjb3BpZXMgb2YgdGhlIHdvcmxkIHRvIGtlZXBcbiAgICAgKiB0aGUgcG9wdXAgb24gc2NyZWVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbiBvZiB0aGUgcG9wdXAncyBhbmNob3IuXG4gICAgICovXG4gICAgZ2V0TG5nTGF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG5nTGF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbiBvZiB0aGUgcG9wdXAncyBhbmNob3IsIGFuZCBtb3ZlcyB0aGUgcG9wdXAgdG8gaXQuIFJlcGxhY2VzIHRyYWNrUG9pbnRlcigpIGJlaGF2aW9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxuZ2xhdCBUaGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIHRvIHNldCBhcyB0aGUgcG9wdXAncyBhbmNob3IuXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRMbmdMYXQobG5nbGF0OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIHRoaXMuX2xuZ0xhdCA9IExuZ0xhdC5jb252ZXJ0KGxuZ2xhdCk7XG4gICAgICAgIHRoaXMuX3BvcyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fdHJhY2tQb2ludGVyID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlbW92ZScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIHBvcHVwIGFuY2hvciB0byB0aGUgY3Vyc29yIHBvc2l0aW9uLCBvbiBzY3JlZW5zIHdpdGggYSBwb2ludGVyIGRldmljZSAod2lsbCBiZSBoaWRkZW4gb24gdG91Y2hzY3JlZW5zKS4gUmVwbGFjZXMgdGhlIHNldExuZ0xhdCBiZWhhdmlvci5cbiAgICAgKiBGb3IgbW9zdCB1c2UgY2FzZXMsIGBjbG9zZU9uQ2xpY2tgIGFuZCBgY2xvc2VCdXR0b25gIHNob3VsZCBhbHNvIGJlIHNldCB0byBgZmFsc2VgIGhlcmUuXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICB0cmFja1BvaW50ZXIoKSB7XG4gICAgICAgIHRoaXMuX3RyYWNrUG9pbnRlciA9IHRydWU7XG4gICAgICAgIHRoaXMuX3BvcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2Vtb3ZlJywgKGUpID0+IHsgdGhpcy5fdXBkYXRlKGUucG9pbnQpOyB9KTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignZHJhZycsIChlKSA9PiB7IHRoaXMuX3VwZGF0ZShlLnBvaW50KTsgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYFBvcHVwYCdzIEhUTUwgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBvcHVwJ3MgY29udGVudCB0byBhIHN0cmluZyBvZiB0ZXh0LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgW1RleHRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UZXh0KSBub2RlIGluIHRoZSBET00sXG4gICAgICogc28gaXQgY2Fubm90IGluc2VydCByYXcgSFRNTC4gVXNlIHRoaXMgbWV0aG9kIGZvciBzZWN1cml0eSBhZ2FpbnN0IFhTU1xuICAgICAqIGlmIHRoZSBwb3B1cCBjb250ZW50IGlzIHVzZXItcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCBUZXh0dWFsIGNvbnRlbnQgZm9yIHRoZSBwb3B1cC5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKClcbiAgICAgKiAgIC5zZXRMbmdMYXQoZS5sbmdMYXQpXG4gICAgICogICAuc2V0VGV4dCgnSGVsbG8sIHdvcmxkIScpXG4gICAgICogICAuYWRkVG8obWFwKTtcbiAgICAgKi9cbiAgICBzZXRUZXh0KHRleHQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHdpbmRvdy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcG9wdXAncyBjb250ZW50IHRvIHRoZSBIVE1MIHByb3ZpZGVkIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgZG9lcyBub3QgcGVyZm9ybSBIVE1MIGZpbHRlcmluZyBvciBzYW5pdGl6YXRpb24sIGFuZCBtdXN0IGJlXG4gICAgICogdXNlZCBvbmx5IHdpdGggdHJ1c3RlZCBjb250ZW50LiBDb25zaWRlciB7QGxpbmsgUG9wdXAjc2V0VGV4dH0gaWZcbiAgICAgKiB0aGUgY29udGVudCBpcyBhbiB1bnRydXN0ZWQgdGV4dCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaHRtbCBBIHN0cmluZyByZXByZXNlbnRpbmcgSFRNTCBjb250ZW50IGZvciB0aGUgcG9wdXAuXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRIVE1MKGh0bWw6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmcmFnID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgY29uc3QgdGVtcCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib2R5Jyk7XG4gICAgICAgIGxldCBjaGlsZDtcbiAgICAgICAgdGVtcC5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY2hpbGQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAoIWNoaWxkKSBicmVhaztcbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudChmcmFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwb3B1cCdzIG1heGltdW0gd2lkdGguXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbWF4aW11bSB3aWR0aCBvZiB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgZ2V0TWF4V2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcG9wdXAncyBtYXhpbXVtIHdpZHRoLiBUaGlzIGlzIHNldHRpbmcgdGhlIENTUyBwcm9wZXJ0eSBgbWF4LXdpZHRoYC5cbiAgICAgKiBBdmFpbGFibGUgdmFsdWVzIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWF4LXdpZHRoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWF4V2lkdGggQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBmb3IgdGhlIG1heGltdW0gd2lkdGguXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRNYXhXaWR0aChtYXhXaWR0aDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5tYXhXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcG9wdXAncyBjb250ZW50IHRvIHRoZSBlbGVtZW50IHByb3ZpZGVkIGFzIGEgRE9NIG5vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaHRtbE5vZGUgQSBET00gbm9kZSB0byBiZSB1c2VkIGFzIGNvbnRlbnQgZm9yIHRoZSBwb3B1cC5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gY3JlYXRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgcG9wdXAgY29udGVudFxuICAgICAqIHZhciBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICogZGl2LmlubmVySFRNTCA9ICdIZWxsbywgd29ybGQhJztcbiAgICAgKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKVxuICAgICAqICAgLnNldExuZ0xhdChlLmxuZ0xhdClcbiAgICAgKiAgIC5zZXRET01Db250ZW50KGRpdilcbiAgICAgKiAgIC5hZGRUbyhtYXApO1xuICAgICAqL1xuICAgIHNldERPTUNvbnRlbnQoaHRtbE5vZGU6IE5vZGUpIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlQ29udGVudCgpO1xuICAgICAgICB0aGlzLl9jb250ZW50LmFwcGVuZENoaWxkKGh0bWxOb2RlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9jcmVhdGVDb250ZW50KCkge1xuICAgICAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRlbnQgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtcG9wdXAtY29udGVudCcsIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uID0gRE9NLmNyZWF0ZSgnYnV0dG9uJywgJ21hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbicsIHRoaXMuX2NvbnRlbnQpO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VCdXR0b24udHlwZSA9ICdidXR0b24nO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0Nsb3NlIHBvcHVwJyk7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUwgPSAnJiMyMTU7JztcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGlja0Nsb3NlKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgX3VwZGF0ZShjdXJzb3I6IFBvaW50TGlrZSkge1xuICAgICAgICBjb25zdCBoYXNQb3NpdGlvbiA9IHRoaXMuX2xuZ0xhdCB8fCB0aGlzLl90cmFja1BvaW50ZXI7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tYXAgfHwgIWhhc1Bvc2l0aW9uIHx8ICF0aGlzLl9jb250ZW50KSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtcG9wdXAnLCB0aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCkpO1xuICAgICAgICAgICAgdGhpcy5fdGlwICAgICAgID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLXBvcHVwLXRpcCcsIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY29udGVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jbGFzc05hbWUuc3BsaXQoJyAnKS5mb3JFYWNoKG5hbWUgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQobmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrUG9pbnRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm1heFdpZHRoICYmIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCAhPT0gdGhpcy5vcHRpb25zLm1heFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGggPSB0aGlzLm9wdGlvbnMubWF4V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyAmJiAhdGhpcy5fdHJhY2tQb2ludGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9sbmdMYXQgPSBzbWFydFdyYXAodGhpcy5fbG5nTGF0LCB0aGlzLl9wb3MsIHRoaXMuX21hcC50cmFuc2Zvcm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrUG9pbnRlciAmJiAhY3Vyc29yKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5fcG9zID0gdGhpcy5fdHJhY2tQb2ludGVyICYmIGN1cnNvciA/IGN1cnNvciA6IHRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCk7XG5cbiAgICAgICAgbGV0IGFuY2hvcjogP0FuY2hvciA9IHRoaXMub3B0aW9ucy5hbmNob3I7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldCh0aGlzLm9wdGlvbnMub2Zmc2V0KTtcblxuICAgICAgICBpZiAoIWFuY2hvcikge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgbGV0IGFuY2hvckNvbXBvbmVudHM7XG5cbiAgICAgICAgICAgIGlmIChwb3MueSArIG9mZnNldC5ib3R0b20ueSA8IGhlaWdodCkge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMgPSBbJ3RvcCddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MueSA+IHRoaXMuX21hcC50cmFuc2Zvcm0uaGVpZ2h0IC0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cyA9IFsnYm90dG9tJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBvcy54IDwgd2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cy5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcy54ID4gdGhpcy5fbWFwLnRyYW5zZm9ybS53aWR0aCAtIHdpZHRoIC8gMikge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMucHVzaCgncmlnaHQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFuY2hvckNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuY2hvciA9IChhbmNob3JDb21wb25lbnRzLmpvaW4oJy0nKTogYW55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZnNldGVkUG9zID0gcG9zLmFkZChvZmZzZXRbYW5jaG9yXSkucm91bmQoKTtcbiAgICAgICAgRE9NLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsIGAke2FuY2hvclRyYW5zbGF0ZVthbmNob3JdfSB0cmFuc2xhdGUoJHtvZmZzZXRlZFBvcy54fXB4LCR7b2Zmc2V0ZWRQb3MueX1weClgKTtcbiAgICAgICAgYXBwbHlBbmNob3JDbGFzcyh0aGlzLl9jb250YWluZXIsIGFuY2hvciwgJ3BvcHVwJyk7XG4gICAgfVxuXG4gICAgX29uQ2xpY2tDbG9zZSgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9mZnNldChvZmZzZXQ6ID9PZmZzZXQpIHtcbiAgICBpZiAoIW9mZnNldCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplT2Zmc2V0KG5ldyBQb2ludCgwLCAwKSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIC8vIGlucHV0IHNwZWNpZmllcyBhIHJhZGl1cyBmcm9tIHdoaWNoIHRvIGNhbGN1bGF0ZSBvZmZzZXRzIGF0IGFsbCBwb3NpdGlvbnNcbiAgICAgICAgY29uc3QgY29ybmVyT2Zmc2V0ID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoMC41ICogTWF0aC5wb3cob2Zmc2V0LCAyKSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NlbnRlcic6IG5ldyBQb2ludCgwLCAwKSxcbiAgICAgICAgICAgICd0b3AnOiBuZXcgUG9pbnQoMCwgb2Zmc2V0KSxcbiAgICAgICAgICAgICd0b3AtbGVmdCc6IG5ldyBQb2ludChjb3JuZXJPZmZzZXQsIGNvcm5lck9mZnNldCksXG4gICAgICAgICAgICAndG9wLXJpZ2h0JzogbmV3IFBvaW50KC1jb3JuZXJPZmZzZXQsIGNvcm5lck9mZnNldCksXG4gICAgICAgICAgICAnYm90dG9tJzogbmV3IFBvaW50KDAsIC1vZmZzZXQpLFxuICAgICAgICAgICAgJ2JvdHRvbS1sZWZ0JzogbmV3IFBvaW50KGNvcm5lck9mZnNldCwgLWNvcm5lck9mZnNldCksXG4gICAgICAgICAgICAnYm90dG9tLXJpZ2h0JzogbmV3IFBvaW50KC1jb3JuZXJPZmZzZXQsIC1jb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ2xlZnQnOiBuZXcgUG9pbnQob2Zmc2V0LCAwKSxcbiAgICAgICAgICAgICdyaWdodCc6IG5ldyBQb2ludCgtb2Zmc2V0LCAwKVxuICAgICAgICB9O1xuXG4gICAgfSBlbHNlIGlmIChvZmZzZXQgaW5zdGFuY2VvZiBQb2ludCB8fCBBcnJheS5pc0FycmF5KG9mZnNldCkpIHtcbiAgICAgICAgLy8gaW5wdXQgc3BlY2lmaWVzIGEgc2luZ2xlIG9mZnNldCB0byBiZSBhcHBsaWVkIHRvIGFsbCBwb3NpdGlvbnNcbiAgICAgICAgY29uc3QgY29udmVydGVkT2Zmc2V0ID0gUG9pbnQuY29udmVydChvZmZzZXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NlbnRlcic6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICd0b3AnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAndG9wLWxlZnQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAndG9wLXJpZ2h0JzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ2JvdHRvbSc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdib3R0b20tbGVmdCc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdib3R0b20tcmlnaHQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAnbGVmdCc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdyaWdodCc6IGNvbnZlcnRlZE9mZnNldFxuICAgICAgICB9O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaW5wdXQgc3BlY2lmaWVzIGFuIG9mZnNldCBwZXIgcG9zaXRpb25cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjZW50ZXInOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnY2VudGVyJ10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICd0b3AnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsndG9wJ10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICd0b3AtbGVmdCc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wyd0b3AtbGVmdCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAndG9wLXJpZ2h0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ3RvcC1yaWdodCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAnYm90dG9tJzogUG9pbnQuY29udmVydChvZmZzZXRbJ2JvdHRvbSddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAnYm90dG9tLWxlZnQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnYm90dG9tLWxlZnQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2JvdHRvbS1yaWdodCc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wydib3R0b20tcmlnaHQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2xlZnQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnbGVmdCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAncmlnaHQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsncmlnaHQnXSB8fCBbMCwgMF0pXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHN1cHBvcnRlZCBmcm9tICdAbWFwYm94L21hcGJveC1nbC1zdXBwb3J0ZWQnO1xuXG5pbXBvcnQge3ZlcnNpb259IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQgTWFwIGZyb20gJy4vdWkvbWFwJztcbmltcG9ydCBOYXZpZ2F0aW9uQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvbmF2aWdhdGlvbl9jb250cm9sJztcbmltcG9ydCBHZW9sb2NhdGVDb250cm9sIGZyb20gJy4vdWkvY29udHJvbC9nZW9sb2NhdGVfY29udHJvbCc7XG5pbXBvcnQgQXR0cmlidXRpb25Db250cm9sIGZyb20gJy4vdWkvY29udHJvbC9hdHRyaWJ1dGlvbl9jb250cm9sJztcbmltcG9ydCBTY2FsZUNvbnRyb2wgZnJvbSAnLi91aS9jb250cm9sL3NjYWxlX2NvbnRyb2wnO1xuaW1wb3J0IEZ1bGxzY3JlZW5Db250cm9sIGZyb20gJy4vdWkvY29udHJvbC9mdWxsc2NyZWVuX2NvbnRyb2wnO1xuaW1wb3J0IFBvcHVwIGZyb20gJy4vdWkvcG9wdXAnO1xuaW1wb3J0IE1hcmtlciBmcm9tICcuL3VpL21hcmtlcic7XG5pbXBvcnQgU3R5bGUgZnJvbSAnLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4vZ2VvL21lcmNhdG9yX2Nvb3JkaW5hdGUnO1xuaW1wb3J0IHtFdmVudGVkfSBmcm9tICcuL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vdXRpbC9jb25maWcnO1xuaW1wb3J0IHtzZXRSVExUZXh0UGx1Z2lufSBmcm9tICcuL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuaW1wb3J0IFdvcmtlclBvb2wgZnJvbSAnLi91dGlsL3dvcmtlcl9wb29sJztcbmltcG9ydCB7Y2xlYXJUaWxlQ2FjaGV9IGZyb20gJy4vdXRpbC90aWxlX3JlcXVlc3RfY2FjaGUnO1xuXG5jb25zdCBleHBvcnRlZCA9IHtcbiAgICB2ZXJzaW9uLFxuICAgIHN1cHBvcnRlZCxcbiAgICBzZXRSVExUZXh0UGx1Z2luLFxuICAgIE1hcCxcbiAgICBOYXZpZ2F0aW9uQ29udHJvbCxcbiAgICBHZW9sb2NhdGVDb250cm9sLFxuICAgIEF0dHJpYnV0aW9uQ29udHJvbCxcbiAgICBTY2FsZUNvbnRyb2wsXG4gICAgRnVsbHNjcmVlbkNvbnRyb2wsXG4gICAgUG9wdXAsXG4gICAgTWFya2VyLFxuICAgIFN0eWxlLFxuICAgIExuZ0xhdCxcbiAgICBMbmdMYXRCb3VuZHMsXG4gICAgUG9pbnQsXG4gICAgTWVyY2F0b3JDb29yZGluYXRlLFxuICAgIEV2ZW50ZWQsXG4gICAgY29uZmlnLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyB0aGUgbWFwJ3MgW2FjY2VzcyB0b2tlbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL2RlZmluZS1hY2Nlc3MtdG9rZW4vKS5cbiAgICAgKlxuICAgICAqIEB2YXIge3N0cmluZ30gYWNjZXNzVG9rZW5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcGJveGdsLmFjY2Vzc1Rva2VuID0gbXlBY2Nlc3NUb2tlbjtcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlcy8pXG4gICAgICovXG4gICAgZ2V0IGFjY2Vzc1Rva2VuKCk6ID9zdHJpbmcge1xuICAgICAgICByZXR1cm4gY29uZmlnLkFDQ0VTU19UT0tFTjtcbiAgICB9LFxuXG4gICAgc2V0IGFjY2Vzc1Rva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgY29uZmlnLkFDQ0VTU19UT0tFTiA9IHRva2VuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXAncyBkZWZhdWx0IEFQSSBVUkwgZm9yIHJlcXVlc3RpbmcgdGlsZXMsIHN0eWxlcywgc3ByaXRlcywgYW5kIGdseXBoc1xuICAgICAqXG4gICAgICogQHZhciB7c3RyaW5nfSBiYXNlQXBpVXJsXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXBib3hnbC5iYXNlQXBpVXJsID0gJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20nO1xuICAgICAqL1xuICAgIGdldCBiYXNlQXBpVXJsKCk6ID9zdHJpbmcge1xuICAgICAgICByZXR1cm4gY29uZmlnLkFQSV9VUkw7XG4gICAgfSxcblxuICAgIHNldCBiYXNlQXBpVXJsKHVybDogc3RyaW5nKSB7XG4gICAgICAgIGNvbmZpZy5BUElfVVJMID0gdXJsO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2Ygd2ViIHdvcmtlcnMgaW5zdGFudGlhdGVkIG9uIGEgcGFnZSB3aXRoIEdMIEpTIG1hcHMuXG4gICAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIGhhbGYgdGhlIG51bWJlciBvZiBDUFUgY29yZXMgKGNhcHBlZCBhdCA2KS5cbiAgICAgKiBNYWtlIHN1cmUgdG8gc2V0IHRoaXMgcHJvcGVydHkgYmVmb3JlIGNyZWF0aW5nIGFueSBtYXAgaW5zdGFuY2VzIGZvciBpdCB0byBoYXZlIGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEB2YXIge3N0cmluZ30gd29ya2VyQ291bnRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcGJveGdsLndvcmtlckNvdW50ID0gMjtcbiAgICAgKi9cbiAgICBnZXQgd29ya2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIFdvcmtlclBvb2wud29ya2VyQ291bnQ7XG4gICAgfSxcblxuICAgIHNldCB3b3JrZXJDb3VudChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIFdvcmtlclBvb2wud29ya2VyQ291bnQgPSBjb3VudDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW1hZ2VzIChyYXN0ZXIgdGlsZXMsIHNwcml0ZXMsIGljb25zKSB0byBsb2FkIGluIHBhcmFsbGVsLFxuICAgICAqIHdoaWNoIGFmZmVjdHMgcGVyZm9ybWFuY2UgaW4gcmFzdGVyLWhlYXZ5IG1hcHMuIDE2IGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAdmFyIHtzdHJpbmd9IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0c1xuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwYm94Z2wubWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzID0gMTA7XG4gICAgICovXG4gICAgZ2V0IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUztcbiAgICB9LFxuXG4gICAgc2V0IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0cyhudW1SZXF1ZXN0czogbnVtYmVyKSB7XG4gICAgICAgIGNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFMgPSBudW1SZXF1ZXN0cztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGJyb3dzZXIgc3RvcmFnZSB1c2VkIGJ5IHRoaXMgbGlicmFyeS4gVXNpbmcgdGhpcyBtZXRob2QgZmx1c2hlcyB0aGUgTWFwYm94IHRpbGVcbiAgICAgKiBjYWNoZSB0aGF0IGlzIG1hbmFnZWQgYnkgdGhpcyBsaWJyYXJ5LiBUaWxlcyBtYXkgc3RpbGwgYmUgY2FjaGVkIGJ5IHRoZSBicm93c2VyXG4gICAgICogaW4gc29tZSBjYXNlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBvbiBicm93c2VycyB3aGVyZSB0aGUgW2BDYWNoZWAgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ2FjaGUpXG4gICAgICogaXMgc3VwcG9ydGVkIGFuZCBlbmFibGVkLiBUaGlzIGluY2x1ZGVzIGFsbCBtYWpvciBicm93c2VycyB3aGVuIHBhZ2VzIGFyZSBzZXJ2ZWQgb3ZlclxuICAgICAqIGBodHRwczovL2AsIGV4Y2VwdCBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBNb2JpbGUuXG4gICAgICpcbiAgICAgKiBXaGVuIGNhbGxlZCBpbiB1bnN1cHBvcnRlZCBicm93c2VycyBvciBlbnZpcm9ubWVudHMgKHByaXZhdGUgb3IgaW5jb2duaXRvIG1vZGUpLCB0aGVcbiAgICAgKiBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aXRoIGFuIGVycm9yIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uIGNsZWFyU3RvcmFnZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICAgICAqL1xuICAgIGNsZWFyU3RvcmFnZShjYWxsYmFjaz86IChlcnI6ID9FcnJvcikgPT4gdm9pZCkge1xuICAgICAgICBjbGVhclRpbGVDYWNoZShjYWxsYmFjayk7XG4gICAgfSxcblxuICAgIHdvcmtlclVybDogJydcbn07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgTWFwYm94IEdMIEpTIGluIHVzZSBhcyBzcGVjaWZpZWQgaW4gYHBhY2thZ2UuanNvbmAsXG4gKiBgQ0hBTkdFTE9HLm1kYCwgYW5kIHRoZSBHaXRIdWIgcmVsZWFzZS5cbiAqXG4gKiBAdmFyIHtzdHJpbmd9IHZlcnNpb25cbiAqL1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgYnJvd3NlciBbc3VwcG9ydHMgTWFwYm94IEdMIEpTXShodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvbWFwYm94LWJyb3dzZXItc3VwcG9ydC8jbWFwYm94LWdsLWpzKS5cbiAqXG4gKiBAZnVuY3Rpb24gc3VwcG9ydGVkXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZmFsc2VdIElmIGB0cnVlYCxcbiAqICAgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgdGhlIHBlcmZvcm1hbmNlIG9mIE1hcGJveCBHTCBKUyB3b3VsZFxuICogICBiZSBkcmFtYXRpY2FsbHkgd29yc2UgdGhhbiBleHBlY3RlZCAoZS5nLiBhIHNvZnR3YXJlIFdlYkdMIHJlbmRlcmVyIHdvdWxkIGJlIHVzZWQpLlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBleGFtcGxlXG4gKiBtYXBib3hnbC5zdXBwb3J0ZWQoKSAvLyA9IHRydWVcbiAqIEBzZWUgW0NoZWNrIGZvciBicm93c2VyIHN1cHBvcnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2hlY2stZm9yLXN1cHBvcnQvKVxuICovXG5cbi8qKlxuICogU2V0cyB0aGUgbWFwJ3MgW1JUTCB0ZXh0IHBsdWdpbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvcGx1Z2lucy8jbWFwYm94LWdsLXJ0bC10ZXh0KS5cbiAqIE5lY2Vzc2FyeSBmb3Igc3VwcG9ydGluZyB0aGUgQXJhYmljIGFuZCBIZWJyZXcgbGFuZ3VhZ2VzLCB3aGljaCBhcmUgd3JpdHRlbiByaWdodC10by1sZWZ0LiBNYXBib3ggU3R1ZGlvIGxvYWRzIHRoaXMgcGx1Z2luIGJ5IGRlZmF1bHQuXG4gKlxuICogQGZ1bmN0aW9uIHNldFJUTFRleHRQbHVnaW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwbHVnaW5VUkwgVVJMIHBvaW50aW5nIHRvIHRoZSBNYXBib3ggUlRMIHRleHQgcGx1Z2luIHNvdXJjZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICogQGV4YW1wbGVcbiAqIG1hcGJveGdsLnNldFJUTFRleHRQbHVnaW4oJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3BsdWdpbnMvbWFwYm94LWdsLXJ0bC10ZXh0L3YwLjIuMC9tYXBib3gtZ2wtcnRsLXRleHQuanMnKTtcbiAqIEBzZWUgW0FkZCBzdXBwb3J0IGZvciByaWdodC10by1sZWZ0IHNjcmlwdHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWFwYm94LWdsLXJ0bC10ZXh0LylcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcblxuLy8gY2FuYXJ5IGFzc2VydDogdXNlZCB0byBjb25maXJtIHRoYXQgYXNzZXJ0cyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHByb2R1Y3Rpb24gYnVpbGRcbmFzc2VydCh0cnVlLCAnY2FuYXJ5IGFzc2VydCcpO1xuIiwiLy9cbi8vIE91ciBjdXN0b20gaW50cm8gcHJvdmlkZXMgYSBzcGVjaWFsaXplZCBcImRlZmluZSgpXCIgZnVuY3Rpb24sIGNhbGxlZCBieSB0aGVcbi8vIEFNRCBtb2R1bGVzIGJlbG93LCB0aGF0IHNldHMgdXAgdGhlIHdvcmtlciBibG9iIFVSTCBhbmQgdGhlbiBleGVjdXRlcyB0aGVcbi8vIG1haW4gbW9kdWxlLCBzdG9yaW5nIGl0cyBleHBvcnRlZCB2YWx1ZSBhcyAnbWFwYm94Z2wnXG5cbi8vIFRoZSB0aHJlZSBcImNodW5rc1wiIGltcG9ydGVkIGhlcmUgYXJlIHByb2R1Y2VkIGJ5IGEgZmlyc3QgUm9sbHVwIHBhc3MsXG4vLyB3aGljaCBvdXRwdXRzIHRoZW0gYXMgQU1EIG1vZHVsZXMuXG5cbi8vIFNoYXJlZCBkZXBlbmRlbmNpZXMsIGkuZS46XG4vKlxuZGVmaW5lKFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgIC8vIENvZGUgZm9yIGFsbCBjb21tb24gZGVwZW5kZW5jaWVzXG4gICAgLy8gRWFjaCBtb2R1bGUncyBleHBvcnRzIGFyZSBhdHRhY2hlZCBhdHRhY2hlZCB0byAnZXhwb3J0cycgKHdpdGhcbiAgICAvLyBuYW1lcyByZXdyaXR0ZW4gdG8gYXZvaWQgY29sbGlzaW9ucywgZXRjLilcbn0pXG4qL1xuaW1wb3J0ICcuL2J1aWxkL21hcGJveGdsL3NoYXJlZCc7XG5cbi8vIFdvcmtlciBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMsIGkuZS46XG4vKlxuZGVmaW5lKFsnLi9zaGFyZWQuanMnXSwgZnVuY3Rpb24gKF9fc2hhcmVkX19qcykge1xuICAgIC8vICBDb2RlIGZvciB3b3JrZXIgc2NyaXB0IGFuZCBpdHMgdW5pcXVlIGRlcGVuZGVuY2llcy5cbiAgICAvLyAgRXhwZWN0cyB0aGUgb3V0cHV0IG9mICdzaGFyZWQnIG1vZHVsZSB0byBiZSBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQsXG4gICAgLy8gIHNpbmNlIGFsbCByZWZlcmVuY2VzIHRvIGNvbW1vbiBkZXBzIGxvb2sgbGlrZSwgZS5nLixcbiAgICAvLyAgX19zaGFyZWRfX2pzLnNoYXBlVGV4dCgpLlxufSk7XG4qL1xuLy8gV2hlbiB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIG91ciBjdXN0b20gZGVmaW5lKCkgYWJvdmUsXG4vLyBpdCBnZXRzIHN0cmluZ2lmaWVkLCB0b2dldGhlciB3aXRoIHRoZSBzaGFyZWQgd3JhcHBlciAodXNpbmdcbi8vIEZ1bmN0aW9uLnRvU3RyaW5nKCkpLCBhbmQgdGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgY29kZSBpcyBtYWRlIGludG8gYVxuLy8gQmxvYiBVUkwgdGhhdCBnZXRzIHVzZWQgYnkgdGhlIG1haW4gbW9kdWxlIHRvIGNyZWF0ZSB0aGUgd2ViIHdvcmtlcnMuXG5pbXBvcnQgJy4vYnVpbGQvbWFwYm94Z2wvd29ya2VyJztcblxuLy8gTWFpbiBtb2R1bGUgYW5kIGl0cyB1bmlxdWUgZGVwZW5kZW5jaWVzXG4vKlxuZGVmaW5lKFsnLi9zaGFyZWQuanMnXSwgZnVuY3Rpb24gKF9fc2hhcmVkX19qcykge1xuICAgIC8vICBDb2RlIGZvciBtYWluIEdMIEpTIG1vZHVsZSBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMuXG4gICAgLy8gIEV4cGVjdHMgdGhlIG91dHB1dCBvZiAnc2hhcmVkJyBtb2R1bGUgdG8gYmUgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LFxuICAgIC8vICBzaW5jZSBhbGwgcmVmZXJlbmNlcyB0byBjb21tb24gZGVwcyBsb29rIGxpa2UsIGUuZy4sXG4gICAgLy8gIF9fc2hhcmVkX19qcy5zaGFwZVRleHQoKS5cbiAgICAvL1xuICAgIC8vICBSZXR1cm5zIHRoZSBhY3R1YWwgbWFwYm94Z2wgKGkuZS4gc3JjL2luZGV4LmpzKVxufSk7XG4qL1xuaW1wb3J0ICcuL2J1aWxkL21hcGJveGdsL2luZGV4JztcblxuZXhwb3J0IGRlZmF1bHQgbWFwYm94Z2w7XG4iXSwibmFtZXMiOlsiYXJndW1lbnRzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJsZXQiLCJjb25zdCIsIlVuaXRCZXppZXIiLCJ3aW5kb3ciLCJleHBvcnRlZCIsImJyb3dzZXIiLCJ3ZWJwU3VwcG9ydGVkIiwic2RrVmVyc2lvbiIsInRoaXMiLCJzdXBlciIsImFzc2VydCIsImxpc3RlbmVyIiwicGFyc2VDU1NDb2xvciIsInRvU3RyaW5nIiwidHlwZSIsInR5cGVzIiwiYXJnIiwidmFsdWVUb1N0cmluZyIsImkiLCJleHBlY3RlZCIsInBhcnNlZCIsImVycm9yIiwiYXJyYXkiLCJpbnRlcnBvbGF0ZU51bWJlciIsIm91dHB1dEluZGV4IiwibHQiLCJydCIsIkltYWdlIiwidHlwZVRvU3RyaW5nIiwiZXh0ZW5kIiwic3RvcCIsImludGVycG9sYXRpb25UeXBlIiwiZGVmaW5pdGlvbnMiLCJpc0NvbnN0YW50LmlzU3RhdGVDb25zdGFudCIsImlzRmVhdHVyZUNvbnN0YW50IiwiaXNDb25zdGFudC5pc0ZlYXR1cmVDb25zdGFudCIsImlzQ29uc3RhbnQuaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50IiwidmFsaWRhdGVTcGVjIiwiZWxlbWVudFNwZWNLZXkiLCJsYXRlc3RTdHlsZVNwZWMiLCJ2YWxpZGF0ZVNvdXJjZSIsInZhbGlkYXRlTGlnaHQiLCJ2YWxpZGF0ZUZpbHRlciIsInZhbGlkYXRlUGFpbnRQcm9wZXJ0eSIsInZhbGlkYXRlTGF5b3V0UHJvcGVydHkiLCJHcmlkIiwibmFtZSIsImlzQ2hhciIsInJ0bFRleHRQbHVnaW4iLCJwcm9wZXJ0eSIsInN0eWxlU3BlYyIsIlBvaW50IiwibGF5b3V0IiwiU3RydWN0QXJyYXlMYXlvdXQiLCJQYXR0ZXJuTGF5b3V0QXJyYXkiLCJDaXJjbGVMYXlvdXRBcnJheSIsIlRyaWFuZ2xlSW5kZXhBcnJheSIsImxheW91dEF0dHJpYnV0ZXMiLCJidWNrZXRGZWF0dXJlIiwiZmVhdHVyZSIsImluZGV4IiwiZ2VvbWV0cnkiLCJzb3VyY2VMYXllckluZGV4IiwicGFpbnQiLCJnbE1hdHJpeC5BUlJBWV9UWVBFIiwiY2xvbmUiLCJlcXVhbHMiLCJnbE1hdHJpeC5FUFNJTE9OIiwiY3JlYXRlIiwiY29weSIsImlkZW50aXR5IiwiZnJvbVZhbHVlcyIsInNldCIsImludmVydCIsImRldGVybWluYW50IiwibXVsdGlwbHkiLCJyb3RhdGUiLCJzY2FsZSIsInRyYW5zbGF0ZSIsImZyb21Sb3RhdGlvbiIsImZyb21TY2FsaW5nIiwic3RyIiwiZnJvYiIsImFkZCIsInN1YnRyYWN0IiwibXVsdGlwbHlTY2FsYXIiLCJtdWx0aXBseVNjYWxhckFuZEFkZCIsImV4YWN0RXF1YWxzIiwibXVsIiwic3ViIiwidHJhbnNwb3NlIiwiYWRqb2ludCIsImZyb21UcmFuc2xhdGlvbiIsImZyb21RdWF0IiwiYmV6aWVyIiwiZ2xNYXRyaXguUkFORE9NIiwicm90YXRlWCIsInJvdGF0ZVkiLCJyb3RhdGVaIiwiZGl2aWRlIiwiY2VpbCIsImZsb29yIiwibWluIiwibWF4Iiwicm91bmQiLCJzY2FsZUFuZEFkZCIsImRpc3RhbmNlIiwic3F1YXJlZERpc3RhbmNlIiwibGVuZ3RoIiwic3F1YXJlZExlbmd0aCIsIm5lZ2F0ZSIsImludmVyc2UiLCJub3JtYWxpemUiLCJkb3QiLCJjcm9zcyIsImxlcnAiLCJyYW5kb20iLCJ0cmFuc2Zvcm1NYXQ0IiwidHJhbnNmb3JtUXVhdCIsInplcm8iLCJkaXYiLCJkaXN0Iiwic3FyRGlzdCIsImxlbiIsInNxckxlbiIsImZvckVhY2giLCJ2ZWM0LmNsb25lIiwidmVjNC5mcm9tVmFsdWVzIiwidmVjNC5jb3B5IiwidmVjNC5zZXQiLCJ2ZWM0LmFkZCIsInZlYzQuc2NhbGUiLCJ2ZWM0LmRvdCIsInZlYzQubGVycCIsInZlYzQubGVuZ3RoIiwidmVjNC5zcXVhcmVkTGVuZ3RoIiwidmVjNC5ub3JtYWxpemUiLCJ2ZWM0LmV4YWN0RXF1YWxzIiwidmVjNC5lcXVhbHMiLCJ2ZWMzLmNyZWF0ZSIsInZlYzMuZnJvbVZhbHVlcyIsInZlYzMuZG90IiwidmVjMy5jcm9zcyIsInZlYzMubGVuIiwidmVjMy5ub3JtYWxpemUiLCJtYXQzLmNyZWF0ZSIsImZyb21Sb3RhdGlvblRyYW5zbGF0aW9uIiwiZnJvbU1hdDQiLCJxdWF0LmNyZWF0ZSIsIm1hdDQuZ2V0Um90YXRpb24iLCJtYXQ0LmdldFRyYW5zbGF0aW9uIiwicXVhdC5jb3B5IiwiZ2V0VHJhbnNsYXRpb24iLCJxdWF0LnJvdGF0ZVgiLCJxdWF0LnJvdGF0ZVkiLCJxdWF0LnJvdGF0ZVoiLCJxdWF0LmRvdCIsImNvbmp1Z2F0ZSIsInF1YXQubGVuZ3RoIiwicXVhdC5zcXVhcmVkTGVuZ3RoIiwidHJhbnNmb3JtTWF0MyIsImFuZ2xlIiwidmVjNC50cmFuc2Zvcm1NYXQ0IiwicHJvcGVydGllcyIsInN3YXAiLCJGaWxsTGF5b3V0QXJyYXkiLCJMaW5lSW5kZXhBcnJheSIsInJpbmciLCJlYXJjdXQiLCJjbGFzc2lmeVJpbmdzIiwic2lnbmVkQXJlYSIsIlZlY3RvclRpbGVGZWF0dXJlIiwiVmVjdG9yVGlsZUxheWVyIiwicmVxdWlyZSQkMiIsIm12dCIsIkVBUkNVVF9NQVhfUklOR1MiLCJGaWxsRXh0cnVzaW9uTGF5b3V0QXJyYXkiLCJwIiwicHJvamVjdFF1ZXJ5R2VvbWV0cnkiLCJ2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzIiwiTGluZUxheW91dEFycmF5Iiwib2Zmc2V0IiwibGluZSIsInRhZ2dlZExpbmUiLCJhbGlnbiIsImludGVycG9sYXRlIiwiYWRkVmVydGV4IiwiU3ltYm9sTGF5b3V0QXJyYXkiLCJTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXkiLCJTeW1ib2xPcGFjaXR5QXJyYXkiLCJ1cGxvYWQiLCJDb2xsaXNpb25WZXJ0ZXhBcnJheSIsIkNvbGxpc2lvbkJveExheW91dEFycmF5IiwiQ29sbGlzaW9uQ2lyY2xlTGF5b3V0QXJyYXkiLCJ0cmFuc2Zvcm1UZXh0IiwicmVzb2x2ZWRUb2tlbnMiLCJzeW1ib2wiLCJpbmRleEFycmF5IiwiayIsImJveCIsImNpcmNsZSIsImhlYXRtYXAiLCJoaWxsc2hhZGUiLCJmaWxsIiwiZmlsbEV4dHJ1c2lvbiIsImJhY2tncm91bmQiLCJyYXN0ZXIiLCJpZCIsInNyYyIsImJpbiIsInciLCJoIiwiSW1hZ2VEYXRhIiwiUHJvdG9idWYiLCJjYWxsYmFjayIsImRlc2VyaWFsaXplIiwicHJvdG90eXBlQWNjZXNzb3JzIiwic291cmNlTGF5ZXIiLCJsYXllclN0YXRlcyIsInZ0IiwiZmVhdHVyZUZpbHRlciIsIkdlb0pTT05GZWF0dXJlIiwiZGVzZXJpYWxpemVCdWNrZXQiLCJidWNrZXQiLCJSYXN0ZXJCb3VuZHNBcnJheSIsImRlZmF1bHRDb21wYXJlIiwiUXVldWUiLCJtdXJtdXIzIiwibXVybXVyMiIsIm1pblpvb20iLCJtYXhab29tIiwic2hhcGluZyIsImFuY2hvciIsInJlZlByb3BlcnRpZXMiLCJjcmVhdGVTdHlsZUxheWVyIiwidmFsdWVzIiwibGF5ZXJDb25maWdzIiwibGF5ZXIiLCJwb3RwYWNrIiwiQWxwaGFJbWFnZSIsInN0YWNrIiwiZ2x5cGhzIiwicmVnaXN0ZXIiLCJPdmVyc2NhbGVkVGlsZUlEIiwiQ29sbGlzaW9uQm94QXJyYXkiLCJEaWN0aW9uYXJ5Q29kZXIiLCJGZWF0dXJlSW5kZXgiLCJ3YXJuT25jZSIsIm1hcE9iamVjdCIsIkltYWdlQXRsYXMiLCJTeW1ib2xCdWNrZXQiLCJwZXJmb3JtU3ltYm9sTGF5b3V0IiwiTGluZUJ1Y2tldCIsIkZpbGxCdWNrZXQiLCJGaWxsRXh0cnVzaW9uQnVja2V0IiwiRXZhbHVhdGlvblBhcmFtZXRlcnMiLCJnZXRBcnJheUJ1ZmZlciIsInBlcmZvcm1hbmNlIiwiREVNRGF0YSIsIkVYVEVOVCIsInBvaW50IiwiR2VvSlNPTldyYXBwZXIiLCJGZWF0dXJlV3JhcHBlciIsIlBiZiIsInNvcnQiLCJyZXdpbmQiLCJ0cmFuc2Zvcm0iLCJ2dHBiZiIsImdldEpTT04iLCJjcmVhdGVFeHByZXNzaW9uIiwiQWN0b3IiLCJnbG9iYWxSVExUZXh0UGx1Z2luIiwiZW5mb3JjZUNhY2hlU2l6ZUxpbWl0Iiwic2VsZiIsIm9wdGlvbnMiLCJSZXNvdXJjZVR5cGUiLCJnZXRJbWFnZSIsIlJHQkFJbWFnZSIsIkV2ZW50IiwiSW1hZ2VQb3NpdGlvbiIsIlRleHR1cmUiLCJFdmVudGVkIiwicGFyc2VHbHlwaFBCRiIsImFzeW5jQWxsIiwiVGlueVNERiIsInNwaGVyaWNhbFRvQ2FydGVzaWFuIiwiUHJvcGVydGllcyIsIkRhdGFDb25zdGFudFByb3BlcnR5IiwiVHJhbnNpdGlvbmFibGUiLCJlbmRzV2l0aCIsImVtaXRWYWxpZGF0aW9uRXJyb3JzIiwidmFsaWRhdGVTdHlsZSIsInVuaXF1ZUlkIiwicGljayIsIkxuZ0xhdEJvdW5kcyIsIm1lcmNhdG9yWGZyb21MbmciLCJtZXJjYXRvcllmcm9tTGF0IiwiRXJyb3JFdmVudCIsInBvc3RUdXJuc3RpbGVFdmVudCIsInBvc3RNYXBMb2FkRXZlbnQiLCJjYWNoZUVudHJ5UG9zc2libHlBZGRlZCIsIk1lcmNhdG9yQ29vcmRpbmF0ZSIsInJhc3RlckJvdW5kc0F0dHJpYnV0ZXMiLCJTZWdtZW50VmVjdG9yIiwiQ2Fub25pY2FsVGlsZUlEIiwiZ2V0VmlkZW8iLCJWYWxpZGF0aW9uRXJyb3IiLCJ2ZWN0b3IiLCJyYXN0ZXJEZW0iLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSIsImNhbnZhcyIsImJpbmRBbGwiLCJtYXQ0LmlkZW50aXR5IiwibWF0NC50cmFuc2xhdGUiLCJtYXQ0LnNjYWxlIiwibWF0NC5tdWx0aXBseSIsIkNvbG9yIiwiQUxXQVlTIiwiZGVlcEVxdWFsIiwiY3JlYXRlU291cmNlIiwiU291cmNlRmVhdHVyZVN0YXRlIiwidGlsZSIsImtleXNEaWZmZXJlbmNlIiwidGlsZUlEIiwiVGlsZSIsIm1hcGJveGdsIiwiaXNFcXVhbCIsIm1hdDQuY3JlYXRlIiwibWF0NC5yb3RhdGVaIiwibWF0NC5jbG9uZSIsInN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yWm9vbSIsIldyaXRpbmdNb2RlIiwic3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlIiwib3JpZW50YXRpb25DaGFuZ2UiLCJhZGREeW5hbWljQXR0cmlidXRlcyIsInByb2plY3Rpb24ucHJvamVjdCIsInByb2plY3Rpb24ucGxhY2VGaXJzdEFuZExhc3RHbHlwaCIsImludGVyc2VjdGlvblRlc3RzLnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbiIsInByb2plY3Rpb24ueHlUcmFuc2Zvcm1NYXQ0IiwiZ2V0QW5jaG9yQWxpZ25tZW50IiwiZXZhbHVhdGVWYXJpYWJsZU9mZnNldCIsInByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeCIsInBsYWNlSG9yaXpvbnRhbCIsInBsYWNlVmVydGljYWwiLCJnZXRBbmNob3JKdXN0aWZpY2F0aW9uIiwiY3Jvc3NUaWxlSUQiLCJwcmV2T3BhY2l0eSIsInBhY2tlZE9wYWNpdHkiLCJzeW1ib2xJbnN0YW5jZSIsIl9lbWl0VmFsaWRhdGlvbkVycm9ycyIsImRpZmZPcGVyYXRpb25zIiwiZ2V0V29ya2VyUG9vbCIsIlpvb21IaXN0b3J5IiwiZ2V0UmVmZXJyZXIiLCJpc01hcGJveFVSTCIsImRlcmVmIiwidmFsaWRhdGVDdXN0b21TdHlsZUxheWVyIiwiZmlsdGVyT2JqZWN0IiwibCIsImxheWVySWQiLCJzb3VyY2VSZXN1bHQiLCJsYXllckZlYXR1cmVzIiwiZmVhdHVyZVdyYXBwZXIiLCJydGxUZXh0UGx1Z2luRXZlbnRlZCIsImxheWVySUQiLCJzdHlsZUxheWVyIiwibWFrZVJlcXVlc3QiLCJnZXRTb3VyY2VUeXBlIiwic2V0U291cmNlVHlwZSIsInJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5IiwiY3JlYXRlTGF5b3V0IiwidmVydGV4QnVmZmVyIiwiUHJvZ3JhbSIsIlVuaWZvcm1NYXRyaXg0ZiIsIlVuaWZvcm0zZiIsIlVuaWZvcm0xZiIsIlVuaWZvcm0xaSIsIlVuaWZvcm0yZiIsIlVuaWZvcm00ZiIsIm1hdDMuZnJvbVJvdGF0aW9uIiwidmVjMy50cmFuc2Zvcm1NYXQzIiwiVW5pZm9ybUNvbG9yIiwibWF0NC5vcnRobyIsInN5bWJvbFByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeCIsInN5bWJvbFNpemUiLCJzeW1ib2xQcm9qZWN0aW9uLmhpZGVHbHlwaHMiLCJzeW1ib2xQcm9qZWN0aW9uLnByb2plY3QiLCJPTkVfRU0iLCJzaGlmdCIsImciLCJzeW1ib2xQcm9qZWN0aW9uLmdldEdsQ29vcmRNYXRyaXgiLCJzeW1ib2xQcm9qZWN0aW9uLnVwZGF0ZUxpbmVMYWJlbHMiLCJzdGF0ZSIsInVuaWZvcm1WYWx1ZXMiLCJwcm9ncmFtIiwibGF5b3V0VmVydGV4QnVmZmVyIiwiaW5kZXhCdWZmZXIiLCJwcm9ncmFtQ29uZmlndXJhdGlvbiIsImRlcHRoTW9kZSIsImNsYW1wIiwiUG9zQXJyYXkiLCJkcmF3IiwiZGVidWciLCJjdXN0b20iLCJQcm9ncmFtQ29uZmlndXJhdGlvbiIsIkxpbmVTdHJpcEluZGV4QXJyYXkiLCJzb3VyY2VDYWNoZSIsImNvb3JkcyIsIkxuZ0xhdCIsIndyYXAiLCJtYXQyLmNyZWF0ZSIsIm1hdDIucm90YXRlIiwiVW53cmFwcGVkVGlsZUlEIiwibWF0NC5wZXJzcGVjdGl2ZSIsIm1hdDQucm90YXRlWCIsIm1lcmNhdG9yWmZyb21BbHRpdHVkZSIsIm1hdDQuaW52ZXJ0IiwiX2Vhc2UiLCJpbmVydGlhTGluZWFyaXR5IiwiaW5lcnRpYUVhc2luZyIsImluZXJ0aWFNYXhTcGVlZCIsImluZXJ0aWFEZWNlbGVyYXRpb24iLCJzY3JvbGxab29tIiwiYm94Wm9vbSIsImRyYWdSb3RhdGUiLCJkcmFnUGFuIiwia2V5Ym9hcmQiLCJkb3VibGVDbGlja1pvb20iLCJ0b3VjaFpvb21Sb3RhdGUiLCJkZWZhdWx0RWFzaW5nIiwiY29uZmlnIiwiUmVxdWVzdE1hbmFnZXIiLCJtb3VzZWluIiwibW91c2Vtb3ZlIiwibW91c2VvdXQiLCJ3aWR0aCIsImhlaWdodCIsImRhdGEiLCJpc1N1cHBvcnRlZCIsInNldENhY2hlTGltaXRzIiwidmVyc2lvbiIsImRlZmF1bHRPcHRpb25zIiwic3VwcG9ydGVkIiwic2V0UlRMVGV4dFBsdWdpbiIsImNsZWFyVGlsZUNhY2hlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxZQUFZLENBQUM7O0FBRWIsSUFBSSxxQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7QUFDekQsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDckQsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDOztBQUU3RCxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Q0FDdEIsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7RUFDdEMsTUFBTSxJQUFJLFNBQVMsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0VBQzdFOztDQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25COztBQUVELFNBQVMsZUFBZSxHQUFHO0NBQzFCLElBQUk7RUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtHQUNuQixPQUFPLEtBQUssQ0FBQztHQUNiOzs7OztF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R0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDOztJQUVsQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDcEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDOztJQUVsQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNsQjs7QUFFRCxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsRUFBRTs7SUFFNUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDdEQsQ0FBQzs7QUFFRixVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsRUFBRTtJQUM1QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztDQUN0RCxDQUFDOztBQUVGLFVBQVUsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDdEQsT0FBTyxDQUFDLEdBQUcsR0FBRyxJ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RSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7Ozs7SUFRckQsV0FBVyxLQUFLLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXBFLFVBQVUsTUFBTSxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7Ozs7OztJQVFuRSxJQUFJLEtBQUssU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7Ozs7SUFRdEQsR0FBRyxNQUFNLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXJELE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7Ozs7Ozs7SUFTeEQsWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7OztJQU94RSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7Ozs7O0lBU3pELElBQUksS0FBSyxXQUFXLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTs7Ozs7Ozs7SUFRcEQs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4S2MsSUFBTSxlQUFlLEdBQ2hDLHdCQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFO0lBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQU0sR0FBRyxXQUFPLEVBQUUsSUFBSSxPQUFPLENBQUM7SUFDckQsSUFBUSxVQUFVLElBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUM7O0lBRTdDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7UUFDekQsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0tBQzlC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QUFDLENBQUM7RUFDL0MsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2xELGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM1RCxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDckQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFELGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDOUQsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzdELGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM3RCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdkQsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3hELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN4RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDMUQsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3RELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDbEQsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0RCxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdkQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2xELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNsRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDN0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNyRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFELGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMvRCxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNsRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDcEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9DLGtCQUFrQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzlELGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMvRCxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BFLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDckUsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDaEUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFELFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDL0MsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ25ELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzlELGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMvRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDcEQsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2hELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDL0IsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2hELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUN6RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDdkQsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3RELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNsRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdkQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNyRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbkQsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFD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VSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVTtRQUMzTkEsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNyRzs7dURBRUQsNEJBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVU7UUFDbE9BLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEJBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEJBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixPQUFPLENBQUMsQ0FBQztLQUNaOzs7RUEzQ2tELGNBNEN0RDs7QUFFRCx3Q0FBd0MsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUN4RSxRQUFRLENBQUMsMENBQTBDLEVBQUUsd0NBQXdDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFXL0YsSUFBTSw4QkFBOEI7Ozs7Ozs7Ozs2Q0FPaEMsMENBQWdCO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDckQ7OzZDQUVELG9DQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVTtRQUM1UkEsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQzlIOzs2Q0FFRCw0QkFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVO1FBQ25TQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xCQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDNUIsSUFBSSxD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Q0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFO0lBQ3ZFLHFCQUFJLGdEQUFnQyxFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFFO0lBQ3ZGLHFCQUFJLDhDQUE4QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFO0lBQzdGLHFCQUFJLGlEQUFpQyxFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFFO0lBQ3hGLHFCQUFJLCtDQUErQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFO0lBQzlGLHFCQUFJLCtDQUErQixFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFFO0lBQ3RGLHFCQUFJLDZDQUE2QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFO0lBQzVGLHFCQUFJLGdEQUFnQyxFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFFO0lBQ3ZGLHFCQUFJLDhDQUE4QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFO0lBQzdGLHFCQUFJLHdDQUF3QixFQUFF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VUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7SUFDOUUscUJBQUksNkNBQTZCLEVBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUU7SUFDdEYscUJBQUksMkNBQTJCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7SUFDNUYscUJBQUksMkNBQTJCLEVBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUU7SUFDcEYscUJBQUkseUNBQXlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7SUFDMUYscUJBQUksa0NBQWtCLEVBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUU7SUFDM0UscUJBQUksZ0NBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7SUFDakYscUJBQUksOEJBQWMsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRTtJQUN0RSxxQkFBSSw0QkFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMs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QVMsQ0FBQyxTQUFTLENBQUMsU0FBUztJQUN4REEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFDO0lBQ2xDQSxJQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2RSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFDO0lBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUM7SUFDL0IsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9DOzs7QUFHRCxTQUFTLHlCQUF5QixDQUFDLEtBQUssZUFBZSxDQUFDLFNBQVM7SUFDN0RELElBQUksQ0FBQyxHQUFHLEtBQUs7UUFDVCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQzs7SUFFakIsS0FBS0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsS0FBS0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxF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LFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDN0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEM7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FB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QUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pFOzs7Ozs7Ozs7QUFTTSxTQUFTRSxRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUks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QUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0ssTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxVQUFRLENBQUMsR0FBRyxFQUFFO0VBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTQyxZQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7RUFDN0MsSUFBSSxHQUFHLEdBQUcsSUFBSVAsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7OztBQWNNLFNBQVNRLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0VBRTVCLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDUixPQUFPLElBQUksQ0FBQztHQUNiOztFQUVELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDckMsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFO0VBQzdCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xDOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7RUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbkMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTQyxjQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUNyQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNqQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTQyxhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDckIsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDcEc7Ozs7Ozs7O0FBUU0sU0FBU0MsTUFBSSxDQUFDLENBQUMsRUFBRTtFQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDN0k7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsZ0JBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCQyxzQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7RUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsYUFBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzRzs7Ozs7Ozs7O0FBU00sU0FBU3JCLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNuZ0I7Ozs7OztBQU1NLElBQUlxQixLQUFHLEdBQUdiLFVBQVEsQ0FBQzs7Ozs7O0FBTTFCLElBQVdjLEtBQUcsR0FBR0wsVUFBUTs7Ozs7Ozs7Ozs7OztBQ3pkekIsU0FBZ0JoQixRQUFNLEdBQUc7RUFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSUosVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFckMsSUFBSUEsVUFBbUIsSUFBSSxZQUFZLEVBQUU7SUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0dBQ1o7O0VBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDZixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNDLE9BQUssQ0FBQyxDQUFDLEVBQUU7RUFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSUQsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTSyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JELFNBQWdCRSxZQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDdEUsSUFBSSxHQUFHLEdBQUcsSUFBSVAsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRCxTQUFnQlEsS0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUNwRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNGLFVBQVEsQ0FBQyxHQUFHLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU29CLFdBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFOztFQUVoQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0dBQ2QsTUFBTTtJQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUNmOztFQUVELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNqQixRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM3QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDakMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztFQUVoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7RUFFNUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNSLE9BQU8sSUFBSSxDQUFDO0dBQ2I7O0VBRUQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VB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RTtFQUNsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JHLFdBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNuQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2pDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkYsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ2xDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO01BQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLE9BQU8sR0FBRyxDQUFDO0NBQ1o7QUFDRCxDQUFDOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTZSxpQkFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVNiLGNBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3JDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO01BQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVNDLGFBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVNLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVNLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDckMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7RUFFaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0VBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDUixPQUFPLElBQUksQ0FBQztHQUNiOztFQUVELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7RUFDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDckIsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDN0k7Ozs7Ozs7O0FBUU0sU0FBU0MsTUFBSSxDQUFDLENBQUMsRUFBRTtFQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyTTs7Ozs7Ozs7OztBQVVELFNBQWdCQyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxnQkFBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0JDLHNCQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtFQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlKOzs7Ozs7Ozs7QUFTTSxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FB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Q2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTSyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1Qk0sU0FBU0UsWUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUN6RyxJQUFJLEdBQUcsR0FBRyxJQUFJUCxVQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3Qk0sU0FBU1EsS0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU0YsVUFBUSxDQUFDLEdBQUcsRUFBRTtFQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU29CLFdBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFOztFQUVoQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztHQUNmLE1BQU07SUFDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2pCOztFQUVELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNqQixRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM3QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztFQUVoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7RUFFaEYsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNSLE9BQU8sSUFBSSxDQUFDO0dBQ2I7O0VBRUQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNrQixTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDMUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDMUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN4RyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3hHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3hHLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU2pCLGFBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDN0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7RUFFaEMsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUM5RTs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7RUFFaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNYLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNwRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1gsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNYLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDcEQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCRyxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQ3ZCLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQ3ZCLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDOztFQUV2QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ25ELE1BQU07SUFDTCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNaLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQy9DOztFQUVELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkQsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FB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Q0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNaLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O0VBRVosR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0VBRXBCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztFQUU1QyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7O0lBRWIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUNqQjs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztFQUVoQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7O0lBRWIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDakI7OztFQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUM1QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztFQUVoQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7O0lBRWIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDakI7OztFQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUM1QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRWYsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDakI7OztFQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU3lCLGlCQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVNaLGFBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7OztBQWNELFNBQWdCRCxjQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7RUFDM0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUNYLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ1gsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7RUFFWixJQUFJLEdBQUcsR0FBR1osT0FBZ0IsRUFBRTtJQUMxQixPQUFPLElBQUksQ0FBQztHQUNiOztFQUVELEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNULENBQUMsSUFBSSxHQUFHLENBQUM7RUFDVCxDQUFDLElBQUksR0FBRyxDQUFDO0VBQ1QsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0VBRVYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3RDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7RUFFdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDdEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUV0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUN0QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0VBRXRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFH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QUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7RUFFdEQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO0lBQ2pCLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUN6RSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDekUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0dBQzFFLE1BQU07SUFDTCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RCxXQUFXLENBQUMs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Q0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDaEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM5QyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDaEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQ2hDLE1BQU07SUFDTCxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7R0FDbkI7O0VBRUQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CRCxTQUFnQiw0QkFBNEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7O0VBRXpELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDL0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JNLFNBQVMsa0NBQWtDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7RUFFbEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQzFCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUMxQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ2hDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUMxQixJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQzFCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDMUQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztFQUMxRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzNELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVU0sU0FBUzZCLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENB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QUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM5QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7RUFDeEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztNQUM1QixFQUFFLENBQUM7RUFDUCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7O0VBRVosSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7SUFDbkMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztHQUMvQixNQUFNO0lBQ0wsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztHQUNyQjs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYUQsU0FBZ0IsMEJBQTBCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0VBQzlELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQ3RELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQzFELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQzFELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQzVELElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUM7RUFDeEMsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEdBQUcsUUFBUSxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNoRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsT0FBTyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7RUFDMUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDN0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDcEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7O0FBY00sU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0VBQzlELElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDNUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztFQUM1QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FB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RSxJQUFJLEdBQUcsQ0FBQztJQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDVixFQUFFLElBQUksR0FBRyxDQUFDO0dBQ1g7O0VBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtFQUM3QyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNiLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ1gsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDWCxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEVBQUUsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNyQixFQUFFLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7RUFFdEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0lBQ1gsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDVixFQUFFLElBQUksR0FBRyxDQUFDO0lBQ1YsRUFBRSxJQUFJLEdBQUcsQ0FBQztHQUNYOztFQUVELElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUU7TUFDeEIsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUU7TUFDeEIsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUM3QixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0VBRWxDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtJQUNYLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixFQUFFLElBQUksR0FBRyxDQUFDO0lBQ1YsRUFBRSxJQUFJLEdBQUcsQ0FBQztJQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7R0FDWDs7RUFFRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjtBQUNELENBQUM7Ozs7Ozs7O0FBUU0sU0FBU1csS0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3JQOzs7Ozs7OztBQVFNLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUU7RUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdlY7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsZ0JBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCQyxzQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7RUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDaEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDaEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2hDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLGFBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNqUzs7Ozs7Ozs7O0FBU00sU0FBU3JCLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENB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QUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JXLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JULFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JFLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7RUFDNUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUN6Qzs7Ozs7Ozs7O0FBU00sU0FBUyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlCOzs7Ozs7OztBQVFNLFNBQVMsYUFBYSxDQUFDLENBQUMsRUFBRTtFQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzlCOzs7Ozs7Ozs7QUFTTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7RUFFaEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFOztJQUVYLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztHQUMxQjs7RUFFRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3hCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEQ7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDL0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDakMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzFDLElBQUksWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDekIsSUFBSSxPQUFPLEdBQUcsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzdDLElBQUksT0FBTyxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3pDLElBQUksT0FBTyxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDckMsSUFBSSxPQUFPLEdBQUcsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7RUFDM0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7RUFDM0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7RUFDM0UsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVNpQixRQUFNLENBQUMsR0FBRyxF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RyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdkQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEMsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQixhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7O0VBRXZDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztFQUdiLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7TUFDckIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7TUFDckIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7RUFFMUIsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRztNQUMxQixJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRztNQUMxQixJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDOztFQUUvQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsSUFBSSxFQUFFLENBQUM7RUFDVixHQUFHLElBQUksRUFBRSxDQUFDO0VBQ1YsR0FBRyxJQUFJLEVBQUUsQ0FBQzs7RUFFVixJQUFJLElBQUksQ0FBQyxDQUFDO0VBQ1YsSUFBSSxJQUFJLENBQUMsQ0FBQztFQUNWLElBQUksSUFBSSxDQUFDLENBQUM7O0VBRVYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7RUFDeEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3BDLElBQUksQ0FBQyxHQUFHLEVBQUU7TUFDTixDQUFDLEdBQUcsRUFBRSxDQUFDOztFQUVYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3BDLElBQUksQ0FBQyxHQUFHLEVBQUU7TUFDTixDQUFDLEdBQUcsRUFBRSxDQUFDOztFQUVYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3BDLElBQUksQ0FBQyxHQUFHLEVBQUU7TUFDTixDQUFDLEdBQUcsRUFBRSxDQUFDOztFQUVYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRVosR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzFCLElBQUksS0FBSyxHQUFHM0IsWUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekMsSUFBSSxLQUFLLEdBQUdBLFlBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFDeEIsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztFQUN4QixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDOztFQUUvQixJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUU7SUFDaEIsT0FBTyxDQUFDLENBQUM7R0FDVixNQUFNLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztHQUNoQixNQUFNO0lBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0dBQzFCO0NBQ0Y7Ozs7Ozs7O0FBUU0sU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFO0VBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU1UsS0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUN6RDs7Ozs7Ozs7O0FBU00sU0FBU00sYUFBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4RDs7Ozs7Ozs7O0FBU00sU0FBU3JCLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNwUTs7Ozs7O0FBTU0sSUFBSXNCLEtBQUcsR0FBR0wsVUFBUSxDQUFDOzs7Ozs7QUFNbkIsSUFBSUks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QztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQlcsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQlQsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQndCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQjNCLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCNEIsYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtFQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsVUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2pEOzs7Ozs7Ozs7QUFTTSxTQUFTQyxpQkFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEM7Ozs7Ozs7O0FBUU0sU0FBU0MsUUFBTSxDQUFDLENBQUMsRUFBRTtFQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2pEOzs7Ozs7OztBQVFNLFNBQVNDLGVBQWEsQ0FBQyxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RDOzs7Ozs7Ozs7QUFTTSxTQUFTQyxRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUV4QyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7SUFDWCxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDMUI7O0VBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsS0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlEOzs7Ozs7Ozs7OztBQVdELFNBQWdCQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQyxPQUFPLEdBQUcsQ0FBQztDQUNaO0FBQ0QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQkMsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsUUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7RUFDakMsS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLENBQUM7Ozs7RUFJckIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDbkIsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDOztFQUVYLEdBQUc7SUFDRCxFQUFFLEdBQUdyQixNQUFlLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLEVBQUUsR0FBR0EsTUFBZSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0dBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTs7RUFFbEIsR0FBRztJQUNELEVBQUUsR0FBR0EsTUFBZSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixFQUFFLEdBQUdBLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztHQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7O0VBRWxCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDeEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCc0IsZUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsZUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRWQsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7RUFFbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU0MsTUFBSSxDQUFDLEdBQUcsRUFBRTtFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTdEMsS0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3ZFOzs7Ozs7Ozs7QUFTTSxTQUFTTSxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekU7Ozs7Ozs7OztBQVNNLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxH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RyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCcUIsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNsQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNsQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxD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RyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU3RCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEQsSUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztFQUVqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0VBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7RUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVU0sU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7OztFQUcvQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQyxJQUFJLEtBQUssQ0FBQzs7RUFFVixJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUU7O0lBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQzs7SUFFaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7O0lBRXBCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0dBQ2hDLE1BQU07O0lBRUwsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBRyxDQUFDLEdBQUM7SUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFHLENBQUMsR0FBQztJQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDcEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7R0FDaEQ7O0VBRUQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7O0FBWUQsU0FBZ0IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN0QyxJQUFJLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7RUFDdEMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztFQUNmLENBQUMsSUFBSSxTQUFTLENBQUM7RUFDZixDQUFDLElBQUksU0FBUyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU1EsS0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3ZFOzs7Ozs7Ozs7QUFTTSxJQUFJaEIsT0FBSyxHQUFHNkQsT0FBVSxDQUFDOzs7Ozs7Ozs7Ozs7QUFZdkIsSUFBSXZELFlBQVUsR0FBR3dELFlBQWUsQ0FBQzs7Ozs7Ozs7OztBQVVqQyxJQUFJMUQsTUFBSSxHQUFHMkQsTUFBUyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBYXJCLElBQUl4RCxLQUFHLEdBQUd5RCxLQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBV25CLElBQUk5QyxLQUFHLEdBQUcrQyxLQUFRLENBQUM7Ozs7OztBQU1uQixJQUFJMUMsS0FBRyxHQUFHYixVQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBV25CLElBQUlFLE9BQUssR0FBR3NELE9BQVUsQ0FBQzs7Ozs7Ozs7OztBQVV2QixJQUFJbEIsS0FBRyxHQUFHbUIsS0FBUSxDQUFDOzs7Ozs7Ozs7Ozs7QUFZbkIsSUFBSWpCLE1BQUksR0FBR2tCLE1BQVMsQ0FBQzs7Ozs7Ozs7QUFRckIsSUFBSXpCLFFBQU0sR0FBRzBCLFFBQVcsQ0FBQzs7Ozs7O0FBTXpCLElBQUlYLEtBQUcsR0FBR2YsUUFBTSxDQUFDOzs7Ozs7Ozs7QUFTakIsSUFBSUMsZUFBYSxHQUFHMEIsZUFBa0IsQ0FBQzs7Ozs7O0FBTXZDLElBQUlYLFFBQU0sR0FBR2YsZUFBYSxDQUFDOzs7Ozs7Ozs7O0FBVTNCLElBQUlHLFdBQVMsR0FBR3dCLFdBQWMsQ0FBQzs7Ozs7Ozs7O0FBUy9CLElBQUlqRCxhQUFXLEdBQUdrRCxhQUFnQixDQUFDOzs7Ozs7Ozs7QUFTbkMsSUFBSXZFLFFBQU0sR0FBR3dFLFFBQVcsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWFoQyxJQUFXLFVBQVUsR0FBRyxZQUFZO0VBQ2xDLElBQUksT0FBTyxHQUFHQyxRQUFXLEVBQUUsQ0FBQztFQUM1QixJQUFJLFNBQVMsR0FBR0MsWUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDekMsSUFBSSxTQUFTLEdBQUdBLFlBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLE9BQU8sVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixJQUFJM0IsS0FBRyxHQUFHNEIsR0FBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFekIsSUFBSTVCLEtBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRTtNQUNuQjZCLEtBQVUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ2xDLElBQUlDLEdBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLElBQUVELEtBQVUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFDO01BQ3BFRSxTQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ2pDLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNwQyxPQUFPLEdBQUcsQ0FBQztLQUNaLE1BQU0sSUFBSS9CLEtBQUcsR0FBRyxRQUFRLEVBQUU7TUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNYLE9BQU8sR0FBRyxDQUFDO0tBQ1osTUFBTTtNQUNMNkIsS0FBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRzdCLEtBQUcsQ0FBQztNQUNqQixPQUFPRCxXQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQzVCO0dBQ0YsQ0FBQztDQUNILEVBQUUsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWFKLElBQVcsTUFBTSxHQUFHLFlBQVk7RUFDOUIsSUFBSSxLQUFLLEdBQUc1QyxRQUFNLEVBQUUsQ0FBQztFQUNyQixJQUFJLEtBQUssR0FBR0EsUUFBTSxFQUFFLENBQUM7RUFDckIsT0FBTyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ25DLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsT0FBTyxHQUFHLENBQUM7R0FDWixDQUFDO0NBQ0gsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7QUFZSixJQUFXLE9BQU8sR0FBRyxZQUFZO0VBQy9CLElBQUksSUFBSSxHQUFHNkUsUUFBVyxFQUFFLENBQUM7RUFDekIsT0FBTyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixPQUFPakMsV0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7R0FDNUMsQ0FBQztDQUNILEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5bUJILFNBQWdCNUMsUUFBTSxHQUFHO0VBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUlKLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRXBDLElBQUlBLFVBQW1CLElBQUksWUFBWSxFQUFFO0lBQ3ZDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDWDs7RUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1YsT0FBTyxFQUFFLENBQUM7Q0FDWDs7Ozs7Ozs7O0FBU00sU0FBU0MsT0FBSyxDQUFDLENBQUMsRUFBRTtFQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJRCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxD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LENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVTSxTQUFTdEQsaUJBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVNLFNBQVNiLGNBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVNLFNBQVNvRSxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTs7RUFFL0IsSUFBSSxLQUFLLEdBQUdDLFFBQVcsRUFBRSxDQUFDO0VBQzFCQyxXQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMzQixJQUFJLENBQUMsR0FBRyxJQUFJckYsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQ3NGLGNBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzFCSix5QkFBdUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3ZDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVTSxTQUFTN0UsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNDLFVBQVEsQ0FBQyxHQUFHLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRCxTQUFnQkUsS0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxJQUFJLE9BQU8sR0FBRytFLE1BQVMsQ0FBQzs7Ozs7Ozs7QUFReEIsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVNLElBQUksT0FBTyxHQUFHQSxNQUFTLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxnQkFBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxF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RUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoRHlELFNBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0J4RCxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7RUFDbkMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDM0MsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaER5RCxTQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUMxQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCeEQsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDM0MsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hEeUQsU0FBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDMUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM1QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7O0VBRWxELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBR3hGLE9BQWdCLEVBQUU7SUFDcEMsT0FBT0UsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztHQUNyQjs7RUFFRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEYsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0JjLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JSLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3ZHLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7OztBQU1NLElBQUlhLEtBQUcsR0FBR2IsVUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVcxQixTQUFnQkUsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVTSxJQUFJb0MsS0FBRyxHQUFHMkMsS0FBUSxDQUFDOzs7Ozs7Ozs7Ozs7QUFZMUIsU0FBZ0J6QyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJRixLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVN4QyxRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM3QixJQUFJLEtBQUssR0FBR29DLGVBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUN0QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVU0sU0FBU2dELFdBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sSUFBSWpELFFBQU0sR0FBR2tELFFBQVcsQ0FBQzs7Ozs7O0FBTXpCLElBQUluQyxLQUFHLEdBQUdmLFFBQU0sQ0FBQzs7Ozs7Ozs7O0FBU2pCLElBQUlDLGVBQWEsR0FBR2tELGVBQWtCLENBQUM7Ozs7OztBQU12QyxJQUFJbkMsUUFBTSxHQUFHZixlQUFhLENBQUM7Ozs7Ozs7Ozs7QUFVM0IsU0FBU0csV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDaEMsSUFBSSxTQUFTLEdBQUdILGVBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFakMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO0lBQ2pCLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUMxQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQzFCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNwRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxJQUFJLFNBQVMsQ0FBQztJQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxTQUFTLENBQUM7SUFDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0dBQzFDOztFQUVELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBUzVCLEtBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDckIsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ2hJOzs7Ozs7Ozs7QUFTTSxTQUFTTSxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3STs7Ozs7Ozs7O0FBU00sU0FBU3JCLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENB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QUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQndCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCM0IsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLE9BQU8sR0FBRyxD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QUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0J6QyxRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztFQUVuQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDaEIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2xCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN0QyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNxRixPQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMxQixJQUFJ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SUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUV0QixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDdEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFDO1NBQzFCOzs7UUFHRCxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM3QyxPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUM3Qzs7SUFFRCxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs7SUFFN0QsT0FBTyxTQUFTLENBQUM7Q0FDcEI7OztBQUdELFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUU7SUFDbEQsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDOztJQUVaLElBQUksU0FBUyxNQUFNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUN2RCxLQUFLLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFH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QUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUcxRSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUNoRCxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs7SUFFckQsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUs7UUFDYixDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs7O0lBR2xCLE9BQU8sQ0FBQyxJ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QUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hFOzs7QUFHRCxTQUFTQSxRQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUNwQixPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDekM7OztBQUdELFNBQVMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFaEMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUUsT0FBTyxJQUFJLEdBQUM7O0lBRXhDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztJQUNuRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUs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SUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxQkEsSUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMzQkEsSUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQzs7SUFFM0IsS0FBSyxzQkFBVyx1Q0FBUSxFQUFFO1FBQXJCQSxJQUFNOztRQUNQQSxJQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEJBLElBQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLGtCQUFXLDBCQUFDLEVBQUU7WUFBZEEsSUFBTTs7WUFDUEEsSUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNkQSxJQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVkQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztZQUV2Q0EsSUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FB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QU0sQ0FBQyxVQUFVLENBQUMsSUFBRSxXQUFTOztRQUUzRCxJQUFJLFVBQVUsSUFBRSxVQUFVLEdBQUcsVUFBVSxHQUFDO1FBQ3hDLElBQUksYUFBYSxJQUFFLFVBQVUsR0FBRyxhQUFhLEdBQUM7O1FBRTlDLGFBQWEsR0FBRyxRQUFRLENBQUNBLEdBQUMsQ0FBQyxDQUFDOzs7OztRQUs1QixVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsVUFBVSxDQUFDOzs7O1FBSXJGLFVBQVUsR0FBRyxVQUFVLElBQUksVUFBVSxDQUFDOzs7Ozs7OztRQVExQyxJQUFRLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLElBQUksVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3RCOzs7Ozs7Ozs7Ozs7UUFZRGpCLElBQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDM0VBLElBQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7Ozs7UUFJL0VBLElBQU0sV0FBVyxHQUFHLFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksR0FBRyxRQUFRLENBQUM7OztRQUdyRUEsSUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQzs7UUFFNUQsSUFBVSxhQUFhLEdBQUcsWUFBWSxHQUFHLHFCQUFxQixJQUFJLFVBQVUsSUFB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QUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQzFDO0tBQ0o7O0lBRUQsT0FBTyxjQUFjLENBQUMsTUFBTSxXQUFFLENBQUMsRUFBRSxTQUFHLENBQUMsQ0FBQyxXQUFRLENBQUMsQ0FBQztDQUNuRDs7OztBQzNFRCxJQUFhLHdCQUF3QixHQUFHO0lBQ3BDLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLElBQUksRUFBRSxHQUFHO0lBQ1QsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUs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LFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ2pDOztJQUVELGlCQUFpQixJQUFJLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsR0FBQyxJQUFJO0lBQzdHLGtCQUFrQixHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLENBQUMsR0FBQyxHQUFHO0lBQzdHLGtCQUFrQixHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLENBQUMsR0FBQyxHQUFHO0lBQzdHLGdCQUFnQixLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsR0FBQyxLQUFLO0lBQzdHLGlCQUFpQixJQUFJLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsR0FBQyxJQUFJO0lBQzdHLGtCQUFrQixHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLENB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QUFDLENBQUMsR0FBQztJQUM3RSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQztJQUM3RSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQztJQUM3RSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQzs7SUFFN0UsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0NBQzdEOztBQUVELFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRTtJQUN4QixPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUs7UUFDekIsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDaEQ7O0FBRUQsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDaEMsSUFBSSxRQUFRLEVBQUU7UUFDVixPQUFPLElBQUksR0FBRyxXQUFXLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQzNDOztJQUVELE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksV0FBVyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUNyRDs7QUFFRCxTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQzlCLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQzs7SUFFZCxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7UUFDVixHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsV0FBVyxJQUFJLENBQUMsQ0FBQztLQUNsQyxNQUFNO1FBQ0gsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDN0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUM7O1FBRTdCLElBQUksR0FBRyxHQUFHLFVBQVUsRUFBRTtZQUNsQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QixNQUFNO1lBQ0gsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNSLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO0tBQ0o7O0lBRUQsSUFBSSxHQUFHLElBQUksbUJBQW1CLElBQUksR0FBRyxHQUFHLENBQUMsbUJBQW1CLEVBQUU7UUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0tBQzlEOztJQUVELEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7O0lBRWhCLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbEMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2pDOztBQUVELFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDdkMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDbkQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDbkQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDbkQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDbkQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQztDQUNuQzs7QUFFRCxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQzs7SUFFN0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztJQUNsRixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztJQUNsRixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztJQUNsRixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztJQUNsRixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztJQUNsRixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDckM7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxJQUFJLFFBQVE7UUFDUixHQUFHLElBQUksTUFBTSxHQUFHLENBQUM7UUFDakIsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDO1FBQ25CLEdBQUcsSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUd0RSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDO0NBQ3BGOztBQUVELFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSTtBQUMxRyxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUc7QUFDMUcsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxLQUFLO0FBQzFHLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSTtBQUMxRyxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUc7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRTtBQUMxRyxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUc7QUFDMUcsU0FBUyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFOzs7O0FBSTFHLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDMUIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUNaLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ25CLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7Q0FDbEM7O0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDL0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNmLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQy9COztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDekIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUNaLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ25CLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDNUI7O0FBRUQsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDN0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUVaLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRTtRQUNaLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDYixJQUFJLGdCQUFnQjtZQUNoQixFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDYixFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDYixFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O1FBRXRCLElBQUksQ0FBQyxHQUFHLGdCQUFnQixHQUFHLEdBQUcsSUFBRSxRQUFNOztRQUV0QyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDOztRQUVmLElBQUksZ0JBQWdCLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtnQkFDWCxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ1Y7U0FDSixNQUFNLElBQUksZ0JBQWdCLEtBQUssQ0FBQyxFQUFFO1lBQy9CLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxNQUFNLElBQUksRUFBRTtnQkFDdEIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksS0FBSyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ1gsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDWjthQUNKO1NBQ0osTUFBTSxJQUFJLGdCQUFnQixLQUFLLENBQUMsRUFBRTtZQUMvQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxNQUFNLElBQUksRUFBRTtnQkFDOUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxLQUFLLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRTtvQkFDNUMsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDWjthQUNKO1NBQ0osTUFBTSxJQUFJLGdCQUFnQixLQUFLLENBQUMsRUFBRTtZQUMvQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLE1BQU0sSUFBSSxFQUFFO2dCQUN0RSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksS0FBSyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRTtvQkFDOUIsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDWjthQUNKO1NBQ0o7O1FBRUQsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ1osQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUNYLGdCQUFnQixHQUFHLENBQUMsQ0FBQzs7U0FFeEIsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUU7WUFDbkIsQ0FBQyxJQUFJLE9BQU8sQ0FBQztZQUNiLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUMxQjs7UUFFRCxHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixDQUFDLElBQUksZ0JBQWdCLENBQUM7S0FDekI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZDs7QUFFRCxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUV0QixJQUFJLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRTtZQUMxQixJQUFJLElBQUksRUFBRTtnQkFDTixJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUU7b0JBQ1osR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUNsQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ2xCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDVCxTQUFTO2lCQUNaLE1BQU07b0JBQ0gsQ0FBQyxHQUFHLElBQUksR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO29CQUMvQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2lCQUNmO2FBQ0osTUFBTTtnQkFDSCxJQUFJLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3RDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDbEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUNsQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQ3JCLE1BQU07b0JBQ0gsSUFBSSxHQUFHLENBQUMsQ0FBQztpQkFDWjtnQkFDRCxTQUFTO2FBQ1o7U0FDSixNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNmOztRQUVELElBQUksQ0FBQyxHQUFHLElBQUksRUFBRTtZQUNWLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsQixNQUFNO1lBQ0gsSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFO2dCQUNYLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO2FBQ2hDLE1BQU07Z0JBQ0gsSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFO29CQUNiLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO2lCQUNoQyxNQUFNO29CQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUM5QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7aUJBQ3ZDO2dCQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQzthQUN2QztZQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ2hDO0tBQ0o7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkOzs7QUM3bUJEbk4sSUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDOzs7O0FBSWpCLFNBQVMsY0FBYyxDQUFDLEdBQUcsVUFBVSxNQUFNLHFCQUFxQixHQUFHLFlBQVk7SUFDM0UsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsR0FBRyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDMUM7Q0FDSjs7QUFFRCxTQUFTLGFBQWEsQ0FBQyxHQUFHLFVBQVUsTUFBTSxxQkFBcUIsR0FBRyxZQUFZO0lBQzFFLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLE9BQXFELEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUE5RTtRQUFJO1FBQVE7UUFBTztRQUFRO1FBQU07UUFBSywwQkFBMEM7UUFDdkYsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDUixFQUFFO1lBQ0YsTUFBTSxFQUFFLElBQUksVUFBVSxDQUFDO2dCQUNuQixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNO2dCQUN6QixNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNO2FBQzlCLEVBQUUsTUFBTSxDQUFDO1lBQ1YsT0FBTyxFQUFFLFFBQUMsS0FBSyxVQUFFLE1BQU0sUUFBRSxJQUFJLE9BQUUsR0FBRyxXQUFFLE9BQU8sQ0FBQztTQUMvQyxDQUFDLENBQUM7S0FDTjtDQUNKOztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQUcsVUFBVSxLQUFLLFVBQVUsR0FBRyxZQUFZO0lBQzFELElBQUksR0FBRyxLQUFLLENBQUMsSUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBQztTQUN0QyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUM7U0FDOUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFDO1NBQzlDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBQztTQUMvQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUM7U0FDOUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFDO1NBQzdDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBQztDQUN4RDs7QUFFRCx3QkFBeUIsSUFBSSwrQ0FBK0M7SUFDeEUsT0FBTyxJQUFJb04sR0FBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDNUQ7O0FBRU1wTixJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQzs7Ozs7Ozs7OztBQ25DdkMsSUFBTSxnQkFBZ0IsR0FLbEIseUJBQVcsQ0FBQyxRQUFRLFFBQVk7OztJQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUN4QixJQUFJLE9BQU8sY0FBYyxLQUFLLFdBQVcsRUFBRTtRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDekMsSUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxlQUFNO1lBQy9CTyxNQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QkEsTUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BCLENBQUM7S0FDTDtFQUNKOztBQUVMLDJCQUFJLDhCQUFVOzs7SUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbkIsSUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pDLE1BQU07WUFDUCxVQUFjLGFBQUk7Z0JBQ1ZBLE1BQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN4QkEsTUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3BCLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDVDtLQUNKO0NBQ0osQ0FDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEJELElBQU0sS0FBSyxHQVdQLGNBQVcsQ0FBQyxNQUFNLEdBQU8sTUFBTSxHQUFPLEtBQUssT0FBVztJQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM5QixPQUFXLENBQUMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUMsSUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ2hFOzs7Ozs7Ozs7O0FBVUwsZ0JBQUksc0JBQUssSUFBSSxNQUFVLElBQUksS0FBUyxRQUFRLFNBQWEsV0FBVyxnQkFBb0I7Ozs7Ozs7SUFLaEZQLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLElBQVEsUUFBUSxFQUFFO1FBQ2QsSUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUM7S0FDakM7SUFDREEsSUFBTSxPQUFPLG9CQUF3QixFQUFFLENBQUM7SUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDeEIsSUFBSSxFQUFFO1FBQ04sTUFBSSxJQUFJO1FBQ0osV0FBVyxFQUFFLENBQUMsQ0FBQyxRQUFRO1FBQzNCLGFBQUksV0FBVztRQUNYLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSztRQUN2QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7S0FDakMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNaLE9BQU87UUFDUCxNQUFVLGNBQUs7WUFDWCxJQUFRLFFBQVEsRUFBRTs7Z0JBRVYsT0FBT08sTUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUM3QjtZQUNEQSxNQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDeEIsSUFBSSxFQUFFO2dCQUNOLElBQVEsRUFBRSxVQUFVO2dCQUNwQixhQUFJLFdBQVc7Z0JBQ1gsV0FBVyxFQUFFQSxNQUFJLENBQUMsS0FBSzthQUMxQixDQUFDLENBQUM7U0FDTjtLQUNKLENBQUM7RUFDTDs7QUFFTCxnQkFBSSw0QkFBUSxPQUFPLE1BQVU7SUFDckJQLElBQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJO1FBQ3JCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDOztJQUVyQixJQUFRLENBQUMsRUFBRSxFQUFFO1FBQ0wsT0FBTztLQUNWOztJQUVELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDckQsT0FBTztLQUNWOztJQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7Ozs7UUFJMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLElBQVEsTUFBTSxFQUFFO1lBQ1osTUFBVSxFQUFFLENBQUM7U0FDWjtLQUNKLE1BQU07Ozs7Ozs7UUFPUCxJQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzFCO0VBQ0o7O0FBRUwsZ0JBQUksOEJBQVU7OztJQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtRQUN4QixPQUFPO0tBQ1Y7SUFDTCxJQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RDLElBQVUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7O0lBSXRCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMxQjtJQUNMLElBQVEsQ0FBQyxJQUFJLEVBQUU7O1FBRVAsT0FBTztLQUNWOztJQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUU7OztRQUdoQyxJQUFVLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixJQUFRLFFBQVEsRUFBRTs7WUFFVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2hCLFFBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDckMsTUFBTTtnQkFDUCxRQUFZLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUMxQztTQUNKO0tBQ0osTUFBTTtRQUNIRCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEJDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLGFBQUksR0FBRyxFQUFFLElBQUksRUFBRTtZQUM1QyxTQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLE9BQU9PLE1BQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaENQLElBQU0sT0FBTyxvQkFBd0IsRUFBRSxDQUFDO1lBQ3hDTyxNQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDeEIsSUFBSSxFQUFFO2dCQUNOLElBQVEsRUFBRSxZQUFZO2dCQUNsQixXQUFXLEVBQUVBLE1BQUksQ0FBQyxLQUFLO2dCQUMzQixLQUFTLEVBQUUsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJO2dCQUNsQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7YUFDakMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNmLGFBQUksQ0FBQyxFQUFFO1lBQ1IsU0FBYSxHQUFHLElBQUksQ0FBQztTQUNwQixDQUFDOztRQUVGUixJQUFJc04sVUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQnJOLElBQU0sTUFBTSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQU0sQ0FBQztRQUNqRCxJQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFOztZQUV4QnFOLFVBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNyRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7O1lBRXBDck4sSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsSUFBVSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0ZxTixVQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMzQyxNQUFNOztZQUVILElBQUksQ0FBQyxJQUFJLEtBQUssZ0NBQTRCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQzNEOztRQUVMLElBQVEsQ0FBQyxTQUFTLElBQUlBLFVBQVEsSUFBSUEsVUFBUSxDQUFDLE1BQU0sRUFBRTs7WUFFL0MsSUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsR0FBR0EsVUFBUSxDQUFDLE1BQU0sQ0FBQztTQUM5QztLQUNKO0VBQ0o7O0FBRUwsZ0JBQUksNEJBQVM7SUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQ25FLENBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3pLRCxTQUFTLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRTtJQUM5QyxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQzs7SUFFeEIsSUFBSSxHQUFHLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRztRQUN0QixPQUFPLE1BQU0sV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLFNBQVMsS0FBSyxPQUFPLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztRQUM1QyxVQUFVLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUM7UUFDdkMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDO1FBQ3pDLFVBQVUsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQztRQUMxQyxNQUFNLFFBQVEsT0FBTyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUM7UUFDekMsUUFBUSxNQUFNLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDO1FBQ25DLFNBQVMsS0FBSyxPQUFPLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztRQUNwQyxTQUFTLElBQUksS0FBSztLQUNyQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixPQUFPLEdBQUcsQ0FBQztDQUNkOzs7Ozs7Ozs7OztBQVdELFNBQVMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztJQUUxQixDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztJQUU3QixJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN4QyxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFekQsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUQ7Ozs7Ozs7Ozs7O0FBV0QsU0FBUyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ3hELE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQzs7SUFFN0QsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztDQUMzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0REQsSUFBTSxZQUFZLEdBS2QscUJBQVcsQ0FBQyxFQUFFLEdBQU8sRUFBRSxHQUFPO0lBQzlCLElBQVEsQ0FBQyxFQUFFLEVBQUU7O0tBRVIsTUFBTSxJQUFJLEVBQUUsRUFBRTtRQUNmLElBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzFDLE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEUsTUFBTTtRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hEO0VBQ0o7Ozs7Ozs7O0FBUUwsdUJBQUksc0NBQWEsRUFBRSxVQUFjO0lBQzdCLElBQVEsQ0FBQyxHQUFHLEdBQUcsRUFBRSxZQUFZLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLE9BQVcsSUFBSSxDQUFDO0VBQ2Y7Ozs7Ozs7O0FBUUwsdUJBQUksc0NBQWEsRUFBRSxVQUFjO0lBQzdCLElBQVEsQ0FBQyxHQUFHLEdBQUcsRUFBRSxZQUFZLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLE9BQVcsSUFBSSxDQUFDO0VBQ2Y7Ozs7Ozs7O0FBUUwsdUJBQUksMEJBQU8sR0FBRyxxQkFBeUI7SUFDL0JyTixJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRztRQUNmLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCRCxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUM7O0lBRWIsSUFBSSxHQUFHLFlBQVksTUFBTSxFQUFFO1FBQzNCLEdBQU8sR0FBRyxHQUFHLENBQUM7UUFDZCxHQUFPLEdBQUcsR0FBRyxDQUFDOztLQUViLE1BQU0sSUFBSSxHQUFHLFlBQVksWUFBWSxFQUFFO1FBQ3BDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1FBRWxCLElBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUUsT0FBTyxJQUFJLEdBQUM7O0tBRWpDLE1BQU07UUFDSCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEIsSUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNqRCxNQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDM0M7U0FDSjtRQUNMLE9BQVcsSUFBSSxDQUFDO0tBQ2Y7O0lBRUQsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNaLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7S0FFM0MsTUFBTTtRQUNILEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN0Qzs7SUFFTCxPQUFXLElBQUksQ0FBQztFQUNmOzs7Ozs7Ozs7O0FBVUwsdUJBQUksc0NBQWdCO0lBQ1osT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQzNGOzs7Ozs7O0FBT0wsdUJBQUksNENBQW1CLEVBQU0sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUU7Ozs7Ozs7QUFPL0MsdUJBQUksNENBQW1CLEVBQU0sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUU7Ozs7Ozs7QUFPL0MsdUJBQUksNENBQXVCLEVBQUUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRTs7Ozs7OztBQU9sRix1QkFBSSw0Q0FBdUIsRUFBRSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFFOzs7Ozs7O0FBT2xGLHVCQUFJLGtDQUFrQixFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRTs7Ozs7OztBQU85Qyx1QkFBSSxvQ0FBbUIsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUU7Ozs7Ozs7QUFPL0MsdUJBQUksa0NBQWtCLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFFOzs7Ozs7O0FBTzlDLHVCQUFJLG9DQUFtQixFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRTs7Ozs7Ozs7Ozs7QUFXL0MsdUJBQUksOEJBQVU7SUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7RUFDbkQ7Ozs7Ozs7Ozs7O0FBV0wsdUJBQUksZ0NBQVc7SUFDUCwyQkFBdUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUUsV0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRSxRQUFJO0VBQ3pFOzs7Ozs7O0FBT0wsdUJBQUksOEJBQVU7SUFDVixPQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkQsYUFBTyw0QkFBUSxLQUFLLDBCQUE4QjtJQUNsRCxJQUFRLENBQUMsS0FBSyxJQUFJLEtBQUssWUFBWSxZQUFZLElBQUUsT0FBTyxLQUFLLEdBQUM7SUFDMUQsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNsQyxDQUNKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOU1ELElBQU0sTUFBTSxHQUlSLGVBQVcsQ0FBQyxHQUFHLE1BQVUsR0FBRyxNQUFVO0lBQ3RDLElBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM5QixNQUFVLElBQUksS0FBSywrQkFBNEIsR0FBRyxVQUFLLEdBQUcsUUFBSSxDQUFDO0tBQzlEO0lBQ0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ2hCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7S0FDaEY7RUFDSjs7Ozs7Ozs7Ozs7QUFXTCxpQkFBSSwwQkFBTztJQUNQLE9BQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzFEOzs7Ozs7Ozs7O0FBVUwsaUJBQUksOEJBQVU7SUFDVixPQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0I7Ozs7Ozs7Ozs7QUFVTCxpQkFBSSxnQ0FBVztJQUNYLHFCQUFxQixJQUFJLENBQUMsSUFBRyxXQUFLLElBQUksQ0FBQyxJQUFHLFFBQUk7RUFDN0M7Ozs7Ozs7Ozs7O0FBV0wsaUJBQUksOEJBQVMsTUFBbUIsRUFBRTt1Q0FBZixRQUFZOztJQUN2QkMsSUFBTSxtQ0FBbUMsR0FBRyxRQUFRLENBQUM7SUFDekQsSUFBVSxXQUFXLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxtQ0FBbUM7UUFDdEUsV0FBZSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVyRSxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO1FBQzlFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztFQUNuRTs7Ozs7Ozs7Ozs7Ozs7O0FBZUQsT0FBTyw0QkFBUSxLQUFLLGNBQWtCO0lBQ2xDLElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRTtRQUM3QixPQUFXLEtBQUssQ0FBQztLQUNoQjtJQUNMLElBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ3hFLE9BQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pEO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7UUFDMUUsT0FBVyxJQUFJLE1BQU07O1lBRWpCLE1BQVUsQ0FBQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBTyxHQUFHLENBQUM7WUFDNUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDcEIsQ0FBQztLQUNMO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxS0FBcUssQ0FBQyxDQUFDO0NBQzFMLENBQ0o7Ozs7Ozs7O0FDbEhEQSxJQUFNLHNCQUFzQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQzs7Ozs7QUFLckQsU0FBUyx1QkFBdUIsQ0FBQyxRQUFRLFVBQVU7SUFDL0MsT0FBTyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3RFOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxVQUFVO0lBQzFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztDQUM1Qjs7QUFFTSxTQUFTLGdCQUFnQixDQUFDLEdBQUcsVUFBVTtJQUMxQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO0NBQ2hHOztBQUVNLFNBQVMscUJBQXFCLENBQUMsUUFBUSxVQUFVLEdBQUcsVUFBVTtJQUNqRSxPQUFPLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNsRDs7QUFFTSxTQUFTLGdCQUFnQixDQUFDLENBQUMsVUFBVTtJQUN4QyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsQ0FBQyxVQUFVO0lBQ3hDQSxJQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUN6QixPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN2RTs7QUFFTSxTQUFTLHFCQUFxQixDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVU7SUFDeEQsT0FBTyxDQUFDLEdBQUcsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzRDs7Ozs7Ozs7Ozs7QUFXTSxTQUFTLGFBQWEsQ0FBQyxHQUFHLFVBQVU7SUFDdkMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUM1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JELElBQU0sa0JBQWtCLEdBS3BCLDJCQUFXLENBQUMsQ0FBQyxNQUFVLENBQUMsTUFBVSxDQUFhLEVBQUU7eUJBQWQsT0FBVzs7SUFDMUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNaLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDWixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2Y7Ozs7Ozs7Ozs7OztBQVlMLG1CQUFXLGtDQUFXLFVBQVUsVUFBYyxRQUFvQixFQUFFOzJDQUFkLE9BQVc7O0lBQzdELElBQVUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7O0lBRTlDLE9BQVcsSUFBSSxrQkFBa0I7WUFDckIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ2hDLHFCQUF5QixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN4RDs7Ozs7Ozs7OztBQVVMLDZCQUFJLGdDQUFXO0lBQ1gsT0FBVyxJQUFJLE1BQU07WUFDVCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDOzs7Ozs7Ozs7O0FBVUwsNkJBQUksb0NBQWE7SUFDYixPQUFXLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hEOzs7Ozs7Ozs7O0FBVUwsNkJBQUksNEVBQWlDOztJQUU3QixPQUFPLENBQUMsR0FBRyxzQkFBc0IsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0UsQ0FFSjs7OztBQ3hJRCxJQUFhLGVBQWUsR0FNeEIsd0JBQVcsQ0FBQyxDQUFDLE1BQVUsQ0FBQyxNQUFVLENBQUMsTUFBVTtJQUM3Q1MsUUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFCQSxRQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQ0EsUUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsSUFBSSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDdkM7O0FBRUwsMEJBQUksMEJBQU8sRUFBRSxlQUFtQjtJQUM1QixPQUFXLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ2hFOzs7QUFHTCwwQkFBSSxvQkFBSSxJQUFJLGFBQWlCLE1BQU0sT0FBVztJQUN0Q1QsSUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakRBLElBQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuRCxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3ZDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUUsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QixPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEYsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7U0FDN0IsT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzFDOztBQUVMLDBCQUFJLHNDQUFhLEtBQUssa0JBQXNCO0lBQ3BDQSxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsT0FBVyxJQUFJa0QsYUFBSztRQUNaLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNO1FBQ3pDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztDQUNsRCxDQUNKOztBQUVELElBQWEsZUFBZSxHQUt4Qix3QkFBVyxDQUFDLElBQUksTUFBVSxTQUFTLGVBQW1CO0lBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQy9CLElBQVEsQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hFLENBQ0o7O0FBRUQsSUFBYSxnQkFBZ0IsR0FPekIseUJBQVcsQ0FBQyxXQUFXLE1BQVUsSUFBSSxNQUFVLENBQUMsTUFBVSxDQUFDLE1BQVUsQ0FBQyxNQUFVO0lBQzVFekMsUUFBTSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3BEOztBQUVMLDJCQUFJLDBCQUFPLEVBQUUsZ0JBQW9CO0lBQzdCLE9BQVcsSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7RUFDOUc7O0FBRUwsMkJBQUksOEJBQVMsT0FBTyxNQUFVO0lBQzFCQSxRQUFVLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxJQUFVLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDbkQsSUFBUSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDNUIsT0FBTyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDekcsTUFBTTtRQUNILE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO0tBQzlIO0VBQ0o7O0FBRUwsMkJBQUksZ0NBQVUsTUFBTSxnQkFBb0I7SUFDcEMsSUFBUSxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7O1FBRS9CLE9BQVcsS0FBSyxDQUFDO0tBQ2hCO0lBQ0RULElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDOztJQUUxRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLEtBQUssQ0FBQztRQUMzQixNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXO1lBQ2pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztZQUN4RCxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDO0VBQ3JFOztBQUVMLDJCQUFJLDhCQUFTLGFBQWEsTUFBVTtJQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksYUFBYSxFQUFFOztRQUVuQyxPQUFPLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN4SDs7SUFFTCxJQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsSUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLElBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixPQUFPO1FBQ0gsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDdEQsQ0FBQztFQUNMOztBQUVMLDJCQUFJLGtDQUFXLEdBQUcsZ0JBQW9CO0lBQ2xDLElBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFFLE9BQU8sSUFBSSxHQUFDO0lBQzFDLElBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFFLE9BQU8sS0FBSyxHQUFDOztJQUUzQyxJQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsSUFBRSxPQUFPLElBQUksR0FBQztJQUN4RCxJQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsSUFBRSxPQUFPLEtBQUssR0FBQzs7SUFFckQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztJQUNwRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFFLE9BQU8sS0FBSyxHQUFDOztJQUVyRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFFLE9BQU8sSUFBSSxHQUFDO0lBQ3hELE9BQVcsS0FBSyxDQUFDO0VBQ2hCOztBQUVMLDJCQUFJLDhCQUFVO0lBQ04sT0FBTyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUc7O0FBRUwsMkJBQUksOEJBQVMsSUFBSSxNQUFVO0lBQ25CLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdHOztBQUVMLDJCQUFJLDhDQUFrQjtJQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNEOztBQUVMLDJCQUFJLHNDQUFjO0lBQ1YsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUN6RDs7QUFFTCwyQkFBSSxnQ0FBVztJQUNQLFNBQVUsSUFBSSxDQUFDLHNCQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxVQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHO0VBQ3hFOztBQUVMLDJCQUFJLHNDQUFhLEtBQUssa0JBQXNCO0lBQ3hDLE9BQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDNUYsQ0FDSjs7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVU7SUFDakUsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNWLElBQUksSUFBSSxHQUFHLENBQUMsSUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBQztJQUNuQ0EsSUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQixPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3REOztBQUVELFNBQVMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCRCxJQUFJLE9BQU8sR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0lBQ3ZCLEtBQUtBLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3hEO0lBQ0QsT0FBTyxPQUFPLENBQUM7Q0FDbEI7O0FBRUQsUUFBUSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUNuS3ZELElBQU0sT0FBTyxHQVN4QixnQkFBVyxDQUFDLEdBQUcsTUFBVSxJQUFJLFNBQWEsUUFBUSxzQkFBMEI7SUFDeEUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDZixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBRSxNQUFNLElBQUksVUFBVSxDQUFDLDBCQUEwQixDQUFDLEdBQUM7SUFDakYsSUFBSSxRQUFRLElBQUksUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssV0FBVyxJQUFFLE9BQU8sUUFBUTtnQkFDMUUsUUFBUTtLQUNmLEdBQUM7SUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDMUJDLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQzs7Ozs7SUFLckMsS0FBS0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O1FBRTFCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFekQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWhFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFekQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7O0lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENB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QUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxJQUFJLE1BQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM5RTs7Q0FFRCxFQUFFLEdBQUcsQ0FBQyxDQUFDOztDQUVQLFFBQVEsU0FBUztFQUNoQixLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0VBQ25ELEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUM7RUFDbEQsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7O0VBRXpDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDO0VBQ2pGLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDO0VBQ2pGLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDVDs7Q0FFRCxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQzs7Q0FFakIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7Q0FDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxJQUFJLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUM7Q0FDakcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7Q0FDaEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxJQUFJLE1BQU0sS0FBSyxFQUFFLENBQUMsS0FBSyxVQUFVLENBQUM7Q0FDbkcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7O0NBRWhCLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztDQUNoQjs7QUFFRCxHQUFHLFFBQWEsS0FBSyxXQUFXLEVBQUU7RUFDaEMsY0FBYyxHQUFHLGtCQUFpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckRwQyxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7RUFDcEM7SUFDRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU07SUFDZCxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDWixDQUFDLEdBQUcsQ0FBQztJQUNMLENBQUMsQ0FBQzs7RUFFSixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7R0FDZCxDQUFDO0tBQ0MsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7TUFDekIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQztNQUNsQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO01BQ25DLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQzs7SUFFdEMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNkLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxVQUFVLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0NBRXBGLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUVsRixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ1AsRUFBRSxDQUFDLENBQUM7R0FDTDs7RUFFRCxRQUFRLENBQUM7RUFDVCxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0VBQ2xELEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUM7RUFDakQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7VUFDaEMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFD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QUMsWUFBWSxHQUFFO0VBQ3JDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFJO0VBQ3ZCLElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDVCxJQUFJLENBQUMsR0FBRyxFQUFDO0VBQ1QsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU07RUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUM5QixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFDO0lBQ3RCLElBQUksS0FBSyxHQUFHLEVBQUM7SUFDYixJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7TUFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU07S0FDcEI7SUFDRCxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUM7O0lBRWxDLElBQUksU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU07SUFDMUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtNQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtRQUN6QixHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFDO09BQzNDO01BQ0QsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDO01BQ3RCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQztNQUN0QixHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBQztNQUMzQixHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBQztNQUMzQixDQUFDLElBQUksR0FBRTtNQUNQLENBQUMsSUFBSSxHQUFFO0tBQ1I7SUFDRCxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7TUFDZCxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUM7S0FDL0I7R0FDRjtDQUNGOztBQUVELFNBQVMsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7RUFDL0IsSUFBSSxJQUFJLEdBQUcsT0FBTyxNQUFLO0VBQ3ZCLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtJQUNyQixHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQztHQUMvQixNQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtJQUM3QixHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQztHQUNoQyxNQUFNLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtJQUM1QixJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO01BQ25CLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFDO0tBQy9CLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO01BQ3BCLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFDO0tBQ2hDLE1BQU07TUFDTCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQztLQUMvQjtHQUNGO0NBQ0Y7Ozs7O0FDOUtjLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO0lBQ3RFLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxRQUFRLElBQUUsU0FBTzs7SUFFckNwUSxJQUFNLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDOztJQUU5QixNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztDQUMxRDs7QUFFRCxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTs7SUFFOUMsT0FBTyxLQUFLLEdBQUcsSUFBSSxFQUFFO1FBQ2pCLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUU7WUFDcEJBLElBQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQzNCQSxJQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUN2QkEsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QkEsSUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwQ0EsSUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNFQSxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUks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QUFFLEVBQUU7UUFDbEMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVaLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNQLElBQUksU0FBUyxFQUFFO2dCQUNYLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDakMsTUFBTTtnQkFDSCxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEU7U0FDSjtRQUNELEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ1Y7O0lBRUQsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFbEIsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lB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QUFDO1NBQ2Y7O1FBRUQsSUFBSSxLQUFLLEVBQUU7WUFDUCxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZFLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDaEI7O1FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUM7O1FBRTNDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxD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QUFDO0lBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7SUFHOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakc7O0FBRUQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxJQUFJLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7O0lBRWxELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEUsSUFBSSxZQUFZLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFaEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN2Rjs7SUFFRCxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxD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QyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxRDtRQUNELElBQUksQ0FBQ0EsdUJBQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4RTtRQUNELElBQUksQ0FBQ0EsdUJBQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUNELElBQUksQ0FBQ0EsdUJBQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxRTtRQUNELElBQUksQ0FBQ0EsdUJBQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RTtRQUNELElBQUks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QyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdE0sR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN08sR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9QLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ILEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckgsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEwsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hOLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdLLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUosR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3haLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0TCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hILEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNySyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUosR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JMLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hKLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0UsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0YsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9GLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUQsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkosR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuUixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcFIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUs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QUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7O0lBRzVDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtTQUNsQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1NBQ3JDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3pDQSxJQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNqQzs7O0lBR0RBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN6QkEsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3pCQSxJQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyQkEsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckIsS0FBS0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDMUJDLElBQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3JFQSxJQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzlDO0NBQ0o7O0FBRUQsU0FBUyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDdEVELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0lBRXBCQSxJQUFJLENBQUMsQ0FBQzs7O0lBR04sSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUMvQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQy9DLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxH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QUcsR0FBRyxDQUFDOzs7Ozs7OztRQVF2QixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDVkEsSUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdkcsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM3Qzs7UUFFRCxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDN0QsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQzdELFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7UUFHOUNBLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7OztRQUloQkQsSUFBSSxDQUFDLHVCQUF1QixVQUFVLENBQUMsRUFBRTtZQUNyQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxD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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LWdsLWRldi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYXNzZXJ0L25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdW5pdGJlemllci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3BvaW50LWdlb21ldHJ5L2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9kZWVwX2VxdWFsLmpzIiwiLi4vc3JjL3V0aWwvdXRpbC5qcyIsIi4uL3NyYy91dGlsL2Jyb3dzZXIuanMiLCIuLi9zcmMvdXRpbC9jb25maWcuanMiLCIuLi9zcmMvdXRpbC93ZWJwX3N1cHBvcnRlZC5qcyIsIi4uL3NyYy91dGlsL3NrdV90b2tlbi5qcyIsIi4uL3NyYy91dGlsL21hcGJveC5qcyIsIi4uL3NyYy91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZS5qcyIsIi4uL3NyYy91dGlsL2FqYXguanMiLCIuLi9zcmMvdXRpbC9ldmVudGVkLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXJyb3IvdmFsaWRhdGlvbl9lcnJvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbnN0YW50cy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvZXh0ZW5kLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC91bmJ1bmRsZV9qc29ubGludC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vcGFyc2luZ19lcnJvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vc2NvcGUuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Nzc2NvbG9ycGFyc2VyL2Nzc2NvbG9ycGFyc2VyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9jb2xvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvY29sbGF0b3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3ZhbHVlcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbGl0ZXJhbC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vcnVudGltZV9lcnJvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvYXNzZXJ0aW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9mb3JtYXQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2ltYWdlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9jb2VyY2lvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZXZhbHVhdGlvbl9jb250ZXh0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9jb21wb3VuZF9leHByZXNzaW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9jb2xsYXRvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vaXNfY29uc3RhbnQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL3Zhci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vcGFyc2luZ19jb250ZXh0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9zdG9wcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvc3RlcC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL2NvbG9yX3NwYWNlcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2NvYWxlc2NlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9sZXQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2F0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9tYXRjaC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY2FzZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29tcGFyaXNvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbnVtYmVyX2Zvcm1hdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbGVuZ3RoLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvcmVzdWx0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9nZXRfdHlwZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2Z1bmN0aW9uL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX29iamVjdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2FycmF5LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbnVtYmVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZnVuY3Rpb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9leHByZXNzaW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfYm9vbGVhbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZW51bS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZmlsdGVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfcHJvcGVydHkuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfc291cmNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbGlnaHQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9zdHJpbmcuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9mb3JtYXR0ZWQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZ2x5cGhzX3VybC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlX3N0eWxlLm1pbi5qcyIsIi4uL3NyYy9zdHlsZS92YWxpZGF0ZV9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9ncmlkLWluZGV4L2dyaWQtaW5kZXguanMiLCIuLi9zcmMvdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyLmpzIiwiLi4vc3JjL3N0eWxlL3pvb21faGlzdG9yeS5qcyIsIi4uL3NyYy91dGlsL2lzX2NoYXJfaW5fdW5pY29kZV9ibG9jay5qcyIsIi4uL3NyYy91dGlsL3NjcmlwdF9kZXRlY3Rpb24uanMiLCIuLi9zcmMvc291cmNlL3J0bF90ZXh0X3BsdWdpbi5qcyIsIi4uL3NyYy9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMuanMiLCIuLi9zcmMvc3R5bGUvcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy91dGlsL3N0cnVjdF9hcnJheS5qcyIsIi4uL3NyYy9kYXRhL2FycmF5X3R5cGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2NpcmNsZV9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvc2VnbWVudC5qcyIsIi4uL3NyYy9zaGFkZXJzL2VuY29kZV9hdHRyaWJ1dGUuanMiLCIuLi9zcmMvZGF0YS9mZWF0dXJlX3Bvc2l0aW9uX21hcC5qcyIsIi4uL3NyYy9yZW5kZXIvdW5pZm9ybV9iaW5kaW5nLmpzIiwiLi4vc3JjL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uLmpzIiwiLi4vc3JjL2RhdGEvZXh0ZW50LmpzIiwiLi4vc3JjL2RhdGEvbG9hZF9nZW9tZXRyeS5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9jaXJjbGVfYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzLmpzIiwiLi4vc3JjL3N0eWxlL3F1ZXJ5X3V0aWxzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vY29tbW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0Mi5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL21hdDJkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0My5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL21hdDQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS92ZWMzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vdmVjNC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3F1YXQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9xdWF0Mi5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3ZlYzIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2hlYXRtYXBfYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvaW1hZ2UuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3V0aWwvY29sb3JfcmFtcC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2F0dHJpYnV0ZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvZWFyY3V0L3NyYy9lYXJjdXQuanMiLCIuLi9ub2RlX21vZHVsZXMvcXVpY2tzZWxlY3QvaW5kZXguanMiLCIuLi9zcmMvdXRpbC9jbGFzc2lmeV9yaW5ncy5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcy5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2J1Y2tldC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2V4dHJ1c2lvbl9hdHRyaWJ1dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGVsYXllci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3ZlY3Rvci10aWxlL2xpYi92ZWN0b3J0aWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvaW5kZXguanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvbGluZV9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2xpbmVfYnVja2V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L3N5bWJvbF9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL3N5bWJvbC90cmFuc2Zvcm1fdGV4dC5qcyIsIi4uL3NyYy9zeW1ib2wvbWVyZ2VsaW5lcy5qcyIsIi4uL3NyYy91dGlsL3ZlcnRpY2FsaXplX3B1bmN0dWF0aW9uLmpzIiwiLi4vc3JjL3N5bWJvbC9vbmVfZW0uanMiLCIuLi9zcmMvc3ltYm9sL3NoYXBpbmcuanMiLCIuLi9zcmMvc3ltYm9sL2FuY2hvci5qcyIsIi4uL3NyYy9zeW1ib2wvc3ltYm9sX3NpemUuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldC5qcyIsIi4uL3NyYy91dGlsL3Jlc29sdmVfdG9rZW5zLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9mb3JtYXRfc2VjdGlvbl9vdmVycmlkZS5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvYmFja2dyb3VuZF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2JhY2tncm91bmRfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvcmFzdGVyX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvcmFzdGVyX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9zdHlsZS9jcmVhdGVfc3R5bGVfbGF5ZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcG90cGFjay9pbmRleC5tanMiLCIuLi9zcmMvcmVuZGVyL2ltYWdlX2F0bGFzLmpzIiwiLi4vc3JjL3JlbmRlci90ZXh0dXJlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcGJmL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlL3BhcnNlX2dseXBoX3BiZi5qcyIsIi4uL3NyYy91dGlsL3Rocm90dGxlZF9pbnZva2VyLmpzIiwiLi4vc3JjL3V0aWwvYWN0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC93aG9vdHMtanMvaW5kZXgubWpzIiwiLi4vc3JjL2dlby9sbmdfbGF0X2JvdW5kcy5qcyIsIi4uL3NyYy9nZW8vbG5nX2xhdC5qcyIsIi4uL3NyYy9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZS5qcyIsIi4uL3NyYy9zb3VyY2UvdGlsZV9pZC5qcyIsIi4uL3NyYy9kYXRhL2RlbV9kYXRhLmpzIiwiLi4vc3JjL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvZGljdGlvbmFyeV9jb2Rlci5qcyIsIi4uL3NyYy91dGlsL3ZlY3RvcnRpbGVfdG9fZ2VvanNvbi5qcyIsIi4uL3NyYy9zb3VyY2Uvc291cmNlX3N0YXRlLmpzIiwiLi4vc3JjL2RhdGEvZmVhdHVyZV9pbmRleC5qcyIsIi4uL3NyYy9zb3VyY2UvdGlsZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvcmVmX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3ltYm9sL2NoZWNrX21heF9hbmdsZS5qcyIsIi4uL3NyYy9zeW1ib2wvZ2V0X2FuY2hvcnMuanMiLCIuLi9zcmMvc3ltYm9sL2NsaXBfbGluZS5qcyIsIi4uL3NyYy9zeW1ib2wvcXVhZHMuanMiLCIuLi9zcmMvc3ltYm9sL2NvbGxpc2lvbl9mZWF0dXJlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3RpbnlxdWV1ZS9pbmRleC5qcyIsIi4uL3NyYy91dGlsL2ZpbmRfcG9sZV9vZl9pbmFjY2Vzc2liaWxpdHkuanMiLCIuLi9ub2RlX21vZHVsZXMvbXVybXVyaGFzaC1qcy9tdXJtdXJoYXNoM19nYy5qcyIsIi4uL25vZGVfbW9kdWxlcy9tdXJtdXJoYXNoLWpzL211cm11cmhhc2gyX2djLmpzIiwiLi4vbm9kZV9tb2R1bGVzL211cm11cmhhc2gtanMvaW5kZXguanMiLCIuLi9zcmMvc3ltYm9sL3N5bWJvbF9sYXlvdXQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9ncm91cF9ieV9sYXlvdXQuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXJfaW5kZXguanMiLCIuLi9zcmMvcmVuZGVyL2dseXBoX2F0bGFzLmpzIiwiLi4vc3JjL3NvdXJjZS93b3JrZXJfdGlsZS5qcyIsIi4uL3NyYy91dGlsL3BlcmZvcm1hbmNlLmpzIiwiLi4vc3JjL3NvdXJjZS92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9yYXN0ZXJfZGVtX3RpbGVfd29ya2VyX3NvdXJjZS5qcyIsIi4uL25vZGVfbW9kdWxlcy93Z3M4NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L2dlb2pzb24tYXJlYS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L2dlb2pzb24tcmV3aW5kL2luZGV4LmpzIiwiLi4vc3JjL3NvdXJjZS9nZW9qc29uX3dyYXBwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvdnQtcGJmL25vZGVfbW9kdWxlcy9wYmYvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvdnQtcGJmL2xpYi9nZW9qc29uX3dyYXBwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvdnQtcGJmL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvc29ydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9rZGJ1c2gvc3JjL3JhbmdlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvd2l0aGluLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvc3VwZXJjbHVzdGVyL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3NpbXBsaWZ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL2ZlYXR1cmUuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvY29udmVydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9jbGlwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3dyYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3RpbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvaW5kZXguanMiLCIuLi9zcmMvc291cmNlL2dlb2pzb25fd29ya2VyX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2Uvd29ya2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvbWFwYm94LWdsLXN1cHBvcnRlZC9pbmRleC5qcyIsIi4uL3NyYy91dGlsL2RvbS5qcyIsIi4uL3NyYy9zdHlsZS9sb2FkX3Nwcml0ZS5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9pbWFnZS5qcyIsIi4uL3NyYy9yZW5kZXIvaW1hZ2VfbWFuYWdlci5qcyIsIi4uL3NyYy9zdHlsZS9sb2FkX2dseXBoX3JhbmdlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdGlueS1zZGYvaW5kZXguanMiLCIuLi9zcmMvcmVuZGVyL2dseXBoX21hbmFnZXIuanMiLCIuLi9zcmMvc3R5bGUvbGlnaHQuanMiLCIuLi9zcmMvcmVuZGVyL2xpbmVfYXRsYXMuanMiLCIuLi9zcmMvdXRpbC9kaXNwYXRjaGVyLmpzIiwiLi4vc3JjL3NvdXJjZS9sb2FkX3RpbGVqc29uLmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlX2JvdW5kcy5qcyIsIi4uL3NyYy9zb3VyY2UvdmVjdG9yX3RpbGVfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9yYXN0ZXJfdGlsZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3Jhc3Rlcl9kZW1fdGlsZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL2dlb2pzb25fc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9pbWFnZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3ZpZGVvX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvY2FudmFzX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2Uvc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9xdWVyeV9mZWF0dXJlcy5qcyIsIi4uL3NyYy9zb3VyY2UvdGlsZV9jYWNoZS5qcyIsIi4uL3NyYy9nbC9pbmRleF9idWZmZXIuanMiLCIuLi9zcmMvZ2wvdmVydGV4X2J1ZmZlci5qcyIsIi4uL3NyYy9nbC92YWx1ZS5qcyIsIi4uL3NyYy9nbC9mcmFtZWJ1ZmZlci5qcyIsIi4uL3NyYy9nbC9kZXB0aF9tb2RlLmpzIiwiLi4vc3JjL2dsL3N0ZW5jaWxfbW9kZS5qcyIsIi4uL3NyYy9nbC9jb2xvcl9tb2RlLmpzIiwiLi4vc3JjL2dsL2N1bGxfZmFjZV9tb2RlLmpzIiwiLi4vc3JjL2dsL2NvbnRleHQuanMiLCIuLi9zcmMvc291cmNlL3NvdXJjZV9jYWNoZS5qcyIsIi4uL3NyYy91dGlsL2Jyb3dzZXIvd2ViX3dvcmtlci5qcyIsIi4uL3NyYy91dGlsL3dvcmtlcl9wb29sLmpzIiwiLi4vc3JjL3V0aWwvZ2xvYmFsX3dvcmtlcl9wb29sLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZGVyZWYuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9kaWZmLmpzIiwiLi4vc3JjL3N5bWJvbC9ncmlkX2luZGV4LmpzIiwiLi4vc3JjL3N5bWJvbC9wcm9qZWN0aW9uLmpzIiwiLi4vc3JjL3N5bWJvbC9jb2xsaXNpb25faW5kZXguanMiLCIuLi9zcmMvc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzLmpzIiwiLi4vc3JjL3N5bWJvbC9wbGFjZW1lbnQuanMiLCIuLi9zcmMvc3R5bGUvcGF1c2VhYmxlX3BsYWNlbWVudC5qcyIsIi4uL3NyYy9zeW1ib2wvY3Jvc3NfdGlsZV9zeW1ib2xfaW5kZXguanMiLCIuLi9zcmMvc3R5bGUvc3R5bGUuanMiLCIuLi9zcmMvZGF0YS9wb3NfYXR0cmlidXRlcy5qcyIsIi4uL3NyYy9zaGFkZXJzL3NoYWRlcnMuanMiLCIuLi9zcmMvcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QuanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vcGF0dGVybi5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9maWxsX2V4dHJ1c2lvbl9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2ZpbGxfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9jaXJjbGVfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9jb2xsaXNpb25fcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9kZWJ1Z19wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2NsaXBwaW5nX21hc2tfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9oZWF0bWFwX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vaGlsbHNoYWRlX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vbGluZV9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL3Jhc3Rlcl9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL3N5bWJvbF9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2JhY2tncm91bmRfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9wcm9ncmFtX3VuaWZvcm1zLmpzIiwiLi4vc3JjL3JlbmRlci90aWxlX21hc2suanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfY29sbGlzaW9uX2RlYnVnLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X3N5bWJvbC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19jaXJjbGUuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfaGVhdG1hcC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19saW5lLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2ZpbGwuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfZmlsbF9leHRydXNpb24uanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfaGlsbHNoYWRlLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X3Jhc3Rlci5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19iYWNrZ3JvdW5kLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2RlYnVnLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2N1c3RvbS5qcyIsIi4uL3NyYy9yZW5kZXIvcGFpbnRlci5qcyIsIi4uL3NyYy91dGlsL3RpbGVfY292ZXIuanMiLCIuLi9zcmMvZ2VvL3RyYW5zZm9ybS5qcyIsIi4uL3NyYy91dGlsL3Rocm90dGxlLmpzIiwiLi4vc3JjL3VpL2hhc2guanMiLCIuLi9zcmMvdWkvZXZlbnRzLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvc2Nyb2xsX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci9ib3hfem9vbS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2RyYWdfcm90YXRlLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvZHJhZ19wYW4uanMiLCIuLi9zcmMvdWkvaGFuZGxlci9rZXlib2FyZC5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2RibGNsaWNrX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci90b3VjaF96b29tX3JvdGF0ZS5qcyIsIi4uL3NyYy91aS9iaW5kX2hhbmRsZXJzLmpzIiwiLi4vc3JjL3VpL2NhbWVyYS5qcyIsIi4uL3NyYy91aS9jb250cm9sL2F0dHJpYnV0aW9uX2NvbnRyb2wuanMiLCIuLi9zcmMvdWkvY29udHJvbC9sb2dvX2NvbnRyb2wuanMiLCIuLi9zcmMvdXRpbC90YXNrX3F1ZXVlLmpzIiwiLi4vc3JjL3VpL21hcC5qcyIsIi4uL3NyYy91aS9jb250cm9sL25hdmlnYXRpb25fY29udHJvbC5qcyIsIi4uL3NyYy91dGlsL3NtYXJ0X3dyYXAuanMiLCIuLi9zcmMvdWkvYW5jaG9yLmpzIiwiLi4vc3JjL3VpL21hcmtlci5qcyIsIi4uL3NyYy91aS9jb250cm9sL2dlb2xvY2F0ZV9jb250cm9sLmpzIiwiLi4vc3JjL3VpL2NvbnRyb2wvc2NhbGVfY29udHJvbC5qcyIsIi4uL3NyYy91aS9jb250cm9sL2Z1bGxzY3JlZW5fY29udHJvbC5qcyIsIi4uL3NyYy91aS9wb3B1cC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uL3JvbGx1cC9tYXBib3hnbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBmb3JtYXRSZWdFeHAgPSAvJVtzZGolXS9nO1xuZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbihmKSB7XG4gIGlmICghaXNTdHJpbmcoZikpIHtcbiAgICB2YXIgb2JqZWN0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goaW5zcGVjdChhcmd1bWVudHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpO1xuICB9XG5cbiAgdmFyIGkgPSAxO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbih4KSB7XG4gICAgaWYgKHggPT09ICclJScpIHJldHVybiAnJSc7XG4gICAgaWYgKGkgPj0gbGVuKSByZXR1cm4geDtcbiAgICBzd2l0Y2ggKHgpIHtcbiAgICAgIGNhc2UgJyVzJzogcmV0dXJuIFN0cmluZyhhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWQnOiByZXR1cm4gTnVtYmVyKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclaic6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3NbaSsrXSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICBmb3IgKHZhciB4ID0gYXJnc1tpXTsgaSA8IGxlbjsgeCA9IGFyZ3NbKytpXSkge1xuICAgIGlmIChpc051bGwoeCkgfHwgIWlzT2JqZWN0KHgpKSB7XG4gICAgICBzdHIgKz0gJyAnICsgeDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9ICcgJyArIGluc3BlY3QoeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8vIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4vLyBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuLy8gSWYgLS1uby1kZXByZWNhdGlvbiBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbmV4cG9ydHMuZGVwcmVjYXRlID0gZnVuY3Rpb24oZm4sIG1zZykge1xuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb2JqZWN0QXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBjb21wYXJlIGFuZCBpc0J1ZmZlciB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciB4ID0gYS5sZW5ndGg7XG4gIHZhciB5ID0gYi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV07XG4gICAgICB5ID0gYltpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgaWYgKGdsb2JhbC5CdWZmZXIgJiYgdHlwZW9mIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcihiKTtcbiAgfVxuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKTtcbn1cblxuLy8gYmFzZWQgb24gbm9kZSBhc3NlcnQsIG9yaWdpbmFsIG5vdGljZTpcbi8vIE5COiBUaGUgVVJMIHRvIHRoZSBDb21tb25KUyBzcGVjIGlzIGtlcHQganVzdCBmb3IgdHJhZGl0aW9uLlxuLy8gICAgIG5vZGUtYXNzZXJ0IGhhcyBldm9sdmVkIGEgbG90IHNpbmNlIHRoZW4sIGJvdGggaW4gQVBJIGFuZCBiZWhhdmlvci5cblxuLy8gaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvVW5pdF9UZXN0aW5nLzEuMFxuLy9cbi8vIFRISVMgSVMgTk9UIFRFU1RFRCBOT1IgTElLRUxZIFRPIFdPUksgT1VUU0lERSBWOCFcbi8vXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbC8nKTtcbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9vKCkge30ubmFtZSA9PT0gJ2Zvbyc7XG59KCkpO1xuZnVuY3Rpb24gcFRvU3RyaW5nIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNWaWV3KGFycmJ1Zikge1xuICBpZiAoaXNCdWZmZXIoYXJyYnVmKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYnVmKTtcbiAgfVxuICBpZiAoIWFycmJ1Zikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYXJyYnVmIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXJyYnVmLmJ1ZmZlciAmJiBhcnJidWYuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4vLyAxLiBUaGUgYXNzZXJ0IG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB0aHJvd1xuLy8gQXNzZXJ0aW9uRXJyb3IncyB3aGVuIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4gVGhlXG4vLyBhc3NlcnQgbW9kdWxlIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIGludGVyZmFjZS5cblxudmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7XG5cbi8vIDIuIFRoZSBBc3NlcnRpb25FcnJvciBpcyBkZWZpbmVkIGluIGFzc2VydC5cbi8vIG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiBtZXNzYWdlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCB9KVxuXG52YXIgcmVnZXggPSAvXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9ibG9iL2FkZWVlZWM4YmZjYzYwNjhiMTg3ZDdkOWZiM2Q1YmIxZDNhMzA4OTkvaW1wbGVtZW50YXRpb24uanNcbmZ1bmN0aW9uIGdldE5hbWUoZnVuYykge1xuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmMubmFtZTtcbiAgfVxuICB2YXIgc3RyID0gZnVuYy50b1N0cmluZygpO1xuICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXgpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG59XG5hc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7XG4gIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICB0aGlzLm9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvcjtcbiAgaWYgKG9wdGlvbnMubWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gZ2V0TmFtZShzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICAgICAgdmFyIGlkeCA9IG91dC5pbmRleE9mKCdcXG4nICsgZm5fbmFtZSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGxvY2F0ZWQgdGhlIGZ1bmN0aW9uIGZyYW1lXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gc3RyaXAgb3V0IGV2ZXJ5dGhpbmcgYmVmb3JlIGl0IChhbmQgaXRzIGxpbmUpXG4gICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXFxuJywgaWR4ICsgMSk7XG4gICAgICAgIG91dCA9IG91dC5zdWJzdHJpbmcobmV4dF9saW5lICsgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sgPSBvdXQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxudXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gdHJ1bmNhdGUocywgbikge1xuICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgbiA/IHMgOiBzLnNsaWNlKDAsIG4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzO1xuICB9XG59XG5mdW5jdGlvbiBpbnNwZWN0KHNvbWV0aGluZykge1xuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzIHx8ICF1dGlsLmlzRnVuY3Rpb24oc29tZXRoaW5nKSkge1xuICAgIHJldHVybiB1dGlsLmluc3BlY3Qoc29tZXRoaW5nKTtcbiAgfVxuICB2YXIgcmF3bmFtZSA9IGdldE5hbWUoc29tZXRoaW5nKTtcbiAgdmFyIG5hbWUgPSByYXduYW1lID8gJzogJyArIHJhd25hbWUgOiAnJztcbiAgcmV0dXJuICdbRnVuY3Rpb24nICsgIG5hbWUgKyAnXSc7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHtcbiAgcmV0dXJuIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5hY3R1YWwpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmV4cGVjdGVkKSwgMTI4KTtcbn1cblxuLy8gQXQgcHJlc2VudCBvbmx5IHRoZSB0aHJlZSBrZXlzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCBhbmRcbi8vIHVuZGVyc3Rvb2QgYnkgdGhlIHNwZWMuIEltcGxlbWVudGF0aW9ucyBvciBzdWIgbW9kdWxlcyBjYW4gcGFzc1xuLy8gb3RoZXIga2V5cyB0byB0aGUgQXNzZXJ0aW9uRXJyb3IncyBjb25zdHJ1Y3RvciAtIHRoZXkgd2lsbCBiZVxuLy8gaWdub3JlZC5cblxuLy8gMy4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gIEFsbCBhc3NlcnRpb24gbWV0aG9kcyBwcm92aWRlXG4vLyBib3RoIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyB0byB0aGUgYXNzZXJ0aW9uIGVycm9yIGZvclxuLy8gZGlzcGxheSBwdXJwb3Nlcy5cblxuZnVuY3Rpb24gZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvciwgc3RhY2tTdGFydEZ1bmN0aW9uKSB7XG4gIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3Ioe1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0RnVuY3Rpb246IHN0YWNrU3RhcnRGdW5jdGlvblxuICB9KTtcbn1cblxuLy8gRVhURU5TSU9OISBhbGxvd3MgZm9yIHdlbGwgYmVoYXZlZCBlcnJvcnMgZGVmaW5lZCBlbHNld2hlcmUuXG5hc3NlcnQuZmFpbCA9IGZhaWw7XG5cbi8vIDQuIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhZ3VhcmQuXG4vLyBhc3NlcnQub2soZ3VhcmQsIG1lc3NhZ2Vfb3B0KTtcbi8vIFRoaXMgc3RhdGVtZW50IGlzIGVxdWl2YWxlbnQgdG8gYXNzZXJ0LmVxdWFsKHRydWUsICEhZ3VhcmQsXG4vLyBtZXNzYWdlX29wdCk7LiBUbyB0ZXN0IHN0cmljdGx5IGZvciB0aGUgdmFsdWUgdHJ1ZSwgdXNlXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgZ3VhcmQsIG1lc3NhZ2Vfb3B0KTsuXG5cbmZ1bmN0aW9uIG9rKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7XG59XG5hc3NlcnQub2sgPSBvaztcblxuLy8gNS4gVGhlIGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzaGFsbG93LCBjb2VyY2l2ZSBlcXVhbGl0eSB3aXRoXG4vLyA9PS5cbi8vIGFzc2VydC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpO1xufTtcblxuLy8gNi4gVGhlIG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHdoZXRoZXIgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbFxuLy8gd2l0aCAhPSBhc3NlcnQubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbiBub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPScsIGFzc2VydC5ub3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDcuIFRoZSBlcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgYSBkZWVwIGVxdWFsaXR5IHJlbGF0aW9uLlxuLy8gYXNzZXJ0LmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5kZWVwRXF1YWwgPSBmdW5jdGlvbiBkZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcEVxdWFsJywgYXNzZXJ0LmRlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwU3RyaWN0RXF1YWwnLCBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKSB7XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgJiYgaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkgPT09IDA7XG5cbiAgLy8gNy4yLiBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBEYXRlIG9iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0aW1lLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKGFjdHVhbCkgJiYgdXRpbC5pc0RhdGUoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMgSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBSZWdFeHAgb2JqZWN0IHdpdGggdGhlIHNhbWUgc291cmNlIGFuZFxuICAvLyBwcm9wZXJ0aWVzIChgZ2xvYmFsYCwgYG11bHRpbGluZWAsIGBsYXN0SW5kZXhgLCBgaWdub3JlQ2FzZWApLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuc291cmNlID09PSBleHBlY3RlZC5zb3VyY2UgJiZcbiAgICAgICAgICAgYWN0dWFsLmdsb2JhbCA9PT0gZXhwZWN0ZWQuZ2xvYmFsICYmXG4gICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJlxuICAgICAgICAgICBhY3R1YWwubGFzdEluZGV4ID09PSBleHBlY3RlZC5sYXN0SW5kZXggJiZcbiAgICAgICAgICAgYWN0dWFsLmlnbm9yZUNhc2UgPT09IGV4cGVjdGVkLmlnbm9yZUNhc2U7XG5cbiAgLy8gNy40LiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgKGV4cGVjdGVkID09PSBudWxsIHx8IHR5cGVvZiBleHBlY3RlZCAhPT0gJ29iamVjdCcpKSB7XG4gICAgcmV0dXJuIHN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZiB0eXBlZCBhcnJheXMsIHdyYXAgdGhlaXIgdW5kZXJseWluZ1xuICAvLyBBcnJheUJ1ZmZlcnMgaW4gYSBCdWZmZXIgZWFjaCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZVxuICAvLyBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGUgYXJyYXlzIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjaGVja2VkIGJ5XG4gIC8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKGFrYSBwVG9TdHJpbmcpLiBOZXZlciBwZXJmb3JtIGJpbmFyeVxuICAvLyBjb21wYXJpc29ucyBmb3IgRmxvYXQqQXJyYXlzLCB0aG91Z2gsIHNpbmNlIGUuZy4gKzAgPT09IC0wIGJ1dCB0aGVpclxuICAvLyBiaXQgcGF0dGVybnMgYXJlIG5vdCBpZGVudGljYWwuXG4gIH0gZWxzZSBpZiAoaXNWaWV3KGFjdHVhbCkgJiYgaXNWaWV3KGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgIHBUb1N0cmluZyhhY3R1YWwpID09PSBwVG9TdHJpbmcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgIShhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICAgICAgICAgICAgIGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpIHtcbiAgICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhY3R1YWwuYnVmZmVyKSxcbiAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShleHBlY3RlZC5idWZmZXIpKSA9PT0gMDtcblxuICAvLyA3LjUgRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgIT09IGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBtZW1vcyA9IG1lbW9zIHx8IHthY3R1YWw6IFtdLCBleHBlY3RlZDogW119O1xuXG4gICAgdmFyIGFjdHVhbEluZGV4ID0gbWVtb3MuYWN0dWFsLmluZGV4T2YoYWN0dWFsKTtcbiAgICBpZiAoYWN0dWFsSW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoYWN0dWFsSW5kZXggPT09IG1lbW9zLmV4cGVjdGVkLmluZGV4T2YoZXhwZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLmFjdHVhbC5wdXNoKGFjdHVhbCk7XG4gICAgbWVtb3MuZXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG5cbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBvbmUgaXMgYSBwcmltaXRpdmUsIHRoZSBvdGhlciBtdXN0IGJlIHNhbWVcbiAgaWYgKHV0aWwuaXNQcmltaXRpdmUoYSkgfHwgdXRpbC5pc1ByaW1pdGl2ZShiKSlcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgaWYgKHN0cmljdCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBhSXNBcmdzID0gaXNBcmd1bWVudHMoYSk7XG4gIHZhciBiSXNBcmdzID0gaXNBcmd1bWVudHMoYik7XG4gIGlmICgoYUlzQXJncyAmJiAhYklzQXJncykgfHwgKCFhSXNBcmdzICYmIGJJc0FyZ3MpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFJc0FyZ3MpIHtcbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBfZGVlcEVxdWFsKGEsIGIsIHN0cmljdCk7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgdmFyIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT09IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQubm90RGVlcFN0cmljdEVxdWFsID0gbm90RGVlcFN0cmljdEVxdWFsO1xuZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwU3RyaWN0RXF1YWwnLCBub3REZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59XG5cblxuLy8gOS4gVGhlIHN0cmljdCBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc3RyaWN0IGVxdWFsaXR5LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbi8vIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PT0nLCBhc3NlcnQuc3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG4vLyAxMC4gVGhlIHN0cmljdCBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciBzdHJpY3QgaW5lcXVhbGl0eSwgYXNcbi8vIGRldGVybWluZWQgYnkgIT09LiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gbm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElnbm9yZS4gIFRoZSBpbnN0YW5jZW9mIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgYXJyb3cgZnVuY3Rpb25zLlxuICB9XG5cbiAgaWYgKEVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIF90cnlCbG9jayhibG9jaykge1xuICB2YXIgZXJyb3I7XG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIF90aHJvd3Moc2hvdWxkVGhyb3csIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICB2YXIgYWN0dWFsO1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBleHBlY3RlZDtcbiAgICBleHBlY3RlZCA9IG51bGw7XG4gIH1cblxuICBhY3R1YWwgPSBfdHJ5QmxvY2soYmxvY2spO1xuXG4gIG1lc3NhZ2UgPSAoZXhwZWN0ZWQgJiYgZXhwZWN0ZWQubmFtZSA/ICcgKCcgKyBleHBlY3RlZC5uYW1lICsgJykuJyA6ICcuJykgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgPyAnICcgKyBtZXNzYWdlIDogJy4nKTtcblxuICBpZiAoc2hvdWxkVGhyb3cgJiYgIWFjdHVhbCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ01pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgdmFyIHVzZXJQcm92aWRlZE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBpc1Vud2FudGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIHV0aWwuaXNFcnJvcihhY3R1YWwpO1xuICB2YXIgaXNVbmV4cGVjdGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIGFjdHVhbCAmJiAhZXhwZWN0ZWQ7XG5cbiAgaWYgKChpc1Vud2FudGVkRXhjZXB0aW9uICYmXG4gICAgICB1c2VyUHJvdmlkZWRNZXNzYWdlICYmXG4gICAgICBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHxcbiAgICAgIGlzVW5leHBlY3RlZEV4Y2VwdGlvbikge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJlxuICAgICAgIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fCAoIXNob3VsZFRocm93ICYmIGFjdHVhbCkpIHtcbiAgICB0aHJvdyBhY3R1YWw7XG4gIH1cbn1cblxuLy8gMTEuIEV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yOlxuLy8gYXNzZXJ0LnRocm93cyhibG9jaywgRXJyb3Jfb3B0LCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyh0cnVlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuLy8gRVhURU5TSU9OISBUaGlzIGlzIGFubm95aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhpcyBtb2R1bGUuXG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MoZmFsc2UsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKGVycikgeyBpZiAoZXJyKSB0aHJvdyBlcnI7IH07XG5cbi8vIEV4cG9zZSBhIHN0cmljdCBvbmx5IHZhcmlhbnQgb2YgYXNzZXJ0XG5mdW5jdGlvbiBzdHJpY3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09Jywgc3RyaWN0KTtcbn1cbmFzc2VydC5zdHJpY3QgPSBvYmplY3RBc3NpZ24oc3RyaWN0LCBhc3NlcnQsIHtcbiAgZXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgZGVlcEVxdWFsOiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsLFxuICBub3RFcXVhbDogYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLFxuICBub3REZWVwRXF1YWw6IGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWxcbn0pO1xuYXNzZXJ0LnN0cmljdC5zdHJpY3QgPSBhc3NlcnQuc3RyaWN0O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zXG4gKiBhcmUgbWV0OlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUlxuICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1JcbiAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLFxuICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLFxuICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SXG4gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiBQb3J0ZWQgZnJvbSBXZWJraXRcbiAqIGh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Vbml0QmV6aWVyLmhcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVuaXRCZXppZXI7XG5cbmZ1bmN0aW9uIFVuaXRCZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBwb2x5bm9taWFsIGNvZWZmaWNpZW50cywgaW1wbGljaXQgZmlyc3QgYW5kIGxhc3QgY29udHJvbCBwb2ludHMgYXJlICgwLDApIGFuZCAoMSwxKS5cbiAgICB0aGlzLmN4ID0gMy4wICogcDF4O1xuICAgIHRoaXMuYnggPSAzLjAgKiAocDJ4IC0gcDF4KSAtIHRoaXMuY3g7XG4gICAgdGhpcy5heCA9IDEuMCAtIHRoaXMuY3ggLSB0aGlzLmJ4O1xuXG4gICAgdGhpcy5jeSA9IDMuMCAqIHAxeTtcbiAgICB0aGlzLmJ5ID0gMy4wICogKHAyeSAtIHAxeSkgLSB0aGlzLmN5O1xuICAgIHRoaXMuYXkgPSAxLjAgLSB0aGlzLmN5IC0gdGhpcy5ieTtcblxuICAgIHRoaXMucDF4ID0gcDF4O1xuICAgIHRoaXMucDF5ID0gcDJ5O1xuICAgIHRoaXMucDJ4ID0gcDJ4O1xuICAgIHRoaXMucDJ5ID0gcDJ5O1xufVxuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVggPSBmdW5jdGlvbih0KSB7XG4gICAgLy8gYGF4IHReMyArIGJ4IHReMiArIGN4IHQnIGV4cGFuZGVkIHVzaW5nIEhvcm5lcidzIHJ1bGUuXG4gICAgcmV0dXJuICgodGhpcy5heCAqIHQgKyB0aGlzLmJ4KSAqIHQgKyB0aGlzLmN4KSAqIHQ7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVkgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuICgodGhpcy5heSAqIHQgKyB0aGlzLmJ5KSAqIHQgKyB0aGlzLmN5KSAqIHQ7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYID0gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoMy4wICogdGhpcy5heCAqIHQgKyAyLjAgKiB0aGlzLmJ4KSAqIHQgKyB0aGlzLmN4O1xufTtcblxuVW5pdEJlemllci5wcm90b3R5cGUuc29sdmVDdXJ2ZVggPSBmdW5jdGlvbih4LCBlcHNpbG9uKSB7XG4gICAgaWYgKHR5cGVvZiBlcHNpbG9uID09PSAndW5kZWZpbmVkJykgZXBzaWxvbiA9IDFlLTY7XG5cbiAgICB2YXIgdDAsIHQxLCB0MiwgeDIsIGk7XG5cbiAgICAvLyBGaXJzdCB0cnkgYSBmZXcgaXRlcmF0aW9ucyBvZiBOZXd0b24ncyBtZXRob2QgLS0gbm9ybWFsbHkgdmVyeSBmYXN0LlxuICAgIGZvciAodDIgPSB4LCBpID0gMDsgaSA8IDg7IGkrKykge1xuXG4gICAgICAgIHgyID0gdGhpcy5zYW1wbGVDdXJ2ZVgodDIpIC0geDtcbiAgICAgICAgaWYgKE1hdGguYWJzKHgyKSA8IGVwc2lsb24pIHJldHVybiB0MjtcblxuICAgICAgICB2YXIgZDIgPSB0aGlzLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgodDIpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoZDIpIDwgMWUtNikgYnJlYWs7XG5cbiAgICAgICAgdDIgPSB0MiAtIHgyIC8gZDI7XG4gICAgfVxuXG4gICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBiaXNlY3Rpb24gbWV0aG9kIGZvciByZWxpYWJpbGl0eS5cbiAgICB0MCA9IDAuMDtcbiAgICB0MSA9IDEuMDtcbiAgICB0MiA9IHg7XG5cbiAgICBpZiAodDIgPCB0MCkgcmV0dXJuIHQwO1xuICAgIGlmICh0MiA+IHQxKSByZXR1cm4gdDE7XG5cbiAgICB3aGlsZSAodDAgPCB0MSkge1xuXG4gICAgICAgIHgyID0gdGhpcy5zYW1wbGVDdXJ2ZVgodDIpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoeDIgLSB4KSA8IGVwc2lsb24pIHJldHVybiB0MjtcblxuICAgICAgICBpZiAoeCA+IHgyKSB7XG4gICAgICAgICAgICB0MCA9IHQyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdDEgPSB0MjtcbiAgICAgICAgfVxuXG4gICAgICAgIHQyID0gKHQxIC0gdDApICogMC41ICsgdDA7XG4gICAgfVxuXG4gICAgLy8gRmFpbHVyZS5cbiAgICByZXR1cm4gdDI7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zb2x2ZSA9IGZ1bmN0aW9uKHgsIGVwc2lsb24pIHtcbiAgICByZXR1cm4gdGhpcy5zYW1wbGVDdXJ2ZVkodGhpcy5zb2x2ZUN1cnZlWCh4LCBlcHNpbG9uKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIEEgc3RhbmRhbG9uZSBwb2ludCBnZW9tZXRyeSB3aXRoIHVzZWZ1bCBhY2Nlc3NvciwgY29tcGFyaXNvbiwgYW5kXG4gKiBtb2RpZmljYXRpb24gbWV0aG9kcy5cbiAqXG4gKiBAY2xhc3MgUG9pbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IHRoZSB4LWNvb3JkaW5hdGUuIHRoaXMgY291bGQgYmUgbG9uZ2l0dWRlIG9yIHNjcmVlblxuICogcGl4ZWxzLCBvciBhbnkgb3RoZXIgc29ydCBvZiB1bml0LlxuICogQHBhcmFtIHtOdW1iZXJ9IHkgdGhlIHktY29vcmRpbmF0ZS4gdGhpcyBjb3VsZCBiZSBsYXRpdHVkZSBvciBzY3JlZW5cbiAqIHBpeGVscywgb3IgYW55IG90aGVyIHNvcnQgb2YgdW5pdC5cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSBuZXcgUG9pbnQoLTc3LCAzOCk7XG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG59XG5cblBvaW50LnByb3RvdHlwZSA9IHtcblxuICAgIC8qKlxuICAgICAqIENsb25lIHRoaXMgcG9pbnQsIHJldHVybmluZyBhIG5ldyBwb2ludCB0aGF0IGNhbiBiZSBtb2RpZmllZFxuICAgICAqIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBvbGQgb25lLlxuICAgICAqIEByZXR1cm4ge1BvaW50fSB0aGUgY2xvbmVcbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpOyB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyB0byBhbm90aGVyIHBvaW50LFxuICAgICAqIHlpZWxkaW5nIGEgbmV3IHBvaW50LlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIGFkZDogICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHApOyB9LFxuXG4gICAgLyoqXG4gICAgICogU3VidHJhY3QgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIHRvIGZyb20gcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgc3ViOiAgICAgZnVuY3Rpb24ocCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgYnkgcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgbXVsdEJ5UG9pbnQ6ICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdEJ5UG9pbnQocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGUgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIGJ5IHBvaW50LFxuICAgICAqIHlpZWxkaW5nIGEgbmV3IHBvaW50LlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIGRpdkJ5UG9pbnQ6ICAgICBmdW5jdGlvbihwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX2RpdkJ5UG9pbnQocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgYnkgYSBmYWN0b3IsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gayBmYWN0b3JcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgbXVsdDogICAgZnVuY3Rpb24oaykgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0KGspOyB9LFxuXG4gICAgLyoqXG4gICAgICogRGl2aWRlIHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyBieSBhIGZhY3RvcixcbiAgICAgKiB5aWVsZGluZyBhIG5ldyBwb2ludC5cbiAgICAgKiBAcGFyYW0ge1BvaW50fSBrIGZhY3RvclxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICBkaXY6ICAgICBmdW5jdGlvbihrKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX2RpdihrKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSB0aGlzIHBvaW50IGFyb3VuZCB0aGUgMCwgMCBvcmlnaW4gYnkgYW4gYW5nbGUgYSxcbiAgICAgKiBnaXZlbiBpbiByYWRpYW5zXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGEgYW5nbGUgdG8gcm90YXRlIGFyb3VuZCwgaW4gcmFkaWFuc1xuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICByb3RhdGU6ICBmdW5jdGlvbihhKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZShhKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSB0aGlzIHBvaW50IGFyb3VuZCBwIHBvaW50IGJ5IGFuIGFuZ2xlIGEsXG4gICAgICogZ2l2ZW4gaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBhIGFuZ2xlIHRvIHJvdGF0ZSBhcm91bmQsIGluIHJhZGlhbnNcbiAgICAgKiBAcGFyYW0ge1BvaW50fSBwIFBvaW50IHRvIHJvdGF0ZSBhcm91bmRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgcm90YXRlQXJvdW5kOiAgZnVuY3Rpb24oYSxwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZChhLHApOyB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbHkgdGhpcyBwb2ludCBieSBhIDR4MSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0ge0FycmF5PE51bWJlcj59IG0gdHJhbnNmb3JtYXRpb24gbWF0cml4XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIG1hdE11bHQ6IGZ1bmN0aW9uKG0pIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdChtKTsgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGlzIHBvaW50IGJ1dCBhcyBhIHVuaXQgdmVjdG9yIGZyb20gMCwgMCwgbWVhbmluZ1xuICAgICAqIHRoYXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHJlc3VsdGluZyBwb2ludCB0byB0aGUgMCwgMFxuICAgICAqIGNvb3JkaW5hdGUgd2lsbCBiZSBlcXVhbCB0byAxIGFuZCB0aGUgYW5nbGUgZnJvbSB0aGUgcmVzdWx0aW5nXG4gICAgICogcG9pbnQgdG8gdGhlIDAsIDAgY29vcmRpbmF0ZSB3aWxsIGJlIHRoZSBzYW1lIGFzIGJlZm9yZS5cbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gdW5pdCB2ZWN0b3IgcG9pbnRcbiAgICAgKi9cbiAgICB1bml0OiAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fdW5pdCgpOyB9LFxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSBhIHBlcnBlbmRpY3VsYXIgcG9pbnQsIHdoZXJlIHRoZSBuZXcgeSBjb29yZGluYXRlXG4gICAgICogaXMgdGhlIG9sZCB4IGNvb3JkaW5hdGUgYW5kIHRoZSBuZXcgeCBjb29yZGluYXRlIGlzIHRoZSBvbGQgeVxuICAgICAqIGNvb3JkaW5hdGUgbXVsdGlwbGllZCBieSAtMVxuICAgICAqIEByZXR1cm4ge1BvaW50fSBwZXJwZW5kaWN1bGFyIHBvaW50XG4gICAgICovXG4gICAgcGVycDogICAgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZlcnNpb24gb2YgdGhpcyBwb2ludCB3aXRoIHRoZSB4ICYgeSBjb29yZGluYXRlc1xuICAgICAqIHJvdW5kZWQgdG8gaW50ZWdlcnMuXG4gICAgICogQHJldHVybiB7UG9pbnR9IHJvdW5kZWQgcG9pbnRcbiAgICAgKi9cbiAgICByb3VuZDogICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbWFnaXR1ZGUgb2YgdGhpcyBwb2ludDogdGhpcyBpcyB0aGUgRXVjbGlkZWFuXG4gICAgICogZGlzdGFuY2UgZnJvbSB0aGUgMCwgMCBjb29yZGluYXRlIHRvIHRoaXMgcG9pbnQncyB4IGFuZCB5XG4gICAgICogY29vcmRpbmF0ZXMuXG4gICAgICogQHJldHVybiB7TnVtYmVyfSBtYWduaXR1ZGVcbiAgICAgKi9cbiAgICBtYWc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEp1ZGdlIHdoZXRoZXIgdGhpcyBwb2ludCBpcyBlcXVhbCB0byBhbm90aGVyIHBvaW50LCByZXR1cm5pbmdcbiAgICAgKiB0cnVlIG9yIGZhbHNlLlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IG90aGVyIHRoZSBvdGhlciBwb2ludFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhlIHBvaW50cyBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBlcXVhbHM6IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnggPT09IG90aGVyLnggJiZcbiAgICAgICAgICAgICAgIHRoaXMueSA9PT0gb3RoZXIueTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBmcm9tIHRoaXMgcG9pbnQgdG8gYW5vdGhlciBwb2ludFxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICAgICAqL1xuICAgIGRpc3Q6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIocCkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhpcyBwb2ludCB0byBhbm90aGVyIHBvaW50LFxuICAgICAqIHdpdGhvdXQgdGhlIHNxdWFyZSByb290IHN0ZXAuIFVzZWZ1bCBpZiB5b3UncmUgY29tcGFyaW5nXG4gICAgICogcmVsYXRpdmUgZGlzdGFuY2VzLlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICAgICAqL1xuICAgIGRpc3RTcXI6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdmFyIGR4ID0gcC54IC0gdGhpcy54LFxuICAgICAgICAgICAgZHkgPSBwLnkgLSB0aGlzLnk7XG4gICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBhbmdsZSBmcm9tIHRoZSAwLCAwIGNvb3JkaW5hdGUgdG8gdGhpcyBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIGNvb3JkaW5hdGVzLlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAgICAgKi9cbiAgICBhbmdsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKHRoaXMueSwgdGhpcy54KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBhbmdsZSBmcm9tIHRoaXMgcG9pbnQgdG8gYW5vdGhlciBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7UG9pbnR9IGIgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgICAqL1xuICAgIGFuZ2xlVG86IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpcy55IC0gYi55LCB0aGlzLnggLSBiLngpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGFuZ2xlIGJldHdlZW4gdGhpcyBwb2ludCBhbmQgYW5vdGhlciBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7UG9pbnR9IGIgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgICAqL1xuICAgIGFuZ2xlV2l0aDogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAoYi54LCBiLnkpO1xuICAgIH0sXG5cbiAgICAvKlxuICAgICAqIEZpbmQgdGhlIGFuZ2xlIG9mIHRoZSB0d28gdmVjdG9ycywgc29sdmluZyB0aGUgZm9ybXVsYSBmb3JcbiAgICAgKiB0aGUgY3Jvc3MgcHJvZHVjdCBhIHggYiA9IHxhfHxifHNpbijDjsK4KSBmb3Igw47CuC5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0geCB0aGUgeC1jb29yZGluYXRlXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHkgdGhlIHktY29vcmRpbmF0ZVxuICAgICAqIEByZXR1cm4ge051bWJlcn0gdGhlIGFuZ2xlIGluIHJhZGlhbnNcbiAgICAgKi9cbiAgICBhbmdsZVdpdGhTZXA6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoXG4gICAgICAgICAgICB0aGlzLnggKiB5IC0gdGhpcy55ICogeCxcbiAgICAgICAgICAgIHRoaXMueCAqIHggKyB0aGlzLnkgKiB5KTtcbiAgICB9LFxuXG4gICAgX21hdE11bHQ6IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmFyIHggPSBtWzBdICogdGhpcy54ICsgbVsxXSAqIHRoaXMueSxcbiAgICAgICAgICAgIHkgPSBtWzJdICogdGhpcy54ICsgbVszXSAqIHRoaXMueTtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9hZGQ6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54ICs9IHAueDtcbiAgICAgICAgdGhpcy55ICs9IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9zdWI6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54IC09IHAueDtcbiAgICAgICAgdGhpcy55IC09IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9tdWx0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHRoaXMueCAqPSBrO1xuICAgICAgICB0aGlzLnkgKj0gaztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9kaXY6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdGhpcy54IC89IGs7XG4gICAgICAgIHRoaXMueSAvPSBrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX211bHRCeVBvaW50OiBmdW5jdGlvbihwKSB7XG4gICAgICAgIHRoaXMueCAqPSBwLng7XG4gICAgICAgIHRoaXMueSAqPSBwLnk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfZGl2QnlQb2ludDogZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnggLz0gcC54O1xuICAgICAgICB0aGlzLnkgLz0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3VuaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9kaXYodGhpcy5tYWcoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcGVycDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xuICAgICAgICB0aGlzLnkgPSB0aGlzLng7XG4gICAgICAgIHRoaXMueCA9IC15O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3JvdGF0ZTogZnVuY3Rpb24oYW5nbGUpIHtcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIHggPSBjb3MgKiB0aGlzLnggLSBzaW4gKiB0aGlzLnksXG4gICAgICAgICAgICB5ID0gc2luICogdGhpcy54ICsgY29zICogdGhpcy55O1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3JvdGF0ZUFyb3VuZDogZnVuY3Rpb24oYW5nbGUsIHApIHtcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIHggPSBwLnggKyBjb3MgKiAodGhpcy54IC0gcC54KSAtIHNpbiAqICh0aGlzLnkgLSBwLnkpLFxuICAgICAgICAgICAgeSA9IHAueSArIHNpbiAqICh0aGlzLnggLSBwLngpICsgY29zICogKHRoaXMueSAtIHAueSk7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcm91bmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnggPSBNYXRoLnJvdW5kKHRoaXMueCk7XG4gICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQodGhpcy55KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBwb2ludCBmcm9tIGFuIGFycmF5IGlmIG5lY2Vzc2FyeSwgb3RoZXJ3aXNlIGlmIHRoZSBpbnB1dFxuICogaXMgYWxyZWFkeSBhIFBvaW50LCBvciBhbiB1bmtub3duIHR5cGUsIHJldHVybiBpdCB1bmNoYW5nZWRcbiAqIEBwYXJhbSB7QXJyYXk8TnVtYmVyPnxQb2ludHwqfSBhIGFueSBraW5kIG9mIGlucHV0IHZhbHVlXG4gKiBAcmV0dXJuIHtQb2ludH0gY29uc3RydWN0ZWQgcG9pbnQsIG9yIHBhc3NlZC10aHJvdWdoIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqIC8vIHRoaXNcbiAqIHZhciBwb2ludCA9IFBvaW50LmNvbnZlcnQoWzAsIDFdKTtcbiAqIC8vIGlzIGVxdWl2YWxlbnQgdG9cbiAqIHZhciBwb2ludCA9IG5ldyBQb2ludCgwLCAxKTtcbiAqL1xuUG9pbnQuY29udmVydCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBQb2ludCkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChhWzBdLCBhWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGE7XG59O1xuIiwiLy8gQGZsb3dcblxuLyoqXG4gKiBEZWVwbHkgY29tcGFyZXMgdHdvIG9iamVjdCBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWVwRXF1YWwoYTogP21peGVkLCBiOiA/bWl4ZWQpOiBib29sZWFuIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhICE9PSBudWxsICYmIGIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCEodHlwZW9mIGIgPT09ICdvYmplY3QnKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGEpIHtcbiAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYSA9PT0gYjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVlcEVxdWFsO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFVuaXRCZXppZXIgZnJvbSAnQG1hcGJveC91bml0YmV6aWVyJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuL3dpbmRvdyc7XG5cbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuXG4vKipcbiAqIEBtb2R1bGUgdXRpbFxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIEdpdmVuIGEgdmFsdWUgYHRgIHRoYXQgdmFyaWVzIGJldHdlZW4gMCBhbmQgMSwgcmV0dXJuXG4gKiBhbiBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIHRoYXQgZWFzZXMgYmV0d2VlbiAwIGFuZCAxIGluIGEgcGxlYXNpbmdcbiAqIGN1YmljIGluLW91dCBmYXNoaW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlYXNlQ3ViaWNJbk91dCh0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0IDw9IDApIHJldHVybiAwO1xuICAgIGlmICh0ID49IDEpIHJldHVybiAxO1xuICAgIGNvbnN0IHQyID0gdCAqIHQsXG4gICAgICAgIHQzID0gdDIgKiB0O1xuICAgIHJldHVybiA0ICogKHQgPCAwLjUgPyB0MyA6IDMgKiAodCAtIHQyKSArIHQzIC0gMC43NSk7XG59XG5cbi8qKlxuICogR2l2ZW4gZ2l2ZW4gKHgsIHkpLCAoeDEsIHkxKSBjb250cm9sIHBvaW50cyBmb3IgYSBiZXppZXIgY3VydmUsXG4gKiByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGludGVycG9sYXRlcyBhbG9uZyB0aGF0IGN1cnZlLlxuICpcbiAqIEBwYXJhbSBwMXggY29udHJvbCBwb2ludCAxIHggY29vcmRpbmF0ZVxuICogQHBhcmFtIHAxeSBjb250cm9sIHBvaW50IDEgeSBjb29yZGluYXRlXG4gKiBAcGFyYW0gcDJ4IGNvbnRyb2wgcG9pbnQgMiB4IGNvb3JkaW5hdGVcbiAqIEBwYXJhbSBwMnkgY29udHJvbCBwb2ludCAyIHkgY29vcmRpbmF0ZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlemllcihwMXg6IG51bWJlciwgcDF5OiBudW1iZXIsIHAyeDogbnVtYmVyLCBwMnk6IG51bWJlcik6ICh0OiBudW1iZXIpID0+IG51bWJlciB7XG4gICAgY29uc3QgYmV6aWVyID0gbmV3IFVuaXRCZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBiZXppZXIuc29sdmUodCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBBIGRlZmF1bHQgYmV6aWVyLWN1cnZlIHBvd2VyZWQgZWFzaW5nIGZ1bmN0aW9uIHdpdGhcbiAqIGNvbnRyb2wgcG9pbnRzICgwLjI1LCAwLjEpIGFuZCAoMC4yNSwgMSlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgZWFzZSA9IGJlemllcigwLjI1LCAwLjEsIDAuMjUsIDEpO1xuXG4vKipcbiAqIGNvbnN0cmFpbiBuIHRvIHRoZSBnaXZlbiByYW5nZSB2aWEgbWluICsgbWF4XG4gKlxuICogQHBhcmFtIG4gdmFsdWVcbiAqIEBwYXJhbSBtaW4gdGhlIG1pbmltdW0gdmFsdWUgdG8gYmUgcmV0dXJuZWRcbiAqIEBwYXJhbSBtYXggdGhlIG1heGltdW0gdmFsdWUgdG8gYmUgcmV0dXJuZWRcbiAqIEByZXR1cm5zIHRoZSBjbGFtcGVkIHZhbHVlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAobjogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgbikpO1xufVxuXG4vKipcbiAqIGNvbnN0cmFpbiBuIHRvIHRoZSBnaXZlbiByYW5nZSwgZXhjbHVkaW5nIHRoZSBtaW5pbXVtLCB2aWEgbW9kdWxhciBhcml0aG1ldGljXG4gKlxuICogQHBhcmFtIG4gdmFsdWVcbiAqIEBwYXJhbSBtaW4gdGhlIG1pbmltdW0gdmFsdWUgdG8gYmUgcmV0dXJuZWQsIGV4Y2x1c2l2ZVxuICogQHBhcmFtIG1heCB0aGUgbWF4aW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZCwgaW5jbHVzaXZlXG4gKiBAcmV0dXJucyBjb25zdHJhaW5lZCBudW1iZXJcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwKG46IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBkID0gbWF4IC0gbWluO1xuICAgIGNvbnN0IHcgPSAoKG4gLSBtaW4pICUgZCArIGQpICUgZCArIG1pbjtcbiAgICByZXR1cm4gKHcgPT09IG1pbikgPyBtYXggOiB3O1xufVxuXG4vKlxuICogQ2FsbCBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gb24gYW4gYXJyYXkgb2YgYXJndW1lbnRzLFxuICogY2FsbGluZyBgY2FsbGJhY2tgIHdpdGggdGhlIGNvbXBsZXRlZCByZXN1bHRzIG9mIGFsbCBjYWxscy5cbiAqXG4gKiBAcGFyYW0gYXJyYXkgaW5wdXQgdG8gZWFjaCBjYWxsIG9mIHRoZSBhc3luYyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBmbiBhbiBhc3luYyBmdW5jdGlvbiB3aXRoIHNpZ25hdHVyZSAoZGF0YSwgY2FsbGJhY2spXG4gKiBAcGFyYW0gY2FsbGJhY2sgYSBjYWxsYmFjayBydW4gYWZ0ZXIgYWxsIGFzeW5jIHdvcmsgaXMgZG9uZS5cbiAqIGNhbGxlZCB3aXRoIGFuIGFycmF5LCBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIGVhY2ggYXN5bmMgY2FsbC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3luY0FsbDxJdGVtLCBSZXN1bHQ+KFxuICAgIGFycmF5OiBBcnJheTxJdGVtPixcbiAgICBmbjogKGl0ZW06IEl0ZW0sIGZuQ2FsbGJhY2s6IENhbGxiYWNrPFJlc3VsdD4pID0+IHZvaWQsXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrPEFycmF5PFJlc3VsdD4+XG4pIHtcbiAgICBpZiAoIWFycmF5Lmxlbmd0aCkgeyByZXR1cm4gY2FsbGJhY2sobnVsbCwgW10pOyB9XG4gICAgbGV0IHJlbWFpbmluZyA9IGFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IEFycmF5KGFycmF5Lmxlbmd0aCk7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBhcnJheS5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICAgIGZuKGl0ZW0sIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICByZXN1bHRzW2ldID0gKChyZXN1bHQ6IGFueSk6IFJlc3VsdCk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yMTIzXG4gICAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIGNhbGxiYWNrKGVycm9yLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qXG4gKiBQb2x5ZmlsbCBmb3IgT2JqZWN0LnZhbHVlcy4gTm90IGZ1bGx5IHNwZWMgY29tcGxpYW50LCBidXQgd2UgZG9uJ3RcbiAqIG5lZWQgaXQgdG8gYmUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlczxUPihvYmo6IHtba2V5OiBzdHJpbmddOiBUfSk6IEFycmF5PFQ+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGsgaW4gb2JqKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG9ialtrXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qXG4gKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGtleXMgaW4gb25lIG9iamVjdCBhbmQgdGhlIGtleXNcbiAqIGluIGFub3RoZXIgb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIGtleXMgZGlmZmVyZW5jZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtleXNEaWZmZXJlbmNlPFMsIFQ+KG9iajoge1trZXk6IHN0cmluZ106IFN9LCBvdGhlcjoge1trZXk6IHN0cmluZ106IFR9KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IFtdO1xuICAgIGZvciAoY29uc3QgaSBpbiBvYmopIHtcbiAgICAgICAgaWYgKCEoaSBpbiBvdGhlcikpIHtcbiAgICAgICAgICAgIGRpZmZlcmVuY2UucHVzaChpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlmZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGRlc3RpbmF0aW9uIG9iamVjdCBhbmQgb3B0aW9uYWxseSBtYW55IHNvdXJjZSBvYmplY3RzLFxuICogY29weSBhbGwgcHJvcGVydGllcyBmcm9tIHRoZSBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZSBkZXN0aW5hdGlvbi5cbiAqIFRoZSBsYXN0IHNvdXJjZSBvYmplY3QgZ2l2ZW4gb3ZlcnJpZGVzIHByb3BlcnRpZXMgZnJvbSBwcmV2aW91c1xuICogc291cmNlIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGRlc3QgZGVzdGluYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0gc291cmNlcyBzb3VyY2VzIGZyb20gd2hpY2ggcHJvcGVydGllcyBhcmUgcHVsbGVkXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKGRlc3Q6IE9iamVjdCwgLi4uc291cmNlczogQXJyYXk8P09iamVjdD4pOiBPYmplY3Qge1xuICAgIGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrIGluIHNyYykge1xuICAgICAgICAgICAgZGVzdFtrXSA9IHNyY1trXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVzdDtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBvYmplY3QgYW5kIGEgbnVtYmVyIG9mIHByb3BlcnRpZXMgYXMgc3RyaW5ncywgcmV0dXJuIHZlcnNpb25cbiAqIG9mIHRoYXQgb2JqZWN0IHdpdGggb25seSB0aG9zZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSBzcmMgdGhlIG9iamVjdFxuICogQHBhcmFtIHByb3BlcnRpZXMgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgY2hvc2VuXG4gKiB0byBhcHBlYXIgb24gdGhlIHJlc3VsdGluZyBvYmplY3QuXG4gKiBAcmV0dXJucyBvYmplY3Qgd2l0aCBsaW1pdGVkIHByb3BlcnRpZXMuXG4gKiBAZXhhbXBsZVxuICogdmFyIGZvbyA9IHsgbmFtZTogJ0NoYXJsaWUnLCBhZ2U6IDEwIH07XG4gKiB2YXIganVzdE5hbWUgPSBwaWNrKGZvbywgWyduYW1lJ10pO1xuICogLy8ganVzdE5hbWUgPSB7IG5hbWU6ICdDaGFybGllJyB9XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGljayhzcmM6IE9iamVjdCwgcHJvcGVydGllczogQXJyYXk8c3RyaW5nPik6IE9iamVjdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGsgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICBpZiAoayBpbiBzcmMpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IHNyY1trXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5sZXQgaWQgPSAxO1xuXG4vKipcbiAqIFJldHVybiBhIHVuaXF1ZSBudW1lcmljIGlkLCBzdGFydGluZyBhdCAxIGFuZCBpbmNyZW1lbnRpbmcgd2l0aFxuICogZWFjaCBjYWxsLlxuICpcbiAqIEByZXR1cm5zIHVuaXF1ZSBudW1lcmljIGlkLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUlkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGlkKys7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgcmFuZG9tIFVVSUQgKHY0KS4gVGFrZW4gZnJvbTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vamVkLzk4Mjg4M1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHV1aWQoKTogc3RyaW5nIHtcbiAgICBmdW5jdGlvbiBiKGEpIHtcbiAgICAgICAgcmV0dXJuIGEgPyAoYSBeIE1hdGgucmFuZG9tKCkgKiAxNiA+PiBhIC8gNCkudG9TdHJpbmcoMTYpIDpcbiAgICAgICAgLy8kRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSB0aGUgaW1wbGllZCBhcnJheSBsaXRlcmFsIGNvbnZlcnNpb24gaGVyZVxuICAgICAgICAgICAgKFsxZTddICsgLVsxZTNdICsgLTRlMyArIC04ZTMgKyAtMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYik7XG4gICAgfVxuICAgIHJldHVybiBiKCk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBzdHJpbmcgdG8gbWF0Y2ggVVVJRCh2NCkgb2YgdGhlXG4gKiBmb3JtOiB4eHh4eHh4eC14eHh4LTR4eHgtWzg5YWJdeHh4LXh4eHh4eHh4eHh4eFxuICogQHBhcmFtIHN0ciBzdHJpbmcgdG8gdmFsaWRhdGUuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVVdWlkKHN0cjogP3N0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdHIgPyAvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVs0XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfSQvaS50ZXN0KHN0cikgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBtZW1iZXIgZnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncywgcmVwbGFjZSBhbGwgb2YgdGhlbVxuICogd2l0aCBib3VuZCB2ZXJzaW9ucyB0aGF0IHdpbGwgYWx3YXlzIHJlZmVyIHRvIGBjb250ZXh0YCBhcyBgdGhpc2AuIFRoaXNcbiAqIGlzIHVzZWZ1bCBmb3IgY2xhc3NlcyB3aGVyZSBvdGhlcndpc2UgZXZlbnQgYmluZGluZ3Mgd291bGQgcmVhc3NpZ25cbiAqIGB0aGlzYCB0byB0aGUgZXZlbnRlZCBvYmplY3Qgb3Igc29tZSBvdGhlciB2YWx1ZTogdGhpcyBsZXRzIHlvdSBlbnN1cmVcbiAqIHRoZSBgdGhpc2AgdmFsdWUgYWx3YXlzLlxuICpcbiAqIEBwYXJhbSBmbnMgbGlzdCBvZiBtZW1iZXIgZnVuY3Rpb24gbmFtZXNcbiAqIEBwYXJhbSBjb250ZXh0IHRoZSBjb250ZXh0IHZhbHVlXG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gTXlDbGFzcygpIHtcbiAqICAgYmluZEFsbChbJ29udGltZXInXSwgdGhpcyk7XG4gKiAgIHRoaXMubmFtZSA9ICdUb20nO1xuICogfVxuICogTXlDbGFzcy5wcm90b3R5cGUub250aW1lciA9IGZ1bmN0aW9uKCkge1xuICogICBhbGVydCh0aGlzLm5hbWUpO1xuICogfTtcbiAqIHZhciBteUNsYXNzID0gbmV3IE15Q2xhc3MoKTtcbiAqIHNldFRpbWVvdXQobXlDbGFzcy5vbnRpbWVyLCAxMDApO1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRBbGwoZm5zOiBBcnJheTxzdHJpbmc+LCBjb250ZXh0OiBPYmplY3QpOiB2b2lkIHtcbiAgICBmbnMuZm9yRWFjaCgoZm4pID0+IHtcbiAgICAgICAgaWYgKCFjb250ZXh0W2ZuXSkgeyByZXR1cm47IH1cbiAgICAgICAgY29udGV4dFtmbl0gPSBjb250ZXh0W2ZuXS5iaW5kKGNvbnRleHQpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHN0cmluZyBlbmRzIHdpdGggYSBwYXJ0aWN1bGFyIHN1YnN0cmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRzV2l0aChzdHJpbmc6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RyaW5nLmluZGV4T2Yoc3VmZml4LCBzdHJpbmcubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCkgIT09IC0xO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgYnkgbWFwcGluZyBhbGwgdGhlIHZhbHVlcyBvZiBhbiBleGlzdGluZyBvYmplY3Qgd2hpbGVcbiAqIHByZXNlcnZpbmcgdGhlaXIga2V5cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwT2JqZWN0KGlucHV0OiBPYmplY3QsIGl0ZXJhdG9yOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IE9iamVjdCB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBpdGVyYXRvci5jYWxsKGNvbnRleHQgfHwgdGhpcywgaW5wdXRba2V5XSwga2V5LCBpbnB1dCk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCBieSBmaWx0ZXJpbmcgb3V0IHZhbHVlcyBvZiBhbiBleGlzdGluZyBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlck9iamVjdChpbnB1dDogT2JqZWN0LCBpdGVyYXRvcjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QpOiBPYmplY3Qge1xuICAgIGNvbnN0IG91dHB1dCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGlucHV0KSB7XG4gICAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQgfHwgdGhpcywgaW5wdXRba2V5XSwga2V5LCBpbnB1dCkpIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gaW5wdXRba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuXG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9kZWVwX2VxdWFsJztcbmV4cG9ydCB7ZGVlcEVxdWFsfTtcblxuLyoqXG4gKiBEZWVwbHkgY2xvbmVzIHR3byBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZTxUPihpbnB1dDogVCk6IFQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICByZXR1cm4gaW5wdXQubWFwKGNsb25lKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuICgobWFwT2JqZWN0KGlucHV0LCBjbG9uZSk6IGFueSk6IFQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdHdvIGFycmF5cyBoYXZlIGF0IGxlYXN0IG9uZSBjb21tb24gZWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlzSW50ZXJzZWN0PFQ+KGE6IEFycmF5PFQ+LCBiOiBBcnJheTxUPik6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgYS5sZW5ndGg7IGwrKykge1xuICAgICAgICBpZiAoYi5pbmRleE9mKGFbbF0pID49IDApIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgYW5kIGVuc3VyZSBkdXBsaWNhdGUgd2FybmluZyBtZXNzYWdlc1xuICogYXJlIG5vdCBwcmludGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHdhcm5PbmNlSGlzdG9yeToge1trZXk6IHN0cmluZ106IGJvb2xlYW59ID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXJuT25jZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXdhcm5PbmNlSGlzdG9yeVttZXNzYWdlXSkge1xuICAgICAgICAvLyBjb25zb2xlIGlzbid0IGRlZmluZWQgaW4gc29tZSBXZWJXb3JrZXJzLCBzZWUgIzI1NThcbiAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiKSBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgIHdhcm5PbmNlSGlzdG9yeVttZXNzYWdlXSA9IHRydWU7XG4gICAgfVxufVxuXG4vKipcbiAqIEluZGljYXRlcyBpZiB0aGUgcHJvdmlkZWQgUG9pbnRzIGFyZSBpbiBhIGNvdW50ZXIgY2xvY2t3aXNlICh0cnVlKSBvciBjbG9ja3dpc2UgKGZhbHNlKSBvcmRlclxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB0cnVlIGZvciBhIGNvdW50ZXIgY2xvY2t3aXNlIHNldCBvZiBwb2ludHNcbiAqL1xuLy8gaHR0cDovL2JyeWNlYm9lLmNvbS8yMDA2LzEwLzIzL2xpbmUtc2VnbWVudC1pbnRlcnNlY3Rpb24tYWxnb3JpdGhtL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ291bnRlckNsb2Nrd2lzZShhOiBQb2ludCwgYjogUG9pbnQsIGM6IFBvaW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChjLnkgLSBhLnkpICogKGIueCAtIGEueCkgPiAoYi55IC0gYS55KSAqIChjLnggLSBhLngpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNpZ25lZCBhcmVhIGZvciB0aGUgcG9seWdvbiByaW5nLiAgUG9zdGl2ZSBhcmVhcyBhcmUgZXh0ZXJpb3IgcmluZ3MgYW5kXG4gKiBoYXZlIGEgY2xvY2t3aXNlIHdpbmRpbmcuICBOZWdhdGl2ZSBhcmVhcyBhcmUgaW50ZXJpb3IgcmluZ3MgYW5kIGhhdmUgYSBjb3VudGVyIGNsb2Nrd2lzZVxuICogb3JkZXJpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSByaW5nIEV4dGVyaW9yIG9yIGludGVyaW9yIHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVNpZ25lZEFyZWEocmluZzogQXJyYXk8UG9pbnQ+KTogbnVtYmVyIHtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmluZy5sZW5ndGgsIGogPSBsZW4gLSAxLCBwMSwgcDI7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgcDEgPSByaW5nW2ldO1xuICAgICAgICBwMiA9IHJpbmdbal07XG4gICAgICAgIHN1bSArPSAocDIueCAtIHAxLngpICogKHAxLnkgKyBwMi55KTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIGNsb3NlZCBwb2x5Z29ucywgZmlyc3QgKyBsYXN0IHBvaW50IGFyZSBlcXVhbFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gcG9pbnRzIGFycmF5IG9mIHBvaW50c1xuICogQHJldHVybiB0cnVlIGlmIHRoZSBwb2ludHMgYXJlIGEgY2xvc2VkIHBvbHlnb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xvc2VkUG9seWdvbihwb2ludHM6IEFycmF5PFBvaW50Pik6IGJvb2xlYW4ge1xuICAgIC8vIElmIGl0IGlzIDIgcG9pbnRzIHRoYXQgYXJlIHRoZSBzYW1lIHRoZW4gaXQgaXMgYSBwb2ludFxuICAgIC8vIElmIGl0IGlzIDMgcG9pbnRzIHdpdGggc3RhcnQgYW5kIGVuZCB0aGUgc2FtZSB0aGVuIGl0IGlzIGEgbGluZVxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcDEgPSBwb2ludHNbMF07XG4gICAgY29uc3QgcDIgPSBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKE1hdGguYWJzKHAxLnggLSBwMi54KSA+IDAgfHxcbiAgICAgICAgTWF0aC5hYnMocDEueSAtIHAyLnkpID4gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gcG9seWdvbiBzaW1wbGlmaWNhdGlvbiBjYW4gcHJvZHVjZSBwb2x5Z29ucyB3aXRoIHplcm8gYXJlYSBhbmQgbW9yZSB0aGFuIDMgcG9pbnRzXG4gICAgcmV0dXJuIE1hdGguYWJzKGNhbGN1bGF0ZVNpZ25lZEFyZWEocG9pbnRzKSkgPiAwLjAxO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHNwaGVyaWNhbCBjb29yZGluYXRlcyB0byBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzcGhlcmljYWwgU3BoZXJpY2FsIGNvb3JkaW5hdGVzLCBpbiBbcmFkaWFsLCBhemltdXRoYWwsIHBvbGFyXVxuICogQHJldHVybiBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgaW4gW3gsIHksIHpdXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNwaGVyaWNhbFRvQ2FydGVzaWFuKFtyLCBhemltdXRoYWwsIHBvbGFyXTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdKToge3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJ9IHtcbiAgICAvLyBXZSBhYnN0cmFjdCBcIm5vcnRoXCIvXCJ1cFwiIChjb21wYXNzLXdpc2UpIHRvIGJlIDDDgsKwIHdoZW4gcmVhbGx5IHRoaXMgaXMgOTDDgsKwICjDj8KALzIpOlxuICAgIC8vIGNvcnJlY3QgZm9yIHRoYXQgaGVyZVxuICAgIGF6aW11dGhhbCArPSA5MDtcblxuICAgIC8vIENvbnZlcnQgYXppbXV0aGFsIGFuZCBwb2xhciBhbmdsZXMgdG8gcmFkaWFuc1xuICAgIGF6aW11dGhhbCAqPSBNYXRoLlBJIC8gMTgwO1xuICAgIHBvbGFyICo9IE1hdGguUEkgLyAxODA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB4OiByICogTWF0aC5jb3MoYXppbXV0aGFsKSAqIE1hdGguc2luKHBvbGFyKSxcbiAgICAgICAgeTogciAqIE1hdGguc2luKGF6aW11dGhhbCkgKiBNYXRoLnNpbihwb2xhciksXG4gICAgICAgIHo6IHIgKiBNYXRoLmNvcyhwb2xhcilcbiAgICB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBkYXRhIGZyb20gJ0NhY2hlLUNvbnRyb2wnIGhlYWRlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBjYWNoZUNvbnRyb2wgVmFsdWUgb2YgJ0NhY2hlLUNvbnRyb2wnIGhlYWRlclxuICogQHJldHVybiBvYmplY3QgY29udGFpbmluZyBwYXJzZWQgaGVhZGVyIGluZm8uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2FjaGVDb250cm9sKGNhY2hlQ29udHJvbDogc3RyaW5nKTogT2JqZWN0IHtcbiAgICAvLyBUYWtlbiBmcm9tIFtXcmVja10oaHR0cHM6Ly9naXRodWIuY29tL2hhcGlqcy93cmVjaylcbiAgICBjb25zdCByZSA9IC8oPzpefCg/OlxccypcXCxcXHMqKSkoW15cXHgwMC1cXHgyMFxcKFxcKTw+QFxcLDtcXDpcXFxcXCJcXC9cXFtcXF1cXD9cXD1cXHtcXH1cXHg3Rl0rKSg/OlxcPSg/OihbXlxceDAwLVxceDIwXFwoXFwpPD5AXFwsO1xcOlxcXFxcIlxcL1xcW1xcXVxcP1xcPVxce1xcfVxceDdGXSspfCg/OlxcXCIoKD86W15cIlxcXFxdfFxcXFwuKSopXFxcIikpKT8vZztcblxuICAgIGNvbnN0IGhlYWRlciA9IHt9O1xuICAgIGNhY2hlQ29udHJvbC5yZXBsYWNlKHJlLCAoJDAsICQxLCAkMiwgJDMpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAkMiB8fCAkMztcbiAgICAgICAgaGVhZGVyWyQxXSA9IHZhbHVlID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHRydWU7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcblxuICAgIGlmIChoZWFkZXJbJ21heC1hZ2UnXSkge1xuICAgICAgICBjb25zdCBtYXhBZ2UgPSBwYXJzZUludChoZWFkZXJbJ21heC1hZ2UnXSwgMTApO1xuICAgICAgICBpZiAoaXNOYU4obWF4QWdlKSkgZGVsZXRlIGhlYWRlclsnbWF4LWFnZSddO1xuICAgICAgICBlbHNlIGhlYWRlclsnbWF4LWFnZSddID0gbWF4QWdlO1xuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9yYWdlQXZhaWxhYmxlKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB3aW5kb3dbdHlwZV07XG4gICAgICAgIHN0b3JhZ2Uuc2V0SXRlbSgnX21hcGJveF90ZXN0XycsIDEpO1xuICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oJ19tYXBib3hfdGVzdF8nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvd0Jhc2U2NC9CYXNlNjRfZW5jb2RpbmdfYW5kX2RlY29kaW5nI1RoZV9Vbmljb2RlX1Byb2JsZW1cbi8vVW5pY29kZSBjb21wbGlhbnQgYmFzZTY0IGVuY29kZXIgZm9yIHN0cmluZ3NcbmV4cG9ydCBmdW5jdGlvbiBiNjRFbmNvZGVVbmljb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKFxuICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLFxuICAgICAgICAgICAgKG1hdGNoLCBwMSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlcignMHgnICsgcDEpKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICApO1xufVxuXG4vLyBVbmljb2RlIGNvbXBsaWFudCBkZWNvZGVyIGZvciBiYXNlNjQtZW5jb2RlZCBzdHJpbmdzXG5leHBvcnQgZnVuY3Rpb24gYjY0RGVjb2RlVW5pY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2Ioc3RyKS5zcGxpdCgnJykubWFwKChjKSA9PiB7XG4gICAgICAgIHJldHVybiAnJScgKyAoJzAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfSkuam9pbignJykpO1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG5jb25zdCBub3cgPSB3aW5kb3cucGVyZm9ybWFuY2UgJiYgd2luZG93LnBlcmZvcm1hbmNlLm5vdyA/XG4gICAgd2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSkgOlxuICAgIERhdGUubm93LmJpbmQoRGF0ZSk7XG5cbmNvbnN0IHJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuY29uc3QgY2FuY2VsID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5cbmxldCBsaW5rRWw7XG5cbmxldCByZWR1Y2VkTW90aW9uUXVlcnk6IE1lZGlhUXVlcnlMaXN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGV4cG9ydGVkID0ge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgZnVuY3Rpb24gdGhhdCBvdXRwdXRzIG1pbGxpc2Vjb25kczogZWl0aGVyIHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICogb3IgYSBmYWxsYmFjayB0byBEYXRlLm5vdygpXG4gICAgICovXG4gICAgbm93LFxuXG4gICAgZnJhbWUoZm46ICgpID0+IHZvaWQpOiBDYW5jZWxhYmxlIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSByYWYoZm4pO1xuICAgICAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4gY2FuY2VsKGZyYW1lKX07XG4gICAgfSxcblxuICAgIGdldEltYWdlRGF0YShpbWc6IENhbnZhc0ltYWdlU291cmNlLCBwYWRkaW5nPzogbnVtYmVyID0gMCk6IEltYWdlRGF0YSB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dCcpO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0SW1hZ2VEYXRhKC1wYWRkaW5nLCAtcGFkZGluZywgaW1nLndpZHRoICsgMiAqIHBhZGRpbmcsIGltZy5oZWlnaHQgKyAyICogcGFkZGluZyk7XG4gICAgfSxcblxuICAgIHJlc29sdmVVUkwocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghbGlua0VsKSBsaW5rRWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rRWwuaHJlZiA9IHBhdGg7XG4gICAgICAgIHJldHVybiBsaW5rRWwuaHJlZjtcbiAgICB9LFxuXG4gICAgaGFyZHdhcmVDb25jdXJyZW5jeTogd2luZG93Lm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5IHx8IDQsXG5cbiAgICBnZXQgZGV2aWNlUGl4ZWxSYXRpbygpIHsgcmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOyB9LFxuICAgIGdldCBwcmVmZXJzUmVkdWNlZE1vdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF3aW5kb3cubWF0Y2hNZWRpYSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvL0xhemlseSBpbml0aWFsaXplIG1lZGlhIHF1ZXJ5XG4gICAgICAgIGlmIChyZWR1Y2VkTW90aW9uUXVlcnkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVkdWNlZE1vdGlvblF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZHVjZWRNb3Rpb25RdWVyeS5tYXRjaGVzO1xuICAgIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcbiIsIi8vIEBmbG93IHN0cmljdFxuXG50eXBlIENvbmZpZyA9IHt8XG4gIEFQSV9VUkw6IHN0cmluZyxcbiAgRVZFTlRTX1VSTDogP3N0cmluZyxcbiAgRkVFREJBQ0tfVVJMOiBzdHJpbmcsXG4gIFJFUVVJUkVfQUNDRVNTX1RPS0VOOiBib29sZWFuLFxuICBBQ0NFU1NfVE9LRU46ID9zdHJpbmcsXG4gIE1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUzogbnVtYmVyXG58fTtcblxuY29uc3QgY29uZmlnOiBDb25maWcgPSB7XG4gICAgQVBJX1VSTDogJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20nLFxuICAgIGdldCBFVkVOVFNfVVJMKCkge1xuICAgICAgICBpZiAoIXRoaXMuQVBJX1VSTCkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICBpZiAodGhpcy5BUElfVVJMLmluZGV4T2YoJ2h0dHBzOi8vYXBpLm1hcGJveC5jbicpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vZXZlbnRzLm1hcGJveC5jbi9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQVBJX1VSTC5pbmRleE9mKCdodHRwczovL2FwaS5tYXBib3guY29tJykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9ldmVudHMubWFwYm94LmNvbS9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIEZFRURCQUNLX1VSTDogJ2h0dHBzOi8vYXBwcy5tYXBib3guY29tL2ZlZWRiYWNrJyxcbiAgICBSRVFVSVJFX0FDQ0VTU19UT0tFTjogdHJ1ZSxcbiAgICBBQ0NFU1NfVE9LRU46IG51bGwsXG4gICAgTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOiAxNlxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29uZmlnO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuXG5jb25zdCBleHBvcnRlZCA9IHtcbiAgICBzdXBwb3J0ZWQ6IGZhbHNlLFxuICAgIHRlc3RTdXBwb3J0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcblxubGV0IGdsRm9yVGVzdGluZztcbmxldCB3ZWJwQ2hlY2tDb21wbGV0ZSA9IGZhbHNlO1xubGV0IHdlYnBJbWdUZXN0O1xubGV0IHdlYnBJbWdUZXN0T25sb2FkQ29tcGxldGUgPSBmYWxzZTtcblxuaWYgKHdpbmRvdy5kb2N1bWVudCkge1xuICAgIHdlYnBJbWdUZXN0ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHdlYnBJbWdUZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoZ2xGb3JUZXN0aW5nKSB0ZXN0V2VicFRleHR1cmVVcGxvYWQoZ2xGb3JUZXN0aW5nKTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICAgICAgd2VicEltZ1Rlc3RPbmxvYWRDb21wbGV0ZSA9IHRydWU7XG4gICAgfTtcbiAgICB3ZWJwSW1nVGVzdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHdlYnBDaGVja0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICB9O1xuICAgIHdlYnBJbWdUZXN0LnNyYyA9ICdkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdSaDRBQUFCWFJVSlFWbEE0VEJFQUFBQXZBUUFBQUFmUS8vNzN2LytCaU9oL0FBQT0nO1xufVxuXG5mdW5jdGlvbiB0ZXN0U3VwcG9ydChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgaWYgKHdlYnBDaGVja0NvbXBsZXRlIHx8ICF3ZWJwSW1nVGVzdCkgcmV0dXJuO1xuXG4gICAgLy8gSFRNTEltYWdlRWxlbWVudC5jb21wbGV0ZSBpcyBzZXQgd2hlbiBhbiBpbWFnZSBpcyBkb25lIGxvYWRpbmcgaXQncyBzb3VyY2VcbiAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGxvYWQgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxuICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIGFuIGVycm9yIHRvIHNldCBIVE1MSW1hZ2VFbGVtZW50LmNvbXBsZXRlIHRvIHRydWUgd2hpY2ggd291bGQgdHJpZ2dlclxuICAgIC8vIHRlc3RXZWJwVGV4dHVyZVVwbG9hZCBhbmQgbWlzdGFrZW5seSBzZXQgZXhwb3J0ZWQuc3VwcG9ydGVkIHRvIHRydWUgaW4gYnJvd3NlcnMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCB3ZWJwXG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugc2V0IGEgZmxhZyBpbiB0aGUgaW1hZ2UncyBvbmxvYWQgaGFuZGxlciBhbmQgb25seSBjYWxsIHRlc3RXZWJwVGV4dHVyZVVwbG9hZFxuICAgIC8vIGFmdGVyIGEgc3VjY2Vzc2Z1bCBpbWFnZSBsb2FkIGV2ZW50LlxuICAgIGlmICh3ZWJwSW1nVGVzdE9ubG9hZENvbXBsZXRlKSB7XG4gICAgICAgIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gZ2w7XG5cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgLy8gRWRnZSAxOCBzdXBwb3J0cyBXZWJQIGJ1dCBub3QgdXBsb2FkaW5nIGEgV2ViUCBpbWFnZSB0byBhIGdsIHRleHR1cmVcbiAgICAvLyBUZXN0IHN1cHBvcnQgZm9yIHRoaXMgYmVmb3JlIGFsbG93aW5nIFdlYlAgaW1hZ2VzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83NjcxXG4gICAgY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2VicEltZ1Rlc3QpO1xuXG4gICAgICAgIC8vIFRoZSBlcnJvciBkb2VzIG5vdCBnZXQgdHJpZ2dlcmVkIGluIEVkZ2UgaWYgdGhlIGNvbnRleHQgaXMgbG9zdFxuICAgICAgICBpZiAoZ2wuaXNDb250ZXh0TG9zdCgpKSByZXR1cm47XG5cbiAgICAgICAgZXhwb3J0ZWQuc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIENhdGNoIFwiVW5zcGVjaWZpZWQgRXJyb3IuXCIgaW4gRWRnZSAxOC5cbiAgICB9XG5cbiAgICBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgd2VicENoZWNrQ29tcGxldGUgPSB0cnVlO1xufVxuIiwiLy8gQGZsb3dcblxuLyoqKioqIFNUQVJUIFdBUk5JTkcgLSBJRiBZT1UgVVNFIFRISVMgQ09ERSBXSVRIIE1BUEJPWCBNQVBQSU5HIEFQSVMsIFJFTU9WQUwgT1JcbiogTU9ESUZJQ0FUSU9OIE9GIFRIRSBGT0xMT1dJTkcgQ09ERSBWSU9MQVRFUyBUSEUgTUFQQk9YIFRFUk1TIE9GIFNFUlZJQ0UgICoqKioqKlxuKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdXNlZCB0byBhY2Nlc3MgTWFwYm94J3MgTWFwcGluZyBBUElzLiBSZW1vdmFsIG9yIG1vZGlmaWNhdGlvblxuKiBvZiB0aGlzIGNvZGUgd2hlbiB1c2VkIHdpdGggTWFwYm94J3MgTWFwcGluZyBBUElzIGNhbiByZXN1bHQgaW4gaGlnaGVyIGZlZXMgYW5kL29yXG4qIHRlcm1pbmF0aW9uIG9mIHlvdXIgYWNjb3VudCB3aXRoIE1hcGJveC5cbipcbiogVW5kZXIgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlLCB5b3UgbWF5IG5vdCB1c2UgdGhpcyBjb2RlIHRvIGFjY2VzcyBNYXBib3hcbiogTWFwcGluZyBBUElzIG90aGVyIHRoYW4gdGhyb3VnaCBNYXBib3ggU0RLcy5cbipcbiogVGhlIE1hcHBpbmcgQVBJcyBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL2RvY3MubWFwYm94LmNvbS9hcGkvbWFwcy8jbWFwc1xuKiBhbmQgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlIGFyZSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubWFwYm94LmNvbS90b3MvXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbnR5cGUgU2t1VG9rZW5PYmplY3QgPSB7fFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdG9rZW5FeHBpcmVzQXQ6IG51bWJlclxufH07XG5cbmNvbnN0IFNLVV9JRCA9ICcwMSc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNrdVRva2VuKCk6IFNrdVRva2VuT2JqZWN0IHtcbiAgICAvLyBTS1VfSUQgYW5kIFRPS0VOX1ZFUlNJT04gYXJlIHNwZWNpZmllZCBieSBhbiBpbnRlcm5hbCBzY2hlbWEgYW5kIHNob3VsZCBub3QgY2hhbmdlXG4gICAgY29uc3QgVE9LRU5fVkVSU0lPTiA9ICcxJztcbiAgICBjb25zdCBiYXNlNjJjaGFycyA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XG4gICAgLy8gc2Vzc2lvblJhbmRvbWl6ZXIgaXMgYSByYW5kb21pemVkIDEwLWRpZ2l0IGJhc2UtNjIgbnVtYmVyXG4gICAgbGV0IHNlc3Npb25SYW5kb21pemVyID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHNlc3Npb25SYW5kb21pemVyICs9IGJhc2U2MmNoYXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDYyKV07XG4gICAgfVxuICAgIGNvbnN0IGV4cGlyYXRpb24gPSAxMiAqIDYwICogNjAgKiAxMDAwOyAvLyAxMiBob3Vyc1xuICAgIGNvbnN0IHRva2VuID0gW1RPS0VOX1ZFUlNJT04sIFNLVV9JRCwgc2Vzc2lvblJhbmRvbWl6ZXJdLmpvaW4oJycpO1xuICAgIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIGV4cGlyYXRpb247XG5cbiAgICByZXR1cm4ge3Rva2VuLCB0b2tlbkV4cGlyZXNBdH07XG59XG5cbmV4cG9ydCB7Y3JlYXRlU2t1VG9rZW4sIFNLVV9JRH07XG5cbi8qKioqKiBFTkQgV0FSTklORyAtIFJFTU9WQUwgT1IgTU9ESUZJQ0FUSU9OIE9GIFRIRVxuUFJFQ0VESU5HIENPREUgVklPTEFURVMgVEhFIE1BUEJPWCBURVJNUyBPRiBTRVJWSUNFICAqKioqKiovXG4iLCIvLyBAZmxvd1xuXG4vKioqKiogU1RBUlQgV0FSTklORyAtIElGIFlPVSBVU0UgVEhJUyBDT0RFIFdJVEggTUFQQk9YIE1BUFBJTkcgQVBJUywgUkVNT1ZBTCBPUlxuKiBNT0RJRklDQVRJT04gT0YgVEhFIEZPTExPV0lORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqXG4qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB1c2VkIHRvIGFjY2VzcyBNYXBib3gncyBNYXBwaW5nIEFQSXMuIFJlbW92YWwgb3IgbW9kaWZpY2F0aW9uXG4qIG9mIHRoaXMgY29kZSB3aGVuIHVzZWQgd2l0aCBNYXBib3gncyBNYXBwaW5nIEFQSXMgY2FuIHJlc3VsdCBpbiBoaWdoZXIgZmVlcyBhbmQvb3JcbiogdGVybWluYXRpb24gb2YgeW91ciBhY2NvdW50IHdpdGggTWFwYm94LlxuKlxuKiBVbmRlciB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UsIHlvdSBtYXkgbm90IHVzZSB0aGlzIGNvZGUgdG8gYWNjZXNzIE1hcGJveFxuKiBNYXBwaW5nIEFQSXMgb3RoZXIgdGhhbiB0aHJvdWdoIE1hcGJveCBTREtzLlxuKlxuKiBUaGUgTWFwcGluZyBBUElzIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2FwaS9tYXBzLyNtYXBzXG4qIGFuZCB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UgYXJlIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5tYXBib3guY29tL3Rvcy9cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4vYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4vd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IHtjcmVhdGVTa3VUb2tlbiwgU0tVX0lEfSBmcm9tICcuL3NrdV90b2tlbic7XG5pbXBvcnQge3ZlcnNpb24gYXMgc2RrVmVyc2lvbn0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7dXVpZCwgdmFsaWRhdGVVdWlkLCBzdG9yYWdlQXZhaWxhYmxlLCBiNjREZWNvZGVVbmljb2RlLCBiNjRFbmNvZGVVbmljb2RlLCB3YXJuT25jZSwgZXh0ZW5kfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHtwb3N0RGF0YSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuL2FqYXgnO1xuXG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnN9IGZyb20gJy4vYWpheCc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7VGlsZUpTT059IGZyb20gJy4uL3R5cGVzL3RpbGVqc29uJztcblxudHlwZSBSZXNvdXJjZVR5cGVFbnVtID0gJEtleXM8dHlwZW9mIFJlc291cmNlVHlwZT47XG5leHBvcnQgdHlwZSBSZXF1ZXN0VHJhbnNmb3JtRnVuY3Rpb24gPSAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IFJlc291cmNlVHlwZUVudW0pID0+IFJlcXVlc3RQYXJhbWV0ZXJzO1xuXG50eXBlIFVybE9iamVjdCA9IHt8XG4gICAgcHJvdG9jb2w6IHN0cmluZyxcbiAgICBhdXRob3JpdHk6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBBcnJheTxzdHJpbmc+XG58fTtcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RNYW5hZ2VyIHtcbiAgICBfc2t1VG9rZW46IHN0cmluZztcbiAgICBfc2t1VG9rZW5FeHBpcmVzQXQ6IG51bWJlcjtcbiAgICBfdHJhbnNmb3JtUmVxdWVzdEZuOiA/UmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9uO1xuICAgIF9jdXN0b21BY2Nlc3NUb2tlbjogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybVJlcXVlc3RGbj86IFJlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbiwgY3VzdG9tQWNjZXNzVG9rZW4/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuID0gdHJhbnNmb3JtUmVxdWVzdEZuO1xuICAgICAgICB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiA9IGN1c3RvbUFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLl9jcmVhdGVTa3VUb2tlbigpO1xuICAgIH1cblxuICAgIF9jcmVhdGVTa3VUb2tlbigpIHtcbiAgICAgICAgY29uc3Qgc2t1VG9rZW4gPSBjcmVhdGVTa3VUb2tlbigpO1xuICAgICAgICB0aGlzLl9za3VUb2tlbiA9IHNrdVRva2VuLnRva2VuO1xuICAgICAgICB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdCA9IHNrdVRva2VuLnRva2VuRXhwaXJlc0F0O1xuICAgIH1cblxuICAgIF9pc1NrdVRva2VuRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgPiB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdDtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1SZXF1ZXN0KHVybDogc3RyaW5nLCB0eXBlOiBSZXNvdXJjZVR5cGVFbnVtKSB7XG4gICAgICAgIGlmICh0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4odXJsLCB0eXBlKSB8fCB7dXJsfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7dXJsfTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTdHlsZVVSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWtlQVBJVVJMKHVybE9iamVjdCwgdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW4gfHwgYWNjZXNzVG9rZW4pO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZUdseXBoc1VSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9mb250cy92MSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VBUElVUkwodXJsT2JqZWN0LCB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBhY2Nlc3NUb2tlbik7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplU291cmNlVVJMKHVybDogc3RyaW5nLCBhY2Nlc3NUb2tlbj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXNNYXBib3hVUkwodXJsKSkgcmV0dXJuIHVybDtcbiAgICAgICAgY29uc3QgdXJsT2JqZWN0ID0gcGFyc2VVcmwodXJsKTtcbiAgICAgICAgdXJsT2JqZWN0LnBhdGggPSBgL3Y0LyR7dXJsT2JqZWN0LmF1dGhvcml0eX0uanNvbmA7XG4gICAgICAgIC8vIFRpbGVKU09OIHJlcXVlc3RzIG5lZWQgYSBzZWN1cmUgZmxhZyBhcHBlbmRlZCB0byB0aGVpciBVUkxzIHNvXG4gICAgICAgIC8vIHRoYXQgdGhlIHNlcnZlciBrbm93cyB0byBzZW5kIFNTTC1pZmllZCByZXNvdXJjZSByZWZlcmVuY2VzLlxuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTcHJpdGVVUkwodXJsOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB1cmxPYmplY3QgPSBwYXJzZVVybCh1cmwpO1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHtcbiAgICAgICAgICAgIHVybE9iamVjdC5wYXRoICs9IGAke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFVybCh1cmxPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofS9zcHJpdGUke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVUaWxlVVJMKHRpbGVVUkw6IHN0cmluZywgc291cmNlVVJMPzogP3N0cmluZywgdGlsZVNpemU/OiA/bnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzU2t1VG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNrdVRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNvdXJjZVVSTCB8fCAhaXNNYXBib3hVUkwoc291cmNlVVJMKSkgcmV0dXJuIHRpbGVVUkw7XG5cbiAgICAgICAgY29uc3QgdXJsT2JqZWN0ID0gcGFyc2VVcmwodGlsZVVSTCk7XG4gICAgICAgIGNvbnN0IGltYWdlRXh0ZW5zaW9uUmUgPSAvKFxcLihwbmd8anBnKVxcZCopKD89JCkvO1xuICAgICAgICBjb25zdCB0aWxlVVJMQVBJUHJlZml4UmUgPSAvXi4rXFwvdjRcXC8vO1xuXG4gICAgICAgIC8vIFRoZSB2NCBtYXBib3ggdGlsZSBBUEkgc3VwcG9ydHMgNTEyeDUxMiBpbWFnZSB0aWxlcyBvbmx5IHdoZW4gQDJ4XG4gICAgICAgIC8vIGlzIGFwcGVuZGVkIHRvIHRoZSB0aWxlIFVSTC4gSWYgYHRpbGVTaXplOiA1MTJgIGlzIHNwZWNpZmllZCBmb3JcbiAgICAgICAgLy8gYSBNYXBib3ggcmFzdGVyIHNvdXJjZSBmb3JjZSB0aGUgQDJ4IHN1ZmZpeCBldmVuIGlmIGEgbm9uIGhpZHBpIGRldmljZS5cbiAgICAgICAgY29uc3Qgc3VmZml4ID0gYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvID49IDIgfHwgdGlsZVNpemUgPT09IDUxMiA/ICdAMngnIDogJyc7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHdlYnBTdXBwb3J0ZWQuc3VwcG9ydGVkID8gJy53ZWJwJyA6ICckMSc7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gdXJsT2JqZWN0LnBhdGgucmVwbGFjZShpbWFnZUV4dGVuc2lvblJlLCBgJHtzdWZmaXh9JHtleHRlbnNpb259YCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gdXJsT2JqZWN0LnBhdGgucmVwbGFjZSh0aWxlVVJMQVBJUHJlZml4UmUsICcvJyk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC92NCR7dXJsT2JqZWN0LnBhdGh9YDtcblxuICAgICAgICBpZiAoY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOICYmIChjb25maWcuQUNDRVNTX1RPS0VOIHx8IHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuKSAmJiB0aGlzLl9za3VUb2tlbikge1xuICAgICAgICAgICAgdXJsT2JqZWN0LnBhcmFtcy5wdXNoKGBza3U9JHt0aGlzLl9za3VUb2tlbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9tYWtlQVBJVVJMKHVybE9iamVjdCwgdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cblxuICAgIGNhbm9uaWNhbGl6ZVRpbGVVUkwodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFwiL3Y0L1wiO1xuICAgICAgICAvLyBtYXRjaGVzIGFueSBmaWxlIGV4dGVuc2lvbiBzcGVjaWZpZWQgYnkgYSBkb3QgYW5kIG9uZSBvciBtb3JlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvblJlID0gL1xcLltcXHddKyQvO1xuXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggYSB2YWxpZCBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgIC8vIEhhcyB0byBiZWdpbiB3aXRoIC92NC8sIHdpdGggYSB2YWxpZCBmaWxlbmFtZSArIGV4dGVuc2lvblxuICAgICAgICBpZiAoIXVybE9iamVjdC5wYXRoLm1hdGNoKC8oXlxcL3Y0XFwvKS8pIHx8ICF1cmxPYmplY3QucGF0aC5tYXRjaChleHRlbnNpb25SZSkpIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIHByb3BlciBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlYXNzZW1ibGUgdGhlIGNhbm9uaWNhbCBVUkwgZnJvbSB0aGUgcGFydHMgd2UndmUgcGFyc2VkIGJlZm9yZS5cbiAgICAgICAgbGV0IHJlc3VsdCA9IFwibWFwYm94Oi8vdGlsZXMvXCI7XG4gICAgICAgIHJlc3VsdCArPSAgdXJsT2JqZWN0LnBhdGgucmVwbGFjZSh2ZXJzaW9uLCAnJyk7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBxdWVyeSBzdHJpbmcsIG1pbnVzIHRoZSBhY2Nlc3MgdG9rZW4gcGFyYW1ldGVyLlxuICAgICAgICBjb25zdCBwYXJhbXMgPSB1cmxPYmplY3QucGFyYW1zLmZpbHRlcihwID0+ICFwLm1hdGNoKC9eYWNjZXNzX3Rva2VuPS8pKTtcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGgpIHJlc3VsdCArPSBgPyR7cGFyYW1zLmpvaW4oJyYnKX1gO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNhbm9uaWNhbGl6ZVRpbGVzZXQodGlsZUpTT046IFRpbGVKU09OLCBzb3VyY2VVUkw6IHN0cmluZykge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHNvdXJjZVVSTCkpIHJldHVybiB0aWxlSlNPTi50aWxlcyB8fCBbXTtcbiAgICAgICAgY29uc3QgY2Fub25pY2FsID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdXJsIG9mIHRpbGVKU09OLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5vbmljYWxVcmwgPSB0aGlzLmNhbm9uaWNhbGl6ZVRpbGVVUkwodXJsKTtcbiAgICAgICAgICAgIGNhbm9uaWNhbC5wdXNoKGNhbm9uaWNhbFVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbDtcbiAgICB9XG5cbiAgICBfbWFrZUFQSVVSTCh1cmxPYmplY3Q6IFVybE9iamVjdCwgYWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB2b2lkKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaGVscCA9ICdTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzJztcbiAgICAgICAgY29uc3QgYXBpVXJsT2JqZWN0ID0gcGFyc2VVcmwoY29uZmlnLkFQSV9VUkwpO1xuICAgICAgICB1cmxPYmplY3QucHJvdG9jb2wgPSBhcGlVcmxPYmplY3QucHJvdG9jb2w7XG4gICAgICAgIHVybE9iamVjdC5hdXRob3JpdHkgPSBhcGlVcmxPYmplY3QuYXV0aG9yaXR5O1xuXG4gICAgICAgIGlmIChhcGlVcmxPYmplY3QucGF0aCAhPT0gJy8nKSB7XG4gICAgICAgICAgICB1cmxPYmplY3QucGF0aCA9IGAke2FwaVVybE9iamVjdC5wYXRofSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOKSByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG5cbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhY2Nlc3NUb2tlbiB8fCBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbiBBUEkgYWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkIHRvIHVzZSBNYXBib3ggR0wuICR7aGVscH1gKTtcbiAgICAgICAgaWYgKGFjY2Vzc1Rva2VuWzBdID09PSAncycpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzZSBhIHB1YmxpYyBhY2Nlc3MgdG9rZW4gKHBrLiopIHdpdGggTWFwYm94IEdMLCBub3QgYSBzZWNyZXQgYWNjZXNzIHRva2VuIChzay4qKS4gJHtoZWxwfWApO1xuXG4gICAgICAgIHVybE9iamVjdC5wYXJhbXMgPSB1cmxPYmplY3QucGFyYW1zLmZpbHRlcigoZCkgPT4gZC5pbmRleE9mKCdhY2Nlc3NfdG9rZW4nKSA9PT0gLTEpO1xuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goYGFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApO1xuICAgICAgICByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc01hcGJveFVSTCh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB1cmwuaW5kZXhPZignbWFwYm94OicpID09PSAwO1xufVxuXG5jb25zdCBtYXBib3hIVFRQVVJMUmUgPSAvXigoaHR0cHM/Oik/XFwvXFwvKT8oW15cXC9dK1xcLik/bWFwYm94XFwuYyhufG9tKShcXC98XFw/fCQpL2k7XG5mdW5jdGlvbiBpc01hcGJveEhUVFBVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWFwYm94SFRUUFVSTFJlLnRlc3QodXJsKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2FjaGVEZWZlYXRpbmdTa3UodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3NrdT0nKSA+IDAgJiYgaXNNYXBib3hIVFRQVVJMKHVybCk7XG59XG5cbmNvbnN0IHVybFJlID0gL14oXFx3Kyk6XFwvXFwvKFteLz9dKikoXFwvW14/XSspP1xcPz8oLispPy87XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHVybDogc3RyaW5nKTogVXJsT2JqZWN0IHtcbiAgICBjb25zdCBwYXJ0cyA9IHVybC5tYXRjaCh1cmxSZSk7XG4gICAgaWYgKCFwYXJ0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBVUkwgb2JqZWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sOiBwYXJ0c1sxXSxcbiAgICAgICAgYXV0aG9yaXR5OiBwYXJ0c1syXSxcbiAgICAgICAgcGF0aDogcGFydHNbM10gfHwgJy8nLFxuICAgICAgICBwYXJhbXM6IHBhcnRzWzRdID8gcGFydHNbNF0uc3BsaXQoJyYnKSA6IFtdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VXJsKG9iajogVXJsT2JqZWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBvYmoucGFyYW1zLmxlbmd0aCA/IGA/JHtvYmoucGFyYW1zLmpvaW4oJyYnKX1gIDogJyc7XG4gICAgcmV0dXJuIGAke29iai5wcm90b2NvbH06Ly8ke29iai5hdXRob3JpdHl9JHtvYmoucGF0aH0ke3BhcmFtc31gO1xufVxuXG5leHBvcnQge2lzTWFwYm94VVJMLCBpc01hcGJveEhUVFBVUkwsIGhhc0NhY2hlRGVmZWF0aW5nU2t1fTtcblxuY29uc3QgdGVsZW1FdmVudEtleSA9ICdtYXBib3guZXZlbnREYXRhJztcblxuZnVuY3Rpb24gcGFyc2VBY2Nlc3NUb2tlbihhY2Nlc3NUb2tlbjogP3N0cmluZykge1xuICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBhY2Nlc3NUb2tlbi5zcGxpdCgnLicpO1xuICAgIGlmICghcGFydHMgfHwgcGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0gSlNPTi5wYXJzZShiNjREZWNvZGVVbmljb2RlKHBhcnRzWzFdKSk7XG4gICAgICAgIHJldHVybiBqc29uRGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxudHlwZSBUZWxlbWV0cnlFdmVudFR5cGUgPSAnYXBwVXNlclR1cm5zdGlsZScgfCAnbWFwLmxvYWQnO1xuXG5jbGFzcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgZXZlbnREYXRhOiBhbnk7XG4gICAgYW5vbklkOiA/c3RyaW5nO1xuICAgIHF1ZXVlOiBBcnJheTxhbnk+O1xuICAgIHR5cGU6IFRlbGVtZXRyeUV2ZW50VHlwZTtcbiAgICBwZW5kaW5nUmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgX2N1c3RvbUFjY2Vzc1Rva2VuOiA/c3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVGVsZW1ldHJ5RXZlbnRUeXBlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYW5vbklkID0gbnVsbDtcbiAgICAgICAgdGhpcy5ldmVudERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTdG9yYWdlS2V5KGRvbWFpbjogP3N0cmluZykge1xuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBsZXQgdSA9ICcnO1xuICAgICAgICBpZiAodG9rZW5EYXRhICYmIHRva2VuRGF0YVsndSddKSB7XG4gICAgICAgICAgICB1ID0gYjY0RW5jb2RlVW5pY29kZSh0b2tlbkRhdGFbJ3UnXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1ID0gY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9tYWluID9cbiAgICAgICAgICAgIGAke3RlbGVtRXZlbnRLZXl9LiR7ZG9tYWlufToke3V9YCA6XG4gICAgICAgICAgICBgJHt0ZWxlbUV2ZW50S2V5fToke3V9YDtcbiAgICB9XG5cbiAgICBmZXRjaEV2ZW50RGF0YSgpIHtcbiAgICAgICAgY29uc3QgaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUgPSBzdG9yYWdlQXZhaWxhYmxlKCdsb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IHRoaXMuZ2V0U3RvcmFnZUtleSgpO1xuICAgICAgICBjb25zdCB1dWlkS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCd1dWlkJyk7XG5cbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odXVpZEtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHV1aWQpIHRoaXMuYW5vbklkID0gdXVpZDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnVW5hYmxlIHRvIHJlYWQgZnJvbSBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVFdmVudERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlID0gc3RvcmFnZUF2YWlsYWJsZSgnbG9jYWxTdG9yYWdlJyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSAgdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG4gICAgICAgIGNvbnN0IHV1aWRLZXkgPSB0aGlzLmdldFN0b3JhZ2VLZXkoJ3V1aWQnKTtcbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh1dWlkS2V5LCB0aGlzLmFub25JZCk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXZlbnREYXRhKS5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5ldmVudERhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoJ1VuYWJsZSB0byB3cml0ZSB0byBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKF86ID9zdHJpbmcpIHt9XG5cbiAgICAvKlxuICAgICogSWYgYW55IGV2ZW50IGRhdGEgc2hvdWxkIGJlIHBlcnNpc3RlZCBhZnRlciB0aGUgUE9TVCByZXF1ZXN0LCB0aGUgY2FsbGJhY2sgc2hvdWxkIG1vZGlmeSBldmVudERhdGFgXG4gICAgKiB0byB0aGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHNhdmVkLiBGb3IgdGhpcyByZWFzb24sIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBwcmlvciB0byB0aGUgY2FsbFxuICAgICogdG8gVGVsZW1ldHJ5RXZlbnQjc2F2ZURhdGFcbiAgICAqL1xuICAgIHBvc3RFdmVudCh0aW1lc3RhbXA6IG51bWJlciwgYWRkaXRpb25hbFBheWxvYWQ6IHtbc3RyaW5nXTogYW55fSwgY2FsbGJhY2s6IChlcnI6ID9FcnJvcikgPT4gdm9pZCwgY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICghY29uZmlnLkVWRU5UU19VUkwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXZlbnRzVXJsT2JqZWN0OiBVcmxPYmplY3QgPSBwYXJzZVVybChjb25maWcuRVZFTlRTX1VSTCk7XG4gICAgICAgIGV2ZW50c1VybE9iamVjdC5wYXJhbXMucHVzaChgYWNjZXNzX3Rva2VuPSR7Y3VzdG9tQWNjZXNzVG9rZW4gfHwgY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJ31gKTtcblxuICAgICAgICBjb25zdCBwYXlsb2FkOiBPYmplY3QgPSB7XG4gICAgICAgICAgICBldmVudDogdGhpcy50eXBlLFxuICAgICAgICAgICAgY3JlYXRlZDogbmV3IERhdGUodGltZXN0YW1wKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgc2RrSWRlbnRpZmllcjogJ21hcGJveC1nbC1qcycsXG4gICAgICAgICAgICBzZGtWZXJzaW9uLFxuICAgICAgICAgICAgc2t1SWQ6IFNLVV9JRCxcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy5hbm9uSWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmaW5hbFBheWxvYWQgPSBhZGRpdGlvbmFsUGF5bG9hZCA/IGV4dGVuZChwYXlsb2FkLCBhZGRpdGlvbmFsUGF5bG9hZCkgOiBwYXlsb2FkO1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBSZXF1ZXN0UGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIHVybDogZm9ybWF0VXJsKGV2ZW50c1VybE9iamVjdCksXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyAvL1NraXAgdGhlIHByZS1mbGlnaHQgT1BUSU9OUyByZXF1ZXN0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoW2ZpbmFsUGF5bG9hZF0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IHBvc3REYXRhKHJlcXVlc3QsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNhdmVFdmVudERhdGEoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcXVldWVSZXF1ZXN0KGV2ZW50OiBudW1iZXIgfCB7aWQ6IG51bWJlciwgdGltZXN0YW1wOiBudW1iZXJ9LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hcExvYWRFdmVudCBleHRlbmRzIFRlbGVtZXRyeUV2ZW50IHtcbiAgICArc3VjY2Vzczoge1tudW1iZXJdOiBib29sZWFufTtcbiAgICBza3VUb2tlbjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdtYXAubG9hZCcpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB7fTtcbiAgICAgICAgdGhpcy5za3VUb2tlbiA9ICcnO1xuICAgIH1cblxuICAgIHBvc3RNYXBMb2FkRXZlbnQodGlsZVVybHM6IEFycmF5PHN0cmluZz4sIG1hcElkOiBudW1iZXIsIHNrdVRva2VuOiBzdHJpbmcsIGN1c3RvbUFjY2Vzc1Rva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIHRoaXMuc2t1VG9rZW4gPSBza3VUb2tlbjtcblxuICAgICAgICBpZiAoY29uZmlnLkVWRU5UU19VUkwgJiZcbiAgICAgICAgICAgIGN1c3RvbUFjY2Vzc1Rva2VuIHx8IGNvbmZpZy5BQ0NFU1NfVE9LRU4gJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGlsZVVybHMpICYmXG4gICAgICAgICAgICB0aWxlVXJscy5zb21lKHVybCA9PiBpc01hcGJveFVSTCh1cmwpIHx8IGlzTWFwYm94SFRUUFVSTCh1cmwpKSkge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZVJlcXVlc3Qoe2lkOiBtYXBJZCwgdGltZXN0YW1wOiBEYXRlLm5vdygpfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuPzogP3N0cmluZykge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdCB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB7aWQsIHRpbWVzdGFtcH0gPSB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgICAgLy8gT25seSBvbmUgbG9hZCBldmVudCBzaG91bGQgZmlyZSBwZXIgbWFwXG4gICAgICAgIGlmIChpZCAmJiB0aGlzLnN1Y2Nlc3NbaWRdKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLmFub25JZCkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEV2ZW50RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVV1aWQodGhpcy5hbm9uSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmFub25JZCA9IHV1aWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zdEV2ZW50KHRpbWVzdGFtcCwge3NrdVRva2VuOiB0aGlzLnNrdVRva2VufSwgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHRoaXMuc3VjY2Vzc1tpZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHVybnN0aWxlRXZlbnQgZXh0ZW5kcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgY29uc3RydWN0b3IoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCdhcHBVc2VyVHVybnN0aWxlJyk7XG4gICAgICAgIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuID0gY3VzdG9tQWNjZXNzVG9rZW47XG4gICAgfVxuXG4gICAgcG9zdFR1cm5zdGlsZUV2ZW50KHRpbGVVcmxzOiBBcnJheTxzdHJpbmc+LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIGlmIChjb25maWcuRVZFTlRTX1VSTCAmJlxuICAgICAgICAgICAgY29uZmlnLkFDQ0VTU19UT0tFTiAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aWxlVXJscykgJiZcbiAgICAgICAgICAgIHRpbGVVcmxzLnNvbWUodXJsID0+IGlzTWFwYm94VVJMKHVybCkgfHwgaXNNYXBib3hIVFRQVVJMKHVybCkpKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlUmVxdWVzdChEYXRlLm5vdygpLCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0IHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYW5vbklkIHx8ICF0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcyB8fCAhdGhpcy5ldmVudERhdGEudG9rZW5VKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0aGlzLmZldGNoRXZlbnREYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBjb25zdCB0b2tlblUgPSB0b2tlbkRhdGEgPyB0b2tlbkRhdGFbJ3UnXSA6IGNvbmZpZy5BQ0NFU1NfVE9LRU47XG4gICAgICAgIC8vUmVzZXQgZXZlbnQgZGF0YSBjYWNoZSBpZiB0aGUgYWNjZXNzIHRva2VuIG93bmVyIGNoYW5nZWQuXG4gICAgICAgIGxldCBkdWVGb3JFdmVudCA9IHRva2VuVSAhPT0gdGhpcy5ldmVudERhdGEudG9rZW5VO1xuXG4gICAgICAgIGlmICghdmFsaWRhdGVVdWlkKHRoaXMuYW5vbklkKSkge1xuICAgICAgICAgICAgdGhpcy5hbm9uSWQgPSB1dWlkKCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0VXBkYXRlID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAvLyBSZWNvcmQgdHVybnN0aWxlIGV2ZW50IG9uY2UgcGVyIGNhbGVuZGFyIGRheS5cbiAgICAgICAgaWYgKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0VXBkYXRlID0gbmV3IERhdGUodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgbmV4dERhdGUgPSBuZXcgRGF0ZShuZXh0VXBkYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGRheXNFbGFwc2VkID0gKG5leHRVcGRhdGUgLSB0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcykgLyAoMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IGR1ZUZvckV2ZW50IHx8IGRheXNFbGFwc2VkID49IDEgfHwgZGF5c0VsYXBzZWQgPCAtMSB8fCBsYXN0VXBkYXRlLmdldERhdGUoKSAhPT0gbmV4dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHVlRm9yRXZlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkdWVGb3JFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvc3RFdmVudChuZXh0VXBkYXRlLCB7XCJlbmFibGVkLnRlbGVtZXRyeVwiOiBmYWxzZX0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MgPSBuZXh0VXBkYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnREYXRhLnRva2VuVSA9IHRva2VuVTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuY29uc3QgdHVybnN0aWxlRXZlbnRfID0gbmV3IFR1cm5zdGlsZUV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdFR1cm5zdGlsZUV2ZW50ID0gdHVybnN0aWxlRXZlbnRfLnBvc3RUdXJuc3RpbGVFdmVudC5iaW5kKHR1cm5zdGlsZUV2ZW50Xyk7XG5cbmNvbnN0IG1hcExvYWRFdmVudF8gPSBuZXcgTWFwTG9hZEV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdE1hcExvYWRFdmVudCA9IG1hcExvYWRFdmVudF8ucG9zdE1hcExvYWRFdmVudC5iaW5kKG1hcExvYWRFdmVudF8pO1xuXG4vKioqKiogRU5EIFdBUk5JTkcgLSBSRU1PVkFMIE9SIE1PRElGSUNBVElPTiBPRiBUSEVcblBSRUNFRElORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZSwgcGFyc2VDYWNoZUNvbnRyb2x9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBDQUNIRV9OQU1FID0gJ21hcGJveC10aWxlcyc7XG5sZXQgY2FjaGVMaW1pdCA9IDUwMDsgLy8gNTBNQiAvICgxMDBLQi90aWxlKSB+PSA1MDAgdGlsZXNcbmxldCBjYWNoZUNoZWNrVGhyZXNob2xkID0gNTA7XG5cbmNvbnN0IE1JTl9USU1FX1VOVElMX0VYUElSWSA9IDEwMDAgKiA2MCAqIDc7IC8vIDcgbWludXRlcy4gU2tpcCBjYWNoaW5nIHRpbGVzIHdpdGggYSBzaG9ydCBlbm91Z2ggbWF4IGFnZS5cblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VPcHRpb25zID0ge1xuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIHN0YXR1c1RleHQ6IHN0cmluZyxcbiAgICBoZWFkZXJzOiB3aW5kb3cuSGVhZGVyc1xufTtcblxubGV0IHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtO1xuZnVuY3Rpb24gcHJlcGFyZUJvZHkocmVzcG9uc2U6IFJlc3BvbnNlLCBjYWxsYmFjaykge1xuICAgIGlmIChyZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgUmVzcG9uc2UobmV3IFJlYWRhYmxlU3RyZWFtKCkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICByZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEVkZ2VcbiAgICAgICAgICAgIHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VDb25zdHJ1Y3RvclN1cHBvcnRzUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2UuYm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UuYmxvYigpLnRoZW4oY2FsbGJhY2spO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlUHV0KHJlcXVlc3Q6IFJlcXVlc3QsIHJlc3BvbnNlOiBSZXNwb25zZSwgcmVxdWVzdFRpbWU6IG51bWJlcikge1xuICAgIGlmICghd2luZG93LmNhY2hlcykgcmV0dXJuO1xuXG4gICAgY29uc3Qgb3B0aW9uczogUmVzcG9uc2VPcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogbmV3IHdpbmRvdy5IZWFkZXJzKClcbiAgICB9O1xuICAgIHJlc3BvbnNlLmhlYWRlcnMuZm9yRWFjaCgodiwgaykgPT4gb3B0aW9ucy5oZWFkZXJzLnNldChrLCB2KSk7XG5cbiAgICBjb25zdCBjYWNoZUNvbnRyb2wgPSBwYXJzZUNhY2hlQ29udHJvbChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpIHx8ICcnKTtcbiAgICBpZiAoY2FjaGVDb250cm9sWyduby1zdG9yZSddKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNhY2hlQ29udHJvbFsnbWF4LWFnZSddKSB7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVycy5zZXQoJ0V4cGlyZXMnLCBuZXcgRGF0ZShyZXF1ZXN0VGltZSArIGNhY2hlQ29udHJvbFsnbWF4LWFnZSddICogMTAwMCkudG9VVENTdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVVudGlsRXhwaXJ5ID0gbmV3IERhdGUob3B0aW9ucy5oZWFkZXJzLmdldCgnRXhwaXJlcycpKS5nZXRUaW1lKCkgLSByZXF1ZXN0VGltZTtcbiAgICBpZiAodGltZVVudGlsRXhwaXJ5IDwgTUlOX1RJTUVfVU5USUxfRVhQSVJZKSByZXR1cm47XG5cbiAgICBwcmVwYXJlQm9keShyZXNwb25zZSwgYm9keSA9PiB7XG4gICAgICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gbmV3IHdpbmRvdy5SZXNwb25zZShib2R5LCBvcHRpb25zKTtcblxuICAgICAgICB3aW5kb3cuY2FjaGVzLm9wZW4oQ0FDSEVfTkFNRSlcbiAgICAgICAgICAgIC50aGVuKGNhY2hlID0+IGNhY2hlLnB1dChzdHJpcFF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnVybCksIGNsb25lZFJlc3BvbnNlKSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHdhcm5PbmNlKGUubWVzc2FnZSkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzdHJpcFF1ZXJ5UGFyYW1ldGVycyh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICByZXR1cm4gc3RhcnQgPCAwID8gdXJsIDogdXJsLnNsaWNlKDAsIHN0YXJ0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlR2V0KHJlcXVlc3Q6IFJlcXVlc3QsIGNhbGxiYWNrOiAoZXJyb3I6ID9hbnksIHJlc3BvbnNlOiA/UmVzcG9uc2UsIGZyZXNoOiA/Ym9vbGVhbikgPT4gdm9pZCkge1xuICAgIGlmICghd2luZG93LmNhY2hlcykgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgY29uc3Qgc3RyaXBwZWRVUkwgPSBzdHJpcFF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnVybCk7XG5cbiAgICB3aW5kb3cuY2FjaGVzLm9wZW4oQ0FDSEVfTkFNRSlcbiAgICAgICAgLnRoZW4oY2FjaGUgPT4ge1xuICAgICAgICAgICAgLy8gbWFudWFsbHkgc3RyaXAgVVJMIGluc3RlYWQgb2YgYGlnbm9yZVNlYXJjaDogdHJ1ZWAgYmVjYXVzZSBvZiBhIGtub3duXG4gICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSBpc3N1ZSBpbiBDaHJvbWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzg0MzFcbiAgICAgICAgICAgIGNhY2hlLm1hdGNoKHN0cmlwcGVkVVJMKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJlc2ggPSBpc0ZyZXNoKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWluc2VydCBpbnRvIGNhY2hlIHNvIHRoYXQgb3JkZXIgb2Yga2V5cyBpbiB0aGUgY2FjaGUgaXMgdGhlIG9yZGVyIG9mIGFjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIG1ha2VzIHRoZSBjYWNoZSBhIExSVSBpbnN0ZWFkIG9mIGEgRklGTyBjYWNoZS5cbiAgICAgICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKHN0cmlwcGVkVVJMKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyZXNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5wdXQoc3RyaXBwZWRVUkwsIHJlc3BvbnNlLmNsb25lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UsIGZyZXNoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG5cbn1cblxuZnVuY3Rpb24gaXNGcmVzaChyZXNwb25zZSkge1xuICAgIGlmICghcmVzcG9uc2UpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSk7XG4gICAgY29uc3QgY2FjaGVDb250cm9sID0gcGFyc2VDYWNoZUNvbnRyb2wocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NhY2hlLUNvbnRyb2wnKSB8fCAnJyk7XG4gICAgcmV0dXJuIGV4cGlyZXMgPiBEYXRlLm5vdygpICYmICFjYWNoZUNvbnRyb2xbJ25vLWNhY2hlJ107XG59XG5cbi8vIGBJbmZpbml0eWAgdHJpZ2dlcnMgYSBjYWNoZSBjaGVjayBhZnRlciB0aGUgZmlyc3QgdGlsZSBpcyBsb2FkZWRcbi8vIHNvIHRoYXQgYSBjaGVjayBpcyBydW4gYXQgbGVhc3Qgb25jZSBvbiBlYWNoIHBhZ2UgbG9hZC5cbmxldCBnbG9iYWxFbnRyeUNvdW50ZXIgPSBJbmZpbml0eTtcblxuLy8gVGhlIGNhY2hlIGNoZWNrIGdldHMgcnVuIG9uIGEgd29ya2VyLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXRcbi8vIHByb2ZpbGluZyBzb21ldGltZXMgc2hvd3MgdGhpcyBhcyB0YWtpbmcgdXAgc2lnbmlmaWNhbnQgdGltZSBvbiB0aGVcbi8vIHRocmVhZCBpdCBnZXRzIGNhbGxlZCBmcm9tLiBBbmQgc29tZXRpbWVzIGl0IGRvZXNuJ3QuIEl0ICptYXkqIGJlXG4vLyBmaW5lIHRvIHJ1biB0aGlzIG9uIHRoZSBtYWluIHRocmVhZCBidXQgb3V0IG9mIGNhdXRpb24gdGhpcyBpcyBiZWluZ1xuLy8gZGlzcGF0Y2hlZCBvbiBhIHdvcmtlci4gVGhpcyBjYW4gYmUgaW52ZXN0aWdhdGVkIGZ1cnRoZXIgaW4gdGhlIGZ1dHVyZS5cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUVudHJ5UG9zc2libHlBZGRlZChkaXNwYXRjaGVyOiBEaXNwYXRjaGVyKSB7XG4gICAgZ2xvYmFsRW50cnlDb3VudGVyKys7XG4gICAgaWYgKGdsb2JhbEVudHJ5Q291bnRlciA+IGNhY2hlQ2hlY2tUaHJlc2hvbGQpIHtcbiAgICAgICAgZGlzcGF0Y2hlci5nZXRBY3RvcigpLnNlbmQoJ2VuZm9yY2VDYWNoZVNpemVMaW1pdCcsIGNhY2hlTGltaXQpO1xuICAgICAgICBnbG9iYWxFbnRyeUNvdW50ZXIgPSAwO1xuICAgIH1cbn1cblxuLy8gcnVucyBvbiB3b3JrZXIsIHNlZSBhYm92ZSBjb21tZW50XG5leHBvcnQgZnVuY3Rpb24gZW5mb3JjZUNhY2hlU2l6ZUxpbWl0KGxpbWl0OiBudW1iZXIpIHtcbiAgICBpZiAoIXdpbmRvdy5jYWNoZXMpIHJldHVybjtcbiAgICB3aW5kb3cuY2FjaGVzLm9wZW4oQ0FDSEVfTkFNRSlcbiAgICAgICAgLnRoZW4oY2FjaGUgPT4ge1xuICAgICAgICAgICAgY2FjaGUua2V5cygpLnRoZW4oa2V5cyA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIGxpbWl0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGtleXNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyVGlsZUNhY2hlKGNhbGxiYWNrPzogKGVycjogP0Vycm9yKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHdpbmRvdy5jYWNoZXMuZGVsZXRlKENBQ0hFX05BTUUpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBwcm9taXNlLmNhdGNoKGNhbGxiYWNrKS50aGVuKCgpID0+IGNhbGxiYWNrKCkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENhY2hlTGltaXRzKGxpbWl0OiBudW1iZXIsIGNoZWNrVGhyZXNob2xkOiBudW1iZXIpIHtcbiAgICBjYWNoZUxpbWl0ID0gbGltaXQ7XG4gICAgY2FjaGVDaGVja1RocmVzaG9sZCA9IGNoZWNrVGhyZXNob2xkO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuL3dpbmRvdyc7XG5pbXBvcnQge2V4dGVuZCwgd2Fybk9uY2V9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge2lzTWFwYm94SFRUUFVSTCwgaGFzQ2FjaGVEZWZlYXRpbmdTa3V9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtjYWNoZUdldCwgY2FjaGVQdXR9IGZyb20gJy4vdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgYSByZXNvdXJjZS5cbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJlc291cmNlVHlwZSA9IHtcbiAgICBVbmtub3duOiAnVW5rbm93bicsXG4gICAgU3R5bGU6ICdTdHlsZScsXG4gICAgU291cmNlOiAnU291cmNlJyxcbiAgICBUaWxlOiAnVGlsZScsXG4gICAgR2x5cGhzOiAnR2x5cGhzJyxcbiAgICBTcHJpdGVJbWFnZTogJ1Nwcml0ZUltYWdlJyxcbiAgICBTcHJpdGVKU09OOiAnU3ByaXRlSlNPTicsXG4gICAgSW1hZ2U6ICdJbWFnZSdcbn07XG5leHBvcnQge1Jlc291cmNlVHlwZX07XG5cbmlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgT2JqZWN0LmZyZWV6ZShSZXNvdXJjZVR5cGUpO1xufVxuXG4vKipcbiAqIEEgYFJlcXVlc3RQYXJhbWV0ZXJzYCBvYmplY3QgdG8gYmUgcmV0dXJuZWQgZnJvbSBNYXAub3B0aW9ucy50cmFuc2Zvcm1SZXF1ZXN0IGNhbGxiYWNrcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlcXVlc3RQYXJhbWV0ZXJzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcmVxdWVzdGVkLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGhlYWRlcnMgVGhlIGhlYWRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNyZWRlbnRpYWxzIGAnc2FtZS1vcmlnaW4nfCdpbmNsdWRlJ2AgVXNlICdpbmNsdWRlJyB0byBzZW5kIGNvb2tpZXMgd2l0aCBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVlc3RQYXJhbWV0ZXJzID0ge1xuICAgIHVybDogc3RyaW5nLFxuICAgIGhlYWRlcnM/OiBPYmplY3QsXG4gICAgbWV0aG9kPzogJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyxcbiAgICBib2R5Pzogc3RyaW5nLFxuICAgIHR5cGU/OiAnc3RyaW5nJyB8ICdqc29uJyB8ICdhcnJheUJ1ZmZlcicsXG4gICAgY3JlZGVudGlhbHM/OiAnc2FtZS1vcmlnaW4nIHwgJ2luY2x1ZGUnLFxuICAgIGNvbGxlY3RSZXNvdXJjZVRpbWluZz86IGJvb2xlYW5cbn07XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ2FsbGJhY2s8VD4gPSAoZXJyb3I6ID9FcnJvciwgZGF0YTogP1QsIGNhY2hlQ29udHJvbDogP3N0cmluZywgZXhwaXJlczogP3N0cmluZykgPT4gdm9pZDtcblxuY2xhc3MgQUpBWEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwMSAmJiBpc01hcGJveEhUVFBVUkwodXJsKSkge1xuICAgICAgICAgICAgbWVzc2FnZSArPSAnOiB5b3UgbWF5IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCBNYXBib3ggYWNjZXNzIHRva2VuLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzJztcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgICAgIC8vIHdvcmsgYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vUmljaC1IYXJyaXMvYnVibGUvaXNzdWVzLzQwXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfSAoJHt0aGlzLnN0YXR1c30pOiAke3RoaXMudXJsfWA7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1dvcmtlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuXG4vLyBFbnN1cmUgdGhhdCB3ZSdyZSBzZW5kaW5nIHRoZSBjb3JyZWN0IHJlZmVycmVyIGZyb20gYmxvYiBVUkwgd29ya2VyIGJ1bmRsZXMuXG4vLyBGb3IgZmlsZXMgbG9hZGVkIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLCBgbG9jYXRpb24ub3JpZ2luYCB3aWxsIGJlIHNldFxuLy8gdG8gdGhlIHN0cmluZyghKSBcIm51bGxcIiAoRmlyZWZveCksIG9yIFwiZmlsZTovL1wiIChDaHJvbWUsIFNhZmFyaSwgRWRnZSwgSUUpLFxuLy8gYW5kIHdlIHdpbGwgc2V0IGFuIGVtcHR5IHJlZmVycmVyLiBPdGhlcndpc2UsIHdlJ3JlIHVzaW5nIHRoZSBkb2N1bWVudCdzIFVSTC5cbi8qIGdsb2JhbCBzZWxmLCBXb3JrZXJHbG9iYWxTY29wZSAqL1xuZXhwb3J0IGNvbnN0IGdldFJlZmVycmVyID0gaXNXb3JrZXIoKSA/XG4gICAgKCkgPT4gc2VsZi53b3JrZXIgJiYgc2VsZi53b3JrZXIucmVmZXJyZXIgOlxuICAgICgpID0+ICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09ICdibG9iOicgPyB3aW5kb3cucGFyZW50IDogd2luZG93KS5sb2NhdGlvbi5ocmVmO1xuXG4vLyBEZXRlcm1pbmVzIHdoZXRoZXIgYSBVUkwgaXMgYSBmaWxlOi8vIFVSTC4gVGhpcyBpcyBvYnZpb3VzbHkgdGhlIGNhc2UgaWYgaXQgYmVnaW5zXG4vLyB3aXRoIGZpbGU6Ly8uIFJlbGF0aXZlIFVSTHMgYXJlIGFsc28gZmlsZTovLyBVUkxzIGlmZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnQgd2FzIGxvYWRlZFxuLy8gdmlhIGEgZmlsZTovLyBVUkwuXG5jb25zdCBpc0ZpbGVVUkwgPSB1cmwgPT4gL15maWxlOi8udGVzdCh1cmwpIHx8ICgvXmZpbGU6Ly50ZXN0KGdldFJlZmVycmVyKCkpICYmICEvXlxcdys6Ly50ZXN0KHVybCkpO1xuXG5mdW5jdGlvbiBtYWtlRmV0Y2hSZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8YW55Pik6IENhbmNlbGFibGUge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgd2luZG93LkFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgd2luZG93LlJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnMudXJsLCB7XG4gICAgICAgIG1ldGhvZDogcmVxdWVzdFBhcmFtZXRlcnMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgICBib2R5OiByZXF1ZXN0UGFyYW1ldGVycy5ib2R5LFxuICAgICAgICBjcmVkZW50aWFsczogcmVxdWVzdFBhcmFtZXRlcnMuY3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnMsXG4gICAgICAgIHJlZmVycmVyOiBnZXRSZWZlcnJlcigpLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsXG4gICAgfSk7XG4gICAgbGV0IGNvbXBsZXRlID0gZmFsc2U7XG4gICAgbGV0IGFib3J0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNhY2hlSWdub3JpbmdTZWFyY2ggPSBoYXNDYWNoZURlZmVhdGluZ1NrdShyZXF1ZXN0LnVybCk7XG5cbiAgICBpZiAocmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVPckZldGNoID0gKGVyciwgY2FjaGVkUmVzcG9uc2UsIHJlc3BvbnNlSXNGcmVzaCkgPT4ge1xuICAgICAgICBpZiAoYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIC8vIERvIGZldGNoIGluIGNhc2Ugb2YgY2FjaGUgZXJyb3IuXG4gICAgICAgICAgICAvLyBIVFRQIHBhZ2VzIGluIEVkZ2UgdHJpZ2dlciBhIHNlY3VyaXR5IGVycm9yIHRoYXQgY2FuIGJlIGlnbm9yZWQuXG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdTZWN1cml0eUVycm9yJykge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FjaGVkUmVzcG9uc2UgJiYgcmVzcG9uc2VJc0ZyZXNoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluaXNoUmVxdWVzdChjYWNoZWRSZXNwb25zZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FjaGVkUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vIFdlIGNhbid0IGRvIHJldmFsaWRhdGlvbiB3aXRoICdJZi1Ob25lLU1hdGNoJyBiZWNhdXNlIHRoZW4gdGhlXG4gICAgICAgICAgICAvLyByZXF1ZXN0IGRvZXNuJ3QgaGF2ZSBzaW1wbGUgY29ycyBoZWFkZXJzLlxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHdpbmRvdy5mZXRjaChyZXF1ZXN0KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlYWJsZVJlc3BvbnNlID0gY2FjaGVJZ25vcmluZ1NlYXJjaCA/IHJlc3BvbnNlLmNsb25lKCkgOiBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaW5pc2hSZXF1ZXN0KHJlc3BvbnNlLCBjYWNoZWFibGVSZXNwb25zZSwgcmVxdWVzdFRpbWUpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgQUpBWEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHJlc3BvbnNlLnN0YXR1cywgcmVxdWVzdFBhcmFtZXRlcnMudXJsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAyMCkge1xuICAgICAgICAgICAgICAgIC8vIHNpbGVuY2UgZXhwZWN0ZWQgQWJvcnRFcnJvclxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBmaW5pc2hSZXF1ZXN0ID0gKHJlc3BvbnNlLCBjYWNoZWFibGVSZXNwb25zZSwgcmVxdWVzdFRpbWUpID0+IHtcbiAgICAgICAgKFxuICAgICAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2FycmF5QnVmZmVyJyA/IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkgOlxuICAgICAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2pzb24nID8gcmVzcG9uc2UuanNvbigpIDpcbiAgICAgICAgICAgIHJlc3BvbnNlLnRleHQoKVxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoY2FjaGVhYmxlUmVzcG9uc2UgJiYgcmVxdWVzdFRpbWUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcmVzcG9uc2UgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgY2FjaGUgYWZ0ZXIgaXQgaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAgICAgICAgICAgIC8vIFVudGlsIGl0IGlzIGZ1bGx5IGxvYWRlZCB0aGVyZSBpcyBhIGNoYW5jZSBpdCB3aWxsIGJlIGFib3J0ZWQuIEFib3J0aW5nIHdoaWxlXG4gICAgICAgICAgICAgICAgLy8gcmVhZGluZyB0aGUgYm9keSBjYW4gY2F1c2UgdGhlIGNhY2hlIGluc2VydGlvbiB0byBlcnJvci4gV2UgY291bGQgY2F0Y2ggdGhpcyBlcnJvclxuICAgICAgICAgICAgICAgIC8vIGluIG1vc3QgYnJvd3NlcnMgYnV0IGluIEZpcmVmb3ggaXQgc2VlbXMgdG8gc29tZXRpbWVzIGNyYXNoIHRoZSB0YWIuIEFkZGluZ1xuICAgICAgICAgICAgICAgIC8vIGl0IHRvIHRoZSBjYWNoZSBoZXJlIGF2b2lkcyB0aGF0IGVycm9yLlxuICAgICAgICAgICAgICAgIGNhY2hlUHV0KHJlcXVlc3QsIGNhY2hlYWJsZVJlc3BvbnNlLCByZXF1ZXN0VGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDYWNoZS1Db250cm9sJyksIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdFeHBpcmVzJykpO1xuICAgICAgICB9KS5jYXRjaChlcnIgPT4gY2FsbGJhY2sobmV3IEVycm9yKGVyci5tZXNzYWdlKSkpO1xuICAgIH07XG5cbiAgICBpZiAoY2FjaGVJZ25vcmluZ1NlYXJjaCkge1xuICAgICAgICBjYWNoZUdldChyZXF1ZXN0LCB2YWxpZGF0ZU9yRmV0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRlT3JGZXRjaChudWxsLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4ge1xuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFjb21wbGV0ZSkgY29udHJvbGxlci5hYm9ydCgpO1xuICAgIH19O1xufVxuXG5mdW5jdGlvbiBtYWtlWE1MSHR0cFJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxhbnk+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHhoci5vcGVuKHJlcXVlc3RQYXJhbWV0ZXJzLm1ldGhvZCB8fCAnR0VUJywgcmVxdWVzdFBhcmFtZXRlcnMudXJsLCB0cnVlKTtcbiAgICBpZiAocmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2FycmF5QnVmZmVyJykge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgICB9XG4gICAgZm9yIChjb25zdCBrIGluIHJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnMpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaywgcmVxdWVzdFBhcmFtZXRlcnMuaGVhZGVyc1trXSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnanNvbicpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICd0ZXh0JztcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgfVxuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSByZXF1ZXN0UGFyYW1ldGVycy5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnO1xuICAgIHhoci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoeGhyLnN0YXR1c1RleHQpKTtcbiAgICB9O1xuICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICgoKHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDApIHx8IHhoci5zdGF0dXMgPT09IDApICYmIHhoci5yZXNwb25zZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IGRhdGE6IG1peGVkID0geGhyLnJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdqc29uJykge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG1hbnVhbGx5IHBhcnNpbmcgSlNPTiBoZXJlIHRvIGdldCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YSwgeGhyLmdldFJlc3BvbnNlSGVhZGVyKCdDYWNoZS1Db250cm9sJyksIHhoci5nZXRSZXNwb25zZUhlYWRlcignRXhwaXJlcycpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBBSkFYRXJyb3IoeGhyLnN0YXR1c1RleHQsIHhoci5zdGF0dXMsIHJlcXVlc3RQYXJhbWV0ZXJzLnVybCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB4aHIuc2VuZChyZXF1ZXN0UGFyYW1ldGVycy5ib2R5KTtcbiAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4geGhyLmFib3J0KCl9O1xufVxuXG5leHBvcnQgY29uc3QgbWFrZVJlcXVlc3QgPSBmdW5jdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPGFueT4pOiBDYW5jZWxhYmxlIHtcbiAgICAvLyBXZSdyZSB0cnlpbmcgdG8gdXNlIHRoZSBGZXRjaCBBUEkgaWYgcG9zc2libGUuIEhvd2V2ZXIsIGluIHNvbWUgc2l0dWF0aW9ucyB3ZSBjYW4ndCB1c2UgaXQ6XG4gICAgLy8gLSBJRTExIGRvZXNuJ3Qgc3VwcG9ydCBpdCBhdCBhbGwuIEluIHRoaXMgY2FzZSwgd2UgZGlzcGF0Y2ggdGhlIHJlcXVlc3QgdG8gdGhlIG1haW4gdGhyZWFkIHNvXG4gICAgLy8gICB0aGF0IHdlIGNhbiBnZXQgYW4gYWNjcnVhdGUgcmVmZXJyZXIgaGVhZGVyLlxuICAgIC8vIC0gU2FmYXJpIGV4cG9zZXMgd2luZG93LkFib3J0Q29udHJvbGxlciwgYnV0IGl0IGRvZXNuJ3Qgd29yayBhY3R1YWxseSBhYm9ydCBhbnkgcmVxdWVzdHMgaW5cbiAgICAvLyAgIHNvbWUgdmVyc2lvbnMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTgwI2MyKVxuICAgIC8vIC0gUmVxdWVzdHMgZm9yIHJlc291cmNlcyB3aXRoIHRoZSBmaWxlOi8vIFVSSSBzY2hlbWUgZG9uJ3Qgd29yayB3aXRoIHRoZSBGZXRjaCBBUEkgZWl0aGVyLiBJblxuICAgIC8vICAgdGhpcyBjYXNlIHdlIHVuY29uZGl0aW9uYWxseSB1c2UgWEhSIG9uIHRoZSBjdXJyZW50IHRocmVhZCBzaW5jZSByZWZlcnJlcnMgZG9uJ3QgbWF0dGVyLlxuICAgIGlmICghaXNGaWxlVVJMKHJlcXVlc3RQYXJhbWV0ZXJzLnVybCkpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5mZXRjaCAmJiB3aW5kb3cuUmVxdWVzdCAmJiB3aW5kb3cuQWJvcnRDb250cm9sbGVyICYmIHdpbmRvdy5SZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnc2lnbmFsJykpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlRmV0Y2hSZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzV29ya2VyKCkgJiYgc2VsZi53b3JrZXIgJiYgc2VsZi53b3JrZXIuYWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLndvcmtlci5hY3Rvci5zZW5kKCdnZXRSZXNvdXJjZScsIHJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1ha2VYTUxIdHRwUmVxdWVzdChyZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEpTT04gPSBmdW5jdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPE9iamVjdD4pOiBDYW5jZWxhYmxlIHtcbiAgICByZXR1cm4gbWFrZVJlcXVlc3QoZXh0ZW5kKHJlcXVlc3RQYXJhbWV0ZXJzLCB7dHlwZTogJ2pzb24nfSksIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8QXJyYXlCdWZmZXI+KTogQ2FuY2VsYWJsZSB7XG4gICAgcmV0dXJuIG1ha2VSZXF1ZXN0KGV4dGVuZChyZXF1ZXN0UGFyYW1ldGVycywge3R5cGU6ICdhcnJheUJ1ZmZlcid9KSwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3REYXRhID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxzdHJpbmc+KTogQ2FuY2VsYWJsZSB7XG4gICAgcmV0dXJuIG1ha2VSZXF1ZXN0KGV4dGVuZChyZXF1ZXN0UGFyYW1ldGVycywge21ldGhvZDogJ1BPU1QnfSksIGNhbGxiYWNrKTtcbn07XG5cbmZ1bmN0aW9uIHNhbWVPcmlnaW4odXJsKSB7XG4gICAgY29uc3QgYTogSFRNTEFuY2hvckVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuaHJlZiA9IHVybDtcbiAgICByZXR1cm4gYS5wcm90b2NvbCA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICYmIGEuaG9zdCA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG59XG5cbmNvbnN0IHRyYW5zcGFyZW50UG5nVXJsID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRWVYyTmdBQUlBQUFVQUFhclZ5RkVBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmxldCBpbWFnZVF1ZXVlLCBudW1JbWFnZVJlcXVlc3RzO1xuZXhwb3J0IGNvbnN0IHJlc2V0SW1hZ2VSZXF1ZXN0UXVldWUgPSAoKSA9PiB7XG4gICAgaW1hZ2VRdWV1ZSA9IFtdO1xuICAgIG51bUltYWdlUmVxdWVzdHMgPSAwO1xufTtcbnJlc2V0SW1hZ2VSZXF1ZXN0UXVldWUoKTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogQ2FsbGJhY2s8SFRNTEltYWdlRWxlbWVudD4pOiBDYW5jZWxhYmxlIHtcbiAgICAvLyBsaW1pdCBjb25jdXJyZW50IGltYWdlIGxvYWRzIHRvIGhlbHAgd2l0aCByYXN0ZXIgc291cmNlcyBwZXJmb3JtYW5jZSBvbiBiaWcgc2NyZWVuc1xuICAgIGlmIChudW1JbWFnZVJlcXVlc3RzID49IGNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFMpIHtcbiAgICAgICAgY29uc3QgcXVldWVkID0ge1xuICAgICAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnMsXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIGNhbmNlbGxlZDogZmFsc2UsXG4gICAgICAgICAgICBjYW5jZWwoKSB7IHRoaXMuY2FuY2VsbGVkID0gdHJ1ZTsgfVxuICAgICAgICB9O1xuICAgICAgICBpbWFnZVF1ZXVlLnB1c2gocXVldWVkKTtcbiAgICAgICAgcmV0dXJuIHF1ZXVlZDtcbiAgICB9XG4gICAgbnVtSW1hZ2VSZXF1ZXN0cysrO1xuXG4gICAgbGV0IGFkdmFuY2VkID0gZmFsc2U7XG4gICAgY29uc3QgYWR2YW5jZUltYWdlUmVxdWVzdFF1ZXVlID0gKCkgPT4ge1xuICAgICAgICBpZiAoYWR2YW5jZWQpIHJldHVybjtcbiAgICAgICAgYWR2YW5jZWQgPSB0cnVlO1xuICAgICAgICBudW1JbWFnZVJlcXVlc3RzLS07XG4gICAgICAgIGFzc2VydChudW1JbWFnZVJlcXVlc3RzID49IDApO1xuICAgICAgICB3aGlsZSAoaW1hZ2VRdWV1ZS5sZW5ndGggJiYgbnVtSW1hZ2VSZXF1ZXN0cyA8IGNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGltYWdlUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHtyZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2ssIGNhbmNlbGxlZH0gPSByZXF1ZXN0O1xuICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmNhbmNlbCA9IGdldEltYWdlKHJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjaykuY2FuY2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIHJlcXVlc3QgdGhlIGltYWdlIHdpdGggWEhSIHRvIHdvcmsgYXJvdW5kIGNhY2hpbmcgaXNzdWVzXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8xNDcwXG4gICAgY29uc3QgcmVxdWVzdCA9IGdldEFycmF5QnVmZmVyKHJlcXVlc3RQYXJhbWV0ZXJzLCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9BcnJheUJ1ZmZlciwgY2FjaGVDb250cm9sOiA/c3RyaW5nLCBleHBpcmVzOiA/c3RyaW5nKSA9PiB7XG5cbiAgICAgICAgYWR2YW5jZUltYWdlUmVxdWVzdFF1ZXVlKCk7XG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQgPSBuZXcgd2luZG93LkltYWdlKCk7XG4gICAgICAgICAgICBjb25zdCBVUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG4gICAgICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGltZyk7XG4gICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWcuc3JjKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpbWcub25lcnJvciA9ICgpID0+IGNhbGxiYWNrKG5ldyBFcnJvcignQ291bGQgbm90IGxvYWQgaW1hZ2UuIFBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGEgc3VwcG9ydGVkIGltYWdlIHR5cGUgc3VjaCBhcyBQTkcgb3IgSlBFRy4gTm90ZSB0aGF0IFNWR3MgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgICAgICAgICAgY29uc3QgYmxvYjogQmxvYiA9IG5ldyB3aW5kb3cuQmxvYihbbmV3IFVpbnQ4QXJyYXkoZGF0YSldLCB7dHlwZTogJ2ltYWdlL3BuZyd9KTtcbiAgICAgICAgICAgIChpbWc6IGFueSkuY2FjaGVDb250cm9sID0gY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgKGltZzogYW55KS5leHBpcmVzID0gZXhwaXJlcztcbiAgICAgICAgICAgIGltZy5zcmMgPSBkYXRhLmJ5dGVMZW5ndGggPyBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpIDogdHJhbnNwYXJlbnRQbmdVcmw7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGNhbmNlbDogKCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGFkdmFuY2VJbWFnZVJlcXVlc3RRdWV1ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlbyA9IGZ1bmN0aW9uKHVybHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazxIVE1MVmlkZW9FbGVtZW50Pik6IENhbmNlbGFibGUge1xuICAgIGNvbnN0IHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xuICAgIHZpZGVvLm9ubG9hZHN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHZpZGVvKTtcbiAgICB9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzOiBIVE1MU291cmNlRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHVybHNbaV0pKSB7XG4gICAgICAgICAgICB2aWRlby5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xuICAgICAgICB9XG4gICAgICAgIHMuc3JjID0gdXJsc1tpXTtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQocyk7XG4gICAgfVxuICAgIHJldHVybiB7Y2FuY2VsOiAoKSA9PiB7fX07XG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4vdXRpbCc7XG5cbnR5cGUgTGlzdGVuZXIgPSAoT2JqZWN0KSA9PiBhbnk7XG50eXBlIExpc3RlbmVycyA9IHsgW3N0cmluZ106IEFycmF5PExpc3RlbmVyPiB9O1xuXG5mdW5jdGlvbiBfYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBMaXN0ZW5lciwgbGlzdGVuZXJMaXN0OiBMaXN0ZW5lcnMpIHtcbiAgICBjb25zdCBsaXN0ZW5lckV4aXN0cyA9IGxpc3RlbmVyTGlzdFt0eXBlXSAmJiBsaXN0ZW5lckxpc3RbdHlwZV0uaW5kZXhPZihsaXN0ZW5lcikgIT09IC0xO1xuICAgIGlmICghbGlzdGVuZXJFeGlzdHMpIHtcbiAgICAgICAgbGlzdGVuZXJMaXN0W3R5cGVdID0gbGlzdGVuZXJMaXN0W3R5cGVdIHx8IFtdO1xuICAgICAgICBsaXN0ZW5lckxpc3RbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBMaXN0ZW5lciwgbGlzdGVuZXJMaXN0OiBMaXN0ZW5lcnMpIHtcbiAgICBpZiAobGlzdGVuZXJMaXN0ICYmIGxpc3RlbmVyTGlzdFt0eXBlXSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3RlbmVyTGlzdFt0eXBlXS5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbGlzdGVuZXJMaXN0W3R5cGVdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudCB7XG4gICAgK3R5cGU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZywgZGF0YTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGRhdGEpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVycm9yRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICAgZXJyb3I6IEVycm9yO1xuXG4gICAgY29uc3RydWN0b3IoZXJyb3I6IEVycm9yLCBkYXRhOiBPYmplY3QgPSB7fSkge1xuICAgICAgICBzdXBlcignZXJyb3InLCBleHRlbmQoe2Vycm9yfSwgZGF0YSkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBNZXRob2RzIG1peGVkIGluIHRvIG90aGVyIGNsYXNzZXMgZm9yIGV2ZW50IGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAbWl4aW4gRXZlbnRlZFxuICovXG5leHBvcnQgY2xhc3MgRXZlbnRlZCB7XG4gICAgX2xpc3RlbmVyczogTGlzdGVuZXJzO1xuICAgIF9vbmVUaW1lTGlzdGVuZXJzOiBMaXN0ZW5lcnM7XG4gICAgX2V2ZW50ZWRQYXJlbnQ6ID9FdmVudGVkO1xuICAgIF9ldmVudGVkUGFyZW50RGF0YTogPyhPYmplY3QgfCAoKSA9PiBPYmplY3QpO1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIHRvIGEgc3BlY2lmaWVkIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBhZGQgYSBsaXN0ZW4gZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogICBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byBgZmlyZWAsXG4gICAgICogICBleHRlbmRlZCB3aXRoIGB0YXJnZXRgIGFuZCBgdHlwZWAgcHJvcGVydGllcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBgdGhpc2BcbiAgICAgKi9cbiAgICBvbih0eXBlOiAqLCBsaXN0ZW5lcjogTGlzdGVuZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzIHx8IHt9O1xuICAgICAgICBfYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fbGlzdGVuZXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gcmVtb3ZlIGxpc3RlbmVycyBmb3IuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBgdGhpc2BcbiAgICAgKi9cbiAgICBvZmYodHlwZTogKiwgbGlzdGVuZXI6IExpc3RlbmVyKSB7XG4gICAgICAgIF9yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB0aGlzLl9saXN0ZW5lcnMpO1xuICAgICAgICBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fb25lVGltZUxpc3RlbmVycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlIHRvIGEgc3BlY2lmaWVkIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBUaGUgbGlzdGVuZXIgd2lsbCBiZSBjYWxsZWQgZmlyc3QgdGltZSB0aGUgZXZlbnQgZmlyZXMgYWZ0ZXIgdGhlIGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBsaXN0ZW4gZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQgdGhlIGZpcnN0IHRpbWUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gYHRoaXNgXG4gICAgICovXG4gICAgb25jZSh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBMaXN0ZW5lcikge1xuICAgICAgICB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzID0gdGhpcy5fb25lVGltZUxpc3RlbmVycyB8fCB7fTtcbiAgICAgICAgX2FkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZpcmUoZXZlbnQ6IEV2ZW50LCBwcm9wZXJ0aWVzPzogT2JqZWN0KSB7XG4gICAgICAgIC8vIENvbXBhdGliaWxpdHkgd2l0aCAodHlwZTogc3RyaW5nLCBwcm9wZXJ0aWVzOiBPYmplY3QpIHNpZ25hdHVyZSBmcm9tIHByZXZpb3VzIHZlcnNpb25zLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzY1MjIsXG4gICAgICAgIC8vICAgICBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1kcmF3L2lzc3Vlcy83NjZcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGV2ZW50LCBwcm9wZXJ0aWVzIHx8IHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBldmVudC50eXBlO1xuXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbnModHlwZSkpIHtcbiAgICAgICAgICAgIChldmVudDogYW55KS50YXJnZXQgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgYWRkaW5nIG9yIHJlbW92aW5nIGxpc3RlbmVycyBpbnNpZGUgb3RoZXIgbGlzdGVuZXJzIHdvbid0IGNhdXNlIGFuIGluZmluaXRlIGxvb3BcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycyAmJiB0aGlzLl9saXN0ZW5lcnNbdHlwZV0gPyB0aGlzLl9saXN0ZW5lcnNbdHlwZV0uc2xpY2UoKSA6IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb25lVGltZUxpc3RlbmVycyA9IHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMgJiYgdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0eXBlXSA/IHRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdHlwZV0uc2xpY2UoKSA6IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBvbmVUaW1lTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICAgICAgX3JlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9ldmVudGVkUGFyZW50O1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIGV4dGVuZChcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLl9ldmVudGVkUGFyZW50RGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKCkgOiB0aGlzLl9ldmVudGVkUGFyZW50RGF0YVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50LmZpcmUoZXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IG5vIGVycm9yIGV2ZW50cyBhcmUgZHJvcHBlZCwgcHJpbnQgdGhlbSB0byB0aGVcbiAgICAgICAgLy8gY29uc29sZSBpZiB0aGV5IGhhdmUgbm8gbGlzdGVuZXJzLlxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihldmVudC5lcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdHJ1ZSBpZiB0aGlzIGluc3RhbmNlIG9mIEV2ZW50ZWQgb3IgYW55IGZvcndhcmRlZWQgaW5zdGFuY2VzIG9mIEV2ZW50ZWQgaGF2ZSBhIGxpc3RlbmVyIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHJlZ2lzdGVyZWQgbGlzdGVuZXIgZm9yIHNwZWNpZmllZCBldmVudCB0eXBlLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbGlzdGVucyh0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLl9saXN0ZW5lcnMgJiYgdGhpcy5fbGlzdGVuZXJzW3R5cGVdICYmIHRoaXMuX2xpc3RlbmVyc1t0eXBlXS5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMgJiYgdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0eXBlXSAmJiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3R5cGVdLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fZXZlbnRlZFBhcmVudCAmJiB0aGlzLl9ldmVudGVkUGFyZW50Lmxpc3RlbnModHlwZSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnViYmxlIGFsbCBldmVudHMgZmlyZWQgYnkgdGhpcyBpbnN0YW5jZSBvZiBFdmVudGVkIHRvIHRoaXMgcGFyZW50IGluc3RhbmNlIG9mIEV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGB0aGlzYFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0RXZlbnRlZFBhcmVudChwYXJlbnQ6ID9FdmVudGVkLCBkYXRhPzogT2JqZWN0IHwgKCkgPT4gT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50ZWRQYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhID0gZGF0YTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRpb25FcnJvciB7XG4gICAgY29uc3RydWN0b3Ioa2V5LCB2YWx1ZSwgbWVzc2FnZSwgaWRlbnRpZmllcikge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAoa2V5ID8gYCR7a2V5fTogYCA6ICcnKSArIG1lc3NhZ2U7XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLl9fbGluZV9fKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmUgPSB2YWx1ZS5fX2xpbmVfXztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVDb25zdGFudHMob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IGNvbnN0YW50cyA9IG9wdGlvbnMudmFsdWU7XG5cbiAgICBpZiAoY29uc3RhbnRzKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGNvbnN0YW50cywgJ2NvbnN0YW50cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2OCcpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAob3V0cHV0LCAuLi5pbnB1dHMpIHtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIG91dHB1dFtrXSA9IGlucHV0W2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG4iLCJmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW47XG59XG5cbi8vIFR1cm4ganNvbmxpbnQtbGluZXMtcHJpbWl0aXZlcyBvYmplY3RzIGludG8gcHJpbWl0aXZlIG9iamVjdHNcbmV4cG9ydCBmdW5jdGlvbiB1bmJ1bmRsZSh2YWx1ZSkge1xuICAgIGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlT2YoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcFVuYnVuZGxlKHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoZGVlcFVuYnVuZGxlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICFpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgdW5idW5kbGVkVmFsdWUgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHVuYnVuZGxlZFZhbHVlW2tleV0gPSBkZWVwVW5idW5kbGUodmFsdWVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuYnVuZGxlZFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmJ1bmRsZSh2YWx1ZSk7XG59XG5cbiIsIi8vIEBmbG93XG5cbmNsYXNzIFBhcnNpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3Ioa2V5OiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYXJzaW5nRXJyb3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi9leHByZXNzaW9uJztcblxuLyoqXG4gKiBUcmFja3MgYGxldGAgYmluZGluZ3MgZHVyaW5nIGV4cHJlc3Npb24gcGFyc2luZy5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNjb3BlIHtcbiAgICBwYXJlbnQ6ID9TY29wZTtcbiAgICBiaW5kaW5nczoge1tzdHJpbmddOiBFeHByZXNzaW9ufTtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBTY29wZSwgYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPiA9IFtdKSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmJpbmRpbmdzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGV4cHJlc3Npb25dIG9mIGJpbmRpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzW25hbWVdID0gZXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbmNhdChiaW5kaW5nczogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+KSB7XG4gICAgICAgIHJldHVybiBuZXcgU2NvcGUodGhpcywgYmluZGluZ3MpO1xuICAgIH1cblxuICAgIGdldChuYW1lOiBzdHJpbmcpOiBFeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKHRoaXMuYmluZGluZ3NbbmFtZV0pIHsgcmV0dXJuIHRoaXMuYmluZGluZ3NbbmFtZV07IH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7IHJldHVybiB0aGlzLnBhcmVudC5nZXQobmFtZSk7IH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG5vdCBmb3VuZCBpbiBzY29wZS5gKTtcbiAgICB9XG5cbiAgICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzW25hbWVdKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuaGFzKG5hbWUpIDogZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTY29wZTtcbiIsIi8vIEBmbG93XG5cbmV4cG9ydCB0eXBlIE51bGxUeXBlVCA9IHsga2luZDogJ251bGwnIH07XG5leHBvcnQgdHlwZSBOdW1iZXJUeXBlVCA9IHsga2luZDogJ251bWJlcicgfTtcbmV4cG9ydCB0eXBlIFN0cmluZ1R5cGVUID0geyBraW5kOiAnc3RyaW5nJyB9O1xuZXhwb3J0IHR5cGUgQm9vbGVhblR5cGVUID0geyBraW5kOiAnYm9vbGVhbicgfTtcbmV4cG9ydCB0eXBlIENvbG9yVHlwZVQgPSB7IGtpbmQ6ICdjb2xvcicgfTtcbmV4cG9ydCB0eXBlIE9iamVjdFR5cGVUID0geyBraW5kOiAnb2JqZWN0JyB9O1xuZXhwb3J0IHR5cGUgVmFsdWVUeXBlVCA9IHsga2luZDogJ3ZhbHVlJyB9O1xuZXhwb3J0IHR5cGUgRXJyb3JUeXBlVCA9IHsga2luZDogJ2Vycm9yJyB9O1xuZXhwb3J0IHR5cGUgQ29sbGF0b3JUeXBlVCA9IHsga2luZDogJ2NvbGxhdG9yJyB9O1xuZXhwb3J0IHR5cGUgRm9ybWF0dGVkVHlwZVQgPSB7IGtpbmQ6ICdmb3JtYXR0ZWQnIH07XG5leHBvcnQgdHlwZSBSZXNvbHZlZEltYWdlVHlwZVQgPSB7IGtpbmQ6ICdyZXNvbHZlZEltYWdlJyB9O1xuXG5leHBvcnQgdHlwZSBFdmFsdWF0aW9uS2luZCA9ICdjb25zdGFudCcgfCAnc291cmNlJyB8ICdjYW1lcmEnIHwgJ2NvbXBvc2l0ZSc7XG5cbmV4cG9ydCB0eXBlIFR5cGUgPVxuICAgIE51bGxUeXBlVCB8XG4gICAgTnVtYmVyVHlwZVQgfFxuICAgIFN0cmluZ1R5cGVUIHxcbiAgICBCb29sZWFuVHlwZVQgfFxuICAgIENvbG9yVHlwZVQgfFxuICAgIE9iamVjdFR5cGVUIHxcbiAgICBWYWx1ZVR5cGVUIHxcbiAgICBBcnJheVR5cGUgfCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgRXJyb3JUeXBlVCB8XG4gICAgQ29sbGF0b3JUeXBlVCB8XG4gICAgRm9ybWF0dGVkVHlwZVQgfFxuICAgIFJlc29sdmVkSW1hZ2VUeXBlVFxuXG5leHBvcnQgdHlwZSBBcnJheVR5cGUgPSB7XG4gICAga2luZDogJ2FycmF5JyxcbiAgICBpdGVtVHlwZTogVHlwZSxcbiAgICBOOiA/bnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBOdWxsVHlwZSA9IHtraW5kOiAnbnVsbCd9O1xuZXhwb3J0IGNvbnN0IE51bWJlclR5cGUgPSB7a2luZDogJ251bWJlcid9O1xuZXhwb3J0IGNvbnN0IFN0cmluZ1R5cGUgPSB7a2luZDogJ3N0cmluZyd9O1xuZXhwb3J0IGNvbnN0IEJvb2xlYW5UeXBlID0ge2tpbmQ6ICdib29sZWFuJ307XG5leHBvcnQgY29uc3QgQ29sb3JUeXBlID0ge2tpbmQ6ICdjb2xvcid9O1xuZXhwb3J0IGNvbnN0IE9iamVjdFR5cGUgPSB7a2luZDogJ29iamVjdCd9O1xuZXhwb3J0IGNvbnN0IFZhbHVlVHlwZSA9IHtraW5kOiAndmFsdWUnfTtcbmV4cG9ydCBjb25zdCBFcnJvclR5cGUgPSB7a2luZDogJ2Vycm9yJ307XG5leHBvcnQgY29uc3QgQ29sbGF0b3JUeXBlID0ge2tpbmQ6ICdjb2xsYXRvcid9O1xuZXhwb3J0IGNvbnN0IEZvcm1hdHRlZFR5cGUgPSB7a2luZDogJ2Zvcm1hdHRlZCd9O1xuZXhwb3J0IGNvbnN0IFJlc29sdmVkSW1hZ2VUeXBlID0ge2tpbmQ6ICdyZXNvbHZlZEltYWdlJ307XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheShpdGVtVHlwZTogVHlwZSwgTjogP251bWJlcik6IEFycmF5VHlwZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ2FycmF5JyxcbiAgICAgICAgaXRlbVR5cGUsXG4gICAgICAgIE5cbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodHlwZTogVHlwZSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGUua2luZCA9PT0gJ2FycmF5Jykge1xuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IHRvU3RyaW5nKHR5cGUuaXRlbVR5cGUpO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHR5cGUuTiA9PT0gJ251bWJlcicgP1xuICAgICAgICAgICAgYGFycmF5PCR7aXRlbVR5cGV9LCAke3R5cGUuTn0+YCA6XG4gICAgICAgICAgICB0eXBlLml0ZW1UeXBlLmtpbmQgPT09ICd2YWx1ZScgPyAnYXJyYXknIDogYGFycmF5PCR7aXRlbVR5cGV9PmA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHR5cGUua2luZDtcbiAgICB9XG59XG5cbmNvbnN0IHZhbHVlTWVtYmVyVHlwZXMgPSBbXG4gICAgTnVsbFR5cGUsXG4gICAgTnVtYmVyVHlwZSxcbiAgICBTdHJpbmdUeXBlLFxuICAgIEJvb2xlYW5UeXBlLFxuICAgIENvbG9yVHlwZSxcbiAgICBGb3JtYXR0ZWRUeXBlLFxuICAgIE9iamVjdFR5cGUsXG4gICAgYXJyYXkoVmFsdWVUeXBlKSxcbiAgICBSZXNvbHZlZEltYWdlVHlwZVxuXTtcblxuLyoqXG4gKiBSZXR1cm5zIG51bGwgaWYgYHRgIGlzIGEgc3VidHlwZSBvZiBgZXhwZWN0ZWRgOyBvdGhlcndpc2UgcmV0dXJucyBhblxuICogZXJyb3IgbWVzc2FnZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1N1YnR5cGUoZXhwZWN0ZWQ6IFR5cGUsIHQ6IFR5cGUpOiA/c3RyaW5nIHtcbiAgICBpZiAodC5raW5kID09PSAnZXJyb3InKSB7XG4gICAgICAgIC8vIEVycm9yIGlzIGEgc3VidHlwZSBvZiBldmVyeSB0eXBlXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQua2luZCA9PT0gJ2FycmF5Jykge1xuICAgICAgICBpZiAodC5raW5kID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAoKHQuTiA9PT0gMCAmJiB0Lml0ZW1UeXBlLmtpbmQgPT09ICd2YWx1ZScpIHx8ICFjaGVja1N1YnR5cGUoZXhwZWN0ZWQuaXRlbVR5cGUsIHQuaXRlbVR5cGUpKSAmJlxuICAgICAgICAgICAgKHR5cGVvZiBleHBlY3RlZC5OICE9PSAnbnVtYmVyJyB8fCBleHBlY3RlZC5OID09PSB0Lk4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQua2luZCA9PT0gdC5raW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQua2luZCA9PT0gJ3ZhbHVlJykge1xuICAgICAgICBmb3IgKGNvbnN0IG1lbWJlclR5cGUgb2YgdmFsdWVNZW1iZXJUeXBlcykge1xuICAgICAgICAgICAgaWYgKCFjaGVja1N1YnR5cGUobWVtYmVyVHlwZSwgdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBgRXhwZWN0ZWQgJHt0b1N0cmluZyhleHBlY3RlZCl9IGJ1dCBmb3VuZCAke3RvU3RyaW5nKHQpfSBpbnN0ZWFkLmA7XG59XG4iLCIvLyAoYykgRGVhbiBNY05hbWVlIDxkZWFuQGdtYWlsLmNvbT4sIDIwMTIuXG4vL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RlYW5tL2Nzcy1jb2xvci1wYXJzZXItanNcbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HU1xuLy8gSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yL1xudmFyIGtDU1NDb2xvclRhYmxlID0ge1xuICBcInRyYW5zcGFyZW50XCI6IFswLDAsMCwwXSwgXCJhbGljZWJsdWVcIjogWzI0MCwyNDgsMjU1LDFdLFxuICBcImFudGlxdWV3aGl0ZVwiOiBbMjUwLDIzNSwyMTUsMV0sIFwiYXF1YVwiOiBbMCwyNTUsMjU1LDFdLFxuICBcImFxdWFtYXJpbmVcIjogWzEyNywyNTUsMjEyLDFdLCBcImF6dXJlXCI6IFsyNDAsMjU1LDI1NSwxXSxcbiAgXCJiZWlnZVwiOiBbMjQ1LDI0NSwyMjAsMV0sIFwiYmlzcXVlXCI6IFsyNTUsMjI4LDE5NiwxXSxcbiAgXCJibGFja1wiOiBbMCwwLDAsMV0sIFwiYmxhbmNoZWRhbG1vbmRcIjogWzI1NSwyMzUsMjA1LDFdLFxuICBcImJsdWVcIjogWzAsMCwyNTUsMV0sIFwiYmx1ZXZpb2xldFwiOiBbMTM4LDQzLDIyNiwxXSxcbiAgXCJicm93blwiOiBbMTY1LDQyLDQyLDFdLCBcImJ1cmx5d29vZFwiOiBbMjIyLDE4NCwxMzUsMV0sXG4gIFwiY2FkZXRibHVlXCI6IFs5NSwxNTgsMTYwLDFdLCBcImNoYXJ0cmV1c2VcIjogWzEyNywyNTUsMCwxXSxcbiAgXCJjaG9jb2xhdGVcIjogWzIxMCwxMDUsMzAsMV0sIFwiY29yYWxcIjogWzI1NSwxMjcsODAsMV0sXG4gIFwiY29ybmZsb3dlcmJsdWVcIjogWzEwMCwxNDksMjM3LDFdLCBcImNvcm5zaWxrXCI6IFsyNTUsMjQ4LDIyMCwxXSxcbiAgXCJjcmltc29uXCI6IFsyMjAsMjAsNjAsMV0sIFwiY3lhblwiOiBbMCwyNTUsMjU1LDFdLFxuICBcImRhcmtibHVlXCI6IFswLDAsMTM5LDFdLCBcImRhcmtjeWFuXCI6IFswLDEzOSwxMzksMV0sXG4gIFwiZGFya2dvbGRlbnJvZFwiOiBbMTg0LDEzNCwxMSwxXSwgXCJkYXJrZ3JheVwiOiBbMTY5LDE2OSwxNjksMV0sXG4gIFwiZGFya2dyZWVuXCI6IFswLDEwMCwwLDFdLCBcImRhcmtncmV5XCI6IFsxNjksMTY5LDE2OSwxXSxcbiAgXCJkYXJra2hha2lcIjogWzE4OSwxODMsMTA3LDFdLCBcImRhcmttYWdlbnRhXCI6IFsxMzksMCwxMzksMV0sXG4gIFwiZGFya29saXZlZ3JlZW5cIjogWzg1LDEwNyw0NywxXSwgXCJkYXJrb3JhbmdlXCI6IFsyNTUsMTQwLDAsMV0sXG4gIFwiZGFya29yY2hpZFwiOiBbMTUzLDUwLDIwNCwxXSwgXCJkYXJrcmVkXCI6IFsxMzksMCwwLDFdLFxuICBcImRhcmtzYWxtb25cIjogWzIzMywxNTAsMTIyLDFdLCBcImRhcmtzZWFncmVlblwiOiBbMTQzLDE4OCwxNDMsMV0sXG4gIFwiZGFya3NsYXRlYmx1ZVwiOiBbNzIsNjEsMTM5LDFdLCBcImRhcmtzbGF0ZWdyYXlcIjogWzQ3LDc5LDc5LDFdLFxuICBcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LDc5LDc5LDFdLCBcImRhcmt0dXJxdW9pc2VcIjogWzAsMjA2LDIwOSwxXSxcbiAgXCJkYXJrdmlvbGV0XCI6IFsxNDgsMCwyMTEsMV0sIFwiZGVlcHBpbmtcIjogWzI1NSwyMCwxNDcsMV0sXG4gIFwiZGVlcHNreWJsdWVcIjogWzAsMTkxLDI1NSwxXSwgXCJkaW1ncmF5XCI6IFsxMDUsMTA1LDEwNSwxXSxcbiAgXCJkaW1ncmV5XCI6IFsxMDUsMTA1LDEwNSwxXSwgXCJkb2RnZXJibHVlXCI6IFszMCwxNDQsMjU1LDFdLFxuICBcImZpcmVicmlja1wiOiBbMTc4LDM0LDM0LDFdLCBcImZsb3JhbHdoaXRlXCI6IFsyNTUsMjUwLDI0MCwxXSxcbiAgXCJmb3Jlc3RncmVlblwiOiBbMzQsMTM5LDM0LDFdLCBcImZ1Y2hzaWFcIjogWzI1NSwwLDI1NSwxXSxcbiAgXCJnYWluc2Jvcm9cIjogWzIyMCwyMjAsMjIwLDFdLCBcImdob3N0d2hpdGVcIjogWzI0OCwyNDgsMjU1LDFdLFxuICBcImdvbGRcIjogWzI1NSwyMTUsMCwxXSwgXCJnb2xkZW5yb2RcIjogWzIxOCwxNjUsMzIsMV0sXG4gIFwiZ3JheVwiOiBbMTI4LDEyOCwxMjgsMV0sIFwiZ3JlZW5cIjogWzAsMTI4LDAsMV0sXG4gIFwiZ3JlZW55ZWxsb3dcIjogWzE3MywyNTUsNDcsMV0sIFwiZ3JleVwiOiBbMTI4LDEyOCwxMjgsMV0sXG4gIFwiaG9uZXlkZXdcIjogWzI0MCwyNTUsMjQwLDFdLCBcImhvdHBpbmtcIjogWzI1NSwxMDUsMTgwLDFdLFxuICBcImluZGlhbnJlZFwiOiBbMjA1LDkyLDkyLDFdLCBcImluZGlnb1wiOiBbNzUsMCwxMzAsMV0sXG4gIFwiaXZvcnlcIjogWzI1NSwyNTUsMjQwLDFdLCBcImtoYWtpXCI6IFsyNDAsMjMwLDE0MCwxXSxcbiAgXCJsYXZlbmRlclwiOiBbMjMwLDIzMCwyNTAsMV0sIFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LDI0MCwyNDUsMV0sXG4gIFwibGF3bmdyZWVuXCI6IFsxMjQsMjUyLDAsMV0sIFwibGVtb25jaGlmZm9uXCI6IFsyNTUsMjUwLDIwNSwxXSxcbiAgXCJsaWdodGJsdWVcIjogWzE3MywyMTYsMjMwLDFdLCBcImxpZ2h0Y29yYWxcIjogWzI0MCwxMjgsMTI4LDFdLFxuICBcImxpZ2h0Y3lhblwiOiBbMjI0LDI1NSwyNTUsMV0sIFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwyNTAsMjEwLDFdLFxuICBcImxpZ2h0Z3JheVwiOiBbMjExLDIxMSwyMTEsMV0sIFwibGlnaHRncmVlblwiOiBbMTQ0LDIzOCwxNDQsMV0sXG4gIFwibGlnaHRncmV5XCI6IFsyMTEsMjExLDIxMSwxXSwgXCJsaWdodHBpbmtcIjogWzI1NSwxODIsMTkzLDFdLFxuICBcImxpZ2h0c2FsbW9uXCI6IFsyNTUsMTYwLDEyMiwxXSwgXCJsaWdodHNlYWdyZWVuXCI6IFszMiwxNzgsMTcwLDFdLFxuICBcImxpZ2h0c2t5Ymx1ZVwiOiBbMTM1LDIwNiwyNTAsMV0sIFwibGlnaHRzbGF0ZWdyYXlcIjogWzExOSwxMzYsMTUzLDFdLFxuICBcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksMTM2LDE1MywxXSwgXCJsaWdodHN0ZWVsYmx1ZVwiOiBbMTc2LDE5NiwyMjIsMV0sXG4gIFwibGlnaHR5ZWxsb3dcIjogWzI1NSwyNTUsMjI0LDFdLCBcImxpbWVcIjogWzAsMjU1LDAsMV0sXG4gIFwibGltZWdyZWVuXCI6IFs1MCwyMDUsNTAsMV0sIFwibGluZW5cIjogWzI1MCwyNDAsMjMwLDFdLFxuICBcIm1hZ2VudGFcIjogWzI1NSwwLDI1NSwxXSwgXCJtYXJvb25cIjogWzEyOCwwLDAsMV0sXG4gIFwibWVkaXVtYXF1YW1hcmluZVwiOiBbMTAyLDIwNSwxNzAsMV0sIFwibWVkaXVtYmx1ZVwiOiBbMCwwLDIwNSwxXSxcbiAgXCJtZWRpdW1vcmNoaWRcIjogWzE4Niw4NSwyMTEsMV0sIFwibWVkaXVtcHVycGxlXCI6IFsxNDcsMTEyLDIxOSwxXSxcbiAgXCJtZWRpdW1zZWFncmVlblwiOiBbNjAsMTc5LDExMywxXSwgXCJtZWRpdW1zbGF0ZWJsdWVcIjogWzEyMywxMDQsMjM4LDFdLFxuICBcIm1lZGl1bXNwcmluZ2dyZWVuXCI6IFswLDI1MCwxNTQsMV0sIFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwyMDksMjA0LDFdLFxuICBcIm1lZGl1bXZpb2xldHJlZFwiOiBbMTk5LDIxLDEzMywxXSwgXCJtaWRuaWdodGJsdWVcIjogWzI1LDI1LDExMiwxXSxcbiAgXCJtaW50Y3JlYW1cIjogWzI0NSwyNTUsMjUwLDFdLCBcIm1pc3R5cm9zZVwiOiBbMjU1LDIyOCwyMjUsMV0sXG4gIFwibW9jY2FzaW5cIjogWzI1NSwyMjgsMTgxLDFdLCBcIm5hdmFqb3doaXRlXCI6IFsyNTUsMjIyLDE3MywxXSxcbiAgXCJuYXZ5XCI6IFswLDAsMTI4LDFdLCBcIm9sZGxhY2VcIjogWzI1MywyNDUsMjMwLDFdLFxuICBcIm9saXZlXCI6IFsxMjgsMTI4LDAsMV0sIFwib2xpdmVkcmFiXCI6IFsxMDcsMTQyLDM1LDFdLFxuICBcIm9yYW5nZVwiOiBbMjU1LDE2NSwwLDFdLCBcIm9yYW5nZXJlZFwiOiBbMjU1LDY5LDAsMV0sXG4gIFwib3JjaGlkXCI6IFsyMTgsMTEyLDIxNCwxXSwgXCJwYWxlZ29sZGVucm9kXCI6IFsyMzgsMjMyLDE3MCwxXSxcbiAgXCJwYWxlZ3JlZW5cIjogWzE1MiwyNTEsMTUyLDFdLCBcInBhbGV0dXJxdW9pc2VcIjogWzE3NSwyMzgsMjM4LDFdLFxuICBcInBhbGV2aW9sZXRyZWRcIjogWzIxOSwxMTIsMTQ3LDFdLCBcInBhcGF5YXdoaXBcIjogWzI1NSwyMzksMjEzLDFdLFxuICBcInBlYWNocHVmZlwiOiBbMjU1LDIxOCwxODUsMV0sIFwicGVydVwiOiBbMjA1LDEzMyw2MywxXSxcbiAgXCJwaW5rXCI6IFsyNTUsMTkyLDIwMywxXSwgXCJwbHVtXCI6IFsyMjEsMTYwLDIyMSwxXSxcbiAgXCJwb3dkZXJibHVlXCI6IFsxNzYsMjI0LDIzMCwxXSwgXCJwdXJwbGVcIjogWzEyOCwwLDEyOCwxXSxcbiAgXCJyZWJlY2NhcHVycGxlXCI6IFsxMDIsNTEsMTUzLDFdLFxuICBcInJlZFwiOiBbMjU1LDAsMCwxXSwgXCJyb3N5YnJvd25cIjogWzE4OCwxNDMsMTQzLDFdLFxuICBcInJveWFsYmx1ZVwiOiBbNjUsMTA1LDIyNSwxXSwgXCJzYWRkbGVicm93blwiOiBbMTM5LDY5LDE5LDFdLFxuICBcInNhbG1vblwiOiBbMjUwLDEyOCwxMTQsMV0sIFwic2FuZHlicm93blwiOiBbMjQ0LDE2NCw5NiwxXSxcbiAgXCJzZWFncmVlblwiOiBbNDYsMTM5LDg3LDFdLCBcInNlYXNoZWxsXCI6IFsyNTUsMjQ1LDIzOCwxXSxcbiAgXCJzaWVubmFcIjogWzE2MCw4Miw0NSwxXSwgXCJzaWx2ZXJcIjogWzE5MiwxOTIsMTkyLDFdLFxuICBcInNreWJsdWVcIjogWzEzNSwyMDYsMjM1LDFdLCBcInNsYXRlYmx1ZVwiOiBbMTA2LDkwLDIwNSwxXSxcbiAgXCJzbGF0ZWdyYXlcIjogWzExMiwxMjgsMTQ0LDFdLCBcInNsYXRlZ3JleVwiOiBbMTEyLDEyOCwxNDQsMV0sXG4gIFwic25vd1wiOiBbMjU1LDI1MCwyNTAsMV0sIFwic3ByaW5nZ3JlZW5cIjogWzAsMjU1LDEyNywxXSxcbiAgXCJzdGVlbGJsdWVcIjogWzcwLDEzMCwxODAsMV0sIFwidGFuXCI6IFsyMTAsMTgwLDE0MCwxXSxcbiAgXCJ0ZWFsXCI6IFswLDEyOCwxMjgsMV0sIFwidGhpc3RsZVwiOiBbMjE2LDE5MSwyMTYsMV0sXG4gIFwidG9tYXRvXCI6IFsyNTUsOTksNzEsMV0sIFwidHVycXVvaXNlXCI6IFs2NCwyMjQsMjA4LDFdLFxuICBcInZpb2xldFwiOiBbMjM4LDEzMCwyMzgsMV0sIFwid2hlYXRcIjogWzI0NSwyMjIsMTc5LDFdLFxuICBcIndoaXRlXCI6IFsyNTUsMjU1LDI1NSwxXSwgXCJ3aGl0ZXNtb2tlXCI6IFsyNDUsMjQ1LDI0NSwxXSxcbiAgXCJ5ZWxsb3dcIjogWzI1NSwyNTUsMCwxXSwgXCJ5ZWxsb3dncmVlblwiOiBbMTU0LDIwNSw1MCwxXX1cblxuZnVuY3Rpb24gY2xhbXBfY3NzX2J5dGUoaSkgeyAgLy8gQ2xhbXAgdG8gaW50ZWdlciAwIC4uIDI1NS5cbiAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cbiAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAyNTUgPyAyNTUgOiBpO1xufVxuXG5mdW5jdGlvbiBjbGFtcF9jc3NfZmxvYXQoZikgeyAgLy8gQ2xhbXAgdG8gZmxvYXQgMC4wIC4uIDEuMC5cbiAgcmV0dXJuIGYgPCAwID8gMCA6IGYgPiAxID8gMSA6IGY7XG59XG5cbmZ1bmN0aW9uIHBhcnNlX2Nzc19pbnQoc3RyKSB7ICAvLyBpbnQgb3IgcGVyY2VudGFnZS5cbiAgaWYgKHN0cltzdHIubGVuZ3RoIC0gMV0gPT09ICclJylcbiAgICByZXR1cm4gY2xhbXBfY3NzX2J5dGUocGFyc2VGbG9hdChzdHIpIC8gMTAwICogMjU1KTtcbiAgcmV0dXJuIGNsYW1wX2Nzc19ieXRlKHBhcnNlSW50KHN0cikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9jc3NfZmxvYXQoc3RyKSB7ICAvLyBmbG9hdCBvciBwZXJjZW50YWdlLlxuICBpZiAoc3RyW3N0ci5sZW5ndGggLSAxXSA9PT0gJyUnKVxuICAgIHJldHVybiBjbGFtcF9jc3NfZmxvYXQocGFyc2VGbG9hdChzdHIpIC8gMTAwKTtcbiAgcmV0dXJuIGNsYW1wX2Nzc19mbG9hdChwYXJzZUZsb2F0KHN0cikpO1xufVxuXG5mdW5jdGlvbiBjc3NfaHVlX3RvX3JnYihtMSwgbTIsIGgpIHtcbiAgaWYgKGggPCAwKSBoICs9IDE7XG4gIGVsc2UgaWYgKGggPiAxKSBoIC09IDE7XG5cbiAgaWYgKGggKiA2IDwgMSkgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogaCAqIDY7XG4gIGlmIChoICogMiA8IDEpIHJldHVybiBtMjtcbiAgaWYgKGggKiAzIDwgMikgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIvMyAtIGgpICogNjtcbiAgcmV0dXJuIG0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNTU0NvbG9yKGNzc19zdHIpIHtcbiAgLy8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlLCBub3QgY29tcGxpYW50LCBidXQgc2hvdWxkIGp1c3QgYmUgbW9yZSBhY2NlcHRpbmcuXG4gIHZhciBzdHIgPSBjc3Nfc3RyLnJlcGxhY2UoLyAvZywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gQ29sb3Iga2V5d29yZHMgKGFuZCB0cmFuc3BhcmVudCkgbG9va3VwLlxuICBpZiAoc3RyIGluIGtDU1NDb2xvclRhYmxlKSByZXR1cm4ga0NTU0NvbG9yVGFibGVbc3RyXS5zbGljZSgpOyAgLy8gZHVwLlxuXG4gIC8vICNhYmMgYW5kICNhYmMxMjMgc3ludGF4LlxuICBpZiAoc3RyWzBdID09PSAnIycpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gNCkge1xuICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXG4gICAgICBpZiAoIShpdiA+PSAwICYmIGl2IDw9IDB4ZmZmKSkgcmV0dXJuIG51bGw7ICAvLyBDb3ZlcnMgTmFOLlxuICAgICAgcmV0dXJuIFsoKGl2ICYgMHhmMDApID4+IDQpIHwgKChpdiAmIDB4ZjAwKSA+PiA4KSxcbiAgICAgICAgICAgICAgKGl2ICYgMHhmMCkgfCAoKGl2ICYgMHhmMCkgPj4gNCksXG4gICAgICAgICAgICAgIChpdiAmIDB4ZikgfCAoKGl2ICYgMHhmKSA8PCA0KSxcbiAgICAgICAgICAgICAgMV07XG4gICAgfSBlbHNlIGlmIChzdHIubGVuZ3RoID09PSA3KSB7XG4gICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cbiAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmZmZmYpKSByZXR1cm4gbnVsbDsgIC8vIENvdmVycyBOYU4uXG4gICAgICByZXR1cm4gWyhpdiAmIDB4ZmYwMDAwKSA+PiAxNixcbiAgICAgICAgICAgICAgKGl2ICYgMHhmZjAwKSA+PiA4LFxuICAgICAgICAgICAgICBpdiAmIDB4ZmYsXG4gICAgICAgICAgICAgIDFdO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG9wID0gc3RyLmluZGV4T2YoJygnKSwgZXAgPSBzdHIuaW5kZXhPZignKScpO1xuICBpZiAob3AgIT09IC0xICYmIGVwICsgMSA9PT0gc3RyLmxlbmd0aCkge1xuICAgIHZhciBmbmFtZSA9IHN0ci5zdWJzdHIoMCwgb3ApO1xuICAgIHZhciBwYXJhbXMgPSBzdHIuc3Vic3RyKG9wKzEsIGVwLShvcCsxKSkuc3BsaXQoJywnKTtcbiAgICB2YXIgYWxwaGEgPSAxOyAgLy8gVG8gYWxsb3cgY2FzZSBmYWxsdGhyb3VnaC5cbiAgICBzd2l0Y2ggKGZuYW1lKSB7XG4gICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDQpIHJldHVybiBudWxsO1xuICAgICAgICBhbHBoYSA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXMucG9wKCkpO1xuICAgICAgICAvLyBGYWxsIHRocm91Z2guXG4gICAgICBjYXNlICdyZ2InOlxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBbcGFyc2VfY3NzX2ludChwYXJhbXNbMF0pLFxuICAgICAgICAgICAgICAgIHBhcnNlX2Nzc19pbnQocGFyYW1zWzFdKSxcbiAgICAgICAgICAgICAgICBwYXJzZV9jc3NfaW50KHBhcmFtc1syXSksXG4gICAgICAgICAgICAgICAgYWxwaGFdO1xuICAgICAgY2FzZSAnaHNsYSc6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgYWxwaGEgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zLnBvcCgpKTtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoLlxuICAgICAgY2FzZSAnaHNsJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgaCA9ICgoKHBhcnNlRmxvYXQocGFyYW1zWzBdKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MDsgIC8vIDAgLi4gMVxuICAgICAgICAvLyBOT1RFKGRlYW5tKTogQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBzL2wgc2hvdWxkIG9ubHkgYmVcbiAgICAgICAgLy8gcGVyY2VudGFnZXMsIGJ1dCB3ZSBkb24ndCBib3RoZXIgYW5kIGxldCBmbG9hdCBvciBwZXJjZW50YWdlLlxuICAgICAgICB2YXIgcyA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXNbMV0pO1xuICAgICAgICB2YXIgbCA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXNbMl0pO1xuICAgICAgICB2YXIgbTIgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgdmFyIG0xID0gbCAqIDIgLSBtMjtcbiAgICAgICAgcmV0dXJuIFtjbGFtcF9jc3NfYnl0ZShjc3NfaHVlX3RvX3JnYihtMSwgbTIsIGgrMS8zKSAqIDI1NSksXG4gICAgICAgICAgICAgICAgY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoKSAqIDI1NSksXG4gICAgICAgICAgICAgICAgY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoLTEvMykgKiAyNTUpLFxuICAgICAgICAgICAgICAgIGFscGhhXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG50cnkgeyBleHBvcnRzLnBhcnNlQ1NTQ29sb3IgPSBwYXJzZUNTU0NvbG9yIH0gY2F0Y2goZSkgeyB9XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BhcnNlQ1NTQ29sb3J9IGZyb20gJ2Nzc2NvbG9ycGFyc2VyJztcblxuLyoqXG4gKiBBbiBSR0JBIGNvbG9yIHZhbHVlLiBDcmVhdGUgaW5zdGFuY2VzIGZyb20gY29sb3Igc3RyaW5ncyB1c2luZyB0aGUgc3RhdGljXG4gKiBtZXRob2QgYENvbG9yLnBhcnNlYC4gVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgUkdCIGNoYW5uZWwgdmFsdWVzIGluIHRoZSByYW5nZVxuICogYFswLCAxXWAsIHByZW11bHRpcGxpZWQgYnkgQS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gciBUaGUgcmVkIGNoYW5uZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gZyBUaGUgZ3JlZW4gY2hhbm5lbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiIFRoZSBibHVlIGNoYW5uZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gYSBUaGUgYWxwaGEgY2hhbm5lbC5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbG9yIHtcbiAgICByOiBudW1iZXI7XG4gICAgZzogbnVtYmVyO1xuICAgIGI6IG51bWJlcjtcbiAgICBhOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIHRoaXMuciA9IHI7XG4gICAgICAgIHRoaXMuZyA9IGc7XG4gICAgICAgIHRoaXMuYiA9IGI7XG4gICAgICAgIHRoaXMuYSA9IGE7XG4gICAgfVxuXG4gICAgc3RhdGljIGJsYWNrOiBDb2xvcjtcbiAgICBzdGF0aWMgd2hpdGU6IENvbG9yO1xuICAgIHN0YXRpYyB0cmFuc3BhcmVudDogQ29sb3I7XG4gICAgc3RhdGljIHJlZDogQ29sb3I7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdmFsaWQgQ1NTIGNvbG9yIHN0cmluZ3MgYW5kIHJldHVybnMgYSBgQ29sb3JgIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIEEgYENvbG9yYCBpbnN0YW5jZSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGlucHV0IGlzIG5vdCBhIHZhbGlkIGNvbG9yIHN0cmluZy5cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UoaW5wdXQ6ID9zdHJpbmcpOiBDb2xvciB8IHZvaWQge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmdiYSA9IHBhcnNlQ1NTQ29sb3IoaW5wdXQpO1xuICAgICAgICBpZiAoIXJnYmEpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICAgICAgcmdiYVswXSAvIDI1NSAqIHJnYmFbM10sXG4gICAgICAgICAgICByZ2JhWzFdIC8gMjU1ICogcmdiYVszXSxcbiAgICAgICAgICAgIHJnYmFbMl0gLyAyNTUgKiByZ2JhWzNdLFxuICAgICAgICAgICAgcmdiYVszXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gUkdCQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2xvciB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFuIFJHQkEgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHB1cnBsZSA9IG5ldyBDb2xvci5wYXJzZSgncHVycGxlJyk7XG4gICAgICogcHVycGxlLnRvU3RyaW5nOyAvLyA9IFwicmdiYSgxMjgsMCwxMjgsMSlcIlxuICAgICAqIHZhciB0cmFuc2x1Y2VudEdyZWVuID0gbmV3IENvbG9yLnBhcnNlKCdyZ2JhKDI2LCAyMDcsIDI2LCAuNzMpJyk7XG4gICAgICogdHJhbnNsdWNlbnRHcmVlbi50b1N0cmluZygpOyAvLyA9IFwicmdiYSgyNiwyMDcsMjYsMC43MylcIlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IFtyLCBnLCBiLCBhXSA9IHRoaXMudG9BcnJheSgpO1xuICAgICAgICByZXR1cm4gYHJnYmEoJHtNYXRoLnJvdW5kKHIpfSwke01hdGgucm91bmQoZyl9LCR7TWF0aC5yb3VuZChiKX0sJHthfSlgO1xuICAgIH1cblxuICAgIHRvQXJyYXkoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICBjb25zdCB7ciwgZywgYiwgYX0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gYSA9PT0gMCA/IFswLCAwLCAwLCAwXSA6IFtcbiAgICAgICAgICAgIHIgKiAyNTUgLyBhLFxuICAgICAgICAgICAgZyAqIDI1NSAvIGEsXG4gICAgICAgICAgICBiICogMjU1IC8gYSxcbiAgICAgICAgICAgIGFcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbkNvbG9yLmJsYWNrID0gbmV3IENvbG9yKDAsIDAsIDAsIDEpO1xuQ29sb3Iud2hpdGUgPSBuZXcgQ29sb3IoMSwgMSwgMSwgMSk7XG5Db2xvci50cmFuc3BhcmVudCA9IG5ldyBDb2xvcigwLCAwLCAwLCAwKTtcbkNvbG9yLnJlZCA9IG5ldyBDb2xvcigxLCAwLCAwLCAxKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29sb3I7XG4iLCIvLyBAZmxvd1xuXG4vLyBGbG93IHR5cGUgZGVjbGFyYXRpb25zIGZvciBJbnRsIGNyaWJiZWQgZnJvbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzEyNzBcblxuZGVjbGFyZSB2YXIgSW50bDoge1xuICAgIENvbGxhdG9yOiBDbGFzczxJbnRsJENvbGxhdG9yPlxufTtcblxuZGVjbGFyZSBjbGFzcyBJbnRsJENvbGxhdG9yIHtcbiAgICBjb25zdHJ1Y3RvciAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IENvbGxhdG9yT3B0aW9uc1xuICAgICk6IEludGwkQ29sbGF0b3I7XG5cbiAgICBzdGF0aWMgKFxuICAgICAgICBsb2NhbGVzPzogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgICAgIG9wdGlvbnM/OiBDb2xsYXRvck9wdGlvbnNcbiAgICApOiBJbnRsJENvbGxhdG9yO1xuXG4gICAgY29tcGFyZSAoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgICByZXNvbHZlZE9wdGlvbnMoKTogYW55O1xufVxuXG50eXBlIENvbGxhdG9yT3B0aW9ucyA9IHtcbiAgICBsb2NhbGVNYXRjaGVyPzogJ2xvb2t1cCcgfCAnYmVzdCBmaXQnLFxuICAgIHVzYWdlPzogJ3NvcnQnIHwgJ3NlYXJjaCcsXG4gICAgc2Vuc2l0aXZpdHk/OiAnYmFzZScgfCAnYWNjZW50JyB8ICdjYXNlJyB8ICd2YXJpYW50JyxcbiAgICBpZ25vcmVQdW5jdHVhdGlvbj86IGJvb2xlYW4sXG4gICAgbnVtZXJpYz86IGJvb2xlYW4sXG4gICAgY2FzZUZpcnN0PzogJ3VwcGVyJyB8ICdsb3dlcicgfCAnZmFsc2UnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbGxhdG9yIHtcbiAgICBsb2NhbGU6IHN0cmluZyB8IG51bGw7XG4gICAgc2Vuc2l0aXZpdHk6ICdiYXNlJyB8ICdhY2NlbnQnIHwgJ2Nhc2UnIHwgJ3ZhcmlhbnQnO1xuICAgIGNvbGxhdG9yOiBJbnRsJENvbGxhdG9yO1xuXG4gICAgY29uc3RydWN0b3IoY2FzZVNlbnNpdGl2ZTogYm9vbGVhbiwgZGlhY3JpdGljU2Vuc2l0aXZlOiBib29sZWFuLCBsb2NhbGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUpXG4gICAgICAgICAgICB0aGlzLnNlbnNpdGl2aXR5ID0gZGlhY3JpdGljU2Vuc2l0aXZlID8gJ3ZhcmlhbnQnIDogJ2Nhc2UnO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnNlbnNpdGl2aXR5ID0gZGlhY3JpdGljU2Vuc2l0aXZlID8gJ2FjY2VudCcgOiAnYmFzZSc7XG5cbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHRoaXMuY29sbGF0b3IgPSBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlIDogW10sXG4gICAgICAgICAgICB7c2Vuc2l0aXZpdHk6IHRoaXMuc2Vuc2l0aXZpdHksIHVzYWdlOiAnc2VhcmNoJ30pO1xuICAgIH1cblxuICAgIGNvbXBhcmUobGhzOiBzdHJpbmcsIHJoczogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGF0b3IuY29tcGFyZShsaHMsIHJocyk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gV2UgY3JlYXRlIGEgQ29sbGF0b3Igd2l0aG91dCBcInVzYWdlOiBzZWFyY2hcIiBiZWNhdXNlIHdlIGRvbid0IHdhbnRcbiAgICAgICAgLy8gdGhlIHNlYXJjaCBvcHRpb25zIGVuY29kZWQgaW4gb3VyIHJlc3VsdCAoZS5nLiBcImVuLXUtY28tc2VhcmNoXCIpXG4gICAgICAgIHJldHVybiBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlIDogW10pXG4gICAgICAgICAgICAucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3V0aWwvY29sb3InO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0dGVkU2VjdGlvbiB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHNjYWxlOiBudW1iZXIgfCBudWxsO1xuICAgIGZvbnRTdGFjazogc3RyaW5nIHwgbnVsbDtcbiAgICB0ZXh0Q29sb3I6IENvbG9yIHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHRleHQ6IHN0cmluZywgc2NhbGU6IG51bWJlciB8IG51bGwsIGZvbnRTdGFjazogc3RyaW5nIHwgbnVsbCwgdGV4dENvbG9yOiBDb2xvciB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICB0aGlzLmZvbnRTdGFjayA9IGZvbnRTdGFjaztcbiAgICAgICAgdGhpcy50ZXh0Q29sb3IgPSB0ZXh0Q29sb3I7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtYXR0ZWQge1xuICAgIHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uPikge1xuICAgICAgICB0aGlzLnNlY3Rpb25zID0gc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21TdHJpbmcodW5mb3JtYXR0ZWQ6IHN0cmluZyk6IEZvcm1hdHRlZCB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkKFtuZXcgRm9ybWF0dGVkU2VjdGlvbih1bmZvcm1hdHRlZCwgbnVsbCwgbnVsbCwgbnVsbCldKTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWN0aW9ucy5tYXAoc2VjdGlvbiA9PiBzZWN0aW9uLnRleHQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiZm9ybWF0XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5zZWN0aW9ucykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHNlY3Rpb24udGV4dCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5mb250U3RhY2spIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW1widGV4dC1mb250XCJdID0gW1wibGl0ZXJhbFwiLCBzZWN0aW9uLmZvbnRTdGFjay5zcGxpdCgnLCcpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uLnNjYWxlKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tcImZvbnQtc2NhbGVcIl0gPSBzZWN0aW9uLnNjYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24udGV4dENvbG9yKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tcInRleHQtY29sb3JcIl0gPSBbXCJyZ2JhXCJdLmNvbmNhdChzZWN0aW9uLnRleHRDb2xvci50b0FycmF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVkSW1hZ2VPcHRpb25zID0ge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhdmFpbGFibGU6IGJvb2xlYW5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc29sdmVkSW1hZ2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhdmFpbGFibGU6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXNvbHZlZEltYWdlT3B0aW9ucykge1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlID0gb3B0aW9ucy5hdmFpbGFibGU7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVN0cmluZyhuYW1lOiBzdHJpbmcpOiBSZXNvbHZlZEltYWdlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNvbHZlZEltYWdlKHtuYW1lLCBhdmFpbGFibGU6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIHJldHVybiBbXCJpbWFnZVwiLCB0aGlzLm5hbWVdO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL3V0aWwvY29sb3InO1xuaW1wb3J0IENvbGxhdG9yIGZyb20gJy4vdHlwZXMvY29sbGF0b3InO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcbmltcG9ydCB7TnVsbFR5cGUsIE51bWJlclR5cGUsIFN0cmluZ1R5cGUsIEJvb2xlYW5UeXBlLCBDb2xvclR5cGUsIE9iamVjdFR5cGUsIFZhbHVlVHlwZSwgQ29sbGF0b3JUeXBlLCBGb3JtYXR0ZWRUeXBlLCBSZXNvbHZlZEltYWdlVHlwZSwgYXJyYXl9IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJHQkEocjogbWl4ZWQsIGc6IG1peGVkLCBiOiBtaXhlZCwgYT86IG1peGVkKTogP3N0cmluZyB7XG4gICAgaWYgKCEoXG4gICAgICAgIHR5cGVvZiByID09PSAnbnVtYmVyJyAmJiByID49IDAgJiYgciA8PSAyNTUgJiZcbiAgICAgICAgdHlwZW9mIGcgPT09ICdudW1iZXInICYmIGcgPj0gMCAmJiBnIDw9IDI1NSAmJlxuICAgICAgICB0eXBlb2YgYiA9PT0gJ251bWJlcicgJiYgYiA+PSAwICYmIGIgPD0gMjU1XG4gICAgKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBhID09PSAnbnVtYmVyJyA/IFtyLCBnLCBiLCBhXSA6IFtyLCBnLCBiXTtcbiAgICAgICAgcmV0dXJuIGBJbnZhbGlkIHJnYmEgdmFsdWUgWyR7dmFsdWUuam9pbignLCAnKX1dOiAncicsICdnJywgYW5kICdiJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LmA7XG4gICAgfVxuXG4gICAgaWYgKCEoXG4gICAgICAgIHR5cGVvZiBhID09PSAndW5kZWZpbmVkJyB8fCAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIGEgPj0gMCAmJiBhIDw9IDEpXG4gICAgKSkge1xuICAgICAgICByZXR1cm4gYEludmFsaWQgcmdiYSB2YWx1ZSBbJHtbciwgZywgYiwgYV0uam9pbignLCAnKX1dOiAnYScgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgVmFsdWUgPSBudWxsIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IENvbG9yIHwgQ29sbGF0b3IgfCBGb3JtYXR0ZWQgfCBSZXNvbHZlZEltYWdlIHwgJFJlYWRPbmx5QXJyYXk8VmFsdWU+IHwgeyArW3N0cmluZ106IFZhbHVlIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsdWUobWl4ZWQ6IG1peGVkKTogYm9vbGVhbiB7XG4gICAgaWYgKG1peGVkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1peGVkID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtaXhlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1peGVkID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1peGVkIGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChtaXhlZCBpbnN0YW5jZW9mIENvbGxhdG9yKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAobWl4ZWQgaW5zdGFuY2VvZiBGb3JtYXR0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChtaXhlZCBpbnN0YW5jZW9mIFJlc29sdmVkSW1hZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1peGVkKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWl4ZWQpIHtcbiAgICAgICAgICAgIGlmICghaXNWYWx1ZShpdGVtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtaXhlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWl4ZWQpIHtcbiAgICAgICAgICAgIGlmICghaXNWYWx1ZShtaXhlZFtrZXldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZU9mKHZhbHVlOiBWYWx1ZSk6IFR5cGUge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gTnVsbFR5cGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmdUeXBlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW5UeXBlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gTnVtYmVyVHlwZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgcmV0dXJuIENvbG9yVHlwZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29sbGF0b3IpIHtcbiAgICAgICAgcmV0dXJuIENvbGxhdG9yVHlwZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkKSB7XG4gICAgICAgIHJldHVybiBGb3JtYXR0ZWRUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlKSB7XG4gICAgICAgIHJldHVybiBSZXNvbHZlZEltYWdlVHlwZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgbGV0IGl0ZW1UeXBlOiA/VHlwZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSB0eXBlT2YoaXRlbSk7XG4gICAgICAgICAgICBpZiAoIWl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUgPSB0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSA9PT0gdCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtVHlwZSA9IFZhbHVlVHlwZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJheShpdGVtVHlwZSB8fCBWYWx1ZVR5cGUsIGxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpO1xuICAgICAgICByZXR1cm4gT2JqZWN0VHlwZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogVmFsdWUpIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbG9yIHx8IHZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkIHx8IHZhbHVlIGluc3RhbmNlb2YgUmVzb2x2ZWRJbWFnZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IHtDb2xvciwgQ29sbGF0b3J9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtpc1ZhbHVlLCB0eXBlT2YsIENvbG9yfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuLi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSAgZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5cbmNsYXNzIExpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIHZhbHVlOiBWYWx1ZTtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIHZhbHVlOiBWYWx1ZSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYCdsaXRlcmFsJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgaWYgKCFpc1ZhbHVlKGFyZ3NbMV0pKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYGludmFsaWQgdmFsdWVgKTtcblxuICAgICAgICBjb25zdCB2YWx1ZSA9IChhcmdzWzFdOiBhbnkpO1xuICAgICAgICBsZXQgdHlwZSA9IHR5cGVPZih2YWx1ZSk7XG5cbiAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBpbmZlciB0aGUgaXRlbSB0eXBlIGlmIHBvc3NpYmxlIGZvciB6ZXJvLWxlbmd0aCBhcnJheXNcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICB0eXBlLk4gPT09IDAgJiZcbiAgICAgICAgICAgIGV4cGVjdGVkICYmXG4gICAgICAgICAgICBleHBlY3RlZC5raW5kID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAodHlwZW9mIGV4cGVjdGVkLk4gIT09ICdudW1iZXInIHx8IGV4cGVjdGVkLk4gPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHlwZSA9IGV4cGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsKHR5cGUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKCkge31cblxuICAgIHBvc3NpYmxlT3V0cHV0cygpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlXTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgaWYgKHRoaXMudHlwZS5raW5kID09PSAnYXJyYXknIHx8IHRoaXMudHlwZS5raW5kID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIFtcImxpdGVyYWxcIiwgdGhpcy52YWx1ZV07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIENvbG9yKSB7XG4gICAgICAgICAgICAvLyBDb25zdGFudC1mb2xkaW5nIGNhbiBnZW5lcmF0ZSBMaXRlcmFsIGV4cHJlc3Npb25zIHRoYXQgeW91XG4gICAgICAgICAgICAvLyBjb3VsZG4ndCBhY3R1YWxseSBnZW5lcmF0ZSB3aXRoIGEgXCJsaXRlcmFsXCIgZXhwcmVzc2lvbixcbiAgICAgICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gaW1wbGVtZW50IGFuIGVxdWl2YWxlbnQgc2VyaWFsaXphdGlvbiBoZXJlXG4gICAgICAgICAgICByZXR1cm4gW1wicmdiYVwiXS5jb25jYXQodGhpcy52YWx1ZS50b0FycmF5KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIC8vIFNhbWUgYXMgQ29sb3JcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzZXJ0KHRoaXMudmFsdWUgPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ2Jvb2xlYW4nKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy52YWx1ZTogYW55KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGl0ZXJhbDtcbiIsIi8vIEBmbG93XG5cbmNsYXNzIFJ1bnRpbWVFcnJvciB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLm5hbWUgPSAnRXhwcmVzc2lvbkV2YWx1YXRpb25FcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUnVudGltZUVycm9yO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge1xuICAgIE9iamVjdFR5cGUsXG4gICAgVmFsdWVUeXBlLFxuICAgIFN0cmluZ1R5cGUsXG4gICAgTnVtYmVyVHlwZSxcbiAgICBCb29sZWFuVHlwZSxcbiAgICBjaGVja1N1YnR5cGUsXG4gICAgdG9TdHJpbmcsXG4gICAgYXJyYXlcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IHR5cGVzID0ge1xuICAgIHN0cmluZzogU3RyaW5nVHlwZSxcbiAgICBudW1iZXI6IE51bWJlclR5cGUsXG4gICAgYm9vbGVhbjogQm9vbGVhblR5cGUsXG4gICAgb2JqZWN0OiBPYmplY3RUeXBlXG59O1xuXG5jbGFzcyBBc3NlcnRpb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgYXJnczogQXJyYXk8RXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgbGV0IGkgPSAxO1xuICAgICAgICBsZXQgdHlwZTtcblxuICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSAoYXJnc1swXTogYW55KTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIGxldCBpdGVtVHlwZTtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnIHx8ICEodHlwZSBpbiB0eXBlcykgfHwgdHlwZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdUaGUgaXRlbSB0eXBlIGFyZ3VtZW50IG9mIFwiYXJyYXlcIiBtdXN0IGJlIG9uZSBvZiBzdHJpbmcsIG51bWJlciwgYm9vbGVhbicsIDEpO1xuICAgICAgICAgICAgICAgIGl0ZW1UeXBlID0gdHlwZXNbdHlwZV07XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtVHlwZSA9IFZhbHVlVHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IE47XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NbMl0gIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBhcmdzWzJdICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMl0gIT09IE1hdGguZmxvb3IoYXJnc1syXSkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdUaGUgbGVuZ3RoIGFyZ3VtZW50IHRvIFwiYXJyYXlcIiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBsaXRlcmFsJywgMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE4gPSBhcmdzWzJdO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHlwZSA9IGFycmF5KGl0ZW1UeXBlLCBOKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFzc2VydCh0eXBlc1tuYW1lXSwgbmFtZSk7XG4gICAgICAgICAgICB0eXBlID0gdHlwZXNbbmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZWQgPSBbXTtcbiAgICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1tpXSwgaSwgVmFsdWVUeXBlKTtcbiAgICAgICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcGFyc2VkLnB1c2goaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odHlwZSwgcGFyc2VkKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuYXJnc1tpXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBjaGVja1N1YnR5cGUodGhpcy50eXBlLCB0eXBlT2YodmFsdWUpKTtcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IHRoaXMuYXJncy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSAke3RvU3RyaW5nKHRoaXMudHlwZSl9LCBidXQgZm91bmQgJHt0b1N0cmluZyh0eXBlT2YodmFsdWUpKX0gaW5zdGVhZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5hcmdzLmZvckVhY2goZm4pO1xuICAgIH1cblxuICAgIHBvc3NpYmxlT3V0cHV0cygpOiBBcnJheTxWYWx1ZSB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFtdLmNvbmNhdCguLi50aGlzLmFyZ3MubWFwKChhcmcpID0+IGFyZy5wb3NzaWJsZU91dHB1dHMoKSkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW3R5cGUua2luZF07XG4gICAgICAgIGlmICh0eXBlLmtpbmQgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gdHlwZS5pdGVtVHlwZTtcbiAgICAgICAgICAgIGlmIChpdGVtVHlwZS5raW5kID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlLmtpbmQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUua2luZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKGl0ZW1UeXBlLmtpbmQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IE4gPSB0eXBlLk47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBOID09PSAnbnVtYmVyJyB8fCB0aGlzLmFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goTik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkLmNvbmNhdCh0aGlzLmFyZ3MubWFwKGFyZyA9PiBhcmcuc2VyaWFsaXplKCkpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFzc2VydGlvbjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7TnVtYmVyVHlwZSwgVmFsdWVUeXBlLCBGb3JtYXR0ZWRUeXBlLCBhcnJheSwgU3RyaW5nVHlwZSwgQ29sb3JUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgRm9ybWF0dGVkLCB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi4vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCB7dG9TdHJpbmd9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxudHlwZSBGb3JtYXR0ZWRTZWN0aW9uRXhwcmVzc2lvbiA9IHtcbiAgICB0ZXh0OiBFeHByZXNzaW9uLFxuICAgIHNjYWxlOiBFeHByZXNzaW9uIHwgbnVsbDtcbiAgICBmb250OiBFeHByZXNzaW9uIHwgbnVsbDtcbiAgICB0ZXh0Q29sb3I6IEV4cHJlc3Npb24gfCBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtYXRFeHByZXNzaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBzZWN0aW9uczogQXJyYXk8Rm9ybWF0dGVkU2VjdGlvbkV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3Ioc2VjdGlvbnM6IEFycmF5PEZvcm1hdHRlZFNlY3Rpb25FeHByZXNzaW9uPikge1xuICAgICAgICB0aGlzLnR5cGUgPSBGb3JtYXR0ZWRUeXBlO1xuICAgICAgICB0aGlzLnNlY3Rpb25zID0gc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCB0d28gYXJndW1lbnRzLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChhcmdzLmxlbmd0aCAtIDEpICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uRXhwcmVzc2lvbj4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGNvbnRleHQucGFyc2UoYXJnc1tpXSwgMSwgVmFsdWVUeXBlKTtcbiAgICAgICAgICAgIGlmICghdGV4dCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBraW5kID0gdGV4dC50eXBlLmtpbmQ7XG4gICAgICAgICAgICBpZiAoa2luZCAhPT0gJ3N0cmluZycgJiYga2luZCAhPT0gJ3ZhbHVlJyAmJiBraW5kICE9PSAnbnVsbCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEZvcm1hdHRlZCB0ZXh0IHR5cGUgbXVzdCBiZSAnc3RyaW5nJywgJ3ZhbHVlJywgb3IgJ251bGwnLmApO1xuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGFyZ3NbaSArIDFdOiBhbnkpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEZvcm1hdCBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LmApO1xuXG4gICAgICAgICAgICBsZXQgc2NhbGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnNbJ2ZvbnQtc2NhbGUnXSkge1xuICAgICAgICAgICAgICAgIHNjYWxlID0gY29udGV4dC5wYXJzZShvcHRpb25zWydmb250LXNjYWxlJ10sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghc2NhbGUpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZm9udCA9IG51bGw7XG4gICAgICAgICAgICBpZiAob3B0aW9uc1sndGV4dC1mb250J10pIHtcbiAgICAgICAgICAgICAgICBmb250ID0gY29udGV4dC5wYXJzZShvcHRpb25zWyd0ZXh0LWZvbnQnXSwgMSwgYXJyYXkoU3RyaW5nVHlwZSkpO1xuICAgICAgICAgICAgICAgIGlmICghZm9udCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0ZXh0Q29sb3IgPSBudWxsO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnNbJ3RleHQtY29sb3InXSkge1xuICAgICAgICAgICAgICAgIHRleHRDb2xvciA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1sndGV4dC1jb2xvciddLCAxLCBDb2xvclR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghdGV4dENvbG9yKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlY3Rpb25zLnB1c2goe3RleHQsIHNjYWxlLCBmb250LCB0ZXh0Q29sb3J9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRm9ybWF0RXhwcmVzc2lvbihzZWN0aW9ucyk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IEZvcm1hdHRlZChcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMubWFwKHNlY3Rpb24gPT5cbiAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVkU2VjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmcoc2VjdGlvbi50ZXh0LmV2YWx1YXRlKGN0eCkpLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNjYWxlID8gc2VjdGlvbi5zY2FsZS5ldmFsdWF0ZShjdHgpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5mb250ID8gc2VjdGlvbi5mb250LmV2YWx1YXRlKGN0eCkuam9pbignLCcpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi50ZXh0Q29sb3IgPyBzZWN0aW9uLnRleHRDb2xvci5ldmFsdWF0ZShjdHgpIDogbnVsbFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLnNlY3Rpb25zKSB7XG4gICAgICAgICAgICBmbihzZWN0aW9uLnRleHQpO1xuICAgICAgICAgICAgaWYgKHNlY3Rpb24uc2NhbGUpIHtcbiAgICAgICAgICAgICAgICBmbihzZWN0aW9uLnNjYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uLmZvbnQpIHtcbiAgICAgICAgICAgICAgICBmbihzZWN0aW9uLmZvbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24udGV4dENvbG9yKSB7XG4gICAgICAgICAgICAgICAgZm4oc2VjdGlvbi50ZXh0Q29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICAvLyBUZWNobmljYWxseSB0aGUgY29tYmluYXRvcmljIHNldCBvZiBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gVXN1YWxseSwgdGhpcy50ZXh0IHdpbGwgYmUgdW5kZWZpbmVkIGFueXdheVxuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiZm9ybWF0XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5zZWN0aW9ucykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHNlY3Rpb24udGV4dC5zZXJpYWxpemUoKSk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5zY2FsZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbJ2ZvbnQtc2NhbGUnXSA9IHNlY3Rpb24uc2NhbGUuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5mb250KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1sndGV4dC1mb250J10gPSBzZWN0aW9uLmZvbnQuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi50ZXh0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zWyd0ZXh0LWNvbG9yJ10gPSBzZWN0aW9uLnRleHRDb2xvci5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1Jlc29sdmVkSW1hZ2VUeXBlLCBTdHJpbmdUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1hZ2VFeHByZXNzaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IFJlc29sdmVkSW1hZ2VUeXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIHR3byBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuYW1lID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gY29udGV4dC5lcnJvcihgTm8gaW1hZ2UgbmFtZSBwcm92aWRlZC5gKTtcblxuICAgICAgICByZXR1cm4gbmV3IEltYWdlRXhwcmVzc2lvbihuYW1lKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRlZEltYWdlTmFtZSA9IHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgbGV0IGF2YWlsYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdHguYXZhaWxhYmxlSW1hZ2VzICYmIGN0eC5hdmFpbGFibGVJbWFnZXMuaW5kZXhPZihldmFsdWF0ZWRJbWFnZU5hbWUpID4gLTEpIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFJlc29sdmVkSW1hZ2Uoe25hbWU6IGV2YWx1YXRlZEltYWdlTmFtZSwgYXZhaWxhYmxlfSk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgIC8vIFRoZSBvdXRwdXQgb2YgaW1hZ2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgaW1hZ2VzIGluIHRoZSBldmFsdWF0aW9uIGNvbnRleHRcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIFtcImltYWdlXCIsIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtCb29sZWFuVHlwZSwgQ29sb3JUeXBlLCBOdW1iZXJUeXBlLCBTdHJpbmdUeXBlLCBWYWx1ZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7Q29sb3IsIHRvU3RyaW5nIGFzIHZhbHVlVG9TdHJpbmcsIHZhbGlkYXRlUkdCQX0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgRm9ybWF0RXhwcmVzc2lvbiBmcm9tICcuLi9kZWZpbml0aW9ucy9mb3JtYXQnO1xuaW1wb3J0IEltYWdlRXhwcmVzc2lvbiBmcm9tICcuLi9kZWZpbml0aW9ucy9pbWFnZSc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgdHlwZXMgPSB7XG4gICAgJ3RvLWJvb2xlYW4nOiBCb29sZWFuVHlwZSxcbiAgICAndG8tY29sb3InOiBDb2xvclR5cGUsXG4gICAgJ3RvLW51bWJlcic6IE51bWJlclR5cGUsXG4gICAgJ3RvLXN0cmluZyc6IFN0cmluZ1R5cGVcbn07XG5cbi8qKlxuICogU3BlY2lhbCBmb3JtIGZvciBlcnJvci1jb2FsZXNjaW5nIGNvZXJjaW9uIGV4cHJlc3Npb25zIFwidG8tbnVtYmVyXCIsXG4gKiBcInRvLWNvbG9yXCIuICBTaW5jZSB0aGVzZSBjb2VyY2lvbnMgY2FuIGZhaWwgYXQgcnVudGltZSwgdGhleSBhY2NlcHQgbXVsdGlwbGVcbiAqIGFyZ3VtZW50cywgb25seSBldmFsdWF0aW5nIG9uZSBhdCBhIHRpbWUgdW50aWwgb25lIHN1Y2NlZWRzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvZXJjaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBhcmdzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LmApO1xuXG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IChhcmdzWzBdOiBhbnkpO1xuICAgICAgICBhc3NlcnQodHlwZXNbbmFtZV0sIG5hbWUpO1xuXG4gICAgICAgIGlmICgobmFtZSA9PT0gJ3RvLWJvb2xlYW4nIHx8IG5hbWUgPT09ICd0by1zdHJpbmcnKSAmJiBhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBvbmUgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW25hbWVdO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCBpLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBwYXJzZWQucHVzaChpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IENvZXJjaW9uKHR5cGUsIHBhcnNlZCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5hcmdzWzBdLmV2YWx1YXRlKGN0eCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5raW5kID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICBsZXQgaW5wdXQ7XG4gICAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgICAgIGVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBjdHgucGFyc2VDb2xvcihpbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjKSByZXR1cm4gYztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPCAzIHx8IGlucHV0Lmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gYEludmFsaWQgcmJnYSB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KGlucHV0KX06IGV4cGVjdGVkIGFuIGFycmF5IGNvbnRhaW5pbmcgZWl0aGVyIHRocmVlIG9yIGZvdXIgbnVtZXJpYyB2YWx1ZXMuYDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdmFsaWRhdGVSR0JBKGlucHV0WzBdLCBpbnB1dFsxXSwgaW5wdXRbMl0sIGlucHV0WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKChpbnB1dFswXTogYW55KSAvIDI1NSwgKGlucHV0WzFdOiBhbnkpIC8gMjU1LCAoaW5wdXRbMl06IGFueSkgLyAyNTUsIChpbnB1dFszXTogYW55KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGVycm9yIHx8IGBDb3VsZCBub3QgcGFyc2UgY29sb3IgZnJvbSB2YWx1ZSAnJHt0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gaW5wdXQgOiBTdHJpbmcoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKX0nYCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5hcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBudW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBDb3VsZCBub3QgY29udmVydCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gdG8gbnVtYmVyLmApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5raW5kID09PSAnZm9ybWF0dGVkJykge1xuICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gZXhwbGljaXQgJ3RvLWZvcm1hdHRlZCcgYnV0IHRoaXMgY29lcmNpb24gY2FuIGJlIGltcGxpY2l0bHlcbiAgICAgICAgICAgIC8vIGNyZWF0ZWQgYnkgcHJvcGVydGllcyB0aGF0IGV4cGVjdCB0aGUgJ2Zvcm1hdHRlZCcgdHlwZS5cbiAgICAgICAgICAgIHJldHVybiBGb3JtYXR0ZWQuZnJvbVN0cmluZyh2YWx1ZVRvU3RyaW5nKHRoaXMuYXJnc1swXS5ldmFsdWF0ZShjdHgpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdyZXNvbHZlZEltYWdlJykge1xuICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVkSW1hZ2UuZnJvbVN0cmluZyh2YWx1ZVRvU3RyaW5nKHRoaXMuYXJnc1swXS5ldmFsdWF0ZShjdHgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVUb1N0cmluZyh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUoY3R4KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuYXJncy5mb3JFYWNoKGZuKTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKTogQXJyYXk8VmFsdWUgfCB2b2lkPiB7XG4gICAgICAgIHJldHVybiBbXS5jb25jYXQoLi4udGhpcy5hcmdzLm1hcCgoYXJnKSA9PiBhcmcucG9zc2libGVPdXRwdXRzKCkpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ2Zvcm1hdHRlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybWF0RXhwcmVzc2lvbihbe3RleHQ6IHRoaXMuYXJnc1swXSwgc2NhbGU6IG51bGwsIGZvbnQ6IG51bGwsIHRleHRDb2xvcjogbnVsbH1dKS5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ3Jlc29sdmVkSW1hZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEltYWdlRXhwcmVzc2lvbih0aGlzLmFyZ3NbMF0pLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtgdG8tJHt0aGlzLnR5cGUua2luZH1gXTtcbiAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb2VyY2lvbjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Q29sb3J9IGZyb20gJy4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtGb3JtYXR0ZWRTZWN0aW9ufSBmcm9tICcuL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgdHlwZSB7R2xvYmFsUHJvcGVydGllcywgRmVhdHVyZSwgRmVhdHVyZVN0YXRlfSBmcm9tICcuL2luZGV4JztcblxuY29uc3QgZ2VvbWV0cnlUeXBlcyA9IFsnVW5rbm93bicsICdQb2ludCcsICdMaW5lU3RyaW5nJywgJ1BvbHlnb24nXTtcblxuY2xhc3MgRXZhbHVhdGlvbkNvbnRleHQge1xuICAgIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXM7XG4gICAgZmVhdHVyZTogP0ZlYXR1cmU7XG4gICAgZmVhdHVyZVN0YXRlOiA/RmVhdHVyZVN0YXRlO1xuICAgIGZvcm1hdHRlZFNlY3Rpb246ID9Gb3JtYXR0ZWRTZWN0aW9uO1xuICAgIGF2YWlsYWJsZUltYWdlczogP0FycmF5PHN0cmluZz47XG5cbiAgICBfcGFyc2VDb2xvckNhY2hlOiB7W3N0cmluZ106ID9Db2xvcn07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxzID0gKG51bGw6IGFueSk7XG4gICAgICAgIHRoaXMuZmVhdHVyZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmVhdHVyZVN0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb3JtYXR0ZWRTZWN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGFyc2VDb2xvckNhY2hlID0ge307XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSW1hZ2VzID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZSAmJiAnaWQnIGluIHRoaXMuZmVhdHVyZSA/IHRoaXMuZmVhdHVyZS5pZCA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2VvbWV0cnlUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlID8gdHlwZW9mIHRoaXMuZmVhdHVyZS50eXBlID09PSAnbnVtYmVyJyA/IGdlb21ldHJ5VHlwZXNbdGhpcy5mZWF0dXJlLnR5cGVdIDogdGhpcy5mZWF0dXJlLnR5cGUgOiBudWxsO1xuICAgIH1cblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZlYXR1cmUgJiYgdGhpcy5mZWF0dXJlLnByb3BlcnRpZXMgfHwge307XG4gICAgfVxuXG4gICAgcGFyc2VDb2xvcihpbnB1dDogc3RyaW5nKTogP0NvbG9yIHtcbiAgICAgICAgbGV0IGNhY2hlZCA9IHRoaXMuX3BhcnNlQ29sb3JDYWNoZVtpbnB1dF07XG4gICAgICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgICAgICBjYWNoZWQgPSB0aGlzLl9wYXJzZUNvbG9yQ2FjaGVbaW5wdXRdID0gQ29sb3IucGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFdmFsdWF0aW9uQ29udGV4dDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dG9TdHJpbmd9IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb24sIEV4cHJlc3Npb25SZWdpc3RyeX0gZnJvbSAnLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi92YWx1ZXMnO1xuXG5leHBvcnQgdHlwZSBWYXJhcmdzID0ge3wgdHlwZTogVHlwZSB8fTtcbnR5cGUgU2lnbmF0dXJlID0gQXJyYXk8VHlwZT4gfCBWYXJhcmdzO1xudHlwZSBFdmFsdWF0ZSA9IChFdmFsdWF0aW9uQ29udGV4dCwgQXJyYXk8RXhwcmVzc2lvbj4pID0+IFZhbHVlO1xudHlwZSBEZWZpbml0aW9uID0gW1R5cGUsIFNpZ25hdHVyZSwgRXZhbHVhdGVdIHxcbiAgICB7fHR5cGU6IFR5cGUsIG92ZXJsb2FkczogQXJyYXk8W1NpZ25hdHVyZSwgRXZhbHVhdGVdPnx9O1xuXG5jbGFzcyBDb21wb3VuZEV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogVHlwZTtcbiAgICBfZXZhbHVhdGU6IEV2YWx1YXRlO1xuICAgIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgc3RhdGljIGRlZmluaXRpb25zOiB7IFtzdHJpbmddOiBEZWZpbml0aW9uIH07XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHR5cGU6IFR5cGUsIGV2YWx1YXRlOiBFdmFsdWF0ZSwgYXJnczogQXJyYXk8RXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdGUgPSBldmFsdWF0ZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmFsdWF0ZShjdHgsIHRoaXMuYXJncyk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIHJldHVybiBbdGhpcy5uYW1lXS5jb25jYXQodGhpcy5hcmdzLm1hcChhcmcgPT4gYXJnLnNlcmlhbGl6ZSgpKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGNvbnN0IG9wOiBzdHJpbmcgPSAoYXJnc1swXTogYW55KTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IENvbXBvdW5kRXhwcmVzc2lvbi5kZWZpbml0aW9uc1tvcF07XG4gICAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFVua25vd24gZXhwcmVzc2lvbiBcIiR7b3B9XCIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uYCwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3cgY2hlY2sgYXJndW1lbnQgdHlwZXMgYWdhaW5zdCBlYWNoIHNpZ25hdHVyZVxuICAgICAgICBjb25zdCB0eXBlID0gQXJyYXkuaXNBcnJheShkZWZpbml0aW9uKSA/XG4gICAgICAgICAgICBkZWZpbml0aW9uWzBdIDogZGVmaW5pdGlvbi50eXBlO1xuXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZU92ZXJsb2FkcyA9IEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikgP1xuICAgICAgICAgICAgW1tkZWZpbml0aW9uWzFdLCBkZWZpbml0aW9uWzJdXV0gOlxuICAgICAgICAgICAgZGVmaW5pdGlvbi5vdmVybG9hZHM7XG5cbiAgICAgICAgY29uc3Qgb3ZlcmxvYWRzID0gYXZhaWxhYmxlT3ZlcmxvYWRzLmZpbHRlcigoW3NpZ25hdHVyZV0pID0+IChcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHNpZ25hdHVyZSkgfHwgLy8gdmFyYWdzXG4gICAgICAgICAgICBzaWduYXR1cmUubGVuZ3RoID09PSBhcmdzLmxlbmd0aCAtIDEgLy8gY29ycmVjdCBwYXJhbSBjb3VudFxuICAgICAgICApKTtcblxuICAgICAgICBsZXQgc2lnbmF0dXJlQ29udGV4dDogUGFyc2luZ0NvbnRleHQgPSAobnVsbDogYW55KTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtwYXJhbXMsIGV2YWx1YXRlXSBvZiBvdmVybG9hZHMpIHtcbiAgICAgICAgICAgIC8vIFVzZSBhIGZyZXNoIGNvbnRleHQgZm9yIGVhY2ggYXR0ZW1wdGVkIHNpZ25hdHVyZSBzbyB0aGF0LCBpZlxuICAgICAgICAgICAgLy8gd2UgZXZlbnR1YWxseSBzdWNjZWVkLCB3ZSBoYXZlbid0IHBvbGx1dGVkIGBjb250ZXh0LmVycm9yc2AuXG4gICAgICAgICAgICBzaWduYXR1cmVDb250ZXh0ID0gbmV3IFBhcnNpbmdDb250ZXh0KGNvbnRleHQucmVnaXN0cnksIGNvbnRleHQucGF0aCwgbnVsbCwgY29udGV4dC5zY29wZSk7XG5cbiAgICAgICAgICAgIC8vIEZpcnN0IHBhcnNlIGFsbCB0aGUgYXJncywgcG90ZW50aWFsbHkgY29lcmNpbmcgdG8gdGhlXG4gICAgICAgICAgICAvLyB0eXBlcyBleHBlY3RlZCBieSB0aGlzIG92ZXJsb2FkLlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJnczogQXJyYXk8RXhwcmVzc2lvbj4gPSBbXTtcbiAgICAgICAgICAgIGxldCBhcmdQYXJzZUZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtcykgP1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaSAtIDFdIDpcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnR5cGU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBzaWduYXR1cmVDb250ZXh0LnBhcnNlKGFyZywgMSArIHBhcnNlZEFyZ3MubGVuZ3RoLCBleHBlY3RlZFR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ1BhcnNlRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlZEFyZ3MucHVzaChwYXJzZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ1BhcnNlRmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgY29lcmNlIGFyZ3Mgb2YgdGhpcyBvdmVybG9hZCB0byBleHBlY3RlZCB0eXBlLCBtb3ZlXG4gICAgICAgICAgICAgICAgLy8gb24gdG8gbmV4dCBvbmUuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gcGFyc2VkQXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlQ29udGV4dC5lcnJvcihgRXhwZWN0ZWQgJHtwYXJhbXMubGVuZ3RofSBhcmd1bWVudHMsIGJ1dCBmb3VuZCAke3BhcnNlZEFyZ3MubGVuZ3RofSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyc2VkQXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zW2ldIDogcGFyYW1zLnR5cGU7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJnID0gcGFyc2VkQXJnc1tpXTtcbiAgICAgICAgICAgICAgICBzaWduYXR1cmVDb250ZXh0LmNvbmNhdChpICsgMSkuY2hlY2tTdWJ0eXBlKGV4cGVjdGVkLCBhcmcudHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVDb250ZXh0LmVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBvdW5kRXhwcmVzc2lvbihvcCwgdHlwZSwgZXZhbHVhdGUsIHBhcnNlZEFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KCFzaWduYXR1cmVDb250ZXh0IHx8IHNpZ25hdHVyZUNvbnRleHQuZXJyb3JzLmxlbmd0aCA+IDApO1xuXG4gICAgICAgIGlmIChvdmVybG9hZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5wdXNoKC4uLnNpZ25hdHVyZUNvbnRleHQuZXJyb3JzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gb3ZlcmxvYWRzLmxlbmd0aCA/IG92ZXJsb2FkcyA6IGF2YWlsYWJsZU92ZXJsb2FkcztcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBleHBlY3RlZFxuICAgICAgICAgICAgICAgIC5tYXAoKFtwYXJhbXNdKSA9PiBzdHJpbmdpZnlTaWduYXR1cmUocGFyYW1zKSlcbiAgICAgICAgICAgICAgICAuam9pbignIHwgJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbFR5cGVzID0gW107XG4gICAgICAgICAgICAvLyBGb3IgZXJyb3IgbWVzc2FnZSwgcmUtcGFyc2UgYXJndW1lbnRzIHdpdGhvdXQgdHJ5aW5nIHRvXG4gICAgICAgICAgICAvLyBhcHBseSBhbnkgY29lcmNpb25zXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaV0sIDEgKyBhY3R1YWxUeXBlcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBhY3R1YWxUeXBlcy5wdXNoKHRvU3RyaW5nKHBhcnNlZC50eXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhcmd1bWVudHMgb2YgdHlwZSAke3NpZ25hdHVyZXN9LCBidXQgZm91bmQgKCR7YWN0dWFsVHlwZXMuam9pbignLCAnKX0pIGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVnaXN0ZXIoXG4gICAgICAgIHJlZ2lzdHJ5OiBFeHByZXNzaW9uUmVnaXN0cnksXG4gICAgICAgIGRlZmluaXRpb25zOiB7IFtzdHJpbmddOiBEZWZpbml0aW9uIH1cbiAgICApIHtcbiAgICAgICAgYXNzZXJ0KCFDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnMpO1xuICAgICAgICBDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRlZmluaXRpb25zKSB7XG4gICAgICAgICAgICByZWdpc3RyeVtuYW1lXSA9IENvbXBvdW5kRXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2lnbmF0dXJlKHNpZ25hdHVyZTogU2lnbmF0dXJlKTogc3RyaW5nIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzaWduYXR1cmUpKSB7XG4gICAgICAgIHJldHVybiBgKCR7c2lnbmF0dXJlLm1hcCh0b1N0cmluZykuam9pbignLCAnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCgke3RvU3RyaW5nKHNpZ25hdHVyZS50eXBlKX0uLi4pYDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvdW5kRXhwcmVzc2lvbjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7U3RyaW5nVHlwZSwgQm9vbGVhblR5cGUsIENvbGxhdG9yVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IENvbGxhdG9yIGZyb20gJy4uL3R5cGVzL2NvbGxhdG9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYXRvckV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGNhc2VTZW5zaXRpdmU6IEV4cHJlc3Npb247XG4gICAgZGlhY3JpdGljU2Vuc2l0aXZlOiBFeHByZXNzaW9uO1xuICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihjYXNlU2Vuc2l0aXZlOiBFeHByZXNzaW9uLCBkaWFjcml0aWNTZW5zaXRpdmU6IEV4cHJlc3Npb24sIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50eXBlID0gQ29sbGF0b3JUeXBlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUgPSBkaWFjcml0aWNTZW5zaXRpdmU7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBvbmUgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzFdOiBhbnkpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LmApO1xuXG4gICAgICAgIGNvbnN0IGNhc2VTZW5zaXRpdmUgPSBjb250ZXh0LnBhcnNlKFxuICAgICAgICAgICAgb3B0aW9uc1snY2FzZS1zZW5zaXRpdmUnXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zWydjYXNlLXNlbnNpdGl2ZSddLCAxLCBCb29sZWFuVHlwZSk7XG4gICAgICAgIGlmICghY2FzZVNlbnNpdGl2ZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgZGlhY3JpdGljU2Vuc2l0aXZlID0gY29udGV4dC5wYXJzZShcbiAgICAgICAgICAgIG9wdGlvbnNbJ2RpYWNyaXRpYy1zZW5zaXRpdmUnXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zWydkaWFjcml0aWMtc2Vuc2l0aXZlJ10sIDEsIEJvb2xlYW5UeXBlKTtcbiAgICAgICAgaWYgKCFkaWFjcml0aWNTZW5zaXRpdmUpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGxldCBsb2NhbGUgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbG9jYWxlJ10pIHtcbiAgICAgICAgICAgIGxvY2FsZSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbG9jYWxlJ10sIDEsIFN0cmluZ1R5cGUpO1xuICAgICAgICAgICAgaWYgKCFsb2NhbGUpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsYXRvckV4cHJlc3Npb24oY2FzZVNlbnNpdGl2ZSwgZGlhY3JpdGljU2Vuc2l0aXZlLCBsb2NhbGUpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsYXRvcih0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUoY3R4KSwgdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUoY3R4KSwgdGhpcy5sb2NhbGUgPyB0aGlzLmxvY2FsZS5ldmFsdWF0ZShjdHgpIDogbnVsbCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmNhc2VTZW5zaXRpdmUpO1xuICAgICAgICBmbih0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZSk7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgZm4odGhpcy5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICAvLyBUZWNobmljYWxseSB0aGUgc2V0IG9mIHBvc3NpYmxlIG91dHB1dHMgaXMgdGhlIGNvbWJpbmF0b3JpYyBzZXQgb2YgQ29sbGF0b3JzIHByb2R1Y2VkXG4gICAgICAgIC8vIGJ5IGFsbCBwb3NzaWJsZU91dHB1dHMgb2YgbG9jYWxlL2Nhc2VTZW5zaXRpdmUvZGlhY3JpdGljU2Vuc2l0aXZlXG4gICAgICAgIC8vIEJ1dCBmb3IgdGhlIHByaW1hcnkgdXNlIG9mIENvbGxhdG9ycyBpbiBjb21wYXJpc29uIG9wZXJhdG9ycywgd2UgaWdub3JlIHRoZSBDb2xsYXRvcidzXG4gICAgICAgIC8vIHBvc3NpYmxlT3V0cHV0cyBhbnl3YXksIHNvIHdlIGNhbiBnZXQgYXdheSB3aXRoIGxlYXZpbmcgdGhpcyB1bmRlZmluZWQgZm9yIG5vdy5cbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBvcHRpb25zWydjYXNlLXNlbnNpdGl2ZSddID0gdGhpcy5jYXNlU2Vuc2l0aXZlLnNlcmlhbGl6ZSgpO1xuICAgICAgICBvcHRpb25zWydkaWFjcml0aWMtc2Vuc2l0aXZlJ10gPSB0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5zZXJpYWxpemUoKTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxlKSB7XG4gICAgICAgICAgICBvcHRpb25zWydsb2NhbGUnXSA9IHRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJjb2xsYXRvclwiLCBvcHRpb25zXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuL2V4cHJlc3Npb24uanMnO1xuXG5mdW5jdGlvbiBpc0ZlYXR1cmVDb25zdGFudChlOiBFeHByZXNzaW9uKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ2dldCcgJiYgZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGUubmFtZSA9PT0gJ2ZlYXR1cmUtc3RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5uYW1lID09PSAnaGFzJyAmJiBlLmFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlLm5hbWUgPT09ICdwcm9wZXJ0aWVzJyB8fFxuICAgICAgICAgICAgZS5uYW1lID09PSAnZ2VvbWV0cnktdHlwZScgfHxcbiAgICAgICAgICAgIGUubmFtZSA9PT0gJ2lkJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgvXmZpbHRlci0vLnRlc3QoZS5uYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgZS5lYWNoQ2hpbGQoYXJnID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiAhaXNGZWF0dXJlQ29uc3RhbnQoYXJnKSkgeyByZXN1bHQgPSBmYWxzZTsgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGVDb25zdGFudChlOiBFeHByZXNzaW9uKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ2ZlYXR1cmUtc3RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgZS5lYWNoQ2hpbGQoYXJnID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiAhaXNTdGF0ZUNvbnN0YW50KGFyZykpIHsgcmVzdWx0ID0gZmFsc2U7IH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQoZTogRXhwcmVzc2lvbiwgcHJvcGVydGllczogQXJyYXk8c3RyaW5nPikge1xuICAgIGlmIChlIGluc3RhbmNlb2YgQ29tcG91bmRFeHByZXNzaW9uICYmIHByb3BlcnRpZXMuaW5kZXhPZihlLm5hbWUpID49IDApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgZS5lYWNoQ2hpbGQoKGFyZykgPT4ge1xuICAgICAgICBpZiAocmVzdWx0ICYmICFpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQoYXJnLCBwcm9wZXJ0aWVzKSkgeyByZXN1bHQgPSBmYWxzZTsgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB7aXNGZWF0dXJlQ29uc3RhbnQsIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudCwgaXNTdGF0ZUNvbnN0YW50fTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgIGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5cbmNsYXNzIFZhciBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGJvdW5kRXhwcmVzc2lvbjogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgYm91bmRFeHByZXNzaW9uOiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IGJvdW5kRXhwcmVzc2lvbi50eXBlO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmJvdW5kRXhwcmVzc2lvbiA9IGJvdW5kRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIgfHwgdHlwZW9mIGFyZ3NbMV0gIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYCd2YXInIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgc3RyaW5nIGxpdGVyYWwgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGFyZ3NbMV07XG4gICAgICAgIGlmICghY29udGV4dC5zY29wZS5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBVbmtub3duIHZhcmlhYmxlIFwiJHtuYW1lfVwiLiBNYWtlIHN1cmUgXCIke25hbWV9XCIgaGFzIGJlZW4gYm91bmQgaW4gYW4gZW5jbG9zaW5nIFwibGV0XCIgZXhwcmVzc2lvbiBiZWZvcmUgdXNpbmcgaXQuYCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFZhcihuYW1lLCBjb250ZXh0LnNjb3BlLmdldChuYW1lKSk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3VuZEV4cHJlc3Npb24uZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoKSB7fVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gW1widmFyXCIsIHRoaXMubmFtZV07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU2NvcGUgZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQge2NoZWNrU3VidHlwZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgUGFyc2luZ0Vycm9yIGZyb20gJy4vcGFyc2luZ19lcnJvcic7XG5pbXBvcnQgTGl0ZXJhbCBmcm9tICcuL2RlZmluaXRpb25zL2xpdGVyYWwnO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tICcuL2RlZmluaXRpb25zL2Fzc2VydGlvbic7XG5pbXBvcnQgQ29lcmNpb24gZnJvbSAnLi9kZWZpbml0aW9ucy9jb2VyY2lvbic7XG5pbXBvcnQgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IENvbGxhdG9yRXhwcmVzc2lvbiBmcm9tICcuL2RlZmluaXRpb25zL2NvbGxhdG9yJztcbmltcG9ydCB7aXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50LCBpc0ZlYXR1cmVDb25zdGFudH0gZnJvbSAnLi9pc19jb25zdGFudCc7XG5pbXBvcnQgVmFyIGZyb20gJy4vZGVmaW5pdGlvbnMvdmFyJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb24sIEV4cHJlc3Npb25SZWdpc3RyeX0gZnJvbSAnLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTdGF0ZSBhc3NvY2lhdGVkIHBhcnNpbmcgYXQgYSBnaXZlbiBwb2ludCBpbiBhbiBleHByZXNzaW9uIHRyZWUuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBQYXJzaW5nQ29udGV4dCB7XG4gICAgcmVnaXN0cnk6IEV4cHJlc3Npb25SZWdpc3RyeTtcbiAgICBwYXRoOiBBcnJheTxudW1iZXI+O1xuICAgIGtleTogc3RyaW5nO1xuICAgIHNjb3BlOiBTY29wZTtcbiAgICBlcnJvcnM6IEFycmF5PFBhcnNpbmdFcnJvcj47XG5cbiAgICAvLyBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGlzIGV4cHJlc3Npb24uIFByb3ZpZGVkIG9ubHkgdG8gYWxsb3cgRXhwcmVzc2lvblxuICAgIC8vIGltcGxlbWVudGF0aW9ucyB0byBpbmZlciBhcmd1bWVudCB0eXBlczogRXhwcmVzc2lvbiNwYXJzZSgpIG5lZWQgbm90XG4gICAgLy8gY2hlY2sgdGhhdCB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIHBhcnNlZCBleHByZXNzaW9uIG1hdGNoZXNcbiAgICAvLyBgZXhwZWN0ZWRUeXBlYC5cbiAgICBleHBlY3RlZFR5cGU6ID9UeXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHJlZ2lzdHJ5OiBFeHByZXNzaW9uUmVnaXN0cnksXG4gICAgICAgIHBhdGg6IEFycmF5PG51bWJlcj4gPSBbXSxcbiAgICAgICAgZXhwZWN0ZWRUeXBlOiA/VHlwZSxcbiAgICAgICAgc2NvcGU6IFNjb3BlID0gbmV3IFNjb3BlKCksXG4gICAgICAgIGVycm9yczogQXJyYXk8UGFyc2luZ0Vycm9yPiA9IFtdXG4gICAgKSB7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5rZXkgPSBwYXRoLm1hcChwYXJ0ID0+IGBbJHtwYXJ0fV1gKS5qb2luKCcnKTtcbiAgICAgICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgdGhpcy5leHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGV4cHIgdGhlIEpTT04gZXhwcmVzc2lvbiB0byBwYXJzZVxuICAgICAqIEBwYXJhbSBpbmRleCB0aGUgb3B0aW9uYWwgYXJndW1lbnQgaW5kZXggaWYgdGhpcyBleHByZXNzaW9uIGlzIGFuIGFyZ3VtZW50IG9mIGEgcGFyZW50IGV4cHJlc3Npb24gdGhhdCdzIGJlaW5nIHBhcnNlZFxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMub21pdFR5cGVBbm5vdGF0aW9ucyBzZXQgdHJ1ZSB0byBvbWl0IGluZmVycmVkIHR5cGUgYW5ub3RhdGlvbnMuICBDYWxsZXIgYmV3YXJlOiB3aXRoIHRoaXMgb3B0aW9uIHNldCwgdGhlIHBhcnNlZCBleHByZXNzaW9uJ3MgdHlwZSB3aWxsIE5PVCBzYXRpc2Z5IGBleHBlY3RlZFR5cGVgIGlmIGl0IHdvdWxkIG5vcm1hbGx5IGJlIHdyYXBwZWQgaW4gYW4gaW5mZXJyZWQgYW5ub3RhdGlvbi5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHBhcnNlKFxuICAgICAgICBleHByOiBtaXhlZCxcbiAgICAgICAgaW5kZXg/OiBudW1iZXIsXG4gICAgICAgIGV4cGVjdGVkVHlwZT86ID9UeXBlLFxuICAgICAgICBiaW5kaW5ncz86IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPixcbiAgICAgICAgb3B0aW9uczoge3R5cGVBbm5vdGF0aW9uPzogJ2Fzc2VydCcgfCAnY29lcmNlJyB8ICdvbWl0J30gPSB7fVxuICAgICk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25jYXQoaW5kZXgsIGV4cGVjdGVkVHlwZSwgYmluZGluZ3MpLl9wYXJzZShleHByLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2UoZXhwciwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgX3BhcnNlKGV4cHI6IG1peGVkLCBvcHRpb25zOiB7dHlwZUFubm90YXRpb24/OiAnYXNzZXJ0JyB8ICdjb2VyY2UnIHwgJ29taXQnfSk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGV4cHIgPT09IG51bGwgfHwgdHlwZW9mIGV4cHIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBleHByID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGV4cHIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBleHByID0gWydsaXRlcmFsJywgZXhwcl07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhbm5vdGF0ZShwYXJzZWQsIHR5cGUsIHR5cGVBbm5vdGF0aW9uOiAnYXNzZXJ0JyB8ICdjb2VyY2UnIHwgJ29taXQnKSB7XG4gICAgICAgICAgICBpZiAodHlwZUFubm90YXRpb24gPT09ICdhc3NlcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odHlwZSwgW3BhcnNlZF0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlQW5ub3RhdGlvbiA9PT0gJ2NvZXJjZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvZXJjaW9uKHR5cGUsIFtwYXJzZWRdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cHIpKSB7XG4gICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgRXhwZWN0ZWQgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFtdXS5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb3AgPSBleHByWzBdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGBFeHByZXNzaW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgYnV0IGZvdW5kICR7dHlwZW9mIG9wfSBpbnN0ZWFkLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgWy4uLl1dLmAsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBFeHByID0gdGhpcy5yZWdpc3RyeVtvcF07XG4gICAgICAgICAgICBpZiAoRXhwcikge1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWQgPSBFeHByLnBhcnNlKGV4cHIsIHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cGVjdGVkVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMuZXhwZWN0ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWwgPSBwYXJzZWQudHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHdlIGV4cGVjdCBhIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBvciBhcnJheSBidXQgaGF2ZSBhIHZhbHVlLCB3cmFwIGl0IGluIGFuIGFzc2VydGlvbi5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBleHBlY3QgYSBjb2xvciBvciBmb3JtYXR0ZWQgc3RyaW5nLCBidXQgaGF2ZSBhIHN0cmluZyBvciB2YWx1ZSwgd3JhcCBpdCBpbiBhIGNvZXJjaW9uLlxuICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGRvIHN0YXRpYyB0eXBlLWNoZWNraW5nLlxuICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGVzZSBiZWhhdmlvcnMgYXJlIG92ZXJyaWRhYmxlIGZvcjpcbiAgICAgICAgICAgICAgICAgICAgLy8gICAqIFRoZSBcImNvYWxlc2NlXCIgb3BlcmF0b3IsIHdoaWNoIG5lZWRzIHRvIG9taXQgdHlwZSBhbm5vdGF0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgLy8gICAqIFN0cmluZy12YWx1ZWQgcHJvcGVydGllcyAoZS5nLiBgdGV4dC1maWVsZGApLCB3aGVyZSBjb2VyY2lvbiBpcyBtb3JlIGNvbnZlbmllbnQgdGhhbiBhc3NlcnRpb24uXG4gICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZXhwZWN0ZWQua2luZCA9PT0gJ3N0cmluZycgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ251bWJlcicgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ2Jvb2xlYW4nIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdvYmplY3QnIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdhcnJheScpICYmIGFjdHVhbC5raW5kID09PSAndmFsdWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBhbm5vdGF0ZShwYXJzZWQsIGV4cGVjdGVkLCBvcHRpb25zLnR5cGVBbm5vdGF0aW9uIHx8ICdhc3NlcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZXhwZWN0ZWQua2luZCA9PT0gJ2NvbG9yJyB8fCBleHBlY3RlZC5raW5kID09PSAnZm9ybWF0dGVkJyB8fCBleHBlY3RlZC5raW5kID09PSAncmVzb2x2ZWRJbWFnZScpICYmIChhY3R1YWwua2luZCA9PT0gJ3ZhbHVlJyB8fCBhY3R1YWwua2luZCA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBhbm5vdGF0ZShwYXJzZWQsIGV4cGVjdGVkLCBvcHRpb25zLnR5cGVBbm5vdGF0aW9uIHx8ICdjb2VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoZWNrU3VidHlwZShleHBlY3RlZCwgYWN0dWFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbiBleHByZXNzaW9uJ3MgYXJndW1lbnRzIGFyZSBhbGwgbGl0ZXJhbHMsIHdlIGNhbiBldmFsdWF0ZVxuICAgICAgICAgICAgICAgIC8vIGl0IGltbWVkaWF0ZWx5IGFuZCByZXBsYWNlIGl0IHdpdGggYSBsaXRlcmFsIHZhbHVlIGluIHRoZVxuICAgICAgICAgICAgICAgIC8vIHBhcnNlZC9jb21waWxlZCByZXN1bHQuIEV4cHJlc3Npb25zIHRoYXQgZXhwZWN0IGFuIGltYWdlIHNob3VsZFxuICAgICAgICAgICAgICAgIC8vIG5vdCBiZSByZXNvbHZlZCBoZXJlIHNvIHdlIGNhbiBsYXRlciBnZXQgdGhlIGF2YWlsYWJsZSBpbWFnZXMuXG4gICAgICAgICAgICAgICAgaWYgKCEocGFyc2VkIGluc3RhbmNlb2YgTGl0ZXJhbCkgJiYgKHBhcnNlZC50eXBlLmtpbmQgIT09ICdyZXNvbHZlZEltYWdlJykgJiYgaXNDb25zdGFudChwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVjID0gbmV3IEV2YWx1YXRpb25Db250ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBuZXcgTGl0ZXJhbChwYXJzZWQudHlwZSwgcGFyc2VkLmV2YWx1YXRlKGVjKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoYFVua25vd24gZXhwcmVzc2lvbiBcIiR7b3B9XCIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uYCwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cHIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgJ3VuZGVmaW5lZCcgdmFsdWUgaW52YWxpZC4gVXNlIG51bGwgaW5zdGVhZC5gKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGBCYXJlIG9iamVjdHMgaW52YWxpZC4gVXNlIFtcImxpdGVyYWxcIiwgey4uLn1dIGluc3RlYWQuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgRXhwZWN0ZWQgYW4gYXJyYXksIGJ1dCBmb3VuZCAke3R5cGVvZiBleHByfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBjb250ZXh0IHN1aXRhYmxlIGZvciBwYXJzaW5nIHRoZSBzdWJleHByZXNzaW9uIGF0XG4gICAgICogaW5kZXggYGluZGV4YCwgb3B0aW9uYWxseSBhcHBlbmRpbmcgdG8gJ2xldCcgYmluZGluZyBtYXAuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgYGVycm9yc2AgcHJvcGVydHksIGludGVuZGVkIGZvciBjb2xsZWN0aW5nIGVycm9ycyB3aGlsZVxuICAgICAqIHBhcnNpbmcsIGlzIGNvcGllZCBieSByZWZlcmVuY2UgcmF0aGVyIHRoYW4gY2xvbmVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uY2F0KGluZGV4OiBudW1iZXIsIGV4cGVjdGVkVHlwZT86ID9UeXBlLCBiaW5kaW5ncz86IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPikge1xuICAgICAgICBjb25zdCBwYXRoID0gdHlwZW9mIGluZGV4ID09PSAnbnVtYmVyJyA/IHRoaXMucGF0aC5jb25jYXQoaW5kZXgpIDogdGhpcy5wYXRoO1xuICAgICAgICBjb25zdCBzY29wZSA9IGJpbmRpbmdzID8gdGhpcy5zY29wZS5jb25jYXQoYmluZGluZ3MpIDogdGhpcy5zY29wZTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzaW5nQ29udGV4dChcbiAgICAgICAgICAgIHRoaXMucmVnaXN0cnksXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgZXhwZWN0ZWRUeXBlIHx8IG51bGwsXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHVzaCBhIHBhcnNpbmcgKG9yIHR5cGUgY2hlY2tpbmcpIGVycm9yIGludG8gdGhlIGB0aGlzLmVycm9yc2BcbiAgICAgKiBAcGFyYW0gZXJyb3IgVGhlIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0ga2V5cyBPcHRpb25hbGx5IHNwZWNpZnkgdGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IgYXQgYSBjaGlsZFxuICAgICAqIG9mIHRoZSBjdXJyZW50IGV4cHJlc3Npb24gYXQgYHRoaXMua2V5YC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGVycm9yKGVycm9yOiBzdHJpbmcsIC4uLmtleXM6IEFycmF5PG51bWJlcj4pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7dGhpcy5rZXl9JHtrZXlzLm1hcChrID0+IGBbJHtrfV1gKS5qb2luKCcnKX1gO1xuICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBQYXJzaW5nRXJyb3Ioa2V5LCBlcnJvcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgbnVsbCBpZiBgdGAgaXMgYSBzdWJ0eXBlIG9mIGBleHBlY3RlZGA7IG90aGVyd2lzZSByZXR1cm5zIGFuXG4gICAgICogZXJyb3IgbWVzc2FnZSBhbmQgYWxzbyBwdXNoZXMgaXQgdG8gYHRoaXMuZXJyb3JzYC5cbiAgICAgKi9cbiAgICBjaGVja1N1YnR5cGUoZXhwZWN0ZWQ6IFR5cGUsIHQ6IFR5cGUpOiA/c3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjaGVja1N1YnR5cGUoZXhwZWN0ZWQsIHQpO1xuICAgICAgICBpZiAoZXJyb3IpIHRoaXMuZXJyb3IoZXJyb3IpO1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYXJzaW5nQ29udGV4dDtcblxuZnVuY3Rpb24gaXNDb25zdGFudChleHByZXNzaW9uOiBFeHByZXNzaW9uKSB7XG4gICAgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBWYXIpIHtcbiAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoZXhwcmVzc2lvbi5ib3VuZEV4cHJlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIENvbXBvdW5kRXhwcmVzc2lvbiAmJiBleHByZXNzaW9uLm5hbWUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIENvbGxhdG9yRXhwcmVzc2lvbikge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUgcmVzdWx0cyBvZiBhIENvbGxhdG9yIGV4cHJlc3Npb24gd2l0aCBmaXhlZCBhcmd1bWVudHNcbiAgICAgICAgLy8gZ2VuZXJhbGx5IHNob3VsZG4ndCBjaGFuZ2UgYmV0d2VlbiBleGVjdXRpb25zLCB3ZSBjYW4ndCBzZXJpYWxpemUgdGhlbVxuICAgICAgICAvLyBhcyBjb25zdGFudCBleHByZXNzaW9ucyBiZWNhdXNlIHJlc3VsdHMgY2hhbmdlIGJhc2VkIG9uIGVudmlyb25tZW50LlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgaXNUeXBlQW5ub3RhdGlvbiA9IGV4cHJlc3Npb24gaW5zdGFuY2VvZiBDb2VyY2lvbiB8fFxuICAgICAgICBleHByZXNzaW9uIGluc3RhbmNlb2YgQXNzZXJ0aW9uO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29uc3RhbnQgPSB0cnVlO1xuICAgIGV4cHJlc3Npb24uZWFjaENoaWxkKGNoaWxkID0+IHtcbiAgICAgICAgLy8gV2UgY2FuIF9hbG1vc3RfIGFzc3VtZSB0aGF0IGlmIGBleHByZXNzaW9uc2AgY2hpbGRyZW4gYXJlIGNvbnN0YW50LFxuICAgICAgICAvLyB0aGV5IHdvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGV2YWx1YXRlZCB0byBMaXRlcmFsIHZhbHVlcyB3aGVuIHRoZXlcbiAgICAgICAgLy8gd2VyZSBwYXJzZWQuICBUeXBlIGFubm90YXRpb25zIGFyZSB0aGUgZXhjZXB0aW9uLCBiZWNhdXNlIHRoZXkgbWlnaHRcbiAgICAgICAgLy8gaGF2ZSBiZWVuIGluZmVycmVkIGFuZCBhZGRlZCBhZnRlciBhIGNoaWxkIHdhcyBwYXJzZWQuXG5cbiAgICAgICAgLy8gU28gd2UgcmVjdXJzZSBpbnRvIGlzQ29uc3RhbnQoKSBmb3IgdGhlIGNoaWxkcmVuIG9mIHR5cGUgYW5ub3RhdGlvbnMsXG4gICAgICAgIC8vIGJ1dCBvdGhlcndpc2Ugc2ltcGx5IGNoZWNrIHdoZXRoZXIgdGhleSBhcmUgTGl0ZXJhbHMuXG4gICAgICAgIGlmIChpc1R5cGVBbm5vdGF0aW9uKSB7XG4gICAgICAgICAgICBjaGlsZHJlbkNvbnN0YW50ID0gY2hpbGRyZW5Db25zdGFudCAmJiBpc0NvbnN0YW50KGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkcmVuQ29uc3RhbnQgPSBjaGlsZHJlbkNvbnN0YW50ICYmIGNoaWxkIGluc3RhbmNlb2YgTGl0ZXJhbDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghY2hpbGRyZW5Db25zdGFudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzRmVhdHVyZUNvbnN0YW50KGV4cHJlc3Npb24pICYmXG4gICAgICAgIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudChleHByZXNzaW9uLCBbJ3pvb20nLCAnaGVhdG1hcC1kZW5zaXR5JywgJ2xpbmUtcHJvZ3Jlc3MnLCAnYWNjdW11bGF0ZWQnLCAnaXMtc3VwcG9ydGVkLXNjcmlwdCddKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4vZXhwcmVzc2lvbic7XG5cbmV4cG9ydCB0eXBlIFN0b3BzID0gQXJyYXk8W251bWJlciwgRXhwcmVzc2lvbl0+O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN0b3AgPD0gaW5wdXQsIG9yIDAgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvKHN0b3BzOiBBcnJheTxudW1iZXI+LCBpbnB1dDogbnVtYmVyKSB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gc3RvcHMubGVuZ3RoIC0gMTtcbiAgICBsZXQgbG93ZXJJbmRleCA9IDA7XG4gICAgbGV0IHVwcGVySW5kZXggPSBsYXN0SW5kZXg7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG4gICAgbGV0IGN1cnJlbnRWYWx1ZSwgbmV4dFZhbHVlO1xuXG4gICAgd2hpbGUgKGxvd2VySW5kZXggPD0gdXBwZXJJbmRleCkge1xuICAgICAgICBjdXJyZW50SW5kZXggPSBNYXRoLmZsb29yKChsb3dlckluZGV4ICsgdXBwZXJJbmRleCkgLyAyKTtcbiAgICAgICAgY3VycmVudFZhbHVlID0gc3RvcHNbY3VycmVudEluZGV4XTtcbiAgICAgICAgbmV4dFZhbHVlID0gc3RvcHNbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA8PSBpbnB1dCkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gbGFzdEluZGV4IHx8IGlucHV0IDwgbmV4dFZhbHVlKSB7IC8vIFNlYXJjaCBjb21wbGV0ZVxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvd2VySW5kZXggPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZSA+IGlucHV0KSB7XG4gICAgICAgICAgICB1cHBlckluZGV4ID0gY3VycmVudEluZGV4IC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoJ0lucHV0IGlzIG5vdCBhIG51bWJlci4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAwO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7ZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUb30gZnJvbSAnLi4vc3RvcHMnO1xuXG5pbXBvcnQgdHlwZSB7U3RvcHN9IGZyb20gJy4uL3N0b3BzJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY2xhc3MgU3RlcCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG5cbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcbiAgICBsYWJlbHM6IEFycmF5PG51bWJlcj47XG4gICAgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBpbnB1dDogRXhwcmVzc2lvbiwgc3RvcHM6IFN0b3BzKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICAgICAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgICAgICB0aGlzLm91dHB1dHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbbGFiZWwsIGV4cHJlc3Npb25dIG9mIHN0b3BzKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVscy5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0cy5wdXNoKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gMSA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgJHthcmdzLmxlbmd0aCAtIDF9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChhcmdzLmxlbmd0aCAtIDEpICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgc3RvcHM6IFN0b3BzID0gW107XG5cbiAgICAgICAgbGV0IG91dHB1dFR5cGU6IFR5cGUgPSAobnVsbDogYW55KTtcbiAgICAgICAgaWYgKGNvbnRleHQuZXhwZWN0ZWRUeXBlICYmIGNvbnRleHQuZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBpID09PSAxID8gLUluZmluaXR5IDogYXJnc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1tpICsgMV07XG5cbiAgICAgICAgICAgIGNvbnN0IGxhYmVsS2V5ID0gaTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gaSArIDE7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJzdGVwXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJywgbGFiZWxLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RvcHMubGVuZ3RoICYmIHN0b3BzW3N0b3BzLmxlbmd0aCAtIDFdWzBdID49IGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJzdGVwXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJywgbGFiZWxLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKHZhbHVlLCB2YWx1ZUtleSwgb3V0cHV0VHlwZSk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCBwYXJzZWQudHlwZTtcbiAgICAgICAgICAgIHN0b3BzLnB1c2goW2xhYmVsLCBwYXJzZWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgU3RlcChvdXRwdXRUeXBlLCBpbnB1dCwgc3RvcHMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5sYWJlbHM7XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSB0aGlzLm91dHB1dHM7XG5cbiAgICAgICAgaWYgKGxhYmVscy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzWzBdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9ICgodGhpcy5pbnB1dC5ldmFsdWF0ZShjdHgpOiBhbnkpOiBudW1iZXIpO1xuICAgICAgICBpZiAodmFsdWUgPD0gbGFiZWxzWzBdKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1swXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RvcENvdW50ID0gbGFiZWxzLmxlbmd0aDtcbiAgICAgICAgaWYgKHZhbHVlID49IGxhYmVsc1tzdG9wQ291bnQgLSAxXSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbc3RvcENvdW50IC0gMV0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUbyhsYWJlbHMsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG91dHB1dHNbaW5kZXhdLmV2YWx1YXRlKGN0eCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICAgICAgZm9yIChjb25zdCBleHByZXNzaW9uIG9mIHRoaXMub3V0cHV0cykge1xuICAgICAgICAgICAgZm4oZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKTogQXJyYXk8VmFsdWUgfCB2b2lkPiB7XG4gICAgICAgIHJldHVybiBbXS5jb25jYXQoLi4udGhpcy5vdXRwdXRzLm1hcCgob3V0cHV0KSA9PiBvdXRwdXQucG9zc2libGVPdXRwdXRzKCkpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJzdGVwXCIsIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2godGhpcy5sYWJlbHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHRoaXMub3V0cHV0c1tpXS5zZXJpYWxpemUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdGVwO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4vY29sb3InO1xuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyKGE6IG51bWJlciwgYjogbnVtYmVyLCB0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gKGEgKiAoMSAtIHQpKSArIChiICogdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcihmcm9tOiBDb2xvciwgdG86IENvbG9yLCB0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICBudW1iZXIoZnJvbS5yLCB0by5yLCB0KSxcbiAgICAgICAgbnVtYmVyKGZyb20uZywgdG8uZywgdCksXG4gICAgICAgIG51bWJlcihmcm9tLmIsIHRvLmIsIHQpLFxuICAgICAgICBudW1iZXIoZnJvbS5hLCB0by5hLCB0KVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheShmcm9tOiBBcnJheTxudW1iZXI+LCB0bzogQXJyYXk8bnVtYmVyPiwgdDogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGZyb20ubWFwKChkLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBudW1iZXIoZCwgdG9baV0sIHQpO1xuICAgIH0pO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4vY29sb3InO1xuXG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZU51bWJlcn0gZnJvbSAnLi9pbnRlcnBvbGF0ZSc7XG5cbnR5cGUgTEFCQ29sb3IgPSB7XG4gICAgbDogbnVtYmVyLFxuICAgIGE6IG51bWJlcixcbiAgICBiOiBudW1iZXIsXG4gICAgYWxwaGE6IG51bWJlclxufTtcblxudHlwZSBIQ0xDb2xvciA9IHtcbiAgICBoOiBudW1iZXIsXG4gICAgYzogbnVtYmVyLFxuICAgIGw6IG51bWJlcixcbiAgICBhbHBoYTogbnVtYmVyXG59O1xuXG4vLyBDb25zdGFudHNcbmNvbnN0IFhuID0gMC45NTA0NzAsIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgIFluID0gMSxcbiAgICBabiA9IDEuMDg4ODMwLFxuICAgIHQwID0gNCAvIDI5LFxuICAgIHQxID0gNiAvIDI5LFxuICAgIHQyID0gMyAqIHQxICogdDEsXG4gICAgdDMgPSB0MSAqIHQxICogdDEsXG4gICAgZGVnMnJhZCA9IE1hdGguUEkgLyAxODAsXG4gICAgcmFkMmRlZyA9IDE4MCAvIE1hdGguUEk7XG5cbi8vIFV0aWxpdGllc1xuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gICAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KHQpIHtcbiAgICByZXR1cm4gdCA+IHQxID8gdCAqIHQgKiB0IDogdDIgKiAodCAtIHQwKTtcbn1cblxuZnVuY3Rpb24geHl6MnJnYih4KSB7XG4gICAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJ4eXooeCkge1xuICAgIHggLz0gMjU1O1xuICAgIHJldHVybiB4IDw9IDAuMDQwNDUgPyB4IC8gMTIuOTIgOiBNYXRoLnBvdygoeCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG4vLyBMQUJcbmZ1bmN0aW9uIHJnYlRvTGFiKHJnYkNvbG9yOiBDb2xvcik6IExBQkNvbG9yIHtcbiAgICBjb25zdCBiID0gcmdiMnh5eihyZ2JDb2xvci5yKSxcbiAgICAgICAgYSA9IHJnYjJ4eXoocmdiQ29sb3IuZyksXG4gICAgICAgIGwgPSByZ2IyeHl6KHJnYkNvbG9yLmIpLFxuICAgICAgICB4ID0geHl6MmxhYigoMC40MTI0NTY0ICogYiArIDAuMzU3NTc2MSAqIGEgKyAwLjE4MDQzNzUgKiBsKSAvIFhuKSxcbiAgICAgICAgeSA9IHh5ejJsYWIoKDAuMjEyNjcyOSAqIGIgKyAwLjcxNTE1MjIgKiBhICsgMC4wNzIxNzUwICogbCkgLyBZbiksXG4gICAgICAgIHogPSB4eXoybGFiKCgwLjAxOTMzMzkgKiBiICsgMC4xMTkxOTIwICogYSArIDAuOTUwMzA0MSAqIGwpIC8gWm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbDogMTE2ICogeSAtIDE2LFxuICAgICAgICBhOiA1MDAgKiAoeCAtIHkpLFxuICAgICAgICBiOiAyMDAgKiAoeSAtIHopLFxuICAgICAgICBhbHBoYTogcmdiQ29sb3IuYVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGxhYlRvUmdiKGxhYkNvbG9yOiBMQUJDb2xvcik6IENvbG9yIHtcbiAgICBsZXQgeSA9IChsYWJDb2xvci5sICsgMTYpIC8gMTE2LFxuICAgICAgICB4ID0gaXNOYU4obGFiQ29sb3IuYSkgPyB5IDogeSArIGxhYkNvbG9yLmEgLyA1MDAsXG4gICAgICAgIHogPSBpc05hTihsYWJDb2xvci5iKSA/IHkgOiB5IC0gbGFiQ29sb3IuYiAvIDIwMDtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICB4eXoycmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeiksIC8vIEQ2NSAtPiBzUkdCXG4gICAgICAgIHh5ejJyZ2IoLTAuOTY5MjY2MCAqIHggKyAxLjg3NjAxMDggKiB5ICsgMC4wNDE1NTYwICogeiksXG4gICAgICAgIHh5ejJyZ2IoMC4wNTU2NDM0ICogeCAtIDAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KSxcbiAgICAgICAgbGFiQ29sb3IuYWxwaGFcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUxhYihmcm9tOiBMQUJDb2xvciwgdG86IExBQkNvbG9yLCB0OiBudW1iZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmwsIHRvLmwsIHQpLFxuICAgICAgICBhOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmEsIHRvLmEsIHQpLFxuICAgICAgICBiOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmIsIHRvLmIsIHQpLFxuICAgICAgICBhbHBoYTogaW50ZXJwb2xhdGVOdW1iZXIoZnJvbS5hbHBoYSwgdG8uYWxwaGEsIHQpXG4gICAgfTtcbn1cblxuLy8gSENMXG5mdW5jdGlvbiByZ2JUb0hjbChyZ2JDb2xvcjogQ29sb3IpOiBIQ0xDb2xvciB7XG4gICAgY29uc3Qge2wsIGEsIGJ9ID0gcmdiVG9MYWIocmdiQ29sb3IpO1xuICAgIGNvbnN0IGggPSBNYXRoLmF0YW4yKGIsIGEpICogcmFkMmRlZztcbiAgICByZXR1cm4ge1xuICAgICAgICBoOiBoIDwgMCA/IGggKyAzNjAgOiBoLFxuICAgICAgICBjOiBNYXRoLnNxcnQoYSAqIGEgKyBiICogYiksXG4gICAgICAgIGwsXG4gICAgICAgIGFscGhhOiByZ2JDb2xvci5hXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaGNsVG9SZ2IoaGNsQ29sb3I6IEhDTENvbG9yKTogQ29sb3Ige1xuICAgIGNvbnN0IGggPSBoY2xDb2xvci5oICogZGVnMnJhZCxcbiAgICAgICAgYyA9IGhjbENvbG9yLmMsXG4gICAgICAgIGwgPSBoY2xDb2xvci5sO1xuICAgIHJldHVybiBsYWJUb1JnYih7XG4gICAgICAgIGwsXG4gICAgICAgIGE6IE1hdGguY29zKGgpICogYyxcbiAgICAgICAgYjogTWF0aC5zaW4oaCkgKiBjLFxuICAgICAgICBhbHBoYTogaGNsQ29sb3IuYWxwaGFcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVIdWUoYTogbnVtYmVyLCBiOiBudW1iZXIsIHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGQgPSBiIC0gYTtcbiAgICByZXR1cm4gYSArIHQgKiAoZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCk7XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlSGNsKGZyb206IEhDTENvbG9yLCB0bzogSENMQ29sb3IsIHQ6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGg6IGludGVycG9sYXRlSHVlKGZyb20uaCwgdG8uaCwgdCksXG4gICAgICAgIGM6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYywgdG8uYywgdCksXG4gICAgICAgIGw6IGludGVycG9sYXRlTnVtYmVyKGZyb20ubCwgdG8ubCwgdCksXG4gICAgICAgIGFscGhhOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmFscGhhLCB0by5hbHBoYSwgdClcbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgbGFiID0ge1xuICAgIGZvcndhcmQ6IHJnYlRvTGFiLFxuICAgIHJldmVyc2U6IGxhYlRvUmdiLFxuICAgIGludGVycG9sYXRlOiBpbnRlcnBvbGF0ZUxhYlxufTtcblxuZXhwb3J0IGNvbnN0IGhjbCA9IHtcbiAgICBmb3J3YXJkOiByZ2JUb0hjbCxcbiAgICByZXZlcnNlOiBoY2xUb1JnYixcbiAgICBpbnRlcnBvbGF0ZTogaW50ZXJwb2xhdGVIY2xcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVW5pdEJlemllciBmcm9tICdAbWFwYm94L3VuaXRiZXppZXInO1xuXG5pbXBvcnQgKiBhcyBpbnRlcnBvbGF0ZSBmcm9tICcuLi8uLi91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCB7dG9TdHJpbmcsIE51bWJlclR5cGUsIENvbG9yVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvfSBmcm9tICcuLi9zdG9wcyc7XG5pbXBvcnQge2hjbCwgbGFifSBmcm9tICcuLi8uLi91dGlsL2NvbG9yX3NwYWNlcyc7XG5cbmltcG9ydCB0eXBlIHtTdG9wc30gZnJvbSAnLi4vc3RvcHMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBJbnRlcnBvbGF0aW9uVHlwZSA9XG4gICAgeyBuYW1lOiAnbGluZWFyJyB9IHxcbiAgICB7IG5hbWU6ICdleHBvbmVudGlhbCcsIGJhc2U6IG51bWJlciB9IHxcbiAgICB7IG5hbWU6ICdjdWJpYy1iZXppZXInLCBjb250cm9sUG9pbnRzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB9O1xuXG5jbGFzcyBJbnRlcnBvbGF0ZSBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG5cbiAgICBvcGVyYXRvcjogJ2ludGVycG9sYXRlJyB8ICdpbnRlcnBvbGF0ZS1oY2wnIHwgJ2ludGVycG9sYXRlLWxhYic7XG4gICAgaW50ZXJwb2xhdGlvbjogSW50ZXJwb2xhdGlvblR5cGU7XG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG4gICAgbGFiZWxzOiBBcnJheTxudW1iZXI+O1xuICAgIG91dHB1dHM6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgb3BlcmF0b3I6ICdpbnRlcnBvbGF0ZScgfCAnaW50ZXJwb2xhdGUtaGNsJyB8ICdpbnRlcnBvbGF0ZS1sYWInLCBpbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uVHlwZSwgaW5wdXQ6IEV4cHJlc3Npb24sIHN0b3BzOiBTdG9wcykge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb247XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICAgICAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgICAgICB0aGlzLm91dHB1dHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbbGFiZWwsIGV4cHJlc3Npb25dIG9mIHN0b3BzKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVscy5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0cy5wdXNoKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGludGVycG9sYXRpb25GYWN0b3IoaW50ZXJwb2xhdGlvbjogSW50ZXJwb2xhdGlvblR5cGUsIGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnZXhwb25lbnRpYWwnKSB7XG4gICAgICAgICAgICB0ID0gZXhwb25lbnRpYWxJbnRlcnBvbGF0aW9uKGlucHV0LCBpbnRlcnBvbGF0aW9uLmJhc2UsIGxvd2VyLCB1cHBlcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnbGluZWFyJykge1xuICAgICAgICAgICAgdCA9IGV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbihpbnB1dCwgMSwgbG93ZXIsIHVwcGVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdjdWJpYy1iZXppZXInKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gaW50ZXJwb2xhdGlvbi5jb250cm9sUG9pbnRzO1xuICAgICAgICAgICAgY29uc3QgdWIgPSBuZXcgVW5pdEJlemllcihjWzBdLCBjWzFdLCBjWzJdLCBjWzNdKTtcbiAgICAgICAgICAgIHQgPSB1Yi5zb2x2ZShleHBvbmVudGlhbEludGVycG9sYXRpb24oaW5wdXQsIDEsIGxvd2VyLCB1cHBlcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGxldCBbb3BlcmF0b3IsIGludGVycG9sYXRpb24sIGlucHV0LCAuLi5yZXN0XSA9IGFyZ3M7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGludGVycG9sYXRpb24pIHx8IGludGVycG9sYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYW4gaW50ZXJwb2xhdGlvbiB0eXBlIGV4cHJlc3Npb24uYCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvblswXSA9PT0gJ2xpbmVhcicpIHtcbiAgICAgICAgICAgIGludGVycG9sYXRpb24gPSB7bmFtZTogJ2xpbmVhcid9O1xuICAgICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRpb25bMF0gPT09ICdleHBvbmVudGlhbCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBpbnRlcnBvbGF0aW9uWzFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlICE9PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBhIG51bWVyaWMgYmFzZS5gLCAxLCAxKTtcbiAgICAgICAgICAgIGludGVycG9sYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2V4cG9uZW50aWFsJyxcbiAgICAgICAgICAgICAgICBiYXNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRpb25bMF0gPT09ICdjdWJpYy1iZXppZXInKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sUG9pbnRzID0gaW50ZXJwb2xhdGlvbi5zbGljZSgxKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb250cm9sUG9pbnRzLmxlbmd0aCAhPT0gNCB8fFxuICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludHMuc29tZSh0ID0+IHR5cGVvZiB0ICE9PSAnbnVtYmVyJyB8fCB0IDwgMCB8fCB0ID4gMSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdDdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBmb3VyIG51bWVyaWMgYXJndW1lbnRzIHdpdGggdmFsdWVzIGJldHdlZW4gMCBhbmQgMS4nLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY3ViaWMtYmV6aWVyJyxcbiAgICAgICAgICAgICAgICBjb250cm9sUG9pbnRzOiAoY29udHJvbFBvaW50czogYW55KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBVbmtub3duIGludGVycG9sYXRpb24gdHlwZSAke1N0cmluZyhpbnRlcnBvbGF0aW9uWzBdKX1gLCAxLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAtIDEgPCA0KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICR7YXJncy5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoYXJncy5sZW5ndGggLSAxKSAlIDIgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGNvbnRleHQucGFyc2UoaW5wdXQsIDIsIE51bWJlclR5cGUpO1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBzdG9wczogU3RvcHMgPSBbXTtcblxuICAgICAgICBsZXQgb3V0cHV0VHlwZTogVHlwZSA9IChudWxsOiBhbnkpO1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZS1oY2wnIHx8IG9wZXJhdG9yID09PSAnaW50ZXJwb2xhdGUtbGFiJykge1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IENvbG9yVHlwZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmV4cGVjdGVkVHlwZSAmJiBjb250ZXh0LmV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3QubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gcmVzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzdFtpICsgMV07XG5cbiAgICAgICAgICAgIGNvbnN0IGxhYmVsS2V5ID0gaSArIDM7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUtleSA9IGkgKyA0O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxhYmVsICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLCBsYWJlbEtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdG9wcy5sZW5ndGggJiYgc3RvcHNbc3RvcHMubGVuZ3RoIC0gMV1bMF0gPj0gbGFiZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJywgbGFiZWxLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKHZhbHVlLCB2YWx1ZUtleSwgb3V0cHV0VHlwZSk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCBwYXJzZWQudHlwZTtcbiAgICAgICAgICAgIHN0b3BzLnB1c2goW2xhYmVsLCBwYXJzZWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdXRwdXRUeXBlLmtpbmQgIT09ICdudW1iZXInICYmXG4gICAgICAgICAgICBvdXRwdXRUeXBlLmtpbmQgIT09ICdjb2xvcicgJiZcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgb3V0cHV0VHlwZS5raW5kID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgb3V0cHV0VHlwZS5pdGVtVHlwZS5raW5kID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBvdXRwdXRUeXBlLk4gPT09ICdudW1iZXInXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFR5cGUgJHt0b1N0cmluZyhvdXRwdXRUeXBlKX0gaXMgbm90IGludGVycG9sYXRhYmxlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcnBvbGF0ZShvdXRwdXRUeXBlLCAob3BlcmF0b3I6IGFueSksIGludGVycG9sYXRpb24sIGlucHV0LCBzdG9wcyk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmxhYmVscztcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMub3V0cHV0cztcblxuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbMF0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKCh0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk6IGFueSk6IG51bWJlcik7XG4gICAgICAgIGlmICh2YWx1ZSA8PSBsYWJlbHNbMF0pIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzWzBdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9wQ291bnQgPSBsYWJlbHMubGVuZ3RoO1xuICAgICAgICBpZiAodmFsdWUgPj0gbGFiZWxzW3N0b3BDb3VudCAtIDFdKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1tzdG9wQ291bnQgLSAxXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvKGxhYmVscywgdmFsdWUpO1xuICAgICAgICBjb25zdCBsb3dlciA9IGxhYmVsc1tpbmRleF07XG4gICAgICAgIGNvbnN0IHVwcGVyID0gbGFiZWxzW2luZGV4ICsgMV07XG4gICAgICAgIGNvbnN0IHQgPSBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yKHRoaXMuaW50ZXJwb2xhdGlvbiwgdmFsdWUsIGxvd2VyLCB1cHBlcik7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0TG93ZXIgPSBvdXRwdXRzW2luZGV4XS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICBjb25zdCBvdXRwdXRVcHBlciA9IG91dHB1dHNbaW5kZXggKyAxXS5ldmFsdWF0ZShjdHgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnaW50ZXJwb2xhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gKGludGVycG9sYXRlW3RoaXMudHlwZS5raW5kLnRvTG93ZXJDYXNlKCldOiBhbnkpKG91dHB1dExvd2VyLCBvdXRwdXRVcHBlciwgdCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZS1oY2wnKSB7XG4gICAgICAgICAgICByZXR1cm4gaGNsLnJldmVyc2UoaGNsLmludGVycG9sYXRlKGhjbC5mb3J3YXJkKG91dHB1dExvd2VyKSwgaGNsLmZvcndhcmQob3V0cHV0VXBwZXIpLCB0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbGFiLnJldmVyc2UobGFiLmludGVycG9sYXRlKGxhYi5mb3J3YXJkKG91dHB1dExvd2VyKSwgbGFiLmZvcndhcmQob3V0cHV0VXBwZXIpLCB0KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgICAgICBmb3IgKGNvbnN0IGV4cHJlc3Npb24gb2YgdGhpcy5vdXRwdXRzKSB7XG4gICAgICAgICAgICBmbihleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBvc3NpYmxlT3V0cHV0cygpOiBBcnJheTxWYWx1ZSB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFtdLmNvbmNhdCguLi50aGlzLm91dHB1dHMubWFwKChvdXRwdXQpID0+IG91dHB1dC5wb3NzaWJsZU91dHB1dHMoKSkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICBsZXQgaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnbGluZWFyJykge1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IFtcImxpbmVhclwiXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmludGVycG9sYXRpb24ubmFtZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuICAgICAgICAgICAgaWYgICh0aGlzLmludGVycG9sYXRpb24uYmFzZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gPSBbXCJsaW5lYXJcIl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gPSBbXCJleHBvbmVudGlhbFwiLCB0aGlzLmludGVycG9sYXRpb24uYmFzZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uID0gW1wiY3ViaWMtYmV6aWVyXCIgXS5jb25jYXQodGhpcy5pbnRlcnBvbGF0aW9uLmNvbnRyb2xQb2ludHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFt0aGlzLm9wZXJhdG9yLCBpbnRlcnBvbGF0aW9uLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbHNbaV0sXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRzW2ldLnNlcmlhbGl6ZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmF0aW8gdGhhdCBjYW4gYmUgdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGV4cG9uZW50aWFsIGZ1bmN0aW9uXG4gKiBzdG9wcy5cbiAqIEhvdyBpdCB3b3JrczogVHdvIGNvbnNlY3V0aXZlIHN0b3AgdmFsdWVzIGRlZmluZSBhIChzY2FsZWQgYW5kIHNoaWZ0ZWQpIGV4cG9uZW50aWFsIGZ1bmN0aW9uIGBmKHgpID0gYSAqIGJhc2VeeCArIGJgLCB3aGVyZSBgYmFzZWAgaXMgdGhlIHVzZXItc3BlY2lmaWVkIGJhc2UsXG4gKiBhbmQgYGFgIGFuZCBgYmAgYXJlIGNvbnN0YW50cyBhZmZvcmRpbmcgc3VmZmljaWVudCBkZWdyZWVzIG9mIGZyZWVkb20gdG8gZml0XG4gKiB0aGUgZnVuY3Rpb24gdG8gdGhlIGdpdmVuIHN0b3BzLlxuICpcbiAqIEhlcmUncyBhIGJpdCBvZiBhbGdlYnJhIHRoYXQgbGV0cyB1cyBjb21wdXRlIGBmKHgpYCBkaXJlY3RseSBmcm9tIHRoZSBzdG9wXG4gKiB2YWx1ZXMgd2l0aG91dCBleHBsaWNpdGx5IHNvbHZpbmcgZm9yIGBhYCBhbmQgYGJgOlxuICpcbiAqIEZpcnN0IHN0b3AgdmFsdWU6IGBmKHgwKSA9IHkwID0gYSAqIGJhc2VeeDAgKyBiYFxuICogU2Vjb25kIHN0b3AgdmFsdWU6IGBmKHgxKSA9IHkxID0gYSAqIGJhc2VeeDEgKyBiYFxuICogPT4gYHkxIC0geTAgPSBhKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqID0+IGBhID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MClgXG4gKlxuICogRGVzaXJlZCB2YWx1ZTogYGYoeCkgPSB5ID0gYSAqIGJhc2VeeCArIGJgXG4gKiA9PiBgZih4KSA9IHkwICsgYSAqIChiYXNlXnggLSBiYXNlXngwKWBcbiAqXG4gKiBGcm9tIHRoZSBhYm92ZSwgd2UgY2FuIHJlcGxhY2UgdGhlIGBhYCBpbiBgYSAqIChiYXNlXnggLSBiYXNlXngwKWAgYW5kIGRvIGFcbiAqIGxpdHRsZSBhbGdlYnJhOlxuICogYGBgXG4gKiBhICogKGJhc2VeeCAtIGJhc2VeeDApID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MCkgKiAoYmFzZV54IC0gYmFzZV54MClcbiAqICAgICAgICAgICAgICAgICAgICAgPSAoeTEgLSB5MCkgKiAoYmFzZV54IC0gYmFzZV54MCkgLyAoYmFzZV54MSAtIGJhc2VeeDApXG4gKiBgYGBcbiAqXG4gKiBJZiB3ZSBsZXQgYChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIGJhc2VeeDApYCwgdGhlbiB3ZSBoYXZlXG4gKiBgZih4KSA9IHkwICsgKHkxIC0geTApICogcmF0aW9gLiAgSW4gb3RoZXIgd29yZHMsIGByYXRpb2AgbWF5IGJlIHRyZWF0ZWQgYXNcbiAqIGFuIGludGVycG9sYXRpb24gZmFjdG9yIGJldHdlZW4gdGhlIHR3byBzdG9wcycgb3V0cHV0IHZhbHVlcy5cbiAqXG4gKiAoTm90ZTogYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybSBmb3IgYHJhdGlvYCxcbiAqIGAoYmFzZV4oeC14MCkgLSAxKSAvIChiYXNlXih4MS14MCkgLSAxKSBgLCBpcyBlcXVpdmFsZW50LCBidXQgcmVxdWlyZXMgZmV3ZXJcbiAqIGV4cGVuc2l2ZSBgTWF0aC5wb3coKWAgb3BlcmF0aW9ucy4pXG4gKlxuICogQHByaXZhdGVcbiovXG5mdW5jdGlvbiBleHBvbmVudGlhbEludGVycG9sYXRpb24oaW5wdXQsIGJhc2UsIGxvd2VyVmFsdWUsIHVwcGVyVmFsdWUpIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdXBwZXJWYWx1ZSAtIGxvd2VyVmFsdWU7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBpbnB1dCAtIGxvd2VyVmFsdWU7XG5cbiAgICBpZiAoZGlmZmVyZW5jZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKGJhc2UgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHByb2dyZXNzIC8gZGlmZmVyZW5jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKE1hdGgucG93KGJhc2UsIHByb2dyZXNzKSAtIDEpIC8gKE1hdGgucG93KGJhc2UsIGRpZmZlcmVuY2UpIC0gMSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcnBvbGF0ZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtjaGVja1N1YnR5cGUsIFZhbHVlVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIENvYWxlc2NlIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBhcmdzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoXCJFeHBlY3RlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvdXRwdXRUeXBlOiBUeXBlID0gKG51bGw6IGFueSk7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkVHlwZSA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICBpZiAoZXhwZWN0ZWRUeXBlICYmIGV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gZXhwZWN0ZWRUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzLnNsaWNlKDEpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKGFyZywgMSArIHBhcnNlZEFyZ3MubGVuZ3RoLCBvdXRwdXRUeXBlLCB1bmRlZmluZWQsIHt0eXBlQW5ub3RhdGlvbjogJ29taXQnfSk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCBwYXJzZWQudHlwZTtcbiAgICAgICAgICAgIHBhcnNlZEFyZ3MucHVzaChwYXJzZWQpO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChvdXRwdXRUeXBlKTtcblxuICAgICAgICAvLyBBYm92ZSwgd2UgcGFyc2UgYXJndW1lbnRzIHdpdGhvdXQgaW5mZXJyZWQgdHlwZSBhbm5vdGF0aW9uIHNvIHRoYXRcbiAgICAgICAgLy8gdGhleSBkb24ndCBwcm9kdWNlIGEgcnVudGltZSBlcnJvciBmb3IgYG51bGxgIGlucHV0LCB3aGljaCB3b3VsZFxuICAgICAgICAvLyBwcmVlbXB0IHRoZSBkZXNpcmVkIG51bGwtY29hbGVzY2luZyBiZWhhdmlvci5cbiAgICAgICAgLy8gVGh1cywgaWYgYW55IG9mIG91ciBhcmd1bWVudHMgd291bGQgaGF2ZSBuZWVkZWQgYW4gYW5ub3RhdGlvbiwgd2VcbiAgICAgICAgLy8gbmVlZCB0byB3cmFwIHRoZSBlbmNsb3NpbmcgY29hbGVzY2UgZXhwcmVzc2lvbiB3aXRoIGl0IGluc3RlYWQuXG4gICAgICAgIGNvbnN0IG5lZWRzQW5ub3RhdGlvbiA9IGV4cGVjdGVkVHlwZSAmJlxuICAgICAgICAgICAgcGFyc2VkQXJncy5zb21lKGFyZyA9PiBjaGVja1N1YnR5cGUoZXhwZWN0ZWRUeXBlLCBhcmcudHlwZSkpO1xuXG4gICAgICAgIHJldHVybiBuZWVkc0Fubm90YXRpb24gP1xuICAgICAgICAgICAgbmV3IENvYWxlc2NlKFZhbHVlVHlwZSwgcGFyc2VkQXJncykgOlxuICAgICAgICAgICAgbmV3IENvYWxlc2NlKChvdXRwdXRUeXBlOiBhbnkpLCBwYXJzZWRBcmdzKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICBsZXQgYXJnQ291bnQgPSAwO1xuICAgICAgICBsZXQgcmVxdWVzdGVkSW1hZ2VOYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ0NvdW50Kys7XG4gICAgICAgICAgICByZXN1bHQgPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgZmlyc3QgcmVxdWVzdGVkIGltYWdlIGluIGEgY29hbGVzY2Ugc3RhdGVtZW50XG4gICAgICAgICAgICAvLyBpZiBjb2FsZXNjZSBjYW4ndCBmaW5kIGEgdmFsaWQgaW1hZ2UsIHdlIHJldHVybiB0aGUgZmlyc3QgaW1hZ2UgbmFtZSBzbyBzdHlsZWltYWdlbWlzc2luZyBjYW4gZmlyZVxuICAgICAgICAgICAgaWYgKGFyZy50eXBlLmtpbmQgPT09ICdyZXNvbHZlZEltYWdlJyAmJiAhcmVzdWx0LmF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdGVkSW1hZ2VOYW1lKSByZXF1ZXN0ZWRJbWFnZU5hbWUgPSBhcmcuZXZhbHVhdGUoY3R4KS5uYW1lO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID09PSB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlcXVlc3RlZEltYWdlTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCk6IEFycmF5PFZhbHVlIHwgdm9pZD4ge1xuICAgICAgICByZXR1cm4gW10uY29uY2F0KC4uLnRoaXMuYXJncy5tYXAoKGFyZykgPT4gYXJnLnBvc3NpYmxlT3V0cHV0cygpKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiY29hbGVzY2VcIl07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29hbGVzY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0ICBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuXG5jbGFzcyBMZXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT47XG4gICAgcmVzdWx0OiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IoYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPiwgcmVzdWx0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHJlc3VsdC50eXBlO1xuICAgICAgICB0aGlzLmJpbmRpbmdzID0gW10uY29uY2F0KGJpbmRpbmdzKTtcbiAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQuZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiB0aGlzLmJpbmRpbmdzKSB7XG4gICAgICAgICAgICBmbihiaW5kaW5nWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBmbih0aGlzLnJlc3VsdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNClcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuXG4gICAgICAgIGNvbnN0IGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGFyZ3NbaV07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgc3RyaW5nLCBidXQgZm91bmQgJHt0eXBlb2YgbmFtZX0gaW5zdGVhZC5gLCBpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKC9bXmEtekEtWjAtOV9dLy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFZhcmlhYmxlIG5hbWVzIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yICdfJy5gLCBpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaSArIDFdLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgYmluZGluZ3MucHVzaChbbmFtZSwgdmFsdWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQucGFyc2UoYXJnc1thcmdzLmxlbmd0aCAtIDFdLCBhcmdzLmxlbmd0aCAtIDEsIGNvbnRleHQuZXhwZWN0ZWRUeXBlLCBiaW5kaW5ncyk7XG4gICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4gbmV3IExldChiaW5kaW5ncywgcmVzdWx0KTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC5wb3NzaWJsZU91dHB1dHMoKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJsZXRcIl07XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGV4cHJdIG9mIHRoaXMuYmluZGluZ3MpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChuYW1lLCBleHByLnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBzZXJpYWxpemVkLnB1c2godGhpcy5yZXN1bHQuc2VyaWFsaXplKCkpO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExldDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YXJyYXksIFZhbHVlVHlwZSwgTnVtYmVyVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlLCBBcnJheVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcblxuY2xhc3MgQXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGluZGV4OiBFeHByZXNzaW9uO1xuICAgIGlucHV0OiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgaW5kZXg6IEV4cHJlc3Npb24sIGlucHV0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMylcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMl0sIDIsIGFycmF5KGNvbnRleHQuZXhwZWN0ZWRUeXBlIHx8IFZhbHVlVHlwZSkpO1xuXG4gICAgICAgIGlmICghaW5kZXggfHwgIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCB0OiBBcnJheVR5cGUgPSAoaW5wdXQudHlwZTogYW55KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBdCh0Lml0ZW1UeXBlLCBpbmRleCwgaW5wdXQpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSAoKHRoaXMuaW5kZXguZXZhbHVhdGUoY3R4KTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgY29uc3QgYXJyYXkgPSAoKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTogQXJyYXk8VmFsdWU+KTtcblxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAke2luZGV4fSA8IDAuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPj0gYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAke2luZGV4fSA+ICR7YXJyYXkubGVuZ3RoIC0gMX0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggIT09IE1hdGguZmxvb3IoaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBBcnJheSBpbmRleCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBmb3VuZCAke2luZGV4fSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5W2luZGV4XTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMuaW5kZXgpO1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBbXCJhdFwiLCB0aGlzLmluZGV4LnNlcmlhbGl6ZSgpLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge3R5cGVPZn0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB7VmFsdWVUeXBlLCB0eXBlIFR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbi8vIE1hcCBpbnB1dCBsYWJlbCB2YWx1ZXMgdG8gb3V0cHV0IGV4cHJlc3Npb24gaW5kZXhcbnR5cGUgQ2FzZXMgPSB7W251bWJlciB8IHN0cmluZ106IG51bWJlcn07XG5cbmNsYXNzIE1hdGNoIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBpbnB1dFR5cGU6IFR5cGU7XG5cbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcbiAgICBjYXNlczogQ2FzZXM7XG4gICAgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj47XG4gICAgb3RoZXJ3aXNlOiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IoaW5wdXRUeXBlOiBUeXBlLCBvdXRwdXRUeXBlOiBUeXBlLCBpbnB1dDogRXhwcmVzc2lvbiwgY2FzZXM6IENhc2VzLCBvdXRwdXRzOiBBcnJheTxFeHByZXNzaW9uPiwgb3RoZXJ3aXNlOiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMuaW5wdXRUeXBlID0gaW5wdXRUeXBlO1xuICAgICAgICB0aGlzLnR5cGUgPSBvdXRwdXRUeXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuY2FzZXMgPSBjYXNlcztcbiAgICAgICAgdGhpcy5vdXRwdXRzID0gb3V0cHV0cztcbiAgICAgICAgdGhpcy5vdGhlcndpc2UgPSBvdGhlcndpc2U7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgJHthcmdzLmxlbmd0aCAtIDF9LmApO1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggJSAyICE9PSAxKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICBsZXQgaW5wdXRUeXBlO1xuICAgICAgICBsZXQgb3V0cHV0VHlwZTtcbiAgICAgICAgaWYgKGNvbnRleHQuZXhwZWN0ZWRUeXBlICYmIGNvbnRleHQuZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYXNlcyA9IHt9O1xuICAgICAgICBjb25zdCBvdXRwdXRzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgYXJncy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGxldCBsYWJlbHMgPSBhcmdzW2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzW2kgKyAxXTtcblxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxhYmVscykpIHtcbiAgICAgICAgICAgICAgICBsYWJlbHMgPSBbbGFiZWxzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGFiZWxDb250ZXh0ID0gY29udGV4dC5jb25jYXQoaSk7XG4gICAgICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbENvbnRleHQuZXJyb3IoJ0V4cGVjdGVkIGF0IGxlYXN0IG9uZSBicmFuY2ggbGFiZWwuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsYWJlbCAhPT0gJ251bWJlcicgJiYgdHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKGBCcmFuY2ggbGFiZWxzIG11c3QgYmUgbnVtYmVycyBvciBzdHJpbmdzLmApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxhYmVsID09PSAnbnVtYmVyJyAmJiBNYXRoLmFicyhsYWJlbCkgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKGBCcmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlcnMgbm8gbGFyZ2VyIHRoYW4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn0uYCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsYWJlbCA9PT0gJ251bWJlcicgJiYgTWF0aC5mbG9vcihsYWJlbCkgIT09IGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbENvbnRleHQuZXJyb3IoYE51bWVyaWMgYnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXIgdmFsdWVzLmApO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaW5wdXRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9IHR5cGVPZihsYWJlbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYWJlbENvbnRleHQuY2hlY2tTdWJ0eXBlKGlucHV0VHlwZSwgdHlwZU9mKGxhYmVsKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXNlc1tTdHJpbmcobGFiZWwpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsQ29udGV4dC5lcnJvcignQnJhbmNoIGxhYmVscyBtdXN0IGJlIHVuaXF1ZS4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlc1tTdHJpbmcobGFiZWwpXSA9IG91dHB1dHMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LnBhcnNlKHZhbHVlLCBpLCBvdXRwdXRUeXBlKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHJlc3VsdC50eXBlO1xuICAgICAgICAgICAgb3V0cHV0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgVmFsdWVUeXBlKTtcbiAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgb3RoZXJ3aXNlID0gY29udGV4dC5wYXJzZShhcmdzW2FyZ3MubGVuZ3RoIC0gMV0sIGFyZ3MubGVuZ3RoIC0gMSwgb3V0cHV0VHlwZSk7XG4gICAgICAgIGlmICghb3RoZXJ3aXNlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBhc3NlcnQoaW5wdXRUeXBlICYmIG91dHB1dFR5cGUpO1xuXG4gICAgICAgIGlmIChpbnB1dC50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiYgY29udGV4dC5jb25jYXQoMSkuY2hlY2tTdWJ0eXBlKChpbnB1dFR5cGU6IGFueSksIGlucHV0LnR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2goKGlucHV0VHlwZTogYW55KSwgKG91dHB1dFR5cGU6IGFueSksIGlucHV0LCBjYXNlcywgb3V0cHV0cywgb3RoZXJ3aXNlKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gKHR5cGVPZihpbnB1dCkgPT09IHRoaXMuaW5wdXRUeXBlICYmIHRoaXMub3V0cHV0c1t0aGlzLmNhc2VzW2lucHV0XV0pIHx8IHRoaXMub3RoZXJ3aXNlO1xuICAgICAgICByZXR1cm4gb3V0cHV0LmV2YWx1YXRlKGN0eCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICAgICAgdGhpcy5vdXRwdXRzLmZvckVhY2goZm4pO1xuICAgICAgICBmbih0aGlzLm90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCk6IEFycmF5PFZhbHVlIHwgdm9pZD4ge1xuICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICAgIC5jb25jYXQoLi4udGhpcy5vdXRwdXRzLm1hcCgob3V0KSA9PiBvdXQucG9zc2libGVPdXRwdXRzKCkpKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLm90aGVyd2lzZS5wb3NzaWJsZU91dHB1dHMoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJtYXRjaFwiLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcblxuICAgICAgICAvLyBTb3J0IHNvIHNlcmlhbGl6YXRpb24gaGFzIGFuIGFyYml0cmFyeSBkZWZpbmVkIG9yZGVyLCBldmVuIHRob3VnaFxuICAgICAgICAvLyBicmFuY2ggb3JkZXIgZG9lc24ndCBhZmZlY3QgZXZhbHVhdGlvblxuICAgICAgICBjb25zdCBzb3J0ZWRMYWJlbHMgPSBPYmplY3Qua2V5cyh0aGlzLmNhc2VzKS5zb3J0KCk7XG5cbiAgICAgICAgLy8gR3JvdXAgYnJhbmNoZXMgYnkgdW5pcXVlIG1hdGNoIGV4cHJlc3Npb24gdG8gc3VwcG9ydCBjb25kZW5zZWRcbiAgICAgICAgLy8gc2VyaWFsaXphdGlvbnMgb2YgdGhlIGZvcm0gW2Nhc2UxLCBjYXNlMiwgLi4uXSAtPiBtYXRjaEV4cHJlc3Npb25cbiAgICAgICAgY29uc3QgZ3JvdXBlZEJ5T3V0cHV0OiBBcnJheTxbbnVtYmVyLCBBcnJheTxudW1iZXIgfCBzdHJpbmc+XT4gPSBbXTtcbiAgICAgICAgY29uc3Qgb3V0cHV0TG9va3VwOiB7W2luZGV4OiBudW1iZXJdOiBudW1iZXJ9ID0ge307IC8vIGxvb2t1cCBpbmRleCBpbnRvIGdyb3VwZWRCeU91dHB1dCBmb3IgYSBnaXZlbiBvdXRwdXQgZXhwcmVzc2lvblxuICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIHNvcnRlZExhYmVscykge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSBvdXRwdXRMb29rdXBbdGhpcy5jYXNlc1tsYWJlbF1dO1xuICAgICAgICAgICAgaWYgKG91dHB1dEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBGaXJzdCB0aW1lIHNlZWluZyB0aGlzIG91dHB1dCwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGdyb3VwZWQgbGlzdFxuICAgICAgICAgICAgICAgIG91dHB1dExvb2t1cFt0aGlzLmNhc2VzW2xhYmVsXV0gPSBncm91cGVkQnlPdXRwdXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGdyb3VwZWRCeU91dHB1dC5wdXNoKFt0aGlzLmNhc2VzW2xhYmVsXSwgW2xhYmVsXV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBzZWVuIHRoaXMgZXhwcmVzc2lvbiBiZWZvcmUsIGFkZCB0aGUgbGFiZWwgdG8gdGhhdCBvdXRwdXQncyBncm91cFxuICAgICAgICAgICAgICAgIGdyb3VwZWRCeU91dHB1dFtvdXRwdXRJbmRleF1bMV0ucHVzaChsYWJlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2VyY2VMYWJlbCA9IChsYWJlbCkgPT4gdGhpcy5pbnB1dFR5cGUua2luZCA9PT0gJ251bWJlcicgPyBOdW1iZXIobGFiZWwpIDogbGFiZWw7XG5cbiAgICAgICAgZm9yIChjb25zdCBbb3V0cHV0SW5kZXgsIGxhYmVsc10gb2YgZ3JvdXBlZEJ5T3V0cHV0KSB7XG4gICAgICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgYSBzaW5nbGUgbGFiZWwgbWF0Y2hlcyB0aGlzIG91dHB1dCBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKGNvZXJjZUxhYmVsKGxhYmVsc1swXSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBcnJheSBvZiBsaXRlcmFsIGxhYmVscyBwb2ludGluZyB0byB0aGlzIG91dHB1dCBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKGxhYmVscy5tYXAoY29lcmNlTGFiZWwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLm91dHB1dHNbb3V0cHV0SW5kZXhdLnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBzZXJpYWxpemVkLnB1c2godGhpcy5vdGhlcndpc2Uuc2VyaWFsaXplKCkpO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge0Jvb2xlYW5UeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxudHlwZSBCcmFuY2hlcyA9IEFycmF5PFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXT47XG5cbmNsYXNzIENhc2UgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuXG4gICAgYnJhbmNoZXM6IEJyYW5jaGVzO1xuICAgIG90aGVyd2lzZTogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGJyYW5jaGVzOiBCcmFuY2hlcywgb3RoZXJ3aXNlOiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYnJhbmNoZXMgPSBicmFuY2hlcztcbiAgICAgICAgdGhpcy5vdGhlcndpc2UgPSBvdGhlcndpc2U7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNClcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgJHthcmdzLmxlbmd0aCAtIDF9LmApO1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzLmApO1xuXG4gICAgICAgIGxldCBvdXRwdXRUeXBlOiA/VHlwZTtcbiAgICAgICAgaWYgKGNvbnRleHQuZXhwZWN0ZWRUeXBlICYmIGNvbnRleHQuZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJyYW5jaGVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3QgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaV0sIGksIEJvb2xlYW5UeXBlKTtcbiAgICAgICAgICAgIGlmICghdGVzdCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQucGFyc2UoYXJnc1tpICsgMV0sIGkgKyAxLCBvdXRwdXRUeXBlKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgYnJhbmNoZXMucHVzaChbdGVzdCwgcmVzdWx0XSk7XG5cbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHJlc3VsdC50eXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3RoZXJ3aXNlID0gY29udGV4dC5wYXJzZShhcmdzW2FyZ3MubGVuZ3RoIC0gMV0sIGFyZ3MubGVuZ3RoIC0gMSwgb3V0cHV0VHlwZSk7XG4gICAgICAgIGlmICghb3RoZXJ3aXNlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBhc3NlcnQob3V0cHV0VHlwZSk7XG4gICAgICAgIHJldHVybiBuZXcgQ2FzZSgob3V0cHV0VHlwZTogYW55KSwgYnJhbmNoZXMsIG90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBmb3IgKGNvbnN0IFt0ZXN0LCBleHByZXNzaW9uXSBvZiB0aGlzLmJyYW5jaGVzKSB7XG4gICAgICAgICAgICBpZiAodGVzdC5ldmFsdWF0ZShjdHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5vdGhlcndpc2UuZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3QgW3Rlc3QsIGV4cHJlc3Npb25dIG9mIHRoaXMuYnJhbmNoZXMpIHtcbiAgICAgICAgICAgIGZuKHRlc3QpO1xuICAgICAgICAgICAgZm4oZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgZm4odGhpcy5vdGhlcndpc2UpO1xuICAgIH1cblxuICAgIHBvc3NpYmxlT3V0cHV0cygpOiBBcnJheTxWYWx1ZSB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgICAgICAuY29uY2F0KC4uLnRoaXMuYnJhbmNoZXMubWFwKChbXywgb3V0XSkgPT4gb3V0LnBvc3NpYmxlT3V0cHV0cygpKSlcbiAgICAgICAgICAgIC5jb25jYXQodGhpcy5vdGhlcndpc2UucG9zc2libGVPdXRwdXRzKCkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcImNhc2VcIl07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FzZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dG9TdHJpbmcsIFZhbHVlVHlwZSwgQm9vbGVhblR5cGUsIENvbGxhdG9yVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tICcuL2Fzc2VydGlvbic7XG5pbXBvcnQge3R5cGVPZn0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxudHlwZSBDb21wYXJpc29uT3BlcmF0b3IgPSAnPT0nIHwgJyE9JyB8ICc8JyB8ICc+JyB8ICc8PScgfCAnPj0nIDtcblxuZnVuY3Rpb24gaXNDb21wYXJhYmxlVHlwZShvcDogQ29tcGFyaXNvbk9wZXJhdG9yLCB0eXBlOiBUeXBlKSB7XG4gICAgaWYgKG9wID09PSAnPT0nIHx8IG9wID09PSAnIT0nKSB7XG4gICAgICAgIC8vIGVxdWFsaXR5IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiB0eXBlLmtpbmQgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAnbnVsbCcgfHxcbiAgICAgICAgICAgIHR5cGUua2luZCA9PT0gJ3ZhbHVlJztcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvcmRlcmluZyBvcGVyYXRvclxuICAgICAgICByZXR1cm4gdHlwZS5raW5kID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAndmFsdWUnO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhID09PSBiOyB9XG5mdW5jdGlvbiBuZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhICE9PSBiOyB9XG5mdW5jdGlvbiBsdChjdHgsIGEsIGIpIHsgcmV0dXJuIGEgPCBiOyB9XG5mdW5jdGlvbiBndChjdHgsIGEsIGIpIHsgcmV0dXJuIGEgPiBiOyB9XG5mdW5jdGlvbiBsdGVxKGN0eCwgYSwgYikgeyByZXR1cm4gYSA8PSBiOyB9XG5mdW5jdGlvbiBndGVxKGN0eCwgYSwgYikgeyByZXR1cm4gYSA+PSBiOyB9XG5cbmZ1bmN0aW9uIGVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuIGMuY29tcGFyZShhLCBiKSA9PT0gMDsgfVxuZnVuY3Rpb24gbmVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuICFlcUNvbGxhdGUoY3R4LCBhLCBiLCBjKTsgfVxuZnVuY3Rpb24gbHRDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gYy5jb21wYXJlKGEsIGIpIDwgMDsgfVxuZnVuY3Rpb24gZ3RDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gYy5jb21wYXJlKGEsIGIpID4gMDsgfVxuZnVuY3Rpb24gbHRlcUNvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPD0gMDsgfVxuZnVuY3Rpb24gZ3RlcUNvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPj0gMDsgfVxuXG4vKipcbiAqIFNwZWNpYWwgZm9ybSBmb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGltcGxlbWVudGluZyB0aGUgc2lnbmF0dXJlczpcbiAqIC0gKFQsIFQsID9Db2xsYXRvcikgPT4gYm9vbGVhblxuICogLSAoVCwgdmFsdWUsID9Db2xsYXRvcikgPT4gYm9vbGVhblxuICogLSAodmFsdWUsIFQsID9Db2xsYXRvcikgPT4gYm9vbGVhblxuICpcbiAqIEZvciBpbmVxdWFsaXRpZXMsIFQgbXVzdCBiZSBlaXRoZXIgdmFsdWUsIHN0cmluZywgb3IgbnVtYmVyLiBGb3IgPT0vIT0sIGl0XG4gKiBjYW4gYWxzbyBiZSBib29sZWFuIG9yIG51bGwuXG4gKlxuICogRXF1YWxpdHkgc2VtYW50aWNzIGFyZSBlcXVpdmFsZW50IHRvIEphdmFzY3JpcHQncyBzdHJpY3QgZXF1YWxpdHkgKD09PS8hPT0pXG4gKiAtLSBpLmUuLCB3aGVuIHRoZSBhcmd1bWVudHMnIHR5cGVzIGRvbid0IG1hdGNoLCA9PSBldmFsdWF0ZXMgdG8gZmFsc2UsICE9IHRvXG4gKiB0cnVlLlxuICpcbiAqIFdoZW4gdHlwZXMgZG9uJ3QgbWF0Y2ggaW4gYW4gb3JkZXJpbmcgY29tcGFyaXNvbiwgYSBydW50aW1lIGVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYWtlQ29tcGFyaXNvbihvcDogQ29tcGFyaXNvbk9wZXJhdG9yLCBjb21wYXJlQmFzaWMsIGNvbXBhcmVXaXRoQ29sbGF0b3IpIHtcbiAgICBjb25zdCBpc09yZGVyQ29tcGFyaXNvbiA9IG9wICE9PSAnPT0nICYmIG9wICE9PSAnIT0nO1xuXG4gICAgcmV0dXJuIGNsYXNzIENvbXBhcmlzb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICAgICAgdHlwZTogVHlwZTtcbiAgICAgICAgbGhzOiBFeHByZXNzaW9uO1xuICAgICAgICByaHM6IEV4cHJlc3Npb247XG4gICAgICAgIGNvbGxhdG9yOiA/RXhwcmVzc2lvbjtcbiAgICAgICAgaGFzVW50eXBlZEFyZ3VtZW50OiBib29sZWFuO1xuXG4gICAgICAgIGNvbnN0cnVjdG9yKGxoczogRXhwcmVzc2lvbiwgcmhzOiBFeHByZXNzaW9uLCBjb2xsYXRvcjogP0V4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IEJvb2xlYW5UeXBlO1xuICAgICAgICAgICAgdGhpcy5saHMgPSBsaHM7XG4gICAgICAgICAgICB0aGlzLnJocyA9IHJocztcbiAgICAgICAgICAgIHRoaXMuY29sbGF0b3IgPSBjb2xsYXRvcjtcbiAgICAgICAgICAgIHRoaXMuaGFzVW50eXBlZEFyZ3VtZW50ID0gbGhzLnR5cGUua2luZCA9PT0gJ3ZhbHVlJyB8fCByaHMudHlwZS5raW5kID09PSAndmFsdWUnO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDMgJiYgYXJncy5sZW5ndGggIT09IDQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIHR3byBvciB0aHJlZSBhcmd1bWVudHMuYCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9wOiBDb21wYXJpc29uT3BlcmF0b3IgPSAoYXJnc1swXTogYW55KTtcblxuICAgICAgICAgICAgbGV0IGxocyA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgVmFsdWVUeXBlKTtcbiAgICAgICAgICAgIGlmICghbGhzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGlmICghaXNDb21wYXJhYmxlVHlwZShvcCwgbGhzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY29uY2F0KDEpLmVycm9yKGBcIiR7b3B9XCIgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHR5cGUgJyR7dG9TdHJpbmcobGhzLnR5cGUpfScuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmhzID0gY29udGV4dC5wYXJzZShhcmdzWzJdLCAyLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFyaHMpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgaWYgKCFpc0NvbXBhcmFibGVUeXBlKG9wLCByaHMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb25jYXQoMikuZXJyb3IoYFwiJHtvcH1cIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnJHt0b1N0cmluZyhyaHMudHlwZSl9Jy5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09IHJocy50eXBlLmtpbmQgJiZcbiAgICAgICAgICAgICAgICBsaHMudHlwZS5raW5kICE9PSAndmFsdWUnICYmXG4gICAgICAgICAgICAgICAgcmhzLnR5cGUua2luZCAhPT0gJ3ZhbHVlJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYENhbm5vdCBjb21wYXJlIHR5cGVzICcke3RvU3RyaW5nKGxocy50eXBlKX0nIGFuZCAnJHt0b1N0cmluZyhyaHMudHlwZSl9Jy5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzT3JkZXJDb21wYXJpc29uKSB7XG4gICAgICAgICAgICAgICAgLy8gdHlwaW5nIHJ1bGVzIHNwZWNpZmljIHRvIGxlc3MvZ3JlYXRlciB0aGFuIG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgIGlmIChsaHMudHlwZS5raW5kID09PSAndmFsdWUnICYmIHJocy50eXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKHZhbHVlLCBUKVxuICAgICAgICAgICAgICAgICAgICBsaHMgPSBuZXcgQXNzZXJ0aW9uKHJocy50eXBlLCBbbGhzXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaHMudHlwZS5raW5kICE9PSAndmFsdWUnICYmIHJocy50eXBlLmtpbmQgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKFQsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByaHMgPSBuZXcgQXNzZXJ0aW9uKGxocy50eXBlLCBbcmhzXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY29sbGF0b3IgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBsaHMudHlwZS5raW5kICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICByaHMudHlwZS5raW5kICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICBsaHMudHlwZS5raW5kICE9PSAndmFsdWUnICYmXG4gICAgICAgICAgICAgICAgICAgIHJocy50eXBlLmtpbmQgIT09ICd2YWx1ZSdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYENhbm5vdCB1c2UgY29sbGF0b3IgdG8gY29tcGFyZSBub24tc3RyaW5nIHR5cGVzLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2xsYXRvciA9IGNvbnRleHQucGFyc2UoYXJnc1szXSwgMywgQ29sbGF0b3JUeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbGxhdG9yKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uKGxocywgcmhzLCBjb2xsYXRvcik7XG4gICAgICAgIH1cblxuICAgICAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBsaHMgPSB0aGlzLmxocy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgY29uc3QgcmhzID0gdGhpcy5yaHMuZXZhbHVhdGUoY3R4KTtcblxuICAgICAgICAgICAgaWYgKGlzT3JkZXJDb21wYXJpc29uICYmIHRoaXMuaGFzVW50eXBlZEFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbHQgPSB0eXBlT2YobGhzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBydCA9IHR5cGVPZihyaHMpO1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdHlwZSBpcyBzdHJpbmcgb3IgbnVtYmVyLCBhbmQgZXF1YWxcbiAgICAgICAgICAgICAgICBpZiAobHQua2luZCAhPT0gcnQua2luZCB8fCAhKGx0LmtpbmQgPT09ICdzdHJpbmcnIHx8IGx0LmtpbmQgPT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCBhcmd1bWVudHMgZm9yIFwiJHtvcH1cIiB0byBiZSAoc3RyaW5nLCBzdHJpbmcpIG9yIChudW1iZXIsIG51bWJlciksIGJ1dCBmb3VuZCAoJHtsdC5raW5kfSwgJHtydC5raW5kfSkgaW5zdGVhZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhdG9yICYmICFpc09yZGVyQ29tcGFyaXNvbiAmJiB0aGlzLmhhc1VudHlwZWRBcmd1bWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGx0ID0gdHlwZU9mKGxocyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnQgPSB0eXBlT2YocmhzKTtcbiAgICAgICAgICAgICAgICBpZiAobHQua2luZCAhPT0gJ3N0cmluZycgfHwgcnQua2luZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCYXNpYyhjdHgsIGxocywgcmhzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxhdG9yID9cbiAgICAgICAgICAgICAgICBjb21wYXJlV2l0aENvbGxhdG9yKGN0eCwgbGhzLCByaHMsIHRoaXMuY29sbGF0b3IuZXZhbHVhdGUoY3R4KSkgOlxuICAgICAgICAgICAgICAgIGNvbXBhcmVCYXNpYyhjdHgsIGxocywgcmhzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgICAgIGZuKHRoaXMubGhzKTtcbiAgICAgICAgICAgIGZuKHRoaXMucmhzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhdG9yKSB7XG4gICAgICAgICAgICAgICAgZm4odGhpcy5jb2xsYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIGZhbHNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbb3BdO1xuICAgICAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVxdWFscyA9IG1ha2VDb21wYXJpc29uKCc9PScsIGVxLCBlcUNvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IE5vdEVxdWFscyA9IG1ha2VDb21wYXJpc29uKCchPScsIG5lcSwgbmVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgTGVzc1RoYW4gPSBtYWtlQ29tcGFyaXNvbignPCcsIGx0LCBsdENvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IEdyZWF0ZXJUaGFuID0gbWFrZUNvbXBhcmlzb24oJz4nLCBndCwgZ3RDb2xsYXRlKTtcbmV4cG9ydCBjb25zdCBMZXNzVGhhbk9yRXF1YWwgPSBtYWtlQ29tcGFyaXNvbignPD0nLCBsdGVxLCBsdGVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgR3JlYXRlclRoYW5PckVxdWFsID0gbWFrZUNvbXBhcmlzb24oJz49JywgZ3RlcSwgZ3RlcUNvbGxhdGUpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtTdHJpbmdUeXBlLCBOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZGVjbGFyZSB2YXIgSW50bDoge1xuICAgIE51bWJlckZvcm1hdDogQ2xhc3M8SW50bCROdW1iZXJGb3JtYXQ+XG59O1xuXG5kZWNsYXJlIGNsYXNzIEludGwkTnVtYmVyRm9ybWF0IHtcbiAgICBjb25zdHJ1Y3RvciAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnNcbiAgICApOiBJbnRsJE51bWJlckZvcm1hdDtcblxuICAgIHN0YXRpYyAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnNcbiAgICApOiBJbnRsJE51bWJlckZvcm1hdDtcblxuICAgIGZvcm1hdChhOiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgICByZXNvbHZlZE9wdGlvbnMoKTogYW55O1xufVxuXG50eXBlIE51bWJlckZvcm1hdE9wdGlvbnMgPSB7XG4gICAgc3R5bGU/OiAnZGVjaW1hbCcgfCAnY3VycmVuY3knIHwgJ3BlcmNlbnQnO1xuICAgIGN1cnJlbmN5PzogbnVsbCB8IHN0cmluZztcbiAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM/OiBudWxsIHwgc3RyaW5nO1xuICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0cz86IG51bGwgfCBzdHJpbmc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJGb3JtYXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIG51bWJlcjogRXhwcmVzc2lvbjtcbiAgICBsb2NhbGU6IEV4cHJlc3Npb24gfCBudWxsOyAgIC8vIEJDUCA0NyBsYW5ndWFnZSB0YWdcbiAgICBjdXJyZW5jeTogRXhwcmVzc2lvbiB8IG51bGw7IC8vIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUsIHJlcXVpcmVkIGlmIHN0eWxlPWN1cnJlbmN5XG4gICAgbWluRnJhY3Rpb25EaWdpdHM6IEV4cHJlc3Npb24gfCBudWxsOyAvLyBEZWZhdWx0IDBcbiAgICBtYXhGcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGw7IC8vIERlZmF1bHQgM1xuXG4gICAgY29uc3RydWN0b3IobnVtYmVyOiBFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGwsXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6IEV4cHJlc3Npb24gfCBudWxsLFxuICAgICAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzOiBFeHByZXNzaW9uIHwgbnVsbCxcbiAgICAgICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50eXBlID0gU3RyaW5nVHlwZTtcbiAgICAgICAgdGhpcy5udW1iZXIgPSBudW1iZXI7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgICAgICB0aGlzLmN1cnJlbmN5ID0gY3VycmVuY3k7XG4gICAgICAgIHRoaXMubWluRnJhY3Rpb25EaWdpdHMgPSBtaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyA9IG1heEZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDMpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICBjb25zdCBudW1iZXIgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICBpZiAoIW51bWJlcikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzJdOiBhbnkpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBOdW1iZXJGb3JtYXQgb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC5gKTtcblxuICAgICAgICBsZXQgbG9jYWxlID0gbnVsbDtcbiAgICAgICAgaWYgKG9wdGlvbnNbJ2xvY2FsZSddKSB7XG4gICAgICAgICAgICBsb2NhbGUgPSBjb250ZXh0LnBhcnNlKG9wdGlvbnNbJ2xvY2FsZSddLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgICAgIGlmICghbG9jYWxlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXJyZW5jeSA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydjdXJyZW5jeSddKSB7XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snY3VycmVuY3knXSwgMSwgU3RyaW5nVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbmN5KSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW5GcmFjdGlvbkRpZ2l0cyA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10pIHtcbiAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29udGV4dC5wYXJzZShvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICAgICAgaWYgKCFtaW5GcmFjdGlvbkRpZ2l0cykgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWF4RnJhY3Rpb25EaWdpdHMgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddKSB7XG4gICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgICAgIGlmICghbWF4RnJhY3Rpb25EaWdpdHMpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJGb3JtYXQobnVtYmVyLCBsb2NhbGUsIGN1cnJlbmN5LCBtaW5GcmFjdGlvbkRpZ2l0cywgbWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlLmV2YWx1YXRlKGN0eCkgOiBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogdGhpcy5jdXJyZW5jeSA/IFwiY3VycmVuY3lcIiA6IFwiZGVjaW1hbFwiLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5ID8gdGhpcy5jdXJyZW5jeS5ldmFsdWF0ZShjdHgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyA/IHRoaXMubWluRnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUoY3R4KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMubWF4RnJhY3Rpb25EaWdpdHMgPyB0aGlzLm1heEZyYWN0aW9uRGlnaXRzLmV2YWx1YXRlKGN0eCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KS5mb3JtYXQodGhpcy5udW1iZXIuZXZhbHVhdGUoY3R4KSk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLm51bWJlcik7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgZm4odGhpcy5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBmbih0aGlzLmN1cnJlbmN5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW5GcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgZm4odGhpcy5taW5GcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgIGZuKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgb3B0aW9uc1snbG9jYWxlJ10gPSB0aGlzLmxvY2FsZS5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW5jeSkge1xuICAgICAgICAgICAgb3B0aW9uc1snY3VycmVuY3knXSA9IHRoaXMuY3VycmVuY3kuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluRnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ21pbi1mcmFjdGlvbi1kaWdpdHMnXSA9IHRoaXMubWluRnJhY3Rpb25EaWdpdHMuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ21heC1mcmFjdGlvbi1kaWdpdHMnXSA9IHRoaXMubWF4RnJhY3Rpb25EaWdpdHMuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm51bWJlci1mb3JtYXRcIiwgdGhpcy5udW1iZXIuc2VyaWFsaXplKCksIG9wdGlvbnNdO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7TnVtYmVyVHlwZSwgdG9TdHJpbmd9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIExlbmd0aCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dDogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLnR5cGUgPSBOdW1iZXJUeXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIDEgYXJndW1lbnQsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcblxuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSk7XG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmIChpbnB1dC50eXBlLmtpbmQgIT09ICdhcnJheScgJiYgaW5wdXQudHlwZS5raW5kICE9PSAnc3RyaW5nJyAmJiBpbnB1dC50eXBlLmtpbmQgIT09ICd2YWx1ZScpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXJndW1lbnQgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAke3RvU3RyaW5nKGlucHV0LnR5cGUpfSBpbnN0ZWFkLmApO1xuXG4gICAgICAgIHJldHVybiBuZXcgTGVuZ3RoKGlucHV0KTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5ldmFsdWF0ZShjdHgpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0Lmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0Lmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgJHt0b1N0cmluZyh0eXBlT2YoaW5wdXQpKX0gaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wibGVuZ3RoXCJdO1xuICAgICAgICB0aGlzLmVhY2hDaGlsZChjaGlsZCA9PiB7IHNlcmlhbGl6ZWQucHVzaChjaGlsZC5zZXJpYWxpemUoKSk7IH0pO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExlbmd0aDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgdHlwZSBUeXBlLFxuICAgIE51bWJlclR5cGUsXG4gICAgU3RyaW5nVHlwZSxcbiAgICBCb29sZWFuVHlwZSxcbiAgICBDb2xvclR5cGUsXG4gICAgT2JqZWN0VHlwZSxcbiAgICBWYWx1ZVR5cGUsXG4gICAgRXJyb3JUeXBlLFxuICAgIENvbGxhdG9yVHlwZSxcbiAgICBhcnJheSxcbiAgICB0b1N0cmluZyBhcyB0eXBlVG9TdHJpbmdcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge3R5cGVPZiwgQ29sb3IsIHZhbGlkYXRlUkdCQSwgdG9TdHJpbmcgYXMgdmFsdWVUb1N0cmluZ30gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCBDb21wb3VuZEV4cHJlc3Npb24gZnJvbSAnLi4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IExldCBmcm9tICcuL2xldCc7XG5pbXBvcnQgVmFyIGZyb20gJy4vdmFyJztcbmltcG9ydCBMaXRlcmFsIGZyb20gJy4vbGl0ZXJhbCc7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gJy4vYXNzZXJ0aW9uJztcbmltcG9ydCBDb2VyY2lvbiBmcm9tICcuL2NvZXJjaW9uJztcbmltcG9ydCBBdCBmcm9tICcuL2F0JztcbmltcG9ydCBNYXRjaCBmcm9tICcuL21hdGNoJztcbmltcG9ydCBDYXNlIGZyb20gJy4vY2FzZSc7XG5pbXBvcnQgU3RlcCBmcm9tICcuL3N0ZXAnO1xuaW1wb3J0IEludGVycG9sYXRlIGZyb20gJy4vaW50ZXJwb2xhdGUnO1xuaW1wb3J0IENvYWxlc2NlIGZyb20gJy4vY29hbGVzY2UnO1xuaW1wb3J0IHtcbiAgICBFcXVhbHMsXG4gICAgTm90RXF1YWxzLFxuICAgIExlc3NUaGFuLFxuICAgIEdyZWF0ZXJUaGFuLFxuICAgIExlc3NUaGFuT3JFcXVhbCxcbiAgICBHcmVhdGVyVGhhbk9yRXF1YWxcbn0gZnJvbSAnLi9jb21wYXJpc29uJztcbmltcG9ydCBDb2xsYXRvckV4cHJlc3Npb24gZnJvbSAnLi9jb2xsYXRvcic7XG5pbXBvcnQgTnVtYmVyRm9ybWF0IGZyb20gJy4vbnVtYmVyX2Zvcm1hdCc7XG5pbXBvcnQgRm9ybWF0RXhwcmVzc2lvbiBmcm9tICcuL2Zvcm1hdCc7XG5pbXBvcnQgSW1hZ2VFeHByZXNzaW9uIGZyb20gJy4vaW1hZ2UnO1xuaW1wb3J0IExlbmd0aCBmcm9tICcuL2xlbmd0aCc7XG5cbmltcG9ydCB0eXBlIHtWYXJhcmdzfSBmcm9tICcuLi9jb21wb3VuZF9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9uUmVnaXN0cnl9IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuXG5jb25zdCBleHByZXNzaW9uczogRXhwcmVzc2lvblJlZ2lzdHJ5ID0ge1xuICAgIC8vIHNwZWNpYWwgZm9ybXNcbiAgICAnPT0nOiBFcXVhbHMsXG4gICAgJyE9JzogTm90RXF1YWxzLFxuICAgICc+JzogR3JlYXRlclRoYW4sXG4gICAgJzwnOiBMZXNzVGhhbixcbiAgICAnPj0nOiBHcmVhdGVyVGhhbk9yRXF1YWwsXG4gICAgJzw9JzogTGVzc1RoYW5PckVxdWFsLFxuICAgICdhcnJheSc6IEFzc2VydGlvbixcbiAgICAnYXQnOiBBdCxcbiAgICAnYm9vbGVhbic6IEFzc2VydGlvbixcbiAgICAnY2FzZSc6IENhc2UsXG4gICAgJ2NvYWxlc2NlJzogQ29hbGVzY2UsXG4gICAgJ2NvbGxhdG9yJzogQ29sbGF0b3JFeHByZXNzaW9uLFxuICAgICdmb3JtYXQnOiBGb3JtYXRFeHByZXNzaW9uLFxuICAgICdpbWFnZSc6IEltYWdlRXhwcmVzc2lvbixcbiAgICAnaW50ZXJwb2xhdGUnOiBJbnRlcnBvbGF0ZSxcbiAgICAnaW50ZXJwb2xhdGUtaGNsJzogSW50ZXJwb2xhdGUsXG4gICAgJ2ludGVycG9sYXRlLWxhYic6IEludGVycG9sYXRlLFxuICAgICdsZW5ndGgnOiBMZW5ndGgsXG4gICAgJ2xldCc6IExldCxcbiAgICAnbGl0ZXJhbCc6IExpdGVyYWwsXG4gICAgJ21hdGNoJzogTWF0Y2gsXG4gICAgJ251bWJlcic6IEFzc2VydGlvbixcbiAgICAnbnVtYmVyLWZvcm1hdCc6IE51bWJlckZvcm1hdCxcbiAgICAnb2JqZWN0JzogQXNzZXJ0aW9uLFxuICAgICdzdGVwJzogU3RlcCxcbiAgICAnc3RyaW5nJzogQXNzZXJ0aW9uLFxuICAgICd0by1ib29sZWFuJzogQ29lcmNpb24sXG4gICAgJ3RvLWNvbG9yJzogQ29lcmNpb24sXG4gICAgJ3RvLW51bWJlcic6IENvZXJjaW9uLFxuICAgICd0by1zdHJpbmcnOiBDb2VyY2lvbixcbiAgICAndmFyJzogVmFyXG59O1xuXG5mdW5jdGlvbiByZ2JhKGN0eCwgW3IsIGcsIGIsIGFdKSB7XG4gICAgciA9IHIuZXZhbHVhdGUoY3R4KTtcbiAgICBnID0gZy5ldmFsdWF0ZShjdHgpO1xuICAgIGIgPSBiLmV2YWx1YXRlKGN0eCk7XG4gICAgY29uc3QgYWxwaGEgPSBhID8gYS5ldmFsdWF0ZShjdHgpIDogMTtcbiAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRlUkdCQShyLCBnLCBiLCBhbHBoYSk7XG4gICAgaWYgKGVycm9yKSB0aHJvdyBuZXcgUnVudGltZUVycm9yKGVycm9yKTtcbiAgICByZXR1cm4gbmV3IENvbG9yKHIgLyAyNTUgKiBhbHBoYSwgZyAvIDI1NSAqIGFscGhhLCBiIC8gMjU1ICogYWxwaGEsIGFscGhhKTtcbn1cblxuZnVuY3Rpb24gaGFzKGtleSwgb2JqKSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG59XG5cbmZ1bmN0aW9uIGdldChrZXksIG9iaikge1xuICAgIGNvbnN0IHYgPSBvYmpba2V5XTtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHY7XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaCh2LCBhLCBpLCBqKSB7XG4gICAgd2hpbGUgKGkgPD0gaikge1xuICAgICAgICBjb25zdCBtID0gKGkgKyBqKSA+PiAxO1xuICAgICAgICBpZiAoYVttXSA9PT0gdilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoYVttXSA+IHYpXG4gICAgICAgICAgICBqID0gbSAtIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGkgPSBtICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB2YXJhcmdzKHR5cGU6IFR5cGUpOiBWYXJhcmdzIHtcbiAgICByZXR1cm4ge3R5cGV9O1xufVxuXG5Db21wb3VuZEV4cHJlc3Npb24ucmVnaXN0ZXIoZXhwcmVzc2lvbnMsIHtcbiAgICAnZXJyb3InOiBbXG4gICAgICAgIEVycm9yVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHsgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcih2LmV2YWx1YXRlKGN0eCkpOyB9XG4gICAgXSxcbiAgICAndHlwZW9mJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB0eXBlVG9TdHJpbmcodHlwZU9mKHYuZXZhbHVhdGUoY3R4KSkpXG4gICAgXSxcbiAgICAndG8tcmdiYSc6IFtcbiAgICAgICAgYXJyYXkoTnVtYmVyVHlwZSwgNCksXG4gICAgICAgIFtDb2xvclR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2LmV2YWx1YXRlKGN0eCkudG9BcnJheSgpO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAncmdiJzogW1xuICAgICAgICBDb2xvclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgcmdiYVxuICAgIF0sXG4gICAgJ3JnYmEnOiBbXG4gICAgICAgIENvbG9yVHlwZSxcbiAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGUsIE51bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICByZ2JhXG4gICAgXSxcbiAgICAnaGFzJzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuVHlwZSxcbiAgICAgICAgb3ZlcmxvYWRzOiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFtrZXldKSA9PiBoYXMoa2V5LmV2YWx1YXRlKGN0eCksIGN0eC5wcm9wZXJ0aWVzKCkpXG4gICAgICAgICAgICBdLCBbXG4gICAgICAgICAgICAgICAgW1N0cmluZ1R5cGUsIE9iamVjdFR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFtrZXksIG9ial0pID0+IGhhcyhrZXkuZXZhbHVhdGUoY3R4KSwgb2JqLmV2YWx1YXRlKGN0eCkpXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICB9LFxuICAgICdnZXQnOiB7XG4gICAgICAgIHR5cGU6IFZhbHVlVHlwZSxcbiAgICAgICAgb3ZlcmxvYWRzOiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFtrZXldKSA9PiBnZXQoa2V5LmV2YWx1YXRlKGN0eCksIGN0eC5wcm9wZXJ0aWVzKCkpXG4gICAgICAgICAgICBdLCBbXG4gICAgICAgICAgICAgICAgW1N0cmluZ1R5cGUsIE9iamVjdFR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFtrZXksIG9ial0pID0+IGdldChrZXkuZXZhbHVhdGUoY3R4KSwgb2JqLmV2YWx1YXRlKGN0eCkpXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICB9LFxuICAgICdmZWF0dXJlLXN0YXRlJzogW1xuICAgICAgICBWYWx1ZVR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgKGN0eCwgW2tleV0pID0+IGdldChrZXkuZXZhbHVhdGUoY3R4KSwgY3R4LmZlYXR1cmVTdGF0ZSB8fCB7fSlcbiAgICBdLFxuICAgICdwcm9wZXJ0aWVzJzogW1xuICAgICAgICBPYmplY3RUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4LnByb3BlcnRpZXMoKVxuICAgIF0sXG4gICAgJ2dlb21ldHJ5LXR5cGUnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHguZ2VvbWV0cnlUeXBlKClcbiAgICBdLFxuICAgICdpZCc6IFtcbiAgICAgICAgVmFsdWVUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4LmlkKClcbiAgICBdLFxuICAgICd6b29tJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4Lmdsb2JhbHMuem9vbVxuICAgIF0sXG4gICAgJ2hlYXRtYXAtZGVuc2l0eSc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLmhlYXRtYXBEZW5zaXR5IHx8IDBcbiAgICBdLFxuICAgICdsaW5lLXByb2dyZXNzJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4Lmdsb2JhbHMubGluZVByb2dyZXNzIHx8IDBcbiAgICBdLFxuICAgICdhY2N1bXVsYXRlZCc6IFtcbiAgICAgICAgVmFsdWVUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4Lmdsb2JhbHMuYWNjdW11bGF0ZWQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjdHguZ2xvYmFscy5hY2N1bXVsYXRlZFxuICAgIF0sXG4gICAgJysnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIHZhcmFyZ3MoTnVtYmVyVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICcqJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICB2YXJhcmdzKE51bWJlclR5cGUpLFxuICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gMTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKj0gYXJnLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnLSc6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyVHlwZSxcbiAgICAgICAgb3ZlcmxvYWRzOiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpIC0gYi5ldmFsdWF0ZShjdHgpXG4gICAgICAgICAgICBdLCBbXG4gICAgICAgICAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFthXSkgPT4gLWEuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnLyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbYSwgYl0pID0+IGEuZXZhbHVhdGUoY3R4KSAvIGIuZXZhbHVhdGUoY3R4KVxuICAgIF0sXG4gICAgJyUnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW2EsIGJdKSA9PiBhLmV2YWx1YXRlKGN0eCkgJSBiLmV2YWx1YXRlKGN0eClcbiAgICBdLFxuICAgICdsbjInOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoKSA9PiBNYXRoLkxOMlxuICAgIF0sXG4gICAgJ3BpJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKCkgPT4gTWF0aC5QSVxuICAgIF0sXG4gICAgJ2UnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoKSA9PiBNYXRoLkVcbiAgICBdLFxuICAgICdeJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtiLCBlXSkgPT4gTWF0aC5wb3coYi5ldmFsdWF0ZShjdHgpLCBlLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnc3FydCc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbeF0pID0+IE1hdGguc3FydCh4LmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnbG9nMTAnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmxvZyhuLmV2YWx1YXRlKGN0eCkpIC8gTWF0aC5MTjEwXG4gICAgXSxcbiAgICAnbG4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmxvZyhuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnbG9nMic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGgubG9nKG4uZXZhbHVhdGUoY3R4KSkgLyBNYXRoLkxOMlxuICAgIF0sXG4gICAgJ3Npbic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguc2luKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdjb3MnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmNvcyhuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAndGFuJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC50YW4obi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2FzaW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmFzaW4obi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2Fjb3MnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmFjb3Mobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2F0YW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmF0YW4obi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ21pbic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgdmFyYXJncyhOdW1iZXJUeXBlKSxcbiAgICAgICAgKGN0eCwgYXJncykgPT4gTWF0aC5taW4oLi4uYXJncy5tYXAoYXJnID0+IGFyZy5ldmFsdWF0ZShjdHgpKSlcbiAgICBdLFxuICAgICdtYXgnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIHZhcmFyZ3MoTnVtYmVyVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IE1hdGgubWF4KC4uLmFyZ3MubWFwKGFyZyA9PiBhcmcuZXZhbHVhdGUoY3R4KSkpXG4gICAgXSxcbiAgICAnYWJzJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hYnMobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ3JvdW5kJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdiA9IG4uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIC8vIEphdmFzY3JpcHQncyBNYXRoLnJvdW5kKCkgcm91bmRzIHRvd2FyZHMgK0luZmluaXR5IGZvciBoYWxmd2F5XG4gICAgICAgICAgICAvLyB2YWx1ZXMsIGV2ZW4gd2hlbiB0aGV5J3JlIG5lZ2F0aXZlLiBJdCdzIG1vcmUgY29tbW9uIHRvIHJvdW5kXG4gICAgICAgICAgICAvLyBhd2F5IGZyb20gMCAoZS5nLiwgdGhpcyBpcyB3aGF0IHB5dGhvbiBhbmQgQysrIGRvKVxuICAgICAgICAgICAgcmV0dXJuIHYgPCAwID8gLU1hdGgucm91bmQoLXYpIDogTWF0aC5yb3VuZCh2KTtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2Zsb29yJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5mbG9vcihuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnY2VpbCc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguY2VpbChuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnZmlsdGVyLT09JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIFZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4gY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV0gPT09ICh2OiBhbnkpLnZhbHVlXG4gICAgXSxcbiAgICAnZmlsdGVyLWlkLT09JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gY3R4LmlkKCkgPT09ICh2OiBhbnkpLnZhbHVlXG4gICAgXSxcbiAgICAnZmlsdGVyLXR5cGUtPT0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gY3R4Lmdlb21ldHJ5VHlwZSgpID09PSAodjogYW55KS52YWx1ZVxuICAgIF0sXG4gICAgJ2ZpbHRlci08JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIFZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhIDwgYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC08JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5pZCgpO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhIDwgYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci0+JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIFZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhID4gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC0+JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5pZCgpO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhID4gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci08PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8PSBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLWlkLTw9JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5pZCgpO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhIDw9IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItPj0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV07XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPj0gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC0+PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA+PSBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLWhhcyc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBba10pID0+IChrOiBhbnkpLnZhbHVlIGluIGN0eC5wcm9wZXJ0aWVzKClcbiAgICBdLFxuICAgICdmaWx0ZXItaGFzLWlkJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5pZCgpICE9PSBudWxsXG4gICAgXSxcbiAgICAnZmlsdGVyLXR5cGUtaW4nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbYXJyYXkoU3RyaW5nVHlwZSldLFxuICAgICAgICAoY3R4LCBbdl0pID0+ICh2OiBhbnkpLnZhbHVlLmluZGV4T2YoY3R4Lmdlb21ldHJ5VHlwZSgpKSA+PSAwXG4gICAgXSxcbiAgICAnZmlsdGVyLWlkLWluJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW2FycmF5KFZhbHVlVHlwZSldLFxuICAgICAgICAoY3R4LCBbdl0pID0+ICh2OiBhbnkpLnZhbHVlLmluZGV4T2YoY3R4LmlkKCkpID49IDBcbiAgICBdLFxuICAgICdmaWx0ZXItaW4tc21hbGwnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgYXJyYXkoVmFsdWVUeXBlKV0sXG4gICAgICAgIC8vIGFzc3VtZXMgdiBpcyBhbiBhcnJheSBsaXRlcmFsXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4gKHY6IGFueSkudmFsdWUuaW5kZXhPZihjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXSkgPj0gMFxuICAgIF0sXG4gICAgJ2ZpbHRlci1pbi1sYXJnZSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBhcnJheShWYWx1ZVR5cGUpXSxcbiAgICAgICAgLy8gYXNzdW1lcyB2IGlzIGEgYXJyYXkgbGl0ZXJhbCB3aXRoIHZhbHVlcyBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGFuZCBvZiBhIHNpbmdsZSB0eXBlXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4gYmluYXJ5U2VhcmNoKGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdLCAodjogYW55KS52YWx1ZSwgMCwgKHY6IGFueSkudmFsdWUubGVuZ3RoIC0gMSlcbiAgICBdLFxuICAgICdhbGwnOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW5UeXBlLFxuICAgICAgICBvdmVybG9hZHM6IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbQm9vbGVhblR5cGUsIEJvb2xlYW5UeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBbYSwgYl0pID0+IGEuZXZhbHVhdGUoY3R4KSAmJiBiLmV2YWx1YXRlKGN0eClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdmFyYXJncyhCb29sZWFuVHlwZSksXG4gICAgICAgICAgICAgICAgKGN0eCwgYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5ldmFsdWF0ZShjdHgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICB9LFxuICAgICdhbnknOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW5UeXBlLFxuICAgICAgICBvdmVybG9hZHM6IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbQm9vbGVhblR5cGUsIEJvb2xlYW5UeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBbYSwgYl0pID0+IGEuZXZhbHVhdGUoY3R4KSB8fCBiLmV2YWx1YXRlKGN0eClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdmFyYXJncyhCb29sZWFuVHlwZSksXG4gICAgICAgICAgICAgICAgKGN0eCwgYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmV2YWx1YXRlKGN0eCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgJyEnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbQm9vbGVhblR5cGVdLFxuICAgICAgICAoY3R4LCBbYl0pID0+ICFiLmV2YWx1YXRlKGN0eClcbiAgICBdLFxuICAgICdpcy1zdXBwb3J0ZWQtc2NyaXB0JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAvLyBBdCBwYXJzZSB0aW1lIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUsIHNvIHdlIG5lZWQgdG8gZXhjbHVkZSB0aGlzIGV4cHJlc3Npb24gd2l0aCBpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnRcbiAgICAgICAgKGN0eCwgW3NdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc1N1cHBvcnRlZFNjcmlwdCA9IGN0eC5nbG9iYWxzICYmIGN0eC5nbG9iYWxzLmlzU3VwcG9ydGVkU2NyaXB0O1xuICAgICAgICAgICAgaWYgKGlzU3VwcG9ydGVkU2NyaXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzU3VwcG9ydGVkU2NyaXB0KHMuZXZhbHVhdGUoY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ3VwY2FzZSc6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAoY3R4LCBbc10pID0+IHMuZXZhbHVhdGUoY3R4KS50b1VwcGVyQ2FzZSgpXG4gICAgXSxcbiAgICAnZG93bmNhc2UnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgKGN0eCwgW3NdKSA9PiBzLmV2YWx1YXRlKGN0eCkudG9Mb3dlckNhc2UoKVxuICAgIF0sXG4gICAgJ2NvbmNhdCc6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgdmFyYXJncyhWYWx1ZVR5cGUpLFxuICAgICAgICAoY3R4LCBhcmdzKSA9PiBhcmdzLm1hcChhcmcgPT4gdmFsdWVUb1N0cmluZyhhcmcuZXZhbHVhdGUoY3R4KSkpLmpvaW4oJycpXG4gICAgXSxcbiAgICAncmVzb2x2ZWQtbG9jYWxlJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbQ29sbGF0b3JUeXBlXSxcbiAgICAgICAgKGN0eCwgW2NvbGxhdG9yXSkgPT4gY29sbGF0b3IuZXZhbHVhdGUoY3R4KS5yZXNvbHZlZExvY2FsZSgpXG4gICAgXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGV4cHJlc3Npb25zO1xuIiwiLy8gQGZsb3dcblxuLyoqXG4gKiBBIHR5cGUgdXNlZCBmb3IgcmV0dXJuaW5nIGFuZCBwcm9wYWdhdGluZyBlcnJvcnMuIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSB1bmlvblxuICogcmVwcmVzZW50cyBzdWNjZXNzIGFuZCBjb250YWlucyBhIHZhbHVlLCBhbmQgdGhlIHNlY29uZCByZXByZXNlbnRzIGFuIGVycm9yIGFuZFxuICogY29udGFpbnMgYW4gZXJyb3IgdmFsdWUuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCwgRT4gPVxuICAgIHwge3wgcmVzdWx0OiAnc3VjY2VzcycsIHZhbHVlOiBUIHx9XG4gICAgfCB7fCByZXN1bHQ6ICdlcnJvcicsIHZhbHVlOiBFIHx9O1xuXG5leHBvcnQgZnVuY3Rpb24gc3VjY2VzczxULCBFPih2YWx1ZTogVCk6IFJlc3VsdDxULCBFPiB7XG4gICAgcmV0dXJuIHtyZXN1bHQ6ICdzdWNjZXNzJywgdmFsdWV9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3I8VCwgRT4odmFsdWU6IEUpOiBSZXN1bHQ8VCwgRT4ge1xuICAgIHJldHVybiB7cmVzdWx0OiAnZXJyb3InLCB2YWx1ZX07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24oc3BlYzogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3BlY1sncHJvcGVydHktdHlwZSddID09PSAnZGF0YS1kcml2ZW4nIHx8IHNwZWNbJ3Byb3BlcnR5LXR5cGUnXSA9PT0gJ2Nyb3NzLWZhZGVkLWRhdGEtZHJpdmVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzWm9vbUV4cHJlc3Npb24oc3BlYzogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFzcGVjLmV4cHJlc3Npb24gJiYgc3BlYy5leHByZXNzaW9uLnBhcmFtZXRlcnMuaW5kZXhPZignem9vbScpID4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c0ludGVycG9sYXRpb24oc3BlYzogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFzcGVjLmV4cHJlc3Npb24gJiYgc3BlYy5leHByZXNzaW9uLmludGVycG9sYXRlZDtcbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VHlwZSh2YWwpIHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgTnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfSBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiAnYm9vbGVhbic7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbDtcbiAgICB9XG59XG4iLCJcbmltcG9ydCAqIGFzIGNvbG9yU3BhY2VzIGZyb20gJy4uL3V0aWwvY29sb3Jfc3BhY2VzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi91dGlsL2NvbG9yJztcbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgKiBhcyBpbnRlcnBvbGF0ZSBmcm9tICcuLi91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBJbnRlcnBvbGF0ZSBmcm9tICcuLi9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5pbXBvcnQge3N1cHBvcnRzSW50ZXJwb2xhdGlvbn0gZnJvbSAnLi4vdXRpbC9wcm9wZXJ0aWVzJztcbmltcG9ydCB7ZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUb30gZnJvbSAnLi4vZXhwcmVzc2lvbi9zdG9wcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eUZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYykge1xuICAgIGNvbnN0IGlzQ29sb3IgPSBwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ2NvbG9yJztcbiAgICBjb25zdCB6b29tQW5kRmVhdHVyZURlcGVuZGVudCA9IHBhcmFtZXRlcnMuc3RvcHMgJiYgdHlwZW9mIHBhcmFtZXRlcnMuc3RvcHNbMF1bMF0gPT09ICdvYmplY3QnO1xuICAgIGNvbnN0IGZlYXR1cmVEZXBlbmRlbnQgPSB6b29tQW5kRmVhdHVyZURlcGVuZGVudCB8fCBwYXJhbWV0ZXJzLnByb3BlcnR5ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3Qgem9vbURlcGVuZGVudCA9IHpvb21BbmRGZWF0dXJlRGVwZW5kZW50IHx8ICFmZWF0dXJlRGVwZW5kZW50O1xuICAgIGNvbnN0IHR5cGUgPSBwYXJhbWV0ZXJzLnR5cGUgfHwgKHN1cHBvcnRzSW50ZXJwb2xhdGlvbihwcm9wZXJ0eVNwZWMpID8gJ2V4cG9uZW50aWFsJyA6ICdpbnRlcnZhbCcpO1xuXG4gICAgaWYgKGlzQ29sb3IpIHtcbiAgICAgICAgcGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgcGFyYW1ldGVycyk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcnMuc3RvcHMpIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RvcHMgPSBwYXJhbWV0ZXJzLnN0b3BzLm1hcCgoc3RvcCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBbc3RvcFswXSwgQ29sb3IucGFyc2Uoc3RvcFsxXSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0KSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHQgPSBDb2xvci5wYXJzZShwYXJhbWV0ZXJzLmRlZmF1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0ID0gQ29sb3IucGFyc2UocHJvcGVydHlTcGVjLmRlZmF1bHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtZXRlcnMuY29sb3JTcGFjZSAmJiBwYXJhbWV0ZXJzLmNvbG9yU3BhY2UgIT09ICdyZ2InICYmICFjb2xvclNwYWNlc1twYXJhbWV0ZXJzLmNvbG9yU3BhY2VdKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29sb3Igc3BhY2U6ICR7cGFyYW1ldGVycy5jb2xvclNwYWNlfWApO1xuICAgIH1cblxuICAgIGxldCBpbm5lckZ1bjtcbiAgICBsZXQgaGFzaGVkU3RvcHM7XG4gICAgbGV0IGNhdGVnb3JpY2FsS2V5VHlwZTtcbiAgICBpZiAodHlwZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuICAgICAgICBpbm5lckZ1biA9IGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpbnRlcnZhbCcpIHtcbiAgICAgICAgaW5uZXJGdW4gPSBldmFsdWF0ZUludGVydmFsRnVuY3Rpb247XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2F0ZWdvcmljYWwnKSB7XG4gICAgICAgIGlubmVyRnVuID0gZXZhbHVhdGVDYXRlZ29yaWNhbEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEZvciBjYXRlZ29yaWNhbCBmdW5jdGlvbnMsIGdlbmVyYXRlIGFuIE9iamVjdCBhcyBhIGhhc2htYXAgb2YgdGhlIHN0b3BzIGZvciBmYXN0IHNlYXJjaGluZ1xuICAgICAgICBoYXNoZWRTdG9wcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGZvciAoY29uc3Qgc3RvcCBvZiBwYXJhbWV0ZXJzLnN0b3BzKSB7XG4gICAgICAgICAgICBoYXNoZWRTdG9wc1tzdG9wWzBdXSA9IHN0b3BbMV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmZlciBrZXkgdHlwZSBiYXNlZCBvbiBmaXJzdCBzdG9wIGtleS0tIHVzZWQgdG8gZW5jZm9yY2Ugc3RyaWN0IHR5cGUgY2hlY2tpbmcgbGF0ZXJcbiAgICAgICAgY2F0ZWdvcmljYWxLZXlUeXBlID0gdHlwZW9mIHBhcmFtZXRlcnMuc3RvcHNbMF1bMF07XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpZGVudGl0eScpIHtcbiAgICAgICAgaW5uZXJGdW4gPSBldmFsdWF0ZUlkZW50aXR5RnVuY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZ1bmN0aW9uIHR5cGUgXCIke3R5cGV9XCJgKTtcbiAgICB9XG5cbiAgICBpZiAoem9vbUFuZEZlYXR1cmVEZXBlbmRlbnQpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZUZ1bmN0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCB6b29tU3RvcHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBwYXJhbWV0ZXJzLnN0b3BzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBjb25zdCBzdG9wID0gcGFyYW1ldGVycy5zdG9wc1tzXTtcbiAgICAgICAgICAgIGNvbnN0IHpvb20gPSBzdG9wWzBdLnpvb207XG4gICAgICAgICAgICBpZiAoZmVhdHVyZUZ1bmN0aW9uc1t6b29tXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmVhdHVyZUZ1bmN0aW9uc1t6b29tXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogcGFyYW1ldGVycy50eXBlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogcGFyYW1ldGVycy5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcGFyYW1ldGVycy5kZWZhdWx0LFxuICAgICAgICAgICAgICAgICAgICBzdG9wczogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHpvb21TdG9wcy5wdXNoKHpvb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVhdHVyZUZ1bmN0aW9uc1t6b29tXS5zdG9wcy5wdXNoKFtzdG9wWzBdLnZhbHVlLCBzdG9wWzFdXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmZWF0dXJlRnVuY3Rpb25TdG9wcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHogb2Ygem9vbVN0b3BzKSB7XG4gICAgICAgICAgICBmZWF0dXJlRnVuY3Rpb25TdG9wcy5wdXNoKFtmZWF0dXJlRnVuY3Rpb25zW3pdLnpvb20sIGNyZWF0ZUZ1bmN0aW9uKGZlYXR1cmVGdW5jdGlvbnNbel0sIHByb3BlcnR5U3BlYyldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVycG9sYXRpb25UeXBlID0ge25hbWU6ICdsaW5lYXInfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb21wb3NpdGUnLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodW5kZWZpbmVkLCBpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgICAgICAgICB6b29tU3RvcHM6IGZlYXR1cmVGdW5jdGlvblN0b3BzLm1hcChzID0+IHNbMF0pLFxuICAgICAgICAgICAgZXZhbHVhdGUoe3pvb219LCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIHN0b3BzOiBmZWF0dXJlRnVuY3Rpb25TdG9wcyxcbiAgICAgICAgICAgICAgICAgICAgYmFzZTogcGFyYW1ldGVycy5iYXNlXG4gICAgICAgICAgICAgICAgfSwgcHJvcGVydHlTcGVjLCB6b29tKS5ldmFsdWF0ZSh6b29tLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHpvb21EZXBlbmRlbnQpIHtcbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvblR5cGUgPSB0eXBlID09PSAnZXhwb25lbnRpYWwnID9cbiAgICAgICAgICAgIHtuYW1lOiAnZXhwb25lbnRpYWwnLCBiYXNlOiBwYXJhbWV0ZXJzLmJhc2UgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuYmFzZSA6IDF9IDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjYW1lcmEnLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodW5kZWZpbmVkLCBpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgICAgICAgICB6b29tU3RvcHM6IHBhcmFtZXRlcnMuc3RvcHMubWFwKHMgPT4gc1swXSksXG4gICAgICAgICAgICBldmFsdWF0ZTogKHt6b29tfSkgPT4gaW5uZXJGdW4ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCB6b29tLCBoYXNoZWRTdG9wcywgY2F0ZWdvcmljYWxLZXlUeXBlKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnc291cmNlJyxcbiAgICAgICAgICAgIGV2YWx1YXRlKF8sIGZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZlYXR1cmUgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzID8gZmVhdHVyZS5wcm9wZXJ0aWVzW3BhcmFtZXRlcnMucHJvcGVydHldIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2FsZXNjZShwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyRnVuKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgdmFsdWUsIGhhc2hlZFN0b3BzLCBjYXRlZ29yaWNhbEtleVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29hbGVzY2UoYSwgYiwgYykge1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHJldHVybiBhO1xuICAgIGlmIChiICE9PSB1bmRlZmluZWQpIHJldHVybiBiO1xuICAgIGlmIChjICE9PSB1bmRlZmluZWQpIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUNhdGVnb3JpY2FsRnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCBpbnB1dCwgaGFzaGVkU3RvcHMsIGtleVR5cGUpIHtcbiAgICBjb25zdCBldmFsdWF0ZWQgPSB0eXBlb2YgaW5wdXQgPT09IGtleVR5cGUgPyBoYXNoZWRTdG9wc1tpbnB1dF0gOiB1bmRlZmluZWQ7IC8vIEVuZm9yY2Ugc3RyaWN0IHR5cGluZyBvbiBpbnB1dFxuICAgIHJldHVybiBjb2FsZXNjZShldmFsdWF0ZWQsIHBhcmFtZXRlcnMuZGVmYXVsdCwgcHJvcGVydHlTcGVjLmRlZmF1bHQpO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUludGVydmFsRnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCBpbnB1dCkge1xuICAgIC8vIEVkZ2UgY2FzZXNcbiAgICBpZiAoZ2V0VHlwZShpbnB1dCkgIT09ICdudW1iZXInKSByZXR1cm4gY29hbGVzY2UocGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG4gICAgY29uc3QgbiA9IHBhcmFtZXRlcnMuc3RvcHMubGVuZ3RoO1xuICAgIGlmIChuID09PSAxKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1swXVsxXTtcbiAgICBpZiAoaW5wdXQgPD0gcGFyYW1ldGVycy5zdG9wc1swXVswXSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbMF1bMV07XG4gICAgaWYgKGlucHV0ID49IHBhcmFtZXRlcnMuc3RvcHNbbiAtIDFdWzBdKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tuIC0gMV1bMV07XG5cbiAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8ocGFyYW1ldGVycy5zdG9wcy5tYXAoKHN0b3ApID0+IHN0b3BbMF0pLCBpbnB1dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tpbmRleF1bMV07XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbihwYXJhbWV0ZXJzLCBwcm9wZXJ0eVNwZWMsIGlucHV0KSB7XG4gICAgY29uc3QgYmFzZSA9IHBhcmFtZXRlcnMuYmFzZSAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5iYXNlIDogMTtcblxuICAgIC8vIEVkZ2UgY2FzZXNcbiAgICBpZiAoZ2V0VHlwZShpbnB1dCkgIT09ICdudW1iZXInKSByZXR1cm4gY29hbGVzY2UocGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG4gICAgY29uc3QgbiA9IHBhcmFtZXRlcnMuc3RvcHMubGVuZ3RoO1xuICAgIGlmIChuID09PSAxKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1swXVsxXTtcbiAgICBpZiAoaW5wdXQgPD0gcGFyYW1ldGVycy5zdG9wc1swXVswXSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbMF1bMV07XG4gICAgaWYgKGlucHV0ID49IHBhcmFtZXRlcnMuc3RvcHNbbiAtIDFdWzBdKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tuIC0gMV1bMV07XG5cbiAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8ocGFyYW1ldGVycy5zdG9wcy5tYXAoKHN0b3ApID0+IHN0b3BbMF0pLCBpbnB1dCk7XG4gICAgY29uc3QgdCA9IGludGVycG9sYXRpb25GYWN0b3IoXG4gICAgICAgIGlucHV0LCBiYXNlLFxuICAgICAgICBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4XVswXSxcbiAgICAgICAgcGFyYW1ldGVycy5zdG9wc1tpbmRleCArIDFdWzBdKTtcblxuICAgIGNvbnN0IG91dHB1dExvd2VyID0gcGFyYW1ldGVycy5zdG9wc1tpbmRleF1bMV07XG4gICAgY29uc3Qgb3V0cHV0VXBwZXIgPSBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4ICsgMV1bMV07XG4gICAgbGV0IGludGVycCA9IGludGVycG9sYXRlW3Byb3BlcnR5U3BlYy50eXBlXSB8fCBpZGVudGl0eUZ1bmN0aW9uOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uYW1lc3BhY2VcblxuICAgIGlmIChwYXJhbWV0ZXJzLmNvbG9yU3BhY2UgJiYgcGFyYW1ldGVycy5jb2xvclNwYWNlICE9PSAncmdiJykge1xuICAgICAgICBjb25zdCBjb2xvcnNwYWNlID0gY29sb3JTcGFjZXNbcGFyYW1ldGVycy5jb2xvclNwYWNlXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG4gICAgICAgIGludGVycCA9IChhLCBiKSA9PiBjb2xvcnNwYWNlLnJldmVyc2UoY29sb3JzcGFjZS5pbnRlcnBvbGF0ZShjb2xvcnNwYWNlLmZvcndhcmQoYSksIGNvbG9yc3BhY2UuZm9yd2FyZChiKSwgdCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3V0cHV0TG93ZXIuZXZhbHVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2YWx1YXRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmFsdWF0ZWRMb3dlciA9IG91dHB1dExvd2VyLmV2YWx1YXRlLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkVXBwZXIgPSBvdXRwdXRVcHBlci5ldmFsdWF0ZS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZmlsbC1vdXRsaW5lLWNvbG9yLCB3aGljaCBoYXMgbm8gc3BlYyBkZWZhdWx0LlxuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRMb3dlciA9PT0gdW5kZWZpbmVkIHx8IGV2YWx1YXRlZFVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVycChldmFsdWF0ZWRMb3dlciwgZXZhbHVhdGVkVXBwZXIsIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnAob3V0cHV0TG93ZXIsIG91dHB1dFVwcGVyLCB0KTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVJZGVudGl0eUZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgaW5wdXQpIHtcbiAgICBpZiAocHJvcGVydHlTcGVjLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgaW5wdXQgPSBDb2xvci5wYXJzZShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ2Zvcm1hdHRlZCcpIHtcbiAgICAgICAgaW5wdXQgPSBGb3JtYXR0ZWQuZnJvbVN0cmluZyhpbnB1dC50b1N0cmluZygpKTtcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5U3BlYy50eXBlID09PSAncmVzb2x2ZWRJbWFnZScpIHtcbiAgICAgICAgaW5wdXQgPSBSZXNvbHZlZEltYWdlLmZyb21TdHJpbmcoaW5wdXQudG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIGlmIChnZXRUeXBlKGlucHV0KSAhPT0gcHJvcGVydHlTcGVjLnR5cGUgJiYgKHByb3BlcnR5U3BlYy50eXBlICE9PSAnZW51bScgfHwgIXByb3BlcnR5U3BlYy52YWx1ZXNbaW5wdXRdKSkge1xuICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNvYWxlc2NlKGlucHV0LCBwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmF0aW8gdGhhdCBjYW4gYmUgdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGV4cG9uZW50aWFsIGZ1bmN0aW9uXG4gKiBzdG9wcy5cbiAqXG4gKiBIb3cgaXQgd29ya3M6XG4gKiBUd28gY29uc2VjdXRpdmUgc3RvcCB2YWx1ZXMgZGVmaW5lIGEgKHNjYWxlZCBhbmQgc2hpZnRlZCkgZXhwb25lbnRpYWxcbiAqIGZ1bmN0aW9uIGBmKHgpID0gYSAqIGJhc2VeeCArIGJgLCB3aGVyZSBgYmFzZWAgaXMgdGhlIHVzZXItc3BlY2lmaWVkIGJhc2UsXG4gKiBhbmQgYGFgIGFuZCBgYmAgYXJlIGNvbnN0YW50cyBhZmZvcmRpbmcgc3VmZmljaWVudCBkZWdyZWVzIG9mIGZyZWVkb20gdG8gZml0XG4gKiB0aGUgZnVuY3Rpb24gdG8gdGhlIGdpdmVuIHN0b3BzLlxuICpcbiAqIEhlcmUncyBhIGJpdCBvZiBhbGdlYnJhIHRoYXQgbGV0cyB1cyBjb21wdXRlIGBmKHgpYCBkaXJlY3RseSBmcm9tIHRoZSBzdG9wXG4gKiB2YWx1ZXMgd2l0aG91dCBleHBsaWNpdGx5IHNvbHZpbmcgZm9yIGBhYCBhbmQgYGJgOlxuICpcbiAqIEZpcnN0IHN0b3AgdmFsdWU6IGBmKHgwKSA9IHkwID0gYSAqIGJhc2VeeDAgKyBiYFxuICogU2Vjb25kIHN0b3AgdmFsdWU6IGBmKHgxKSA9IHkxID0gYSAqIGJhc2VeeDEgKyBiYFxuICogPT4gYHkxIC0geTAgPSBhKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqID0+IGBhID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MClgXG4gKlxuICogRGVzaXJlZCB2YWx1ZTogYGYoeCkgPSB5ID0gYSAqIGJhc2VeeCArIGJgXG4gKiA9PiBgZih4KSA9IHkwICsgYSAqIChiYXNlXnggLSBiYXNlXngwKWBcbiAqXG4gKiBGcm9tIHRoZSBhYm92ZSwgd2UgY2FuIHJlcGxhY2UgdGhlIGBhYCBpbiBgYSAqIChiYXNlXnggLSBiYXNlXngwKWAgYW5kIGRvIGFcbiAqIGxpdHRsZSBhbGdlYnJhOlxuICogYGBgXG4gKiBhICogKGJhc2VeeCAtIGJhc2VeeDApID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MCkgKiAoYmFzZV54IC0gYmFzZV54MClcbiAqICAgICAgICAgICAgICAgICAgICAgPSAoeTEgLSB5MCkgKiAoYmFzZV54IC0gYmFzZV54MCkgLyAoYmFzZV54MSAtIGJhc2VeeDApXG4gKiBgYGBcbiAqXG4gKiBJZiB3ZSBsZXQgYChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIGJhc2VeeDApYCwgdGhlbiB3ZSBoYXZlXG4gKiBgZih4KSA9IHkwICsgKHkxIC0geTApICogcmF0aW9gLiAgSW4gb3RoZXIgd29yZHMsIGByYXRpb2AgbWF5IGJlIHRyZWF0ZWQgYXNcbiAqIGFuIGludGVycG9sYXRpb24gZmFjdG9yIGJldHdlZW4gdGhlIHR3byBzdG9wcycgb3V0cHV0IHZhbHVlcy5cbiAqXG4gKiAoTm90ZTogYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybSBmb3IgYHJhdGlvYCxcbiAqIGAoYmFzZV4oeC14MCkgLSAxKSAvIChiYXNlXih4MS14MCkgLSAxKSBgLCBpcyBlcXVpdmFsZW50LCBidXQgcmVxdWlyZXMgZmV3ZXJcbiAqIGV4cGVuc2l2ZSBgTWF0aC5wb3coKWAgb3BlcmF0aW9ucy4pXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW50ZXJwb2xhdGlvbkZhY3RvcihpbnB1dCwgYmFzZSwgbG93ZXJWYWx1ZSwgdXBwZXJWYWx1ZSkge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB1cHBlclZhbHVlIC0gbG93ZXJWYWx1ZTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IGlucHV0IC0gbG93ZXJWYWx1ZTtcblxuICAgIGlmIChkaWZmZXJlbmNlID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAoYmFzZSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBkaWZmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoTWF0aC5wb3coYmFzZSwgcHJvZ3Jlc3MpIC0gMSkgLyAoTWF0aC5wb3coYmFzZSwgZGlmZmVyZW5jZSkgLSAxKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IFBhcnNpbmdFcnJvciBmcm9tICcuL3BhcnNpbmdfZXJyb3InO1xuaW1wb3J0IFBhcnNpbmdDb250ZXh0IGZyb20gJy4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgU3RlcCBmcm9tICcuL2RlZmluaXRpb25zL3N0ZXAnO1xuaW1wb3J0IEludGVycG9sYXRlIGZyb20gJy4vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IENvYWxlc2NlIGZyb20gJy4vZGVmaW5pdGlvbnMvY29hbGVzY2UnO1xuaW1wb3J0IExldCBmcm9tICcuL2RlZmluaXRpb25zL2xldCc7XG5pbXBvcnQgZGVmaW5pdGlvbnMgZnJvbSAnLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgKiBhcyBpc0NvbnN0YW50IGZyb20gJy4vaXNfY29uc3RhbnQnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHtzdWNjZXNzLCBlcnJvcn0gZnJvbSAnLi4vdXRpbC9yZXN1bHQnO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbiwgc3VwcG9ydHNab29tRXhwcmVzc2lvbiwgc3VwcG9ydHNJbnRlcnBvbGF0aW9ufSBmcm9tICcuLi91dGlsL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7VHlwZSwgRXZhbHVhdGlvbktpbmR9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuL3ZhbHVlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYyc7XG5pbXBvcnQgdHlwZSB7UmVzdWx0fSBmcm9tICcuLi91dGlsL3Jlc3VsdCc7XG5pbXBvcnQgdHlwZSB7SW50ZXJwb2xhdGlvblR5cGV9IGZyb20gJy4vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHR5cGUge1Byb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5leHBvcnQgdHlwZSBGZWF0dXJlID0ge1xuICAgICt0eXBlOiAxIHwgMiB8IDMgfCAnVW5rbm93bicgfCAnUG9pbnQnIHwgJ011bHRpUG9pbnQnIHwgJ0xpbmVTdHJpbmcnIHwgJ011bHRpTGluZVN0cmluZycgfCAnUG9seWdvbicgfCAnTXVsdGlQb2x5Z29uJyxcbiAgICAraWQ/OiBhbnksXG4gICAgK3Byb3BlcnRpZXM6IHtbc3RyaW5nXTogYW55fSxcbiAgICArcGF0dGVybnM/OiB7W3N0cmluZ106IHtcIm1pblwiOiBzdHJpbmcsIFwibWlkXCI6IHN0cmluZywgXCJtYXhcIjogc3RyaW5nfX1cbn07XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVTdGF0ZSA9IHtbc3RyaW5nXTogYW55fTtcblxuZXhwb3J0IHR5cGUgR2xvYmFsUHJvcGVydGllcyA9ICRSZWFkT25seTx7XG4gICAgem9vbTogbnVtYmVyLFxuICAgIGhlYXRtYXBEZW5zaXR5PzogbnVtYmVyLFxuICAgIGxpbmVQcm9ncmVzcz86IG51bWJlcixcbiAgICBpc1N1cHBvcnRlZFNjcmlwdD86IChzdHJpbmcpID0+IGJvb2xlYW4sXG4gICAgYWNjdW11bGF0ZWQ/OiBWYWx1ZVxufT47XG5cbmV4cG9ydCBjbGFzcyBTdHlsZUV4cHJlc3Npb24ge1xuICAgIGV4cHJlc3Npb246IEV4cHJlc3Npb247XG5cbiAgICBfZXZhbHVhdG9yOiBFdmFsdWF0aW9uQ29udGV4dDtcbiAgICBfZGVmYXVsdFZhbHVlOiBWYWx1ZTtcbiAgICBfd2FybmluZ0hpc3Rvcnk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufTtcbiAgICBfZW51bVZhbHVlczogP3tbc3RyaW5nXTogYW55fTtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IEV4cHJlc3Npb24sIHByb3BlcnR5U3BlYzogP1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuX3dhcm5pbmdIaXN0b3J5ID0ge307XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvciA9IG5ldyBFdmFsdWF0aW9uQ29udGV4dCgpO1xuICAgICAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSBwcm9wZXJ0eVNwZWMgPyBnZXREZWZhdWx0VmFsdWUocHJvcGVydHlTcGVjKSA6IG51bGw7XG4gICAgICAgIHRoaXMuX2VudW1WYWx1ZXMgPSBwcm9wZXJ0eVNwZWMgJiYgcHJvcGVydHlTcGVjLnR5cGUgPT09ICdlbnVtJyA/IHByb3BlcnR5U3BlYy52YWx1ZXMgOiBudWxsO1xuICAgIH1cblxuICAgIGV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscyA9IGdsb2JhbHM7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlID0gZmVhdHVyZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZSA9IGZlYXR1cmVTdGF0ZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcyA9IGF2YWlsYWJsZUltYWdlcyB8fCBudWxsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZm9ybWF0dGVkU2VjdGlvbiA9IGZvcm1hdHRlZFNlY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmdsb2JhbHMgPSBnbG9iYWxzO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZSA9IGZlYXR1cmUgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZSA9IGZlYXR1cmVTdGF0ZSB8fCBudWxsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuYXZhaWxhYmxlSW1hZ2VzID0gYXZhaWxhYmxlSW1hZ2VzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uID0gZm9ybWF0dGVkU2VjdGlvbiB8fCBudWxsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5fZXZhbHVhdG9yKTtcbiAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2VudW1WYWx1ZXMgJiYgISh2YWwgaW4gdGhpcy5fZW51bVZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCB2YWx1ZSB0byBiZSBvbmUgb2YgJHtPYmplY3Qua2V5cyh0aGlzLl9lbnVtVmFsdWVzKS5tYXAodiA9PiBKU09OLnN0cmluZ2lmeSh2KSkuam9pbignLCAnKX0sIGJ1dCBmb3VuZCAke0pTT04uc3RyaW5naWZ5KHZhbCl9IGluc3RlYWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dhcm5pbmdIaXN0b3J5W2UubWVzc2FnZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93YXJuaW5nSGlzdG9yeVtlLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cHJlc3Npb24oZXhwcmVzc2lvbjogbWl4ZWQpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdHlwZW9mIGV4cHJlc3Npb25bMF0gPT09ICdzdHJpbmcnICYmIGV4cHJlc3Npb25bMF0gaW4gZGVmaW5pdGlvbnM7XG59XG5cbi8qKlxuICogUGFyc2UgYW5kIHR5cGVjaGVjayB0aGUgZ2l2ZW4gc3R5bGUgc3BlYyBKU09OIGV4cHJlc3Npb24uICBJZlxuICogb3B0aW9ucy5kZWZhdWx0VmFsdWUgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIHJlc3VsdGluZyBTdHlsZUV4cHJlc3Npb24nc1xuICogYGV2YWx1YXRlKClgIG1ldGhvZCB3aWxsIGhhbmRsZSBlcnJvcnMgYnkgbG9nZ2luZyBhIHdhcm5pbmcgKG9uY2UgcGVyXG4gKiBtZXNzYWdlKSBhbmQgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IHZhbHVlLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHRocm93XG4gKiBldmFsdWF0aW9uIGVycm9ycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uOiBtaXhlZCwgcHJvcGVydHlTcGVjOiA/U3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBSZXN1bHQ8U3R5bGVFeHByZXNzaW9uLCBBcnJheTxQYXJzaW5nRXJyb3I+PiB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNpbmdDb250ZXh0KGRlZmluaXRpb25zLCBbXSwgcHJvcGVydHlTcGVjID8gZ2V0RXhwZWN0ZWRUeXBlKHByb3BlcnR5U3BlYykgOiB1bmRlZmluZWQpO1xuXG4gICAgLy8gRm9yIHN0cmluZy12YWx1ZWQgcHJvcGVydGllcywgY29lcmNlIHRvIHN0cmluZyBhdCB0aGUgdG9wIGxldmVsIHJhdGhlciB0aGFuIGFzc2VydGluZy5cbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZXIucGFyc2UoZXhwcmVzc2lvbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCxcbiAgICAgICAgcHJvcGVydHlTcGVjICYmIHByb3BlcnR5U3BlYy50eXBlID09PSAnc3RyaW5nJyA/IHt0eXBlQW5ub3RhdGlvbjogJ2NvZXJjZSd9IDogdW5kZWZpbmVkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIGFzc2VydChwYXJzZXIuZXJyb3JzLmxlbmd0aCA+IDApO1xuICAgICAgICByZXR1cm4gZXJyb3IocGFyc2VyLmVycm9ycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Y2Nlc3MobmV3IFN0eWxlRXhwcmVzc2lvbihwYXJzZWQsIHByb3BlcnR5U3BlYykpO1xufVxuXG5leHBvcnQgY2xhc3MgWm9vbUNvbnN0YW50RXhwcmVzc2lvbjxLaW5kOiBFdmFsdWF0aW9uS2luZD4ge1xuICAgIGtpbmQ6IEtpbmQ7XG4gICAgaXNTdGF0ZURlcGVuZGVudDogYm9vbGVhbjtcbiAgICBfc3R5bGVFeHByZXNzaW9uOiBTdHlsZUV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihraW5kOiBLaW5kLCBleHByZXNzaW9uOiBTdHlsZUV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy5raW5kID0ga2luZDtcbiAgICAgICAgdGhpcy5fc3R5bGVFeHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5pc1N0YXRlRGVwZW5kZW50ID0ga2luZCAhPT0gKCdjb25zdGFudCc6IEV2YWx1YXRpb25LaW5kKSAmJiAhaXNDb25zdGFudC5pc1N0YXRlQ29uc3RhbnQoZXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUoZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFpvb21EZXBlbmRlbnRFeHByZXNzaW9uPEtpbmQ6IEV2YWx1YXRpb25LaW5kPiB7XG4gICAga2luZDogS2luZDtcbiAgICB6b29tU3RvcHM6IEFycmF5PG51bWJlcj47XG4gICAgaXNTdGF0ZURlcGVuZGVudDogYm9vbGVhbjtcblxuICAgIF9zdHlsZUV4cHJlc3Npb246IFN0eWxlRXhwcmVzc2lvbjtcbiAgICBpbnRlcnBvbGF0aW9uVHlwZTogP0ludGVycG9sYXRpb25UeXBlO1xuXG4gICAgY29uc3RydWN0b3Ioa2luZDogS2luZCwgZXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uLCB6b29tU3RvcHM6IEFycmF5PG51bWJlcj4sIGludGVycG9sYXRpb25UeXBlPzogSW50ZXJwb2xhdGlvblR5cGUpIHtcbiAgICAgICAgdGhpcy5raW5kID0ga2luZDtcbiAgICAgICAgdGhpcy56b29tU3RvcHMgPSB6b29tU3RvcHM7XG4gICAgICAgIHRoaXMuX3N0eWxlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuaXNTdGF0ZURlcGVuZGVudCA9IGtpbmQgIT09ICgnY2FtZXJhJzogRXZhbHVhdGlvbktpbmQpICYmICFpc0NvbnN0YW50LmlzU3RhdGVDb25zdGFudChleHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmludGVycG9sYXRpb25UeXBlID0gaW50ZXJwb2xhdGlvblR5cGU7XG4gICAgfVxuXG4gICAgZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyhnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyhnbG9iYWxzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcywgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0aW9uRmFjdG9yKGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5pbnRlcnBvbGF0aW9uVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIEludGVycG9sYXRlLmludGVycG9sYXRpb25GYWN0b3IodGhpcy5pbnRlcnBvbGF0aW9uVHlwZSwgaW5wdXQsIGxvd2VyLCB1cHBlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgQ29uc3RhbnRFeHByZXNzaW9uID0ge1xuICAgIGtpbmQ6ICdjb25zdGFudCcsXG4gICAgK2V2YWx1YXRlOiAoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPikgPT4gYW55LFxufVxuXG5leHBvcnQgdHlwZSBTb3VyY2VFeHByZXNzaW9uID0ge1xuICAgIGtpbmQ6ICdzb3VyY2UnLFxuICAgIGlzU3RhdGVEZXBlbmRlbnQ6IGJvb2xlYW4sXG4gICAgK2V2YWx1YXRlOiAoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pID0+IGFueSxcbn07XG5cbmV4cG9ydCB0eXBlIENhbWVyYUV4cHJlc3Npb24gPSB7XG4gICAga2luZDogJ2NhbWVyYScsXG4gICAgK2V2YWx1YXRlOiAoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPikgPT4gYW55LFxuICAgICtpbnRlcnBvbGF0aW9uRmFjdG9yOiAoaW5wdXQ6IG51bWJlciwgbG93ZXI6IG51bWJlciwgdXBwZXI6IG51bWJlcikgPT4gbnVtYmVyLFxuICAgIHpvb21TdG9wczogQXJyYXk8bnVtYmVyPixcbiAgICBpbnRlcnBvbGF0aW9uVHlwZTogP0ludGVycG9sYXRpb25UeXBlXG59O1xuXG5leHBvcnQgdHlwZSBDb21wb3NpdGVFeHByZXNzaW9uID0ge1xuICAgIGtpbmQ6ICdjb21wb3NpdGUnLFxuICAgIGlzU3RhdGVEZXBlbmRlbnQ6IGJvb2xlYW4sXG4gICAgK2V2YWx1YXRlOiAoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pID0+IGFueSxcbiAgICAraW50ZXJwb2xhdGlvbkZhY3RvcjogKGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpID0+IG51bWJlcixcbiAgICB6b29tU3RvcHM6IEFycmF5PG51bWJlcj4sXG4gICAgaW50ZXJwb2xhdGlvblR5cGU6ID9JbnRlcnBvbGF0aW9uVHlwZVxufTtcblxuZXhwb3J0IHR5cGUgU3R5bGVQcm9wZXJ0eUV4cHJlc3Npb24gPVxuICAgIHwgQ29uc3RhbnRFeHByZXNzaW9uXG4gICAgfCBTb3VyY2VFeHByZXNzaW9uXG4gICAgfCBDYW1lcmFFeHByZXNzaW9uXG4gICAgfCBDb21wb3NpdGVFeHByZXNzaW9uO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvcGVydHlFeHByZXNzaW9uKGV4cHJlc3Npb246IG1peGVkLCBwcm9wZXJ0eVNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogUmVzdWx0PFN0eWxlUHJvcGVydHlFeHByZXNzaW9uLCBBcnJheTxQYXJzaW5nRXJyb3I+PiB7XG4gICAgZXhwcmVzc2lvbiA9IGNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcHJvcGVydHlTcGVjKTtcbiAgICBpZiAoZXhwcmVzc2lvbi5yZXN1bHQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gZXhwcmVzc2lvbi52YWx1ZS5leHByZXNzaW9uO1xuXG4gICAgY29uc3QgaXNGZWF0dXJlQ29uc3RhbnQgPSBpc0NvbnN0YW50LmlzRmVhdHVyZUNvbnN0YW50KHBhcnNlZCk7XG4gICAgaWYgKCFpc0ZlYXR1cmVDb25zdGFudCAmJiAhc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24ocHJvcGVydHlTcGVjKSkge1xuICAgICAgICByZXR1cm4gZXJyb3IoW25ldyBQYXJzaW5nRXJyb3IoJycsICdkYXRhIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQnKV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlzWm9vbUNvbnN0YW50ID0gaXNDb25zdGFudC5pc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQocGFyc2VkLCBbJ3pvb20nXSk7XG4gICAgaWYgKCFpc1pvb21Db25zdGFudCAmJiAhc3VwcG9ydHNab29tRXhwcmVzc2lvbihwcm9wZXJ0eVNwZWMpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcihbbmV3IFBhcnNpbmdFcnJvcignJywgJ3pvb20gZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZCcpXSk7XG4gICAgfVxuXG4gICAgY29uc3Qgem9vbUN1cnZlID0gZmluZFpvb21DdXJ2ZShwYXJzZWQpO1xuICAgIGlmICghem9vbUN1cnZlICYmICFpc1pvb21Db25zdGFudCkge1xuICAgICAgICByZXR1cm4gZXJyb3IoW25ldyBQYXJzaW5nRXJyb3IoJycsICdcInpvb21cIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb24uJyldKTtcbiAgICB9IGVsc2UgaWYgKHpvb21DdXJ2ZSBpbnN0YW5jZW9mIFBhcnNpbmdFcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyb3IoW3pvb21DdXJ2ZV0pO1xuICAgIH0gZWxzZSBpZiAoem9vbUN1cnZlIGluc3RhbmNlb2YgSW50ZXJwb2xhdGUgJiYgIXN1cHBvcnRzSW50ZXJwb2xhdGlvbihwcm9wZXJ0eVNwZWMpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcihbbmV3IFBhcnNpbmdFcnJvcignJywgJ1wiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9ucyBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgcHJvcGVydHknKV0pO1xuICAgIH1cblxuICAgIGlmICghem9vbUN1cnZlKSB7XG4gICAgICAgIHJldHVybiBzdWNjZXNzKGlzRmVhdHVyZUNvbnN0YW50ID9cbiAgICAgICAgICAgIChuZXcgWm9vbUNvbnN0YW50RXhwcmVzc2lvbignY29uc3RhbnQnLCBleHByZXNzaW9uLnZhbHVlKTogQ29uc3RhbnRFeHByZXNzaW9uKSA6XG4gICAgICAgICAgICAobmV3IFpvb21Db25zdGFudEV4cHJlc3Npb24oJ3NvdXJjZScsIGV4cHJlc3Npb24udmFsdWUpOiBTb3VyY2VFeHByZXNzaW9uKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJwb2xhdGlvblR5cGUgPSB6b29tQ3VydmUgaW5zdGFuY2VvZiBJbnRlcnBvbGF0ZSA/IHpvb21DdXJ2ZS5pbnRlcnBvbGF0aW9uIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHN1Y2Nlc3MoaXNGZWF0dXJlQ29uc3RhbnQgP1xuICAgICAgICAobmV3IFpvb21EZXBlbmRlbnRFeHByZXNzaW9uKCdjYW1lcmEnLCBleHByZXNzaW9uLnZhbHVlLCB6b29tQ3VydmUubGFiZWxzLCBpbnRlcnBvbGF0aW9uVHlwZSk6IENhbWVyYUV4cHJlc3Npb24pIDpcbiAgICAgICAgKG5ldyBab29tRGVwZW5kZW50RXhwcmVzc2lvbignY29tcG9zaXRlJywgZXhwcmVzc2lvbi52YWx1ZSwgem9vbUN1cnZlLmxhYmVscywgaW50ZXJwb2xhdGlvblR5cGUpOiBDb21wb3NpdGVFeHByZXNzaW9uKSk7XG59XG5cbmltcG9ydCB7aXNGdW5jdGlvbiwgY3JlYXRlRnVuY3Rpb259IGZyb20gJy4uL2Z1bmN0aW9uJztcbmltcG9ydCB7Q29sb3J9IGZyb20gJy4vdmFsdWVzJztcblxuLy8gc2VyaWFsaXphdGlvbiB3cmFwcGVyIGZvciBvbGQtc3R5bGUgc3RvcCBmdW5jdGlvbnMgbm9ybWFsaXplZCB0byB0aGVcbi8vIGV4cHJlc3Npb24gaW50ZXJmYWNlXG5leHBvcnQgY2xhc3MgU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uPFQ+IHtcbiAgICBfcGFyYW1ldGVyczogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD47XG4gICAgX3NwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uO1xuXG4gICAga2luZDogRXZhbHVhdGlvbktpbmQ7XG4gICAgZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSkgPT4gYW55O1xuICAgIGludGVycG9sYXRpb25GYWN0b3I6ID8oaW5wdXQ6IG51bWJlciwgbG93ZXI6IG51bWJlciwgdXBwZXI6IG51bWJlcikgPT4gbnVtYmVyO1xuICAgIHpvb21TdG9wczogP0FycmF5PG51bWJlcj47XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiwgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy5fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIHRoaXMuX3NwZWNpZmljYXRpb24gPSBzcGVjaWZpY2F0aW9uO1xuICAgICAgICBleHRlbmQodGhpcywgY3JlYXRlRnVuY3Rpb24odGhpcy5fcGFyYW1ldGVycywgdGhpcy5fc3BlY2lmaWNhdGlvbikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZShzZXJpYWxpemVkOiB7X3BhcmFtZXRlcnM6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+LCBfc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb259KSB7XG4gICAgICAgIHJldHVybiAoKG5ldyBTdHlsZVByb3BlcnR5RnVuY3Rpb24oc2VyaWFsaXplZC5fcGFyYW1ldGVycywgc2VyaWFsaXplZC5fc3BlY2lmaWNhdGlvbikpOiBTdHlsZVByb3BlcnR5RnVuY3Rpb248VD4pO1xuICAgIH1cblxuICAgIHN0YXRpYyBzZXJpYWxpemUoaW5wdXQ6IFN0eWxlUHJvcGVydHlGdW5jdGlvbjxUPikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX3BhcmFtZXRlcnM6IGlucHV0Ll9wYXJhbWV0ZXJzLFxuICAgICAgICAgICAgX3NwZWNpZmljYXRpb246IGlucHV0Ll9zcGVjaWZpY2F0aW9uXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJvcGVydHlFeHByZXNzaW9uPFQ+KHZhbHVlOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiwgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbiB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAobmV3IFN0eWxlUHJvcGVydHlGdW5jdGlvbih2YWx1ZSwgc3BlY2lmaWNhdGlvbik6IGFueSk7XG5cbiAgICB9IGVsc2UgaWYgKGlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IGNyZWF0ZVByb3BlcnR5RXhwcmVzc2lvbih2YWx1ZSwgc3BlY2lmaWNhdGlvbik7XG4gICAgICAgIGlmIChleHByZXNzaW9uLnJlc3VsdCA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodCBpbiB2YWxpZGF0aW9uXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXhwcmVzc2lvbi52YWx1ZS5tYXAoZXJyID0+IGAke2Vyci5rZXl9OiAke2Vyci5tZXNzYWdlfWApLmpvaW4oJywgJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHByZXNzaW9uLnZhbHVlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNvbnN0YW50OiBhbnkgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgc3BlY2lmaWNhdGlvbi50eXBlID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICBjb25zdGFudCA9IENvbG9yLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ2NvbnN0YW50JyxcbiAgICAgICAgICAgIGV2YWx1YXRlOiAoKSA9PiBjb25zdGFudFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuLy8gWm9vbS1kZXBlbmRlbnQgZXhwcmVzc2lvbnMgbWF5IG9ubHkgdXNlIFtcInpvb21cIl0gYXMgdGhlIGlucHV0IHRvIGEgdG9wLWxldmVsIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIlxuLy8gZXhwcmVzc2lvbiAoY29sbGVjdGl2ZWx5IHJlZmVycmVkIHRvIGFzIGEgXCJjdXJ2ZVwiKS4gVGhlIGN1cnZlIG1heSBiZSB3cmFwcGVkIGluIG9uZSBvciBtb3JlIFwibGV0XCIgb3Jcbi8vIFwiY29hbGVzY2VcIiBleHByZXNzaW9ucy5cbmZ1bmN0aW9uIGZpbmRab29tQ3VydmUoZXhwcmVzc2lvbjogRXhwcmVzc2lvbik6IFN0ZXAgfCBJbnRlcnBvbGF0ZSB8IFBhcnNpbmdFcnJvciB8IG51bGwge1xuICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgTGV0KSB7XG4gICAgICAgIHJlc3VsdCA9IGZpbmRab29tQ3VydmUoZXhwcmVzc2lvbi5yZXN1bHQpO1xuXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgQ29hbGVzY2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgZXhwcmVzc2lvbi5hcmdzKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBmaW5kWm9vbUN1cnZlKGFyZyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBTdGVwIHx8IGV4cHJlc3Npb24gaW5zdGFuY2VvZiBJbnRlcnBvbGF0ZSkgJiZcbiAgICAgICAgZXhwcmVzc2lvbi5pbnB1dCBpbnN0YW5jZW9mIENvbXBvdW5kRXhwcmVzc2lvbiAmJlxuICAgICAgICBleHByZXNzaW9uLmlucHV0Lm5hbWUgPT09ICd6b29tJykge1xuXG4gICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFBhcnNpbmdFcnJvcikge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGV4cHJlc3Npb24uZWFjaENoaWxkKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZFJlc3VsdCA9IGZpbmRab29tQ3VydmUoY2hpbGQpO1xuICAgICAgICBpZiAoY2hpbGRSZXN1bHQgaW5zdGFuY2VvZiBQYXJzaW5nRXJyb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGNoaWxkUmVzdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKCFyZXN1bHQgJiYgY2hpbGRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBQYXJzaW5nRXJyb3IoJycsICdcInpvb21cIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb24uJyk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ICYmIGNoaWxkUmVzdWx0ICYmIHJlc3VsdCAhPT0gY2hpbGRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBQYXJzaW5nRXJyb3IoJycsICdPbmx5IG9uZSB6b29tLWJhc2VkIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIiBzdWJleHByZXNzaW9uIG1heSBiZSB1c2VkIGluIGFuIGV4cHJlc3Npb24uJyk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmltcG9ydCB7Q29sb3JUeXBlLCBTdHJpbmdUeXBlLCBOdW1iZXJUeXBlLCBCb29sZWFuVHlwZSwgVmFsdWVUeXBlLCBGb3JtYXR0ZWRUeXBlLCBSZXNvbHZlZEltYWdlVHlwZSwgYXJyYXl9IGZyb20gJy4vdHlwZXMnO1xuXG5mdW5jdGlvbiBnZXRFeHBlY3RlZFR5cGUoc3BlYzogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBUeXBlIHtcbiAgICBjb25zdCB0eXBlcyA9IHtcbiAgICAgICAgY29sb3I6IENvbG9yVHlwZSxcbiAgICAgICAgc3RyaW5nOiBTdHJpbmdUeXBlLFxuICAgICAgICBudW1iZXI6IE51bWJlclR5cGUsXG4gICAgICAgIGVudW06IFN0cmluZ1R5cGUsXG4gICAgICAgIGJvb2xlYW46IEJvb2xlYW5UeXBlLFxuICAgICAgICBmb3JtYXR0ZWQ6IEZvcm1hdHRlZFR5cGUsXG4gICAgICAgIHJlc29sdmVkSW1hZ2U6IFJlc29sdmVkSW1hZ2VUeXBlXG4gICAgfTtcblxuICAgIGlmIChzcGVjLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5KHR5cGVzW3NwZWMudmFsdWVdIHx8IFZhbHVlVHlwZSwgc3BlYy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlc1tzcGVjLnR5cGVdO1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc3BlYzogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBWYWx1ZSB7XG4gICAgaWYgKHNwZWMudHlwZSA9PT0gJ2NvbG9yJyAmJiBpc0Z1bmN0aW9uKHNwZWMuZGVmYXVsdCkpIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBoZWF0bWFwLWNvbG9yOiBpdCB1c2VzIHRoZSAnZGVmYXVsdDonIHRvIGRlZmluZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgY29sb3IgcmFtcCwgYnV0IGNyZWF0ZUV4cHJlc3Npb24gZXhwZWN0cyBhIHNpbXBsZSB2YWx1ZSB0byBmYWxsXG4gICAgICAgIC8vIGJhY2sgdG8gaW4gY2FzZSBvZiBydW50aW1lIGVycm9yc1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKDAsIDAsIDAsIDApO1xuICAgIH0gZWxzZSBpZiAoc3BlYy50eXBlID09PSAnY29sb3InKSB7XG4gICAgICAgIHJldHVybiBDb2xvci5wYXJzZShzcGVjLmRlZmF1bHQpIHx8IG51bGw7XG4gICAgfSBlbHNlIGlmIChzcGVjLmRlZmF1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3BlYy5kZWZhdWx0O1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHZhbGlkYXRlU3BlYyBmcm9tICcuL3ZhbGlkYXRlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVPYmplY3Qob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IG9iamVjdCA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgZWxlbWVudFNwZWNzID0gb3B0aW9ucy52YWx1ZVNwZWMgfHwge307XG4gICAgY29uc3QgZWxlbWVudFZhbGlkYXRvcnMgPSBvcHRpb25zLm9iamVjdEVsZW1lbnRWYWxpZGF0b3JzIHx8IHt9O1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBsZXQgZXJyb3JzID0gW107XG5cbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZShvYmplY3QpO1xuICAgIGlmICh0eXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBvYmplY3QsIGBvYmplY3QgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvYmplY3RLZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTcGVjS2V5ID0gb2JqZWN0S2V5LnNwbGl0KCcuJylbMF07IC8vIHRyZWF0ICdwYWludC4qJyBhcyAncGFpbnQnXG4gICAgICAgIGNvbnN0IGVsZW1lbnRTcGVjID0gZWxlbWVudFNwZWNzW2VsZW1lbnRTcGVjS2V5XSB8fCBlbGVtZW50U3BlY3NbJyonXTtcblxuICAgICAgICBsZXQgdmFsaWRhdGVFbGVtZW50O1xuICAgICAgICBpZiAoZWxlbWVudFZhbGlkYXRvcnNbZWxlbWVudFNwZWNLZXldKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQgPSBlbGVtZW50VmFsaWRhdG9yc1tlbGVtZW50U3BlY0tleV07XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudFNwZWNzW2VsZW1lbnRTcGVjS2V5XSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50ID0gdmFsaWRhdGVTcGVjO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRWYWxpZGF0b3JzWycqJ10pIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudCA9IGVsZW1lbnRWYWxpZGF0b3JzWycqJ107XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudFNwZWNzWycqJ10pIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudCA9IHZhbGlkYXRlU3BlYztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBvYmplY3Rbb2JqZWN0S2V5XSwgYHVua25vd24gcHJvcGVydHkgXCIke29iamVjdEtleX1cImApKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAga2V5OiAoa2V5ID8gYCR7a2V5fS5gIDoga2V5KSArIG9iamVjdEtleSxcbiAgICAgICAgICAgIHZhbHVlOiBvYmplY3Rbb2JqZWN0S2V5XSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogZWxlbWVudFNwZWMsXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYyxcbiAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIG9iamVjdEtleVxuICAgICAgICB9LCBvYmplY3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnRTcGVjS2V5IGluIGVsZW1lbnRTcGVjcykge1xuICAgICAgICAvLyBEb24ndCBjaGVjayBgcmVxdWlyZWRgIHdoZW4gdGhlcmUncyBhIGN1c3RvbSB2YWxpZGF0b3IgZm9yIHRoYXQgcHJvcGVydHkuXG4gICAgICAgIGlmIChlbGVtZW50VmFsaWRhdG9yc1tlbGVtZW50U3BlY0tleV0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV0ucmVxdWlyZWQgJiYgZWxlbWVudFNwZWNzW2VsZW1lbnRTcGVjS2V5XVsnZGVmYXVsdCddID09PSB1bmRlZmluZWQgJiYgb2JqZWN0W2VsZW1lbnRTcGVjS2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgb2JqZWN0LCBgbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcIiR7ZWxlbWVudFNwZWNLZXl9XCJgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiXG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkob3B0aW9ucykge1xuICAgIGNvbnN0IGFycmF5ID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBhcnJheVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdmFsaWRhdGVBcnJheUVsZW1lbnQgPSBvcHRpb25zLmFycmF5RWxlbWVudFZhbGlkYXRvciB8fCB2YWxpZGF0ZTtcblxuICAgIGlmIChnZXRUeXBlKGFycmF5KSAhPT0gJ2FycmF5Jykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBhcnJheSwgYGFycmF5IGV4cGVjdGVkLCAke2dldFR5cGUoYXJyYXkpfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBpZiAoYXJyYXlTcGVjLmxlbmd0aCAmJiBhcnJheS5sZW5ndGggIT09IGFycmF5U3BlYy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgYXJyYXksIGBhcnJheSBsZW5ndGggJHthcnJheVNwZWMubGVuZ3RofSBleHBlY3RlZCwgbGVuZ3RoICR7YXJyYXkubGVuZ3RofSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBpZiAoYXJyYXlTcGVjWydtaW4tbGVuZ3RoJ10gJiYgYXJyYXkubGVuZ3RoIDwgYXJyYXlTcGVjWydtaW4tbGVuZ3RoJ10pIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgYXJyYXksIGBhcnJheSBsZW5ndGggYXQgbGVhc3QgJHthcnJheVNwZWNbJ21pbi1sZW5ndGgnXX0gZXhwZWN0ZWQsIGxlbmd0aCAke2FycmF5Lmxlbmd0aH0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgbGV0IGFycmF5RWxlbWVudFNwZWMgPSB7XG4gICAgICAgIFwidHlwZVwiOiBhcnJheVNwZWMudmFsdWUsXG4gICAgICAgIFwidmFsdWVzXCI6IGFycmF5U3BlYy52YWx1ZXNcbiAgICB9O1xuXG4gICAgaWYgKHN0eWxlU3BlYy4kdmVyc2lvbiA8IDcpIHtcbiAgICAgICAgYXJyYXlFbGVtZW50U3BlYy5mdW5jdGlvbiA9IGFycmF5U3BlYy5mdW5jdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZ2V0VHlwZShhcnJheVNwZWMudmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhcnJheUVsZW1lbnRTcGVjID0gYXJyYXlTcGVjLnZhbHVlO1xuICAgIH1cblxuICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVBcnJheUVsZW1lbnQoe1xuICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICBhcnJheUluZGV4OiBpLFxuICAgICAgICAgICAgdmFsdWU6IGFycmF5W2ldLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBhcnJheUVsZW1lbnRTcGVjLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICBrZXk6IGAke2tleX1bJHtpfV1gXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZU51bWJlcihvcHRpb25zKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHZhbHVlU3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKHZhbHVlKTtcblxuICAgIGlmICh0eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYG51bWJlciBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBpZiAoJ21pbmltdW0nIGluIHZhbHVlU3BlYyAmJiB2YWx1ZSA8IHZhbHVlU3BlYy5taW5pbXVtKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgJHt2YWx1ZX0gaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlICR7dmFsdWVTcGVjLm1pbmltdW19YCldO1xuICAgIH1cblxuICAgIGlmICgnbWF4aW11bScgaW4gdmFsdWVTcGVjICYmIHZhbHVlID4gdmFsdWVTcGVjLm1heGltdW0pIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGAke3ZhbHVlfSBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgJHt2YWx1ZVNwZWMubWF4aW11bX1gKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlQXJyYXkgZnJvbSAnLi92YWxpZGF0ZV9hcnJheSc7XG5pbXBvcnQgdmFsaWRhdGVOdW1iZXIgZnJvbSAnLi92YWxpZGF0ZV9udW1iZXInO1xuaW1wb3J0IHtpc0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHt1bmJ1bmRsZSwgZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB7XG4gICAgc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24sXG4gICAgc3VwcG9ydHNab29tRXhwcmVzc2lvbixcbiAgICBzdXBwb3J0c0ludGVycG9sYXRpb25cbn0gZnJvbSAnLi4vdXRpbC9wcm9wZXJ0aWVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbihvcHRpb25zKSB7XG4gICAgY29uc3QgZnVuY3Rpb25WYWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBjb25zdCBmdW5jdGlvblR5cGUgPSB1bmJ1bmRsZShvcHRpb25zLnZhbHVlLnR5cGUpO1xuICAgIGxldCBzdG9wS2V5VHlwZTtcbiAgICBsZXQgc3RvcERvbWFpblZhbHVlcyA9IHt9O1xuICAgIGxldCBwcmV2aW91c1N0b3BEb21haW5WYWx1ZTtcbiAgICBsZXQgcHJldmlvdXNTdG9wRG9tYWluWm9vbTtcblxuICAgIGNvbnN0IGlzWm9vbUZ1bmN0aW9uID0gZnVuY3Rpb25UeXBlICE9PSAnY2F0ZWdvcmljYWwnICYmIG9wdGlvbnMudmFsdWUucHJvcGVydHkgPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc1Byb3BlcnR5RnVuY3Rpb24gPSAhaXNab29tRnVuY3Rpb247XG4gICAgY29uc3QgaXNab29tQW5kUHJvcGVydHlGdW5jdGlvbiA9XG4gICAgICAgIGdldFR5cGUob3B0aW9ucy52YWx1ZS5zdG9wcykgPT09ICdhcnJheScgJiZcbiAgICAgICAgZ2V0VHlwZShvcHRpb25zLnZhbHVlLnN0b3BzWzBdKSA9PT0gJ2FycmF5JyAmJlxuICAgICAgICBnZXRUeXBlKG9wdGlvbnMudmFsdWUuc3RvcHNbMF1bMF0pID09PSAnb2JqZWN0JztcblxuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgICAgIHZhbHVlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMuZnVuY3Rpb24sXG4gICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgc3RvcHM6IHZhbGlkYXRlRnVuY3Rpb25TdG9wcyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHZhbGlkYXRlRnVuY3Rpb25EZWZhdWx0XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdpZGVudGl0eScgJiYgaXNab29tRnVuY3Rpb24pIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJwcm9wZXJ0eVwiJykpO1xuICAgIH1cblxuICAgIGlmIChmdW5jdGlvblR5cGUgIT09ICdpZGVudGl0eScgJiYgIW9wdGlvbnMudmFsdWUuc3RvcHMpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJzdG9wc1wiJykpO1xuICAgIH1cblxuICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdleHBvbmVudGlhbCcgJiYgb3B0aW9ucy52YWx1ZVNwZWMuZXhwcmVzc2lvbiAmJiAhc3VwcG9ydHNJbnRlcnBvbGF0aW9uKG9wdGlvbnMudmFsdWVTcGVjKSkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnZXhwb25lbnRpYWwgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGVTcGVjLiR2ZXJzaW9uID49IDgpIHtcbiAgICAgICAgaWYgKGlzUHJvcGVydHlGdW5jdGlvbiAmJiAhc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24ob3B0aW9ucy52YWx1ZVNwZWMpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAncHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNab29tRnVuY3Rpb24gJiYgIXN1cHBvcnRzWm9vbUV4cHJlc3Npb24ob3B0aW9ucy52YWx1ZVNwZWMpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnem9vbSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgoZnVuY3Rpb25UeXBlID09PSAnY2F0ZWdvcmljYWwnIHx8IGlzWm9vbUFuZFByb3BlcnR5RnVuY3Rpb24pICYmIG9wdGlvbnMudmFsdWUucHJvcGVydHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnXCJwcm9wZXJ0eVwiIHByb3BlcnR5IGlzIHJlcXVpcmVkJykpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uU3RvcHMob3B0aW9ucykge1xuICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09PSAnaWRlbnRpdHknKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdpZGVudGl0eSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgYSBcInN0b3BzXCIgcHJvcGVydHknKV07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3JzID0gW107XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblxuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlQXJyYXkoe1xuICAgICAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBvcHRpb25zLnZhbHVlU3BlYyxcbiAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgICAgIGFycmF5RWxlbWVudFZhbGlkYXRvcjogdmFsaWRhdGVGdW5jdGlvblN0b3BcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmIChnZXRUeXBlKHZhbHVlKSA9PT0gJ2FycmF5JyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHZhbHVlLCAnYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzdG9wJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uU3RvcChvcHRpb25zKSB7XG4gICAgICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgICAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcblxuICAgICAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgIT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgYXJyYXkgZXhwZWN0ZWQsICR7Z2V0VHlwZSh2YWx1ZSl9IGZvdW5kYCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBhcnJheSBsZW5ndGggMiBleHBlY3RlZCwgbGVuZ3RoICR7dmFsdWUubGVuZ3RofSBmb3VuZGApXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1pvb21BbmRQcm9wZXJ0eUZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZ2V0VHlwZSh2YWx1ZVswXSkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBvYmplY3QgZXhwZWN0ZWQsICR7Z2V0VHlwZSh2YWx1ZVswXSl9IGZvdW5kYCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlWzBdLnpvb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnb2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB6b29tJyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlWzBdLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ29iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgdmFsdWUnKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldmlvdXNTdG9wRG9tYWluWm9vbSAmJiBwcmV2aW91c1N0b3BEb21haW5ab29tID4gdW5idW5kbGUodmFsdWVbMF0uem9vbSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZVswXS56b29tLCAnc3RvcCB6b29tIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXInKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodW5idW5kbGUodmFsdWVbMF0uem9vbSkgIT09IHByZXZpb3VzU3RvcERvbWFpblpvb20pIHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1N0b3BEb21haW5ab29tID0gdW5idW5kbGUodmFsdWVbMF0uem9vbSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTdG9wRG9tYWluVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgc3RvcERvbWFpblZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WzBdYCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgdmFsdWVTcGVjOiB7em9vbToge319LFxuICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHt6b29tOiB2YWxpZGF0ZU51bWJlciwgdmFsdWU6IHZhbGlkYXRlU3RvcERvbWFpblZhbHVlfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZVN0b3BEb21haW5WYWx1ZSh7XG4gICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WzBdYCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgdmFsdWVTcGVjOiB7fSxcbiAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgICAgICAgICB9LCB2YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRXhwcmVzc2lvbihkZWVwVW5idW5kbGUodmFsdWVbMV0pKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ycy5jb25jYXQoW25ldyBWYWxpZGF0aW9uRXJyb3IoYCR7a2V5fVsxXWAsIHZhbHVlWzFdLCAnZXhwcmVzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGZ1bmN0aW9uIHN0b3BzLicpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgICAgICBrZXk6IGAke2tleX1bMV1gLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlWzFdLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBmdW5jdGlvblZhbHVlU3BlYyxcbiAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVTdG9wRG9tYWluVmFsdWUob3B0aW9ucywgc3RvcCkge1xuICAgICAgICBjb25zdCB0eXBlID0gZ2V0VHlwZShvcHRpb25zLnZhbHVlKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB1bmJ1bmRsZShvcHRpb25zLnZhbHVlKTtcblxuICAgICAgICBjb25zdCByZXBvcnRWYWx1ZSA9IG9wdGlvbnMudmFsdWUgIT09IG51bGwgPyBvcHRpb25zLnZhbHVlIDogc3RvcDtcblxuICAgICAgICBpZiAoIXN0b3BLZXlUeXBlKSB7XG4gICAgICAgICAgICBzdG9wS2V5VHlwZSA9IHR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gc3RvcEtleVR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsIGAke3R5cGV9IHN0b3AgZG9tYWluIHR5cGUgbXVzdCBtYXRjaCBwcmV2aW91cyBzdG9wIGRvbWFpbiB0eXBlICR7c3RvcEtleVR5cGV9YCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgIT09ICdudW1iZXInICYmIHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgJ3N0b3AgZG9tYWluIHZhbHVlIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbicpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlICE9PSAnbnVtYmVyJyAmJiBmdW5jdGlvblR5cGUgIT09ICdjYXRlZ29yaWNhbCcpIHtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gYG51bWJlciBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGA7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24oZnVuY3Rpb25WYWx1ZVNwZWMpICYmIGZ1bmN0aW9uVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSArPSAnXFxuSWYgeW91IGludGVuZGVkIHRvIHVzZSBhIGNhdGVnb3JpY2FsIGZ1bmN0aW9uLCBzcGVjaWZ5IGBcInR5cGVcIjogXCJjYXRlZ29yaWNhbFwiYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgbWVzc2FnZSldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PT0gJ2NhdGVnb3JpY2FsJyAmJiB0eXBlID09PSAnbnVtYmVyJyAmJiAoIWlzRmluaXRlKHZhbHVlKSB8fCBNYXRoLmZsb29yKHZhbHVlKSAhPT0gdmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCBgaW50ZWdlciBleHBlY3RlZCwgZm91bmQgJHt2YWx1ZX1gKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnVuY3Rpb25UeXBlICE9PSAnY2F0ZWdvcmljYWwnICYmIHR5cGUgPT09ICdudW1iZXInICYmIHByZXZpb3VzU3RvcERvbWFpblZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPCBwcmV2aW91c1N0b3BEb21haW5WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgJ3N0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXInKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmV2aW91c1N0b3BEb21haW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PT0gJ2NhdGVnb3JpY2FsJyAmJiB2YWx1ZSBpbiBzdG9wRG9tYWluVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCAnc3RvcCBkb21haW4gdmFsdWVzIG11c3QgYmUgdW5pcXVlJyldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RvcERvbWFpblZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25EZWZhdWx0KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHtcbiAgICAgICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy52YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogZnVuY3Rpb25WYWx1ZVNwZWMsXG4gICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuaW1wb3J0IHtjcmVhdGVFeHByZXNzaW9uLCBjcmVhdGVQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHtkZWVwVW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHtpc1N0YXRlQ29uc3RhbnQsIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudCwgaXNGZWF0dXJlQ29uc3RhbnR9IGZyb20gJy4uL2V4cHJlc3Npb24vaXNfY29uc3RhbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUV4cHJlc3Npb24ob3B0aW9uczogYW55KTogQXJyYXk8VmFsaWRhdGlvbkVycm9yPiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ID09PSAncHJvcGVydHknID8gY3JlYXRlUHJvcGVydHlFeHByZXNzaW9uIDogY3JlYXRlRXhwcmVzc2lvbikoZGVlcFVuYnVuZGxlKG9wdGlvbnMudmFsdWUpLCBvcHRpb25zLnZhbHVlU3BlYyk7XG4gICAgaWYgKGV4cHJlc3Npb24ucmVzdWx0ID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiBleHByZXNzaW9uLnZhbHVlLm1hcCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdGlvbkVycm9yKGAke29wdGlvbnMua2V5fSR7ZXJyb3Iua2V5fWAsIG9wdGlvbnMudmFsdWUsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uT2JqID0gKGV4cHJlc3Npb24udmFsdWU6IGFueSkuZXhwcmVzc2lvbiB8fCAoZXhwcmVzc2lvbi52YWx1ZTogYW55KS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb247XG5cbiAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ3Byb3BlcnR5JyAmJiAob3B0aW9ucy5wcm9wZXJ0eUtleSA9PT0gJ3RleHQtZm9udCcpICYmXG4gICAgICAgIGV4cHJlc3Npb25PYmoucG9zc2libGVPdXRwdXRzKCkuaW5kZXhPZih1bmRlZmluZWQpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsIGBJbnZhbGlkIGRhdGEgZXhwcmVzc2lvbiBmb3IgXCIke29wdGlvbnMucHJvcGVydHlLZXl9XCIuIE91dHB1dCB2YWx1ZXMgbXVzdCBiZSBjb250YWluZWQgYXMgbGl0ZXJhbHMgd2l0aGluIHRoZSBleHByZXNzaW9uLmApXTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ3Byb3BlcnR5JyAmJiBvcHRpb25zLnByb3BlcnR5VHlwZSA9PT0gJ2xheW91dCcgJiZcbiAgICAgICAgKCFpc1N0YXRlQ29uc3RhbnQoZXhwcmVzc2lvbk9iaikpKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ1wiZmVhdHVyZS1zdGF0ZVwiIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBsYXlvdXQgcHJvcGVydGllcy4nKV07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQgPT09ICdmaWx0ZXInICYmICFpc1N0YXRlQ29uc3RhbnQoZXhwcmVzc2lvbk9iaikpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnXCJmZWF0dXJlLXN0YXRlXCIgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGZpbHRlcnMuJyldO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ICYmIG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQuaW5kZXhPZignY2x1c3RlcicpID09PSAwKSB7XG4gICAgICAgIGlmICghaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50KGV4cHJlc3Npb25PYmosIFsnem9vbScsICdmZWF0dXJlLXN0YXRlJ10pKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdcInpvb21cIiBhbmQgXCJmZWF0dXJlLXN0YXRlXCIgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBjbHVzdGVyIHByb3BlcnRpZXMuJyldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ID09PSAnY2x1c3Rlci1pbml0aWFsJyAmJiAhaXNGZWF0dXJlQ29uc3RhbnQoZXhwcmVzc2lvbk9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ0ZlYXR1cmUgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGluaXRpYWwgZXhwcmVzc2lvbiBwYXJ0IG9mIGNsdXN0ZXIgcHJvcGVydGllcy4nKV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW107XG59XG4iLCJcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVCb29sZWFuKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUodmFsdWUpO1xuXG4gICAgaWYgKHR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGJvb2xlYW4gZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQge3BhcnNlQ1NTQ29sb3J9IGZyb20gJ2Nzc2NvbG9ycGFyc2VyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVDb2xvcihvcHRpb25zKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKHZhbHVlKTtcblxuICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGNvbG9yIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGlmIChwYXJzZUNTU0NvbG9yKHZhbHVlKSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGNvbG9yIGV4cGVjdGVkLCBcIiR7dmFsdWV9XCIgZm91bmRgKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHt1bmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlRW51bShvcHRpb25zKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHZhbHVlU3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjO1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVTcGVjLnZhbHVlcykpIHsgLy8gPD12N1xuICAgICAgICBpZiAodmFsdWVTcGVjLnZhbHVlcy5pbmRleE9mKHVuYnVuZGxlKHZhbHVlKSkgPT09IC0xKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBleHBlY3RlZCBvbmUgb2YgWyR7dmFsdWVTcGVjLnZhbHVlcy5qb2luKCcsICcpfV0sICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSBmb3VuZGApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7IC8vID49djhcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlU3BlYy52YWx1ZXMpLmluZGV4T2YodW5idW5kbGUodmFsdWUpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGV4cGVjdGVkIG9uZSBvZiBbJHtPYmplY3Qua2V5cyh2YWx1ZVNwZWMudmFsdWVzKS5qb2luKCcsICcpfV0sICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSBmb3VuZGApKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtjcmVhdGVFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcblxuaW1wb3J0IHR5cGUge0dsb2JhbFByb3BlcnRpZXN9IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuZXhwb3J0IHR5cGUgRmVhdHVyZUZpbHRlciA9IChnbG9iYWxQcm9wZXJ0aWVzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRmlsdGVyO1xuZXhwb3J0IHtpc0V4cHJlc3Npb25GaWx0ZXJ9O1xuXG5mdW5jdGlvbiBpc0V4cHJlc3Npb25GaWx0ZXIoZmlsdGVyOiBhbnkpIHtcbiAgICBpZiAoZmlsdGVyID09PSB0cnVlIHx8IGZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcikgfHwgZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHN3aXRjaCAoZmlsdGVyWzBdKSB7XG4gICAgY2FzZSAnaGFzJzpcbiAgICAgICAgcmV0dXJuIGZpbHRlci5sZW5ndGggPj0gMiAmJiBmaWx0ZXJbMV0gIT09ICckaWQnICYmIGZpbHRlclsxXSAhPT0gJyR0eXBlJztcblxuICAgIGNhc2UgJ2luJzpcbiAgICBjYXNlICchaW4nOlxuICAgIGNhc2UgJyFoYXMnOlxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlICc9PSc6XG4gICAgY2FzZSAnIT0nOlxuICAgIGNhc2UgJz4nOlxuICAgIGNhc2UgJz49JzpcbiAgICBjYXNlICc8JzpcbiAgICBjYXNlICc8PSc6XG4gICAgICAgIHJldHVybiBmaWx0ZXIubGVuZ3RoICE9PSAzIHx8IChBcnJheS5pc0FycmF5KGZpbHRlclsxXSkgfHwgQXJyYXkuaXNBcnJheShmaWx0ZXJbMl0pKTtcblxuICAgIGNhc2UgJ2FueSc6XG4gICAgY2FzZSAnYWxsJzpcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpbHRlci5zbGljZSgxKSkge1xuICAgICAgICAgICAgaWYgKCFpc0V4cHJlc3Npb25GaWx0ZXIoZikgJiYgdHlwZW9mIGYgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuY29uc3QgZmlsdGVyU3BlYyA9IHtcbiAgICAndHlwZSc6ICdib29sZWFuJyxcbiAgICAnZGVmYXVsdCc6IGZhbHNlLFxuICAgICd0cmFuc2l0aW9uJzogZmFsc2UsXG4gICAgJ3Byb3BlcnR5LXR5cGUnOiAnZGF0YS1kcml2ZW4nLFxuICAgICdleHByZXNzaW9uJzoge1xuICAgICAgICAnaW50ZXJwb2xhdGVkJzogZmFsc2UsXG4gICAgICAgICdwYXJhbWV0ZXJzJzogWyd6b29tJywgJ2ZlYXR1cmUnXVxuICAgIH1cbn07XG5cbi8qKlxuICogR2l2ZW4gYSBmaWx0ZXIgZXhwcmVzc2VkIGFzIG5lc3RlZCBhcnJheXMsIHJldHVybiBhIG5ldyBmdW5jdGlvblxuICogdGhhdCBldmFsdWF0ZXMgd2hldGhlciBhIGdpdmVuIGZlYXR1cmUgKHdpdGggYSAucHJvcGVydGllcyBvciAudGFncyBwcm9wZXJ0eSlcbiAqIHBhc3NlcyBpdHMgdGVzdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gZmlsdGVyIG1hcGJveCBnbCBmaWx0ZXJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gZmlsdGVyLWV2YWx1YXRpbmcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsdGVyKGZpbHRlcjogYW55KTogRmVhdHVyZUZpbHRlciB7XG4gICAgaWYgKGZpbHRlciA9PT0gbnVsbCB8fCBmaWx0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gKCkgPT4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRXhwcmVzc2lvbkZpbHRlcihmaWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IGNvbnZlcnRGaWx0ZXIoZmlsdGVyKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21waWxlZCA9IGNyZWF0ZUV4cHJlc3Npb24oZmlsdGVyLCBmaWx0ZXJTcGVjKTtcbiAgICBpZiAoY29tcGlsZWQucmVzdWx0ID09PSAnZXJyb3InKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjb21waWxlZC52YWx1ZS5tYXAoZXJyID0+IGAke2Vyci5rZXl9OiAke2Vyci5tZXNzYWdlfWApLmpvaW4oJywgJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoZ2xvYmFsUHJvcGVydGllczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUpID0+IGNvbXBpbGVkLnZhbHVlLmV2YWx1YXRlKGdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmUpO1xuICAgIH1cbn1cblxuLy8gQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBzb3J0IG51bWJlcnMgYW5kIHN0cmluZ3NcbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cblxuZnVuY3Rpb24gY29udmVydEZpbHRlcihmaWx0ZXI6ID9BcnJheTxhbnk+KTogbWl4ZWQge1xuICAgIGlmICghZmlsdGVyKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBvcCA9IGZpbHRlclswXTtcbiAgICBpZiAoZmlsdGVyLmxlbmd0aCA8PSAxKSByZXR1cm4gKG9wICE9PSAnYW55Jyk7XG4gICAgY29uc3QgY29udmVydGVkID1cbiAgICAgICAgb3AgPT09ICc9PScgPyBjb252ZXJ0Q29tcGFyaXNvbk9wKGZpbHRlclsxXSwgZmlsdGVyWzJdLCAnPT0nKSA6XG4gICAgICAgIG9wID09PSAnIT0nID8gY29udmVydE5lZ2F0aW9uKGNvbnZlcnRDb21wYXJpc29uT3AoZmlsdGVyWzFdLCBmaWx0ZXJbMl0sICc9PScpKSA6XG4gICAgICAgIG9wID09PSAnPCcgfHxcbiAgICAgICAgb3AgPT09ICc+JyB8fFxuICAgICAgICBvcCA9PT0gJzw9JyB8fFxuICAgICAgICBvcCA9PT0gJz49JyA/IGNvbnZlcnRDb21wYXJpc29uT3AoZmlsdGVyWzFdLCBmaWx0ZXJbMl0sIG9wKSA6XG4gICAgICAgIG9wID09PSAnYW55JyA/IGNvbnZlcnREaXNqdW5jdGlvbk9wKGZpbHRlci5zbGljZSgxKSkgOlxuICAgICAgICBvcCA9PT0gJ2FsbCcgPyBbJ2FsbCddLmNvbmNhdChmaWx0ZXIuc2xpY2UoMSkubWFwKGNvbnZlcnRGaWx0ZXIpKSA6XG4gICAgICAgIG9wID09PSAnbm9uZScgPyBbJ2FsbCddLmNvbmNhdChmaWx0ZXIuc2xpY2UoMSkubWFwKGNvbnZlcnRGaWx0ZXIpLm1hcChjb252ZXJ0TmVnYXRpb24pKSA6XG4gICAgICAgIG9wID09PSAnaW4nID8gY29udmVydEluT3AoZmlsdGVyWzFdLCBmaWx0ZXIuc2xpY2UoMikpIDpcbiAgICAgICAgb3AgPT09ICchaW4nID8gY29udmVydE5lZ2F0aW9uKGNvbnZlcnRJbk9wKGZpbHRlclsxXSwgZmlsdGVyLnNsaWNlKDIpKSkgOlxuICAgICAgICBvcCA9PT0gJ2hhcycgPyBjb252ZXJ0SGFzT3AoZmlsdGVyWzFdKSA6XG4gICAgICAgIG9wID09PSAnIWhhcycgPyBjb252ZXJ0TmVnYXRpb24oY29udmVydEhhc09wKGZpbHRlclsxXSkpIDpcbiAgICAgICAgdHJ1ZTtcbiAgICByZXR1cm4gY29udmVydGVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Q29tcGFyaXNvbk9wKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgY2FzZSAnJHR5cGUnOlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItdHlwZS0ke29wfWAsIHZhbHVlXTtcbiAgICBjYXNlICckaWQnOlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItaWQtJHtvcH1gLCB2YWx1ZV07XG4gICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLSR7b3B9YCwgcHJvcGVydHksIHZhbHVlXTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREaXNqdW5jdGlvbk9wKGZpbHRlcnM6IEFycmF5PEFycmF5PGFueT4+KSB7XG4gICAgcmV0dXJuIFsnYW55J10uY29uY2F0KGZpbHRlcnMubWFwKGNvbnZlcnRGaWx0ZXIpKTtcbn1cblxuZnVuY3Rpb24gY29udmVydEluT3AocHJvcGVydHk6IHN0cmluZywgdmFsdWVzOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgIGNhc2UgJyR0eXBlJzpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLXR5cGUtaW5gLCBbJ2xpdGVyYWwnLCB2YWx1ZXNdXTtcbiAgICBjYXNlICckaWQnOlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItaWQtaW5gLCBbJ2xpdGVyYWwnLCB2YWx1ZXNdXTtcbiAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDIwMCAmJiAhdmFsdWVzLnNvbWUodiA9PiB0eXBlb2YgdiAhPT0gdHlwZW9mIHZhbHVlc1swXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2ZpbHRlci1pbi1sYXJnZScsIHByb3BlcnR5LCBbJ2xpdGVyYWwnLCB2YWx1ZXMuc29ydChjb21wYXJlKV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsnZmlsdGVyLWluLXNtYWxsJywgcHJvcGVydHksIFsnbGl0ZXJhbCcsIHZhbHVlc11dO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0SGFzT3AocHJvcGVydHk6IHN0cmluZykge1xuICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICBjYXNlICckdHlwZSc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJyRpZCc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1oYXMtaWRgXTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItaGFzYCwgcHJvcGVydHldO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29udmVydE5lZ2F0aW9uKGZpbHRlcjogbWl4ZWQpIHtcbiAgICByZXR1cm4gWychJywgZmlsdGVyXTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCB2YWxpZGF0ZUV4cHJlc3Npb24gZnJvbSAnLi92YWxpZGF0ZV9leHByZXNzaW9uJztcbmltcG9ydCB2YWxpZGF0ZUVudW0gZnJvbSAnLi92YWxpZGF0ZV9lbnVtJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHt1bmJ1bmRsZSwgZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IHtpc0V4cHJlc3Npb25GaWx0ZXJ9IGZyb20gJy4uL2ZlYXR1cmVfZmlsdGVyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXIob3B0aW9ucykge1xuICAgIGlmIChpc0V4cHJlc3Npb25GaWx0ZXIoZGVlcFVuYnVuZGxlKG9wdGlvbnMudmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVFeHByZXNzaW9uKGV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgZXhwcmVzc2lvbkNvbnRleHQ6ICdmaWx0ZXInLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiB7dmFsdWU6ICdib29sZWFuJ31cbiAgICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZU5vbkV4cHJlc3Npb25GaWx0ZXIob3B0aW9ucyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU5vbkV4cHJlc3Npb25GaWx0ZXIob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcblxuICAgIGlmIChnZXRUeXBlKHZhbHVlKSAhPT0gJ2FycmF5Jykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGFycmF5IGV4cGVjdGVkLCAke2dldFR5cGUodmFsdWUpfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBsZXQgdHlwZTtcblxuICAgIGxldCBlcnJvcnMgPSBbXTtcblxuICAgIGlmICh2YWx1ZS5sZW5ndGggPCAxKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnZmlsdGVyIGFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCAxIGVsZW1lbnQnKV07XG4gICAgfVxuXG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUVudW0oe1xuICAgICAgICBrZXk6IGAke2tleX1bMF1gLFxuICAgICAgICB2YWx1ZTogdmFsdWVbMF0sXG4gICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLmZpbHRlcl9vcGVyYXRvcixcbiAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICB9KSk7XG5cbiAgICBzd2l0Y2ggKHVuYnVuZGxlKHZhbHVlWzBdKSkge1xuICAgIGNhc2UgJzwnOlxuICAgIGNhc2UgJzw9JzpcbiAgICBjYXNlICc+JzpcbiAgICBjYXNlICc+PSc6XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gMiAmJiB1bmJ1bmRsZSh2YWx1ZVsxXSkgPT09ICckdHlwZScpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYFwiJHR5cGVcIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgXCIke3ZhbHVlWzBdfVwiYCkpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlICc9PSc6XG4gICAgY2FzZSAnIT0nOlxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBmaWx0ZXIgYXJyYXkgZm9yIG9wZXJhdG9yIFwiJHt2YWx1ZVswXX1cIiBtdXN0IGhhdmUgMyBlbGVtZW50c2ApKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSAnaW4nOlxuICAgIGNhc2UgJyFpbic6XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgdHlwZSA9IGdldFR5cGUodmFsdWVbMV0pO1xuICAgICAgICAgICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihgJHtrZXl9WzFdYCwgdmFsdWVbMV0sIGBzdHJpbmcgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdHlwZSA9IGdldFR5cGUodmFsdWVbaV0pO1xuICAgICAgICAgICAgaWYgKHVuYnVuZGxlKHZhbHVlWzFdKSA9PT0gJyR0eXBlJykge1xuICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVFbnVtKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WyR7aX1dYCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlW2ldLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5nZW9tZXRyeV90eXBlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ3N0cmluZycgJiYgdHlwZSAhPT0gJ251bWJlcicgJiYgdHlwZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihgJHtrZXl9WyR7aX1dYCwgdmFsdWVbaV0sIGBzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgJ2FueSc6XG4gICAgY2FzZSAnYWxsJzpcbiAgICBjYXNlICdub25lJzpcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZU5vbkV4cHJlc3Npb25GaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fVske2l9XWAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlW2ldLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hhcyc6XG4gICAgY2FzZSAnIWhhcyc6XG4gICAgICAgIHR5cGUgPSBnZXRUeXBlKHZhbHVlWzFdKTtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgZmlsdGVyIGFycmF5IGZvciBcIiR7dmFsdWVbMF19XCIgb3BlcmF0b3IgbXVzdCBoYXZlIDIgZWxlbWVudHNgKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3IoYCR7a2V5fVsxXWAsIHZhbHVlWzFdLCBgc3RyaW5nIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHtpc0Z1bmN0aW9ufSBmcm9tICcuLi9mdW5jdGlvbic7XG5pbXBvcnQge3VuYnVuZGxlLCBkZWVwVW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vdXRpbC9wcm9wZXJ0aWVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eShvcHRpb25zLCBwcm9wZXJ0eVR5cGUpIHtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHByb3BlcnR5S2V5ID0gb3B0aW9ucy5vYmplY3RLZXk7XG4gICAgY29uc3QgbGF5ZXJTcGVjID0gc3R5bGVTcGVjW2Ake3Byb3BlcnR5VHlwZX1fJHtvcHRpb25zLmxheWVyVHlwZX1gXTtcblxuICAgIGlmICghbGF5ZXJTcGVjKSByZXR1cm4gW107XG5cbiAgICBjb25zdCB0cmFuc2l0aW9uTWF0Y2ggPSBwcm9wZXJ0eUtleS5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTtcbiAgICBpZiAocHJvcGVydHlUeXBlID09PSAncGFpbnQnICYmIHRyYW5zaXRpb25NYXRjaCAmJiBsYXllclNwZWNbdHJhbnNpdGlvbk1hdGNoWzFdXSAmJiBsYXllclNwZWNbdHJhbnNpdGlvbk1hdGNoWzFdXS50cmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLnRyYW5zaXRpb24sXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYyB8fCBsYXllclNwZWNbcHJvcGVydHlLZXldO1xuICAgIGlmICghdmFsdWVTcGVjKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgdW5rbm93biBwcm9wZXJ0eSBcIiR7cHJvcGVydHlLZXl9XCJgKV07XG4gICAgfVxuXG4gICAgbGV0IHRva2VuTWF0Y2g7XG4gICAgaWYgKGdldFR5cGUodmFsdWUpID09PSAnc3RyaW5nJyAmJiBzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbih2YWx1ZVNwZWMpICYmICF2YWx1ZVNwZWMudG9rZW5zICYmICh0b2tlbk1hdGNoID0gL157KFtefV0rKX0kLy5leGVjKHZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAga2V5LCB2YWx1ZSxcbiAgICAgICAgICAgIGBcIiR7cHJvcGVydHlLZXl9XCIgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnBvbGF0aW9uIHN5bnRheFxcbmAgK1xuICAgICAgICAgICAgICAgIGBVc2UgYW4gaWRlbnRpdHkgcHJvcGVydHkgZnVuY3Rpb24gaW5zdGVhZDogXFxgeyBcInR5cGVcIjogXCJpZGVudGl0eVwiLCBcInByb3BlcnR5XCI6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5NYXRjaFsxXSl9IH1cXGAuYCldO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuXG4gICAgaWYgKG9wdGlvbnMubGF5ZXJUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICBpZiAocHJvcGVydHlLZXkgPT09ICd0ZXh0LWZpZWxkJyAmJiBzdHlsZSAmJiAhc3R5bGUuZ2x5cGhzKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICd1c2Ugb2YgXCJ0ZXh0LWZpZWxkXCIgcmVxdWlyZXMgYSBzdHlsZSBcImdseXBoc1wiIHByb3BlcnR5JykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wZXJ0eUtleSA9PT0gJ3RleHQtZm9udCcgJiYgaXNGdW5jdGlvbihkZWVwVW5idW5kbGUodmFsdWUpKSAmJiB1bmJ1bmRsZSh2YWx1ZS50eXBlKSA9PT0gJ2lkZW50aXR5Jykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnXCJ0ZXh0LWZvbnRcIiBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aXR5IGZ1bmN0aW9ucycpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnMuY29uY2F0KHZhbGlkYXRlKHtcbiAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlU3BlYyxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHN0eWxlU3BlYyxcbiAgICAgICAgZXhwcmVzc2lvbkNvbnRleHQ6ICdwcm9wZXJ0eScsXG4gICAgICAgIHByb3BlcnR5VHlwZSxcbiAgICAgICAgcHJvcGVydHlLZXlcbiAgICB9KSk7XG59XG4iLCJcbmltcG9ydCB2YWxpZGF0ZVByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGVfcHJvcGVydHknO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZVBhaW50UHJvcGVydHkob3B0aW9ucykge1xuICAgIHJldHVybiB2YWxpZGF0ZVByb3BlcnR5KG9wdGlvbnMsICdwYWludCcpO1xufVxuIiwiXG5pbXBvcnQgdmFsaWRhdGVQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlX3Byb3BlcnR5JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eShvcHRpb25zKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlUHJvcGVydHkob3B0aW9ucywgJ2xheW91dCcpO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHt1bmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlRmlsdGVyIGZyb20gJy4vdmFsaWRhdGVfZmlsdGVyJztcbmltcG9ydCB2YWxpZGF0ZVBhaW50UHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eSc7XG5pbXBvcnQgdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eSc7XG5pbXBvcnQgdmFsaWRhdGVTcGVjIGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuLi91dGlsL2V4dGVuZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXIob3B0aW9ucykge1xuICAgIGxldCBlcnJvcnMgPSBbXTtcblxuICAgIGNvbnN0IGxheWVyID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgJiYgIWxheWVyLnJlZikge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIsICdlaXRoZXIgXCJ0eXBlXCIgb3IgXCJyZWZcIiBpcyByZXF1aXJlZCcpKTtcbiAgICB9XG4gICAgbGV0IHR5cGUgPSB1bmJ1bmRsZShsYXllci50eXBlKTtcbiAgICBjb25zdCByZWYgPSB1bmJ1bmRsZShsYXllci5yZWYpO1xuXG4gICAgaWYgKGxheWVyLmlkKSB7XG4gICAgICAgIGNvbnN0IGxheWVySWQgPSB1bmJ1bmRsZShsYXllci5pZCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5hcnJheUluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG90aGVyTGF5ZXIgPSBzdHlsZS5sYXllcnNbaV07XG4gICAgICAgICAgICBpZiAodW5idW5kbGUob3RoZXJMYXllci5pZCkgPT09IGxheWVySWQpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIuaWQsIGBkdXBsaWNhdGUgbGF5ZXIgaWQgXCIke2xheWVyLmlkfVwiLCBwcmV2aW91c2x5IHVzZWQgYXQgbGluZSAke290aGVyTGF5ZXIuaWQuX19saW5lX199YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCdyZWYnIGluIGxheWVyKSB7XG4gICAgICAgIFsndHlwZScsICdzb3VyY2UnLCAnc291cmNlLWxheWVyJywgJ2ZpbHRlcicsICdsYXlvdXQnXS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICBpZiAocCBpbiBsYXllcikge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllcltwXSwgYFwiJHtwfVwiIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnNgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBwYXJlbnQ7XG5cbiAgICAgICAgc3R5bGUubGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICBpZiAodW5idW5kbGUobGF5ZXIuaWQpID09PSByZWYpIHBhcmVudCA9IGxheWVyO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnJlZiwgYHJlZiBsYXllciBcIiR7cmVmfVwiIG5vdCBmb3VuZGApKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQucmVmKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIucmVmLCAncmVmIGNhbm5vdCByZWZlcmVuY2UgYW5vdGhlciByZWYgbGF5ZXInKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0eXBlID0gdW5idW5kbGUocGFyZW50LnR5cGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSAnYmFja2dyb3VuZCcpIHtcbiAgICAgICAgaWYgKCFsYXllci5zb3VyY2UpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllciwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJzb3VyY2VcIicpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHN0eWxlLnNvdXJjZXMgJiYgc3R5bGUuc291cmNlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZSAmJiB1bmJ1bmRsZShzb3VyY2UudHlwZSk7XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5zb3VyY2UsIGBzb3VyY2UgXCIke2xheWVyLnNvdXJjZX1cIiBub3QgZm91bmRgKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmIHR5cGUgPT09ICdyYXN0ZXInKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnNvdXJjZSwgYGxheWVyIFwiJHtsYXllci5pZH1cIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2VgKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09ICdyYXN0ZXInICYmIHR5cGUgIT09ICdyYXN0ZXInKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnNvdXJjZSwgYGxheWVyIFwiJHtsYXllci5pZH1cIiByZXF1aXJlcyBhIHZlY3RvciBzb3VyY2VgKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmICFsYXllclsnc291cmNlLWxheWVyJ10pIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIsIGBsYXllciBcIiR7bGF5ZXIuaWR9XCIgbXVzdCBzcGVjaWZ5IGEgXCJzb3VyY2UtbGF5ZXJcImApKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlVHlwZSA9PT0gJ3Jhc3Rlci1kZW0nICYmIHR5cGUgIT09ICdoaWxsc2hhZGUnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnNvdXJjZSwgJ3Jhc3Rlci1kZW0gc291cmNlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBsYXllciB0eXBlIFxcJ2hpbGxzaGFkZVxcJy4nKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsaW5lJyAmJiBsYXllci5wYWludCAmJiBsYXllci5wYWludFsnbGluZS1ncmFkaWVudCddICYmXG4gICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2VUeXBlICE9PSAnZ2VvanNvbicgfHwgIXNvdXJjZS5saW5lTWV0cmljcykpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIsIGBsYXllciBcIiR7bGF5ZXIuaWR9XCIgc3BlY2lmaWVzIGEgbGluZS1ncmFkaWVudCwgd2hpY2ggcmVxdWlyZXMgYSBHZW9KU09OIHNvdXJjZSB3aXRoIFxcYGxpbmVNZXRyaWNzXFxgIGVuYWJsZWQuYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWU6IGxheWVyLFxuICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5sYXllcixcbiAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7XG4gICAgICAgICAgICAnKicoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZW5mb3JjZSB0aGUgc3BlYydzIGBcInJlcXVpcmVzXCI6IHRydWVgIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggcmVmcztcbiAgICAgICAgICAgIC8vIHRoZSBhY3R1YWwgcmVxdWlyZW1lbnQgaXMgdmFsaWRhdGVkIGFib3ZlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzU3NzIuXG4gICAgICAgICAgICB0eXBlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZVNwZWMoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGAke2tleX0udHlwZWAsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBsYXllci50eXBlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5sYXllci50eXBlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBsYXllcixcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0S2V5OiAndHlwZSdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXI6IHZhbGlkYXRlRmlsdGVyLFxuICAgICAgICAgICAgbGF5b3V0KG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgICAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJyonKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eShleHRlbmQoe2xheWVyVHlwZTogdHlwZX0sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhaW50KG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgICAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJyonKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVQYWludFByb3BlcnR5KGV4dGVuZCh7bGF5ZXJUeXBlOiB0eXBlfSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHt1bmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlRW51bSBmcm9tICcuL3ZhbGlkYXRlX2VudW0nO1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZVNvdXJjZShvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcblxuICAgIGlmICghdmFsdWUudHlwZSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ1widHlwZVwiIGlzIHJlcXVpcmVkJyldO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSB1bmJ1bmRsZSh2YWx1ZS50eXBlKTtcbiAgICBsZXQgZXJyb3JzO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAndmVjdG9yJzpcbiAgICBjYXNlICdyYXN0ZXInOlxuICAgIGNhc2UgJ3Jhc3Rlci1kZW0nOlxuICAgICAgICBlcnJvcnMgPSB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjW2Bzb3VyY2VfJHt0eXBlLnJlcGxhY2UoJy0nLCAnXycpfWBdLFxuICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG5cbiAgICBjYXNlICdnZW9qc29uJzpcbiAgICAgICAgZXJyb3JzID0gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5zb3VyY2VfZ2VvanNvbixcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodmFsdWUuY2x1c3Rlcikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHZhbHVlLmNsdXN0ZXJQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW29wZXJhdG9yLCBtYXBFeHByXSA9IHZhbHVlLmNsdXN0ZXJQcm9wZXJ0aWVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZHVjZUV4cHIgPSB0eXBlb2Ygb3BlcmF0b3IgPT09ICdzdHJpbmcnID8gW29wZXJhdG9yLCBbJ2FjY3VtdWxhdGVkJ10sIFsnZ2V0JywgcHJvcF1dIDogb3BlcmF0b3I7XG5cbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGAke2tleX0uJHtwcm9wfS5tYXBgLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWFwRXhwcixcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkNvbnRleHQ6ICdjbHVzdGVyLW1hcCdcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9LiR7cHJvcH0ucmVkdWNlYCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlZHVjZUV4cHIsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Db250ZXh0OiAnY2x1c3Rlci1yZWR1Y2UnXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLnNvdXJjZV92aWRlbyxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuXG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICByZXR1cm4gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5zb3VyY2VfaW1hZ2UsXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcblxuICAgIGNhc2UgJ2NhbnZhcyc6XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIG51bGwsIGBQbGVhc2UgdXNlIHJ1bnRpbWUgQVBJcyB0byBhZGQgY2FudmFzIHNvdXJjZXMsIHJhdGhlciB0aGFuIGluY2x1ZGluZyB0aGVtIGluIHN0eWxlc2hlZXRzLmAsICdzb3VyY2UuY2FudmFzJyldO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRW51bSh7XG4gICAgICAgICAgICBrZXk6IGAke2tleX0udHlwZWAsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUudHlwZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzoge3ZhbHVlczogWyd2ZWN0b3InLCAncmFzdGVyJywgJ3Jhc3Rlci1kZW0nLCAnZ2VvanNvbicsICd2aWRlbycsICdpbWFnZSddfSxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUxpZ2h0KG9wdGlvbnMpIHtcbiAgICBjb25zdCBsaWdodCA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgY29uc3QgbGlnaHRTcGVjID0gc3R5bGVTcGVjLmxpZ2h0O1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcblxuICAgIGxldCBlcnJvcnMgPSBbXTtcblxuICAgIGNvbnN0IHJvb3RUeXBlID0gZ2V0VHlwZShsaWdodCk7XG4gICAgaWYgKGxpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9IGVsc2UgaWYgKHJvb3RUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KFtuZXcgVmFsaWRhdGlvbkVycm9yKCdsaWdodCcsIGxpZ2h0LCBgb2JqZWN0IGV4cGVjdGVkLCAke3Jvb3RUeXBlfSBmb3VuZGApXSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gbGlnaHQpIHtcbiAgICAgICAgY29uc3QgdHJhbnNpdGlvbk1hdGNoID0ga2V5Lm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO1xuXG4gICAgICAgIGlmICh0cmFuc2l0aW9uTWF0Y2ggJiYgbGlnaHRTcGVjW3RyYW5zaXRpb25NYXRjaFsxXV0gJiYgbGlnaHRTcGVjW3RyYW5zaXRpb25NYXRjaFsxXV0udHJhbnNpdGlvbikge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBsaWdodFtrZXldLFxuICAgICAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLnRyYW5zaXRpb24sXG4gICAgICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAobGlnaHRTcGVjW2tleV0pIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGUoe1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbGlnaHRba2V5XSxcbiAgICAgICAgICAgICAgICB2YWx1ZVNwZWM6IGxpZ2h0U3BlY1trZXldLFxuICAgICAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxpZ2h0W2tleV0sIGB1bmtub3duIHByb3BlcnR5IFwiJHtrZXl9XCJgKV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyhvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKHZhbHVlKTtcblxuICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYHN0cmluZyBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXR0ZWQob3B0aW9uczogYW55KSB7XG4gICAgaWYgKHZhbGlkYXRlU3RyaW5nKG9wdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlRXhwcmVzc2lvbihvcHRpb25zKTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdmFsaWRhdGVFeHByZXNzaW9uIGZyb20gJy4vdmFsaWRhdGVfZXhwcmVzc2lvbic7XG5pbXBvcnQgdmFsaWRhdGVTdHJpbmcgZnJvbSAnLi92YWxpZGF0ZV9zdHJpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUltYWdlKG9wdGlvbnM6IGFueSkge1xuICAgIGlmICh2YWxpZGF0ZVN0cmluZyhvcHRpb25zKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUV4cHJlc3Npb24ob3B0aW9ucyk7XG59XG4iLCJcbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IHt1bmJ1bmRsZSwgZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB7aXNFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB7aXNGdW5jdGlvbn0gZnJvbSAnLi4vZnVuY3Rpb24nO1xuXG5pbXBvcnQgdmFsaWRhdGVGdW5jdGlvbiBmcm9tICcuL3ZhbGlkYXRlX2Z1bmN0aW9uJztcbmltcG9ydCB2YWxpZGF0ZUV4cHJlc3Npb24gZnJvbSAnLi92YWxpZGF0ZV9leHByZXNzaW9uJztcbmltcG9ydCB2YWxpZGF0ZU9iamVjdCBmcm9tICcuL3ZhbGlkYXRlX29iamVjdCc7XG5pbXBvcnQgdmFsaWRhdGVBcnJheSBmcm9tICcuL3ZhbGlkYXRlX2FycmF5JztcbmltcG9ydCB2YWxpZGF0ZUJvb2xlYW4gZnJvbSAnLi92YWxpZGF0ZV9ib29sZWFuJztcbmltcG9ydCB2YWxpZGF0ZU51bWJlciBmcm9tICcuL3ZhbGlkYXRlX251bWJlcic7XG5pbXBvcnQgdmFsaWRhdGVDb2xvciBmcm9tICcuL3ZhbGlkYXRlX2NvbG9yJztcbmltcG9ydCB2YWxpZGF0ZUNvbnN0YW50cyBmcm9tICcuL3ZhbGlkYXRlX2NvbnN0YW50cyc7XG5pbXBvcnQgdmFsaWRhdGVFbnVtIGZyb20gJy4vdmFsaWRhdGVfZW51bSc7XG5pbXBvcnQgdmFsaWRhdGVGaWx0ZXIgZnJvbSAnLi92YWxpZGF0ZV9maWx0ZXInO1xuaW1wb3J0IHZhbGlkYXRlTGF5ZXIgZnJvbSAnLi92YWxpZGF0ZV9sYXllcic7XG5pbXBvcnQgdmFsaWRhdGVTb3VyY2UgZnJvbSAnLi92YWxpZGF0ZV9zb3VyY2UnO1xuaW1wb3J0IHZhbGlkYXRlTGlnaHQgZnJvbSAnLi92YWxpZGF0ZV9saWdodCc7XG5pbXBvcnQgdmFsaWRhdGVTdHJpbmcgZnJvbSAnLi92YWxpZGF0ZV9zdHJpbmcnO1xuaW1wb3J0IHZhbGlkYXRlRm9ybWF0dGVkIGZyb20gJy4vdmFsaWRhdGVfZm9ybWF0dGVkJztcbmltcG9ydCB2YWxpZGF0ZUltYWdlIGZyb20gJy4vdmFsaWRhdGVfaW1hZ2UnO1xuXG5jb25zdCBWQUxJREFUT1JTID0ge1xuICAgICcqJygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG4gICAgJ2FycmF5JzogdmFsaWRhdGVBcnJheSxcbiAgICAnYm9vbGVhbic6IHZhbGlkYXRlQm9vbGVhbixcbiAgICAnbnVtYmVyJzogdmFsaWRhdGVOdW1iZXIsXG4gICAgJ2NvbG9yJzogdmFsaWRhdGVDb2xvcixcbiAgICAnY29uc3RhbnRzJzogdmFsaWRhdGVDb25zdGFudHMsXG4gICAgJ2VudW0nOiB2YWxpZGF0ZUVudW0sXG4gICAgJ2ZpbHRlcic6IHZhbGlkYXRlRmlsdGVyLFxuICAgICdmdW5jdGlvbic6IHZhbGlkYXRlRnVuY3Rpb24sXG4gICAgJ2xheWVyJzogdmFsaWRhdGVMYXllcixcbiAgICAnb2JqZWN0JzogdmFsaWRhdGVPYmplY3QsXG4gICAgJ3NvdXJjZSc6IHZhbGlkYXRlU291cmNlLFxuICAgICdsaWdodCc6IHZhbGlkYXRlTGlnaHQsXG4gICAgJ3N0cmluZyc6IHZhbGlkYXRlU3RyaW5nLFxuICAgICdmb3JtYXR0ZWQnOiB2YWxpZGF0ZUZvcm1hdHRlZCxcbiAgICAncmVzb2x2ZWRJbWFnZSc6IHZhbGlkYXRlSW1hZ2Vcbn07XG5cbi8vIE1haW4gcmVjdXJzaXZlIHZhbGlkYXRpb24gZnVuY3Rpb24uIFRyYWNrczpcbi8vXG4vLyAtIGtleTogc3RyaW5nIHJlcHJlc2VudGluZyBsb2NhdGlvbiBvZiB2YWxpZGF0aW9uIGluIHN0eWxlIHRyZWUuIFVzZWQgb25seVxuLy8gICBmb3IgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvciByZXBvcnRpbmcuXG4vLyAtIHZhbHVlOiBjdXJyZW50IHZhbHVlIGZyb20gc3R5bGUgYmVpbmcgZXZhbHVhdGVkLiBNYXkgYmUgYW55dGhpbmcgZnJvbSBhXG4vLyAgIGhpZ2ggbGV2ZWwgb2JqZWN0IHRoYXQgbmVlZHMgdG8gYmUgZGVzY2VuZGVkIGludG8gZGVlcGVyIG9yIGEgc2ltcGxlXG4vLyAgIHNjYWxhciB2YWx1ZS5cbi8vIC0gdmFsdWVTcGVjOiBjdXJyZW50IHNwZWMgYmVpbmcgZXZhbHVhdGVkLiBUcmFja3MgdmFsdWUuXG4vLyAtIHN0eWxlU3BlYzogY3VycmVudCBmdWxsIHNwZWMgYmVpbmcgZXZhbHVhdGVkLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZShvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHZhbHVlU3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuXG4gICAgaWYgKHZhbHVlU3BlYy5leHByZXNzaW9uICYmIGlzRnVuY3Rpb24odW5idW5kbGUodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVGdW5jdGlvbihvcHRpb25zKTtcblxuICAgIH0gZWxzZSBpZiAodmFsdWVTcGVjLmV4cHJlc3Npb24gJiYgaXNFeHByZXNzaW9uKGRlZXBVbmJ1bmRsZSh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUV4cHJlc3Npb24ob3B0aW9ucyk7XG5cbiAgICB9IGVsc2UgaWYgKHZhbHVlU3BlYy50eXBlICYmIFZBTElEQVRPUlNbdmFsdWVTcGVjLnR5cGVdKSB7XG4gICAgICAgIHJldHVybiBWQUxJREFUT1JTW3ZhbHVlU3BlYy50eXBlXShvcHRpb25zKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QoZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHZhbHVlU3BlYy50eXBlID8gc3R5bGVTcGVjW3ZhbHVlU3BlYy50eXBlXSA6IHZhbHVlU3BlY1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgdmFsaWRhdGVTdHJpbmcgZnJvbSAnLi92YWxpZGF0ZV9zdHJpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuXG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTdHJpbmcob3B0aW9ucyk7XG4gICAgaWYgKGVycm9ycy5sZW5ndGgpIHJldHVybiBlcnJvcnM7XG5cbiAgICBpZiAodmFsdWUuaW5kZXhPZigne2ZvbnRzdGFja30nKSA9PT0gLTEpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnXCJnbHlwaHNcIiB1cmwgbXVzdCBpbmNsdWRlIGEgXCJ7Zm9udHN0YWNrfVwiIHRva2VuJykpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5pbmRleE9mKCd7cmFuZ2V9JykgPT09IC0xKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ1wiZ2x5cGhzXCIgdXJsIG11c3QgaW5jbHVkZSBhIFwie3JhbmdlfVwiIHRva2VuJykpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCB2YWxpZGF0ZUNvbnN0YW50cyBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbnN0YW50cyc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZSc7XG5pbXBvcnQgbGF0ZXN0U3R5bGVTcGVjIGZyb20gJy4vcmVmZXJlbmNlL2xhdGVzdCc7XG5pbXBvcnQgdmFsaWRhdGVHbHlwaHNVUkwgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9nbHlwaHNfdXJsJztcblxuaW1wb3J0IHZhbGlkYXRlU291cmNlIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfc291cmNlJztcbmltcG9ydCB2YWxpZGF0ZUxpZ2h0IGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfbGlnaHQnO1xuaW1wb3J0IHZhbGlkYXRlTGF5ZXIgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9sYXllcic7XG5pbXBvcnQgdmFsaWRhdGVGaWx0ZXIgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9maWx0ZXInO1xuaW1wb3J0IHZhbGlkYXRlUGFpbnRQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX3BhaW50X3Byb3BlcnR5JztcbmltcG9ydCB2YWxpZGF0ZUxheW91dFByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfbGF5b3V0X3Byb3BlcnR5JztcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIE1hcGJveCBHTCBzdHlsZSBhZ2FpbnN0IHRoZSBzdHlsZSBzcGVjaWZpY2F0aW9uLiBUaGlzIGVudHJ5cG9pbnQsXG4gKiBgbWFwYm94LWdsLXN0eWxlLXNwZWMvbGliL3ZhbGlkYXRlX3N0eWxlLm1pbmAsIGlzIGRlc2lnbmVkIHRvIHByb2R1Y2UgYXNcbiAqIHNtYWxsIGEgYnJvd3NlcmlmeSBidW5kbGUgYXMgcG9zc2libGUgYnkgb21pdHRpbmcgdW5uZWNlc3NhcnkgZnVuY3Rpb25hbGl0eVxuICogYW5kIGxlZ2FjeSBzdHlsZSBzcGVjaWZpY2F0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN0eWxlIFRoZSBzdHlsZSB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0eWxlU3BlY10gVGhlIHN0eWxlIHNwZWNpZmljYXRpb24gdG8gdmFsaWRhdGUgYWdhaW5zdC5cbiAqICAgICBJZiBvbWl0dGVkLCB0aGUgbGF0ZXN0IHN0eWxlIHNwZWMgaXMgdXNlZC5cbiAqIEByZXR1cm5zIHtBcnJheTxWYWxpZGF0aW9uRXJyb3I+fVxuICogQGV4YW1wbGVcbiAqICAgdmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnbWFwYm94LWdsLXN0eWxlLXNwZWMvbGliL3ZhbGlkYXRlX3N0eWxlLm1pbicpO1xuICogICB2YXIgZXJyb3JzID0gdmFsaWRhdGUoc3R5bGUpO1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0eWxlTWluKHN0eWxlLCBzdHlsZVNwZWMgPSBsYXRlc3RTdHlsZVNwZWMpIHtcblxuICAgIGxldCBlcnJvcnMgPSBbXTtcblxuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGUoe1xuICAgICAgICBrZXk6ICcnLFxuICAgICAgICB2YWx1ZTogc3R5bGUsXG4gICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLiRyb290LFxuICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgZ2x5cGhzOiB2YWxpZGF0ZUdseXBoc1VSTCxcbiAgICAgICAgICAgICcqJygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KSk7XG5cbiAgICBpZiAoc3R5bGUuY29uc3RhbnRzKSB7XG4gICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVDb25zdGFudHMoe1xuICAgICAgICAgICAga2V5OiAnY29uc3RhbnRzJyxcbiAgICAgICAgICAgIHZhbHVlOiBzdHlsZS5jb25zdGFudHMsXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRFcnJvcnMoZXJyb3JzKTtcbn1cblxudmFsaWRhdGVTdHlsZU1pbi5zb3VyY2UgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVTb3VyY2UpO1xudmFsaWRhdGVTdHlsZU1pbi5saWdodCA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZUxpZ2h0KTtcbnZhbGlkYXRlU3R5bGVNaW4ubGF5ZXIgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVMYXllcik7XG52YWxpZGF0ZVN0eWxlTWluLmZpbHRlciA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZUZpbHRlcik7XG52YWxpZGF0ZVN0eWxlTWluLnBhaW50UHJvcGVydHkgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVQYWludFByb3BlcnR5KTtcbnZhbGlkYXRlU3R5bGVNaW4ubGF5b3V0UHJvcGVydHkgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVMYXlvdXRQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIHNvcnRFcnJvcnMoZXJyb3JzKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdChlcnJvcnMpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIGEubGluZSAtIGIubGluZTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gd3JhcENsZWFuRXJyb3JzKGlubmVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRFcnJvcnMoaW5uZXIuYXBwbHkodGhpcywgYXJncykpO1xuICAgIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbGlkYXRlU3R5bGVNaW47XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHZhbGlkYXRlU3R5bGVNaW4gZnJvbSAnLi4vc3R5bGUtc3BlYy92YWxpZGF0ZV9zdHlsZS5taW4nO1xuaW1wb3J0IHtFcnJvckV2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQgdHlwZSB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxudHlwZSBWYWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGxpbmU6IG51bWJlcixcbiAgICBpZGVudGlmaWVyPzogc3RyaW5nXG59O1xuXG5leHBvcnQgdHlwZSBWYWxpZGF0b3IgPSAoT2JqZWN0KSA9PiAkUmVhZE9ubHlBcnJheTxWYWxpZGF0aW9uRXJyb3I+O1xuXG50eXBlIFZhbGlkYXRlU3R5bGUgPSB7XG4gICAgKE9iamVjdCwgP09iamVjdCk6ICRSZWFkT25seUFycmF5PFZhbGlkYXRpb25FcnJvcj4sXG4gICAgc291cmNlOiBWYWxpZGF0b3IsXG4gICAgbGF5ZXI6IFZhbGlkYXRvcixcbiAgICBsaWdodDogVmFsaWRhdG9yLFxuICAgIGZpbHRlcjogVmFsaWRhdG9yLFxuICAgIHBhaW50UHJvcGVydHk6IFZhbGlkYXRvcixcbiAgICBsYXlvdXRQcm9wZXJ0eTogVmFsaWRhdG9yXG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdHlsZSA9ICh2YWxpZGF0ZVN0eWxlTWluOiBWYWxpZGF0ZVN0eWxlKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU291cmNlID0gdmFsaWRhdGVTdHlsZS5zb3VyY2U7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVMaWdodCA9IHZhbGlkYXRlU3R5bGUubGlnaHQ7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVGaWx0ZXIgPSB2YWxpZGF0ZVN0eWxlLmZpbHRlcjtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVBhaW50UHJvcGVydHkgPSB2YWxpZGF0ZVN0eWxlLnBhaW50UHJvcGVydHk7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eSA9IHZhbGlkYXRlU3R5bGUubGF5b3V0UHJvcGVydHk7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0VmFsaWRhdGlvbkVycm9ycyhlbWl0dGVyOiBFdmVudGVkLCBlcnJvcnM6ID8kUmVhZE9ubHlBcnJheTx7bWVzc2FnZTogc3RyaW5nLCBpZGVudGlmaWVyPzogc3RyaW5nfT4pOiBib29sZWFuIHtcbiAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICBlbWl0dGVyLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGVycm9yLm1lc3NhZ2UpKSk7XG4gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoYXNFcnJvcnM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gR3JpZEluZGV4O1xuXG52YXIgTlVNX1BBUkFNUyA9IDM7XG5cbmZ1bmN0aW9uIEdyaWRJbmRleChleHRlbnQsIG4sIHBhZGRpbmcpIHtcbiAgICB2YXIgY2VsbHMgPSB0aGlzLmNlbGxzID0gW107XG5cbiAgICBpZiAoZXh0ZW50IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGV4dGVudDtcbiAgICAgICAgdmFyIGFycmF5ID0gbmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIGV4dGVudCA9IGFycmF5WzBdO1xuICAgICAgICBuID0gYXJyYXlbMV07XG4gICAgICAgIHBhZGRpbmcgPSBhcnJheVsyXTtcblxuICAgICAgICB0aGlzLmQgPSBuICsgMiAqIHBhZGRpbmc7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5kICogdGhpcy5kOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IGFycmF5W05VTV9QQVJBTVMgKyBrXTtcbiAgICAgICAgICAgIHZhciBlbmQgPSBhcnJheVtOVU1fUEFSQU1TICsgayArIDFdO1xuICAgICAgICAgICAgY2VsbHMucHVzaChzdGFydCA9PT0gZW5kID9cbiAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnN1YmFycmF5KHN0YXJ0LCBlbmQpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIga2V5c09mZnNldCA9IGFycmF5W05VTV9QQVJBTVMgKyBjZWxscy5sZW5ndGhdO1xuICAgICAgICB2YXIgYmJveGVzT2Zmc2V0ID0gYXJyYXlbTlVNX1BBUkFNUyArIGNlbGxzLmxlbmd0aCArIDFdO1xuICAgICAgICB0aGlzLmtleXMgPSBhcnJheS5zdWJhcnJheShrZXlzT2Zmc2V0LCBiYm94ZXNPZmZzZXQpO1xuICAgICAgICB0aGlzLmJib3hlcyA9IGFycmF5LnN1YmFycmF5KGJib3hlc09mZnNldCk7XG5cbiAgICAgICAgdGhpcy5pbnNlcnQgPSB0aGlzLl9pbnNlcnRSZWFkb25seTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZCA9IG4gKyAyICogcGFkZGluZztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmQgKiB0aGlzLmQ7IGkrKykge1xuICAgICAgICAgICAgY2VsbHMucHVzaChbXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5rZXlzID0gW107XG4gICAgICAgIHRoaXMuYmJveGVzID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5uID0gbjtcbiAgICB0aGlzLmV4dGVudCA9IGV4dGVudDtcbiAgICB0aGlzLnBhZGRpbmcgPSBwYWRkaW5nO1xuICAgIHRoaXMuc2NhbGUgPSBuIC8gZXh0ZW50O1xuICAgIHRoaXMudWlkID0gMDtcblxuICAgIHZhciBwID0gKHBhZGRpbmcgLyBuKSAqIGV4dGVudDtcbiAgICB0aGlzLm1pbiA9IC1wO1xuICAgIHRoaXMubWF4ID0gZXh0ZW50ICsgcDtcbn1cblxuXG5HcmlkSW5kZXgucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgeDEsIHkxLCB4MiwgeTIpIHtcbiAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4MSwgeTEsIHgyLCB5MiwgdGhpcy5faW5zZXJ0Q2VsbCwgdGhpcy51aWQrKyk7XG4gICAgdGhpcy5rZXlzLnB1c2goa2V5KTtcbiAgICB0aGlzLmJib3hlcy5wdXNoKHgxKTtcbiAgICB0aGlzLmJib3hlcy5wdXNoKHkxKTtcbiAgICB0aGlzLmJib3hlcy5wdXNoKHgyKTtcbiAgICB0aGlzLmJib3hlcy5wdXNoKHkyKTtcbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX2luc2VydFJlYWRvbmx5ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgJ0Nhbm5vdCBpbnNlcnQgaW50byBhIEdyaWRJbmRleCBjcmVhdGVkIGZyb20gYW4gQXJyYXlCdWZmZXIuJztcbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX2luc2VydENlbGwgPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCB1aWQpIHtcbiAgICB0aGlzLmNlbGxzW2NlbGxJbmRleF0ucHVzaCh1aWQpO1xufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCBpbnRlcnNlY3Rpb25UZXN0KSB7XG4gICAgdmFyIG1pbiA9IHRoaXMubWluO1xuICAgIHZhciBtYXggPSB0aGlzLm1heDtcbiAgICBpZiAoeDEgPD0gbWluICYmIHkxIDw9IG1pbiAmJiBtYXggPD0geDIgJiYgbWF4IDw9IHkyICYmICFpbnRlcnNlY3Rpb25UZXN0KSB7XG4gICAgICAgIC8vIFdlIHVzZSBgQXJyYXkjc2xpY2VgIGJlY2F1c2UgYHRoaXMua2V5c2AgbWF5IGJlIGEgYEludDMyQXJyYXlgIGFuZFxuICAgICAgICAvLyBzb21lIGJyb3dzZXJzIChTYWZhcmkgYW5kIElFKSBkbyBub3Qgc3VwcG9ydCBgVHlwZWRBcnJheSNzbGljZWBcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvVHlwZWRBcnJheS9zbGljZSNCcm93c2VyX2NvbXBhdGliaWxpdHlcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMua2V5cyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIHZhciBzZWVuVWlkcyA9IHt9O1xuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4MSwgeTEsIHgyLCB5MiwgdGhpcy5fcXVlcnlDZWxsLCByZXN1bHQsIHNlZW5VaWRzLCBpbnRlcnNlY3Rpb25UZXN0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9xdWVyeUNlbGwgPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCByZXN1bHQsIHNlZW5VaWRzLCBpbnRlcnNlY3Rpb25UZXN0KSB7XG4gICAgdmFyIGNlbGwgPSB0aGlzLmNlbGxzW2NlbGxJbmRleF07XG4gICAgaWYgKGNlbGwgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XG4gICAgICAgIHZhciBiYm94ZXMgPSB0aGlzLmJib3hlcztcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBjZWxsLmxlbmd0aDsgdSsrKSB7XG4gICAgICAgICAgICB2YXIgdWlkID0gY2VsbFt1XTtcbiAgICAgICAgICAgIGlmIChzZWVuVWlkc1t1aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdWlkICogNDtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uVGVzdCA/XG4gICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvblRlc3QoYmJveGVzW29mZnNldCArIDBdLCBiYm94ZXNbb2Zmc2V0ICsgMV0sIGJib3hlc1tvZmZzZXQgKyAyXSwgYmJveGVzW29mZnNldCArIDNdKSA6XG4gICAgICAgICAgICAgICAgICAgICgoeDEgPD0gYmJveGVzW29mZnNldCArIDJdKSAmJlxuICAgICAgICAgICAgICAgICAgICAoeTEgPD0gYmJveGVzW29mZnNldCArIDNdKSAmJlxuICAgICAgICAgICAgICAgICAgICAoeDIgPj0gYmJveGVzW29mZnNldCArIDBdKSAmJlxuICAgICAgICAgICAgICAgICAgICAoeTIgPj0gYmJveGVzW29mZnNldCArIDFdKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblVpZHNbdWlkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGtleXNbdWlkXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblVpZHNbdWlkXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX2ZvckVhY2hDZWxsID0gZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIGZuLCBhcmcxLCBhcmcyLCBpbnRlcnNlY3Rpb25UZXN0KSB7XG4gICAgdmFyIGN4MSA9IHRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh4MSk7XG4gICAgdmFyIGN5MSA9IHRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh5MSk7XG4gICAgdmFyIGN4MiA9IHRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh4Mik7XG4gICAgdmFyIGN5MiA9IHRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh5Mik7XG4gICAgZm9yICh2YXIgeCA9IGN4MTsgeCA8PSBjeDI7IHgrKykge1xuICAgICAgICBmb3IgKHZhciB5ID0gY3kxOyB5IDw9IGN5MjsgeSsrKSB7XG4gICAgICAgICAgICB2YXIgY2VsbEluZGV4ID0gdGhpcy5kICogeSArIHg7XG4gICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uVGVzdCAmJiAhaW50ZXJzZWN0aW9uVGVzdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQoeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZCh4ICsgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZCh5ICsgMSkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChmbi5jYWxsKHRoaXMsIHgxLCB5MSwgeDIsIHkyLCBjZWxsSW5kZXgsIGFyZzEsIGFyZzIsIGludGVyc2VjdGlvblRlc3QpKSByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9jb252ZXJ0RnJvbUNlbGxDb29yZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKHggLSB0aGlzLnBhZGRpbmcpIC8gdGhpcy5zY2FsZTtcbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX2NvbnZlcnRUb0NlbGxDb29yZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5kIC0gMSwgTWF0aC5mbG9vcih4ICogdGhpcy5zY2FsZSkgKyB0aGlzLnBhZGRpbmcpKTtcbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUudG9BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmFycmF5QnVmZmVyKSByZXR1cm4gdGhpcy5hcnJheUJ1ZmZlcjtcblxuICAgIHZhciBjZWxscyA9IHRoaXMuY2VsbHM7XG5cbiAgICB2YXIgbWV0YWRhdGFMZW5ndGggPSBOVU1fUEFSQU1TICsgdGhpcy5jZWxscy5sZW5ndGggKyAxICsgMTtcbiAgICB2YXIgdG90YWxDZWxsTGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdG90YWxDZWxsTGVuZ3RoICs9IHRoaXMuY2VsbHNbaV0ubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG5ldyBJbnQzMkFycmF5KG1ldGFkYXRhTGVuZ3RoICsgdG90YWxDZWxsTGVuZ3RoICsgdGhpcy5rZXlzLmxlbmd0aCArIHRoaXMuYmJveGVzLmxlbmd0aCk7XG4gICAgYXJyYXlbMF0gPSB0aGlzLmV4dGVudDtcbiAgICBhcnJheVsxXSA9IHRoaXMubjtcbiAgICBhcnJheVsyXSA9IHRoaXMucGFkZGluZztcblxuICAgIHZhciBvZmZzZXQgPSBtZXRhZGF0YUxlbmd0aDtcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IGNlbGxzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBjZWxsID0gY2VsbHNba107XG4gICAgICAgIGFycmF5W05VTV9QQVJBTVMgKyBrXSA9IG9mZnNldDtcbiAgICAgICAgYXJyYXkuc2V0KGNlbGwsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSBjZWxsLmxlbmd0aDtcbiAgICB9XG5cbiAgICBhcnJheVtOVU1fUEFSQU1TICsgY2VsbHMubGVuZ3RoXSA9IG9mZnNldDtcbiAgICBhcnJheS5zZXQodGhpcy5rZXlzLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSB0aGlzLmtleXMubGVuZ3RoO1xuXG4gICAgYXJyYXlbTlVNX1BBUkFNUyArIGNlbGxzLmxlbmd0aCArIDFdID0gb2Zmc2V0O1xuICAgIGFycmF5LnNldCh0aGlzLmJib3hlcywgb2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gdGhpcy5iYm94ZXMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIGFycmF5LmJ1ZmZlcjtcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBHcmlkIGZyb20gJ2dyaWQtaW5kZXgnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQge1N0eWxlUHJvcGVydHlGdW5jdGlvbiwgU3R5bGVFeHByZXNzaW9uLCBab29tRGVwZW5kZW50RXhwcmVzc2lvbiwgWm9vbUNvbnN0YW50RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCBDb21wb3VuZEV4cHJlc3Npb24gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IGV4cHJlc3Npb25zIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuL3dpbmRvdyc7XG5jb25zdCB7SW1hZ2VEYXRhfSA9IHdpbmRvdztcblxuaW1wb3J0IHR5cGUge1RyYW5zZmVyYWJsZX0gZnJvbSAnLi4vdHlwZXMvdHJhbnNmZXJhYmxlJztcblxudHlwZSBTZXJpYWxpemVkT2JqZWN0ID0geyBbc3RyaW5nXTogU2VyaWFsaXplZCB9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkID1cbiAgICB8IG51bGxcbiAgICB8IHZvaWRcbiAgICB8IGJvb2xlYW5cbiAgICB8IG51bWJlclxuICAgIHwgc3RyaW5nXG4gICAgfCBCb29sZWFuXG4gICAgfCBOdW1iZXJcbiAgICB8IFN0cmluZ1xuICAgIHwgRGF0ZVxuICAgIHwgUmVnRXhwXG4gICAgfCBBcnJheUJ1ZmZlclxuICAgIHwgJEFycmF5QnVmZmVyVmlld1xuICAgIHwgSW1hZ2VEYXRhXG4gICAgfCBBcnJheTxTZXJpYWxpemVkPlxuICAgIHwgU2VyaWFsaXplZE9iamVjdDtcblxudHlwZSBSZWdpc3RyeSA9IHtcbiAgICBbc3RyaW5nXToge1xuICAgICAgICBrbGFzczogQ2xhc3M8YW55PixcbiAgICAgICAgb21pdDogJFJlYWRPbmx5QXJyYXk8c3RyaW5nPixcbiAgICAgICAgc2hhbGxvdzogJFJlYWRPbmx5QXJyYXk8c3RyaW5nPlxuICAgIH1cbn07XG5cbnR5cGUgUmVnaXN0ZXJPcHRpb25zPFQ+ID0ge1xuICAgIG9taXQ/OiAkUmVhZE9ubHlBcnJheTwkS2V5czxUPj4sXG4gICAgc2hhbGxvdz86ICRSZWFkT25seUFycmF5PCRLZXlzPFQ+PlxufVxuXG5jb25zdCByZWdpc3RyeTogUmVnaXN0cnkgPSB7fTtcblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgZ2l2ZW4gY2xhc3MgYXMgc2VyaWFsaXphYmxlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5vbWl0IExpc3Qgb2YgcHJvcGVydGllcyB0byBvbWl0IGZyb20gc2VyaWFsaXphdGlvbiAoZS5nLiwgY2FjaGVkL2NvbXB1dGVkIHByb3BlcnRpZXMpXG4gKiBAcGFyYW0gb3B0aW9ucy5zaGFsbG93IExpc3Qgb2YgcHJvcGVydGllcyB0aGF0IHNob3VsZCBiZSBzZXJpYWxpemVkIGJ5IGEgc2ltcGxlIHNoYWxsb3cgY29weSwgcmF0aGVyIHRoYW4gYnkgYSByZWN1cnNpdmUgY2FsbCB0byBzZXJpYWxpemUoKS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXI8VDogYW55PihuYW1lOiBzdHJpbmcsIGtsYXNzOiBDbGFzczxUPiwgb3B0aW9uczogUmVnaXN0ZXJPcHRpb25zPFQ+ID0ge30pIHtcbiAgICBhc3NlcnQoIXJlZ2lzdHJ5W25hbWVdLCBgJHtuYW1lfSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYCk7XG4gICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eTogYW55KShrbGFzcywgJ19jbGFzc1JlZ2lzdHJ5S2V5Jywge1xuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgd3JpdGVhYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIHJlZ2lzdHJ5W25hbWVdID0ge1xuICAgICAgICBrbGFzcyxcbiAgICAgICAgb21pdDogb3B0aW9ucy5vbWl0IHx8IFtdLFxuICAgICAgICBzaGFsbG93OiBvcHRpb25zLnNoYWxsb3cgfHwgW11cbiAgICB9O1xufVxuXG5yZWdpc3RlcignT2JqZWN0JywgT2JqZWN0KTtcblxudHlwZSBTZXJpYWxpemVkR3JpZCA9IHsgYnVmZmVyOiBBcnJheUJ1ZmZlciB9O1xuXG5HcmlkLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIHNlcmlhbGl6ZShncmlkOiBHcmlkLCB0cmFuc2ZlcmFibGVzPzogQXJyYXk8VHJhbnNmZXJhYmxlPik6IFNlcmlhbGl6ZWRHcmlkIHtcbiAgICBjb25zdCBidWZmZXIgPSBncmlkLnRvQXJyYXlCdWZmZXIoKTtcbiAgICBpZiAodHJhbnNmZXJhYmxlcykge1xuICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goYnVmZmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHtidWZmZXJ9O1xufTtcblxuR3JpZC5kZXNlcmlhbGl6ZSA9IGZ1bmN0aW9uIGRlc2VyaWFsaXplKHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWRHcmlkKTogR3JpZCB7XG4gICAgcmV0dXJuIG5ldyBHcmlkKHNlcmlhbGl6ZWQuYnVmZmVyKTtcbn07XG5yZWdpc3RlcignR3JpZCcsIEdyaWQpO1xuXG5yZWdpc3RlcignQ29sb3InLCBDb2xvcik7XG5yZWdpc3RlcignRXJyb3InLCBFcnJvcik7XG5yZWdpc3RlcignUmVzb2x2ZWRJbWFnZScsIFJlc29sdmVkSW1hZ2UpO1xuXG5yZWdpc3RlcignU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uJywgU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uKTtcbnJlZ2lzdGVyKCdTdHlsZUV4cHJlc3Npb24nLCBTdHlsZUV4cHJlc3Npb24sIHtvbWl0OiBbJ19ldmFsdWF0b3InXX0pO1xuXG5yZWdpc3RlcignWm9vbURlcGVuZGVudEV4cHJlc3Npb24nLCBab29tRGVwZW5kZW50RXhwcmVzc2lvbik7XG5yZWdpc3RlcignWm9vbUNvbnN0YW50RXhwcmVzc2lvbicsIFpvb21Db25zdGFudEV4cHJlc3Npb24pO1xucmVnaXN0ZXIoJ0NvbXBvdW5kRXhwcmVzc2lvbicsIENvbXBvdW5kRXhwcmVzc2lvbiwge29taXQ6IFsnX2V2YWx1YXRlJ119KTtcbmZvciAoY29uc3QgbmFtZSBpbiBleHByZXNzaW9ucykge1xuICAgIGlmICgoZXhwcmVzc2lvbnNbbmFtZV06IGFueSkuX2NsYXNzUmVnaXN0cnlLZXkpIGNvbnRpbnVlO1xuICAgIHJlZ2lzdGVyKGBFeHByZXNzaW9uXyR7bmFtZX1gLCBleHByZXNzaW9uc1tuYW1lXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsICYmIHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgKHZhbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8ICh2YWwuY29uc3RydWN0b3IgJiYgdmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBcnJheUJ1ZmZlcicpKTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGdpdmVuIG9iamVjdCBmb3IgdHJhbnNmZXIgdG8gb3IgZnJvbSBhIHdlYiB3b3JrZXIuXG4gKlxuICogRm9yIG5vbi1idWlsdGluIHR5cGVzLCByZWN1cnNpdmVseSBzZXJpYWxpemUgZWFjaCBwcm9wZXJ0eSAocG9zc2libHlcbiAqIG9taXR0aW5nIGNlcnRhaW4gcHJvcGVydGllcyAtIHNlZSByZWdpc3RlcigpKSwgYW5kIHBhY2thZ2UgdGhlIHJlc3VsdCBhbG9uZ1xuICogd2l0aCB0aGUgY29uc3RydWN0b3IncyBgbmFtZWAgc28gdGhhdCB0aGUgYXBwcm9wcmlhdGUgY29uc3RydWN0b3IgY2FuIGJlXG4gKiBsb29rZWQgdXAgaW4gYGRlc2VyaWFsaXplKClgLlxuICpcbiAqIElmIGEgYHRyYW5zZmVyYWJsZXNgIGFycmF5IGlzIHByb3ZpZGVkLCBhZGQgYW55IHRyYW5zZmVyYWJsZSBvYmplY3RzIChpLmUuLFxuICogYW55IEFycmF5QnVmZmVycyBvciBBcnJheUJ1ZmZlciB2aWV3cykgdG8gdGhlIGxpc3QuIChJZiBhIGNvcHkgaXMgbmVlZGVkLFxuICogdGhpcyBzaG91bGQgaGFwcGVuIGluIHRoZSBjbGllbnQgY29kZSwgYmVmb3JlIHVzaW5nIHNlcmlhbGl6ZSgpLilcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKGlucHV0OiBtaXhlZCwgdHJhbnNmZXJhYmxlcz86IEFycmF5PFRyYW5zZmVyYWJsZT4pOiBTZXJpYWxpemVkIHtcbiAgICBpZiAoaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdib29sZWFuJyB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBCb29sZWFuIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgTnVtYmVyIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgU3RyaW5nIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXlCdWZmZXIoaW5wdXQpKSB7XG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goKChpbnB1dDogYW55KTogQXJyYXlCdWZmZXIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhpbnB1dCkpIHtcbiAgICAgICAgY29uc3QgdmlldzogJEFycmF5QnVmZmVyVmlldyA9IChpbnB1dDogYW55KTtcbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaCh2aWV3LmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZpZXc7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goaW5wdXQuZGF0YS5idWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZDogQXJyYXk8U2VyaWFsaXplZD4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0KSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goc2VyaWFsaXplKGl0ZW0sIHRyYW5zZmVyYWJsZXMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBrbGFzcyA9IChpbnB1dC5jb25zdHJ1Y3RvcjogYW55KTtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtsYXNzLl9jbGFzc1JlZ2lzdHJ5S2V5O1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB1bnJlZ2lzdGVyZWQgY2xhc3NgKTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnQocmVnaXN0cnlbbmFtZV0pO1xuXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXM6IFNlcmlhbGl6ZWRPYmplY3QgPSBrbGFzcy5zZXJpYWxpemUgP1xuICAgICAgICAgICAgLy8gKFRlbXBvcmFyeSB3b3JrYXJvdW5kKSBhbGxvdyBhIGNsYXNzIHRvIHByb3ZpZGUgc3RhdGljXG4gICAgICAgICAgICAvLyBgc2VyaWFsaXplKClgIGFuZCBgZGVzZXJpYWxpemUoKWAgbWV0aG9kcyB0byBieXBhc3MgdGhlIGdlbmVyaWNcbiAgICAgICAgICAgIC8vIGFwcHJvYWNoLlxuICAgICAgICAgICAgLy8gVGhpcyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBsZXRzIHVzIHVzZSB0aGUgZ2VuZXJpYyBzZXJpYWxpemF0aW9uXG4gICAgICAgICAgICAvLyBhcHByb2FjaCBmb3Igb2JqZWN0cyB3aG9zZSBtZW1iZXJzIGluY2x1ZGUgaW5zdGFuY2VzIG9mIGR5bmFtaWNcbiAgICAgICAgICAgIC8vIFN0cnVjdEFycmF5IHR5cGVzLiBPbmNlIHdlIHJlZmFjdG9yIFN0cnVjdEFycmF5IHRvIGJlIHN0YXRpYyxcbiAgICAgICAgICAgIC8vIHdlIGNhbiByZW1vdmUgdGhpcyBjb21wbGV4aXR5LlxuICAgICAgICAgICAgKGtsYXNzLnNlcmlhbGl6ZShpbnB1dCwgdHJhbnNmZXJhYmxlcyk6IFNlcmlhbGl6ZWRPYmplY3QpIDoge307XG5cbiAgICAgICAgaWYgKCFrbGFzcy5zZXJpYWxpemUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgLy8gYW55IGNhc3QgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy81MzkzXG4gICAgICAgICAgICAgICAgaWYgKCEoaW5wdXQ6IGFueSkuaGFzT3duUHJvcGVydHkoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5W25hbWVdLm9taXQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gKGlucHV0OiBhbnkpW2tleV07XG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1trZXldID0gcmVnaXN0cnlbbmFtZV0uc2hhbGxvdy5pbmRleE9mKGtleSkgPj0gMCA/XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IDpcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplKHByb3BlcnR5LCB0cmFuc2ZlcmFibGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5tZXNzYWdlID0gaW5wdXQubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBzdGF0aWNhbGx5IHNlcmlhbGl6ZWQgb2JqZWN0IHN1cnZpdmVzIHRyYW5zZmVyIG9mICRuYW1lIHByb3BlcnR5XG4gICAgICAgICAgICBhc3NlcnQoIXRyYW5zZmVyYWJsZXMgfHwgcHJvcGVydGllcyAhPT0gdHJhbnNmZXJhYmxlc1t0cmFuc2ZlcmFibGVzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLiRuYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyRuYW1lIHByb3BlcnR5IGlzIHJlc2VydmVkIGZvciB3b3JrZXIgc2VyaWFsaXphdGlvbiBsb2dpYy4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuJG5hbWUgPSBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgJHt0eXBlb2YgaW5wdXR9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZShpbnB1dDogU2VyaWFsaXplZCk6IG1peGVkIHtcbiAgICBpZiAoaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdib29sZWFuJyB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBCb29sZWFuIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgTnVtYmVyIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgU3RyaW5nIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIFJlZ0V4cCB8fFxuICAgICAgICBpc0FycmF5QnVmZmVyKGlucHV0KSB8fFxuICAgICAgICBBcnJheUJ1ZmZlci5pc1ZpZXcoaW5wdXQpIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0Lm1hcChkZXNlcmlhbGl6ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IChpbnB1dDogYW55KS4kbmFtZSB8fCAnT2JqZWN0JztcblxuICAgICAgICBjb25zdCB7a2xhc3N9ID0gcmVnaXN0cnlbbmFtZV07XG4gICAgICAgIGlmICgha2xhc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgZGVzZXJpYWxpemUgdW5yZWdpc3RlcmVkIGNsYXNzICR7bmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrbGFzcy5kZXNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIChrbGFzcy5kZXNlcmlhbGl6ZTogdHlwZW9mIGRlc2VyaWFsaXplKShpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuY3JlYXRlKGtsYXNzLnByb3RvdHlwZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaW5wdXQpKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnJG5hbWUnKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKGlucHV0OiBTZXJpYWxpemVkT2JqZWN0KVtrZXldO1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSByZWdpc3RyeVtuYW1lXS5zaGFsbG93LmluZGV4T2Yoa2V5KSA+PSAwID8gdmFsdWUgOiBkZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgZGVzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgJHt0eXBlb2YgaW5wdXR9YCk7XG59XG4iLCIvLyBAZmxvd1xuXG5jbGFzcyBab29tSGlzdG9yeSB7XG4gICAgbGFzdFpvb206IG51bWJlcjtcbiAgICBsYXN0Rmxvb3Jab29tOiBudW1iZXI7XG4gICAgbGFzdEludGVnZXJab29tOiBudW1iZXI7XG4gICAgbGFzdEludGVnZXJab29tVGltZTogbnVtYmVyO1xuICAgIGZpcnN0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZmlyc3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHVwZGF0ZSh6OiBudW1iZXIsIG5vdzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGZsb29yWiA9IE1hdGguZmxvb3Ioeik7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlyc3QpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tID0gZmxvb3JaO1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lID0gMDtcbiAgICAgICAgICAgIHRoaXMubGFzdFpvb20gPSB6O1xuICAgICAgICAgICAgdGhpcy5sYXN0Rmxvb3Jab29tID0gZmxvb3JaO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXN0Rmxvb3Jab29tID4gZmxvb3JaKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbSA9IGZsb29yWiArIDE7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWUgPSBub3c7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0Rmxvb3Jab29tIDwgZmxvb3JaKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbSA9IGZsb29yWjtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tVGltZSA9IG5vdztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh6ICE9PSB0aGlzLmxhc3Rab29tKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3Rab29tID0gejtcbiAgICAgICAgICAgIHRoaXMubGFzdEZsb29yWm9vbSA9IGZsb29yWjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgWm9vbUhpc3Rvcnk7XG4iLCIvLyBAZmxvd1xuXG4vLyBUaGUgZm9sbG93aW5nIHRhYmxlIGNvbWVzIGZyb20gPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzEyLjAuMC91Y2QvQmxvY2tzLnR4dD4uXG4vLyBLZWVwIGl0IHN5bmNocm9uaXplZCB3aXRoIDxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9VQ0QvbGF0ZXN0L3VjZC9CbG9ja3MudHh0Pi5cblxudHlwZSBVbmljb2RlQmxvY2tMb29rdXAgPSB7W2tleTogc3RyaW5nXTogKGNoYXI6IG51bWJlcikgPT4gYm9vbGVhbn07XG5cbmNvbnN0IHVuaWNvZGVCbG9ja0xvb2t1cDogVW5pY29kZUJsb2NrTG9va3VwID0ge1xuICAgIC8vICdCYXNpYyBMYXRpbic6IChjaGFyKSA9PiBjaGFyID49IDB4MDAwMCAmJiBjaGFyIDw9IDB4MDA3RixcbiAgICAnTGF0aW4tMSBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMDgwICYmIGNoYXIgPD0gMHgwMEZGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMTAwICYmIGNoYXIgPD0gMHgwMTdGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZC1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMTgwICYmIGNoYXIgPD0gMHgwMjRGLFxuICAgIC8vICdJUEEgRXh0ZW5zaW9ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDI1MCAmJiBjaGFyIDw9IDB4MDJBRixcbiAgICAvLyAnU3BhY2luZyBNb2RpZmllciBMZXR0ZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMkIwICYmIGNoYXIgPD0gMHgwMkZGLFxuICAgIC8vICdDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MnOiAoY2hhcikgPT4gY2hhciA+PSAweDAzMDAgJiYgY2hhciA8PSAweDAzNkYsXG4gICAgLy8gJ0dyZWVrIGFuZCBDb3B0aWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDAzNzAgJiYgY2hhciA8PSAweDAzRkYsXG4gICAgLy8gJ0N5cmlsbGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNDAwICYmIGNoYXIgPD0gMHgwNEZGLFxuICAgIC8vICdDeXJpbGxpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNTAwICYmIGNoYXIgPD0gMHgwNTJGLFxuICAgIC8vICdBcm1lbmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MDUzMCAmJiBjaGFyIDw9IDB4MDU4RixcbiAgICAvLydIZWJyZXcnOiAoY2hhcikgPT4gY2hhciA+PSAweDA1OTAgJiYgY2hhciA8PSAweDA1RkYsXG4gICAgJ0FyYWJpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDYwMCAmJiBjaGFyIDw9IDB4MDZGRixcbiAgICAvLydTeXJpYWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDA3MDAgJiYgY2hhciA8PSAweDA3NEYsXG4gICAgJ0FyYWJpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNzUwICYmIGNoYXIgPD0gMHgwNzdGLFxuICAgIC8vICdUaGFhbmEnOiAoY2hhcikgPT4gY2hhciA+PSAweDA3ODAgJiYgY2hhciA8PSAweDA3QkYsXG4gICAgLy8gJ05Lbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDdDMCAmJiBjaGFyIDw9IDB4MDdGRixcbiAgICAvLyAnU2FtYXJpdGFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwODAwICYmIGNoYXIgPD0gMHgwODNGLFxuICAgIC8vICdNYW5kYWljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwODQwICYmIGNoYXIgPD0gMHgwODVGLFxuICAgIC8vICdTeXJpYWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MDg2MCAmJiBjaGFyIDw9IDB4MDg2RixcbiAgICAnQXJhYmljIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDA4QTAgJiYgY2hhciA8PSAweDA4RkYsXG4gICAgLy8gJ0RldmFuYWdhcmknOiAoY2hhcikgPT4gY2hhciA+PSAweDA5MDAgJiYgY2hhciA8PSAweDA5N0YsXG4gICAgLy8gJ0JlbmdhbGknOiAoY2hhcikgPT4gY2hhciA+PSAweDA5ODAgJiYgY2hhciA8PSAweDA5RkYsXG4gICAgLy8gJ0d1cm11a2hpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQTAwICYmIGNoYXIgPD0gMHgwQTdGLFxuICAgIC8vICdHdWphcmF0aSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEE4MCAmJiBjaGFyIDw9IDB4MEFGRixcbiAgICAvLyAnT3JpeWEnOiAoY2hhcikgPT4gY2hhciA+PSAweDBCMDAgJiYgY2hhciA8PSAweDBCN0YsXG4gICAgLy8gJ1RhbWlsJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQjgwICYmIGNoYXIgPD0gMHgwQkZGLFxuICAgIC8vICdUZWx1Z3UnOiAoY2hhcikgPT4gY2hhciA+PSAweDBDMDAgJiYgY2hhciA8PSAweDBDN0YsXG4gICAgLy8gJ0thbm5hZGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDBDODAgJiYgY2hhciA8PSAweDBDRkYsXG4gICAgLy8gJ01hbGF5YWxhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEQwMCAmJiBjaGFyIDw9IDB4MEQ3RixcbiAgICAvLyAnU2luaGFsYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEQ4MCAmJiBjaGFyIDw9IDB4MERGRixcbiAgICAvLyAnVGhhaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEUwMCAmJiBjaGFyIDw9IDB4MEU3RixcbiAgICAvLyAnTGFvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwRTgwICYmIGNoYXIgPD0gMHgwRUZGLFxuICAgIC8vICdUaWJldGFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwRjAwICYmIGNoYXIgPD0gMHgwRkZGLFxuICAgIC8vICdNeWFubWFyJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDAwICYmIGNoYXIgPD0gMHgxMDlGLFxuICAgIC8vICdHZW9yZ2lhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBBMCAmJiBjaGFyIDw9IDB4MTBGRixcbiAgICAnSGFuZ3VsIEphbW8nOiAoY2hhcikgPT4gY2hhciA+PSAweDExMDAgJiYgY2hhciA8PSAweDExRkYsXG4gICAgLy8gJ0V0aGlvcGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMjAwICYmIGNoYXIgPD0gMHgxMzdGLFxuICAgIC8vICdFdGhpb3BpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMzgwICYmIGNoYXIgPD0gMHgxMzlGLFxuICAgIC8vICdDaGVyb2tlZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTNBMCAmJiBjaGFyIDw9IDB4MTNGRixcbiAgICAnVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTQwMCAmJiBjaGFyIDw9IDB4MTY3RixcbiAgICAvLyAnT2doYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweDE2ODAgJiYgY2hhciA8PSAweDE2OUYsXG4gICAgLy8gJ1J1bmljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkEwICYmIGNoYXIgPD0gMHgxNkZGLFxuICAgIC8vICdUYWdhbG9nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzAwICYmIGNoYXIgPD0gMHgxNzFGLFxuICAgIC8vICdIYW51bm9vJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzIwICYmIGNoYXIgPD0gMHgxNzNGLFxuICAgIC8vICdCdWhpZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTc0MCAmJiBjaGFyIDw9IDB4MTc1RixcbiAgICAvLyAnVGFnYmFud2EnOiAoY2hhcikgPT4gY2hhciA+PSAweDE3NjAgJiYgY2hhciA8PSAweDE3N0YsXG4gICAgJ0tobWVyJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzgwICYmIGNoYXIgPD0gMHgxN0ZGLFxuICAgIC8vICdNb25nb2xpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDE4MDAgJiYgY2hhciA8PSAweDE4QUYsXG4gICAgJ1VuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDE4QjAgJiYgY2hhciA8PSAweDE4RkYsXG4gICAgLy8gJ0xpbWJ1JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxOTAwICYmIGNoYXIgPD0gMHgxOTRGLFxuICAgIC8vICdUYWkgTGUnOiAoY2hhcikgPT4gY2hhciA+PSAweDE5NTAgJiYgY2hhciA8PSAweDE5N0YsXG4gICAgLy8gJ05ldyBUYWkgTHVlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxOTgwICYmIGNoYXIgPD0gMHgxOURGLFxuICAgIC8vICdLaG1lciBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxOUUwICYmIGNoYXIgPD0gMHgxOUZGLFxuICAgIC8vICdCdWdpbmVzZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUEwMCAmJiBjaGFyIDw9IDB4MUExRixcbiAgICAvLyAnVGFpIFRoYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweDFBMjAgJiYgY2hhciA8PSAweDFBQUYsXG4gICAgLy8gJ0NvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUFCMCAmJiBjaGFyIDw9IDB4MUFGRixcbiAgICAvLyAnQmFsaW5lc2UnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCMDAgJiYgY2hhciA8PSAweDFCN0YsXG4gICAgLy8gJ1N1bmRhbmVzZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUI4MCAmJiBjaGFyIDw9IDB4MUJCRixcbiAgICAvLyAnQmF0YWsnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCQzAgJiYgY2hhciA8PSAweDFCRkYsXG4gICAgLy8gJ0xlcGNoYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUMwMCAmJiBjaGFyIDw9IDB4MUM0RixcbiAgICAvLyAnT2wgQ2hpa2knOiAoY2hhcikgPT4gY2hhciA+PSAweDFDNTAgJiYgY2hhciA8PSAweDFDN0YsXG4gICAgLy8gJ0N5cmlsbGljIEV4dGVuZGVkLUMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFDODAgJiYgY2hhciA8PSAweDFDOEYsXG4gICAgLy8gJ0dlb3JnaWFuIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQzkwICYmIGNoYXIgPD0gMHgxQ0JGLFxuICAgIC8vICdTdW5kYW5lc2UgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUNDMCAmJiBjaGFyIDw9IDB4MUNDRixcbiAgICAvLyAnVmVkaWMgRXh0ZW5zaW9ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUNEMCAmJiBjaGFyIDw9IDB4MUNGRixcbiAgICAvLyAnUGhvbmV0aWMgRXh0ZW5zaW9ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQwMCAmJiBjaGFyIDw9IDB4MUQ3RixcbiAgICAvLyAnUGhvbmV0aWMgRXh0ZW5zaW9ucyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDgwICYmIGNoYXIgPD0gMHgxREJGLFxuICAgIC8vICdDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MURDMCAmJiBjaGFyIDw9IDB4MURGRixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUUwMCAmJiBjaGFyIDw9IDB4MUVGRixcbiAgICAvLyAnR3JlZWsgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMDAgJiYgY2hhciA8PSAweDFGRkYsXG4gICAgJ0dlbmVyYWwgUHVuY3R1YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDIwMDAgJiYgY2hhciA8PSAweDIwNkYsXG4gICAgLy8gJ1N1cGVyc2NyaXB0cyBhbmQgU3Vic2NyaXB0cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjA3MCAmJiBjaGFyIDw9IDB4MjA5RixcbiAgICAvLyAnQ3VycmVuY3kgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjBBMCAmJiBjaGFyIDw9IDB4MjBDRixcbiAgICAvLyAnQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIGZvciBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMEQwICYmIGNoYXIgPD0gMHgyMEZGLFxuICAgICdMZXR0ZXJsaWtlIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIxMDAgJiYgY2hhciA8PSAweDIxNEYsXG4gICAgJ051bWJlciBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjE1MCAmJiBjaGFyIDw9IDB4MjE4RixcbiAgICAvLyAnQXJyb3dzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMTkwICYmIGNoYXIgPD0gMHgyMUZGLFxuICAgIC8vICdNYXRoZW1hdGljYWwgT3BlcmF0b3JzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMjAwICYmIGNoYXIgPD0gMHgyMkZGLFxuICAgICdNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCc6IChjaGFyKSA9PiBjaGFyID49IDB4MjMwMCAmJiBjaGFyIDw9IDB4MjNGRixcbiAgICAnQ29udHJvbCBQaWN0dXJlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjQwMCAmJiBjaGFyIDw9IDB4MjQzRixcbiAgICAnT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDI0NDAgJiYgY2hhciA8PSAweDI0NUYsXG4gICAgJ0VuY2xvc2VkIEFscGhhbnVtZXJpY3MnOiAoY2hhcikgPT4gY2hhciA+PSAweDI0NjAgJiYgY2hhciA8PSAweDI0RkYsXG4gICAgLy8gJ0JveCBEcmF3aW5nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNTAwICYmIGNoYXIgPD0gMHgyNTdGLFxuICAgIC8vICdCbG9jayBFbGVtZW50cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjU4MCAmJiBjaGFyIDw9IDB4MjU5RixcbiAgICAnR2VvbWV0cmljIFNoYXBlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjVBMCAmJiBjaGFyIDw9IDB4MjVGRixcbiAgICAnTWlzY2VsbGFuZW91cyBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNjAwICYmIGNoYXIgPD0gMHgyNkZGLFxuICAgIC8vICdEaW5nYmF0cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjcwMCAmJiBjaGFyIDw9IDB4MjdCRixcbiAgICAvLyAnTWlzY2VsbGFuZW91cyBNYXRoZW1hdGljYWwgU3ltYm9scy1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyN0MwICYmIGNoYXIgPD0gMHgyN0VGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgQXJyb3dzLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDI3RjAgJiYgY2hhciA8PSAweDI3RkYsXG4gICAgLy8gJ0JyYWlsbGUgUGF0dGVybnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI4MDAgJiYgY2hhciA8PSAweDI4RkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBBcnJvd3MtQic6IChjaGFyKSA9PiBjaGFyID49IDB4MjkwMCAmJiBjaGFyIDw9IDB4Mjk3RixcbiAgICAvLyAnTWlzY2VsbGFuZW91cyBNYXRoZW1hdGljYWwgU3ltYm9scy1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyOTgwICYmIGNoYXIgPD0gMHgyOUZGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgTWF0aGVtYXRpY2FsIE9wZXJhdG9ycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkEwMCAmJiBjaGFyIDw9IDB4MkFGRixcbiAgICAnTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MnOiAoY2hhcikgPT4gY2hhciA+PSAweDJCMDAgJiYgY2hhciA8PSAweDJCRkYsXG4gICAgLy8gJ0dsYWdvbGl0aWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJDMDAgJiYgY2hhciA8PSAweDJDNUYsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkLUMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJDNjAgJiYgY2hhciA8PSAweDJDN0YsXG4gICAgLy8gJ0NvcHRpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkM4MCAmJiBjaGFyIDw9IDB4MkNGRixcbiAgICAvLyAnR2VvcmdpYW4gU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkQwMCAmJiBjaGFyIDw9IDB4MkQyRixcbiAgICAvLyAnVGlmaW5hZ2gnOiAoY2hhcikgPT4gY2hhciA+PSAweDJEMzAgJiYgY2hhciA8PSAweDJEN0YsXG4gICAgLy8gJ0V0aGlvcGljIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRDgwICYmIGNoYXIgPD0gMHgyRERGLFxuICAgIC8vICdDeXJpbGxpYyBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyREUwICYmIGNoYXIgPD0gMHgyREZGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgUHVuY3R1YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDJFMDAgJiYgY2hhciA8PSAweDJFN0YsXG4gICAgJ0NKSyBSYWRpY2FscyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRTgwICYmIGNoYXIgPD0gMHgyRUZGLFxuICAgICdLYW5neGkgUmFkaWNhbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJGMDAgJiYgY2hhciA8PSAweDJGREYsXG4gICAgJ0lkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJGRjAgJiYgY2hhciA8PSAweDJGRkYsXG4gICAgJ0NKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MzAwMCAmJiBjaGFyIDw9IDB4MzAzRixcbiAgICAnSGlyYWdhbmEnOiAoY2hhcikgPT4gY2hhciA+PSAweDMwNDAgJiYgY2hhciA8PSAweDMwOUYsXG4gICAgJ0thdGFrYW5hJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMEEwICYmIGNoYXIgPD0gMHgzMEZGLFxuICAgICdCb3BvbW9mbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MzEwMCAmJiBjaGFyIDw9IDB4MzEyRixcbiAgICAnSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MzEzMCAmJiBjaGFyIDw9IDB4MzE4RixcbiAgICAnS2FuYnVuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMTkwICYmIGNoYXIgPD0gMHgzMTlGLFxuICAgICdCb3BvbW9mbyBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MzFBMCAmJiBjaGFyIDw9IDB4MzFCRixcbiAgICAnQ0pLIFN0cm9rZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDMxQzAgJiYgY2hhciA8PSAweDMxRUYsXG4gICAgJ0thdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDMxRjAgJiYgY2hhciA8PSAweDMxRkYsXG4gICAgJ0VuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDMyMDAgJiYgY2hhciA8PSAweDMyRkYsXG4gICAgJ0NKSyBDb21wYXRpYmlsaXR5JzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMzAwICYmIGNoYXIgPD0gMHgzM0ZGLFxuICAgICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzNDAwICYmIGNoYXIgPD0gMHg0REJGLFxuICAgICdZaWppbmcgSGV4YWdyYW0gU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4NERDMCAmJiBjaGFyIDw9IDB4NERGRixcbiAgICAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4NEUwMCAmJiBjaGFyIDw9IDB4OUZGRixcbiAgICAnWWkgU3lsbGFibGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBMDAwICYmIGNoYXIgPD0gMHhBNDhGLFxuICAgICdZaSBSYWRpY2Fscyc6IChjaGFyKSA9PiBjaGFyID49IDB4QTQ5MCAmJiBjaGFyIDw9IDB4QTRDRixcbiAgICAvLyAnTGlzdSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTREMCAmJiBjaGFyIDw9IDB4QTRGRixcbiAgICAvLyAnVmFpJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNTAwICYmIGNoYXIgPD0gMHhBNjNGLFxuICAgIC8vICdDeXJpbGxpYyBFeHRlbmRlZC1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNjQwICYmIGNoYXIgPD0gMHhBNjlGLFxuICAgIC8vICdCYW11bSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTZBMCAmJiBjaGFyIDw9IDB4QTZGRixcbiAgICAvLyAnTW9kaWZpZXIgVG9uZSBMZXR0ZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNzAwICYmIGNoYXIgPD0gMHhBNzFGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZC1EJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNzIwICYmIGNoYXIgPD0gMHhBN0ZGLFxuICAgIC8vICdTeWxvdGkgTmFncmknOiAoY2hhcikgPT4gY2hhciA+PSAweEE4MDAgJiYgY2hhciA8PSAweEE4MkYsXG4gICAgLy8gJ0NvbW1vbiBJbmRpYyBOdW1iZXIgRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEE4MzAgJiYgY2hhciA8PSAweEE4M0YsXG4gICAgLy8gJ1BoYWdzLXBhJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBODQwICYmIGNoYXIgPD0gMHhBODdGLFxuICAgIC8vICdTYXVyYXNodHJhJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBODgwICYmIGNoYXIgPD0gMHhBOERGLFxuICAgIC8vICdEZXZhbmFnYXJpIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOEUwICYmIGNoYXIgPD0gMHhBOEZGLFxuICAgIC8vICdLYXlhaCBMaSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTkwMCAmJiBjaGFyIDw9IDB4QTkyRixcbiAgICAvLyAnUmVqYW5nJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOTMwICYmIGNoYXIgPD0gMHhBOTVGLFxuICAgICdIYW5ndWwgSmFtbyBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOTYwICYmIGNoYXIgPD0gMHhBOTdGLFxuICAgIC8vICdKYXZhbmVzZSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTk4MCAmJiBjaGFyIDw9IDB4QTlERixcbiAgICAvLyAnTXlhbm1hciBFeHRlbmRlZC1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOUUwICYmIGNoYXIgPD0gMHhBOUZGLFxuICAgIC8vICdDaGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQTAwICYmIGNoYXIgPD0gMHhBQTVGLFxuICAgIC8vICdNeWFubWFyIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweEFBNjAgJiYgY2hhciA8PSAweEFBN0YsXG4gICAgLy8gJ1RhaSBWaWV0JzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQTgwICYmIGNoYXIgPD0gMHhBQURGLFxuICAgIC8vICdNZWV0ZWkgTWF5ZWsgRXh0ZW5zaW9ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4QUFFMCAmJiBjaGFyIDw9IDB4QUFGRixcbiAgICAvLyAnRXRoaW9waWMgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4QUIwMCAmJiBjaGFyIDw9IDB4QUIyRixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQtRSc6IChjaGFyKSA9PiBjaGFyID49IDB4QUIzMCAmJiBjaGFyIDw9IDB4QUI2RixcbiAgICAvLyAnQ2hlcm9rZWUgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4QUI3MCAmJiBjaGFyIDw9IDB4QUJCRixcbiAgICAvLyAnTWVldGVpIE1heWVrJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQkMwICYmIGNoYXIgPD0gMHhBQkZGLFxuICAgICdIYW5ndWwgU3lsbGFibGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQzAwICYmIGNoYXIgPD0gMHhEN0FGLFxuICAgICdIYW5ndWwgSmFtbyBFeHRlbmRlZC1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHhEN0IwICYmIGNoYXIgPD0gMHhEN0ZGLFxuICAgIC8vICdIaWdoIFN1cnJvZ2F0ZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEQ4MDAgJiYgY2hhciA8PSAweERCN0YsXG4gICAgLy8gJ0hpZ2ggUHJpdmF0ZSBVc2UgU3Vycm9nYXRlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4REI4MCAmJiBjaGFyIDw9IDB4REJGRixcbiAgICAvLyAnTG93IFN1cnJvZ2F0ZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweERDMDAgJiYgY2hhciA8PSAweERGRkYsXG4gICAgJ1ByaXZhdGUgVXNlIEFyZWEnOiAoY2hhcikgPT4gY2hhciA+PSAweEUwMDAgJiYgY2hhciA8PSAweEY4RkYsXG4gICAgJ0NKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweEY5MDAgJiYgY2hhciA8PSAweEZBRkYsXG4gICAgLy8gJ0FscGhhYmV0aWMgUHJlc2VudGF0aW9uIEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGQjAwICYmIGNoYXIgPD0gMHhGQjRGLFxuICAgICdBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweEZCNTAgJiYgY2hhciA8PSAweEZERkYsXG4gICAgLy8gJ1ZhcmlhdGlvbiBTZWxlY3RvcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZFMDAgJiYgY2hhciA8PSAweEZFMEYsXG4gICAgJ1ZlcnRpY2FsIEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTEwICYmIGNoYXIgPD0gMHhGRTFGLFxuICAgIC8vICdDb21iaW5pbmcgSGFsZiBNYXJrcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkUyMCAmJiBjaGFyIDw9IDB4RkUyRixcbiAgICAnQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZFMzAgJiYgY2hhciA8PSAweEZFNEYsXG4gICAgJ1NtYWxsIEZvcm0gVmFyaWFudHMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZFNTAgJiYgY2hhciA8PSAweEZFNkYsXG4gICAgJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQic6IChjaGFyKSA9PiBjaGFyID49IDB4RkU3MCAmJiBjaGFyIDw9IDB4RkVGRixcbiAgICAnSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZGMDAgJiYgY2hhciA8PSAweEZGRUZcbiAgICAvLyAnU3BlY2lhbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZGRjAgJiYgY2hhciA8PSAweEZGRkYsXG4gICAgLy8gJ0xpbmVhciBCIFN5bGxhYmFyeSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAwMDAgJiYgY2hhciA8PSAweDEwMDdGLFxuICAgIC8vICdMaW5lYXIgQiBJZGVvZ3JhbXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMDgwICYmIGNoYXIgPD0gMHgxMDBGRixcbiAgICAvLyAnQWVnZWFuIE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMTAwICYmIGNoYXIgPD0gMHgxMDEzRixcbiAgICAvLyAnQW5jaWVudCBHcmVlayBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDE0MCAmJiBjaGFyIDw9IDB4MTAxOEYsXG4gICAgLy8gJ0FuY2llbnQgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAxOTAgJiYgY2hhciA8PSAweDEwMUNGLFxuICAgIC8vICdQaGFpc3RvcyBEaXNjJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDFEMCAmJiBjaGFyIDw9IDB4MTAxRkYsXG4gICAgLy8gJ0x5Y2lhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTAyODAgJiYgY2hhciA8PSAweDEwMjlGLFxuICAgIC8vICdDYXJpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMkEwICYmIGNoYXIgPD0gMHgxMDJERixcbiAgICAvLyAnQ29wdGljIEVwYWN0IE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMkUwICYmIGNoYXIgPD0gMHgxMDJGRixcbiAgICAvLyAnT2xkIEl0YWxpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAzMDAgJiYgY2hhciA8PSAweDEwMzJGLFxuICAgIC8vICdHb3RoaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMzMwICYmIGNoYXIgPD0gMHgxMDM0RixcbiAgICAvLyAnT2xkIFBlcm1pYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAzNTAgJiYgY2hhciA8PSAweDEwMzdGLFxuICAgIC8vICdVZ2FyaXRpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAzODAgJiYgY2hhciA8PSAweDEwMzlGLFxuICAgIC8vICdPbGQgUGVyc2lhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTAzQTAgJiYgY2hhciA8PSAweDEwM0RGLFxuICAgIC8vICdEZXNlcmV0JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDQwMCAmJiBjaGFyIDw9IDB4MTA0NEYsXG4gICAgLy8gJ1NoYXZpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNDUwICYmIGNoYXIgPD0gMHgxMDQ3RixcbiAgICAvLyAnT3NtYW55YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA0ODAgJiYgY2hhciA8PSAweDEwNEFGLFxuICAgIC8vICdPc2FnZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA0QjAgJiYgY2hhciA8PSAweDEwNEZGLFxuICAgIC8vICdFbGJhc2FuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDUwMCAmJiBjaGFyIDw9IDB4MTA1MkYsXG4gICAgLy8gJ0NhdWNhc2lhbiBBbGJhbmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA1MzAgJiYgY2hhciA8PSAweDEwNTZGLFxuICAgIC8vICdMaW5lYXIgQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA2MDAgJiYgY2hhciA8PSAweDEwNzdGLFxuICAgIC8vICdDeXByaW90IFN5bGxhYmFyeSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA4MDAgJiYgY2hhciA8PSAweDEwODNGLFxuICAgIC8vICdJbXBlcmlhbCBBcmFtYWljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDg0MCAmJiBjaGFyIDw9IDB4MTA4NUYsXG4gICAgLy8gJ1BhbG15cmVuZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA4NjAgJiYgY2hhciA8PSAweDEwODdGLFxuICAgIC8vICdOYWJhdGFlYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwODgwICYmIGNoYXIgPD0gMHgxMDhBRixcbiAgICAvLyAnSGF0cmFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDhFMCAmJiBjaGFyIDw9IDB4MTA4RkYsXG4gICAgLy8gJ1Bob2VuaWNpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwOTAwICYmIGNoYXIgPD0gMHgxMDkxRixcbiAgICAvLyAnTHlkaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDkyMCAmJiBjaGFyIDw9IDB4MTA5M0YsXG4gICAgLy8gJ01lcm9pdGljIEhpZXJvZ2x5cGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDk4MCAmJiBjaGFyIDw9IDB4MTA5OUYsXG4gICAgLy8gJ01lcm9pdGljIEN1cnNpdmUnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwOUEwICYmIGNoYXIgPD0gMHgxMDlGRixcbiAgICAvLyAnS2hhcm9zaHRoaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBBMDAgJiYgY2hhciA8PSAweDEwQTVGLFxuICAgIC8vICdPbGQgU291dGggQXJhYmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBBNjAgJiYgY2hhciA8PSAweDEwQTdGLFxuICAgIC8vICdPbGQgTm9ydGggQXJhYmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBBODAgJiYgY2hhciA8PSAweDEwQTlGLFxuICAgIC8vICdNYW5pY2hhZWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEFDMCAmJiBjaGFyIDw9IDB4MTBBRkYsXG4gICAgLy8gJ0F2ZXN0YW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQjAwICYmIGNoYXIgPD0gMHgxMEIzRixcbiAgICAvLyAnSW5zY3JpcHRpb25hbCBQYXJ0aGlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBCNDAgJiYgY2hhciA8PSAweDEwQjVGLFxuICAgIC8vICdJbnNjcmlwdGlvbmFsIFBhaGxhdmknOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQjYwICYmIGNoYXIgPD0gMHgxMEI3RixcbiAgICAvLyAnUHNhbHRlciBQYWhsYXZpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEI4MCAmJiBjaGFyIDw9IDB4MTBCQUYsXG4gICAgLy8gJ09sZCBUdXJraWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQzAwICYmIGNoYXIgPD0gMHgxMEM0RixcbiAgICAvLyAnT2xkIEh1bmdhcmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBDODAgJiYgY2hhciA8PSAweDEwQ0ZGLFxuICAgIC8vICdIYW5pZmkgUm9oaW5neWEnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwRDAwICYmIGNoYXIgPD0gMHgxMEQzRixcbiAgICAvLyAnUnVtaSBOdW1lcmFsIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwRTYwICYmIGNoYXIgPD0gMHgxMEU3RixcbiAgICAvLyAnT2xkIFNvZ2RpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwRjAwICYmIGNoYXIgPD0gMHgxMEYyRixcbiAgICAvLyAnU29nZGlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBGMzAgJiYgY2hhciA8PSAweDEwRjZGLFxuICAgIC8vICdFbHltYWljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEZFMCAmJiBjaGFyIDw9IDB4MTBGRkYsXG4gICAgLy8gJ0JyYWhtaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEwMDAgJiYgY2hhciA8PSAweDExMDdGLFxuICAgIC8vICdLYWl0aGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExMDgwICYmIGNoYXIgPD0gMHgxMTBDRixcbiAgICAvLyAnU29yYSBTb21wZW5nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTBEMCAmJiBjaGFyIDw9IDB4MTEwRkYsXG4gICAgLy8gJ0NoYWttYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTExMDAgJiYgY2hhciA8PSAweDExMTRGLFxuICAgIC8vICdNYWhhamFuaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTExNTAgJiYgY2hhciA8PSAweDExMTdGLFxuICAgIC8vICdTaGFyYWRhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTE4MCAmJiBjaGFyIDw9IDB4MTExREYsXG4gICAgLy8gJ1NpbmhhbGEgQXJjaGFpYyBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTFFMCAmJiBjaGFyIDw9IDB4MTExRkYsXG4gICAgLy8gJ0tob2praSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEyMDAgJiYgY2hhciA8PSAweDExMjRGLFxuICAgIC8vICdNdWx0YW5pJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTI4MCAmJiBjaGFyIDw9IDB4MTEyQUYsXG4gICAgLy8gJ0todWRhd2FkaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEyQjAgJiYgY2hhciA8PSAweDExMkZGLFxuICAgIC8vICdHcmFudGhhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTMwMCAmJiBjaGFyIDw9IDB4MTEzN0YsXG4gICAgLy8gJ05ld2EnOiAoY2hhcikgPT4gY2hhciA+PSAweDExNDAwICYmIGNoYXIgPD0gMHgxMTQ3RixcbiAgICAvLyAnVGlyaHV0YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE0ODAgJiYgY2hhciA8PSAweDExNERGLFxuICAgIC8vICdTaWRkaGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTU4MCAmJiBjaGFyIDw9IDB4MTE1RkYsXG4gICAgLy8gJ01vZGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExNjAwICYmIGNoYXIgPD0gMHgxMTY1RixcbiAgICAvLyAnTW9uZ29saWFuIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDExNjYwICYmIGNoYXIgPD0gMHgxMTY3RixcbiAgICAvLyAnVGFrcmknOiAoY2hhcikgPT4gY2hhciA+PSAweDExNjgwICYmIGNoYXIgPD0gMHgxMTZDRixcbiAgICAvLyAnQWhvbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE3MDAgJiYgY2hhciA8PSAweDExNzNGLFxuICAgIC8vICdEb2dyYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE4MDAgJiYgY2hhciA8PSAweDExODRGLFxuICAgIC8vICdXYXJhbmcgQ2l0aSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE4QTAgJiYgY2hhciA8PSAweDExOEZGLFxuICAgIC8vICdOYW5kaW5hZ2FyaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE5QTAgJiYgY2hhciA8PSAweDExOUZGLFxuICAgIC8vICdaYW5hYmF6YXIgU3F1YXJlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUEwMCAmJiBjaGFyIDw9IDB4MTFBNEYsXG4gICAgLy8gJ1NveW9tYm8nOiAoY2hhcikgPT4gY2hhciA+PSAweDExQTUwICYmIGNoYXIgPD0gMHgxMUFBRixcbiAgICAvLyAnUGF1IENpbiBIYXUnOiAoY2hhcikgPT4gY2hhciA+PSAweDExQUMwICYmIGNoYXIgPD0gMHgxMUFGRixcbiAgICAvLyAnQmhhaWtzdWtpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUMwMCAmJiBjaGFyIDw9IDB4MTFDNkYsXG4gICAgLy8gJ01hcmNoZW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDExQzcwICYmIGNoYXIgPD0gMHgxMUNCRixcbiAgICAvLyAnTWFzYXJhbSBHb25kaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFEMDAgJiYgY2hhciA8PSAweDExRDVGLFxuICAgIC8vICdHdW5qYWxhIEdvbmRpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUQ2MCAmJiBjaGFyIDw9IDB4MTFEQUYsXG4gICAgLy8gJ01ha2FzYXInOiAoY2hhcikgPT4gY2hhciA+PSAweDExRUUwICYmIGNoYXIgPD0gMHgxMUVGRixcbiAgICAvLyAnVGFtaWwgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFGQzAgJiYgY2hhciA8PSAweDExRkZGLFxuICAgIC8vICdDdW5laWZvcm0nOiAoY2hhcikgPT4gY2hhciA+PSAweDEyMDAwICYmIGNoYXIgPD0gMHgxMjNGRixcbiAgICAvLyAnQ3VuZWlmb3JtIE51bWJlcnMgYW5kIFB1bmN0dWF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMjQwMCAmJiBjaGFyIDw9IDB4MTI0N0YsXG4gICAgLy8gJ0Vhcmx5IER5bmFzdGljIEN1bmVpZm9ybSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTI0ODAgJiYgY2hhciA8PSAweDEyNTRGLFxuICAgIC8vICdFZ3lwdGlhbiBIaWVyb2dseXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTMwMDAgJiYgY2hhciA8PSAweDEzNDJGLFxuICAgIC8vICdFZ3lwdGlhbiBIaWVyb2dseXBoIEZvcm1hdCBDb250cm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTM0MzAgJiYgY2hhciA8PSAweDEzNDNGLFxuICAgIC8vICdBbmF0b2xpYW4gSGllcm9nbHlwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDE0NDAwICYmIGNoYXIgPD0gMHgxNDY3RixcbiAgICAvLyAnQmFtdW0gU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTY4MDAgJiYgY2hhciA8PSAweDE2QTNGLFxuICAgIC8vICdNcm8nOiAoY2hhcikgPT4gY2hhciA+PSAweDE2QTQwICYmIGNoYXIgPD0gMHgxNkE2RixcbiAgICAvLyAnQmFzc2EgVmFoJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkFEMCAmJiBjaGFyIDw9IDB4MTZBRkYsXG4gICAgLy8gJ1BhaGF3aCBIbW9uZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTZCMDAgJiYgY2hhciA8PSAweDE2QjhGLFxuICAgIC8vICdNZWRlZmFpZHJpbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTZFNDAgJiYgY2hhciA8PSAweDE2RTlGLFxuICAgIC8vICdNaWFvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkYwMCAmJiBjaGFyIDw9IDB4MTZGOUYsXG4gICAgLy8gJ0lkZW9ncmFwaGljIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkZFMCAmJiBjaGFyIDw9IDB4MTZGRkYsXG4gICAgLy8gJ1Rhbmd1dCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTcwMDAgJiYgY2hhciA8PSAweDE4N0ZGLFxuICAgIC8vICdUYW5ndXQgQ29tcG9uZW50cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTg4MDAgJiYgY2hhciA8PSAweDE4QUZGLFxuICAgIC8vICdLYW5hIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCMDAwICYmIGNoYXIgPD0gMHgxQjBGRixcbiAgICAvLyAnS2FuYSBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjEwMCAmJiBjaGFyIDw9IDB4MUIxMkYsXG4gICAgLy8gJ1NtYWxsIEthbmEgRXh0ZW5zaW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjEzMCAmJiBjaGFyIDw9IDB4MUIxNkYsXG4gICAgLy8gJ051c2h1JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjE3MCAmJiBjaGFyIDw9IDB4MUIyRkYsXG4gICAgLy8gJ0R1cGxveWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQkMwMCAmJiBjaGFyIDw9IDB4MUJDOUYsXG4gICAgLy8gJ1Nob3J0aGFuZCBGb3JtYXQgQ29udHJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCQ0EwICYmIGNoYXIgPD0gMHgxQkNBRixcbiAgICAvLyAnQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQwMDAgJiYgY2hhciA8PSAweDFEMEZGLFxuICAgIC8vICdNdXNpY2FsIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMTAwICYmIGNoYXIgPD0gMHgxRDFGRixcbiAgICAvLyAnQW5jaWVudCBHcmVlayBNdXNpY2FsIE5vdGF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDIwMCAmJiBjaGFyIDw9IDB4MUQyNEYsXG4gICAgLy8gJ01heWFuIE51bWVyYWxzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDJFMCAmJiBjaGFyIDw9IDB4MUQyRkYsXG4gICAgLy8gJ1RhaSBYdWFuIEppbmcgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQzMDAgJiYgY2hhciA8PSAweDFEMzVGLFxuICAgIC8vICdDb3VudGluZyBSb2QgTnVtZXJhbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMzYwICYmIGNoYXIgPD0gMHgxRDM3RixcbiAgICAvLyAnTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDQwMCAmJiBjaGFyIDw9IDB4MUQ3RkYsXG4gICAgLy8gJ1N1dHRvbiBTaWduV3JpdGluZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQ4MDAgJiYgY2hhciA8PSAweDFEQUFGLFxuICAgIC8vICdHbGFnb2xpdGljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFMDAwICYmIGNoYXIgPD0gMHgxRTAyRixcbiAgICAvLyAnTnlpYWtlbmcgUHVhY2h1ZSBIbW9uZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUUxMDAgJiYgY2hhciA8PSAweDFFMTRGLFxuICAgIC8vICdXYW5jaG8nOiAoY2hhcikgPT4gY2hhciA+PSAweDFFMkMwICYmIGNoYXIgPD0gMHgxRTJGRixcbiAgICAvLyAnTWVuZGUgS2lrYWt1aSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUU4MDAgJiYgY2hhciA8PSAweDFFOERGLFxuICAgIC8vICdBZGxhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUU5MDAgJiYgY2hhciA8PSAweDFFOTVGLFxuICAgIC8vICdJbmRpYyBTaXlhcSBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRUM3MCAmJiBjaGFyIDw9IDB4MUVDQkYsXG4gICAgLy8gJ090dG9tYW4gU2l5YXEgTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUVEMDAgJiYgY2hhciA8PSAweDFFRDRGLFxuICAgIC8vICdBcmFiaWMgTWF0aGVtYXRpY2FsIEFscGhhYmV0aWMgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUVFMDAgJiYgY2hhciA8PSAweDFFRUZGLFxuICAgIC8vICdNYWhqb25nIFRpbGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjAwMCAmJiBjaGFyIDw9IDB4MUYwMkYsXG4gICAgLy8gJ0RvbWlubyBUaWxlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYwMzAgJiYgY2hhciA8PSAweDFGMDlGLFxuICAgIC8vICdQbGF5aW5nIENhcmRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjBBMCAmJiBjaGFyIDw9IDB4MUYwRkYsXG4gICAgLy8gJ0VuY2xvc2VkIEFscGhhbnVtZXJpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjEwMCAmJiBjaGFyIDw9IDB4MUYxRkYsXG4gICAgLy8gJ0VuY2xvc2VkIElkZW9ncmFwaGljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMjAwICYmIGNoYXIgPD0gMHgxRjJGRixcbiAgICAvLyAnTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBQaWN0b2dyYXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYzMDAgJiYgY2hhciA8PSAweDFGNUZGLFxuICAgIC8vICdFbW90aWNvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGNjAwICYmIGNoYXIgPD0gMHgxRjY0RixcbiAgICAvLyAnT3JuYW1lbnRhbCBEaW5nYmF0cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY2NTAgJiYgY2hhciA8PSAweDFGNjdGLFxuICAgIC8vICdUcmFuc3BvcnQgYW5kIE1hcCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjY4MCAmJiBjaGFyIDw9IDB4MUY2RkYsXG4gICAgLy8gJ0FsY2hlbWljYWwgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY3MDAgJiYgY2hhciA8PSAweDFGNzdGLFxuICAgIC8vICdHZW9tZXRyaWMgU2hhcGVzIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjc4MCAmJiBjaGFyIDw9IDB4MUY3RkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBBcnJvd3MtQyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY4MDAgJiYgY2hhciA8PSAweDFGOEZGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgU3ltYm9scyBhbmQgUGljdG9ncmFwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGOTAwICYmIGNoYXIgPD0gMHgxRjlGRixcbiAgICAvLyAnQ2hlc3MgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUZBMDAgJiYgY2hhciA8PSAweDFGQTZGLFxuICAgIC8vICdTeW1ib2xzIGFuZCBQaWN0b2dyYXBocyBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRkE3MCAmJiBjaGFyIDw9IDB4MUZBRkYsXG4gICAgLy8gJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEInOiAoY2hhcikgPT4gY2hhciA+PSAweDIwMDAwICYmIGNoYXIgPD0gMHgyQTZERixcbiAgICAvLyAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkE3MDAgJiYgY2hhciA8PSAweDJCNzNGLFxuICAgIC8vICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBEJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQjc0MCAmJiBjaGFyIDw9IDB4MkI4MUYsXG4gICAgLy8gJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEUnOiAoY2hhcikgPT4gY2hhciA+PSAweDJCODIwICYmIGNoYXIgPD0gMHgyQ0VBRixcbiAgICAvLyAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRic6IChjaGFyKSA9PiBjaGFyID49IDB4MkNFQjAgJiYgY2hhciA8PSAweDJFQkVGLFxuICAgIC8vICdDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDJGODAwICYmIGNoYXIgPD0gMHgyRkExRixcbiAgICAvLyAnVGFncyc6IChjaGFyKSA9PiBjaGFyID49IDB4RTAwMDAgJiYgY2hhciA8PSAweEUwMDdGLFxuICAgIC8vICdWYXJpYXRpb24gU2VsZWN0b3JzIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweEUwMTAwICYmIGNoYXIgPD0gMHhFMDFFRixcbiAgICAvLyAnU3VwcGxlbWVudGFyeSBQcml2YXRlIFVzZSBBcmVhLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweEYwMDAwICYmIGNoYXIgPD0gMHhGRkZGRixcbiAgICAvLyAnU3VwcGxlbWVudGFyeSBQcml2YXRlIFVzZSBBcmVhLUInOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMDAwMCAmJiBjaGFyIDw9IDB4MTBGRkZGLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdW5pY29kZUJsb2NrTG9va3VwO1xuIiwiLy8gQGZsb3dcblxuLyogZXNsaW50LWRpc2FibGUgbmV3LWNhcCAqL1xuXG5pbXBvcnQgaXNDaGFyIGZyb20gJy4vaXNfY2hhcl9pbl91bmljb2RlX2Jsb2NrJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcoY2hhcnM6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgICBpZiAoIWNoYXJBbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nKGNoYXIuY2hhckNvZGVBdCgwKSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlKGNoYXJzOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgY2hhcnMpIHtcbiAgICAgICAgaWYgKGNoYXJIYXNVcHJpZ2h0VmVydGljYWxPcmllbnRhdGlvbihjaGFyLmNoYXJDb2RlQXQoMCkpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dzTGV0dGVyU3BhY2luZyhjaGFyczogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgIGlmICghY2hhckFsbG93c0xldHRlclNwYWNpbmcoY2hhci5jaGFyQ29kZUF0KDApKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJBbGxvd3NMZXR0ZXJTcGFjaW5nKGNoYXI6IG51bWJlcikge1xuICAgIGlmIChpc0NoYXJbJ0FyYWJpYyddKGNoYXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGlzQ2hhclsnQXJhYmljIFN1cHBsZW1lbnQnXShjaGFyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc0NoYXJbJ0FyYWJpYyBFeHRlbmRlZC1BJ10oY2hhcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEnXShjaGFyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiddKGNoYXIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJBbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nKGNoYXI6IG51bWJlcikge1xuICAgIC8vIFJldHVybiBlYXJseSBmb3IgY2hhcmFjdGVycyBvdXRzaWRlIGFsbCBpZGVvZ3JhcGhpYyByYW5nZXMuXG4gICAgaWYgKGNoYXIgPCAweDJFODApIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChpc0NoYXJbJ0JvcG9tb2ZvIEV4dGVuZGVkJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0JvcG9tb2ZvJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5IEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHknXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFN0cm9rZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hpcmFnYW5hJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0lkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2FuZ3hpIFJhZGljYWxzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2F0YWthbmEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnVmVydGljYWwgRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnWWkgUmFkaWNhbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnWWkgU3lsbGFibGVzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBUaGUgZm9sbG93aW5nIGxvZ2ljIGNvbWVzIGZyb21cbi8vIDxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8xMi4wLjAvdWNkL1ZlcnRpY2FsT3JpZW50YXRpb24udHh0Pi5cbi8vIEtlZXAgaXQgc3luY2hyb25pemVkIHdpdGhcbi8vIDxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9VQ0QvbGF0ZXN0L3VjZC9WZXJ0aWNhbE9yaWVudGF0aW9uLnR4dD4uXG4vLyBUaGUgZGF0YSBmaWxlIGRlbm90ZXMgd2l0aCDDosKAwpxVw6LCgMKdIG9yIMOiwoDCnFR1w6LCgMKdIGFueSBjb2RlcG9pbnQgdGhhdCBtYXkgYmUgZHJhd25cbi8vIHVwcmlnaHQgaW4gdmVydGljYWwgdGV4dCBidXQgZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB1cHJpZ2h0IGFuZFxuLy8gw6LCgMKcbmV1dHJhbMOiwoDCnSBjaGFyYWN0ZXJzLlxuXG4vLyBCbG9ja3MgaW4gdGhlIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBwbGFuZXMgYXJlIGV4Y2x1ZGVkIGZyb20gdGhpcyBtb2R1bGUgZHVlXG4vLyB0byA8aHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wvaXNzdWVzLzI5Pi5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIFVuaWNvZGUgY29kZXBvaW50IGlkZW50aWZpZXMgYSBjaGFyYWN0ZXIgd2l0aFxuICogdXByaWdodCBvcmllbnRhdGlvbi5cbiAqXG4gKiBBIGNoYXJhY3RlciBoYXMgdXByaWdodCBvcmllbnRhdGlvbiBpZiBpdCBpcyBkcmF3biB1cHJpZ2h0ICh1bnJvdGF0ZWQpXG4gKiB3aGV0aGVyIHRoZSBsaW5lIGlzIG9yaWVudGVkIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5LCBldmVuIGlmIGJvdGhcbiAqIGFkamFjZW50IGNoYXJhY3RlcnMgY2FuIGJlIHJvdGF0ZWQuIEZvciBleGFtcGxlLCBhIENoaW5lc2UgY2hhcmFjdGVyIGlzXG4gKiBhbHdheXMgZHJhd24gdXByaWdodC4gQW4gdXByaWdodGx5IG9yaWVudGVkIGNoYXJhY3RlciBjYXVzZXMgYW4gYWRqYWNlbnRcbiAqIMOiwoDCnG5ldXRyYWzDosKAwp0gY2hhcmFjdGVyIHRvIGJlIGRyYXduIHVwcmlnaHQgYXMgd2VsbC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFySGFzVXByaWdodFZlcnRpY2FsT3JpZW50YXRpb24oY2hhcjogbnVtYmVyKSB7XG4gICAgaWYgKGNoYXIgPT09IDB4MDJFQSAvKiBtb2RpZmllciBsZXR0ZXIgeWluIGRlcGFydGluZyB0b25lIG1hcmsgKi8gfHxcbiAgICAgICAgY2hhciA9PT0gMHgwMkVCIC8qIG1vZGlmaWVyIGxldHRlciB5YW5nIGRlcGFydGluZyB0b25lIG1hcmsgKi8pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGVhcmx5IGZvciBjaGFyYWN0ZXJzIG91dHNpZGUgYWxsIHJhbmdlcyB3aG9zZSBjaGFyYWN0ZXJzIHJlbWFpblxuICAgIC8vIHVwcmlnaHQgaW4gdmVydGljYWwgd3JpdGluZyBtb2RlLlxuICAgIGlmIChjaGFyIDwgMHgxMTAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoaXNDaGFyWydCb3BvbW9mbyBFeHRlbmRlZCddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydCb3BvbW9mbyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyddKGNoYXIpKSB7XG4gICAgICAgIGlmICghKChjaGFyID49IDB4RkU0OSAvKiBkYXNoZWQgb3ZlcmxpbmUgKi8gJiYgY2hhciA8PSAweEZFNEYpIC8qIHdhdnkgbG93IGxpbmUgKi8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5J10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBSYWRpY2FscyBTdXBwbGVtZW50J10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBTdHJva2VzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiddKGNoYXIpKSB7XG4gICAgICAgIGlmICghKChjaGFyID49IDB4MzAwOCAvKiBsZWZ0IGFuZ2xlIGJyYWNrZXQgKi8gJiYgY2hhciA8PSAweDMwMTEpIC8qIHJpZ2h0IGJsYWNrIGxlbnRpY3VsYXIgYnJhY2tldCAqLykgJiZcbiAgICAgICAgICAgICEoKGNoYXIgPj0gMHgzMDE0IC8qIGxlZnQgdG9ydG9pc2Ugc2hlbGwgYnJhY2tldCAqLyAmJiBjaGFyIDw9IDB4MzAxRikgLyogbG93IGRvdWJsZSBwcmltZSBxdW90YXRpb24gbWFyayAqLykgJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4MzAzMCAvKiB3YXZ5IGRhc2ggKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYW5ndWwgSmFtbyBFeHRlbmRlZC1CJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbmd1bCBKYW1vJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbmd1bCBTeWxsYWJsZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGlyYWdhbmEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYW5idW4nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2FuZ3hpIFJhZGljYWxzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2F0YWthbmEnXShjaGFyKSkge1xuICAgICAgICBpZiAoY2hhciAhPT0gMHgzMEZDIC8qIGthdGFrYW5hLWhpcmFnYW5hIHByb2xvbmdlZCBzb3VuZCBtYXJrICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyddKGNoYXIpKSB7XG4gICAgICAgIGlmIChjaGFyICE9PSAweEZGMDggLyogZnVsbHdpZHRoIGxlZnQgcGFyZW50aGVzaXMgKi8gJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkYwOSAvKiBmdWxsd2lkdGggcmlnaHQgcGFyZW50aGVzaXMgKi8gJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkYwRCAvKiBmdWxsd2lkdGggaHlwaGVuLW1pbnVzICovICYmXG4gICAgICAgICAgICAhKChjaGFyID49IDB4RkYxQSAvKiBmdWxsd2lkdGggY29sb24gKi8gJiYgY2hhciA8PSAweEZGMUUpIC8qIGZ1bGx3aWR0aCBncmVhdGVyLXRoYW4gc2lnbiAqLykgJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkYzQiAvKiBmdWxsd2lkdGggbGVmdCBzcXVhcmUgYnJhY2tldCAqLyAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRjNEIC8qIGZ1bGx3aWR0aCByaWdodCBzcXVhcmUgYnJhY2tldCAqLyAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRjNGIC8qIGZ1bGx3aWR0aCBsb3cgbGluZSAqLyAmJlxuICAgICAgICAgICAgIShjaGFyID49IDB4RkY1QiAvKiBmdWxsd2lkdGggbGVmdCBjdXJseSBicmFja2V0ICovICYmIGNoYXIgPD0gMHhGRkRGKSAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRkUzIC8qIGZ1bGx3aWR0aCBtYWNyb24gKi8gJiZcbiAgICAgICAgICAgICEoY2hhciA+PSAweEZGRTggLyogaGFsZndpZHRoIGZvcm1zIGxpZ2h0IHZlcnRpY2FsICovICYmIGNoYXIgPD0gMHhGRkVGKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnU21hbGwgRm9ybSBWYXJpYW50cyddKGNoYXIpKSB7XG4gICAgICAgIGlmICghKChjaGFyID49IDB4RkU1OCAvKiBzbWFsbCBlbSBkYXNoICovICYmIGNoYXIgPD0gMHhGRTVFKSAvKiBzbWFsbCByaWdodCB0b3J0b2lzZSBzaGVsbCBicmFja2V0ICovKSAmJlxuICAgICAgICAgICAgISgoY2hhciA+PSAweEZFNjMgLyogc21hbGwgaHlwaGVuLW1pbnVzICovICYmIGNoYXIgPD0gMHhGRTY2KSAvKiBzbWFsbCBlcXVhbHMgc2lnbiAqLykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ1VuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydWZXJ0aWNhbCBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydZaWppbmcgSGV4YWdyYW0gU3ltYm9scyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydZaSBTeWxsYWJsZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnWWkgUmFkaWNhbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBVbmljb2RlIGNvZGVwb2ludCBpZGVudGlmaWVzIGEgY2hhcmFjdGVyIHdpdGhcbiAqIG5ldXRyYWwgb3JpZW50YXRpb24uXG4gKlxuICogQSBjaGFyYWN0ZXIgaGFzIG5ldXRyYWwgb3JpZW50YXRpb24gaWYgaXQgbWF5IGJlIGRyYXduIHJvdGF0ZWQgb3IgdW5yb3RhdGVkXG4gKiB3aGVuIHRoZSBsaW5lIGlzIG9yaWVudGVkIHZlcnRpY2FsbHksIGRlcGVuZGluZyBvbiB0aGUgb3JpZW50YXRpb24gb2YgdGhlXG4gKiBhZGphY2VudCBjaGFyYWN0ZXJzLiBGb3IgZXhhbXBsZSwgYWxvbmcgYSB2ZXJ0aWNsbHkgb3JpZW50ZWQgbGluZSwgdGhlIHZ1bGdhclxuICogZnJhY3Rpb24gw4LCvSBpcyBkcmF3biB1cHJpZ2h0IGFtb25nIENoaW5lc2UgY2hhcmFjdGVycyBidXQgcm90YXRlZCBhbW9uZyBMYXRpblxuICogbGV0dGVycy4gQSBuZXV0cmFsbHkgb3JpZW50ZWQgY2hhcmFjdGVyIGRvZXMgbm90IGluZmx1ZW5jZSB3aGV0aGVyIGFuXG4gKiBhZGphY2VudCBjaGFyYWN0ZXIgaXMgZHJhd24gdXByaWdodCBvciByb3RhdGVkLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJIYXNOZXV0cmFsVmVydGljYWxPcmllbnRhdGlvbihjaGFyOiBudW1iZXIpIHtcbiAgICBpZiAoaXNDaGFyWydMYXRpbi0xIFN1cHBsZW1lbnQnXShjaGFyKSkge1xuICAgICAgICBpZiAoY2hhciA9PT0gMHgwMEE3IC8qIHNlY3Rpb24gc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEE5IC8qIGNvcHlyaWdodCBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQUUgLyogcmVnaXN0ZXJlZCBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQjEgLyogcGx1cy1taW51cyBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQkMgLyogdnVsZ2FyIGZyYWN0aW9uIG9uZSBxdWFydGVyICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQkQgLyogdnVsZ2FyIGZyYWN0aW9uIG9uZSBoYWxmICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQkUgLyogdnVsZ2FyIGZyYWN0aW9uIHRocmVlIHF1YXJ0ZXJzICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwRDcgLyogbXVsdGlwbGljYXRpb24gc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEY3IC8qIGRpdmlzaW9uIHNpZ24gKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0dlbmVyYWwgUHVuY3R1YXRpb24nXShjaGFyKSkge1xuICAgICAgICBpZiAoY2hhciA9PT0gMHgyMDE2IC8qIGRvdWJsZSB2ZXJ0aWNhbCBsaW5lICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwMjAgLyogZGFnZ2VyICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwMjEgLyogZG91YmxlIGRhZ2dlciAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDMwIC8qIHBlciBtaWxsZSBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwMzEgLyogcGVyIHRlbiB0aG91c2FuZCBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwM0IgLyogcmVmZXJlbmNlIG1hcmsgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAzQyAvKiBkb3VibGUgZXhjbGFtYXRpb24gbWFyayAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDQyIC8qIGFzdGVyaXNtICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwNDcgLyogZG91YmxlIHF1ZXN0aW9uIG1hcmsgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjA0OCAvKiBxdWVzdGlvbiBleGNsYW1hdGlvbiBtYXJrICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwNDkgLyogZXhjbGFtYXRpb24gcXVlc3Rpb24gbWFyayAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDUxIC8qIHR3byBhc3Rlcmlza3MgYWxpZ25lZCB2ZXJ0aWNhbGx5ICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydMZXR0ZXJsaWtlIFN5bWJvbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnTnVtYmVyIEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ01pc2NlbGxhbmVvdXMgVGVjaG5pY2FsJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKChjaGFyID49IDB4MjMwMCAvKiBkaWFtZXRlciBzaWduICovICYmIGNoYXIgPD0gMHgyMzA3IC8qIHdhdnkgbGluZSAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjMwQyAvKiBib3R0b20gcmlnaHQgY3JvcCAqLyAmJiBjaGFyIDw9IDB4MjMxRiAvKiBib3R0b20gcmlnaHQgY29ybmVyICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyMzI0IC8qIHVwIGFycm93aGVhZCBiZXR3ZWVuIHR3byBob3Jpem9udGFsIGJhcnMgKi8gJiYgY2hhciA8PSAweDIzMjggLyoga2V5Ym9hcmQgKi8pIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIzMkIgLyogZXJhc2UgdG8gdGhlIGxlZnQgKi8gfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjM3RCAvKiBzaG91bGRlcmVkIG9wZW4gYm94ICovICYmIGNoYXIgPD0gMHgyMzlBIC8qIGNsZWFyIHNjcmVlbiBzeW1ib2wgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzQkUgLyogZGVudGlzdHJ5IHN5bWJvbCBsaWdodCB2ZXJ0aWNhbCBhbmQgdG9wIHJpZ2h0ICovICYmIGNoYXIgPD0gMHgyM0NEIC8qIHNxdWFyZSBmb290ICovKSB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyM0NGIC8qIGVqZWN0IHN5bWJvbCAqLyB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyM0QxIC8qIG1ldHJpY2FsIGJyZXZlICovICYmIGNoYXIgPD0gMHgyM0RCIC8qIGZ1c2UgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzRTIgLyogd2hpdGUgdHJhcGV6aXVtICovICYmIGNoYXIgPD0gMHgyM0ZGKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnQ29udHJvbCBQaWN0dXJlcyddKGNoYXIpICYmIGNoYXIgIT09IDB4MjQyMyAvKiBvcGVuIGJveCAqLykgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnRW5jbG9zZWQgQWxwaGFudW1lcmljcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydHZW9tZXRyaWMgU2hhcGVzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ01pc2NlbGxhbmVvdXMgU3ltYm9scyddKGNoYXIpKSB7XG4gICAgICAgIGlmICghKChjaGFyID49IDB4MjYxQSAvKiBibGFjayBsZWZ0IHBvaW50aW5nIGluZGV4ICovICYmIGNoYXIgPD0gMHgyNjFGKSAvKiB3aGl0ZSBkb3duIHBvaW50aW5nIGluZGV4ICovKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MnXShjaGFyKSkge1xuICAgICAgICBpZiAoKGNoYXIgPj0gMHgyQjEyIC8qIHNxdWFyZSB3aXRoIHRvcCBoYWxmIGJsYWNrICovICYmIGNoYXIgPD0gMHgyQjJGIC8qIHdoaXRlIHZlcnRpY2FsIGVsbGlwc2UgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDJCNTAgLyogd2hpdGUgbWVkaXVtIHN0YXIgKi8gJiYgY2hhciA8PSAweDJCNTkgLyogaGVhdnkgY2lyY2xlZCBzYWx0aXJlICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyQkI4IC8qIHVwd2FyZHMgd2hpdGUgYXJyb3cgZnJvbSBiYXIgd2l0aCBob3Jpem9udGFsIGJhciAqLyAmJiBjaGFyIDw9IDB4MkJFQikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0NKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYXRha2FuYSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydQcml2YXRlIFVzZSBBcmVhJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5IEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1NtYWxsIEZvcm0gVmFyaWFudHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAoY2hhciA9PT0gMHgyMjFFIC8qIGluZmluaXR5ICovIHx8XG4gICAgICAgIGNoYXIgPT09IDB4MjIzNCAvKiB0aGVyZWZvcmUgKi8gfHxcbiAgICAgICAgY2hhciA9PT0gMHgyMjM1IC8qIGJlY2F1c2UgKi8gfHxcbiAgICAgICAgKGNoYXIgPj0gMHgyNzAwIC8qIGJsYWNrIHNhZmV0eSBzY2lzc29ycyAqLyAmJiBjaGFyIDw9IDB4Mjc2NyAvKiByb3RhdGVkIGZsb3JhbCBoZWFydCBidWxsZXQgKi8pIHx8XG4gICAgICAgIChjaGFyID49IDB4Mjc3NiAvKiBkaW5nYmF0IG5lZ2F0aXZlIGNpcmNsZWQgZGlnaXQgb25lICovICYmIGNoYXIgPD0gMHgyNzkzIC8qIGRpbmdiYXQgbmVnYXRpdmUgY2lyY2xlZCBzYW5zLXNlcmlmIG51bWJlciB0ZW4gKi8pIHx8XG4gICAgICAgIGNoYXIgPT09IDB4RkZGQyAvKiBvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyICovIHx8XG4gICAgICAgIGNoYXIgPT09IDB4RkZGRCAvKiByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKi8pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gVW5pY29kZSBjb2RlcG9pbnQgaWRlbnRpZmllcyBhIGNoYXJhY3RlciB3aXRoXG4gKiByb3RhdGVkIG9yaWVudGF0aW9uLlxuICpcbiAqIEEgY2hhcmFjdGVyIGhhcyByb3RhdGVkIG9yaWVudGF0aW9uIGlmIGl0IGlzIGRyYXduIHJvdGF0ZWQgd2hlbiB0aGUgbGluZSBpc1xuICogb3JpZW50ZWQgdmVydGljYWxseSwgZXZlbiBpZiBib3RoIGFkamFjZW50IGNoYXJhY3RlcnMgYXJlIHVwcmlnaHQuIEZvclxuICogZXhhbXBsZSwgYSBMYXRpbiBsZXR0ZXIgaXMgZHJhd24gcm90YXRlZCBhbG9uZyBhIHZlcnRpY2FsIGxpbmUuIEEgcm90YXRlZFxuICogY2hhcmFjdGVyIGNhdXNlcyBhbiBhZGphY2VudCDDosKAwpxuZXV0cmFsw6LCgMKdIGNoYXJhY3RlciB0byBiZSBkcmF3biByb3RhdGVkIGFzIHdlbGwuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhckhhc1JvdGF0ZWRWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXI6IG51bWJlcikge1xuICAgIHJldHVybiAhKGNoYXJIYXNVcHJpZ2h0VmVydGljYWxPcmllbnRhdGlvbihjaGFyKSB8fFxuICAgICAgICAgICAgIGNoYXJIYXNOZXV0cmFsVmVydGljYWxPcmllbnRhdGlvbihjaGFyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFySW5Db21wbGV4U2hhcGluZ1NjcmlwdChjaGFyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gaXNDaGFyWydBcmFiaWMnXShjaGFyKSB8fFxuICAgICAgICAgICBpc0NoYXJbJ0FyYWJpYyBTdXBwbGVtZW50J10oY2hhcikgfHxcbiAgICAgICAgICAgaXNDaGFyWydBcmFiaWMgRXh0ZW5kZWQtQSddKGNoYXIpIHx8XG4gICAgICAgICAgIGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BJ10oY2hhcikgfHxcbiAgICAgICAgICAgaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUInXShjaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJJblN1cHBvcnRlZFNjcmlwdChjaGFyOiBudW1iZXIsIGNhblJlbmRlclJUTDogYm9vbGVhbikge1xuICAgIC8vIFRoaXMgaXMgYSByb3VnaCBoZXVyaXN0aWM6IHdoZXRoZXIgd2UgXCJjYW4gcmVuZGVyXCIgYSBzY3JpcHRcbiAgICAvLyBhY3R1YWxseSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBmb250IGJlaW5nIHVzZWRcbiAgICAvLyBhbmQgd2hldGhlciBkaWZmZXJlbmNlcyBmcm9tIHRoZSBpZGVhbCByZW5kZXJpbmcgYXJlIGNvbnNpZGVyZWRcbiAgICAvLyBzZW1hbnRpY2FsbHkgc2lnbmlmaWNhbnQuXG5cbiAgICAvLyBFdmVuIGluIExhdGluIHNjcmlwdCwgd2UgXCJjYW4ndCByZW5kZXJcIiBjb21iaW5hdGlvbnMgc3VjaCBhcyB0aGUgZmlcbiAgICAvLyBsaWdhdHVyZSwgYnV0IHdlIGRvbid0IGNvbnNpZGVyIHRoYXQgc2VtYW50aWNhbGx5IHNpZ25pZmljYW50LlxuICAgIGlmICghY2FuUmVuZGVyUlRMICYmXG4gICAgICAgICgoY2hhciA+PSAweDA1OTAgJiYgY2hhciA8PSAweDA4RkYpIHx8XG4gICAgICAgICBpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSddKGNoYXIpIHx8XG4gICAgICAgICBpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiddKGNoYXIpKSkge1xuICAgICAgICAvLyBNYWluIGJsb2NrcyBmb3IgSGVicmV3LCBBcmFiaWMsIFRoYWFuYSBhbmQgb3RoZXIgUlRMIHNjcmlwdHNcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoKGNoYXIgPj0gMHgwOTAwICYmIGNoYXIgPD0gMHgwREZGKSB8fFxuICAgICAgICAvLyBNYWluIGJsb2NrcyBmb3IgSW5kaWMgc2NyaXB0cyBhbmQgU2luaGFsYVxuICAgICAgICAoY2hhciA+PSAweDBGMDAgJiYgY2hhciA8PSAweDEwOUYpIHx8XG4gICAgICAgIC8vIE1haW4gYmxvY2tzIGZvciBUaWJldGFuIGFuZCBNeWFubWFyXG4gICAgICAgIGlzQ2hhclsnS2htZXInXShjaGFyKSkge1xuICAgICAgICAvLyBUaGVzZSBibG9ja3MgY292ZXIgY29tbW9uIHNjcmlwdHMgdGhhdCByZXF1aXJlXG4gICAgICAgIC8vIGNvbXBsZXggdGV4dCBzaGFwaW5nLCBiYXNlZCBvbiB1bmljb2RlIHNjcmlwdCBtZXRhZGF0YTpcbiAgICAgICAgLy8gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcy9jbGRyL3RydW5rL2NvbW1vbi9wcm9wZXJ0aWVzL3NjcmlwdE1ldGFkYXRhLnR4dFxuICAgICAgICAvLyB3aGVyZSBcIldlYiBSYW5rIDw9IDMyXCIgXCJTaGFwaW5nIFJlcXVpcmVkID0gWUVTXCJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nSW5TdXBwb3J0ZWRTY3JpcHQoY2hhcnM6IHN0cmluZywgY2FuUmVuZGVyUlRMOiBib29sZWFuKSB7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgIGlmICghY2hhckluU3VwcG9ydGVkU2NyaXB0KGNoYXIuY2hhckNvZGVBdCgwKSwgY2FuUmVuZGVyUlRMKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5cbmNvbnN0IHN0YXR1cyA9IHtcbiAgICB1bmF2YWlsYWJsZTogJ3VuYXZhaWxhYmxlJyxcbiAgICBsb2FkaW5nOiAnbG9hZGluZycsXG4gICAgbG9hZGVkOiAnbG9hZGVkJyxcbiAgICBlcnJvcjogJ2Vycm9yJ1xufTtcbmxldCBwbHVnaW5TdGF0dXMgPSBzdGF0dXMudW5hdmFpbGFibGU7XG5sZXQgcGx1Z2luVVJMID0gbnVsbDtcblxuZXhwb3J0IGNvbnN0IGV2ZW50ZWQgPSBuZXcgRXZlbnRlZCgpO1xuXG50eXBlIENvbXBsZXRpb25DYWxsYmFjayA9IChlcnJvcj86IEVycm9yKSA9PiB2b2lkO1xudHlwZSBFcnJvckNhbGxiYWNrID0gKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcblxubGV0IF9jb21wbGV0aW9uQ2FsbGJhY2s7XG5cbmV4cG9ydCBjb25zdCBnZXRSVExUZXh0UGx1Z2luU3RhdHVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwbHVnaW5TdGF0dXM7XG59O1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHkgPSBmdW5jdGlvbihcbiAgICBjYWxsYmFjazogKGFyZ3M6IHtwbHVnaW5VUkw6IHN0cmluZywgY29tcGxldGlvbkNhbGxiYWNrOiBDb21wbGV0aW9uQ2FsbGJhY2t9KSA9PiB2b2lkXG4pIHtcbiAgICBpZiAocGx1Z2luVVJMKSB7XG4gICAgICAgIGNhbGxiYWNrKHtwbHVnaW5VUkwsIGNvbXBsZXRpb25DYWxsYmFjazogX2NvbXBsZXRpb25DYWxsYmFja30pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50ZWQub25jZSgncGx1Z2luQXZhaWxhYmxlJywgY2FsbGJhY2spO1xuICAgIH1cbiAgICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJSVExUZXh0UGx1Z2luID0gZnVuY3Rpb24oKSB7XG4gICAgcGx1Z2luU3RhdHVzID0gc3RhdHVzLnVuYXZhaWxhYmxlO1xuICAgIHBsdWdpblVSTCA9IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0UlRMVGV4dFBsdWdpbiA9IGZ1bmN0aW9uKHVybDogc3RyaW5nLCBjYWxsYmFjazogRXJyb3JDYWxsYmFjaykge1xuICAgIGlmIChwbHVnaW5TdGF0dXMgPT09IHN0YXR1cy5sb2FkaW5nIHx8IHBsdWdpblN0YXR1cyA9PT0gc3RhdHVzLmxvYWRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFJUTFRleHRQbHVnaW4gY2Fubm90IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4nKTtcbiAgICB9XG4gICAgcGx1Z2luU3RhdHVzID0gc3RhdHVzLmxvYWRpbmc7XG4gICAgcGx1Z2luVVJMID0gYnJvd3Nlci5yZXNvbHZlVVJMKHVybCk7XG4gICAgX2NvbXBsZXRpb25DYWxsYmFjayA9IChlcnJvcj86IEVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgLy8gQ2xlYXIgbG9hZGVkIHN0YXRlIHRvIGFsbG93IHJldHJpZXNcbiAgICAgICAgICAgIGNsZWFyUlRMVGV4dFBsdWdpbigpO1xuICAgICAgICAgICAgcGx1Z2luU3RhdHVzID0gc3RhdHVzLmVycm9yO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2FsbGVkIG9uY2UgZm9yIGVhY2ggd29ya2VyXG4gICAgICAgICAgICBwbHVnaW5TdGF0dXMgPSBzdGF0dXMubG9hZGVkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBldmVudGVkLmZpcmUobmV3IEV2ZW50KCdwbHVnaW5BdmFpbGFibGUnLCB7cGx1Z2luVVJMLCBjb21wbGV0aW9uQ2FsbGJhY2s6IF9jb21wbGV0aW9uQ2FsbGJhY2t9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGx1Z2luOiB7XG4gICAgYXBwbHlBcmFiaWNTaGFwaW5nOiA/RnVuY3Rpb24sXG4gICAgcHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0OiA/KHN0cmluZywgQXJyYXk8bnVtYmVyPikgPT4gQXJyYXk8c3RyaW5nPixcbiAgICBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ6ID8oc3RyaW5nLCBBcnJheTxudW1iZXI+LCBBcnJheTxudW1iZXI+KSA9PiBBcnJheTxbc3RyaW5nLCBBcnJheTxudW1iZXI+XT4sXG4gICAgaXNMb2FkZWQ6ICgpID0+IGJvb2xlYW5cbn0gPSB7XG4gICAgYXBwbHlBcmFiaWNTaGFwaW5nOiBudWxsLFxuICAgIHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDogbnVsbCxcbiAgICBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ6IG51bGwsXG4gICAgaXNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiBwbHVnaW5TdGF0dXMgPT09IHN0YXR1cy5sb2FkZWQgfHwgICAgICAgLy8gRm9yZWdyb3VuZDogbG9hZGVkIGlmIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIHJldHVybmVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICAgICAgcGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZyAhPSBudWxsOyAvLyBCYWNrZ3JvdW5kOiBsb2FkZWQgaWYgdGhlIHBsdWdpbiBmdW5jdGlvbnMgaGF2ZSBiZWVuIGNvbXBpbGVkXG4gICAgfVxufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBab29tSGlzdG9yeSBmcm9tICcuL3pvb21faGlzdG9yeSc7XG5pbXBvcnQge2lzU3RyaW5nSW5TdXBwb3J0ZWRTY3JpcHR9IGZyb20gJy4uL3V0aWwvc2NyaXB0X2RldGVjdGlvbic7XG5pbXBvcnQge3BsdWdpbiBhcyBydGxUZXh0UGx1Z2lufSBmcm9tICcuLi9zb3VyY2UvcnRsX3RleHRfcGx1Z2luJztcblxuaW1wb3J0IHR5cGUge1RyYW5zaXRpb25TcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgQ3Jvc3NmYWRlUGFyYW1ldGVycyA9IHtcbiAgICBmcm9tU2NhbGU6IG51bWJlcixcbiAgICB0b1NjYWxlOiBudW1iZXIsXG4gICAgdDogbnVtYmVyXG59O1xuXG5jbGFzcyBFdmFsdWF0aW9uUGFyYW1ldGVycyB7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG5vdzogbnVtYmVyO1xuICAgIGZhZGVEdXJhdGlvbjogbnVtYmVyO1xuICAgIHpvb21IaXN0b3J5OiBab29tSGlzdG9yeTtcbiAgICB0cmFuc2l0aW9uOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbjtcblxuICAgIC8vIFwib3B0aW9uc1wiIG1heSBhbHNvIGJlIGFub3RoZXIgRXZhbHVhdGlvblBhcmFtZXRlcnMgdG8gY29weSwgc2VlIENyb3NzRmFkZWRQcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlXG4gICAgY29uc3RydWN0b3Ioem9vbTogbnVtYmVyLCBvcHRpb25zPzogKikge1xuICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm5vdyA9IG9wdGlvbnMubm93O1xuICAgICAgICAgICAgdGhpcy5mYWRlRHVyYXRpb24gPSBvcHRpb25zLmZhZGVEdXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuem9vbUhpc3RvcnkgPSBvcHRpb25zLnpvb21IaXN0b3J5O1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uID0gb3B0aW9ucy50cmFuc2l0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3cgPSAwO1xuICAgICAgICAgICAgdGhpcy5mYWRlRHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgdGhpcy56b29tSGlzdG9yeSA9IG5ldyBab29tSGlzdG9yeSgpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uID0ge307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1N1cHBvcnRlZFNjcmlwdChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmdJblN1cHBvcnRlZFNjcmlwdChzdHIsIHJ0bFRleHRQbHVnaW4uaXNMb2FkZWQoKSk7XG4gICAgfVxuXG4gICAgY3Jvc3NGYWRpbmdGYWN0b3IoKSB7XG4gICAgICAgIGlmICh0aGlzLmZhZGVEdXJhdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oKHRoaXMubm93IC0gdGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb21UaW1lKSAvIHRoaXMuZmFkZUR1cmF0aW9uLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTogQ3Jvc3NmYWRlUGFyYW1ldGVycyB7XG4gICAgICAgIGNvbnN0IHogPSB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IGZyYWN0aW9uID0geiAtIE1hdGguZmxvb3Ioeik7XG4gICAgICAgIGNvbnN0IHQgPSB0aGlzLmNyb3NzRmFkaW5nRmFjdG9yKCk7XG5cbiAgICAgICAgcmV0dXJuIHogPiB0aGlzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbSA/XG4gICAgICAgICAgICB7ZnJvbVNjYWxlOiAyLCB0b1NjYWxlOiAxLCB0OiBmcmFjdGlvbiArICgxIC0gZnJhY3Rpb24pICogdH0gOlxuICAgICAgICAgICAge2Zyb21TY2FsZTogMC41LCB0b1NjYWxlOiAxLCB0OiAxIC0gKDEgLSB0KSAqIGZyYWN0aW9ufTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2YWx1YXRpb25QYXJhbWV0ZXJzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge2Nsb25lLCBleHRlbmQsIGVhc2VDdWJpY0luT3V0fSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0ICogYXMgaW50ZXJwb2xhdGUgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCB7bm9ybWFsaXplUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3N0eWxlLXNwZWMnO1xuaW1wb3J0IHR5cGUge1xuICAgIFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uLFxuICAgIFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgRmVhdHVyZSxcbiAgICBGZWF0dXJlU3RhdGUsXG4gICAgU3R5bGVQcm9wZXJ0eUV4cHJlc3Npb24sXG4gICAgU291cmNlRXhwcmVzc2lvbixcbiAgICBDb21wb3NpdGVFeHByZXNzaW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5cbnR5cGUgVGltZVBvaW50ID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBDcm9zc0ZhZGVkPFQ+ID0ge1xuICAgIHRvOiBULFxuICAgIGZyb206IFRcbn07XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIG51bWJlciBvZiBjbGFzc2VzIHRoYXQgZGVmaW5lIHN0YXRlIGFuZCBiZWhhdmlvciBmb3IgcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0aWVzLCBtb3N0XG4gKiBpbXBvcnRhbnRseSB0aGVpciByZXNwZWN0aXZlIGV2YWx1YXRpb24gY2hhaW5zOlxuICpcbiAqICAgICAgIFRyYW5zaXRpb25hYmxlIHBhaW50IHByb3BlcnR5IHZhbHVlXG4gKiAgICAgw6LChsKSIFRyYW5zaXRpb25pbmcgcGFpbnQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgUG9zc2libHkgZXZhbHVhdGVkIHBhaW50IHByb3BlcnR5IHZhbHVlXG4gKiAgICAgw6LChsKSIEZ1bGx5IGV2YWx1YXRlZCBwYWludCBwcm9wZXJ0eSB2YWx1ZVxuICpcbiAqICAgICAgIExheW91dCBwcm9wZXJ0eSB2YWx1ZVxuICogICAgIMOiwobCkiBQb3NzaWJseSBldmFsdWF0ZWQgbGF5b3V0IHByb3BlcnR5IHZhbHVlXG4gKiAgICAgw6LChsKSIEZ1bGx5IGV2YWx1YXRlZCBsYXlvdXQgcHJvcGVydHkgdmFsdWVcbiAqXG4gKiBAbW9kdWxlXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogIEltcGxlbWVudGF0aW9ucyBvZiB0aGUgYFByb3BlcnR5YCBpbnRlcmZhY2U6XG4gKlxuICogICogSG9sZCBtZXRhZGF0YSBhYm91dCBhIHByb3BlcnR5IHRoYXQncyBpbmRlcGVuZGVudCBvZiBhbnkgc3BlY2lmaWMgdmFsdWU6IHN0dWZmIGxpa2UgdGhlIHR5cGUgb2YgdGhlIHZhbHVlLFxuICogICAgdGhlIGRlZmF1bHQgdmFsdWUsIGV0Yy4gVGhpcyBjb21lcyBmcm9tIHRoZSBzdHlsZSBzcGVjaWZpY2F0aW9uIEpTT04uXG4gKiAgKiBEZWZpbmUgYmVoYXZpb3IgdGhhdCBuZWVkcyB0byBiZSBwb2x5bW9ycGhpYyBhY3Jvc3MgZGlmZmVyZW50IHByb3BlcnRpZXM6IFwicG9zc2libHkgZXZhbHVhdGluZ1wiXG4gKiAgICBhbiBpbnB1dCB2YWx1ZSAoc2VlIGJlbG93KSwgYW5kIGludGVycG9sYXRpbmcgYmV0d2VlbiB0d28gcG9zc2libHktZXZhbHV0ZWQgdmFsdWVzLlxuICpcbiAqICBUaGUgdHlwZSBgVGAgaXMgdGhlIGZ1bGx5LWV2YWx1YXRlZCB2YWx1ZSB0eXBlIChlLmcuIGBudW1iZXJgLCBgc3RyaW5nYCwgYENvbG9yYCkuXG4gKiAgVGhlIHR5cGUgYFJgIGlzIHRoZSBpbnRlcm1lZGlhdGUgXCJwb3NzaWJseSBldmFsdWF0ZWRcIiB2YWx1ZSB0eXBlLiBTZWUgYmVsb3cuXG4gKlxuICogIFRoZXJlIGFyZSB0d28gbWFpbiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGludGVyZmFjZSAtLSBvbmUgZm9yIHByb3BlcnRpZXMgdGhhdCBhbGxvdyBkYXRhLWRyaXZlbiB2YWx1ZXMsXG4gKiAgYW5kIG9uZSBmb3IgcHJvcGVydGllcyB0aGF0IGRvbid0LiBUaGVyZSBhcmUgYSBmZXcgXCJzcGVjaWFsIGNhc2VcIiBpbXBsZW1lbnRhdGlvbnMgYXMgd2VsbDogb25lIGZvciBwcm9wZXJ0aWVzXG4gKiAgd2hpY2ggY3Jvc3MtZmFkZSBiZXR3ZWVuIHR3byB2YWx1ZXMgcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGluZywgb25lIGZvciBgaGVhdG1hcC1jb2xvcmAgYW5kIGBsaW5lLWdyYWRpZW50YCxcbiAqICBhbmQgb25lIGZvciBgbGlnaHQtcG9zaXRpb25gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHk8VCwgUj4ge1xuICAgIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uO1xuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogUjtcbiAgICBpbnRlcnBvbGF0ZShhOiBSLCBiOiBSLCB0OiBudW1iZXIpOiBSO1xufVxuXG4vKipcbiAqICBgUHJvcGVydHlWYWx1ZWAgcmVwcmVzZW50cyB0aGUgdmFsdWUgcGFydCBvZiBhIHByb3BlcnR5IGtleS12YWx1ZSB1bml0LiBJdCdzIHVzZWQgdG8gcmVwcmVzZW50IGJvdGhcbiAqICBwYWludCBhbmQgbGF5b3V0IHByb3BlcnR5IHZhbHVlcywgYW5kIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhlaXIgcHJvcGVydHkgc3VwcG9ydHMgZGF0YS1kcml2ZW5cbiAqICBleHByZXNzaW9ucy5cbiAqXG4gKiAgYFByb3BlcnR5VmFsdWVgIHN0b3JlcyB0aGUgcmF3IGlucHV0IHZhbHVlIGFzIHNlZW4gaW4gYSBzdHlsZSBvciBhIHJ1bnRpbWUgc3R5bGluZyBBUEkgY2FsbCwgaS5lLiBvbmUgb2YgdGhlXG4gKiAgZm9sbG93aW5nOlxuICpcbiAqICAgICogQSBjb25zdGFudCB2YWx1ZSBvZiB0aGUgdHlwZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHByb3BlcnR5XG4gKiAgICAqIEEgZnVuY3Rpb24gd2hpY2ggcHJvZHVjZXMgYSB2YWx1ZSBvZiB0aGF0IHR5cGUgKGJ1dCBmdW5jdGlvbnMgYXJlIHF1YXNpLWRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgZXhwcmVzc2lvbnMpXG4gKiAgICAqIEFuIGV4cHJlc3Npb24gd2hpY2ggcHJvZHVjZXMgYSB2YWx1ZSBvZiB0aGF0IHR5cGVcbiAqICAgICogXCJ1bmRlZmluZWRcIi9cIm5vdCBwcmVzZW50XCIsIGluIHdoaWNoIGNhc2UgdGhlIHByb3BlcnR5IGlzIGFzc3VtZWQgdG8gdGFrZSBvbiBpdHMgZGVmYXVsdCB2YWx1ZS5cbiAqXG4gKiAgSW4gYWRkaXRpb24gdG8gc3RvcmluZyB0aGUgb3JpZ2luYWwgaW5wdXQgdmFsdWUsIGBQcm9wZXJ0eVZhbHVlYCBhbHNvIHN0b3JlcyBhIG5vcm1hbGl6ZWQgcmVwcmVzZW50YXRpb24sXG4gKiAgZWZmZWN0aXZlbHkgdHJlYXRpbmcgZnVuY3Rpb25zIGFzIGlmIHRoZXkgYXJlIGV4cHJlc3Npb25zLCBhbmQgY29uc3RhbnQgb3IgZGVmYXVsdCB2YWx1ZXMgYXMgaWYgdGhleSBhcmVcbiAqICAoY29uc3RhbnQpIGV4cHJlc3Npb25zLlxuICpcbiAqICBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgcHJvcGVydHk6IFByb3BlcnR5PFQsIFI+O1xuICAgIHZhbHVlOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiB8IHZvaWQ7XG4gICAgZXhwcmVzc2lvbjogU3R5bGVQcm9wZXJ0eUV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogUHJvcGVydHk8VCwgUj4sIHZhbHVlOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiB8IHZvaWQpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IG5vcm1hbGl6ZVByb3BlcnR5RXhwcmVzc2lvbih2YWx1ZSA9PT0gdW5kZWZpbmVkID8gcHJvcGVydHkuc3BlY2lmaWNhdGlvbi5kZWZhdWx0IDogdmFsdWUsIHByb3BlcnR5LnNwZWNpZmljYXRpb24pO1xuICAgIH1cblxuICAgIGlzRGF0YURyaXZlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5raW5kID09PSAnc291cmNlJyB8fCB0aGlzLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbXBvc2l0ZSc7XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFIge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlKHRoaXMsIHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIFRyYW5zaXRpb25hYmxlIC0tLS0tLS1cblxuZXhwb3J0IHR5cGUgVHJhbnNpdGlvblBhcmFtZXRlcnMgPSB7XG4gICAgbm93OiBUaW1lUG9pbnQsXG4gICAgdHJhbnNpdGlvbjogVHJhbnNpdGlvblNwZWNpZmljYXRpb25cbn07XG5cbi8qKlxuICogUGFpbnQgcHJvcGVydGllcyBhcmUgX3RyYW5zaXRpb25hYmxlXzogdGhleSBjYW4gY2hhbmdlIGluIGEgZmx1aWQgbWFubmVyLCBpbnRlcnBvbGF0aW5nIG9yIGNyb3NzLWZhZGluZyBiZXR3ZWVuXG4gKiBvbGQgYW5kIG5ldyB2YWx1ZS4gVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLCBhbmQgdGhlIGRlbGF5IGJlZm9yZSBpdCBiZWdpbnMsIGlzIGNvbmZpZ3VyYWJsZS5cbiAqXG4gKiBgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlYCBpcyBhIGNvbXBvc2l0aW9uYWwgY2xhc3MgdGhhdCBzdG9yZXMgYm90aCB0aGUgcHJvcGVydHkgdmFsdWUgYW5kIHRoYXQgdHJhbnNpdGlvblxuICogY29uZmlndXJhdGlvbi5cbiAqXG4gKiBBIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVgIGNhbiBjYWxjdWxhdGUgdGhlIG5leHQgc3RlcCBpbiB0aGUgZXZhbHVhdGlvbiBjaGFpbiBmb3IgcGFpbnQgcHJvcGVydHkgdmFsdWVzOlxuICogYFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWU8VCwgUj4ge1xuICAgIHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPjtcbiAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPjtcbiAgICB0cmFuc2l0aW9uOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbiB8IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogUHJvcGVydHk8VCwgUj4pIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IFByb3BlcnR5VmFsdWUocHJvcGVydHksIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgdHJhbnNpdGlvbmVkKHBhcmFtZXRlcnM6IFRyYW5zaXRpb25QYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgICBwcmlvcjogVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj4pOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWUodGhpcy5wcm9wZXJ0eSwgdGhpcy52YWx1ZSwgcHJpb3IsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgIGV4dGVuZCh7fSwgcGFyYW1ldGVycy50cmFuc2l0aW9uLCB0aGlzLnRyYW5zaXRpb24pLCBwYXJhbWV0ZXJzLm5vdyk7XG4gICAgfVxuXG4gICAgdW50cmFuc2l0aW9uZWQoKTogVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj4ge1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlKHRoaXMucHJvcGVydHksIHRoaXMudmFsdWUsIG51bGwsIHt9LCAwKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIH1cbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlOiBnaXZlbiBhbiBvYmplY3QgdHlwZSBgUHJvcGVydGllc2Agd2hvc2UgdmFsdWVzIGFyZSBlYWNoIG9mIHR5cGUgYFByb3BlcnR5PFQsIFI+YCwgaXQgY2FsY3VsYXRlc1xuICogYW4gb2JqZWN0IHR5cGUgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgb2YgdHlwZSBgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlPFQsIFI+YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG50eXBlIFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZTxULCBSPj4+XG5cbi8qKlxuICogYFRyYW5zaXRpb25hYmxlYCBzdG9yZXMgYSBtYXAgb2YgYWxsIChwcm9wZXJ0eSBuYW1lLCBgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlYCkgcGFpcnMgZm9yIHBhaW50IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS4gSXQgY2FuIGNhbGN1bGF0ZSB0aGUgYFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlYHMgZm9yIGFsbCBvZiB0aGVtIGF0IG9uY2UsIHByb2R1Y2luZyBhXG4gKiBgVHJhbnNpdGlvbmluZ2AgaW5zdGFuY2UgZm9yIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2l0aW9uYWJsZTxQcm9wczogT2JqZWN0PiB7XG4gICAgX3Byb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+O1xuICAgIF92YWx1ZXM6IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4pIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IChPYmplY3QuY3JlYXRlKHByb3BlcnRpZXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXMpOiBhbnkpO1xuICAgIH1cblxuICAgIGdldFZhbHVlPFM6IHN0cmluZywgVD4obmFtZTogUyk6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+IHwgdm9pZCB7XG4gICAgICAgIHJldHVybiBjbG9uZSh0aGlzLl92YWx1ZXNbbmFtZV0udmFsdWUudmFsdWUpO1xuICAgIH1cblxuICAgIHNldFZhbHVlPFM6IHN0cmluZywgVD4obmFtZTogUywgdmFsdWU6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+IHwgdm9pZCkge1xuICAgICAgICBpZiAoIXRoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVzW25hbWVdID0gbmV3IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZSh0aGlzLl92YWx1ZXNbbmFtZV0ucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyBub3QgX3JlbW92ZV8gYW4gb3duIHByb3BlcnR5IGluIHRoZSBjYXNlIHdoZXJlIGEgdmFsdWUgaXMgYmVpbmcgcmVzZXRcbiAgICAgICAgLy8gdG8gdGhlIGRlZmF1bHQ6IHRoZSB0cmFuc2l0aW9uIG1pZ2h0IHN0aWxsIGJlIG5vbi1kZWZhdWx0LlxuICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0udmFsdWUgPSBuZXcgUHJvcGVydHlWYWx1ZSh0aGlzLl92YWx1ZXNbbmFtZV0ucHJvcGVydHksIHZhbHVlID09PSBudWxsID8gdW5kZWZpbmVkIDogY2xvbmUodmFsdWUpKTtcbiAgICB9XG5cbiAgICBnZXRUcmFuc2l0aW9uPFM6IHN0cmluZz4obmFtZTogUyk6IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uIHwgdm9pZCB7XG4gICAgICAgIHJldHVybiBjbG9uZSh0aGlzLl92YWx1ZXNbbmFtZV0udHJhbnNpdGlvbik7XG4gICAgfVxuXG4gICAgc2V0VHJhbnNpdGlvbjxTOiBzdHJpbmc+KG5hbWU6IFMsIHZhbHVlOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbiB8IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXSA9IG5ldyBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUodGhpcy5fdmFsdWVzW25hbWVdLnByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0udHJhbnNpdGlvbiA9IGNsb25lKHZhbHVlKSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbihwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAodHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2Ake3Byb3BlcnR5fS10cmFuc2l0aW9uYF0gPSB0cmFuc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdHJhbnNpdGlvbmVkKHBhcmFtZXRlcnM6IFRyYW5zaXRpb25QYXJhbWV0ZXJzLCBwcmlvcjogVHJhbnNpdGlvbmluZzxQcm9wcz4pOiBUcmFuc2l0aW9uaW5nPFByb3BzPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUcmFuc2l0aW9uaW5nKHRoaXMuX3Byb3BlcnRpZXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgcmVzdWx0Ll92YWx1ZXNbcHJvcGVydHldID0gdGhpcy5fdmFsdWVzW3Byb3BlcnR5XS50cmFuc2l0aW9uZWQocGFyYW1ldGVycywgcHJpb3IuX3ZhbHVlc1twcm9wZXJ0eV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdW50cmFuc2l0aW9uZWQoKTogVHJhbnNpdGlvbmluZzxQcm9wcz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgVHJhbnNpdGlvbmluZyh0aGlzLl9wcm9wZXJ0aWVzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5fdmFsdWVzW3Byb3BlcnR5XSA9IHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0udW50cmFuc2l0aW9uZWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLy8gLS0tLS0tLSBUcmFuc2l0aW9uaW5nIC0tLS0tLS1cblxuLyoqXG4gKiBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgIGltcGxlbWVudHMgdGhlIGZpcnN0IG9mIHR3byBpbnRlcm1lZGlhdGUgc3RlcHMgaW4gdGhlIGV2YWx1YXRpb24gY2hhaW4gb2YgYSBwYWludFxuICogcHJvcGVydHkgdmFsdWUuIEluIHRoaXMgc3RlcCwgdHJhbnNpdGlvbnMgYmV0d2VlbiBvbGQgYW5kIG5ldyB2YWx1ZXMgYXJlIGhhbmRsZWQ6IGFzIGxvbmcgYXMgdGhlIHRyYW5zaXRpb24gaXMgaW5cbiAqIHByb2dyZXNzLCBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgIG1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgcHJpb3IgdmFsdWUsIGFuZCBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBpdCBhbmRcbiAqIHRoZSBuZXcgdmFsdWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZSBhbmQgdGhlIGNvbmZpZ3VyZWQgdHJhbnNpdGlvbiBkdXJhdGlvbiBhbmQgZGVsYXkuIFRoZSBwcm9kdWN0IGlzIHRoZSBuZXh0XG4gKiBzdGVwIGluIHRoZSBldmFsdWF0aW9uIGNoYWluOiB0aGUgXCJwb3NzaWJseSBldmFsdWF0ZWRcIiByZXN1bHQgdHlwZSBgUmAuIFNlZSBiZWxvdyBmb3IgbW9yZSBvbiB0aGlzIGNvbmNlcHQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj4ge1xuICAgIHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPjtcbiAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPjtcbiAgICBwcmlvcjogP1RyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+O1xuICAgIGJlZ2luOiBUaW1lUG9pbnQ7XG4gICAgZW5kOiBUaW1lUG9pbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogUHJvcGVydHk8VCwgUj4sXG4gICAgICAgICAgICAgICAgdmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj4sXG4gICAgICAgICAgICAgICAgcHJpb3I6ID9UcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPixcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICBub3c6IFRpbWVQb2ludCkge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5iZWdpbiA9IG5vdyArIHRyYW5zaXRpb24uZGVsYXkgfHwgMDtcbiAgICAgICAgdGhpcy5lbmQgPSB0aGlzLmJlZ2luICsgdHJhbnNpdGlvbi5kdXJhdGlvbiB8fCAwO1xuICAgICAgICBpZiAocHJvcGVydHkuc3BlY2lmaWNhdGlvbi50cmFuc2l0aW9uICYmICh0cmFuc2l0aW9uLmRlbGF5IHx8IHRyYW5zaXRpb24uZHVyYXRpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnByaW9yID0gcHJpb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pOiBSIHtcbiAgICAgICAgY29uc3Qgbm93ID0gcGFyYW1ldGVycy5ub3cgfHwgMDtcbiAgICAgICAgY29uc3QgZmluYWxWYWx1ZSA9IHRoaXMudmFsdWUucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICBjb25zdCBwcmlvciA9IHRoaXMucHJpb3I7XG4gICAgICAgIGlmICghcHJpb3IpIHtcbiAgICAgICAgICAgIC8vIE5vIHByaW9yIHZhbHVlLlxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAobm93ID4gdGhpcy5lbmQpIHtcbiAgICAgICAgICAgIC8vIFRyYW5zaXRpb24gZnJvbSBwcmlvciB2YWx1ZSBpcyBub3cgY29tcGxldGUuXG4gICAgICAgICAgICB0aGlzLnByaW9yID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBmaW5hbFZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUuaXNEYXRhRHJpdmVuKCkpIHtcbiAgICAgICAgICAgIC8vIFRyYW5zaXRpb25zIHRvIGRhdGEtZHJpdmVuIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAgICAgICAgICAvLyBXZSBzbmFwIGltbWVkaWF0ZWx5IHRvIHRoZSBkYXRhLWRyaXZlbiB2YWx1ZSBzbyB0aGF0LCB3aGVuIHdlIHBlcmZvcm0gbGF5b3V0LFxuICAgICAgICAgICAgLy8gd2Ugc2VlIHRoZSBkYXRhLWRyaXZlbiBmdW5jdGlvbiBhbmQgY2FuIHVzZSBpdCB0byBwb3B1bGF0ZSB2ZXJ0ZXggYnVmZmVycy5cbiAgICAgICAgICAgIHRoaXMucHJpb3IgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAobm93IDwgdGhpcy5iZWdpbikge1xuICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiBoYXNuJ3Qgc3RhcnRlZCB5ZXQuXG4gICAgICAgICAgICByZXR1cm4gcHJpb3IucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSW50ZXJwb2xhdGUgYmV0d2VlbiByZWN1cnNpdmVseS1jYWxjdWxhdGVkIHByaW9yIHZhbHVlIGFuZCBmaW5hbC5cbiAgICAgICAgICAgIGNvbnN0IHQgPSAobm93IC0gdGhpcy5iZWdpbikgLyAodGhpcy5lbmQgLSB0aGlzLmJlZ2luKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmludGVycG9sYXRlKHByaW9yLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKSwgZmluYWxWYWx1ZSwgZWFzZUN1YmljSW5PdXQodCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBvZiB0eXBlIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPmAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+Pj5cblxuLyoqXG4gKiBgVHJhbnNpdGlvbmluZ2Agc3RvcmVzIGEgbWFwIG9mIGFsbCAocHJvcGVydHkgbmFtZSwgYFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlYCkgcGFpcnMgZm9yIHBhaW50IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS4gSXQgY2FuIGNhbGN1bGF0ZSB0aGUgcG9zc2libHktZXZhbHVhdGVkIHZhbHVlcyBmb3IgYWxsIG9mIHRoZW0gYXQgb25jZSwgcHJvZHVjaW5nIGFcbiAqIGBQb3NzaWJseUV2YWx1YXRlZGAgaW5zdGFuY2UgZm9yIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2l0aW9uaW5nPFByb3BzOiBPYmplY3Q+IHtcbiAgICBfcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz47XG4gICAgX3ZhbHVlczogVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+KSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSAoT2JqZWN0LmNyZWF0ZShwcm9wZXJ0aWVzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXMpOiBhbnkpO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBQb3NzaWJseUV2YWx1YXRlZDxQcm9wcz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUG9zc2libHlFdmFsdWF0ZWQodGhpcy5fcHJvcGVydGllcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ZhbHVlc1twcm9wZXJ0eV0gPSB0aGlzLl92YWx1ZXNbcHJvcGVydHldLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0ucHJpb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIExheW91dCAtLS0tLS0tXG5cbi8qKlxuICogQSBoZWxwZXIgdHlwZTogZ2l2ZW4gYW4gb2JqZWN0IHR5cGUgYFByb3BlcnRpZXNgIHdob3NlIHZhbHVlcyBhcmUgZWFjaCBvZiB0eXBlIGBQcm9wZXJ0eTxULCBSPmAsIGl0IGNhbGN1bGF0ZXNcbiAqIGFuIG9iamVjdCB0eXBlIHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIG9mIHR5cGUgYFByb3BlcnR5VmFsdWU8VCwgUj5gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnR5cGUgUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFByb3BlcnR5VmFsdWU8VCwgUj4+PlxuXG4vKipcbiAqIEJlY2F1c2UgbGF5b3V0IHByb3BlcnRpZXMgYXJlIG5vdCB0cmFuc2l0aW9uYWJsZSwgdGhleSBoYXZlIGEgc2ltcGxlciByZXByZXNlbnRhdGlvbiBhbmQgZXZhbHVhdGlvbiBjaGFpbiB0aGFuXG4gKiBwYWludCBwcm9wZXJ0aWVzOiBgUHJvcGVydHlWYWx1ZWBzIGFyZSBwb3NzaWJseSBldmFsdWF0ZWQsIHByb2R1Y2luZyBwb3NzaWJseSBldmFsdWF0ZWQgdmFsdWVzLCB3aGljaCBhcmUgdGhlblxuICogZnVsbHkgZXZhbHVhdGVkLlxuICpcbiAqIGBMYXlvdXRgIHN0b3JlcyBhIG1hcCBvZiBhbGwgKHByb3BlcnR5IG5hbWUsIGBQcm9wZXJ0eVZhbHVlYCkgcGFpcnMgZm9yIGxheW91dCBwcm9wZXJ0aWVzIG9mIGFcbiAqIGdpdmVuIGxheWVyIHR5cGUuIEl0IGNhbiBjYWxjdWxhdGUgdGhlIHBvc3NpYmx5LWV2YWx1YXRlZCB2YWx1ZXMgZm9yIGFsbCBvZiB0aGVtIGF0IG9uY2UsIHByb2R1Y2luZyBhXG4gKiBgUG9zc2libHlFdmFsdWF0ZWRgIGluc3RhbmNlIGZvciB0aGUgc2FtZSBzZXQgb2YgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgTGF5b3V0PFByb3BzOiBPYmplY3Q+IHtcbiAgICBfcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz47XG4gICAgX3ZhbHVlczogUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4pIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IChPYmplY3QuY3JlYXRlKHByb3BlcnRpZXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzKTogYW55KTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZTxTOiBzdHJpbmc+KG5hbWU6IFMpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuX3ZhbHVlc1tuYW1lXS52YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWU8Uzogc3RyaW5nPihuYW1lOiBTLCB2YWx1ZTogKikge1xuICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlWYWx1ZSh0aGlzLl92YWx1ZXNbbmFtZV0ucHJvcGVydHksIHZhbHVlID09PSBudWxsID8gdW5kZWZpbmVkIDogY2xvbmUodmFsdWUpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFBvc3NpYmx5RXZhbHVhdGVkPFByb3BzPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQb3NzaWJseUV2YWx1YXRlZCh0aGlzLl9wcm9wZXJ0aWVzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5fdmFsdWVzW3Byb3BlcnR5XSA9IHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0ucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIFBvc3NpYmx5RXZhbHVhdGVkIC0tLS0tLS1cblxuLyoqXG4gKiBcIlBvc3NpYmx5IGV2YWx1YXRlZCB2YWx1ZVwiIGlzIGFuIGludGVybWVkaWF0ZSBzdGFnZSBpbiB0aGUgZXZhbHVhdGlvbiBjaGFpbiBmb3IgYm90aCBwYWludCBhbmQgbGF5b3V0IHByb3BlcnR5XG4gKiB2YWx1ZXMuIFRoZSBwdXJwb3NlIG9mIHRoaXMgc3RhZ2UgaXMgdG8gb3B0aW1pemUgYXdheSB1bm5lY2Vzc2FyeSByZWNhbGN1bGF0aW9ucyBmb3IgZGF0YS1kcml2ZW4gcHJvcGVydGllcy4gQ29kZVxuICogd2hpY2ggdXNlcyBkYXRhLWRyaXZlbiBwcm9wZXJ0eSB2YWx1ZXMgbXVzdCBhc3N1bWUgdGhhdCB0aGUgdmFsdWUgaXMgZGVwZW5kZW50IG9uIGZlYXR1cmUgZGF0YSwgYW5kIHJlcXVlc3QgdGhhdCBpdFxuICogYmUgZXZhbHVhdGVkIGZvciBlYWNoIGZlYXR1cmUuIEJ1dCB3aGVuIHRoYXQgcHJvcGVydHkgdmFsdWUgaXMgaW4gZmFjdCBhIGNvbnN0YW50IG9yIGNhbWVyYSBmdW5jdGlvbiwgdGhlIGNhbGN1bGF0aW9uXG4gKiB3aWxsIG5vdCBhY3R1YWxseSBkZXBlbmQgb24gdGhlIGZlYXR1cmUsIGFuZCB3ZSBjYW4gYmVuZWZpdCBmcm9tIHJldHVybmluZyB0aGUgcHJpb3IgcmVzdWx0IG9mIGhhdmluZyBkb25lIHRoZVxuICogZXZhbHVhdGlvbiBvbmNlLCBhaGVhZCBvZiB0aW1lLCBpbiBhbiBpbnRlcm1lZGlhdGUgc3RlcCB3aG9zZSBpbnB1dHMgYXJlIGp1c3QgdGhlIHZhbHVlIGFuZCBcImdsb2JhbFwiIHBhcmFtZXRlcnNcbiAqIHN1Y2ggYXMgY3VycmVudCB6b29tIGxldmVsLlxuICpcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCByZXByZXNlbnRzIHRoZSB0aHJlZSBwb3NzaWJsZSBvdXRjb21lcyBvZiB0aGlzIHN0ZXA6IGlmIHRoZSBpbnB1dCB2YWx1ZSB3YXMgYSBjb25zdGFudCBvclxuICogY2FtZXJhIGV4cHJlc3Npb24sIHRoZW4gdGhlIFwicG9zc2libHkgZXZhbHVhdGVkXCIgcmVzdWx0IGlzIGEgY29uc3RhbnQgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGlucHV0IHZhbHVlIHdhcyBlaXRoZXJcbiAqIGEgc291cmNlIG9yIGNvbXBvc2l0ZSBleHByZXNzaW9uLCBhbmQgd2UgbXVzdCBkZWZlciBmaW5hbCBldmFsdWF0aW9uIHVudGlsIHN1cHBsaWVkIGEgZmVhdHVyZS4gV2Ugc2VwYXJhdGVcbiAqIHRoZSBzb3VyY2UgYW5kIGNvbXBvc2l0ZSBjYXNlcyBiZWNhdXNlIHRoZXkgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgd2hlbiBnZW5lcmF0aW5nIEdMIGF0dHJpYnV0ZXMsIGJ1ZmZlcnMsIGFuZFxuICogdW5pZm9ybXMuXG4gKlxuICogTm90ZSB0aGF0IGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCAoYW5kIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgLCBiZWxvdykgYXJlIF9ub3RfIHVzZWQgZm9yIHByb3BlcnRpZXMgdGhhdFxuICogZG8gbm90IGFsbG93IGRhdGEtZHJpdmVuIHZhbHVlcy4gRm9yIHN1Y2ggcHJvcGVydGllcywgd2Uga25vdyB0aGF0IHRoZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHJlc3VsdCBpcyBhbHdheXMgYSBjb25zdGFudFxuICogc2NhbGFyIHZhbHVlLiBTZWUgYmVsb3cuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPFQ+ID1cbiAgICB8IHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogVH1cbiAgICB8IFNvdXJjZUV4cHJlc3Npb25cbiAgICB8IENvbXBvc2l0ZUV4cHJlc3Npb247XG5cbi8qKlxuICogYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZWAgaXMgdXNlZCBmb3IgZGF0YS1kcml2ZW4gcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0eSB2YWx1ZXMuIEl0IGhvbGRzIGFcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCBhbmQgdGhlIGBHbG9iYWxQcm9wZXJ0aWVzYCB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSBpdC4gWW91J3JlIG5vdCBhbGxvd2VkIHRvIHN1cHBseVxuICogYSBkaWZmZXJlbnQgc2V0IG9mIGBHbG9iYWxQcm9wZXJ0aWVzYCB3aGVuIHBlcmZvcm1pbmcgdGhlIGZpbmFsIGV2YWx1YXRpb24gYmVjYXVzZSB0aGV5IHdvdWxkIGJlIGlnbm9yZWQgaW4gdGhlXG4gKiBjYXNlIHdoZXJlIHRoZSBpbnB1dCB2YWx1ZSB3YXMgYSBjb25zdGFudCBvciBjYW1lcmEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiB7XG4gICAgcHJvcGVydHk6IERhdGFEcml2ZW5Qcm9wZXJ0eTxUPjtcbiAgICB2YWx1ZTogUG9zc2libHlFdmFsdWF0ZWRWYWx1ZTxUPjtcbiAgICBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycztcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBEYXRhRHJpdmVuUHJvcGVydHk8VD4sIHZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPFQ+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBpc0NvbnN0YW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnO1xuICAgIH1cblxuICAgIGNvbnN0YW50T3IodmFsdWU6IFQpOiBUIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmFsdWF0ZShmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5ldmFsdWF0ZSh0aGlzLnZhbHVlLCB0aGlzLnBhcmFtZXRlcnMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBoZWxwZXIgdHlwZTogZ2l2ZW4gYW4gb2JqZWN0IHR5cGUgYFByb3BlcnRpZXNgIHdob3NlIHZhbHVlcyBhcmUgZWFjaCBvZiB0eXBlIGBQcm9wZXJ0eTxULCBSPmAsIGl0IGNhbGN1bGF0ZXNcbiAqIGFuIG9iamVjdCB0eXBlIHdpdGggdGhlIHNhbWUga2V5cywgYW5kIHZhbHVlcyBvZiB0eXBlIGBSYC5cbiAqXG4gKiBGb3IgcHJvcGVydGllcyB0aGF0IGRvbid0IGFsbG93IGRhdGEtZHJpdmVuIHZhbHVlcywgYFJgIGlzIGEgc2NhbGFyIHR5cGUgc3VjaCBhcyBgbnVtYmVyYCwgYHN0cmluZ2AsIG9yIGBDb2xvcmAuXG4gKiBGb3IgZGF0YS1kcml2ZW4gcHJvcGVydGllcywgaXQgaXMgYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZWAuIENyaXRpY2FsbHksIHRoZSB0eXBlIGRlZmluaXRpb25zIGFyZSBzZXQgdXBcbiAqIGluIGEgd2F5IHRoYXQgYWxsb3dzIGZsb3cgdG8ga25vdyB3aGljaCBvZiB0aGVzZSB0d28gY2FzZXMgYXBwbGllcyBmb3IgYW55IGdpdmVuIHByb3BlcnR5IG5hbWUsIGFuZCBpZiB5b3UgYXR0ZW1wdFxuICogdG8gdXNlIGEgYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZWAgYXMgaWYgaXQgd2FzIGEgc2NhbGFyLCBvciB2aWNlIHZlcnNhLCB5b3Ugd2lsbCBnZXQgYSB0eXBlIGVycm9yLiAoSG93ZXZlcixcbiAqIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGNhc2UgaW4gd2hpY2ggZmxvdyBmYWlscyB0byBwcm9kdWNlIGEgdHlwZSBlcnJvciB0aGF0IHlvdSBzaG91bGQgYmUgYXdhcmUgb2Y6IGluIGEgY29udGV4dCBzdWNoXG4gKiBhcyBgbGF5ZXIucGFpbnQuZ2V0KCdmb28tb3BhY2l0eScpID09PSAwYCwgaWYgYGZvby1vcGFjaXR5YCBpcyBkYXRhLWRyaXZlbiwgdGhhbiB0aGUgbGVmdC1oYW5kIHNpZGUgaXMgb2YgdHlwZVxuICogYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+YCwgYnV0IGZsb3cgd2lsbCBub3QgY29tcGxhaW4gYWJvdXQgY29tcGFyaW5nIHRoaXMgdG8gYSBudW1iZXIgdXNpbmcgYD09PWAuXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzIzNTkuKVxuICpcbiAqIFRoZXJlJ3MgYWxzbyBhIHRoaXJkLCBzcGVjaWFsIGNhc2UgcG9zc2libGl0eSBmb3IgYFJgOiBmb3IgY3Jvc3MtZmFkZWQgcHJvcGVydGllcywgaXQncyBgP0Nyb3NzRmFkZWQ8VD5gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnR5cGUgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlczxQcm9wczogT2JqZWN0PlxuICAgID0gJEV4YWN0PCRPYmpNYXA8UHJvcHMsIDxULCBSPihwOiBQcm9wZXJ0eTxULCBSPikgPT4gUj4+XG5cbi8qKlxuICogYFBvc3NpYmx5RXZhbHVhdGVkYCBzdG9yZXMgYSBtYXAgb2YgYWxsIChwcm9wZXJ0eSBuYW1lLCBgUmApIHBhaXJzIGZvciBwYWludCBvciBsYXlvdXQgcHJvcGVydGllcyBvZiBhXG4gKiBnaXZlbiBsYXllciB0eXBlLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFBvc3NpYmx5RXZhbHVhdGVkPFByb3BzOiBPYmplY3Q+IHtcbiAgICBfcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz47XG4gICAgX3ZhbHVlczogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPikge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gKE9iamVjdC5jcmVhdGUocHJvcGVydGllcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXMpOiBhbnkpO1xuICAgIH1cblxuICAgIGdldDxTOiBzdHJpbmc+KG5hbWU6IFMpOiAkRWxlbWVudFR5cGU8UG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlczxQcm9wcz4sIFM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlc1tuYW1lXTtcbiAgICB9XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgYFByb3BlcnR5YCBmb3IgcHJvcGVydGllcyB0aGF0IGRvIG5vdCBwZXJtaXQgZGF0YS1kcml2ZW4gKHNvdXJjZSBvciBjb21wb3NpdGUpIGV4cHJlc3Npb25zLlxuICogVGhpcyByZXN0cmljdGlvbiBhbGxvd3MgdXMgdG8gZGVjbGFyZSBzdGF0aWNhbGx5IHRoYXQgdGhlIHJlc3VsdCBvZiBwb3NzaWJseSBldmFsdWF0aW5nIHRoaXMga2luZCBvZiBwcm9wZXJ0eVxuICogaXMgaW4gZmFjdCBhbHdheXMgdGhlIHNjYWxhciB0eXBlIGBUYCwgYW5kIGNhbiBiZSB1c2VkIHdpdGhvdXQgZnVydGhlciBldmFsdWF0aW5nIHRoZSB2YWx1ZSBvbiBhIHBlci1mZWF0dXJlIGJhc2lzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxUPiBpbXBsZW1lbnRzIFByb3BlcnR5PFQsIFQ+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBUPiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiBUIHtcbiAgICAgICAgYXNzZXJ0KCF2YWx1ZS5pc0RhdGFEcml2ZW4oKSk7XG4gICAgICAgIHJldHVybiB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6IFQsIGI6IFQsIHQ6IG51bWJlcik6IFQge1xuICAgICAgICBjb25zdCBpbnRlcnA6ID8oYTogVCwgYjogVCwgdDogbnVtYmVyKSA9PiBUID0gKGludGVycG9sYXRlOiBhbnkpW3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtcbiAgICAgICAgaWYgKGludGVycCkge1xuICAgICAgICAgICAgcmV0dXJuIGludGVycChhLCBiLCB0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yIHByb3BlcnRpZXMgdGhhdCBwZXJtaXQgZGF0YS1kcml2ZW4gKHNvdXJjZSBvciBjb21wb3NpdGUpIGV4cHJlc3Npb25zLlxuICogVGhlIHJlc3VsdCBvZiBwb3NzaWJseSBldmFsdWF0aW5nIHRoaXMga2luZCBvZiBwcm9wZXJ0eSBpcyBgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+YDsgb2J0YWluaW5nXG4gKiBhIHNjYWxhciB2YWx1ZSBgVGAgcmVxdWlyZXMgZnVydGhlciBldmFsdWF0aW9uIG9uIGEgcGVyLWZlYXR1cmUgYmFzaXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFEcml2ZW5Qcm9wZXJ0eTxUPiBpbXBsZW1lbnRzIFByb3BlcnR5PFQsIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPj4ge1xuICAgIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uO1xuICAgIG92ZXJyaWRlczogP09iamVjdDtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uLCBvdmVycmlkZXM/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5zcGVjaWZpY2F0aW9uID0gc3BlY2lmaWNhdGlvbjtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgPSBvdmVycmlkZXM7XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiB7XG4gICAgICAgIGlmICh2YWx1ZS5leHByZXNzaW9uLmtpbmQgPT09ICdjb25zdGFudCcgfHwgdmFsdWUuZXhwcmVzc2lvbi5raW5kID09PSAnY2FtZXJhJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgYXZhaWxhYmxlSW1hZ2VzKX0sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywgdmFsdWUuZXhwcmVzc2lvbiwgcGFyYW1ldGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZShhOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4sXG4gICAgICAgICAgICAgICAgYjogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+LFxuICAgICAgICAgICAgICAgIHQ6IG51bWJlcik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiB7XG4gICAgICAgIC8vIElmIGVpdGhlciBwb3NzaWJseS1ldmFsdWF0ZWQgdmFsdWUgaXMgbm9uLWNvbnN0YW50LCBnaXZlIHVwOiB3ZSBhcmVuJ3QgYWJsZSB0byBpbnRlcnBvbGF0ZSBkYXRhLWRyaXZlbiB2YWx1ZXMuXG4gICAgICAgIGlmIChhLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcgfHwgYi52YWx1ZS5raW5kICE9PSAnY29uc3RhbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBoYWNrIHNvbGVseSBmb3IgZmlsbC1vdXRsaW5lLWNvbG9yLiBUaGUgdW5kZWZpbmVkIHZhbHVlIGlzIHN1YnNlcXVlbnRseSBoYW5kbGVkIGluXG4gICAgICAgIC8vIEZpbGxTdHlsZUxheWVyI3JlY2FsY3VsYXRlLCB3aGljaCBzZXRzIGZpbGwtb3V0bGluZS1jb2xvciB0byB0aGUgZmlsbC1jb2xvciB2YWx1ZSBpZiB0aGUgZm9ybWVyXG4gICAgICAgIC8vIGlzIGEgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlIGNvbnRhaW5pbmcgYSBjb25zdGFudCB1bmRlZmluZWQgdmFsdWUuIEluIGFkZGl0aW9uIHRvIHRoZVxuICAgICAgICAvLyByZXR1cm4gdmFsdWUgaGVyZSwgdGhlIG90aGVyIHNvdXJjZSBvZiBhIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSBjb250YWluaW5nIGEgY29uc3RhbnRcbiAgICAgICAgLy8gdW5kZWZpbmVkIHZhbHVlIGlzIHRoZSBcImRlZmF1bHQgdmFsdWVcIiBmb3IgZmlsbC1vdXRsaW5lLWNvbG9yIGhlbGQgaW5cbiAgICAgICAgLy8gYFByb3BlcnRpZXMjZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzYCwgd2hpY2ggc2VydmVzIGFzIHRoZSBwcm90b3R5cGUgb2ZcbiAgICAgICAgLy8gYFBvc3NpYmx5RXZhbHVhdGVkI192YWx1ZXNgLlxuICAgICAgICBpZiAoYS52YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGIudmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiAodW5kZWZpbmVkOiBhbnkpfSwgYS5wYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVycDogPyhhOiBULCBiOiBULCB0OiBudW1iZXIpID0+IFQgPSAoaW50ZXJwb2xhdGU6IGFueSlbdGhpcy5zcGVjaWZpY2F0aW9uLnR5cGVdO1xuICAgICAgICBpZiAoaW50ZXJwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IGludGVycChhLnZhbHVlLnZhbHVlLCBiLnZhbHVlLnZhbHVlLCB0KX0sIGEucGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV2YWx1YXRlKHZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPFQ+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBUIHtcbiAgICAgICAgaWYgKHZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5ldmFsdWF0ZShwYXJhbWV0ZXJzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgYFByb3BlcnR5YCBmb3IgIGRhdGEgZHJpdmVuIGBsaW5lLXBhdHRlcm5gIHdoaWNoIGFyZSB0cmFuc2l0aW9uZWQgYnkgY3Jvc3MtZmFkaW5nXG4gKiByYXRoZXIgdGhhbiBpbnRlcnBvbGF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNsYXNzIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8VD4gZXh0ZW5kcyBEYXRhRHJpdmVuUHJvcGVydHk8P0Nyb3NzRmFkZWQ8VD4+IHtcblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8P0Nyb3NzRmFkZWQ8VD4sIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4ge1xuICAgICAgICBpZiAodmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiB1bmRlZmluZWR9LCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5leHByZXNzaW9uLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRlZFZhbHVlID0gdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzLCAobnVsbDogYW55KSwge30sIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICBjb25zdCBpc0ltYWdlRXhwcmVzc2lvbiA9IHZhbHVlLnByb3BlcnR5LnNwZWNpZmljYXRpb24udHlwZSA9PT0gJ3Jlc29sdmVkSW1hZ2UnO1xuICAgICAgICAgICAgY29uc3QgY29uc3RhbnRWYWx1ZSA9IGlzSW1hZ2VFeHByZXNzaW9uICYmIHR5cGVvZiBldmFsdWF0ZWRWYWx1ZSAhPT0gJ3N0cmluZycgPyBldmFsdWF0ZWRWYWx1ZS5uYW1lIDogZXZhbHVhdGVkVmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjb25zdGFudCA9IHRoaXMuX2NhbGN1bGF0ZShjb25zdGFudFZhbHVlLCBjb25zdGFudFZhbHVlLCBjb25zdGFudFZhbHVlLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogY29uc3RhbnR9LCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5leHByZXNzaW9uLmtpbmQgPT09ICdjYW1lcmEnKSB7XG4gICAgICAgICAgICBjb25zdCBjYW1lcmFWYWwgPSB0aGlzLl9jYWxjdWxhdGUoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHBhcmFtZXRlcnMuem9vbSAtIDEuMH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiBwYXJhbWV0ZXJzLnpvb219KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogcGFyYW1ldGVycy56b29tICsgMS4wfSksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiBjYW1lcmFWYWx9LCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNvdXJjZSBvciBjb21wb3NpdGUgZXhwcmVzc2lvblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywgdmFsdWUuZXhwcmVzc2lvbiwgcGFyYW1ldGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmFsdWF0ZSh2YWx1ZTogUG9zc2libHlFdmFsdWF0ZWRWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4sIGdsb2JhbHM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6ID9Dcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgaWYgKHZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgICBjb25zdCBjb25zdGFudCA9IHZhbHVlLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWxjdWxhdGUoY29uc3RhbnQsIGNvbnN0YW50LCBjb25zdGFudCwgZ2xvYmFscyk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWxjdWxhdGUoXG4gICAgICAgICAgICAgICAgdmFsdWUuZXZhbHVhdGUoe3pvb206IE1hdGguZmxvb3IoZ2xvYmFscy56b29tKSAtIDEuMH0sIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSksXG4gICAgICAgICAgICAgICAgdmFsdWUuZXZhbHVhdGUoe3pvb206IE1hdGguZmxvb3IoZ2xvYmFscy56b29tKX0sIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSksXG4gICAgICAgICAgICAgICAgdmFsdWUuZXZhbHVhdGUoe3pvb206IE1hdGguZmxvb3IoZ2xvYmFscy56b29tKSArIDEuMH0sIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSksXG4gICAgICAgICAgICAgICAgZ2xvYmFscyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY2FsY3VsYXRlKG1pbjogVCwgbWlkOiBULCBtYXg6IFQsIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKTogQ3Jvc3NGYWRlZDxUPiB7XG4gICAgICAgIGNvbnN0IHogPSBwYXJhbWV0ZXJzLnpvb207XG4gICAgICAgIHJldHVybiB6ID4gcGFyYW1ldGVycy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20gPyB7ZnJvbTogbWluLCB0bzogbWlkfSA6IHtmcm9tOiBtYXgsIHRvOiBtaWR9O1xuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4pOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8P0Nyb3NzRmFkZWQ8VD4+IHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxufVxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBgUHJvcGVydHlgIGZvciBgKi1wYXR0ZXJuYCBhbmQgYGxpbmUtZGFzaGFycmF5YCwgd2hpY2ggYXJlIHRyYW5zaXRpb25lZCBieSBjcm9zcy1mYWRpbmdcbiAqIHJhdGhlciB0aGFuIGludGVycG9sYXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIENyb3NzRmFkZWRQcm9wZXJ0eTxUPiBpbXBsZW1lbnRzIFByb3BlcnR5PFQsID9Dcm9zc0ZhZGVkPFQ+PiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLnNwZWNpZmljYXRpb24gPSBzcGVjaWZpY2F0aW9uO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgP0Nyb3NzRmFkZWQ8VD4+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6ID9Dcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgaWYgKHZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUuZXhwcmVzc2lvbi5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBjb25zdGFudCA9IHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUocGFyYW1ldGVycywgKG51bGw6IGFueSksIHt9LCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShjb25zdGFudCwgY29uc3RhbnQsIGNvbnN0YW50LCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFzc2VydCghdmFsdWUuaXNEYXRhRHJpdmVuKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSAtIDEuMCksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSArIDEuMCksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxjdWxhdGUobWluOiBULCBtaWQ6IFQsIG1heDogVCwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiA/Q3Jvc3NGYWRlZDxUPiB7XG4gICAgICAgIGNvbnN0IHogPSBwYXJhbWV0ZXJzLnpvb207XG4gICAgICAgIHJldHVybiB6ID4gcGFyYW1ldGVycy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20gPyB7ZnJvbTogbWluLCB0bzogbWlkfSA6IHtmcm9tOiBtYXgsIHRvOiBtaWR9O1xuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6ID9Dcm9zc0ZhZGVkPFQ+KTogP0Nyb3NzRmFkZWQ8VD4ge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgYFByb3BlcnR5YCBmb3IgYGhlYXRtYXAtY29sb3JgIGFuZCBgbGluZS1ncmFkaWVudGAuIEludGVycG9sYXRpb24gaXMgYSBuby1vcCwgYW5kXG4gKiBldmFsdWF0aW9uIHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluIG9yZGVyIHRvIGluZGljYXRlIGl0cyBwcmVzZW5jZSwgYnV0IHRoZSByZWFsXG4gKiBldmFsdWF0aW9uIGhhcHBlbnMgaW4gU3R5bGVMYXllciBjbGFzc2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNsYXNzIENvbG9yUmFtcFByb3BlcnR5IGltcGxlbWVudHMgUHJvcGVydHk8Q29sb3IsIGJvb2xlYW4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxDb2xvciwgYm9vbGVhbj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUocGFyYW1ldGVycywgKG51bGw6IGFueSksIHt9LCBhdmFpbGFibGVJbWFnZXMpO1xuICAgIH1cblxuICAgIGludGVycG9sYXRlKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cbn1cblxuLyoqXG4gKiBgUHJvcGVydGllc2AgaG9sZHMgb2JqZWN0cyBjb250YWluaW5nIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgbGF5b3V0IG9yIHBhaW50IHByb3BlcnR5IHNldCBvZiBhIGdpdmVuXG4gKiBsYXllciB0eXBlLiBUaGVzZSBvYmplY3RzIGFyZSBpbW11dGFibGUsIGFuZCB0aGV5IGFyZSB1c2VkIGFzIHRoZSBwcm90b3R5cGVzIGZvciB0aGUgYF92YWx1ZXNgIG1lbWJlcnMgb2ZcbiAqIGBUcmFuc2l0aW9uYWJsZWAsIGBUcmFuc2l0aW9uaW5nYCwgYExheW91dGAsIGFuZCBgUG9zc2libHlFdmFsdWF0ZWRgLiBUaGlzIGFsbG93cyB0aGVzZSBjbGFzc2VzIHRvIGF2b2lkXG4gKiBkb2luZyB3b3JrIGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSBhIHByb3BlcnR5IGhhcyBubyBleHBsaWNpdCB2YWx1ZSBzZXQgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIHRvIHRha2VcbiAqIG9uIHRoZSBkZWZhdWx0IHZhbHVlOiB1c2luZyBgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKWAsIHRoZXkgY2FuIGl0ZXJhdGUgb3ZlclxuICogb25seSB0aGUgX293bl8gcHJvcGVydGllcyBvZiBgX3ZhbHVlc2AsIHNraXBwaW5nIHJlcGVhdGVkIGNhbGN1bGF0aW9uIG9mIHRyYW5zaXRpb25zIGFuZCBwb3NzaWJsZS9maW5hbFxuICogZXZhbHVhdGlvbnMgZm9yIGRlZmF1bHRzLCB0aGUgcmVzdWx0IG9mIHdoaWNoIHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0aWVzPFByb3BzOiBPYmplY3Q+IHtcbiAgICBwcm9wZXJ0aWVzOiBQcm9wcztcbiAgICBkZWZhdWx0UHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWVzPFByb3BzPjtcbiAgICBkZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlczogVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG4gICAgZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlczogVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPFByb3BzPjtcbiAgICBkZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXM6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuICAgIG92ZXJyaWRhYmxlUHJvcGVydGllczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IFByb3BzKSB7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzID0gKHt9OiBhbnkpO1xuICAgICAgICB0aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzID0gKHt9OiBhbnkpO1xuICAgICAgICB0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXMgPSAoe306IGFueSk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzID0gKHt9OiBhbnkpO1xuICAgICAgICB0aGlzLm92ZXJyaWRhYmxlUHJvcGVydGllcyA9IChbXTogYW55KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wZXJ0aWVzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChwcm9wLnNwZWNpZmljYXRpb24ub3ZlcnJpZGFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRhYmxlUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRQcm9wZXJ0eVZhbHVlID0gdGhpcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXNbcHJvcGVydHldID1cbiAgICAgICAgICAgICAgICBuZXcgUHJvcGVydHlWYWx1ZShwcm9wLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZSA9IHRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXNbcHJvcGVydHldID1cbiAgICAgICAgICAgICAgICBuZXcgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlKHByb3ApO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzW3Byb3BlcnR5XSA9XG4gICAgICAgICAgICAgICAgZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZS51bnRyYW5zaXRpb25lZCgpO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXNbcHJvcGVydHldID1cbiAgICAgICAgICAgICAgICBkZWZhdWx0UHJvcGVydHlWYWx1ZS5wb3NzaWJseUV2YWx1YXRlKCh7fTogYW55KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdEYXRhRHJpdmVuUHJvcGVydHknLCBEYXRhRHJpdmVuUHJvcGVydHkpO1xucmVnaXN0ZXIoJ0RhdGFDb25zdGFudFByb3BlcnR5JywgRGF0YUNvbnN0YW50UHJvcGVydHkpO1xucmVnaXN0ZXIoJ0Nyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHknLCBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5KTtcbnJlZ2lzdGVyKCdDcm9zc0ZhZGVkUHJvcGVydHknLCBDcm9zc0ZhZGVkUHJvcGVydHkpO1xucmVnaXN0ZXIoJ0NvbG9yUmFtcFByb3BlcnR5JywgQ29sb3JSYW1wUHJvcGVydHkpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtlbmRzV2l0aCwgZmlsdGVyT2JqZWN0fSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5pbXBvcnQge1xuICAgIHZhbGlkYXRlU3R5bGUsXG4gICAgdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eSxcbiAgICB2YWxpZGF0ZVBhaW50UHJvcGVydHksXG4gICAgZW1pdFZhbGlkYXRpb25FcnJvcnNcbn0gZnJvbSAnLi92YWxpZGF0ZV9zdHlsZSc7XG5pbXBvcnQge0V2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQge0xheW91dCwgVHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFByb3BlcnRpZXMsIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZX0gZnJvbSAnLi9wcm9wZXJ0aWVzJztcbmltcG9ydCB7c3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtCdWNrZXR9IGZyb20gJy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVGaWx0ZXJ9IGZyb20gJy4uL3N0eWxlLXNwZWMvZmVhdHVyZV9maWx0ZXInO1xuaW1wb3J0IHR5cGUge1RyYW5zaXRpb25QYXJhbWV0ZXJzLCBQcm9wZXJ0eVZhbHVlfSBmcm9tICcuL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvblBhcmFtZXRlcnMsIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7XG4gICAgTGF5ZXJTcGVjaWZpY2F0aW9uLFxuICAgIEZpbHRlclNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUge1N0eWxlU2V0dGVyT3B0aW9uc30gZnJvbSAnLi9zdHlsZSc7XG5cbmNvbnN0IFRSQU5TSVRJT05fU1VGRklYID0gJy10cmFuc2l0aW9uJztcblxuY2xhc3MgU3R5bGVMYXllciBleHRlbmRzIEV2ZW50ZWQge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IG1peGVkO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBzb3VyY2VMYXllcjogP3N0cmluZztcbiAgICBtaW56b29tOiA/bnVtYmVyO1xuICAgIG1heHpvb206ID9udW1iZXI7XG4gICAgZmlsdGVyOiBGaWx0ZXJTcGVjaWZpY2F0aW9uIHwgdm9pZDtcbiAgICB2aXNpYmlsaXR5OiAndmlzaWJsZScgfCAnbm9uZScgfCB2b2lkO1xuICAgIF9jcm9zc2ZhZGVQYXJhbWV0ZXJzOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzO1xuXG4gICAgX3VuZXZhbHVhdGVkTGF5b3V0OiBMYXlvdXQ8YW55PjtcbiAgICArbGF5b3V0OiBtaXhlZDtcblxuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxhbnk+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8YW55PjtcbiAgICArcGFpbnQ6IG1peGVkO1xuXG4gICAgX2ZlYXR1cmVGaWx0ZXI6IEZlYXR1cmVGaWx0ZXI7XG5cbiAgICArcXVlcnlSYWRpdXM6IChidWNrZXQ6IEJ1Y2tldCkgPT4gbnVtYmVyO1xuICAgICtxdWVyeUludGVyc2VjdHNGZWF0dXJlOiAocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSkgPT4gYm9vbGVhbiB8IG51bWJlcjtcblxuICAgICtvbkFkZDogPyhtYXA6IE1hcCkgPT4gdm9pZDtcbiAgICArb25SZW1vdmU6ID8obWFwOiBNYXApID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uIHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UsIHByb3BlcnRpZXM6ICRSZWFkT25seTx7bGF5b3V0PzogUHJvcGVydGllczwqPiwgcGFpbnQ/OiBQcm9wZXJ0aWVzPCo+fT4pIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLmlkID0gbGF5ZXIuaWQ7XG4gICAgICAgIHRoaXMudHlwZSA9IGxheWVyLnR5cGU7XG4gICAgICAgIHRoaXMuX2ZlYXR1cmVGaWx0ZXIgPSAoKSA9PiB0cnVlO1xuXG4gICAgICAgIGlmIChsYXllci50eXBlID09PSAnY3VzdG9tJykgcmV0dXJuO1xuXG4gICAgICAgIGxheWVyID0gKChsYXllcjogYW55KTogTGF5ZXJTcGVjaWZpY2F0aW9uKTtcblxuICAgICAgICB0aGlzLm1ldGFkYXRhID0gbGF5ZXIubWV0YWRhdGE7XG4gICAgICAgIHRoaXMubWluem9vbSA9IGxheWVyLm1pbnpvb207XG4gICAgICAgIHRoaXMubWF4em9vbSA9IGxheWVyLm1heHpvb207XG5cbiAgICAgICAgaWYgKGxheWVyLnR5cGUgIT09ICdiYWNrZ3JvdW5kJykge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBsYXllci5zb3VyY2U7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUxheWVyID0gbGF5ZXJbJ3NvdXJjZS1sYXllciddO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSBsYXllci5maWx0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydGllcy5sYXlvdXQpIHtcbiAgICAgICAgICAgIHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0ID0gbmV3IExheW91dChwcm9wZXJ0aWVzLmxheW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydGllcy5wYWludCkge1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludCA9IG5ldyBUcmFuc2l0aW9uYWJsZShwcm9wZXJ0aWVzLnBhaW50KTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsYXllci5wYWludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFpbnRQcm9wZXJ0eShwcm9wZXJ0eSwgbGF5ZXIucGFpbnRbcHJvcGVydHldLCB7dmFsaWRhdGU6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVyLmxheW91dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGF5b3V0UHJvcGVydHkocHJvcGVydHksIGxheWVyLmxheW91dFtwcm9wZXJ0eV0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50ID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC51bnRyYW5zaXRpb25lZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nyb3NzZmFkZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgZ2V0TGF5b3V0UHJvcGVydHkobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChuYW1lID09PSAndmlzaWJpbGl0eScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2liaWxpdHk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUobmFtZSk7XG4gICAgfVxuXG4gICAgc2V0TGF5b3V0UHJvcGVydHkobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYGxheWVycy4ke3RoaXMuaWR9LmxheW91dC4ke25hbWV9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZUxheW91dFByb3BlcnR5LCBrZXksIG5hbWUsIHZhbHVlLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lID09PSAndmlzaWJpbGl0eScpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGdldFBhaW50UHJvcGVydHkobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChlbmRzV2l0aChuYW1lLCBUUkFOU0lUSU9OX1NVRkZJWCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFRyYW5zaXRpb24obmFtZS5zbGljZSgwLCAtVFJBTlNJVElPTl9TVUZGSVgubGVuZ3RoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRWYWx1ZShuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFBhaW50UHJvcGVydHkobmFtZTogc3RyaW5nLCB2YWx1ZTogbWl4ZWQsIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgbGF5ZXJzLiR7dGhpcy5pZH0ucGFpbnQuJHtuYW1lfWA7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGUodmFsaWRhdGVQYWludFByb3BlcnR5LCBrZXksIG5hbWUsIHZhbHVlLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmRzV2l0aChuYW1lLCBUUkFOU0lUSU9OX1NVRkZJWCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VHJhbnNpdGlvbihuYW1lLnNsaWNlKDAsIC1UUkFOU0lUSU9OX1NVRkZJWC5sZW5ndGgpLCAodmFsdWU6IGFueSkgfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb25hYmxlID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgaXNDcm9zc0ZhZGVkUHJvcGVydHkgPSB0cmFuc2l0aW9uYWJsZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uW1wicHJvcGVydHktdHlwZVwiXSA9PT0gJ2Nyb3NzLWZhZGVkLWRhdGEtZHJpdmVuJztcbiAgICAgICAgICAgIGNvbnN0IHdhc0RhdGFEcml2ZW4gPSB0cmFuc2l0aW9uYWJsZS52YWx1ZS5pc0RhdGFEcml2ZW4oKTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdHJhbnNpdGlvbmFibGUudmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGUobmFtZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW25hbWVdLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaXNEYXRhRHJpdmVuID0gbmV3VmFsdWUuaXNEYXRhRHJpdmVuKCk7XG5cbiAgICAgICAgICAgIC8vIGlmIGEgY3Jvc3MtZmFkZWQgdmFsdWUgaXMgY2hhbmdlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG5ldyBpY29ucyBnZXQgYWRkZWQgdG8gZWFjaCB0aWxlJ3MgaWNvbkF0bGFzXG4gICAgICAgICAgICAvLyBzbyBhIGNhbGwgdG8gX3VwZGF0ZUxheWVyIGlzIG5lY2Vzc2FyeSwgYW5kIHdlIHJldHVybiB0cnVlIGZyb20gdGhpcyBmdW5jdGlvbiBzbyBpdCBnZXRzIGNhbGxlZCBpblxuICAgICAgICAgICAgLy8gU3R5bGUjc2V0UGFpbnRQcm9wZXJ0eVxuICAgICAgICAgICAgcmV0dXJuIGlzRGF0YURyaXZlbiB8fCB3YXNEYXRhRHJpdmVuIHx8IGlzQ3Jvc3NGYWRlZFByb3BlcnR5IHx8IHRoaXMuX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlKF86IHN0cmluZykge1xuICAgICAgICAvLyBOby1vcDsgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzLlxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIF9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGU8VCwgUj4obmFtZTogc3RyaW5nLCBvbGRWYWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPiwgbmV3VmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj4pOiBib29sZWFuIHtcbiAgICAgICAgLy8gTm8tb3A7IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzSGlkZGVuKHpvb206IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5taW56b29tICYmIHpvb20gPCB0aGlzLm1pbnpvb20pIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5tYXh6b29tICYmIHpvb20gPj0gdGhpcy5tYXh6b29tKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJpbGl0eSA9PT0gJ25vbmUnO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnM6IFRyYW5zaXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludCA9IHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudHJhbnNpdGlvbmVkKHBhcmFtZXRlcnMsIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludCk7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5oYXNUcmFuc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgcmVjYWxjdWxhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBpZiAocGFyYW1ldGVycy5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9jcm9zc2ZhZGVQYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQpIHtcbiAgICAgICAgICAgICh0aGlzOiBhbnkpLmxheW91dCA9IHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgICh0aGlzOiBhbnkpLnBhaW50ID0gdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50LnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dDogYW55ID0ge1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5pZCxcbiAgICAgICAgICAgICd0eXBlJzogdGhpcy50eXBlLFxuICAgICAgICAgICAgJ3NvdXJjZSc6IHRoaXMuc291cmNlLFxuICAgICAgICAgICAgJ3NvdXJjZS1sYXllcic6IHRoaXMuc291cmNlTGF5ZXIsXG4gICAgICAgICAgICAnbWV0YWRhdGEnOiB0aGlzLm1ldGFkYXRhLFxuICAgICAgICAgICAgJ21pbnpvb20nOiB0aGlzLm1pbnpvb20sXG4gICAgICAgICAgICAnbWF4em9vbSc6IHRoaXMubWF4em9vbSxcbiAgICAgICAgICAgICdmaWx0ZXInOiB0aGlzLmZpbHRlcixcbiAgICAgICAgICAgICdsYXlvdXQnOiB0aGlzLl91bmV2YWx1YXRlZExheW91dCAmJiB0aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgICdwYWludCc6IHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQgJiYgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXJpYWxpemUoKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLnZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgIG91dHB1dC5sYXlvdXQgPSBvdXRwdXQubGF5b3V0IHx8IHt9O1xuICAgICAgICAgICAgb3V0cHV0LmxheW91dC52aXNpYmlsaXR5ID0gdGhpcy52aXNpYmlsaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlck9iamVjdChvdXRwdXQsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICEoa2V5ID09PSAnbGF5b3V0JyAmJiAhT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCkgJiZcbiAgICAgICAgICAgICAgICAhKGtleSA9PT0gJ3BhaW50JyAmJiAhT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZSh2YWxpZGF0ZTogRnVuY3Rpb24sIGtleTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBtaXhlZCwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy52YWxpZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGUuY2FsbCh2YWxpZGF0ZVN0eWxlLCB7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBsYXllclR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIG9iamVjdEtleTogbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI0MDdcbiAgICAgICAgICAgIHN0eWxlOiB7Z2x5cGhzOiB0cnVlLCBzcHJpdGU6IHRydWV9XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpczNEKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNUaWxlQ2xpcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGhhc09mZnNjcmVlblBhc3MoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXNpemUoKSB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICBpc1N0YXRlRGVwZW5kZW50KCkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluICh0aGlzOiBhbnkpLnBhaW50Ll92YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHRoaXM6IGFueSkucGFpbnQuZ2V0KHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKSB8fCAhc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCh2YWx1ZS52YWx1ZS5raW5kID09PSAnc291cmNlJyB8fCB2YWx1ZS52YWx1ZS5raW5kID09PSAnY29tcG9zaXRlJykgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZS5pc1N0YXRlRGVwZW5kZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5cbi8vIE5vdGU6IGFsbCBcInNpemVzXCIgYXJlIG1lYXN1cmVkIGluIGJ5dGVzXG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUge1RyYW5zZmVyYWJsZX0gZnJvbSAnLi4vdHlwZXMvdHJhbnNmZXJhYmxlJztcblxuY29uc3Qgdmlld1R5cGVzID0ge1xuICAgICdJbnQ4JzogSW50OEFycmF5LFxuICAgICdVaW50OCc6IFVpbnQ4QXJyYXksXG4gICAgJ0ludDE2JzogSW50MTZBcnJheSxcbiAgICAnVWludDE2JzogVWludDE2QXJyYXksXG4gICAgJ0ludDMyJzogSW50MzJBcnJheSxcbiAgICAnVWludDMyJzogVWludDMyQXJyYXksXG4gICAgJ0Zsb2F0MzInOiBGbG9hdDMyQXJyYXlcbn07XG5cbmV4cG9ydCB0eXBlIFZpZXdUeXBlID0gJEtleXM8dHlwZW9mIHZpZXdUeXBlcz47XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0IHtcbiAgICBfcG9zMTogbnVtYmVyO1xuICAgIF9wb3MyOiBudW1iZXI7XG4gICAgX3BvczQ6IG51bWJlcjtcbiAgICBfcG9zODogbnVtYmVyO1xuICAgICtfc3RydWN0QXJyYXk6IFN0cnVjdEFycmF5O1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZSBwcm90b3R5cGUgb2Ygc3ViIGNsYXNzZXMuXG4gICAgc2l6ZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJ1Y3RBcnJheX0gc3RydWN0QXJyYXkgVGhlIFN0cnVjdEFycmF5IHRoZSBzdHJ1Y3QgaXMgc3RvcmVkIGluXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgc3RydWN0IGluIHRoZSBTdHJ1Y3RBcnJheS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHN0cnVjdEFycmF5OiBTdHJ1Y3RBcnJheSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICAodGhpczogYW55KS5fc3RydWN0QXJyYXkgPSBzdHJ1Y3RBcnJheTtcbiAgICAgICAgdGhpcy5fcG9zMSA9IGluZGV4ICogdGhpcy5zaXplO1xuICAgICAgICB0aGlzLl9wb3MyID0gdGhpcy5fcG9zMSAvIDI7XG4gICAgICAgIHRoaXMuX3BvczQgPSB0aGlzLl9wb3MxIC8gNDtcbiAgICAgICAgdGhpcy5fcG9zOCA9IHRoaXMuX3BvczEgLyA4O1xuICAgIH1cbn1cblxuY29uc3QgREVGQVVMVF9DQVBBQ0lUWSA9IDEyODtcbmNvbnN0IFJFU0laRV9NVUxUSVBMSUVSID0gNTtcblxuZXhwb3J0IHR5cGUgU3RydWN0QXJyYXlNZW1iZXIgPSB7XG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHR5cGU6IFZpZXdUeXBlLFxuICAgIGNvbXBvbmVudHM6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlclxufTtcblxuZXhwb3J0IHR5cGUgU3RydWN0QXJyYXlMYXlvdXQgPSB7XG4gICAgbWVtYmVyczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+LFxuICAgIHNpemU6IG51bWJlcixcbiAgICBhbGlnbm1lbnQ6ID9udW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFN0cnVjdEFycmF5ID0ge1xuICAgIGxlbmd0aDogbnVtYmVyLFxuICAgIGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlclxufTtcblxuLyoqXG4gKiBgU3RydWN0QXJyYXlgIHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIG92ZXIgYEFycmF5QnVmZmVyYCBhbmQgYFR5cGVkQXJyYXlgXG4gKiBtYWtpbmcgaXQgYmVoYXZlIGxpa2UgYW4gYXJyYXkgb2YgdHlwZWQgc3RydWN0cy5cbiAqXG4gKiBDb25jZXB0dWFsbHksIGEgU3RydWN0QXJyYXkgaXMgY29tcHJpc2VkIG9mIGVsZW1lbnRzLCBpLmUuLCBpbnN0YW5jZXMgb2YgaXRzXG4gKiBhc3NvY2lhdGVkIHN0cnVjdCB0eXBlLiBFYWNoIHBhcnRpY3VsYXIgc3RydWN0IHR5cGUsIHRvZ2V0aGVyIHdpdGggYW5cbiAqIGFsaWdubWVudCBzaXplLCBkZXRlcm1pbmVzIHRoZSBtZW1vcnkgbGF5b3V0IG9mIGEgU3RydWN0QXJyYXkgd2hvc2UgZWxlbWVudHNcbiAqIGFyZSBvZiB0aGF0IHR5cGUuICBUaHVzLCBmb3IgZWFjaCBzdWNoIGxheW91dCB0aGF0IHdlIG5lZWQsIHdlIGhhdmVcbiAqIGEgY29ycnNlcG9uZGluZyBTdHJ1Y3RBcnJheUxheW91dCBjbGFzcywgaW5oZXJpdGluZyBmcm9tIFN0cnVjdEFycmF5IGFuZFxuICogaW1wbGVtZW50aW5nIGBlbXBsYWNlQmFjaygpYCBhbmQgYF9yZWZyZXNoVmlld3MoKWAuXG4gKlxuICogSW4gc29tZSBjYXNlcywgd2hlcmUgd2UgbmVlZCB0byBhY2Nlc3MgcGFydGljdWxhciBlbGVtZW50cyBvZiBhIFN0cnVjdEFycmF5LFxuICogd2UgaW1wbGVtZW50IGEgbW9yZSBzcGVjaWZpYyBzdWJjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gb25lIG9mIHRoZVxuICogU3RydWN0QXJyYXlMYXlvdXRzIGFuZCBhZGRzIGEgYGdldChpKTogVGAgYWNjZXNzb3IgdGhhdCByZXR1cm5zIGEgc3RydWN0dXJlZFxuICogb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIHByb3hpZXMgaW50byB0aGUgdW5kZXJseWluZyBtZW1vcnkgc3BhY2UgZm9yIHRoZVxuICogaS10aCBlbGVtZW50LiAgVGhpcyBhZmZvcmRzIHRoZSBjb252aWVuY2Ugb2Ygd29ya2luZyB3aXRoIChzZWVtaW5nbHkpIHBsYWluXG4gKiBKYXZhc2NyaXB0IG9iamVjdHMgd2l0aG91dCB0aGUgb3ZlcmhlYWQgb2Ygc2VyaWFsaXppbmcvZGVzZXJpYWxpemluZyB0aGVtXG4gKiBpbnRvIEFycmF5QnVmZmVycyBmb3IgZWZmaWNpZW50IHdlYiB3b3JrZXIgdHJhbnNmZXIuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXkge1xuICAgIGNhcGFjaXR5OiBudW1iZXI7XG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgaXNUcmFuc2ZlcnJlZDogYm9vbGVhbjtcbiAgICBhcnJheUJ1ZmZlcjogQXJyYXlCdWZmZXI7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlIHByb3RvdHlwZS5cbiAgICBtZW1iZXJzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG4gICAgYnl0ZXNQZXJFbGVtZW50OiBudW1iZXI7XG4gICAgK2VtcGxhY2VCYWNrOiBGdW5jdGlvbjtcbiAgICArZW1wbGFjZTogRnVuY3Rpb247XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pc1RyYW5zZmVycmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FwYWNpdHkgPSAtMTtcbiAgICAgICAgdGhpcy5yZXNpemUoMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplIGEgU3RydWN0QXJyYXkgaW5zdGFuY2UuICBTZXJpYWxpemVzIGJvdGggdGhlIHJhdyBkYXRhIGFuZCB0aGVcbiAgICAgKiBtZXRhZGF0YSBuZWVkZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIFN0cnVjdEFycmF5IGJhc2UgY2xhc3MgZHVyaW5nXG4gICAgICogZGVzZXJpYWxpemF0aW9uLlxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemUoYXJyYXk6IFN0cnVjdEFycmF5LCB0cmFuc2ZlcmFibGVzPzogQXJyYXk8VHJhbnNmZXJhYmxlPik6IFNlcmlhbGl6ZWRTdHJ1Y3RBcnJheSB7XG4gICAgICAgIGFzc2VydCghYXJyYXkuaXNUcmFuc2ZlcnJlZCk7XG5cbiAgICAgICAgYXJyYXkuX3RyaW0oKTtcblxuICAgICAgICBpZiAodHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgYXJyYXkuaXNUcmFuc2ZlcnJlZCA9IHRydWU7XG4gICAgICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goYXJyYXkuYXJyYXlCdWZmZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxlbmd0aDogYXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgYXJyYXlCdWZmZXI6IGFycmF5LmFycmF5QnVmZmVyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogU2VyaWFsaXplZFN0cnVjdEFycmF5KSB7XG4gICAgICAgIGNvbnN0IHN0cnVjdEFycmF5ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnByb3RvdHlwZSk7XG4gICAgICAgIHN0cnVjdEFycmF5LmFycmF5QnVmZmVyID0gaW5wdXQuYXJyYXlCdWZmZXI7XG4gICAgICAgIHN0cnVjdEFycmF5Lmxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgc3RydWN0QXJyYXkuY2FwYWNpdHkgPSBpbnB1dC5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoIC8gc3RydWN0QXJyYXkuYnl0ZXNQZXJFbGVtZW50O1xuICAgICAgICBzdHJ1Y3RBcnJheS5fcmVmcmVzaFZpZXdzKCk7XG4gICAgICAgIHJldHVybiBzdHJ1Y3RBcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNpemUgdGhlIGFycmF5IHRvIGRpc2NhcmQgdW51c2VkIGNhcGFjaXR5LlxuICAgICAqL1xuICAgIF90cmltKCkge1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggIT09IHRoaXMuY2FwYWNpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FwYWNpdHkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSB0aGlzLmFycmF5QnVmZmVyLnNsaWNlKDAsIHRoaXMubGVuZ3RoICogdGhpcy5ieXRlc1BlckVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFZpZXdzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHRvIDAgd2l0aG91dCBkZS1hbGxvY2F0aW5nIGNhcGNhY2l0eS5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2l6ZSB0aGUgYXJyYXkuXG4gICAgICogSWYgYG5gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBsZW5ndGggdGhlbiBhZGRpdGlvbmFsIGVsZW1lbnRzIHdpdGggdW5kZWZpbmVkIHZhbHVlcyBhcmUgYWRkZWQuXG4gICAgICogSWYgYG5gIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZW5ndGggdGhlbiB0aGUgYXJyYXkgd2lsbCBiZSByZWR1Y2VkIHRvIHRoZSBmaXJzdCBgbmAgZWxlbWVudHMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG5ldyBzaXplIG9mIHRoZSBhcnJheS5cbiAgICAgKi9cbiAgICByZXNpemUobjogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgdGhpcy5yZXNlcnZlKG4pO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IG47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGUgYSBwbGFubmVkIGluY3JlYXNlIGluIHNpemUsIHNvIHRoYXQgYW55IG5lY2Vzc2FyeSBhbGxvY2F0aW9uIG1heVxuICAgICAqIGJlIGRvbmUgb25jZSwgYWhlYWQgb2YgdGltZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgYXJyYXkuXG4gICAgICovXG4gICAgcmVzZXJ2ZShuOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKG4gPiB0aGlzLmNhcGFjaXR5KSB7XG4gICAgICAgICAgICB0aGlzLmNhcGFjaXR5ID0gTWF0aC5tYXgobiwgTWF0aC5mbG9vcih0aGlzLmNhcGFjaXR5ICogUkVTSVpFX01VTFRJUExJRVIpLCBERUZBVUxUX0NBUEFDSVRZKTtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy5jYXBhY2l0eSAqIHRoaXMuYnl0ZXNQZXJFbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3Qgb2xkVWludDhBcnJheSA9IHRoaXMudWludDg7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVmlld3MoKTtcbiAgICAgICAgICAgIGlmIChvbGRVaW50OEFycmF5KSB0aGlzLnVpbnQ4LnNldChvbGRVaW50OEFycmF5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBUeXBlZEFycmF5IHZpZXdzIGZvciB0aGUgY3VycmVudCBBcnJheUJ1ZmZlci5cbiAgICAgKi9cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ19yZWZyZXNoVmlld3MoKSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggY29uY3JldGUgU3RydWN0QXJyYXkgbGF5b3V0Jyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGEgbGlzdCBvZiBtZW1iZXIgZmllbGRzLCBjcmVhdGUgYSBmdWxsIFN0cnVjdEFycmF5TGF5b3V0LCBpblxuICogcGFydGljdWxhciBjYWxjdWxhdGluZyB0aGUgY29ycmVjdCBieXRlIG9mZnNldCBmb3IgZWFjaCBmaWVsZC4gIFRoaXMgZGF0YVxuICogaXMgdXNlZCBhdCBidWlsZCB0aW1lIHRvIGdlbmVyYXRlIFN0cnVjdEFycmF5TGF5b3V0XyojZW1wbGFjZUJhY2soKSBhbmRcbiAqIG90aGVyIGFjY2Vzc29ycywgYW5kIGF0IHJ1bnRpbWUgZm9yIGJpbmRpbmcgdmVydGV4IGJ1ZmZlciBhdHRyaWJ1dGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxheW91dChcbiAgICBtZW1iZXJzOiBBcnJheTx7IG5hbWU6IHN0cmluZywgdHlwZTogVmlld1R5cGUsICtjb21wb25lbnRzPzogbnVtYmVyLCB9PixcbiAgICBhbGlnbm1lbnQ6IG51bWJlciA9IDFcbik6IFN0cnVjdEFycmF5TGF5b3V0IHtcblxuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBtYXhTaXplID0gMDtcbiAgICBjb25zdCBsYXlvdXRNZW1iZXJzID0gbWVtYmVycy5tYXAoKG1lbWJlcikgPT4ge1xuICAgICAgICBhc3NlcnQobWVtYmVyLm5hbWUubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgdHlwZVNpemUgPSBzaXplT2YobWVtYmVyLnR5cGUpO1xuICAgICAgICBjb25zdCBtZW1iZXJPZmZzZXQgPSBvZmZzZXQgPSBhbGlnbihvZmZzZXQsIE1hdGgubWF4KGFsaWdubWVudCwgdHlwZVNpemUpKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IG1lbWJlci5jb21wb25lbnRzIHx8IDE7XG5cbiAgICAgICAgbWF4U2l6ZSA9IE1hdGgubWF4KG1heFNpemUsIHR5cGVTaXplKTtcbiAgICAgICAgb2Zmc2V0ICs9IHR5cGVTaXplICogY29tcG9uZW50cztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogbWVtYmVyLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiBtZW1iZXIudHlwZSxcbiAgICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgICBvZmZzZXQ6IG1lbWJlck9mZnNldCxcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNpemUgPSBhbGlnbihvZmZzZXQsIE1hdGgubWF4KG1heFNpemUsIGFsaWdubWVudCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWVtYmVyczogbGF5b3V0TWVtYmVycyxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgYWxpZ25tZW50XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2l6ZU9mKHR5cGU6IFZpZXdUeXBlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdmlld1R5cGVzW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xufVxuXG5mdW5jdGlvbiBhbGlnbihvZmZzZXQ6IG51bWJlciwgc2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKG9mZnNldCAvIHNpemUpICogc2l6ZTtcbn1cblxuZXhwb3J0IHtTdHJ1Y3RBcnJheSwgU3RydWN0LCB2aWV3VHlwZXMsIGNyZWF0ZUxheW91dH07XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0cnVjdC1hcnJheXMuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7U3RydWN0LCBTdHJ1Y3RBcnJheX0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0Mmk0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJpNC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJpNCcsIFN0cnVjdEFycmF5TGF5b3V0Mmk0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNls0XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0NGk4IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2Myk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogNDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQ0aTgucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDg7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQ0aTgnLCBTdHJ1Y3RBcnJheUxheW91dDRpOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqIFs0XTogSW50MTZbNF1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpNGkxMiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogNjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNV0gPSB2NTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJpNGkxMi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTI7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyaTRpMTInLCBTdHJ1Y3RBcnJheUxheW91dDJpNGkxMik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqIFs0XTogVWludDhbNF1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpNHViOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogNDtcbiAgICAgICAgY29uc3QgbzEgPSBpICogODtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgNF0gPSB2MjtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDVdID0gdjM7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyA2XSA9IHY0O1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgN10gPSB2NTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJpNHViOC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJpNHViOCcsIFN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50MTZbOF1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDh1aTE2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA4O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNF0gPSB2NDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDZdID0gdjY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgN10gPSB2NztcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDh1aTE2LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxNjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDh1aTE2JywgU3RydWN0QXJyYXlMYXlvdXQ4dWkxNik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbNF1cbiAqIFs4XTogVWludDE2WzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTE2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDg7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNV0gPSB2NTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA2XSA9IHY2O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDddID0gdjc7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTE2LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxNjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDRpNHVpMTYnLCBTdHJ1Y3RBcnJheUxheW91dDRpNHVpMTYpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEZsb2F0MzJbM11cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDNmMTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2Mik7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMztcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMl0gPSB2MjtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDNmMTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDEyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0M2YxMicsIFN0cnVjdEFycmF5TGF5b3V0M2YxMik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDMyWzFdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQxdWw0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIHVpbnQzMjogVWludDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjApO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDE7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDF1bDQucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDQ7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQxdWw0JywgU3RydWN0QXJyYXlMYXlvdXQxdWw0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNls2XVxuICogWzEyXTogVWludDMyWzFdXG4gKiBbMTZdOiBVaW50MTZbMl1cbiAqIFsyMF06IEludDE2WzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMTI7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDY7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICB0aGlzLmludDE2W28yICsgNF0gPSB2NDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgM10gPSB2NjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA4XSA9IHY3O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDldID0gdjg7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxMF0gPSB2OTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDExXSA9IHYxMDtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMmkyNC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMjQ7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQnLCBTdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMmkyNCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqIFs0XTogSW50MTZbMl1cbiAqIFs4XTogSW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA2O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDEyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTInLCBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50OFsyXVxuICogWzRdOiBGbG9hdDMyWzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMSA9IGkgKiAxMjtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMztcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDBdID0gdjA7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxXSA9IHYyO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAyXSA9IHYzO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MnViMmYxMi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTI7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyJywgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlsyXVxuICogWzRdOiBVaW50MTZbMl1cbiAqIFs4XTogVWludDMyWzNdXG4gKiBbMjBdOiBVaW50MTZbM11cbiAqIFsyOF06IEZsb2F0MzJbMl1cbiAqIFszNl06IFVpbnQ4WzNdXG4gKiBbNDBdOiBVaW50MzJbMV1cbiAqIFs0NF06IEludDE2WzFdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuICAgIHVpbnQzMjogVWludDMyQXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlciwgdjExOiBudW1iZXIsIHYxMjogbnVtYmVyLCB2MTM6IG51bWJlciwgdjE0OiBudW1iZXIsIHYxNTogbnVtYmVyLCB2MTY6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyLCB2MTI6IG51bWJlciwgdjEzOiBudW1iZXIsIHYxNDogbnVtYmVyLCB2MTU6IG51bWJlciwgdjE2OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMjQ7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDEyO1xuICAgICAgICBjb25zdCBvMSA9IGkgKiA0ODtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAyXSA9IHY0O1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDNdID0gdjU7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgNF0gPSB2NjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMF0gPSB2NztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMV0gPSB2ODtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMl0gPSB2OTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgN10gPSB2MTA7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDhdID0gdjExO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMzZdID0gdjEyO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMzddID0gdjEzO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMzhdID0gdjE0O1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDEwXSA9IHYxNTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDIyXSA9IHYxNjtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0ODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4JywgU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbOF1cbiAqIFsxNl06IFVpbnQxNlsxNF1cbiAqIFs0NF06IFVpbnQzMlsxXVxuICogWzQ4XTogRmxvYXQzMlszXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0OGkxNHVpMXVsM2Y2MCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuICAgIHVpbnQzMjogVWludDMyQXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlciwgdjExOiBudW1iZXIsIHYxMjogbnVtYmVyLCB2MTM6IG51bWJlciwgdjE0OiBudW1iZXIsIHYxNTogbnVtYmVyLCB2MTY6IG51bWJlciwgdjE3OiBudW1iZXIsIHYxODogbnVtYmVyLCB2MTk6IG51bWJlciwgdjIwOiBudW1iZXIsIHYyMTogbnVtYmVyLCB2MjI6IG51bWJlciwgdjIzOiBudW1iZXIsIHYyNDogbnVtYmVyLCB2MjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyLCB2MTI6IG51bWJlciwgdjEzOiBudW1iZXIsIHYxNDogbnVtYmVyLCB2MTU6IG51bWJlciwgdjE2OiBudW1iZXIsIHYxNzogbnVtYmVyLCB2MTg6IG51bWJlciwgdjE5OiBudW1iZXIsIHYyMDogbnVtYmVyLCB2MjE6IG51bWJlciwgdjIyOiBudW1iZXIsIHYyMzogbnVtYmVyLCB2MjQ6IG51bWJlciwgdjI1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMzA7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDE1O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNl0gPSB2NjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDddID0gdjc7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgOF0gPSB2ODtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA5XSA9IHY5O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEwXSA9IHYxMDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMV0gPSB2MTE7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTJdID0gdjEyO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEzXSA9IHYxMztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxNF0gPSB2MTQ7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTVdID0gdjE1O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE2XSA9IHYxNjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxN10gPSB2MTc7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMThdID0gdjE4O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE5XSA9IHYxOTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyMF0gPSB2MjA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMjFdID0gdjIxO1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDExXSA9IHYyMjtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMTJdID0gdjIzO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxM10gPSB2MjQ7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDE0XSA9IHYyNTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDhpMTR1aTF1bDNmNjAucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDYwO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0OGkxNHVpMXVsM2Y2MCcsIFN0cnVjdEFycmF5TGF5b3V0OGkxNHVpMXVsM2Y2MCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogRmxvYXQzMlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MWY0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MWY0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MWY0JywgU3RydWN0QXJyYXlMYXlvdXQxZjQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzNdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQzaTYgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQzaTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQzaTYnLCBTdHJ1Y3RBcnJheUxheW91dDNpNik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDMyWzFdXG4gKiBbNF06IFVpbnQxNlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDI7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDQ7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDNdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCcsIFN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDE2WzNdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQzdWk2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2Mik7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDN1aTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQzdWk2JywgU3RydWN0QXJyYXlMYXlvdXQzdWk2KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJ1aTQgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDI7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MnVpNC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJ1aTQnLCBTdHJ1Y3RBcnJheUxheW91dDJ1aTQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQxNlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MXVpMiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQxdWkyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MXVpMicsIFN0cnVjdEFycmF5TGF5b3V0MXVpMik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogRmxvYXQzMlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MmY4IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMjtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMV0gPSB2MTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJmOC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJmOCcsIFN0cnVjdEFycmF5TGF5b3V0MmY4KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBGbG9hdDMyWzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ0ZjE2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiA0O1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAzXSA9IHYzO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0NGYxNi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQ0ZjE2JywgU3RydWN0QXJyYXlMYXlvdXQ0ZjE2KTtcblxuY2xhc3MgQ29sbGlzaW9uQm94U3RydWN0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfc3RydWN0QXJyYXk6IENvbGxpc2lvbkJveEFycmF5O1xuICAgIGFuY2hvclBvaW50WDogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50WTogbnVtYmVyO1xuICAgIHgxOiBudW1iZXI7XG4gICAgeTE6IG51bWJlcjtcbiAgICB4MjogbnVtYmVyO1xuICAgIHkyOiBudW1iZXI7XG4gICAgZmVhdHVyZUluZGV4OiBudW1iZXI7XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgcmFkaXVzOiBudW1iZXI7XG4gICAgc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yOiBudW1iZXI7XG4gICAgYW5jaG9yUG9pbnQ6IFBvaW50O1xuICAgIGdldCBhbmNob3JQb2ludFgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBzZXQgYW5jaG9yUG9pbnRYKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF0gPSB4OyB9XG4gICAgZ2V0IGFuY2hvclBvaW50WSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIHNldCBhbmNob3JQb2ludFkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXSA9IHg7IH1cbiAgICBnZXQgeDEoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMl07IH1cbiAgICBzZXQgeDEoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAyXSA9IHg7IH1cbiAgICBnZXQgeTEoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBzZXQgeTEoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAzXSA9IHg7IH1cbiAgICBnZXQgeDIoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNF07IH1cbiAgICBzZXQgeDIoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA0XSA9IHg7IH1cbiAgICBnZXQgeTIoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNV07IH1cbiAgICBzZXQgeTIoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA1XSA9IHg7IH1cbiAgICBnZXQgZmVhdHVyZUluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAzXTsgfVxuICAgIHNldCBmZWF0dXJlSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgM10gPSB4OyB9XG4gICAgZ2V0IHNvdXJjZUxheWVySW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDhdOyB9XG4gICAgc2V0IHNvdXJjZUxheWVySW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgOF0gPSB4OyB9XG4gICAgZ2V0IGJ1Y2tldEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA5XTsgfVxuICAgIHNldCBidWNrZXRJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA5XSA9IHg7IH1cbiAgICBnZXQgcmFkaXVzKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIHNldCByYWRpdXMoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxMF0gPSB4OyB9XG4gICAgZ2V0IHNpZ25lZERpc3RhbmNlRnJvbUFuY2hvcigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBzZXQgc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMTFdID0geDsgfVxuICAgIGdldCBhbmNob3JQb2ludCgpIHsgcmV0dXJuIG5ldyBQb2ludCh0aGlzLmFuY2hvclBvaW50WCwgdGhpcy5hbmNob3JQb2ludFkpOyB9XG59XG5cbkNvbGxpc2lvbkJveFN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDI0O1xuXG5leHBvcnQgdHlwZSBDb2xsaXNpb25Cb3ggPSBDb2xsaXNpb25Cb3hTdHJ1Y3Q7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbGxpc2lvbkJveEFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgQ29sbGlzaW9uQm94U3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IENvbGxpc2lvbkJveFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsaXNpb25Cb3hTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0NvbGxpc2lvbkJveEFycmF5JywgQ29sbGlzaW9uQm94QXJyYXkpO1xuXG5jbGFzcyBQbGFjZWRTeW1ib2xTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogUGxhY2VkU3ltYm9sQXJyYXk7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICBnbHlwaFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBudW1HbHlwaHM6IG51bWJlcjtcbiAgICB2ZXJ0ZXhTdGFydEluZGV4OiBudW1iZXI7XG4gICAgbGluZVN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBsaW5lTGVuZ3RoOiBudW1iZXI7XG4gICAgc2VnbWVudDogbnVtYmVyO1xuICAgIGxvd2VyU2l6ZTogbnVtYmVyO1xuICAgIHVwcGVyU2l6ZTogbnVtYmVyO1xuICAgIGxpbmVPZmZzZXRYOiBudW1iZXI7XG4gICAgbGluZU9mZnNldFk6IG51bWJlcjtcbiAgICB3cml0aW5nTW9kZTogbnVtYmVyO1xuICAgIHBsYWNlZE9yaWVudGF0aW9uOiBudW1iZXI7XG4gICAgaGlkZGVuOiBudW1iZXI7XG4gICAgY3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICBhc3NvY2lhdGVkSWNvbkluZGV4OiBudW1iZXI7XG4gICAgZ2V0IGFuY2hvclgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBzZXQgYW5jaG9yWCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdID0geDsgfVxuICAgIGdldCBhbmNob3JZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDFdOyB9XG4gICAgc2V0IGFuY2hvclkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXSA9IHg7IH1cbiAgICBnZXQgZ2x5cGhTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIHNldCBnbHlwaFN0YXJ0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMl0gPSB4OyB9XG4gICAgZ2V0IG51bUdseXBocygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBzZXQgbnVtR2x5cGhzKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDNdID0geDsgfVxuICAgIGdldCB2ZXJ0ZXhTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAyXTsgfVxuICAgIHNldCB2ZXJ0ZXhTdGFydEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDJdID0geDsgfVxuICAgIGdldCBsaW5lU3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgM107IH1cbiAgICBzZXQgbGluZVN0YXJ0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgM10gPSB4OyB9XG4gICAgZ2V0IGxpbmVMZW5ndGgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDRdOyB9XG4gICAgc2V0IGxpbmVMZW5ndGgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgNF0gPSB4OyB9XG4gICAgZ2V0IHNlZ21lbnQoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIHNldCBzZWdtZW50KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXSA9IHg7IH1cbiAgICBnZXQgbG93ZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBzZXQgbG93ZXJTaXplKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDExXSA9IHg7IH1cbiAgICBnZXQgdXBwZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMl07IH1cbiAgICBzZXQgdXBwZXJTaXplKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEyXSA9IHg7IH1cbiAgICBnZXQgbGluZU9mZnNldFgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQgKyA3XTsgfVxuICAgIHNldCBsaW5lT2Zmc2V0WCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgN10gPSB4OyB9XG4gICAgZ2V0IGxpbmVPZmZzZXRZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgOF07IH1cbiAgICBzZXQgbGluZU9mZnNldFkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDhdID0geDsgfVxuICAgIGdldCB3cml0aW5nTW9kZSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzNl07IH1cbiAgICBzZXQgd3JpdGluZ01vZGUoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzNl0gPSB4OyB9XG4gICAgZ2V0IHBsYWNlZE9yaWVudGF0aW9uKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM3XTsgfVxuICAgIHNldCBwbGFjZWRPcmllbnRhdGlvbih4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM3XSA9IHg7IH1cbiAgICBnZXQgaGlkZGVuKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM4XTsgfVxuICAgIHNldCBoaWRkZW4oeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzOF0gPSB4OyB9XG4gICAgZ2V0IGNyb3NzVGlsZUlEKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAxMF07IH1cbiAgICBzZXQgY3Jvc3NUaWxlSUQoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMTBdID0geDsgfVxuICAgIGdldCBhc3NvY2lhdGVkSWNvbkluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDIyXTsgfVxuICAgIHNldCBhc3NvY2lhdGVkSWNvbkluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMjJdID0geDsgfVxufVxuXG5QbGFjZWRTeW1ib2xTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSA0ODtcblxuZXhwb3J0IHR5cGUgUGxhY2VkU3ltYm9sID0gUGxhY2VkU3ltYm9sU3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQbGFjZWRTeW1ib2xBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGxhY2VkU3ltYm9sU3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IFBsYWNlZFN5bWJvbFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQbGFjZWRTeW1ib2xTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1BsYWNlZFN5bWJvbEFycmF5JywgUGxhY2VkU3ltYm9sQXJyYXkpO1xuXG5jbGFzcyBTeW1ib2xJbnN0YW5jZVN0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX3N0cnVjdEFycmF5OiBTeW1ib2xJbnN0YW5jZUFycmF5O1xuICAgIGFuY2hvclg6IG51bWJlcjtcbiAgICBhbmNob3JZOiBudW1iZXI7XG4gICAgcmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBwbGFjZWRJY29uU3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyO1xuICAgIHRleHRCb3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgdGV4dEJveEVuZEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHZlcnRpY2FsVGV4dEJveEVuZEluZGV4OiBudW1iZXI7XG4gICAgaWNvbkJveFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBpY29uQm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxJY29uQm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICBmZWF0dXJlSW5kZXg6IG51bWJlcjtcbiAgICBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlczogbnVtYmVyO1xuICAgIG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlczogbnVtYmVyO1xuICAgIG51bUljb25WZXJ0aWNlczogbnVtYmVyO1xuICAgIG51bVZlcnRpY2FsSWNvblZlcnRpY2VzOiBudW1iZXI7XG4gICAgY3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICB0ZXh0Qm94U2NhbGU6IG51bWJlcjtcbiAgICB0ZXh0T2Zmc2V0MDogbnVtYmVyO1xuICAgIHRleHRPZmZzZXQxOiBudW1iZXI7XG4gICAgZ2V0IGFuY2hvclgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBzZXQgYW5jaG9yWCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdID0geDsgfVxuICAgIGdldCBhbmNob3JZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDFdOyB9XG4gICAgc2V0IGFuY2hvclkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXSA9IHg7IH1cbiAgICBnZXQgcmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMl07IH1cbiAgICBzZXQgcmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAyXSA9IHg7IH1cbiAgICBnZXQgY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDNdOyB9XG4gICAgc2V0IGNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDNdID0geDsgfVxuICAgIGdldCBsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDRdOyB9XG4gICAgc2V0IGxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA0XSA9IHg7IH1cbiAgICBnZXQgdmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNV07IH1cbiAgICBzZXQgdmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA1XSA9IHg7IH1cbiAgICBnZXQgcGxhY2VkSWNvblN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDZdOyB9XG4gICAgc2V0IHBsYWNlZEljb25TeW1ib2xJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDZdID0geDsgfVxuICAgIGdldCB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA3XTsgfVxuICAgIHNldCB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDddID0geDsgfVxuICAgIGdldCBrZXkoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDhdOyB9XG4gICAgc2V0IGtleSh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA4XSA9IHg7IH1cbiAgICBnZXQgdGV4dEJveFN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDldOyB9XG4gICAgc2V0IHRleHRCb3hTdGFydEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDldID0geDsgfVxuICAgIGdldCB0ZXh0Qm94RW5kSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIHNldCB0ZXh0Qm94RW5kSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTBdID0geDsgfVxuICAgIGdldCB2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBzZXQgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMV0gPSB4OyB9XG4gICAgZ2V0IHZlcnRpY2FsVGV4dEJveEVuZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMl07IH1cbiAgICBzZXQgdmVydGljYWxUZXh0Qm94RW5kSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTJdID0geDsgfVxuICAgIGdldCBpY29uQm94U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTNdOyB9XG4gICAgc2V0IGljb25Cb3hTdGFydEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEzXSA9IHg7IH1cbiAgICBnZXQgaWNvbkJveEVuZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxNF07IH1cbiAgICBzZXQgaWNvbkJveEVuZEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE0XSA9IHg7IH1cbiAgICBnZXQgdmVydGljYWxJY29uQm94U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTVdOyB9XG4gICAgc2V0IHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTVdID0geDsgfVxuICAgIGdldCB2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTZdOyB9XG4gICAgc2V0IHZlcnRpY2FsSWNvbkJveEVuZEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE2XSA9IHg7IH1cbiAgICBnZXQgZmVhdHVyZUluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxN107IH1cbiAgICBzZXQgZmVhdHVyZUluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE3XSA9IHg7IH1cbiAgICBnZXQgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE4XTsgfVxuICAgIHNldCBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxOF0gPSB4OyB9XG4gICAgZ2V0IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTldOyB9XG4gICAgc2V0IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxOV0gPSB4OyB9XG4gICAgZ2V0IG51bUljb25WZXJ0aWNlcygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMjBdOyB9XG4gICAgc2V0IG51bUljb25WZXJ0aWNlcyh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyMF0gPSB4OyB9XG4gICAgZ2V0IG51bVZlcnRpY2FsSWNvblZlcnRpY2VzKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyMV07IH1cbiAgICBzZXQgbnVtVmVydGljYWxJY29uVmVydGljZXMoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMjFdID0geDsgfVxuICAgIGdldCBjcm9zc1RpbGVJRCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMTFdOyB9XG4gICAgc2V0IGNyb3NzVGlsZUlEKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDExXSA9IHg7IH1cbiAgICBnZXQgdGV4dEJveFNjYWxlKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTJdOyB9XG4gICAgc2V0IHRleHRCb3hTY2FsZSh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTJdID0geDsgfVxuICAgIGdldCB0ZXh0T2Zmc2V0MCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDEzXTsgfVxuICAgIHNldCB0ZXh0T2Zmc2V0MCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTNdID0geDsgfVxuICAgIGdldCB0ZXh0T2Zmc2V0MSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDE0XTsgfVxuICAgIHNldCB0ZXh0T2Zmc2V0MSh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTRdID0geDsgfVxufVxuXG5TeW1ib2xJbnN0YW5jZVN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDYwO1xuXG5leHBvcnQgdHlwZSBTeW1ib2xJbnN0YW5jZSA9IFN5bWJvbEluc3RhbmNlU3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBTeW1ib2xJbnN0YW5jZUFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQ4aTE0dWkxdWwzZjYwIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFN5bWJvbEluc3RhbmNlU3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IFN5bWJvbEluc3RhbmNlU3RydWN0IHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLmlzVHJhbnNmZXJyZWQpO1xuICAgICAgICByZXR1cm4gbmV3IFN5bWJvbEluc3RhbmNlU3RydWN0KHRoaXMsIGluZGV4KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xJbnN0YW5jZUFycmF5JywgU3ltYm9sSW5zdGFuY2VBcnJheSk7XG5cbmNsYXNzIEdseXBoT2Zmc2V0U3RydWN0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfc3RydWN0QXJyYXk6IEdseXBoT2Zmc2V0QXJyYXk7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIGdldCBvZmZzZXRYKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMF07IH1cbiAgICBzZXQgb2Zmc2V0WCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMF0gPSB4OyB9XG59XG5cbkdseXBoT2Zmc2V0U3RydWN0LnByb3RvdHlwZS5zaXplID0gNDtcblxuZXhwb3J0IHR5cGUgR2x5cGhPZmZzZXQgPSBHbHlwaE9mZnNldFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgR2x5cGhPZmZzZXRBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0MWY0IHtcbiAgICBnZXRvZmZzZXRYKGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuZmxvYXQzMltpbmRleCAqIDEgKyAwXTsgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgR2x5cGhPZmZzZXRTdHJ1Y3QgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIGluIHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogR2x5cGhPZmZzZXRTdHJ1Y3Qge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaXNUcmFuc2ZlcnJlZCk7XG4gICAgICAgIHJldHVybiBuZXcgR2x5cGhPZmZzZXRTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0dseXBoT2Zmc2V0QXJyYXknLCBHbHlwaE9mZnNldEFycmF5KTtcblxuY2xhc3MgU3ltYm9sTGluZVZlcnRleFN0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX3N0cnVjdEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXk7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjogbnVtYmVyO1xuICAgIGdldCB4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdOyB9XG4gICAgc2V0IHgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAwXSA9IHg7IH1cbiAgICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIHNldCB5KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMV0gPSB4OyB9XG4gICAgZ2V0IHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDJdOyB9XG4gICAgc2V0IHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMl0gPSB4OyB9XG59XG5cblN5bWJvbExpbmVWZXJ0ZXhTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSA2O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xMaW5lVmVydGV4ID0gU3ltYm9sTGluZVZlcnRleFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgU3ltYm9sTGluZVZlcnRleEFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQzaTYge1xuICAgIGdldHgoaW5kZXg6IG51bWJlcikgeyByZXR1cm4gdGhpcy5pbnQxNltpbmRleCAqIDMgKyAwXTsgfVxuICAgIGdldHkoaW5kZXg6IG51bWJlcikgeyByZXR1cm4gdGhpcy5pbnQxNltpbmRleCAqIDMgKyAxXTsgfVxuICAgIGdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuaW50MTZbaW5kZXggKiAzICsgMl07IH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFN5bWJvbExpbmVWZXJ0ZXhTdHJ1Y3QgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIGluIHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogU3ltYm9sTGluZVZlcnRleFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xMaW5lVmVydGV4U3RydWN0KHRoaXMsIGluZGV4KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xMaW5lVmVydGV4QXJyYXknLCBTeW1ib2xMaW5lVmVydGV4QXJyYXkpO1xuXG5jbGFzcyBGZWF0dXJlSW5kZXhTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogRmVhdHVyZUluZGV4QXJyYXk7XG4gICAgZmVhdHVyZUluZGV4OiBudW1iZXI7XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgZ2V0IGZlYXR1cmVJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMF07IH1cbiAgICBzZXQgZmVhdHVyZUluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDBdID0geDsgfVxuICAgIGdldCBzb3VyY2VMYXllckluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIHNldCBzb3VyY2VMYXllckluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDJdID0geDsgfVxuICAgIGdldCBidWNrZXRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBzZXQgYnVja2V0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM10gPSB4OyB9XG59XG5cbkZlYXR1cmVJbmRleFN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDg7XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVJbmRleCA9IEZlYXR1cmVJbmRleFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgRmVhdHVyZUluZGV4QXJyYXkgZXh0ZW5kcyBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgRmVhdHVyZUluZGV4U3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IEZlYXR1cmVJbmRleFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBGZWF0dXJlSW5kZXhTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0ZlYXR1cmVJbmRleEFycmF5JywgRmVhdHVyZUluZGV4QXJyYXkpO1xuXG5leHBvcnQge1xuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NGk4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0OHVpMTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTE2LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M2YxMixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDF1bDQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDhpMTR1aTF1bDNmNjAsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxZjQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQzaTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M3VpNixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJ1aTQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWkyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MmY4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NGYxNixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNCBhcyBQb3NBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDRpOCBhcyBSYXN0ZXJCb3VuZHNBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNCBhcyBDaXJjbGVMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNCBhcyBGaWxsTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIgYXMgRmlsbEV4dHJ1c2lvbkxheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0IGFzIEhlYXRtYXBMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNHViOCBhcyBMaW5lTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ4dWkxNiBhcyBQYXR0ZXJuTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTE2IGFzIFN5bWJvbExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M2YxMiBhcyBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWw0IGFzIFN5bWJvbE9wYWNpdHlBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIGFzIENvbGxpc2lvbkJveExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIgYXMgQ29sbGlzaW9uQ2lyY2xlTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyIGFzIENvbGxpc2lvblZlcnRleEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M3VpNiBhcyBUcmlhbmdsZUluZGV4QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWk0IGFzIExpbmVJbmRleEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MXVpMiBhcyBMaW5lU3RyaXBJbmRleEFycmF5XG59O1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmNvbnN0IGxheW91dCA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3BvcycsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9XG5dLCA0KTtcblxuZXhwb3J0IGRlZmF1bHQgbGF5b3V0O1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGF5b3V0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuaW1wb3J0IHR5cGUgVmVydGV4QXJyYXlPYmplY3QgZnJvbSAnLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QnO1xuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmV4cG9ydCB0eXBlIFNlZ21lbnQgPSB7XG4gICAgc29ydEtleTogbnVtYmVyIHwgdm9pZCxcbiAgICB2ZXJ0ZXhPZmZzZXQ6IG51bWJlcixcbiAgICBwcmltaXRpdmVPZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0ZXhMZW5ndGg6IG51bWJlcixcbiAgICBwcmltaXRpdmVMZW5ndGg6IG51bWJlcixcbiAgICB2YW9zOiB7W3N0cmluZ106IFZlcnRleEFycmF5T2JqZWN0fVxufVxuXG5jbGFzcyBTZWdtZW50VmVjdG9yIHtcbiAgICBzdGF0aWMgTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg6IG51bWJlcjtcbiAgICBzZWdtZW50czogQXJyYXk8U2VnbWVudD47XG5cbiAgICBjb25zdHJ1Y3RvcihzZWdtZW50cz86IEFycmF5PFNlZ21lbnQ+ID0gW10pIHtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IHNlZ21lbnRzO1xuICAgIH1cblxuICAgIHByZXBhcmVTZWdtZW50KG51bVZlcnRpY2VzOiBudW1iZXIsIGxheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheSwgaW5kZXhBcnJheTogU3RydWN0QXJyYXksIHNvcnRLZXk/OiBudW1iZXIpOiBTZWdtZW50IHtcbiAgICAgICAgbGV0IHNlZ21lbnQ6IFNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzW3RoaXMuc2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChudW1WZXJ0aWNlcyA+IFNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgpIHdhcm5PbmNlKGBNYXggdmVydGljZXMgcGVyIHNlZ21lbnQgaXMgJHtTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIfTogYnVja2V0IHJlcXVlc3RlZCAke251bVZlcnRpY2VzfWApO1xuICAgICAgICBpZiAoIXNlZ21lbnQgfHwgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKyBudW1WZXJ0aWNlcyA+IFNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEggfHwgc2VnbWVudC5zb3J0S2V5ICE9PSBzb3J0S2V5KSB7XG4gICAgICAgICAgICBzZWdtZW50ID0gKHtcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQ6IGxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVPZmZzZXQ6IGluZGV4QXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHZlcnRleExlbmd0aDogMCxcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVMZW5ndGg6IDBcbiAgICAgICAgICAgIH06IGFueSk7XG4gICAgICAgICAgICBpZiAoc29ydEtleSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnNvcnRLZXkgPSBzb3J0S2V5O1xuICAgICAgICAgICAgdGhpcy5zZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWdtZW50O1xuICAgIH1cblxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VnbWVudHM7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHRoaXMuc2VnbWVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBpbiBzZWdtZW50LnZhb3MpIHtcbiAgICAgICAgICAgICAgICBzZWdtZW50LnZhb3Nba10uZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHNpbXBsZVNlZ21lbnQodmVydGV4T2Zmc2V0OiBudW1iZXIsIHByaW1pdGl2ZU9mZnNldDogbnVtYmVyLCB2ZXJ0ZXhMZW5ndGg6IG51bWJlciwgcHJpbWl0aXZlTGVuZ3RoOiBudW1iZXIpOiBTZWdtZW50VmVjdG9yIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWdtZW50VmVjdG9yKFt7XG4gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQsXG4gICAgICAgICAgICBwcmltaXRpdmVPZmZzZXQsXG4gICAgICAgICAgICB2ZXJ0ZXhMZW5ndGgsXG4gICAgICAgICAgICBwcmltaXRpdmVMZW5ndGgsXG4gICAgICAgICAgICB2YW9zOiB7fSxcbiAgICAgICAgICAgIHNvcnRLZXk6IDBcbiAgICAgICAgfV0pO1xuICAgIH1cbn1cblxuLypcbiAqIFRoZSBtYXhpbXVtIHNpemUgb2YgYSB2ZXJ0ZXggYXJyYXkuIFRoaXMgbGltaXQgaXMgaW1wb3NlZCBieSBXZWJHTCdzIDE2IGJpdFxuICogYWRkcmVzc2luZyBvZiB2ZXJ0ZXggYnVmZmVycy5cbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqL1xuU2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCA9IE1hdGgucG93KDIsIDE2KSAtIDE7XG5cbnJlZ2lzdGVyKCdTZWdtZW50VmVjdG9yJywgU2VnbWVudFZlY3Rvcik7XG5leHBvcnQgZGVmYXVsdCBTZWdtZW50VmVjdG9yO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuLyoqXG4gKiBQYWNrcyB0d28gbnVtYmVycywgaW50ZXJwcmV0ZWQgYXMgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMsIGludG8gYSBzaW5nbGVcbiAqIGZsb2F0LiAgVW5wYWNrIHRoZW0gaW4gdGhlIHNoYWRlciB1c2luZyB0aGUgYHVucGFja19mbG9hdCgpYCBmdW5jdGlvbixcbiAqIGRlZmluZWQgaW4gX3ByZWx1ZGUudmVydGV4Lmdsc2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFja1VpbnQ4VG9GbG9hdChhOiBudW1iZXIsIGI6IG51bWJlcikge1xuICAgIC8vIGNvZXJjZSBhIGFuZCBiIHRvIDgtYml0IGludHNcbiAgICBhID0gY2xhbXAoTWF0aC5mbG9vcihhKSwgMCwgMjU1KTtcbiAgICBiID0gY2xhbXAoTWF0aC5mbG9vcihiKSwgMCwgMjU1KTtcbiAgICByZXR1cm4gMjU2ICogYSArIGI7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG50eXBlIFNlcmlhbGl6ZWRGZWF0dXJlUG9zaXRpb25NYXAgPSB7XG4gICAgaWRzOiBGbG9hdDY0QXJyYXk7XG4gICAgcG9zaXRpb25zOiBVaW50MzJBcnJheTtcbn07XG5cbnR5cGUgRmVhdHVyZVBvc2l0aW9uID0ge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICBlbmQ6IG51bWJlcjtcbn07XG5cbi8vIEEgdHJhbnNmZXJhYmxlIGRhdGEgc3RydWN0dXJlIHRoYXQgbWFwcyBmZWF0dXJlIGlkcyB0byB0aGVpciBpbmRpY2VzIGFuZCBidWZmZXIgb2Zmc2V0c1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZVBvc2l0aW9uTWFwIHtcbiAgICBpZHM6IEFycmF5PG51bWJlcj47XG4gICAgcG9zaXRpb25zOiBBcnJheTxudW1iZXI+O1xuICAgIGluZGV4ZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pZHMgPSBbXTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5pbmRleGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYWRkKGlkOiBudW1iZXIsIGluZGV4OiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuaWRzLnB1c2goaWQpO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucy5wdXNoKGluZGV4LCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICBnZXRQb3NpdGlvbnMoaWQ6IG51bWJlcik6IEFycmF5PEZlYXR1cmVQb3NpdGlvbj4ge1xuICAgICAgICBhc3NlcnQodGhpcy5pbmRleGVkKTtcblxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoIGZvciB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBpZCBpbiB0aGlzLmlkcztcbiAgICAgICAgLy8gcmVsaWVzIG9uIGlkcy9wb3NpdGlvbnMgYmVpbmcgc29ydGVkIGJ5IGlkLCB3aGljaCBoYXBwZW5zIGluIHNlcmlhbGl6YXRpb25cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgaiA9IHRoaXMuaWRzLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgICAgICAgY29uc3QgbSA9IChpICsgaikgPj4gMTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlkc1ttXSA+PSBpZCkge1xuICAgICAgICAgICAgICAgIGogPSBtO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpID0gbSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLmlkc1tpXSA9PT0gaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wb3NpdGlvbnNbMyAqIGldO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBvc2l0aW9uc1szICogaSArIDFdO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wb3NpdGlvbnNbMyAqIGkgKyAyXTtcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHtpbmRleCwgc3RhcnQsIGVuZH0pO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIHNlcmlhbGl6ZShtYXA6IEZlYXR1cmVQb3NpdGlvbk1hcCwgdHJhbnNmZXJhYmxlczogQXJyYXk8QXJyYXlCdWZmZXI+KTogU2VyaWFsaXplZEZlYXR1cmVQb3NpdGlvbk1hcCB7XG4gICAgICAgIGNvbnN0IGlkcyA9IG5ldyBGbG9hdDY0QXJyYXkobWFwLmlkcyk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBVaW50MzJBcnJheShtYXAucG9zaXRpb25zKTtcblxuICAgICAgICBzb3J0KGlkcywgcG9zaXRpb25zLCAwLCBpZHMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKGlkcy5idWZmZXIsIHBvc2l0aW9ucy5idWZmZXIpO1xuXG4gICAgICAgIHJldHVybiB7aWRzLCBwb3NpdGlvbnN9O1xuICAgIH1cblxuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZShvYmo6IFNlcmlhbGl6ZWRGZWF0dXJlUG9zaXRpb25NYXApOiBGZWF0dXJlUG9zaXRpb25NYXAge1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgRmVhdHVyZVBvc2l0aW9uTWFwKCk7XG4gICAgICAgIC8vIGFmdGVyIHRyYW5zZmVycmluZywgd2Ugb25seSB1c2UgdGhlc2UgYXJyYXlzIHN0YXRpY2FsbHkgKG5vIHB1c2hlcyksXG4gICAgICAgIC8vIHNvIFR5cGVkQXJyYXkgdnMgQXJyYXkgZGlzdGluY3Rpb24gdGhhdCBmbG93IHBvaW50cyBvdXQgZG9lc24ndCBtYXR0ZXJcbiAgICAgICAgbWFwLmlkcyA9IChvYmouaWRzOiBhbnkpO1xuICAgICAgICBtYXAucG9zaXRpb25zID0gKG9iai5wb3NpdGlvbnM6IGFueSk7XG4gICAgICAgIG1hcC5pbmRleGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG59XG5cbi8vIGN1c3RvbSBxdWlja3NvcnQgdGhhdCBzb3J0cyBpZHMsIGluZGljZXMgYW5kIG9mZnNldHMgdG9nZXRoZXIgKGJ5IGlkcylcbmZ1bmN0aW9uIHNvcnQoaWRzLCBwb3NpdGlvbnMsIGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQgPj0gcmlnaHQpIHJldHVybjtcblxuICAgIGNvbnN0IHBpdm90ID0gaWRzWyhsZWZ0ICsgcmlnaHQpID4+IDFdO1xuICAgIGxldCBpID0gbGVmdCAtIDE7XG4gICAgbGV0IGogPSByaWdodCArIDE7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBkbyBpKys7IHdoaWxlIChpZHNbaV0gPCBwaXZvdCk7XG4gICAgICAgIGRvIGotLTsgd2hpbGUgKGlkc1tqXSA+IHBpdm90KTtcbiAgICAgICAgaWYgKGkgPj0gaikgYnJlYWs7XG4gICAgICAgIHN3YXAoaWRzLCBpLCBqKTtcbiAgICAgICAgc3dhcChwb3NpdGlvbnMsIDMgKiBpLCAzICogaik7XG4gICAgICAgIHN3YXAocG9zaXRpb25zLCAzICogaSArIDEsIDMgKiBqICsgMSk7XG4gICAgICAgIHN3YXAocG9zaXRpb25zLCAzICogaSArIDIsIDMgKiBqICsgMik7XG4gICAgfVxuXG4gICAgc29ydChpZHMsIHBvc2l0aW9ucywgbGVmdCwgaik7XG4gICAgc29ydChpZHMsIHBvc2l0aW9ucywgaiArIDEsIHJpZ2h0KTtcbn1cblxuZnVuY3Rpb24gc3dhcChhcnIsIGksIGopIHtcbiAgICBjb25zdCB0bXAgPSBhcnJbaV07XG4gICAgYXJyW2ldID0gYXJyW2pdO1xuICAgIGFycltqXSA9IHRtcDtcbn1cblxucmVnaXN0ZXIoJ0ZlYXR1cmVQb3NpdGlvbk1hcCcsIEZlYXR1cmVQb3NpdGlvbk1hcCk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcblxuZXhwb3J0IHR5cGUgVW5pZm9ybVZhbHVlczxVczogT2JqZWN0PlxuICAgID0gJEV4YWN0PCRPYmpNYXA8VXMsIDxWPih1OiBVbmlmb3JtPFY+KSA9PiBWPj47XG5leHBvcnQgdHlwZSBVbmlmb3JtTG9jYXRpb25zID0ge1tzdHJpbmddOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbn07XG5cbmNsYXNzIFVuaWZvcm08VD4ge1xuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG4gICAgbG9jYXRpb246ID9XZWJHTFVuaWZvcm1Mb2NhdGlvbjtcbiAgICBjdXJyZW50OiBUO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgfVxuXG4gICAgK3NldDogKHY6IFQpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFVuaWZvcm0xaSBleHRlbmRzIFVuaWZvcm08bnVtYmVyPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcbiAgICB9XG5cbiAgICBzZXQodjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnQgIT09IHYpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0xaSh0aGlzLmxvY2F0aW9uLCB2KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTFmIGV4dGVuZHMgVW5pZm9ybTxudW1iZXI+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSAwO1xuICAgIH1cblxuICAgIHNldCh2OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudCAhPT0gdikge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybTFmKHRoaXMubG9jYXRpb24sIHYpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBVbmlmb3JtMmYgZXh0ZW5kcyBVbmlmb3JtPFtudW1iZXIsIG51bWJlcl0+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbMCwgMF07XG4gICAgfVxuXG4gICAgc2V0KHY6IFtudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZbMF0gIT09IHRoaXMuY3VycmVudFswXSB8fCB2WzFdICE9PSB0aGlzLmN1cnJlbnRbMV0pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0yZih0aGlzLmxvY2F0aW9uLCB2WzBdLCB2WzFdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTNmIGV4dGVuZHMgVW5pZm9ybTxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbMCwgMCwgMF07XG4gICAgfVxuXG4gICAgc2V0KHY6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICBpZiAodlswXSAhPT0gdGhpcy5jdXJyZW50WzBdIHx8IHZbMV0gIT09IHRoaXMuY3VycmVudFsxXSB8fCB2WzJdICE9PSB0aGlzLmN1cnJlbnRbMl0pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0zZih0aGlzLmxvY2F0aW9uLCB2WzBdLCB2WzFdLCB2WzJdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTRmIGV4dGVuZHMgVW5pZm9ybTxbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXT4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IFswLCAwLCAwLCAwXTtcbiAgICB9XG5cbiAgICBzZXQodjogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZbMF0gIT09IHRoaXMuY3VycmVudFswXSB8fCB2WzFdICE9PSB0aGlzLmN1cnJlbnRbMV0gfHxcbiAgICAgICAgICAgIHZbMl0gIT09IHRoaXMuY3VycmVudFsyXSB8fCB2WzNdICE9PSB0aGlzLmN1cnJlbnRbM10pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm00Zih0aGlzLmxvY2F0aW9uLCB2WzBdLCB2WzFdLCB2WzJdLCB2WzNdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybUNvbG9yIGV4dGVuZHMgVW5pZm9ybTxDb2xvcj4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IENvbG9yLnRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgIHNldCh2OiBDb2xvcik6IHZvaWQge1xuICAgICAgICBpZiAodi5yICE9PSB0aGlzLmN1cnJlbnQuciB8fCB2LmcgIT09IHRoaXMuY3VycmVudC5nIHx8XG4gICAgICAgICAgICB2LmIgIT09IHRoaXMuY3VycmVudC5iIHx8IHYuYSAhPT0gdGhpcy5jdXJyZW50LmEpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm00Zih0aGlzLmxvY2F0aW9uLCB2LnIsIHYuZywgdi5iLCB2LmEpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCBlbXB0eU1hdDQgPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcbmNsYXNzIFVuaWZvcm1NYXRyaXg0ZiBleHRlbmRzIFVuaWZvcm08RmxvYXQzMkFycmF5PiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gZW1wdHlNYXQ0O1xuICAgIH1cblxuICAgIHNldCh2OiBGbG9hdDMyQXJyYXkpOiB2b2lkIHtcbiAgICAgICAgLy8gVGhlIHZhc3QgbWFqb3JpdHkgb2YgbWF0cml4IGNvbXBhcmlzb25zIHRoYXQgd2lsbCB0cmlwIHRoaXMgc2V0XG4gICAgICAgIC8vIGhhcHBlbiBhdCBpPTEyIG9yIGk9MCwgc28gd2UgY2hlY2sgdGhvc2UgZmlyc3QgdG8gYXZvaWQgbG90cyBvZlxuICAgICAgICAvLyB1bm5lY2Vzc2FyeSBpdGVyYXRpb246XG4gICAgICAgIGlmICh2WzEyXSAhPT0gdGhpcy5jdXJyZW50WzEyXSB8fCB2WzBdICE9PSB0aGlzLmN1cnJlbnRbMF0pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwgZmFsc2UsIHYpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMTY7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZbaV0gIT09IHRoaXMuY3VycmVudFtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMubG9jYXRpb24sIGZhbHNlLCB2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHtcbiAgICBVbmlmb3JtLFxuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm0zZixcbiAgICBVbmlmb3JtNGYsXG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufTtcblxuZXhwb3J0IHR5cGUgVW5pZm9ybUJpbmRpbmdzID0ge1tzdHJpbmddOiBVbmlmb3JtPGFueT59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwYWNrVWludDhUb0Zsb2F0fSBmcm9tICcuLi9zaGFkZXJzL2VuY29kZV9hdHRyaWJ1dGUnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQge3N1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvcHJvcGVydGllcyc7XG5pbXBvcnQge3JlZ2lzdGVyLCBzZXJpYWxpemUsIGRlc2VyaWFsaXplfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtTdHJ1Y3RBcnJheUxheW91dDFmNCwgU3RydWN0QXJyYXlMYXlvdXQyZjgsIFN0cnVjdEFycmF5TGF5b3V0NGYxNiwgUGF0dGVybkxheW91dEFycmF5fSBmcm9tICcuL2FycmF5X3R5cGVzJztcbmltcG9ydCB7Y2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IEZlYXR1cmVQb3NpdGlvbk1hcCBmcm9tICcuL2ZlYXR1cmVfcG9zaXRpb25fbWFwJztcbmltcG9ydCB7XG4gICAgVW5pZm9ybSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm00ZixcbiAgICB0eXBlIFVuaWZvcm1Mb2NhdGlvbnNcbn0gZnJvbSAnLi4vcmVuZGVyL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZWRTdHlsZUxheWVyfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci90eXBlZF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtTdHJ1Y3RBcnJheSwgU3RydWN0QXJyYXlNZW1iZXJ9IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuaW1wb3J0IHR5cGUge1xuICAgIEZlYXR1cmUsXG4gICAgRmVhdHVyZVN0YXRlLFxuICAgIEdsb2JhbFByb3BlcnRpZXMsXG4gICAgU291cmNlRXhwcmVzc2lvbixcbiAgICBDb21wb3NpdGVFeHByZXNzaW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7UG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0Zvcm1hdHRlZFNlY3Rpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5leHBvcnQgdHlwZSBCaW5kZXJVbmlmb3JtID0ge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgIGJpbmRpbmc6IFVuaWZvcm08YW55PlxufTtcblxuZnVuY3Rpb24gcGFja0NvbG9yKGNvbG9yOiBDb2xvcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIHJldHVybiBbXG4gICAgICAgIHBhY2tVaW50OFRvRmxvYXQoMjU1ICogY29sb3IuciwgMjU1ICogY29sb3IuZyksXG4gICAgICAgIHBhY2tVaW50OFRvRmxvYXQoMjU1ICogY29sb3IuYiwgMjU1ICogY29sb3IuYSlcbiAgICBdO1xufVxuXG4vKipcbiAqICBgQmluZGVyYCBpcyB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIHRoZSBzdHJhdGVnaWVzIGZvciBjb25zdHJ1Y3RpbmcsXG4gKiAgdXBsb2FkaW5nLCBhbmQgYmluZGluZyBwYWludCBwcm9wZXJ0eSBkYXRhIGFzIEdMU0wgYXR0cmlidXRlcy4gTW9zdCBzdHlsZS1cbiAqICBzcGVjIHByb3BlcnRpZXMgaGF2ZSBhIDE6MSByZWxhdGlvbnNoaXAgdG8gc2hhZGVyIGF0dHJpYnV0ZS91bmlmb3JtcywgYnV0XG4gKiAgc29tZSByZXF1aXJlIG11bHRsaXBsZSB2YWx1ZXMgcGVyIGZlYXR1cmUgdG8gYmUgcGFzc2VkIHRvIHRoZSBHUFUsIGFuZCBpblxuICogIHRob3NlIGNhc2VzIHdlIGJpbmQgbXVsdGlwbGUgYXR0cmlidXRlcy91bmlmb3Jtcy5cbiAqXG4gKiAgSXQgaGFzIHRocmVlIGltcGxlbWVudGF0aW9ucywgb25lIGZvciBlYWNoIG9mIHRoZSB0aHJlZSBzdHJhdGVnaWVzIHdlIHVzZTpcbiAqXG4gKiAgKiBGb3IgX2NvbnN0YW50XyBwcm9wZXJ0aWVzIC0tIHRob3NlIHdob3NlIHZhbHVlIGlzIGEgY29uc3RhbnQsIG9yIHRoZSBjb25zdGFudFxuICogICAgcmVzdWx0IG9mIGV2YWx1YXRpbmcgYSBjYW1lcmEgZXhwcmVzc2lvbiBhdCBhIHBhcnRpY3VsYXIgY2FtZXJhIHBvc2l0aW9uIC0tIHdlXG4gKiAgICBkb24ndCBuZWVkIGEgdmVydGV4IGF0dHJpYnV0ZSBidWZmZXIsIGFuZCBpbnN0ZWFkIHVzZSBhIHVuaWZvcm0uXG4gKiAgKiBGb3IgZGF0YSBleHByZXNzaW9ucywgd2UgdXNlIGEgdmVydGV4IGJ1ZmZlciB3aXRoIGEgc2luZ2xlIGF0dHJpYnV0ZSB2YWx1ZSxcbiAqICAgIHRoZSBldmFsdWF0ZWQgcmVzdWx0IG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBmZWF0dXJlLlxuICogICogRm9yIGNvbXBvc2l0ZSBleHByZXNzaW9ucywgd2UgdXNlIGEgdmVydGV4IGJ1ZmZlciB3aXRoIHR3byBhdHRyaWJ1dGVzOiBtaW4gYW5kXG4gKiAgICBtYXggdmFsdWVzIGNvdmVyaW5nIHRoZSByYW5nZSBvZiB6b29tcyBhdCB3aGljaCB3ZSBleHBlY3QgdGhlIHRpbGUgdG8gYmVcbiAqICAgIGRpc3BsYXllZC4gVGhlc2UgdmFsdWVzIGFyZSBjYWxjdWxhdGVkIGJ5IGV2YWx1YXRpbmcgdGhlIGNvbXBvc2l0ZSBleHByZXNzaW9uIGZvclxuICogICAgdGhlIGdpdmVuIGZlYXR1cmUgYXQgc3RyYXRlZ2ljYWxseSBjaG9zZW4gem9vbSBsZXZlbHMuIEluIGFkZGl0aW9uIHRvIHRoaXNcbiAqICAgIGF0dHJpYnV0ZSBkYXRhLCB3ZSBhbHNvIHVzZSBhIHVuaWZvcm0gdmFsdWUgd2hpY2ggdGhlIHNoYWRlciB1c2VzIHRvIGludGVycG9sYXRlXG4gKiAgICBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB2YWx1ZSBhdCB0aGUgZmluYWwgZGlzcGxheWVkIHpvb20gbGV2ZWwuIFRoZSB1c2Ugb2YgYVxuICogICAgdW5pZm9ybSBhbGxvd3MgdXMgdG8gY2hlYXBseSB1cGRhdGUgdGhlIHZhbHVlIG9uIGV2ZXJ5IGZyYW1lLlxuICpcbiAqICBOb3RlIHRoYXQgdGhlIHNoYWRlciBzb3VyY2UgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIHVzaW5nIGEgdW5pZm9ybSBvclxuICogIGF0dHJpYnV0ZS4gV2UgZHluYW1pY2FsbHkgY29tcGlsZSBzaGFkZXJzIGF0IHJ1bnRpbWUgdG8gYWNjb21vZGF0ZSB0aGlzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuaW50ZXJmYWNlIEJpbmRlcjxUPiB7XG4gICAgbWF4VmFsdWU6IG51bWJlcjtcbiAgICB1bmlmb3JtTmFtZXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBwb3B1bGF0ZVBhaW50QXJyYXkobGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IHZvaWQ7XG4gICAgdXBkYXRlUGFpbnRBcnJheShzdGFydDogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KTogdm9pZDtcbiAgICB1cGxvYWQoQ29udGV4dCk6IHZvaWQ7XG4gICAgZGVzdHJveSgpOiB2b2lkO1xuXG4gICAgZGVmaW5lcygpOiBBcnJheTxzdHJpbmc+O1xuICAgIHNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbzogSW1hZ2VQb3NpdGlvbiwgcG9zRnJvbTogSW1hZ2VQb3NpdGlvbik6IHZvaWQ7XG5cbiAgICBzZXRVbmlmb3Jtcyhjb250ZXh0OiBDb250ZXh0LCB1bmlmb3JtOiBVbmlmb3JtPCo+LCBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLFxuICAgICAgICBjdXJyZW50VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiwgdW5pZm9ybU5hbWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICBnZXRCaW5kaW5nKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbik6ICRTaGFwZTxVbmlmb3JtPCo+Pjtcbn1cblxuY2xhc3MgQ29uc3RhbnRCaW5kZXI8VD4gaW1wbGVtZW50cyBCaW5kZXI8VD4ge1xuICAgIHZhbHVlOiBUO1xuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICAgIG1heFZhbHVlOiBudW1iZXI7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBULCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5uYW1lcyA9IG5hbWVzO1xuICAgICAgICB0aGlzLnVuaWZvcm1OYW1lcyA9IHRoaXMubmFtZXMubWFwKG5hbWUgPT4gYHVfJHtuYW1lfWApO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLm1heFZhbHVlID0gLUluZmluaXR5O1xuICAgIH1cblxuICAgIGRlZmluZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWVzLm1hcChuYW1lID0+IGAjZGVmaW5lIEhBU19VTklGT1JNX3VfJHtuYW1lfWApO1xuICAgIH1cbiAgICBzZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMoKSB7fVxuICAgIHBvcHVsYXRlUGFpbnRBcnJheSgpIHt9XG4gICAgdXBkYXRlUGFpbnRBcnJheSgpIHt9XG4gICAgdXBsb2FkKCkge31cbiAgICBkZXN0cm95KCkge31cblxuICAgIHNldFVuaWZvcm1zKGNvbnRleHQ6IENvbnRleHQsIHVuaWZvcm06IFVuaWZvcm08Kj4sIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4pOiB2b2lkIHtcbiAgICAgICAgdW5pZm9ybS5zZXQoY3VycmVudFZhbHVlLmNvbnN0YW50T3IodGhpcy52YWx1ZSkpO1xuICAgIH1cblxuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKTogJFNoYXBlPFVuaWZvcm08YW55Pj4ge1xuICAgICAgICByZXR1cm4gKHRoaXMudHlwZSA9PT0gJ2NvbG9yJykgP1xuICAgICAgICAgICAgbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbikgOlxuICAgICAgICAgICAgbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgfVxuXG4gICAgc3RhdGljIHNlcmlhbGl6ZShiaW5kZXI6IENvbnN0YW50QmluZGVyPFQ+KSB7XG4gICAgICAgIGNvbnN0IHt2YWx1ZSwgbmFtZXMsIHR5cGV9ID0gYmluZGVyO1xuICAgICAgICByZXR1cm4ge3ZhbHVlOiBzZXJpYWxpemUodmFsdWUpLCBuYW1lcywgdHlwZX07XG4gICAgfVxuXG4gICAgc3RhdGljIGRlc2VyaWFsaXplKHNlcmlhbGl6ZWQ6IHt2YWx1ZTogVCwgbmFtZXM6IEFycmF5PHN0cmluZz4sIHR5cGU6IHN0cmluZ30pIHtcbiAgICAgICAgY29uc3Qge3ZhbHVlLCBuYW1lcywgdHlwZX0gPSBzZXJpYWxpemVkO1xuICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50QmluZGVyKGRlc2VyaWFsaXplKHZhbHVlKSwgbmFtZXMsIHR5cGUpO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyPFQ+IGltcGxlbWVudHMgQmluZGVyPFQ+IHtcbiAgICB2YWx1ZTogVDtcbiAgICBuYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICB1bmlmb3JtTmFtZXM6IEFycmF5PHN0cmluZz47XG4gICAgcGF0dGVyblBvc2l0aW9uczoge1tzdHJpbmddOiA/QXJyYXk8bnVtYmVyPn07XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIG1heFZhbHVlOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCwgbmFtZXM6IEFycmF5PHN0cmluZz4sIHR5cGU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMubmFtZXMgPSBuYW1lcztcbiAgICAgICAgdGhpcy51bmlmb3JtTmFtZXMgPSB0aGlzLm5hbWVzLm1hcChuYW1lID0+IGB1XyR7bmFtZX1gKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IC1JbmZpbml0eTtcbiAgICAgICAgdGhpcy5wYXR0ZXJuUG9zaXRpb25zID0ge3BhdHRlcm5UbzogbnVsbCwgcGF0dGVybkZyb206IG51bGx9O1xuICAgIH1cblxuICAgIGRlZmluZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWVzLm1hcChuYW1lID0+IGAjZGVmaW5lIEhBU19VTklGT1JNX3VfJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheSgpIHt9XG4gICAgdXBkYXRlUGFpbnRBcnJheSgpIHt9XG4gICAgdXBsb2FkKCkge31cbiAgICBkZXN0cm95KCkge31cblxuICAgIHNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbzogSW1hZ2VQb3NpdGlvbiwgcG9zRnJvbTogSW1hZ2VQb3NpdGlvbikge1xuICAgICAgICB0aGlzLnBhdHRlcm5Qb3NpdGlvbnMucGF0dGVyblRvID0gcG9zVG8udGxicjtcbiAgICAgICAgdGhpcy5wYXR0ZXJuUG9zaXRpb25zLnBhdHRlcm5Gcm9tID0gcG9zRnJvbS50bGJyO1xuICAgIH1cblxuICAgIHNldFVuaWZvcm1zKGNvbnRleHQ6IENvbnRleHQsIHVuaWZvcm06IFVuaWZvcm08Kj4sIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4sIHVuaWZvcm1OYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5wYXR0ZXJuUG9zaXRpb25zO1xuICAgICAgICBpZiAodW5pZm9ybU5hbWUgPT09IFwidV9wYXR0ZXJuX3RvXCIgJiYgcG9zLnBhdHRlcm5UbykgdW5pZm9ybS5zZXQocG9zLnBhdHRlcm5Ubyk7XG4gICAgICAgIGlmICh1bmlmb3JtTmFtZSA9PT0gXCJ1X3BhdHRlcm5fZnJvbVwiICYmIHBvcy5wYXR0ZXJuRnJvbSkgdW5pZm9ybS5zZXQocG9zLnBhdHRlcm5Gcm9tKTtcbiAgICB9XG5cbiAgICBnZXRCaW5kaW5nKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbik6ICRTaGFwZTxVbmlmb3JtPGFueT4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmlmb3JtNGYoY29udGV4dCwgbG9jYXRpb24pO1xuICAgIH1cbn1cblxuY2xhc3MgU291cmNlRXhwcmVzc2lvbkJpbmRlcjxUPiBpbXBsZW1lbnRzIEJpbmRlcjxUPiB7XG4gICAgZXhwcmVzc2lvbjogU291cmNlRXhwcmVzc2lvbjtcbiAgICBuYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICB1bmlmb3JtTmFtZXM6IEFycmF5PHN0cmluZz47XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIG1heFZhbHVlOiBudW1iZXI7XG5cbiAgICBwYWludFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheTtcbiAgICBwYWludFZlcnRleEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBwYWludFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IFNvdXJjZUV4cHJlc3Npb24sIG5hbWVzOiBBcnJheTxzdHJpbmc+LCB0eXBlOiBzdHJpbmcsIFBhaW50VmVydGV4QXJyYXk6IENsYXNzPFN0cnVjdEFycmF5Pikge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLm5hbWVzID0gbmFtZXM7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMudW5pZm9ybU5hbWVzID0gdGhpcy5uYW1lcy5tYXAobmFtZSA9PiBgYV8ke25hbWV9YCk7XG4gICAgICAgIHRoaXMubWF4VmFsdWUgPSAtSW5maW5pdHk7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzID0gbmFtZXMubWFwKChuYW1lKSA9PlxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBgYV8ke25hbWV9YCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnRmxvYXQzMicsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50czogdHlwZSA9PT0gJ2NvbG9yJyA/IDIgOiAxLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5ID0gbmV3IFBhaW50VmVydGV4QXJyYXkoKTtcbiAgICB9XG5cbiAgICBkZWZpbmVzKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKCkge31cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheShuZXdMZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHBhaW50QXJyYXkgPSB0aGlzLnBhaW50VmVydGV4QXJyYXk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWludEFycmF5Lmxlbmd0aDtcbiAgICAgICAgcGFpbnRBcnJheS5yZXNlcnZlKG5ld0xlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKDApLCBmZWF0dXJlLCB7fSwgW10sIGZvcm1hdHRlZFNlY3Rpb24pO1xuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gcGFja0NvbG9yKHZhbHVlKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IG5ld0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGFpbnRBcnJheS5lbXBsYWNlQmFjayhjb2xvclswXSwgY29sb3JbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgbmV3TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwYWludEFycmF5LmVtcGxhY2VCYWNrKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IE1hdGgubWF4KHRoaXMubWF4VmFsdWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXkoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHBhaW50QXJyYXkgPSB0aGlzLnBhaW50VmVydGV4QXJyYXk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiAwfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcblxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHBhY2tDb2xvcih2YWx1ZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhaW50QXJyYXkuZW1wbGFjZShpLCBjb2xvclswXSwgY29sb3JbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwYWludEFycmF5LmVtcGxhY2UoaSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5tYXhWYWx1ZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSAmJiB0aGlzLnBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QnVmZmVyICYmIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnBhaW50VmVydGV4QXJyYXksIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLCB0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRVbmlmb3Jtcyhjb250ZXh0OiBDb250ZXh0LCB1bmlmb3JtOiBVbmlmb3JtPCo+KTogdm9pZCB7XG4gICAgICAgIHVuaWZvcm0uc2V0KDApO1xuICAgIH1cblxuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKTogVW5pZm9ybTFmIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb24pO1xuICAgIH1cbn1cblxuY2xhc3MgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcjxUPiBpbXBsZW1lbnRzIEJpbmRlcjxUPiB7XG4gICAgZXhwcmVzc2lvbjogQ29tcG9zaXRlRXhwcmVzc2lvbjtcbiAgICBuYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICB1bmlmb3JtTmFtZXM6IEFycmF5PHN0cmluZz47XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHVzZUludGVnZXJab29tOiBib29sZWFuO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBtYXhWYWx1ZTogbnVtYmVyO1xuXG4gICAgcGFpbnRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXk7XG4gICAgcGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG4gICAgcGFpbnRWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBDb21wb3NpdGVFeHByZXNzaW9uLCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nLCB1c2VJbnRlZ2VyWm9vbTogYm9vbGVhbiwgem9vbTogbnVtYmVyLCBsYXlvdXQ6IENsYXNzPFN0cnVjdEFycmF5Pikge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLm5hbWVzID0gbmFtZXM7XG4gICAgICAgIHRoaXMudW5pZm9ybU5hbWVzID0gdGhpcy5uYW1lcy5tYXAobmFtZSA9PiBgdV8ke25hbWV9X3RgKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy51c2VJbnRlZ2VyWm9vbSA9IHVzZUludGVnZXJab29tO1xuICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLm1heFZhbHVlID0gLUluZmluaXR5O1xuICAgICAgICBjb25zdCBQYWludFZlcnRleEFycmF5ID0gbGF5b3V0O1xuICAgICAgICB0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcyA9IG5hbWVzLm1hcCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBgYV8ke25hbWV9YCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnRmxvYXQzMicsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50czogdHlwZSA9PT0gJ2NvbG9yJyA/IDQgOiAyLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheSA9IG5ldyBQYWludFZlcnRleEFycmF5KCk7XG4gICAgfVxuXG4gICAgZGVmaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucygpIHt9XG5cbiAgICBwb3B1bGF0ZVBhaW50QXJyYXkobmV3TGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICBjb25zdCBwYWludEFycmF5ID0gdGhpcy5wYWludFZlcnRleEFycmF5O1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFpbnRBcnJheS5sZW5ndGg7XG4gICAgICAgIHBhaW50QXJyYXkucmVzZXJ2ZShuZXdMZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy56b29tKSwgZmVhdHVyZSwge30sIFtdLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20gKyAxKSwgZmVhdHVyZSwge30sIFtdLCBmb3JtYXR0ZWRTZWN0aW9uKTtcblxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5Db2xvciA9IHBhY2tDb2xvcihtaW4pO1xuICAgICAgICAgICAgY29uc3QgbWF4Q29sb3IgPSBwYWNrQ29sb3IobWF4KTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IG5ld0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGFpbnRBcnJheS5lbXBsYWNlQmFjayhtaW5Db2xvclswXSwgbWluQ29sb3JbMV0sIG1heENvbG9yWzBdLCBtYXhDb2xvclsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBuZXdMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhaW50QXJyYXkuZW1wbGFjZUJhY2sobWluLCBtYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IE1hdGgubWF4KHRoaXMubWF4VmFsdWUsIG1pbiwgbWF4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXkoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHBhaW50QXJyYXkgPSB0aGlzLnBhaW50VmVydGV4QXJyYXk7XG5cbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiB0aGlzLnpvb219LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBtYXggPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHRoaXMuem9vbSArIDF9LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbkNvbG9yID0gcGFja0NvbG9yKG1pbik7XG4gICAgICAgICAgICBjb25zdCBtYXhDb2xvciA9IHBhY2tDb2xvcihtYXgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwYWludEFycmF5LmVtcGxhY2UoaSwgbWluQ29sb3JbMF0sIG1pbkNvbG9yWzFdLCBtYXhDb2xvclswXSwgbWF4Q29sb3JbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwYWludEFycmF5LmVtcGxhY2UoaSwgbWluLCBtYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IE1hdGgubWF4KHRoaXMubWF4VmFsdWUsIG1pbiwgbWF4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QXJyYXkgJiYgdGhpcy5wYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEJ1ZmZlciAmJiB0aGlzLnBhaW50VmVydGV4QnVmZmVyLmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LCB0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcywgdGhpcy5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGlvbkZhY3RvcihjdXJyZW50Wm9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnVzZUludGVnZXJab29tKSB7XG4gICAgICAgICAgICBjdXJyZW50Wm9vbSA9IE1hdGguZmxvb3IoY3VycmVudFpvb20pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFtcCh0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihjdXJyZW50Wm9vbSwgdGhpcy56b29tLCB0aGlzLnpvb20gKyAxKSwgMCwgMSk7XG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybXMoY29udGV4dDogQ29udGV4dCwgdW5pZm9ybTogVW5pZm9ybTwqPixcbiAgICAgICAgICAgICAgICBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzKTogdm9pZCB7XG4gICAgICAgIHVuaWZvcm0uc2V0KHRoaXMuaW50ZXJwb2xhdGlvbkZhY3RvcihnbG9iYWxzLnpvb20pKTtcbiAgICB9XG5cbiAgICBnZXRCaW5kaW5nKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbik6IFVuaWZvcm0xZiB7XG4gICAgICAgIHJldHVybiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICB9XG59XG5cbmNsYXNzIENyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXI8VD4gaW1wbGVtZW50cyBCaW5kZXI8VD4ge1xuICAgIGV4cHJlc3Npb246IENvbXBvc2l0ZUV4cHJlc3Npb247XG4gICAgbmFtZXM6IEFycmF5PHN0cmluZz47XG4gICAgdW5pZm9ybU5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHR5cGU6IHN0cmluZztcbiAgICB1c2VJbnRlZ2VyWm9vbTogYm9vbGVhbjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgbWF4VmFsdWU6IG51bWJlcjtcbiAgICBsYXllcklkOiBzdHJpbmc7XG5cbiAgICB6b29tSW5QYWludFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheTtcbiAgICB6b29tT3V0UGFpbnRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXk7XG4gICAgem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG4gICAgem9vbU91dFBhaW50VmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuICAgIHBhaW50VmVydGV4QXR0cmlidXRlczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+O1xuXG4gICAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogQ29tcG9zaXRlRXhwcmVzc2lvbiwgbmFtZXM6IEFycmF5PHN0cmluZz4sIHR5cGU6IHN0cmluZywgdXNlSW50ZWdlclpvb206IGJvb2xlYW4sIHpvb206IG51bWJlciwgUGFpbnRWZXJ0ZXhBcnJheTogQ2xhc3M8U3RydWN0QXJyYXk+LCBsYXllcklkOiBzdHJpbmcpIHtcblxuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLm5hbWVzID0gbmFtZXM7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMudW5pZm9ybU5hbWVzID0gdGhpcy5uYW1lcy5tYXAobmFtZSA9PiBgdV8ke25hbWV9X3RgKTtcbiAgICAgICAgdGhpcy51c2VJbnRlZ2VyWm9vbSA9IHVzZUludGVnZXJab29tO1xuICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLm1heFZhbHVlID0gLUluZmluaXR5O1xuICAgICAgICB0aGlzLmxheWVySWQgPSBsYXllcklkO1xuXG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzID0gbmFtZXMubWFwKChuYW1lKSA9PlxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBgYV8ke25hbWV9YCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVWludDE2JyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzOiA0LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkgPSBuZXcgUGFpbnRWZXJ0ZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5ID0gbmV3IFBhaW50VmVydGV4QXJyYXkoKTtcbiAgICB9XG5cbiAgICBkZWZpbmVzKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKCkge31cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheShsZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgLy8gV2UgcG9wdWxhdGUgdHdvIHBhaW50IGFycmF5cyBiZWNhdXNlLCBmb3IgY3Jvc3MtZmFkZWQgcHJvcGVydGllcywgd2UgZG9uJ3Qga25vdyB3aGljaCBkaXJlY3Rpb25cbiAgICAgICAgLy8gd2UncmUgY3Jvc3MtZmFkaW5nIHRvIGF0IGxheW91dCB0aW1lLiBJbiBvcmRlciB0byBrZWVwIHZlcnRleCBhdHRyaWJ1dGVzIHRvIGEgbWluaW11bSBhbmQgbm90IHBhc3NcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgdmVydGV4IGRhdGEgdG8gdGhlIHNoYWRlcnMsIHdlIGRldGVybWluZSB3aGljaCB0byB1cGxvYWQgYXQgZHJhdyB0aW1lLlxuXG4gICAgICAgIGNvbnN0IHpvb21JbkFycmF5ID0gdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5O1xuICAgICAgICBjb25zdCB6b29tT3V0QXJyYXkgPSB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5O1xuICAgICAgICBjb25zdCB7bGF5ZXJJZH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBzdGFydCA9IHpvb21JbkFycmF5Lmxlbmd0aDtcblxuICAgICAgICB6b29tSW5BcnJheS5yZXNlcnZlKGxlbmd0aCk7XG4gICAgICAgIHpvb21PdXRBcnJheS5yZXNlcnZlKGxlbmd0aCk7XG5cbiAgICAgICAgaWYgKGltYWdlUG9zaXRpb25zICYmIGZlYXR1cmUucGF0dGVybnMgJiYgZmVhdHVyZS5wYXR0ZXJuc1tsYXllcklkXSkge1xuICAgICAgICAgICAgY29uc3Qge21pbiwgbWlkLCBtYXh9ID0gZmVhdHVyZS5wYXR0ZXJuc1tsYXllcklkXTtcblxuICAgICAgICAgICAgY29uc3QgaW1hZ2VNaW4gPSBpbWFnZVBvc2l0aW9uc1ttaW5dO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VNaWQgPSBpbWFnZVBvc2l0aW9uc1ttaWRdO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VNYXggPSBpbWFnZVBvc2l0aW9uc1ttYXhdO1xuXG4gICAgICAgICAgICBpZiAoIWltYWdlTWluIHx8ICFpbWFnZU1pZCB8fCAhaW1hZ2VNYXgpIHJldHVybjtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB6b29tSW5BcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VNaWQudGxbMF0sIGltYWdlTWlkLnRsWzFdLCBpbWFnZU1pZC5iclswXSwgaW1hZ2VNaWQuYnJbMV0sXG4gICAgICAgICAgICAgICAgICAgIGltYWdlTWluLnRsWzBdLCBpbWFnZU1pbi50bFsxXSwgaW1hZ2VNaW4uYnJbMF0sIGltYWdlTWluLmJyWzFdXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHpvb21PdXRBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VNaWQudGxbMF0sIGltYWdlTWlkLnRsWzFdLCBpbWFnZU1pZC5iclswXSwgaW1hZ2VNaWQuYnJbMV0sXG4gICAgICAgICAgICAgICAgICAgIGltYWdlTWF4LnRsWzBdLCBpbWFnZU1heC50bFsxXSwgaW1hZ2VNYXguYnJbMF0sIGltYWdlTWF4LmJyWzFdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXkoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICAvLyBXZSBwb3B1bGF0ZSB0d28gcGFpbnQgYXJyYXlzIGJlY2F1c2UsIGZvciBjcm9zcy1mYWRlZCBwcm9wZXJ0aWVzLCB3ZSBkb24ndCBrbm93IHdoaWNoIGRpcmVjdGlvblxuICAgICAgICAvLyB3ZSdyZSBjcm9zcy1mYWRpbmcgdG8gYXQgbGF5b3V0IHRpbWUuIEluIG9yZGVyIHRvIGtlZXAgdmVydGV4IGF0dHJpYnV0ZXMgdG8gYSBtaW5pbXVtIGFuZCBub3QgcGFzc1xuICAgICAgICAvLyB1bm5lY2Vzc2FyeSB2ZXJ0ZXggZGF0YSB0byB0aGUgc2hhZGVycywgd2UgZGV0ZXJtaW5lIHdoaWNoIHRvIHVwbG9hZCBhdCBkcmF3IHRpbWUuXG5cbiAgICAgICAgY29uc3Qgem9vbUluQXJyYXkgPSB0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXk7XG4gICAgICAgIGNvbnN0IHpvb21PdXRBcnJheSA9IHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXk7XG4gICAgICAgIGNvbnN0IHtsYXllcklkfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKGltYWdlUG9zaXRpb25zICYmIGZlYXR1cmUucGF0dGVybnMgJiYgZmVhdHVyZS5wYXR0ZXJuc1tsYXllcklkXSkge1xuICAgICAgICAgICAgY29uc3Qge21pbiwgbWlkLCBtYXh9ID0gZmVhdHVyZS5wYXR0ZXJuc1tsYXllcklkXTtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlTWluID0gaW1hZ2VQb3NpdGlvbnNbbWluXTtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlTWlkID0gaW1hZ2VQb3NpdGlvbnNbbWlkXTtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlTWF4ID0gaW1hZ2VQb3NpdGlvbnNbbWF4XTtcblxuICAgICAgICAgICAgaWYgKCFpbWFnZU1pbiB8fCAhaW1hZ2VNaWQgfHwgIWltYWdlTWF4KSByZXR1cm47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHpvb21JbkFycmF5LmVtcGxhY2UoaSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VNaWQudGxbMF0sIGltYWdlTWlkLnRsWzFdLCBpbWFnZU1pZC5iclswXSwgaW1hZ2VNaWQuYnJbMV0sXG4gICAgICAgICAgICAgICAgICAgIGltYWdlTWluLnRsWzBdLCBpbWFnZU1pbi50bFsxXSwgaW1hZ2VNaW4uYnJbMF0sIGltYWdlTWluLmJyWzFdXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHpvb21PdXRBcnJheS5lbXBsYWNlKGksXG4gICAgICAgICAgICAgICAgICAgIGltYWdlTWlkLnRsWzBdLCBpbWFnZU1pZC50bFsxXSwgaW1hZ2VNaWQuYnJbMF0sIGltYWdlTWlkLmJyWzFdLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZU1heC50bFswXSwgaW1hZ2VNYXgudGxbMV0sIGltYWdlTWF4LmJyWzBdLCBpbWFnZU1heC5iclsxXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy56b29tSW5QYWludFZlcnRleEFycmF5ICYmIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciAmJiB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5ICYmIHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXksIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLCB0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCk7XG4gICAgICAgICAgICB0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXksIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLCB0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXIpIHRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXIpIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybXMoY29udGV4dDogQ29udGV4dCwgdW5pZm9ybTogVW5pZm9ybTwqPik6IHZvaWQge1xuICAgICAgICB1bmlmb3JtLnNldCgwKTtcbiAgICB9XG5cbiAgICBnZXRCaW5kaW5nKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbik6ICRTaGFwZTxVbmlmb3JtPGFueT4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb24pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBQcm9ncmFtQ29uZmlndXJhdGlvbiBjb250YWlucyB0aGUgbG9naWMgZm9yIGJpbmRpbmcgc3R5bGUgbGF5ZXIgcHJvcGVydGllcyBhbmQgdGlsZVxuICogbGF5ZXIgZmVhdHVyZSBkYXRhIGludG8gR0wgcHJvZ3JhbSB1bmlmb3JtcyBhbmQgdmVydGV4IGF0dHJpYnV0ZXMuXG4gKlxuICogTm9uLWRhdGEtZHJpdmVuIHByb3BlcnR5IHZhbHVlcyBhcmUgYm91bmQgdG8gc2hhZGVyIHVuaWZvcm1zLiBEYXRhLWRyaXZlbiBwcm9wZXJ0eVxuICogdmFsdWVzIGFyZSBib3VuZCB0byB2ZXJ0ZXggYXR0cmlidXRlcy4gSW4gb3JkZXIgdG8gc3VwcG9ydCBhIHVuaWZvcm0gR0xTTCBzeW50YXggb3ZlclxuICogYm90aCwgW01hcGJveCBHTCBTaGFkZXJzXShodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1zaGFkZXJzKSBkZWZpbmVzIGEgYCNwcmFnbWFgXG4gKiBhYnN0cmFjdGlvbiwgd2hpY2ggUHJvZ3JhbUNvbmZpZ3VyYXRpb24gaXMgcmVzcG9uc2libGUgZm9yIGltcGxlbWVudGluZy4gQXQgcnVudGltZSxcbiAqIGl0IGV4YW1pbmVzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgcGFydGljdWxhciBsYXllciwgY29tYmluZXMgdGhpcyB3aXRoIGZpeGVkIGtub3dsZWRnZVxuICogYWJvdXQgaG93IGxheWVycyBvZiB0aGUgcGFydGljdWxhciB0eXBlIGFyZSBpbXBsZW1lbnRlZCwgYW5kIGRldGVybWluZXMgd2hpY2ggdW5pZm9ybXNcbiAqIGFuZCB2ZXJ0ZXggYXR0cmlidXRlcyB3aWxsIGJlIHJlcXVpcmVkLiBJdCBjYW4gdGhlbiBzdWJzdGl0dXRlIHRoZSBhcHByb3ByaWF0ZSB0ZXh0XG4gKiBpbnRvIHRoZSBzaGFkZXIgc291cmNlIGNvZGUsIGNyZWF0ZSBhbmQgbGluayBhIHByb2dyYW0sIGFuZCBiaW5kIHRoZSB1bmlmb3JtcyBhbmRcbiAqIHZlcnRleCBhdHRyaWJ1dGVzIGluIHByZXBhcmF0aW9uIGZvciBkcmF3aW5nLlxuICpcbiAqIFdoZW4gYSB2ZWN0b3IgdGlsZSBpcyBwYXJzZWQsIHRoaXMgc2FtZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIHVzZWQgdG9cbiAqIHBvcHVsYXRlIHRoZSBhdHRyaWJ1dGUgYnVmZmVycyBuZWVkZWQgZm9yIGRhdGEtZHJpdmVuIHN0eWxpbmcgdXNpbmcgdGhlIHpvb21cbiAqIGxldmVsIGFuZCBmZWF0dXJlIHByb3BlcnR5IGRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZ3JhbUNvbmZpZ3VyYXRpb24ge1xuICAgIGJpbmRlcnM6IHsgW3N0cmluZ106IEJpbmRlcjxhbnk+IH07XG4gICAgY2FjaGVLZXk6IHN0cmluZztcbiAgICBsYXlvdXRBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG5cbiAgICBfYnVmZmVyczogQXJyYXk8VmVydGV4QnVmZmVyPjtcbiAgICBfZmVhdHVyZU1hcDogRmVhdHVyZVBvc2l0aW9uTWFwO1xuICAgIF9idWZmZXJPZmZzZXQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJpbmRlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5jYWNoZUtleSA9ICcnO1xuICAgICAgICB0aGlzLl9idWZmZXJzID0gW107XG4gICAgICAgIHRoaXMuX2ZlYXR1cmVNYXAgPSBuZXcgRmVhdHVyZVBvc2l0aW9uTWFwKCk7XG4gICAgICAgIHRoaXMuX2J1ZmZlck9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZUR5bmFtaWM8TGF5ZXI6IFR5cGVkU3R5bGVMYXllcj4obGF5ZXI6IExheWVyLCB6b29tOiBudW1iZXIsIGZpbHRlclByb3BlcnRpZXM6IChzdHJpbmcpID0+IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvbigpO1xuICAgICAgICBjb25zdCBrZXlzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsYXllci5wYWludC5fdmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoIWZpbHRlclByb3BlcnRpZXMocHJvcGVydHkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbGF5ZXIucGFpbnQuZ2V0KHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKSB8fCAhc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gcGFpbnRBdHRyaWJ1dGVOYW1lcyhwcm9wZXJ0eSwgbGF5ZXIudHlwZSk7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi50eXBlO1xuICAgICAgICAgICAgY29uc3QgdXNlSW50ZWdlclpvb20gPSB2YWx1ZS5wcm9wZXJ0eS51c2VJbnRlZ2VyWm9vbTtcbiAgICAgICAgICAgIGNvbnN0IGlzQ3Jvc3NGYWRlZCA9IHZhbHVlLnByb3BlcnR5LnNwZWNpZmljYXRpb25bJ3Byb3BlcnR5LXR5cGUnXSA9PT0gJ2Nyb3NzLWZhZGVkJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvblsncHJvcGVydHktdHlwZSddID09PSAnY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4nO1xuXG4gICAgICAgICAgICBpZiAoaXNDcm9zc0ZhZGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5iaW5kZXJzW3Byb3BlcnR5XSA9IG5ldyBDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXIodmFsdWUudmFsdWUudmFsdWUsIG5hbWVzLCB0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGAvdV8ke3Byb3BlcnR5fWApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdEFycmF5TGF5b3V0ID0gbGF5b3V0VHlwZShwcm9wZXJ0eSwgdHlwZSwgJ3NvdXJjZScpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmJpbmRlcnNbcHJvcGVydHldID0gbmV3IENyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIodmFsdWUudmFsdWUsIG5hbWVzLCB0eXBlLCB1c2VJbnRlZ2VyWm9vbSwgem9vbSwgU3RydWN0QXJyYXlMYXlvdXQsIGxheWVyLmlkKTtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGAvYV8ke3Byb3BlcnR5fWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUudmFsdWUua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgICAgIHNlbGYuYmluZGVyc1twcm9wZXJ0eV0gPSBuZXcgQ29uc3RhbnRCaW5kZXIodmFsdWUudmFsdWUudmFsdWUsIG5hbWVzLCB0eXBlKTtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goYC91XyR7cHJvcGVydHl9YCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgU3RydWN0QXJyYXlMYXlvdXQgPSBsYXlvdXRUeXBlKHByb3BlcnR5LCB0eXBlLCAnc291cmNlJyk7XG4gICAgICAgICAgICAgICAgc2VsZi5iaW5kZXJzW3Byb3BlcnR5XSA9IG5ldyBTb3VyY2VFeHByZXNzaW9uQmluZGVyKHZhbHVlLnZhbHVlLCBuYW1lcywgdHlwZSwgU3RydWN0QXJyYXlMYXlvdXQpO1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChgL2FfJHtwcm9wZXJ0eX1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgU3RydWN0QXJyYXlMYXlvdXQgPSBsYXlvdXRUeXBlKHByb3BlcnR5LCB0eXBlLCAnY29tcG9zaXRlJyk7XG4gICAgICAgICAgICAgICAgc2VsZi5iaW5kZXJzW3Byb3BlcnR5XSA9IG5ldyBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyKHZhbHVlLnZhbHVlLCBuYW1lcywgdHlwZSwgdXNlSW50ZWdlclpvb20sIHpvb20sIFN0cnVjdEFycmF5TGF5b3V0KTtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goYC96XyR7cHJvcGVydHl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLmNhY2hlS2V5ID0ga2V5cy5zb3J0KCkuam9pbignJyk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5cyhuZXdMZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW5kZXg6IG51bWJlciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgYmluZGVyLnBvcHVsYXRlUGFpbnRBcnJheShuZXdMZW5ndGgsIGZlYXR1cmUsIGltYWdlUG9zaXRpb25zLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmVhdHVyZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9mZWF0dXJlTWFwLmFkZCgrZmVhdHVyZS5pZCwgaW5kZXgsIHRoaXMuX2J1ZmZlck9mZnNldCwgbmV3TGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9idWZmZXJPZmZzZXQgPSBuZXdMZW5ndGg7XG4gICAgfVxuICAgIHNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbzogSW1hZ2VQb3NpdGlvbiwgcG9zRnJvbTogSW1hZ2VQb3NpdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGJpbmRlci5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheXMoZmVhdHVyZVN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBsYXllcjogVHlwZWRTdHlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBmZWF0dXJlU3RhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSB0aGlzLl9mZWF0dXJlTWFwLmdldFBvc2l0aW9ucygraWQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvcyBvZiBwb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gdnRMYXllci5mZWF0dXJlKHBvcy5pbmRleCk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgQ29uc3RhbnRCaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiaW5kZXI6IGFueSkuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL0FITTogUmVtb3ZlIGFmdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy82MjU1XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGxheWVyLnBhaW50LmdldChwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYmluZGVyOiBhbnkpLmV4cHJlc3Npb24gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRlci51cGRhdGVQYWludEFycmF5KHBvcy5zdGFydCwgcG9zLmVuZCwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlc1tpZF0sIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlydHk7XG4gICAgfVxuXG4gICAgZGVmaW5lcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmJpbmRlcnNbcHJvcGVydHldLmRlZmluZXMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRQYWludFZlcnRleEJ1ZmZlcnMoKTogQXJyYXk8VmVydGV4QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzO1xuICAgIH1cblxuICAgIGdldFVuaWZvcm1zKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEFycmF5PEJpbmRlclVuaWZvcm0+IHtcbiAgICAgICAgY29uc3QgdW5pZm9ybXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgYmluZGVyLnVuaWZvcm1OYW1lcykge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGJpbmRlci5nZXRCaW5kaW5nKGNvbnRleHQsIGxvY2F0aW9uc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLnB1c2goe25hbWUsIHByb3BlcnR5LCBiaW5kaW5nfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmlmb3JtcztcbiAgICB9XG5cbiAgICBzZXRVbmlmb3JtczxQcm9wZXJ0aWVzOiBPYmplY3Q+KGNvbnRleHQ6IENvbnRleHQsIGJpbmRlclVuaWZvcm1zOiBBcnJheTxCaW5kZXJVbmlmb3JtPiwgcHJvcGVydGllczogUG9zc2libHlFdmFsdWF0ZWQ8UHJvcGVydGllcz4sIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMpIHtcbiAgICAgICAgLy8gVW5pZm9ybSBzdGF0ZSBiaW5kaW5ncyBhcmUgb3duZWQgYnkgdGhlIFByb2dyYW0sIGJ1dCB3ZSBzZXQgdGhlbVxuICAgICAgICAvLyBmcm9tIHdpdGhpbiB0aGUgUHJvZ3JhbUNvbmZpZ3VyYXRvbidzIGJpbmRlciBtZW1iZXJzLlxuICAgICAgICBmb3IgKGNvbnN0IHtuYW1lLCBwcm9wZXJ0eSwgYmluZGluZ30gb2YgYmluZGVyVW5pZm9ybXMpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZGVyc1twcm9wZXJ0eV0uc2V0VW5pZm9ybXMoY29udGV4dCwgYmluZGluZywgZ2xvYmFscywgcHJvcGVydGllcy5nZXQocHJvcGVydHkpLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVBhdHRlcm5QYWludEJ1ZmZlcnMoY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVyblZlcnRleEJ1ZmZlciA9IGNyb3NzZmFkZS5mcm9tU2NhbGUgPT09IDIgPyBiaW5kZXIuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXIgOiBiaW5kZXIuem9vbU91dFBhaW50VmVydGV4QnVmZmVyO1xuICAgICAgICAgICAgICAgIGlmIChwYXR0ZXJuVmVydGV4QnVmZmVyKSBidWZmZXJzLnB1c2gocGF0dGVyblZlcnRleEJ1ZmZlcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8XG4gICAgICAgICAgICAgICAgYmluZGVyIGluc3RhbmNlb2YgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcikgJiZcbiAgICAgICAgICAgICAgICBiaW5kZXIucGFpbnRWZXJ0ZXhCdWZmZXJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChiaW5kZXIucGFpbnRWZXJ0ZXhCdWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYnVmZmVycyA9IGJ1ZmZlcnM7XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZGVyc1twcm9wZXJ0eV0udXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmICgoYmluZGVyIGluc3RhbmNlb2YgU291cmNlRXhwcmVzc2lvbkJpbmRlciB8fFxuICAgICAgICAgICAgICAgIGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIpICYmXG4gICAgICAgICAgICAgICAgYmluZGVyLnBhaW50VmVydGV4QnVmZmVyXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goYmluZGVyLnBhaW50VmVydGV4QnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9idWZmZXJzID0gYnVmZmVycztcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgdGhpcy5iaW5kZXJzW3Byb3BlcnR5XS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxMYXllcjogVHlwZWRTdHlsZUxheWVyPiB7XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiB7W3N0cmluZ106IFByb2dyYW1Db25maWd1cmF0aW9ufTtcbiAgICBuZWVkc1VwbG9hZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPiwgbGF5ZXJzOiAkUmVhZE9ubHlBcnJheTxMYXllcj4sIHpvb206IG51bWJlciwgZmlsdGVyUHJvcGVydGllczogKHN0cmluZykgPT4gYm9vbGVhbiA9ICgpID0+IHRydWUpIHtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVyLmlkXSA9IFByb2dyYW1Db25maWd1cmF0aW9uLmNyZWF0ZUR5bmFtaWMobGF5ZXIsIHpvb20sIGZpbHRlclByb3BlcnRpZXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbbGF5ZXIuaWRdLmxheW91dEF0dHJpYnV0ZXMgPSBsYXlvdXRBdHRyaWJ1dGVzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmVlZHNVcGxvYWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZVBhaW50QXJyYXlzKGxlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBpbmRleDogbnVtYmVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2tleV0ucG9wdWxhdGVQYWludEFycmF5cyhsZW5ndGgsIGZlYXR1cmUsIGluZGV4LCBpbWFnZVBvc2l0aW9ucywgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZWVkc1VwbG9hZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheXMoZmVhdHVyZVN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBsYXllcnM6ICRSZWFkT25seUFycmF5PFR5cGVkU3R5bGVMYXllcj4sIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLm5lZWRzVXBsb2FkID0gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbbGF5ZXIuaWRdLnVwZGF0ZVBhaW50QXJyYXlzKGZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXIsIGxheWVyLCBpbWFnZVBvc2l0aW9ucykgfHwgdGhpcy5uZWVkc1VwbG9hZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldChsYXllcklkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVySWRdO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy5uZWVkc1VwbG9hZCkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVySWRdLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5lZWRzVXBsb2FkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tsYXllcklkXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhaW50QXR0cmlidXRlTmFtZXMocHJvcGVydHksIHR5cGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lRXhjZXB0aW9ucyA9IHtcbiAgICAgICAgJ3RleHQtb3BhY2l0eSc6IFsnb3BhY2l0eSddLFxuICAgICAgICAnaWNvbi1vcGFjaXR5JzogWydvcGFjaXR5J10sXG4gICAgICAgICd0ZXh0LWNvbG9yJzogWydmaWxsX2NvbG9yJ10sXG4gICAgICAgICdpY29uLWNvbG9yJzogWydmaWxsX2NvbG9yJ10sXG4gICAgICAgICd0ZXh0LWhhbG8tY29sb3InOiBbJ2hhbG9fY29sb3InXSxcbiAgICAgICAgJ2ljb24taGFsby1jb2xvcic6IFsnaGFsb19jb2xvciddLFxuICAgICAgICAndGV4dC1oYWxvLWJsdXInOiBbJ2hhbG9fYmx1ciddLFxuICAgICAgICAnaWNvbi1oYWxvLWJsdXInOiBbJ2hhbG9fYmx1ciddLFxuICAgICAgICAndGV4dC1oYWxvLXdpZHRoJzogWydoYWxvX3dpZHRoJ10sXG4gICAgICAgICdpY29uLWhhbG8td2lkdGgnOiBbJ2hhbG9fd2lkdGgnXSxcbiAgICAgICAgJ2xpbmUtZ2FwLXdpZHRoJzogWydnYXB3aWR0aCddLFxuICAgICAgICAnbGluZS1wYXR0ZXJuJzogWydwYXR0ZXJuX3RvJywgJ3BhdHRlcm5fZnJvbSddLFxuICAgICAgICAnZmlsbC1wYXR0ZXJuJzogWydwYXR0ZXJuX3RvJywgJ3BhdHRlcm5fZnJvbSddLFxuICAgICAgICAnZmlsbC1leHRydXNpb24tcGF0dGVybic6IFsncGF0dGVybl90bycsICdwYXR0ZXJuX2Zyb20nXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWVFeGNlcHRpb25zW3Byb3BlcnR5XSB8fFxuICAgICAgICBbcHJvcGVydHkucmVwbGFjZShgJHt0eXBlfS1gLCAnJykucmVwbGFjZSgvLS9nLCAnXycpXTtcbn1cblxuZnVuY3Rpb24gZ2V0TGF5b3V0RXhjZXB0aW9uKHByb3BlcnR5KSB7XG4gICAgY29uc3QgcHJvcGVydHlFeGNlcHRpb25zID0ge1xuICAgICAgICAnbGluZS1wYXR0ZXJuJzp7XG4gICAgICAgICAgICAnc291cmNlJzogUGF0dGVybkxheW91dEFycmF5LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFBhdHRlcm5MYXlvdXRBcnJheVxuICAgICAgICB9LFxuICAgICAgICAnZmlsbC1wYXR0ZXJuJzoge1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFBhdHRlcm5MYXlvdXRBcnJheSxcbiAgICAgICAgICAgICdjb21wb3NpdGUnOiBQYXR0ZXJuTGF5b3V0QXJyYXlcbiAgICAgICAgfSxcbiAgICAgICAgJ2ZpbGwtZXh0cnVzaW9uLXBhdHRlcm4nOntcbiAgICAgICAgICAgICdzb3VyY2UnOiBQYXR0ZXJuTGF5b3V0QXJyYXksXG4gICAgICAgICAgICAnY29tcG9zaXRlJzogUGF0dGVybkxheW91dEFycmF5XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb3BlcnR5RXhjZXB0aW9uc1twcm9wZXJ0eV07XG59XG5cbmZ1bmN0aW9uIGxheW91dFR5cGUocHJvcGVydHksIHR5cGUsIGJpbmRlclR5cGUpIHtcbiAgICBjb25zdCBkZWZhdWx0TGF5b3V0cyA9IHtcbiAgICAgICAgJ2NvbG9yJzoge1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFN0cnVjdEFycmF5TGF5b3V0MmY4LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFN0cnVjdEFycmF5TGF5b3V0NGYxNlxuICAgICAgICB9LFxuICAgICAgICAnbnVtYmVyJzoge1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFN0cnVjdEFycmF5TGF5b3V0MWY0LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFN0cnVjdEFycmF5TGF5b3V0MmY4XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbGF5b3V0RXhjZXB0aW9uID0gZ2V0TGF5b3V0RXhjZXB0aW9uKHByb3BlcnR5KTtcbiAgICByZXR1cm4gIGxheW91dEV4Y2VwdGlvbiAmJiBsYXlvdXRFeGNlcHRpb25bYmluZGVyVHlwZV0gfHxcbiAgICAgICAgZGVmYXVsdExheW91dHNbdHlwZV1bYmluZGVyVHlwZV07XG59XG5cbnJlZ2lzdGVyKCdDb25zdGFudEJpbmRlcicsIENvbnN0YW50QmluZGVyKTtcbnJlZ2lzdGVyKCdDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXInLCBDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXIpO1xucmVnaXN0ZXIoJ1NvdXJjZUV4cHJlc3Npb25CaW5kZXInLCBTb3VyY2VFeHByZXNzaW9uQmluZGVyKTtcbnJlZ2lzdGVyKCdDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyJywgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcik7XG5yZWdpc3RlcignQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcicsIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIpO1xucmVnaXN0ZXIoJ1Byb2dyYW1Db25maWd1cmF0aW9uJywgUHJvZ3JhbUNvbmZpZ3VyYXRpb24sIHtvbWl0OiBbJ19idWZmZXJzJ119KTtcbnJlZ2lzdGVyKCdQcm9ncmFtQ29uZmlndXJhdGlvblNldCcsIFByb2dyYW1Db25maWd1cmF0aW9uU2V0KTtcbiIsIi8vIEBmbG93XG5cbi8qKlxuICogVGhlIG1heGltdW0gdmFsdWUgb2YgYSBjb29yZGluYXRlIGluIHRoZSBpbnRlcm5hbCB0aWxlIGNvb3JkaW5hdGUgc3lzdGVtLiBDb29yZGluYXRlcyBvZlxuICogYWxsIHNvdXJjZSBmZWF0dXJlcyBub3JtYWxpemVkIHRvIHRoaXMgZXh0ZW50IHVwb24gbG9hZC5cbiAqXG4gKiBUaGUgdmFsdWUgaXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUgZm9sbG93aW5nOlxuICpcbiAqICogVmVydGV4IGJ1ZmZlciBzdG9yZSBwb3NpdGlvbnMgYXMgc2lnbmVkIDE2IGJpdCBpbnRlZ2Vycy5cbiAqICogT25lIGJpdCBpcyBsb3N0IGZvciBzaWduZWRuZXNzIHRvIHN1cHBvcnQgdGlsZSBidWZmZXJzLlxuICogKiBPbmUgYml0IGlzIGxvc3QgYmVjYXVzZSB0aGUgbGluZSB2ZXJ0ZXggYnVmZmVyIHVzZWQgdG8gcGFjayAxIGJpdCBvZiBvdGhlciBkYXRhIGludG8gdGhlIGludC5cbiAqICogT25lIGJpdCBpcyBsb3N0IHRvIHN1cHBvcnQgZmVhdHVyZXMgZXh0ZW5kaW5nIHBhc3QgdGhlIGV4dGVudCBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgdGlsZS5cbiAqICogVGhpcyBsZWF2ZXMgdXMgd2l0aCAyXjEzID0gODE5MlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgODE5MjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7d2Fybk9uY2UsIGNsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4vZXh0ZW50JztcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbi8vIFRoZXNlIGJvdW5kcyBkZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gc3VwcG9ydGVkIGNvb3JkaW5hdGUgdmFsdWVzLlxuLy8gV2hpbGUgdmlzaWJsZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIFswLCBFWFRFTlRdLCB0aWxlcyBtYXkgdGhlb3JldGljYWxseVxuLy8gY29udGFpbiBjb3JkaW5hdGVzIHdpdGhpbiBbLUluZmluaXR5LCBJbmZpbml0eV0uIE91ciByYW5nZSBpcyBsaW1pdGVkIGJ5IHRoZVxuLy8gbnVtYmVyIG9mIGJpdHMgdXNlZCB0byByZXByZXNlbnQgdGhlIGNvb3JkaW5hdGUuXG5mdW5jdGlvbiBjcmVhdGVCb3VuZHMoYml0cykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG1pbjogLTEgKiBNYXRoLnBvdygyLCBiaXRzIC0gMSksXG4gICAgICAgIG1heDogTWF0aC5wb3coMiwgYml0cyAtIDEpIC0gMVxuICAgIH07XG59XG5cbmNvbnN0IGJvdW5kcyA9IGNyZWF0ZUJvdW5kcygxNSk7XG5cbi8qKlxuICogTG9hZHMgYSBnZW9tZXRyeSBmcm9tIGEgVmVjdG9yVGlsZUZlYXR1cmUgYW5kIHNjYWxlcyBpdCB0byB0aGUgY29tbW9uIGV4dGVudFxuICogdXNlZCBpbnRlcm5hbGx5LlxuICogQHBhcmFtIHtWZWN0b3JUaWxlRmVhdHVyZX0gZmVhdHVyZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZEdlb21ldHJ5KGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlKTogQXJyYXk8QXJyYXk8UG9pbnQ+PiB7XG4gICAgY29uc3Qgc2NhbGUgPSBFWFRFTlQgLyBmZWF0dXJlLmV4dGVudDtcbiAgICBjb25zdCBnZW9tZXRyeSA9IGZlYXR1cmUubG9hZEdlb21ldHJ5KCk7XG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCBnZW9tZXRyeS5sZW5ndGg7IHIrKykge1xuICAgICAgICBjb25zdCByaW5nID0gZ2VvbWV0cnlbcl07XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcmluZy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSByaW5nW3BdO1xuICAgICAgICAgICAgLy8gcm91bmQgaGVyZSBiZWNhdXNlIG1hcGJveC1nbC1uYXRpdmUgdXNlcyBpbnRlZ2VycyB0byByZXByZXNlbnRcbiAgICAgICAgICAgIC8vIHBvaW50cyBhbmQgd2UgbmVlZCB0byBkbyB0aGUgc2FtZSB0byBhdm9pZCByZW5lcmluZyBkaWZmZXJlbmNlcy5cbiAgICAgICAgICAgIHBvaW50LnggPSBNYXRoLnJvdW5kKHBvaW50LnggKiBzY2FsZSk7XG4gICAgICAgICAgICBwb2ludC55ID0gTWF0aC5yb3VuZChwb2ludC55ICogc2NhbGUpO1xuXG4gICAgICAgICAgICBpZiAocG9pbnQueCA8IGJvdW5kcy5taW4gfHwgcG9pbnQueCA+IGJvdW5kcy5tYXggfHwgcG9pbnQueSA8IGJvdW5kcy5taW4gfHwgcG9pbnQueSA+IGJvdW5kcy5tYXgpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnR2VvbWV0cnkgZXhjZWVkcyBhbGxvd2VkIGV4dGVudCwgcmVkdWNlIHlvdXIgdmVjdG9yIHRpbGUgYnVmZmVyIHNpemUnKTtcbiAgICAgICAgICAgICAgICBwb2ludC54ID0gY2xhbXAocG9pbnQueCwgYm91bmRzLm1pbiwgYm91bmRzLm1heCk7XG4gICAgICAgICAgICAgICAgcG9pbnQueSA9IGNsYW1wKHBvaW50LnksIGJvdW5kcy5taW4sIGJvdW5kcy5tYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZW9tZXRyeTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Q2lyY2xlTGF5b3V0QXJyYXl9IGZyb20gJy4uL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHttZW1iZXJzIGFzIGxheW91dEF0dHJpYnV0ZXN9IGZyb20gJy4vY2lyY2xlX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IGxvYWRHZW9tZXRyeSBmcm9tICcuLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZXh0ZW50JztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBDaXJjbGVTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBIZWF0bWFwU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuZnVuY3Rpb24gYWRkQ2lyY2xlVmVydGV4KGxheW91dFZlcnRleEFycmF5LCB4LCB5LCBleHRydWRlWCwgZXh0cnVkZVkpIHtcbiAgICBsYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgKHggKiAyKSArICgoZXh0cnVkZVggKyAxKSAvIDIpLFxuICAgICAgICAoeSAqIDIpICsgKChleHRydWRlWSArIDEpIC8gMikpO1xufVxuXG4vKipcbiAqIENpcmNsZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHR3byB0cmlhbmdsZXMuXG4gKlxuICogRWFjaCBjb3JuZXIgaGFzIGEgcG9zIHRoYXQgaXMgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlIGFuZCBhbiBleHRydXNpb25cbiAqIHZlY3RvciB0aGF0IGlzIHdoZXJlIGl0IHBvaW50cy5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENpcmNsZUJ1Y2tldDxMYXllcjogQ2lyY2xlU3R5bGVMYXllciB8IEhlYXRtYXBTdHlsZUxheWVyPiBpbXBsZW1lbnRzIEJ1Y2tldCB7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBsYXllcnM6IEFycmF5PExheWVyPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8TGF5ZXI+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogQ2lyY2xlTGF5b3V0QXJyYXk7XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PExheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICB1cGxvYWRlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJ1Y2tldFBhcmFtZXRlcnM8TGF5ZXI+KSB7XG4gICAgICAgIHRoaXMuem9vbSA9IG9wdGlvbnMuem9vbTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGluZyA9IG9wdGlvbnMub3ZlcnNjYWxpbmc7XG4gICAgICAgIHRoaXMubGF5ZXJzID0gb3B0aW9ucy5sYXllcnM7XG4gICAgICAgIHRoaXMubGF5ZXJJZHMgPSB0aGlzLmxheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIuaWQpO1xuICAgICAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleDtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSA9IG5ldyBDaXJjbGVMYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLmluZGV4QXJyYXkgPSBuZXcgVHJpYW5nbGVJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChsYXlvdXRBdHRyaWJ1dGVzLCBvcHRpb25zLmxheWVycywgb3B0aW9ucy56b29tKTtcbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMubGF5ZXJzWzBdO1xuICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlcyA9IFtdO1xuICAgICAgICBsZXQgY2lyY2xlU29ydEtleSA9IG51bGw7XG5cbiAgICAgICAgLy8gSGVhdG1hcCBsYXllcnMgYXJlIGhhbmRsZWQgaW4gdGhpcyBidWNrZXQgYW5kIGhhdmUgbm8gZXZhbHVhdGVkIHByb3BlcnRpZXMsIHNvIHdlIGNoZWNrIG91ciBhY2Nlc3NcbiAgICAgICAgaWYgKHN0eWxlTGF5ZXIudHlwZSA9PT0gJ2NpcmNsZScpIHtcbiAgICAgICAgICAgIGNpcmNsZVNvcnRLZXkgPSAoKHN0eWxlTGF5ZXI6IGFueSk6IENpcmNsZVN0eWxlTGF5ZXIpLmxheW91dC5nZXQoJ2NpcmNsZS1zb3J0LWtleScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSksIGZlYXR1cmUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBsb2FkR2VvbWV0cnkoZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydEtleSA9IGNpcmNsZVNvcnRLZXkgP1xuICAgICAgICAgICAgICAgICAgICBjaXJjbGVTb3J0S2V5LmV2YWx1YXRlKGZlYXR1cmUsIHt9KSA6XG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBmZWF0dXJlLmlkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuczoge30sXG4gICAgICAgICAgICAgICAgICAgIHNvcnRLZXlcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMucHVzaChidWNrZXRGZWF0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaXJjbGVTb3J0S2V5KSB7XG4gICAgICAgICAgICBidWNrZXRGZWF0dXJlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gYS5zb3J0S2V5IGlzIGFsd2F5cyBhIG51bWJlciB3aGVuIGluIHVzZVxuICAgICAgICAgICAgICAgIHJldHVybiAoKGEuc29ydEtleTogYW55KTogbnVtYmVyKSAtICgoYi5zb3J0S2V5OiBhbnkpOiBudW1iZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGJ1Y2tldEZlYXR1cmUgb2YgYnVja2V0RmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHtnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9ID0gYnVja2V0RmVhdHVyZTtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlc1tpbmRleF0uZmVhdHVyZTtcblxuICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCk7XG4gICAgICAgICAgICBvcHRpb25zLmZlYXR1cmVJbmRleC5pbnNlcnQoZmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4LCB0aGlzLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCBsYXlvdXRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZShmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcmluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBwb2ludC54O1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBwb2ludC55O1xuXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IGluY2x1ZGUgcG9pbnRzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHRpbGUgYm91bmRhcmllcy5cbiAgICAgICAgICAgICAgICBpZiAoeCA8IDAgfHwgeCA+PSBFWFRFTlQgfHwgeSA8IDAgfHwgeSA+PSBFWFRFTlQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBnZW9tZXRyeSB3aWxsIGJlIG9mIHRoZSBQb2ludCB0eXBlLCBhbmQgd2UnbGwgZGVyaXZlXG4gICAgICAgICAgICAgICAgLy8gdHdvIHRyaWFuZ2xlcyBmcm9tIGl0LlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gw6LClMKMw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKQXG4gICAgICAgICAgICAgICAgLy8gw6LClMKCIDMgICAgIDIgw6LClMKCXG4gICAgICAgICAgICAgICAgLy8gw6LClMKCICAgICAgICAgw6LClMKCXG4gICAgICAgICAgICAgICAgLy8gw6LClMKCIDAgICAgIDEgw6LClMKCXG4gICAgICAgICAgICAgICAgLy8gw6LClMKUw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKYXG5cbiAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXksIGZlYXR1cmUuc29ydEtleSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgICAgIGFkZENpcmNsZVZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCB4LCB5LCAtMSwgLTEpO1xuICAgICAgICAgICAgICAgIGFkZENpcmNsZVZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCB4LCB5LCAxLCAtMSk7XG4gICAgICAgICAgICAgICAgYWRkQ2lyY2xlVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHgsIHksIDEsIDEpO1xuICAgICAgICAgICAgICAgIGFkZENpcmNsZVZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCB4LCB5LCAtMSwgMSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMSwgaW5kZXggKyAyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMywgaW5kZXggKyAyKTtcblxuICAgICAgICAgICAgICAgIHNlZ21lbnQudmVydGV4TGVuZ3RoICs9IDQ7XG4gICAgICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGluZGV4LCB7fSk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignQ2lyY2xlQnVja2V0JywgQ2lyY2xlQnVja2V0LCB7b21pdDogWydsYXllcnMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBDaXJjbGVCdWNrZXQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2lzQ291bnRlckNsb2Nrd2lzZX0gZnJvbSAnLi91dGlsJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5leHBvcnQge3BvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRQb2ludCwgcG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb24sIHBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmUsIHBvbHlnb25JbnRlcnNlY3RzUG9seWdvbiwgZGlzdFRvU2VnbWVudFNxdWFyZWQsIHBvbHlnb25JbnRlcnNlY3RzQm94fTtcblxudHlwZSBMaW5lID0gQXJyYXk8UG9pbnQ+O1xudHlwZSBNdWx0aUxpbmUgPSBBcnJheTxMaW5lPjtcbnR5cGUgUmluZyA9IEFycmF5PFBvaW50PjtcbnR5cGUgUG9seWdvbiA9IEFycmF5PFBvaW50PjtcbnR5cGUgTXVsdGlQb2x5Z29uID0gQXJyYXk8UG9seWdvbj47XG5cbmZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihwb2x5Z29uQTogUG9seWdvbiwgcG9seWdvbkI6IFBvbHlnb24pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb25BLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChwb2x5Z29uQiwgcG9seWdvbkFbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb25CLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChwb2x5Z29uQSwgcG9seWdvbkJbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobGluZUludGVyc2VjdHNMaW5lKHBvbHlnb25BLCBwb2x5Z29uQikpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnQocG9seWdvbjogUG9seWdvbiwgcG9pbnQ6IFBvaW50LCByYWRpdXM6IG51bWJlcikge1xuICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChwb2x5Z29uLCBwb2ludCkpIHJldHVybiB0cnVlO1xuICAgIGlmIChwb2ludEludGVyc2VjdHNCdWZmZXJlZExpbmUocG9pbnQsIHBvbHlnb24sIHJhZGl1cykpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb24ocG9seWdvbjogUG9seWdvbiwgbXVsdGlQb2x5Z29uOiBNdWx0aVBvbHlnb24pIHtcblxuICAgIGlmIChwb2x5Z29uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbXVsdGlQb2x5Z29uQ29udGFpbnNQb2ludChtdWx0aVBvbHlnb24sIHBvbHlnb25bMF0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXVsdGlQb2x5Z29uLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgIGNvbnN0IHJpbmcgPSBtdWx0aVBvbHlnb25bbV07XG4gICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcmluZy5sZW5ndGg7IG4rKykge1xuICAgICAgICAgICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHBvbHlnb24sIHJpbmdbbl0pKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9seWdvbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobXVsdGlQb2x5Z29uQ29udGFpbnNQb2ludChtdWx0aVBvbHlnb24sIHBvbHlnb25baV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IG11bHRpUG9seWdvbi5sZW5ndGg7IGsrKykge1xuICAgICAgICBpZiAobGluZUludGVyc2VjdHNMaW5lKHBvbHlnb24sIG11bHRpUG9seWdvbltrXSkpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZShwb2x5Z29uOiBQb2x5Z29uLCBtdWx0aUxpbmU6IE11bHRpTGluZSwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG11bHRpTGluZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBsaW5lID0gbXVsdGlMaW5lW2ldO1xuXG4gICAgICAgIGlmIChwb2x5Z29uLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbmUubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbiwgbGluZVtrXSkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpbmVJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKHBvbHlnb24sIGxpbmUsIHJhZGl1cykpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpbmVJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKGxpbmVBOiBMaW5lLCBsaW5lQjogTGluZSwgcmFkaXVzOiBudW1iZXIpIHtcblxuICAgIGlmIChsaW5lQS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChsaW5lSW50ZXJzZWN0c0xpbmUobGluZUEsIGxpbmVCKSkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhbnkgcG9pbnQgaW4gZWl0aGVyIGxpbmUgaXMgd2l0aGluIHJhZGl1cyBvZiB0aGUgb3RoZXIgbGluZVxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmVCLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAocG9pbnRJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKGxpbmVCW2pdLCBsaW5lQSwgcmFkaXVzKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbmVBLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGlmIChwb2ludEludGVyc2VjdHNCdWZmZXJlZExpbmUobGluZUFba10sIGxpbmVCLCByYWRpdXMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpbmVJbnRlcnNlY3RzTGluZShsaW5lQTogTGluZSwgbGluZUI6IExpbmUpIHtcbiAgICBpZiAobGluZUEubGVuZ3RoID09PSAwIHx8IGxpbmVCLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZUEubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGEwID0gbGluZUFbaV07XG4gICAgICAgIGNvbnN0IGExID0gbGluZUFbaSArIDFdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmVCLmxlbmd0aCAtIDE7IGorKykge1xuICAgICAgICAgICAgY29uc3QgYjAgPSBsaW5lQltqXTtcbiAgICAgICAgICAgIGNvbnN0IGIxID0gbGluZUJbaiArIDFdO1xuICAgICAgICAgICAgaWYgKGxpbmVTZWdtZW50SW50ZXJzZWN0c0xpbmVTZWdtZW50KGEwLCBhMSwgYjAsIGIxKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lU2VnbWVudEludGVyc2VjdHNMaW5lU2VnbWVudChhMDogUG9pbnQsIGExOiBQb2ludCwgYjA6IFBvaW50LCBiMTogUG9pbnQpIHtcbiAgICByZXR1cm4gaXNDb3VudGVyQ2xvY2t3aXNlKGEwLCBiMCwgYjEpICE9PSBpc0NvdW50ZXJDbG9ja3dpc2UoYTEsIGIwLCBiMSkgJiZcbiAgICAgICAgaXNDb3VudGVyQ2xvY2t3aXNlKGEwLCBhMSwgYjApICE9PSBpc0NvdW50ZXJDbG9ja3dpc2UoYTAsIGExLCBiMSk7XG59XG5cbmZ1bmN0aW9uIHBvaW50SW50ZXJzZWN0c0J1ZmZlcmVkTGluZShwOiBQb2ludCwgbGluZTogTGluZSwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICBjb25zdCByYWRpdXNTcXVhcmVkID0gcmFkaXVzICogcmFkaXVzO1xuXG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAxKSByZXR1cm4gcC5kaXN0U3FyKGxpbmVbMF0pIDwgcmFkaXVzU3F1YXJlZDtcblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGluZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBGaW5kIGxpbmUgc2VnbWVudHMgdGhhdCBoYXZlIGEgZGlzdGFuY2UgPD0gcmFkaXVzXjIgdG8gcFxuICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIHRyZWF0IHRoZSBsaW5lIGFzIFwiY29udGFpbmluZyBwb2ludCBwXCIuXG4gICAgICAgIGNvbnN0IHYgPSBsaW5lW2kgLSAxXSwgdyA9IGxpbmVbaV07XG4gICAgICAgIGlmIChkaXN0VG9TZWdtZW50U3F1YXJlZChwLCB2LCB3KSA8IHJhZGl1c1NxdWFyZWQpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNTAxNzI1LzMzMTM3OS5cbmZ1bmN0aW9uIGRpc3RUb1NlZ21lbnRTcXVhcmVkKHA6IFBvaW50LCB2OiBQb2ludCwgdzogUG9pbnQpIHtcbiAgICBjb25zdCBsMiA9IHYuZGlzdFNxcih3KTtcbiAgICBpZiAobDIgPT09IDApIHJldHVybiBwLmRpc3RTcXIodik7XG4gICAgY29uc3QgdCA9ICgocC54IC0gdi54KSAqICh3LnggLSB2LngpICsgKHAueSAtIHYueSkgKiAody55IC0gdi55KSkgLyBsMjtcbiAgICBpZiAodCA8IDApIHJldHVybiBwLmRpc3RTcXIodik7XG4gICAgaWYgKHQgPiAxKSByZXR1cm4gcC5kaXN0U3FyKHcpO1xuICAgIHJldHVybiBwLmRpc3RTcXIody5zdWIodikuX211bHQodCkuX2FkZCh2KSk7XG59XG5cbi8vIHBvaW50IGluIHBvbHlnb24gcmF5IGNhc3RpbmcgYWxnb3JpdGhtXG5mdW5jdGlvbiBtdWx0aVBvbHlnb25Db250YWluc1BvaW50KHJpbmdzOiBBcnJheTxSaW5nPiwgcDogUG9pbnQpIHtcbiAgICBsZXQgYyA9IGZhbHNlLFxuICAgICAgICByaW5nLCBwMSwgcDI7XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHJpbmdzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHJpbmcgPSByaW5nc1trXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSByaW5nLmxlbmd0aCAtIDE7IGkgPCByaW5nLmxlbmd0aDsgaiA9IGkrKykge1xuICAgICAgICAgICAgcDEgPSByaW5nW2ldO1xuICAgICAgICAgICAgcDIgPSByaW5nW2pdO1xuICAgICAgICAgICAgaWYgKCgocDEueSA+IHAueSkgIT09IChwMi55ID4gcC55KSkgJiYgKHAueCA8IChwMi54IC0gcDEueCkgKiAocC55IC0gcDEueSkgLyAocDIueSAtIHAxLnkpICsgcDEueCkpIHtcbiAgICAgICAgICAgICAgICBjID0gIWM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25Db250YWluc1BvaW50KHJpbmc6IFJpbmcsIHA6IFBvaW50KSB7XG4gICAgbGV0IGMgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IHJpbmcubGVuZ3RoIC0gMTsgaSA8IHJpbmcubGVuZ3RoOyBqID0gaSsrKSB7XG4gICAgICAgIGNvbnN0IHAxID0gcmluZ1tpXTtcbiAgICAgICAgY29uc3QgcDIgPSByaW5nW2pdO1xuICAgICAgICBpZiAoKChwMS55ID4gcC55KSAhPT0gKHAyLnkgPiBwLnkpKSAmJiAocC54IDwgKHAyLnggLSBwMS54KSAqIChwLnkgLSBwMS55KSAvIChwMi55IC0gcDEueSkgKyBwMS54KSkge1xuICAgICAgICAgICAgYyA9ICFjO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0c0JveChyaW5nOiBSaW5nLCBib3hYMTogbnVtYmVyLCBib3hZMTogbnVtYmVyLCBib3hYMjogbnVtYmVyLCBib3hZMjogbnVtYmVyKSB7XG4gICAgZm9yIChjb25zdCBwIG9mIHJpbmcpIHtcbiAgICAgICAgaWYgKGJveFgxIDw9IHAueCAmJlxuICAgICAgICAgICAgYm94WTEgPD0gcC55ICYmXG4gICAgICAgICAgICBib3hYMiA+PSBwLnggJiZcbiAgICAgICAgICAgIGJveFkyID49IHAueSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29ybmVycyA9IFtcbiAgICAgICAgbmV3IFBvaW50KGJveFgxLCBib3hZMSksXG4gICAgICAgIG5ldyBQb2ludChib3hYMSwgYm94WTIpLFxuICAgICAgICBuZXcgUG9pbnQoYm94WDIsIGJveFkyKSxcbiAgICAgICAgbmV3IFBvaW50KGJveFgyLCBib3hZMSldO1xuXG4gICAgaWYgKHJpbmcubGVuZ3RoID4gMikge1xuICAgICAgICBmb3IgKGNvbnN0IGNvcm5lciBvZiBjb3JuZXJzKSB7XG4gICAgICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocmluZywgY29ybmVyKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJpbmcubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAxID0gcmluZ1tpXTtcbiAgICAgICAgY29uc3QgcDIgPSByaW5nW2kgKyAxXTtcbiAgICAgICAgaWYgKGVkZ2VJbnRlcnNlY3RzQm94KHAxLCBwMiwgY29ybmVycykpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZWRnZUludGVyc2VjdHNCb3goZTE6IFBvaW50LCBlMjogUG9pbnQsIGNvcm5lcnM6IEFycmF5PFBvaW50Pikge1xuICAgIGNvbnN0IHRsID0gY29ybmVyc1swXTtcbiAgICBjb25zdCBiciA9IGNvcm5lcnNbMl07XG4gICAgLy8gdGhlIGVkZ2UgYW5kIGJveCBkbyBub3QgaW50ZXJzZWN0IGluIGVpdGhlciB0aGUgeCBvciB5IGRpbWVuc2lvbnNcbiAgICBpZiAoKChlMS54IDwgdGwueCkgJiYgKGUyLnggPCB0bC54KSkgfHxcbiAgICAgICAgKChlMS54ID4gYnIueCkgJiYgKGUyLnggPiBici54KSkgfHxcbiAgICAgICAgKChlMS55IDwgdGwueSkgJiYgKGUyLnkgPCB0bC55KSkgfHxcbiAgICAgICAgKChlMS55ID4gYnIueSkgJiYgKGUyLnkgPiBici55KSkpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIGNoZWNrIGlmIGFsbCBjb3JuZXJzIG9mIHRoZSBib3ggYXJlIG9uIHRoZSBzYW1lIHNpZGUgb2YgdGhlIGVkZ2VcbiAgICBjb25zdCBkaXIgPSBpc0NvdW50ZXJDbG9ja3dpc2UoZTEsIGUyLCBjb3JuZXJzWzBdKTtcbiAgICByZXR1cm4gZGlyICE9PSBpc0NvdW50ZXJDbG9ja3dpc2UoZTEsIGUyLCBjb3JuZXJzWzFdKSB8fFxuICAgICAgICBkaXIgIT09IGlzQ291bnRlckNsb2Nrd2lzZShlMSwgZTIsIGNvcm5lcnNbMl0pIHx8XG4gICAgICAgIGRpciAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGUxLCBlMiwgY29ybmVyc1szXSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB0eXBlIHtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gXCIuL3Byb3BlcnRpZXNcIjtcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ2lyY2xlQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2NpcmNsZV9idWNrZXQnO1xuaW1wb3J0IHR5cGUgTGluZUJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9saW5lX2J1Y2tldCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXhpbXVtUGFpbnRWYWx1ZShwcm9wZXJ0eTogc3RyaW5nLCBsYXllcjogU3R5bGVMYXllciwgYnVja2V0OiBDaXJjbGVCdWNrZXQ8Kj4gfCBMaW5lQnVja2V0KTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZSA9ICgobGF5ZXIucGFpbnQ6IGFueSkuZ2V0KHByb3BlcnR5KTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPGFueT4pLnZhbHVlO1xuICAgIGlmICh2YWx1ZS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBiaW5kZXJzID0gYnVja2V0LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpLmJpbmRlcnM7XG4gICAgICAgIHJldHVybiBiaW5kZXJzW3Byb3BlcnR5XS5tYXhWYWx1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVEaXN0YW5jZSh0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHRyYW5zbGF0ZVswXSAqIHRyYW5zbGF0ZVswXSArIHRyYW5zbGF0ZVsxXSAqIHRyYW5zbGF0ZVsxXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZTogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVBbmNob3I6ICd2aWV3cG9ydCcgfCAnbWFwJyxcbiAgICAgICAgICAgICAgICAgICBiZWFyaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcikge1xuICAgIGlmICghdHJhbnNsYXRlWzBdICYmICF0cmFuc2xhdGVbMV0pIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5R2VvbWV0cnk7XG4gICAgfVxuICAgIGNvbnN0IHB0ID0gUG9pbnQuY29udmVydCh0cmFuc2xhdGUpLl9tdWx0KHBpeGVsc1RvVGlsZVVuaXRzKTtcblxuICAgIGlmICh0cmFuc2xhdGVBbmNob3IgPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBwdC5fcm90YXRlKC1iZWFyaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2xhdGVkID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVyeUdlb21ldHJ5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcXVlcnlHZW9tZXRyeVtpXTtcbiAgICAgICAgdHJhbnNsYXRlZC5wdXNoKHBvaW50LnN1YihwdCkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNsYXRlZDtcbn1cbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIExheW91dFByb3BzID0ge3xcbiAgICBcImNpcmNsZS1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiY2lyY2xlLXNvcnQta2V5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2NpcmNsZVwiXVtcImNpcmNsZS1zb3J0LWtleVwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJjaXJjbGUtcmFkaXVzXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiY2lyY2xlLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJjaXJjbGUtYmx1clwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImNpcmNsZS1vcGFjaXR5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiY2lyY2xlLXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiY2lyY2xlLXBpdGNoLXNjYWxlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcImNpcmNsZS1zdHJva2Utd2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJjaXJjbGUtc3Ryb2tlLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJjaXJjbGUtcmFkaXVzXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXJhZGl1c1wiXSksXG4gICAgXCJjaXJjbGUtY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtY29sb3JcIl0pLFxuICAgIFwiY2lyY2xlLWJsdXJcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtYmx1clwiXSksXG4gICAgXCJjaXJjbGUtb3BhY2l0eVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1vcGFjaXR5XCJdKSxcbiAgICBcImNpcmNsZS10cmFuc2xhdGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS10cmFuc2xhdGVcIl0pLFxuICAgIFwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbiAgICBcImNpcmNsZS1waXRjaC1zY2FsZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXBpdGNoLXNjYWxlXCJdKSxcbiAgICBcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIl0pLFxuICAgIFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1zdHJva2Utd2lkdGhcIl0pLFxuICAgIFwiY2lyY2xlLXN0cm9rZS1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1zdHJva2UtY29sb3JcIl0pLFxuICAgIFwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50LCBsYXlvdXQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4sIGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz5cbn0+KTtcbiIsIi8qKlxyXG4gKiBDb21tb24gdXRpbGl0aWVzXHJcbiAqIEBtb2R1bGUgZ2xNYXRyaXhcclxuICovXG4vLyBDb25maWd1cmF0aW9uIENvbnN0YW50c1xuZXhwb3J0IHZhciBFUFNJTE9OID0gMC4wMDAwMDE7XG5leHBvcnQgdmFyIEFSUkFZX1RZUEUgPSB0eXBlb2YgRmxvYXQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyA/IEZsb2F0MzJBcnJheSA6IEFycmF5O1xuZXhwb3J0IHZhciBSQU5ET00gPSBNYXRoLnJhbmRvbTtcbi8qKlxyXG4gKiBTZXRzIHRoZSB0eXBlIG9mIGFycmF5IHVzZWQgd2hlbiBjcmVhdGluZyBuZXcgdmVjdG9ycyBhbmQgbWF0cmljZXNcclxuICpcclxuICogQHBhcmFtIHtUeXBlfSB0eXBlIEFycmF5IHR5cGUsIHN1Y2ggYXMgRmxvYXQzMkFycmF5IG9yIEFycmF5XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0TWF0cml4QXJyYXlUeXBlKHR5cGUpIHtcbiAgQVJSQVlfVFlQRSA9IHR5cGU7XG59XG52YXIgZGVncmVlID0gTWF0aC5QSSAvIDE4MDtcbi8qKlxyXG4gKiBDb252ZXJ0IERlZ3JlZSBUbyBSYWRpYW5cclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IGEgQW5nbGUgaW4gRGVncmVlc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUmFkaWFuKGEpIHtcbiAgcmV0dXJuIGEgKiBkZWdyZWU7XG59XG4vKipcclxuICogVGVzdHMgd2hldGhlciBvciBub3QgdGhlIGFyZ3VtZW50cyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgdmFsdWUsIHdpdGhpbiBhbiBhYnNvbHV0ZVxyXG4gKiBvciByZWxhdGl2ZSB0b2xlcmFuY2Ugb2YgZ2xNYXRyaXguRVBTSUxPTiAoYW4gYWJzb2x1dGUgdG9sZXJhbmNlIGlzIHVzZWQgZm9yIHZhbHVlcyBsZXNzXHJcbiAqIHRoYW4gb3IgZXF1YWwgdG8gMS4wLCBhbmQgYSByZWxhdGl2ZSB0b2xlcmFuY2UgaXMgdXNlZCBmb3IgbGFyZ2VyIHZhbHVlcylcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IGEgVGhlIGZpcnN0IG51bWJlciB0byB0ZXN0LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBUaGUgc2Vjb25kIG51bWJlciB0byB0ZXN0LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbnVtYmVycyBhcmUgYXBwcm94aW1hdGVseSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYSksIE1hdGguYWJzKGIpKTtcbn1cbmlmICghTWF0aC5oeXBvdCkgTWF0aC5oeXBvdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHkgPSAwLFxuICAgICAgaSA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHkgKz0gYXJndW1lbnRzW2ldICogYXJndW1lbnRzW2ldO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguc3FydCh5KTtcbn07IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogMngyIE1hdHJpeFxyXG4gKiBAbW9kdWxlIG1hdDJcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDJcclxuICpcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gIH1cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbM10gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0MiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgbWF0MiB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWF0MiB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0IEEgbmV3IDJ4MiBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKG0wMCwgbTAxLCBtMTAsIG0xMSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMTA7XG4gIG91dFszXSA9IG0xMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBtYXQyIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgbTAwLCBtMDEsIG0xMCwgbTExKSB7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMTA7XG4gIG91dFszXSA9IG0xMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2Uob3V0LCBhKSB7XG4gIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGVcbiAgLy8gc29tZSB2YWx1ZXNcbiAgaWYgKG91dCA9PT0gYSkge1xuICAgIHZhciBhMSA9IGFbMV07XG4gICAgb3V0WzFdID0gYVsyXTtcbiAgICBvdXRbMl0gPSBhMTtcbiAgfSBlbHNlIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMl07XG4gICAgb3V0WzJdID0gYVsxXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHZhciBkZXQgPSBhMCAqIGEzIC0gYTIgKiBhMTtcblxuICBpZiAoIWRldCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuICBvdXRbMF0gPSBhMyAqIGRldDtcbiAgb3V0WzFdID0gLWExICogZGV0O1xuICBvdXRbMl0gPSAtYTIgKiBkZXQ7XG4gIG91dFszXSA9IGEwICogZGV0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkam9pbnQob3V0LCBhKSB7XG4gIC8vIENhY2hpbmcgdGhpcyB2YWx1ZSBpcyBuZXNzZWNhcnkgaWYgb3V0ID09IGFcbiAgdmFyIGEwID0gYVswXTtcbiAgb3V0WzBdID0gYVszXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICBvdXRbM10gPSBhMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmFudChhKSB7XG4gIHJldHVybiBhWzBdICogYVszXSAtIGFbMl0gKiBhWzFdO1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM107XG4gIG91dFswXSA9IGEwICogYjAgKyBhMiAqIGIxO1xuICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcbiAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XG4gIG91dFszXSA9IGExICogYjIgKyBhMyAqIGIzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQyIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIHJhZCkge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYTAgKiBjICsgYTIgKiBzO1xuICBvdXRbMV0gPSBhMSAqIGMgKyBhMyAqIHM7XG4gIG91dFsyXSA9IGEwICogLXMgKyBhMiAqIGM7XG4gIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQyIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgdjAgPSB2WzBdLFxuICAgICAgdjEgPSB2WzFdO1xuICBvdXRbMF0gPSBhMCAqIHYwO1xuICBvdXRbMV0gPSBhMSAqIHYwO1xuICBvdXRbMl0gPSBhMiAqIHYxO1xuICBvdXRbM10gPSBhMyAqIHYxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIGdpdmVuIGFuZ2xlXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0Mi5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDIucm90YXRlKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IG1hdDIgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gcztcbiAgb3V0WzJdID0gLXM7XG4gIG91dFszXSA9IGM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHNjYWxpbmdcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQyLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0Mi5zY2FsZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCBtYXQyIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjMn0gdiBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVNjYWxpbmcob3V0LCB2KSB7XG4gIG91dFswXSA9IHZbMF07XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IHZbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ21hdDIoJyArIGFbMF0gKyAnLCAnICsgYVsxXSArICcsICcgKyBhWzJdICsgJywgJyArIGFbM10gKyAnKSc7XG59XG4vKipcclxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBtYXRyaXggdG8gY2FsY3VsYXRlIEZyb2Jlbml1cyBub3JtIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvYihhKSB7XG4gIHJldHVybiBNYXRoLmh5cG90KGFbMF0sIGFbMV0sIGFbMl0sIGFbM10pO1xufVxuLyoqXHJcbiAqIFJldHVybnMgTCwgRCBhbmQgVSBtYXRyaWNlcyAoTG93ZXIgdHJpYW5ndWxhciwgRGlhZ29uYWwgYW5kIFVwcGVyIHRyaWFuZ3VsYXIpIGJ5IGZhY3Rvcml6aW5nIHRoZSBpbnB1dCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBMIHRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IEQgdGhlIGRpYWdvbmFsIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IFUgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgaW5wdXQgbWF0cml4IHRvIGZhY3Rvcml6ZVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIExEVShMLCBELCBVLCBhKSB7XG4gIExbMl0gPSBhWzJdIC8gYVswXTtcbiAgVVswXSA9IGFbMF07XG4gIFVbMV0gPSBhWzFdO1xuICBVWzNdID0gYVszXSAtIExbMl0gKiBVWzFdO1xuICByZXR1cm4gW0wsIEQsIFVdO1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgbWF0cml4IGIgZnJvbSBtYXRyaXggYVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIG91dFszXSA9IGFbM10gLSBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM107XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQyfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKTtcbn1cbi8qKlxyXG4gKiBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgdGhlIG1hdHJpeCBieSBhIHNjYWxhci5cclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBtYXRyaXgncyBlbGVtZW50cyBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDIncyBhZnRlciBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiJ3MgZWxlbWVudHMgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXJBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0Mi5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0Mi5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0OyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDJ4MyBNYXRyaXhcclxuICogQG1vZHVsZSBtYXQyZFxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSBtYXQyZCBjb250YWlucyBzaXggZWxlbWVudHMgZGVmaW5lZCBhczpcclxuICogPHByZT5cclxuICogW2EsIGIsIGMsXHJcbiAqICBkLCB0eCwgdHldXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGlzIGlzIGEgc2hvcnQgZm9ybSBmb3IgdGhlIDN4MyBtYXRyaXg6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBiLCAwLFxyXG4gKiAgYywgZCwgMCxcclxuICogIHR4LCB0eSwgMV1cclxuICogPC9wcmU+XHJcbiAqIFRoZSBsYXN0IGNvbHVtbiBpcyBpZ25vcmVkIHNvIHRoZSBhcnJheSBpcyBzaG9ydGVyIGFuZCBvcGVyYXRpb25zIGFyZSBmYXN0ZXIuXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyZFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg2KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzRdID0gMDtcbiAgICBvdXRbNV0gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDJkIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gYSBuZXcgMngzIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDYpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyZCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBtYXQyZCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAxO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXQyZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IGEgQ29tcG9uZW50IEEgKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIENvbXBvbmVudCBCIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBDb21wb25lbnQgQyAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IGQgQ29tcG9uZW50IEQgKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eCBDb21wb25lbnQgVFggKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eSBDb21wb25lbnQgVFkgKGluZGV4IDUpXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gQSBuZXcgbWF0MmRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKGEsIGIsIGMsIGQsIHR4LCB0eSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNik7XG4gIG91dFswXSA9IGE7XG4gIG91dFsxXSA9IGI7XG4gIG91dFsyXSA9IGM7XG4gIG91dFszXSA9IGQ7XG4gIG91dFs0XSA9IHR4O1xuICBvdXRbNV0gPSB0eTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBtYXQyZCB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge051bWJlcn0gYSBDb21wb25lbnQgQSAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgQ29tcG9uZW50IEIgKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIENvbXBvbmVudCBDIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZCBDb21wb25lbnQgRCAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IHR4IENvbXBvbmVudCBUWCAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IHR5IENvbXBvbmVudCBUWSAoaW5kZXggNSlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCBhLCBiLCBjLCBkLCB0eCwgdHkpIHtcbiAgb3V0WzBdID0gYTtcbiAgb3V0WzFdID0gYjtcbiAgb3V0WzJdID0gYztcbiAgb3V0WzNdID0gZDtcbiAgb3V0WzRdID0gdHg7XG4gIG91dFs1XSA9IHR5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEludmVydHMgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGFhID0gYVswXSxcbiAgICAgIGFiID0gYVsxXSxcbiAgICAgIGFjID0gYVsyXSxcbiAgICAgIGFkID0gYVszXTtcbiAgdmFyIGF0eCA9IGFbNF0sXG4gICAgICBhdHkgPSBhWzVdO1xuICB2YXIgZGV0ID0gYWEgKiBhZCAtIGFiICogYWM7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gYWQgKiBkZXQ7XG4gIG91dFsxXSA9IC1hYiAqIGRldDtcbiAgb3V0WzJdID0gLWFjICogZGV0O1xuICBvdXRbM10gPSBhYSAqIGRldDtcbiAgb3V0WzRdID0gKGFjICogYXR5IC0gYWQgKiBhdHgpICogZGV0O1xuICBvdXRbNV0gPSAoYWIgKiBhdHggLSBhYSAqIGF0eSkgKiBkZXQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmFudChhKSB7XG4gIHJldHVybiBhWzBdICogYVszXSAtIGFbMV0gKiBhWzJdO1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDJkJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyZH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXSxcbiAgICAgIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XTtcbiAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XG4gIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xuICBvdXRbMl0gPSBhMCAqIGIyICsgYTIgKiBiMztcbiAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XG4gIG91dFs0XSA9IGEwICogYjQgKyBhMiAqIGI1ICsgYTQ7XG4gIG91dFs1XSA9IGExICogYjQgKyBhMyAqIGI1ICsgYTU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdDJkIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIHJhZCkge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdO1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYTAgKiBjICsgYTIgKiBzO1xuICBvdXRbMV0gPSBhMSAqIGMgKyBhMyAqIHM7XG4gIG91dFsyXSA9IGEwICogLXMgKyBhMiAqIGM7XG4gIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XG4gIG91dFs0XSA9IGE0O1xuICBvdXRbNV0gPSBhNTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdO1xuICB2YXIgdjAgPSB2WzBdLFxuICAgICAgdjEgPSB2WzFdO1xuICBvdXRbMF0gPSBhMCAqIHYwO1xuICBvdXRbMV0gPSBhMSAqIHYwO1xuICBvdXRbMl0gPSBhMiAqIHYxO1xuICBvdXRbM10gPSBhMyAqIHYxO1xuICBvdXRbNF0gPSBhNDtcbiAgb3V0WzVdID0gYTU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNsYXRlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHRyYW5zbGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShvdXQsIGEsIHYpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XTtcbiAgdmFyIHYwID0gdlswXSxcbiAgICAgIHYxID0gdlsxXTtcbiAgb3V0WzBdID0gYTA7XG4gIG91dFsxXSA9IGExO1xuICBvdXRbMl0gPSBhMjtcbiAgb3V0WzNdID0gYTM7XG4gIG91dFs0XSA9IGEwICogdjAgKyBhMiAqIHYxICsgYTQ7XG4gIG91dFs1XSA9IGExICogdjAgKyBhMyAqIHYxICsgYTU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgZ2l2ZW4gYW5nbGVcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQyZC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDJkLnJvdGF0ZShkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgbWF0MmQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IHM7XG4gIG91dFsyXSA9IC1zO1xuICBvdXRbM10gPSBjO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciBzY2FsaW5nXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0MmQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQyZC5zY2FsZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgbWF0MmQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMyfSB2IFNjYWxpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVNjYWxpbmcob3V0LCB2KSB7XG4gIG91dFswXSA9IHZbMF07XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IHZbMV07XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0MmQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQyZC50cmFuc2xhdGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IG1hdDJkIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjMn0gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVHJhbnNsYXRpb24ob3V0LCB2KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIG91dFs0XSA9IHZbMF07XG4gIG91dFs1XSA9IHZbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiAnbWF0MmQoJyArIGFbMF0gKyAnLCAnICsgYVsxXSArICcsICcgKyBhWzJdICsgJywgJyArIGFbM10gKyAnLCAnICsgYVs0XSArICcsICcgKyBhWzVdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY2FsY3VsYXRlIEZyb2Jlbml1cyBub3JtIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvYihhKSB7XG4gIHJldHVybiBNYXRoLmh5cG90KGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0sIDEpO1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDJkJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyZH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyZH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIG91dFs0XSA9IGFbNF0gLSBiWzRdO1xuICBvdXRbNV0gPSBhWzVdIC0gYls1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgdGhlIG1hdHJpeCBieSBhIHNjYWxhci5cclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIG1hdHJpeCdzIGVsZW1lbnRzIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICBvdXRbNF0gPSBhWzRdICogYjtcbiAgb3V0WzVdID0gYVs1XSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MmQncyBhZnRlciBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiJ3MgZWxlbWVudHMgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF0gKiBzY2FsZTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQyZH0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM10gJiYgYVs0XSA9PT0gYls0XSAmJiBhWzVdID09PSBiWzVdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXSxcbiAgICAgIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKSAmJiBNYXRoLmFicyhhNCAtIGI0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNCksIE1hdGguYWJzKGI0KSkgJiYgTWF0aC5hYnMoYTUgLSBiNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTUpLCBNYXRoLmFicyhiNSkpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0MmQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDJkLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogM3gzIE1hdHJpeFxyXG4gKiBAbW9kdWxlIG1hdDNcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcclxuICpcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg5KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNV0gPSAwO1xuICAgIG91dFs2XSA9IDA7XG4gICAgb3V0WzddID0gMDtcbiAgfVxuXG4gIG91dFswXSA9IDE7XG4gIG91dFs0XSA9IDE7XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29waWVzIHRoZSB1cHBlci1sZWZ0IDN4MyB2YWx1ZXMgaW50byB0aGUgZ2l2ZW4gbWF0My5cclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyAzeDMgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSAgIHRoZSBzb3VyY2UgNHg0IG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hdDQob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbNF07XG4gIG91dFs0XSA9IGFbNV07XG4gIG91dFs1XSA9IGFbNl07XG4gIG91dFs2XSA9IGFbOF07XG4gIG91dFs3XSA9IGFbOV07XG4gIG91dFs4XSA9IGFbMTBdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0MyBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQzfSBhIG5ldyAzeDMgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOSk7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDMgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hdDMgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAyIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDIgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEyIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDIgcG9zaXRpb24gKGluZGV4IDUpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjAgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggNilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMSBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA3KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIyIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDIgcG9zaXRpb24gKGluZGV4IDgpXHJcbiAqIEByZXR1cm5zIHttYXQzfSBBIG5ldyBtYXQzXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyhtMDAsIG0wMSwgbTAyLCBtMTAsIG0xMSwgbTEyLCBtMjAsIG0yMSwgbTIyKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg5KTtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0wMjtcbiAgb3V0WzNdID0gbTEwO1xuICBvdXRbNF0gPSBtMTE7XG4gIG91dFs1XSA9IG0xMjtcbiAgb3V0WzZdID0gbTIwO1xuICBvdXRbN10gPSBtMjE7XG4gIG91dFs4XSA9IG0yMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBtYXQzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDIgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMCBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTExIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDEgcG9zaXRpb24gKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTIgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggNSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMCBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA2KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIxIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDEgcG9zaXRpb24gKGluZGV4IDcpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjIgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggOClcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIG0wMCwgbTAxLCBtMDIsIG0xMCwgbTExLCBtMTIsIG0yMCwgbTIxLCBtMjIpIHtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0wMjtcbiAgb3V0WzNdID0gbTEwO1xuICBvdXRbNF0gPSBtMTE7XG4gIG91dFs1XSA9IG0xMjtcbiAgb3V0WzZdID0gbTIwO1xuICBvdXRbN10gPSBtMjE7XG4gIG91dFs4XSA9IG0yMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBtYXQzIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAxO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZShvdXQsIGEpIHtcbiAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZSBzb21lIHZhbHVlc1xuICBpZiAob3V0ID09PSBhKSB7XG4gICAgdmFyIGEwMSA9IGFbMV0sXG4gICAgICAgIGEwMiA9IGFbMl0sXG4gICAgICAgIGExMiA9IGFbNV07XG4gICAgb3V0WzFdID0gYVszXTtcbiAgICBvdXRbMl0gPSBhWzZdO1xuICAgIG91dFszXSA9IGEwMTtcbiAgICBvdXRbNV0gPSBhWzddO1xuICAgIG91dFs2XSA9IGEwMjtcbiAgICBvdXRbN10gPSBhMTI7XG4gIH0gZWxzZSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzNdO1xuICAgIG91dFsyXSA9IGFbNl07XG4gICAgb3V0WzNdID0gYVsxXTtcbiAgICBvdXRbNF0gPSBhWzRdO1xuICAgIG91dFs1XSA9IGFbN107XG4gICAgb3V0WzZdID0gYVsyXTtcbiAgICBvdXRbN10gPSBhWzVdO1xuICAgIG91dFs4XSA9IGFbOF07XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEludmVydHMgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdO1xuICB2YXIgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdO1xuICB2YXIgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdO1xuICB2YXIgYjAxID0gYTIyICogYTExIC0gYTEyICogYTIxO1xuICB2YXIgYjExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDtcbiAgdmFyIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHZhciBkZXQgPSBhMDAgKiBiMDEgKyBhMDEgKiBiMTEgKyBhMDIgKiBiMjE7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gYjAxICogZGV0O1xuICBvdXRbMV0gPSAoLWEyMiAqIGEwMSArIGEwMiAqIGEyMSkgKiBkZXQ7XG4gIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xuICBvdXRbM10gPSBiMTEgKiBkZXQ7XG4gIG91dFs0XSA9IChhMjIgKiBhMDAgLSBhMDIgKiBhMjApICogZGV0O1xuICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XG4gIG91dFs2XSA9IGIyMSAqIGRldDtcbiAgb3V0WzddID0gKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApICogZGV0O1xuICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGpvaW50KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdO1xuICB2YXIgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdO1xuICB2YXIgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdO1xuICBvdXRbMF0gPSBhMTEgKiBhMjIgLSBhMTIgKiBhMjE7XG4gIG91dFsxXSA9IGEwMiAqIGEyMSAtIGEwMSAqIGEyMjtcbiAgb3V0WzJdID0gYTAxICogYTEyIC0gYTAyICogYTExO1xuICBvdXRbM10gPSBhMTIgKiBhMjAgLSBhMTAgKiBhMjI7XG4gIG91dFs0XSA9IGEwMCAqIGEyMiAtIGEwMiAqIGEyMDtcbiAgb3V0WzVdID0gYTAyICogYTEwIC0gYTAwICogYTEyO1xuICBvdXRbNl0gPSBhMTAgKiBhMjEgLSBhMTEgKiBhMjA7XG4gIG91dFs3XSA9IGEwMSAqIGEyMCAtIGEwMCAqIGEyMTtcbiAgb3V0WzhdID0gYTAwICogYTExIC0gYTAxICogYTEwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluYW50KGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXTtcbiAgdmFyIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XTtcbiAgdmFyIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XTtcbiAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXTtcbiAgdmFyIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XTtcbiAgdmFyIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XTtcbiAgdmFyIGIwMCA9IGJbMF0sXG4gICAgICBiMDEgPSBiWzFdLFxuICAgICAgYjAyID0gYlsyXTtcbiAgdmFyIGIxMCA9IGJbM10sXG4gICAgICBiMTEgPSBiWzRdLFxuICAgICAgYjEyID0gYls1XTtcbiAgdmFyIGIyMCA9IGJbNl0sXG4gICAgICBiMjEgPSBiWzddLFxuICAgICAgYjIyID0gYls4XTtcbiAgb3V0WzBdID0gYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwO1xuICBvdXRbMV0gPSBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjE7XG4gIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcbiAgb3V0WzNdID0gYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwO1xuICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XG4gIG91dFs1XSA9IGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMjtcbiAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xuICBvdXRbN10gPSBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjE7XG4gIG91dFs4XSA9IGIyMCAqIGEwMiArIGIyMSAqIGExMiArIGIyMiAqIGEyMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2xhdGUgYSBtYXQzIGJ5IHRoZSBnaXZlbiB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB2ZWN0b3IgdG8gdHJhbnNsYXRlIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUob3V0LCBhLCB2KSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV0sXG4gICAgICBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF0sXG4gICAgICB4ID0gdlswXSxcbiAgICAgIHkgPSB2WzFdO1xuICBvdXRbMF0gPSBhMDA7XG4gIG91dFsxXSA9IGEwMTtcbiAgb3V0WzJdID0gYTAyO1xuICBvdXRbM10gPSBhMTA7XG4gIG91dFs0XSA9IGExMTtcbiAgb3V0WzVdID0gYTEyO1xuICBvdXRbNl0gPSB4ICogYTAwICsgeSAqIGExMCArIGEyMDtcbiAgb3V0WzddID0geCAqIGEwMSArIHkgKiBhMTEgKyBhMjE7XG4gIG91dFs4XSA9IHggKiBhMDIgKyB5ICogYTEyICsgYTIyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIHJhZCkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdLFxuICAgICAgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdLFxuICAgICAgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XG4gIG91dFsxXSA9IGMgKiBhMDEgKyBzICogYTExO1xuICBvdXRbMl0gPSBjICogYTAyICsgcyAqIGExMjtcbiAgb3V0WzNdID0gYyAqIGExMCAtIHMgKiBhMDA7XG4gIG91dFs0XSA9IGMgKiBhMTEgLSBzICogYTAxO1xuICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcbiAgb3V0WzZdID0gYTIwO1xuICBvdXRbN10gPSBhMjE7XG4gIG91dFs4XSA9IGEyMjtcbiAgcmV0dXJuIG91dDtcbn1cbjtcbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDMgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCB2KSB7XG4gIHZhciB4ID0gdlswXSxcbiAgICAgIHkgPSB2WzFdO1xuICBvdXRbMF0gPSB4ICogYVswXTtcbiAgb3V0WzFdID0geCAqIGFbMV07XG4gIG91dFsyXSA9IHggKiBhWzJdO1xuICBvdXRbM10gPSB5ICogYVszXTtcbiAgb3V0WzRdID0geSAqIGFbNF07XG4gIG91dFs1XSA9IHkgKiBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDMuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQzLnRyYW5zbGF0ZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjMn0gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21UcmFuc2xhdGlvbihvdXQsIHYpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMTtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gdlswXTtcbiAgb3V0WzddID0gdlsxXTtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBnaXZlbiBhbmdsZVxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDMuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQzLnJvdGF0ZShkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IHM7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IC1zO1xuICBvdXRbNF0gPSBjO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciBzY2FsaW5nXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0My5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDMuc2NhbGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB2WzFdO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcGllcyB0aGUgdmFsdWVzIGZyb20gYSBtYXQyZCBpbnRvIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY29weVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21NYXQyZChvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gYVsyXTtcbiAgb3V0WzRdID0gYVszXTtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gYVs0XTtcbiAgb3V0WzddID0gYVs1XTtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21RdWF0KG91dCwgcSkge1xuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHl4ID0geSAqIHgyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB6eCA9IHogKiB4MjtcbiAgdmFyIHp5ID0geiAqIHkyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICBvdXRbM10gPSB5eCAtIHd6O1xuICBvdXRbNl0gPSB6eCArIHd5O1xuICBvdXRbMV0gPSB5eCArIHd6O1xuICBvdXRbNF0gPSAxIC0geHggLSB6ejtcbiAgb3V0WzddID0genkgLSB3eDtcbiAgb3V0WzJdID0genggLSB3eTtcbiAgb3V0WzVdID0genkgKyB3eDtcbiAgb3V0WzhdID0gMSAtIHh4IC0geXk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuKiBDYWxjdWxhdGVzIGEgM3gzIG5vcm1hbCBtYXRyaXggKHRyYW5zcG9zZSBpbnZlcnNlKSBmcm9tIHRoZSA0eDQgbWF0cml4XHJcbipcclxuKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiogQHBhcmFtIHttYXQ0fSBhIE1hdDQgdG8gZGVyaXZlIHRoZSBub3JtYWwgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbEZyb21NYXQ0KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTtcbiAgdmFyIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcbiAgdmFyIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcbiAgdmFyIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcbiAgdmFyIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcbiAgdmFyIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcbiAgdmFyIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcbiAgdmFyIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcbiAgdmFyIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcbiAgdmFyIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcbiAgdmFyIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcbiAgdmFyIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcbiAgdmFyIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHZhciBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFsxXSA9IChhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcpICogZGV0O1xuICBvdXRbMl0gPSAoYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2KSAqIGRldDtcbiAgb3V0WzNdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFs0XSA9IChhMDAgKiBiMTEgLSBhMDIgKiBiMDggKyBhMDMgKiBiMDcpICogZGV0O1xuICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcbiAgb3V0WzZdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XG4gIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xuICBvdXRbOF0gPSAoYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwKSAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSAyRCBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggV2lkdGggb2YgeW91ciBnbCBjb250ZXh0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgSGVpZ2h0IG9mIGdsIGNvbnRleHRcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2plY3Rpb24ob3V0LCB3aWR0aCwgaGVpZ2h0KSB7XG4gIG91dFswXSA9IDIgLyB3aWR0aDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gLTIgLyBoZWlnaHQ7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IC0xO1xuICBvdXRbN10gPSAxO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdtYXQzKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcsICcgKyBhWzZdICsgJywgJyArIGFbN10gKyAnLCAnICsgYVs4XSArICcpJztcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9iKGEpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSwgYVs3XSwgYVs4XSk7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV07XG4gIG91dFs2XSA9IGFbNl0gKyBiWzZdO1xuICBvdXRbN10gPSBhWzddICsgYls3XTtcbiAgb3V0WzhdID0gYVs4XSArIGJbOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgb3V0WzRdID0gYVs0XSAtIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gLSBiWzVdO1xuICBvdXRbNl0gPSBhWzZdIC0gYls2XTtcbiAgb3V0WzddID0gYVs3XSAtIGJbN107XG4gIG91dFs4XSA9IGFbOF0gLSBiWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGx5IGVhY2ggZWxlbWVudCBvZiB0aGUgbWF0cml4IGJ5IGEgc2NhbGFyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIG1hdHJpeCdzIGVsZW1lbnRzIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhcihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIG91dFs0XSA9IGFbNF0gKiBiO1xuICBvdXRbNV0gPSBhWzVdICogYjtcbiAgb3V0WzZdID0gYVs2XSAqIGI7XG4gIG91dFs3XSA9IGFbN10gKiBiO1xuICBvdXRbOF0gPSBhWzhdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQzJ3MgYWZ0ZXIgbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYidzIGVsZW1lbnRzIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF0gKiBzY2FsZTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV0gKiBzY2FsZTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl0gKiBzY2FsZTtcbiAgb3V0WzddID0gYVs3XSArIGJbN10gKiBzY2FsZTtcbiAgb3V0WzhdID0gYVs4XSArIGJbOF0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDN9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdICYmIGFbNF0gPT09IGJbNF0gJiYgYVs1XSA9PT0gYls1XSAmJiBhWzZdID09PSBiWzZdICYmIGFbN10gPT09IGJbN10gJiYgYVs4XSA9PT0gYls4XTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDN9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdLFxuICAgICAgYTYgPSBhWzZdLFxuICAgICAgYTcgPSBhWzddLFxuICAgICAgYTggPSBhWzhdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdLFxuICAgICAgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdLFxuICAgICAgYjYgPSBiWzZdLFxuICAgICAgYjcgPSBiWzddLFxuICAgICAgYjggPSBiWzhdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpICYmIE1hdGguYWJzKGE0IC0gYjQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE0KSwgTWF0aC5hYnMoYjQpKSAmJiBNYXRoLmFicyhhNSAtIGI1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNSksIE1hdGguYWJzKGI1KSkgJiYgTWF0aC5hYnMoYTYgLSBiNikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTYpLCBNYXRoLmFicyhiNikpICYmIE1hdGguYWJzKGE3IC0gYjcpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE3KSwgTWF0aC5hYnMoYjcpKSAmJiBNYXRoLmFicyhhOCAtIGI4KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhOCksIE1hdGguYWJzKGI4KSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQzLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogNHg0IE1hdHJpeDxicj5Gb3JtYXQ6IGNvbHVtbi1tYWpvciwgd2hlbiB0eXBlZCBvdXQgaXQgbG9va3MgbGlrZSByb3ctbWFqb3I8YnI+VGhlIG1hdHJpY2VzIGFyZSBiZWluZyBwb3N0IG11bHRpcGxpZWQuXHJcbiAqIEBtb2R1bGUgbWF0NFxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0NFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDE2KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs2XSA9IDA7XG4gICAgb3V0WzddID0gMDtcbiAgICBvdXRbOF0gPSAwO1xuICAgIG91dFs5XSA9IDA7XG4gICAgb3V0WzExXSA9IDA7XG4gICAgb3V0WzEyXSA9IDA7XG4gICAgb3V0WzEzXSA9IDA7XG4gICAgb3V0WzE0XSA9IDA7XG4gIH1cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQ0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgxNik7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIG91dFs5XSA9IGFbOV07XG4gIG91dFsxMF0gPSBhWzEwXTtcbiAgb3V0WzExXSA9IGFbMTFdO1xuICBvdXRbMTJdID0gYVsxMl07XG4gIG91dFsxM10gPSBhWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdO1xuICBvdXRbMTVdID0gYVsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIG91dFs5XSA9IGFbOV07XG4gIG91dFsxMF0gPSBhWzEwXTtcbiAgb3V0WzExXSA9IGFbMTFdO1xuICBvdXRbMTJdID0gYVsxMl07XG4gIG91dFsxM10gPSBhWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdO1xuICBvdXRbMTVdID0gYVsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hdDQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAyIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDIgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDMgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMCBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTExIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDEgcG9zaXRpb24gKGluZGV4IDUpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTIgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggNilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMyBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAzIHBvc2l0aW9uIChpbmRleCA3KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIwIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDAgcG9zaXRpb24gKGluZGV4IDgpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjEgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggOSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMiBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAxMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMyBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAxMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMCBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAxMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMSBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMiBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAxNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMyBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAxNSlcclxuICogQHJldHVybnMge21hdDR9IEEgbmV3IG1hdDRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKG0wMCwgbTAxLCBtMDIsIG0wMywgbTEwLCBtMTEsIG0xMiwgbTEzLCBtMjAsIG0yMSwgbTIyLCBtMjMsIG0zMCwgbTMxLCBtMzIsIG0zMykge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMTYpO1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTAyO1xuICBvdXRbM10gPSBtMDM7XG4gIG91dFs0XSA9IG0xMDtcbiAgb3V0WzVdID0gbTExO1xuICBvdXRbNl0gPSBtMTI7XG4gIG91dFs3XSA9IG0xMztcbiAgb3V0WzhdID0gbTIwO1xuICBvdXRbOV0gPSBtMjE7XG4gIG91dFsxMF0gPSBtMjI7XG4gIG91dFsxMV0gPSBtMjM7XG4gIG91dFsxMl0gPSBtMzA7XG4gIG91dFsxM10gPSBtMzE7XG4gIG91dFsxNF0gPSBtMzI7XG4gIG91dFsxNV0gPSBtMzM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgbWF0NCB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAyIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDIgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDMgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMCBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTExIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDEgcG9zaXRpb24gKGluZGV4IDUpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTIgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggNilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMyBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAzIHBvc2l0aW9uIChpbmRleCA3KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIwIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDAgcG9zaXRpb24gKGluZGV4IDgpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjEgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggOSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMiBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAxMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMyBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAxMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMCBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAxMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMSBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMiBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAxNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMyBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAxNSlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIG0wMCwgbTAxLCBtMDIsIG0wMywgbTEwLCBtMTEsIG0xMiwgbTEzLCBtMjAsIG0yMSwgbTIyLCBtMjMsIG0zMCwgbTMxLCBtMzIsIG0zMykge1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTAyO1xuICBvdXRbM10gPSBtMDM7XG4gIG91dFs0XSA9IG0xMDtcbiAgb3V0WzVdID0gbTExO1xuICBvdXRbNl0gPSBtMTI7XG4gIG91dFs3XSA9IG0xMztcbiAgb3V0WzhdID0gbTIwO1xuICBvdXRbOV0gPSBtMjE7XG4gIG91dFsxMF0gPSBtMjI7XG4gIG91dFsxMV0gPSBtMjM7XG4gIG91dFsxMl0gPSBtMzA7XG4gIG91dFsxM10gPSBtMzE7XG4gIG91dFsxNF0gPSBtMzI7XG4gIG91dFsxNV0gPSBtMzM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgbWF0NCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2Uob3V0LCBhKSB7XG4gIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGUgc29tZSB2YWx1ZXNcbiAgaWYgKG91dCA9PT0gYSkge1xuICAgIHZhciBhMDEgPSBhWzFdLFxuICAgICAgICBhMDIgPSBhWzJdLFxuICAgICAgICBhMDMgPSBhWzNdO1xuICAgIHZhciBhMTIgPSBhWzZdLFxuICAgICAgICBhMTMgPSBhWzddO1xuICAgIHZhciBhMjMgPSBhWzExXTtcbiAgICBvdXRbMV0gPSBhWzRdO1xuICAgIG91dFsyXSA9IGFbOF07XG4gICAgb3V0WzNdID0gYVsxMl07XG4gICAgb3V0WzRdID0gYTAxO1xuICAgIG91dFs2XSA9IGFbOV07XG4gICAgb3V0WzddID0gYVsxM107XG4gICAgb3V0WzhdID0gYTAyO1xuICAgIG91dFs5XSA9IGExMjtcbiAgICBvdXRbMTFdID0gYVsxNF07XG4gICAgb3V0WzEyXSA9IGEwMztcbiAgICBvdXRbMTNdID0gYTEzO1xuICAgIG91dFsxNF0gPSBhMjM7XG4gIH0gZWxzZSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzRdO1xuICAgIG91dFsyXSA9IGFbOF07XG4gICAgb3V0WzNdID0gYVsxMl07XG4gICAgb3V0WzRdID0gYVsxXTtcbiAgICBvdXRbNV0gPSBhWzVdO1xuICAgIG91dFs2XSA9IGFbOV07XG4gICAgb3V0WzddID0gYVsxM107XG4gICAgb3V0WzhdID0gYVsyXTtcbiAgICBvdXRbOV0gPSBhWzZdO1xuICAgIG91dFsxMF0gPSBhWzEwXTtcbiAgICBvdXRbMTFdID0gYVsxNF07XG4gICAgb3V0WzEyXSA9IGFbM107XG4gICAgb3V0WzEzXSA9IGFbN107XG4gICAgb3V0WzE0XSA9IGFbMTFdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdO1xuICB2YXIgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xuICB2YXIgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xuICB2YXIgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xuICB2YXIgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xuICB2YXIgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xuICB2YXIgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xuICB2YXIgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xuICB2YXIgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xuICB2YXIgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xuICB2YXIgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xuICB2YXIgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xuICB2YXIgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyOyAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG5cbiAgdmFyIGRldCA9IGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcblxuICBpZiAoIWRldCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuICBvdXRbMF0gPSAoYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5KSAqIGRldDtcbiAgb3V0WzFdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFsyXSA9IChhMzEgKiBiMDUgLSBhMzIgKiBiMDQgKyBhMzMgKiBiMDMpICogZGV0O1xuICBvdXRbM10gPSAoYTIyICogYjA0IC0gYTIxICogYjA1IC0gYTIzICogYjAzKSAqIGRldDtcbiAgb3V0WzRdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XG4gIG91dFs1XSA9IChhMDAgKiBiMTEgLSBhMDIgKiBiMDggKyBhMDMgKiBiMDcpICogZGV0O1xuICBvdXRbNl0gPSAoYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxKSAqIGRldDtcbiAgb3V0WzddID0gKGEyMCAqIGIwNSAtIGEyMiAqIGIwMiArIGEyMyAqIGIwMSkgKiBkZXQ7XG4gIG91dFs4XSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xuICBvdXRbOV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcbiAgb3V0WzEwXSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xuICBvdXRbMTFdID0gKGEyMSAqIGIwMiAtIGEyMCAqIGIwNCAtIGEyMyAqIGIwMCkgKiBkZXQ7XG4gIG91dFsxMl0gPSAoYTExICogYjA3IC0gYTEwICogYjA5IC0gYTEyICogYjA2KSAqIGRldDtcbiAgb3V0WzEzXSA9IChhMDAgKiBiMDkgLSBhMDEgKiBiMDcgKyBhMDIgKiBiMDYpICogZGV0O1xuICBvdXRbMTRdID0gKGEzMSAqIGIwMSAtIGEzMCAqIGIwMyAtIGEzMiAqIGIwMCkgKiBkZXQ7XG4gIG91dFsxNV0gPSAoYTIwICogYjAzIC0gYTIxICogYjAxICsgYTIyICogYjAwKSAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGpvaW50KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTtcbiAgb3V0WzBdID0gYTExICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpO1xuICBvdXRbMV0gPSAtKGEwMSAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIxICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSk7XG4gIG91dFsyXSA9IGEwMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTExICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKTtcbiAgb3V0WzNdID0gLShhMDEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIxICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xuICBvdXRbNF0gPSAtKGExMCAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIwICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgKyBhMzAgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSk7XG4gIG91dFs1XSA9IGEwMCAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKTtcbiAgb3V0WzZdID0gLShhMDAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSAtIGExMCAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xuICBvdXRbN10gPSBhMDAgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMik7XG4gIG91dFs4XSA9IGExMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKTtcbiAgb3V0WzldID0gLShhMDAgKiAoYTIxICogYTMzIC0gYTIzICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkpO1xuICBvdXRbMTBdID0gYTAwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpO1xuICBvdXRbMTFdID0gLShhMDAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKSAtIGExMCAqIChhMDEgKiBhMjMgLSBhMDMgKiBhMjEpICsgYTIwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSkpO1xuICBvdXRbMTJdID0gLShhMTAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpICsgYTMwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkpO1xuICBvdXRbMTNdID0gYTAwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpO1xuICBvdXRbMTRdID0gLShhMDAgKiAoYTExICogYTMyIC0gYTEyICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMiAtIGEwMiAqIGExMSkpO1xuICBvdXRbMTVdID0gYTAwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIyIC0gYTAyICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluYW50KGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIHZhciBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XG4gIHZhciBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XG4gIHZhciBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XG4gIHZhciBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XG4gIHZhciBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XG4gIHZhciBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XG4gIHZhciBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzA7XG4gIHZhciBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XG4gIHZhciBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XG4gIHZhciBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XG4gIHZhciBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzE7XG4gIHZhciBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICByZXR1cm4gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07IC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxuXG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM107XG4gIG91dFswXSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICBvdXRbMV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgb3V0WzJdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gIG91dFszXSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuICBiMCA9IGJbNF07XG4gIGIxID0gYls1XTtcbiAgYjIgPSBiWzZdO1xuICBiMyA9IGJbN107XG4gIG91dFs0XSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICBvdXRbNV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgb3V0WzZdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gIG91dFs3XSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuICBiMCA9IGJbOF07XG4gIGIxID0gYls5XTtcbiAgYjIgPSBiWzEwXTtcbiAgYjMgPSBiWzExXTtcbiAgb3V0WzhdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFs5XSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbMTBdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gIG91dFsxMV0gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgYjAgPSBiWzEyXTtcbiAgYjEgPSBiWzEzXTtcbiAgYjIgPSBiWzE0XTtcbiAgYjMgPSBiWzE1XTtcbiAgb3V0WzEyXSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICBvdXRbMTNdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFsxNF0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzE1XSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDQgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShvdXQsIGEsIHYpIHtcbiAgdmFyIHggPSB2WzBdLFxuICAgICAgeSA9IHZbMV0sXG4gICAgICB6ID0gdlsyXTtcbiAgdmFyIGEwMCwgYTAxLCBhMDIsIGEwMztcbiAgdmFyIGExMCwgYTExLCBhMTIsIGExMztcbiAgdmFyIGEyMCwgYTIxLCBhMjIsIGEyMztcblxuICBpZiAoYSA9PT0gb3V0KSB7XG4gICAgb3V0WzEyXSA9IGFbMF0gKiB4ICsgYVs0XSAqIHkgKyBhWzhdICogeiArIGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzFdICogeCArIGFbNV0gKiB5ICsgYVs5XSAqIHogKyBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzNdICogeCArIGFbN10gKiB5ICsgYVsxMV0gKiB6ICsgYVsxNV07XG4gIH0gZWxzZSB7XG4gICAgYTAwID0gYVswXTtcbiAgICBhMDEgPSBhWzFdO1xuICAgIGEwMiA9IGFbMl07XG4gICAgYTAzID0gYVszXTtcbiAgICBhMTAgPSBhWzRdO1xuICAgIGExMSA9IGFbNV07XG4gICAgYTEyID0gYVs2XTtcbiAgICBhMTMgPSBhWzddO1xuICAgIGEyMCA9IGFbOF07XG4gICAgYTIxID0gYVs5XTtcbiAgICBhMjIgPSBhWzEwXTtcbiAgICBhMjMgPSBhWzExXTtcbiAgICBvdXRbMF0gPSBhMDA7XG4gICAgb3V0WzFdID0gYTAxO1xuICAgIG91dFsyXSA9IGEwMjtcbiAgICBvdXRbM10gPSBhMDM7XG4gICAgb3V0WzRdID0gYTEwO1xuICAgIG91dFs1XSA9IGExMTtcbiAgICBvdXRbNl0gPSBhMTI7XG4gICAgb3V0WzddID0gYTEzO1xuICAgIG91dFs4XSA9IGEyMDtcbiAgICBvdXRbOV0gPSBhMjE7XG4gICAgb3V0WzEwXSA9IGEyMjtcbiAgICBvdXRbMTFdID0gYTIzO1xuICAgIG91dFsxMl0gPSBhMDAgKiB4ICsgYTEwICogeSArIGEyMCAqIHogKyBhWzEyXTtcbiAgICBvdXRbMTNdID0gYTAxICogeCArIGExMSAqIHkgKyBhMjEgKiB6ICsgYVsxM107XG4gICAgb3V0WzE0XSA9IGEwMiAqIHggKyBhMTIgKiB5ICsgYTIyICogeiArIGFbMTRdO1xuICAgIG91dFsxNV0gPSBhMDMgKiB4ICsgYTEzICogeSArIGEyMyAqIHogKyBhWzE1XTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQ0IGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMzIG5vdCB1c2luZyB2ZWN0b3JpemF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7dmVjM30gdiB0aGUgdmVjMyB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCB2KSB7XG4gIHZhciB4ID0gdlswXSxcbiAgICAgIHkgPSB2WzFdLFxuICAgICAgeiA9IHZbMl07XG4gIG91dFswXSA9IGFbMF0gKiB4O1xuICBvdXRbMV0gPSBhWzFdICogeDtcbiAgb3V0WzJdID0gYVsyXSAqIHg7XG4gIG91dFszXSA9IGFbM10gKiB4O1xuICBvdXRbNF0gPSBhWzRdICogeTtcbiAgb3V0WzVdID0gYVs1XSAqIHk7XG4gIG91dFs2XSA9IGFbNl0gKiB5O1xuICBvdXRbN10gPSBhWzddICogeTtcbiAgb3V0WzhdID0gYVs4XSAqIHo7XG4gIG91dFs5XSA9IGFbOV0gKiB6O1xuICBvdXRbMTBdID0gYVsxMF0gKiB6O1xuICBvdXRbMTFdID0gYVsxMV0gKiB6O1xuICBvdXRbMTJdID0gYVsxMl07XG4gIG91dFsxM10gPSBhWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdO1xuICBvdXRbMTVdID0gYVsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdDQgYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgZ2l2ZW4gYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHBhcmFtIHt2ZWMzfSBheGlzIHRoZSBheGlzIHRvIHJvdGF0ZSBhcm91bmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIHJhZCwgYXhpcykge1xuICB2YXIgeCA9IGF4aXNbMF0sXG4gICAgICB5ID0gYXhpc1sxXSxcbiAgICAgIHogPSBheGlzWzJdO1xuICB2YXIgbGVuID0gTWF0aC5oeXBvdCh4LCB5LCB6KTtcbiAgdmFyIHMsIGMsIHQ7XG4gIHZhciBhMDAsIGEwMSwgYTAyLCBhMDM7XG4gIHZhciBhMTAsIGExMSwgYTEyLCBhMTM7XG4gIHZhciBhMjAsIGEyMSwgYTIyLCBhMjM7XG4gIHZhciBiMDAsIGIwMSwgYjAyO1xuICB2YXIgYjEwLCBiMTEsIGIxMjtcbiAgdmFyIGIyMCwgYjIxLCBiMjI7XG5cbiAgaWYgKGxlbiA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxlbiA9IDEgLyBsZW47XG4gIHggKj0gbGVuO1xuICB5ICo9IGxlbjtcbiAgeiAqPSBsZW47XG4gIHMgPSBNYXRoLnNpbihyYWQpO1xuICBjID0gTWF0aC5jb3MocmFkKTtcbiAgdCA9IDEgLSBjO1xuICBhMDAgPSBhWzBdO1xuICBhMDEgPSBhWzFdO1xuICBhMDIgPSBhWzJdO1xuICBhMDMgPSBhWzNdO1xuICBhMTAgPSBhWzRdO1xuICBhMTEgPSBhWzVdO1xuICBhMTIgPSBhWzZdO1xuICBhMTMgPSBhWzddO1xuICBhMjAgPSBhWzhdO1xuICBhMjEgPSBhWzldO1xuICBhMjIgPSBhWzEwXTtcbiAgYTIzID0gYVsxMV07IC8vIENvbnN0cnVjdCB0aGUgZWxlbWVudHMgb2YgdGhlIHJvdGF0aW9uIG1hdHJpeFxuXG4gIGIwMCA9IHggKiB4ICogdCArIGM7XG4gIGIwMSA9IHkgKiB4ICogdCArIHogKiBzO1xuICBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcbiAgYjEwID0geCAqIHkgKiB0IC0geiAqIHM7XG4gIGIxMSA9IHkgKiB5ICogdCArIGM7XG4gIGIxMiA9IHogKiB5ICogdCArIHggKiBzO1xuICBiMjAgPSB4ICogeiAqIHQgKyB5ICogcztcbiAgYjIxID0geSAqIHogKiB0IC0geCAqIHM7XG4gIGIyMiA9IHogKiB6ICogdCArIGM7IC8vIFBlcmZvcm0gcm90YXRpb24tc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0gYTAwICogYjAwICsgYTEwICogYjAxICsgYTIwICogYjAyO1xuICBvdXRbMV0gPSBhMDEgKiBiMDAgKyBhMTEgKiBiMDEgKyBhMjEgKiBiMDI7XG4gIG91dFsyXSA9IGEwMiAqIGIwMCArIGExMiAqIGIwMSArIGEyMiAqIGIwMjtcbiAgb3V0WzNdID0gYTAzICogYjAwICsgYTEzICogYjAxICsgYTIzICogYjAyO1xuICBvdXRbNF0gPSBhMDAgKiBiMTAgKyBhMTAgKiBiMTEgKyBhMjAgKiBiMTI7XG4gIG91dFs1XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcbiAgb3V0WzZdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xuICBvdXRbN10gPSBhMDMgKiBiMTAgKyBhMTMgKiBiMTEgKyBhMjMgKiBiMTI7XG4gIG91dFs4XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcbiAgb3V0WzldID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xuICBvdXRbMTBdID0gYTAyICogYjIwICsgYTEyICogYjIxICsgYTIyICogYjIyO1xuICBvdXRbMTFdID0gYTAzICogYjIwICsgYTEzICogYjIxICsgYTIzICogYjIyO1xuXG4gIGlmIChhICE9PSBvdXQpIHtcbiAgICAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVYKG91dCwgYSwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYTEwID0gYVs0XTtcbiAgdmFyIGExMSA9IGFbNV07XG4gIHZhciBhMTIgPSBhWzZdO1xuICB2YXIgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF07XG4gIHZhciBhMjEgPSBhWzldO1xuICB2YXIgYTIyID0gYVsxMF07XG4gIHZhciBhMjMgPSBhWzExXTtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIG91dFszXSA9IGFbM107XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuXG4gIG91dFs0XSA9IGExMCAqIGMgKyBhMjAgKiBzO1xuICBvdXRbNV0gPSBhMTEgKiBjICsgYTIxICogcztcbiAgb3V0WzZdID0gYTEyICogYyArIGEyMiAqIHM7XG4gIG91dFs3XSA9IGExMyAqIGMgKyBhMjMgKiBzO1xuICBvdXRbOF0gPSBhMjAgKiBjIC0gYTEwICogcztcbiAgb3V0WzldID0gYTIxICogYyAtIGExMSAqIHM7XG4gIG91dFsxMF0gPSBhMjIgKiBjIC0gYTEyICogcztcbiAgb3V0WzExXSA9IGEyMyAqIGMgLSBhMTMgKiBzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWSBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWShvdXQsIGEsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGEwMCA9IGFbMF07XG4gIHZhciBhMDEgPSBhWzFdO1xuICB2YXIgYTAyID0gYVsyXTtcbiAgdmFyIGEwMyA9IGFbM107XG4gIHZhciBhMjAgPSBhWzhdO1xuICB2YXIgYTIxID0gYVs5XTtcbiAgdmFyIGEyMiA9IGFbMTBdO1xuICB2YXIgYTIzID0gYVsxMV07XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcbiAgICBvdXRbNF0gPSBhWzRdO1xuICAgIG91dFs1XSA9IGFbNV07XG4gICAgb3V0WzZdID0gYVs2XTtcbiAgICBvdXRbN10gPSBhWzddO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfSAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cblxuICBvdXRbMF0gPSBhMDAgKiBjIC0gYTIwICogcztcbiAgb3V0WzFdID0gYTAxICogYyAtIGEyMSAqIHM7XG4gIG91dFsyXSA9IGEwMiAqIGMgLSBhMjIgKiBzO1xuICBvdXRbM10gPSBhMDMgKiBjIC0gYTIzICogcztcbiAgb3V0WzhdID0gYTAwICogcyArIGEyMCAqIGM7XG4gIG91dFs5XSA9IGEwMSAqIHMgKyBhMjEgKiBjO1xuICBvdXRbMTBdID0gYTAyICogcyArIGEyMiAqIGM7XG4gIG91dFsxMV0gPSBhMDMgKiBzICsgYTIzICogYztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVoob3V0LCBhLCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIHZhciBhMDAgPSBhWzBdO1xuICB2YXIgYTAxID0gYVsxXTtcbiAgdmFyIGEwMiA9IGFbMl07XG4gIHZhciBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XTtcbiAgdmFyIGExMSA9IGFbNV07XG4gIHZhciBhMTIgPSBhWzZdO1xuICB2YXIgYTEzID0gYVs3XTtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcbiAgICBvdXRbOF0gPSBhWzhdO1xuICAgIG91dFs5XSA9IGFbOV07XG4gICAgb3V0WzEwXSA9IGFbMTBdO1xuICAgIG91dFsxMV0gPSBhWzExXTtcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH0gLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG5cbiAgb3V0WzBdID0gYTAwICogYyArIGExMCAqIHM7XG4gIG91dFsxXSA9IGEwMSAqIGMgKyBhMTEgKiBzO1xuICBvdXRbMl0gPSBhMDIgKiBjICsgYTEyICogcztcbiAgb3V0WzNdID0gYTAzICogYyArIGExMyAqIHM7XG4gIG91dFs0XSA9IGExMCAqIGMgLSBhMDAgKiBzO1xuICBvdXRbNV0gPSBhMTEgKiBjIC0gYTAxICogcztcbiAgb3V0WzZdID0gYTEyICogYyAtIGEwMiAqIHM7XG4gIG91dFs3XSA9IGExMyAqIGMgLSBhMDMgKiBzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21UcmFuc2xhdGlvbihvdXQsIHYpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3Igc2NhbGluZ1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnNjYWxlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMzfSB2IFNjYWxpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU2NhbGluZyhvdXQsIHYpIHtcbiAgb3V0WzBdID0gdlswXTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gdlsxXTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IHZbMl07XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBnaXZlbiBhbmdsZSBhcm91bmQgYSBnaXZlbiBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlKGRlc3QsIGRlc3QsIHJhZCwgYXhpcyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHBhcmFtIHt2ZWMzfSBheGlzIHRoZSBheGlzIHRvIHJvdGF0ZSBhcm91bmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvbihvdXQsIHJhZCwgYXhpcykge1xuICB2YXIgeCA9IGF4aXNbMF0sXG4gICAgICB5ID0gYXhpc1sxXSxcbiAgICAgIHogPSBheGlzWzJdO1xuICB2YXIgbGVuID0gTWF0aC5oeXBvdCh4LCB5LCB6KTtcbiAgdmFyIHMsIGMsIHQ7XG5cbiAgaWYgKGxlbiA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxlbiA9IDEgLyBsZW47XG4gIHggKj0gbGVuO1xuICB5ICo9IGxlbjtcbiAgeiAqPSBsZW47XG4gIHMgPSBNYXRoLnNpbihyYWQpO1xuICBjID0gTWF0aC5jb3MocmFkKTtcbiAgdCA9IDEgLSBjOyAvLyBQZXJmb3JtIHJvdGF0aW9uLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IHggKiB4ICogdCArIGM7XG4gIG91dFsxXSA9IHkgKiB4ICogdCArIHogKiBzO1xuICBvdXRbMl0gPSB6ICogeCAqIHQgLSB5ICogcztcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geCAqIHkgKiB0IC0geiAqIHM7XG4gIG91dFs1XSA9IHkgKiB5ICogdCArIGM7XG4gIG91dFs2XSA9IHogKiB5ICogdCArIHggKiBzO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB4ICogeiAqIHQgKyB5ICogcztcbiAgb3V0WzldID0geSAqIHogKiB0IC0geCAqIHM7XG4gIG91dFsxMF0gPSB6ICogeiAqIHQgKyBjO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFggYXhpc1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnJvdGF0ZVgoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVhSb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTsgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IGM7XG4gIG91dFs2XSA9IHM7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IC1zO1xuICBvdXRbMTBdID0gYztcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBZIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGVZKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21ZUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAtcztcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gcztcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IGM7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWiBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlWihkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tWlJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpOyAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gcztcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gLXM7XG4gIG91dFs1XSA9IGM7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAxO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIHZlYyk7XHJcbiAqICAgICBsZXQgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIHEsIHYpIHtcbiAgLy8gUXVhdGVybmlvbiBtYXRoXG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeHkgPSB4ICogeTI7XG4gIHZhciB4eiA9IHggKiB6MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgeXogPSB5ICogejI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgb3V0WzBdID0gMSAtICh5eSArIHp6KTtcbiAgb3V0WzFdID0geHkgKyB3ejtcbiAgb3V0WzJdID0geHogLSB3eTtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geHkgLSB3ejtcbiAgb3V0WzVdID0gMSAtICh4eCArIHp6KTtcbiAgb3V0WzZdID0geXogKyB3eDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0geHogKyB3eTtcbiAgb3V0WzldID0geXogLSB3eDtcbiAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgZnJvbSBhIGR1YWwgcXVhdC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgTWF0cml4XHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVF1YXQyKG91dCwgYSkge1xuICB2YXIgdHJhbnNsYXRpb24gPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgdmFyIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXSxcbiAgICAgIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XTtcbiAgdmFyIG1hZ25pdHVkZSA9IGJ4ICogYnggKyBieSAqIGJ5ICsgYnogKiBieiArIGJ3ICogYnc7IC8vT25seSBzY2FsZSBpZiBpdCBtYWtlcyBzZW5zZVxuXG4gIGlmIChtYWduaXR1ZGUgPiAwKSB7XG4gICAgdHJhbnNsYXRpb25bMF0gPSAoYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSkgKiAyIC8gbWFnbml0dWRlO1xuICAgIHRyYW5zbGF0aW9uWzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMiAvIG1hZ25pdHVkZTtcbiAgICB0cmFuc2xhdGlvblsyXSA9IChheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4KSAqIDIgLyBtYWduaXR1ZGU7XG4gIH0gZWxzZSB7XG4gICAgdHJhbnNsYXRpb25bMF0gPSAoYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSkgKiAyO1xuICAgIHRyYW5zbGF0aW9uWzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMjtcbiAgICB0cmFuc2xhdGlvblsyXSA9IChheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4KSAqIDI7XG4gIH1cblxuICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIGEsIHRyYW5zbGF0aW9uKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3IgY29tcG9uZW50IG9mIGEgdHJhbnNmb3JtYXRpb25cclxuICogIG1hdHJpeC4gSWYgYSBtYXRyaXggaXMgYnVpbHQgd2l0aCBmcm9tUm90YXRpb25UcmFuc2xhdGlvbixcclxuICogIHRoZSByZXR1cm5lZCB2ZWN0b3Igd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgdHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqICBvcmlnaW5hbGx5IHN1cHBsaWVkLlxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXQgVmVjdG9yIHRvIHJlY2VpdmUgdHJhbnNsYXRpb24gY29tcG9uZW50XHJcbiAqIEBwYXJhbSAge21hdDR9IG1hdCBNYXRyaXggdG8gYmUgZGVjb21wb3NlZCAoaW5wdXQpXHJcbiAqIEByZXR1cm4ge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9uKG91dCwgbWF0KSB7XG4gIG91dFswXSA9IG1hdFsxMl07XG4gIG91dFsxXSA9IG1hdFsxM107XG4gIG91dFsyXSA9IG1hdFsxNF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgc2NhbGluZyBmYWN0b3IgY29tcG9uZW50IG9mIGEgdHJhbnNmb3JtYXRpb25cclxuICogIG1hdHJpeC4gSWYgYSBtYXRyaXggaXMgYnVpbHQgd2l0aCBmcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlXHJcbiAqICB3aXRoIGEgbm9ybWFsaXplZCBRdWF0ZXJuaW9uIHBhcmFtdGVyLCB0aGUgcmV0dXJuZWQgdmVjdG9yIHdpbGwgYmVcclxuICogIHRoZSBzYW1lIGFzIHRoZSBzY2FsaW5nIHZlY3RvclxyXG4gKiAgb3JpZ2luYWxseSBzdXBwbGllZC5cclxuICogQHBhcmFtICB7dmVjM30gb3V0IFZlY3RvciB0byByZWNlaXZlIHNjYWxpbmcgZmFjdG9yIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0gIHttYXQ0fSBtYXQgTWF0cml4IHRvIGJlIGRlY29tcG9zZWQgKGlucHV0KVxyXG4gKiBAcmV0dXJuIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsaW5nKG91dCwgbWF0KSB7XG4gIHZhciBtMTEgPSBtYXRbMF07XG4gIHZhciBtMTIgPSBtYXRbMV07XG4gIHZhciBtMTMgPSBtYXRbMl07XG4gIHZhciBtMjEgPSBtYXRbNF07XG4gIHZhciBtMjIgPSBtYXRbNV07XG4gIHZhciBtMjMgPSBtYXRbNl07XG4gIHZhciBtMzEgPSBtYXRbOF07XG4gIHZhciBtMzIgPSBtYXRbOV07XG4gIHZhciBtMzMgPSBtYXRbMTBdO1xuICBvdXRbMF0gPSBNYXRoLmh5cG90KG0xMSwgbTEyLCBtMTMpO1xuICBvdXRbMV0gPSBNYXRoLmh5cG90KG0yMSwgbTIyLCBtMjMpO1xuICBvdXRbMl0gPSBNYXRoLmh5cG90KG0zMSwgbTMyLCBtMzMpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBxdWF0ZXJuaW9uIHJlcHJlc2VudGluZyB0aGUgcm90YXRpb25hbCBjb21wb25lbnRcclxuICogIG9mIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBJZiBhIG1hdHJpeCBpcyBidWlsdCB3aXRoXHJcbiAqICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbiwgdGhlIHJldHVybmVkIHF1YXRlcm5pb24gd2lsbCBiZSB0aGVcclxuICogIHNhbWUgYXMgdGhlIHF1YXRlcm5pb24gb3JpZ2luYWxseSBzdXBwbGllZC5cclxuICogQHBhcmFtIHtxdWF0fSBvdXQgUXVhdGVybmlvbiB0byByZWNlaXZlIHRoZSByb3RhdGlvbiBjb21wb25lbnRcclxuICogQHBhcmFtIHttYXQ0fSBtYXQgTWF0cml4IHRvIGJlIGRlY29tcG9zZWQgKGlucHV0KVxyXG4gKiBAcmV0dXJuIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3RhdGlvbihvdXQsIG1hdCkge1xuICB2YXIgc2NhbGluZyA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBnZXRTY2FsaW5nKHNjYWxpbmcsIG1hdCk7XG4gIHZhciBpczEgPSAxIC8gc2NhbGluZ1swXTtcbiAgdmFyIGlzMiA9IDEgLyBzY2FsaW5nWzFdO1xuICB2YXIgaXMzID0gMSAvIHNjYWxpbmdbMl07XG4gIHZhciBzbTExID0gbWF0WzBdICogaXMxO1xuICB2YXIgc20xMiA9IG1hdFsxXSAqIGlzMjtcbiAgdmFyIHNtMTMgPSBtYXRbMl0gKiBpczM7XG4gIHZhciBzbTIxID0gbWF0WzRdICogaXMxO1xuICB2YXIgc20yMiA9IG1hdFs1XSAqIGlzMjtcbiAgdmFyIHNtMjMgPSBtYXRbNl0gKiBpczM7XG4gIHZhciBzbTMxID0gbWF0WzhdICogaXMxO1xuICB2YXIgc20zMiA9IG1hdFs5XSAqIGlzMjtcbiAgdmFyIHNtMzMgPSBtYXRbMTBdICogaXMzO1xuICB2YXIgdHJhY2UgPSBzbTExICsgc20yMiArIHNtMzM7XG4gIHZhciBTID0gMDtcblxuICBpZiAodHJhY2UgPiAwKSB7XG4gICAgUyA9IE1hdGguc3FydCh0cmFjZSArIDEuMCkgKiAyO1xuICAgIG91dFszXSA9IDAuMjUgKiBTO1xuICAgIG91dFswXSA9IChzbTIzIC0gc20zMikgLyBTO1xuICAgIG91dFsxXSA9IChzbTMxIC0gc20xMykgLyBTO1xuICAgIG91dFsyXSA9IChzbTEyIC0gc20yMSkgLyBTO1xuICB9IGVsc2UgaWYgKHNtMTEgPiBzbTIyICYmIHNtMTEgPiBzbTMzKSB7XG4gICAgUyA9IE1hdGguc3FydCgxLjAgKyBzbTExIC0gc20yMiAtIHNtMzMpICogMjtcbiAgICBvdXRbM10gPSAoc20yMyAtIHNtMzIpIC8gUztcbiAgICBvdXRbMF0gPSAwLjI1ICogUztcbiAgICBvdXRbMV0gPSAoc20xMiArIHNtMjEpIC8gUztcbiAgICBvdXRbMl0gPSAoc20zMSArIHNtMTMpIC8gUztcbiAgfSBlbHNlIGlmIChzbTIyID4gc20zMykge1xuICAgIFMgPSBNYXRoLnNxcnQoMS4wICsgc20yMiAtIHNtMTEgLSBzbTMzKSAqIDI7XG4gICAgb3V0WzNdID0gKHNtMzEgLSBzbTEzKSAvIFM7XG4gICAgb3V0WzBdID0gKHNtMTIgKyBzbTIxKSAvIFM7XG4gICAgb3V0WzFdID0gMC4yNSAqIFM7XG4gICAgb3V0WzJdID0gKHNtMjMgKyBzbTMyKSAvIFM7XG4gIH0gZWxzZSB7XG4gICAgUyA9IE1hdGguc3FydCgxLjAgKyBzbTMzIC0gc20xMSAtIHNtMjIpICogMjtcbiAgICBvdXRbM10gPSAoc20xMiAtIHNtMjEpIC8gUztcbiAgICBvdXRbMF0gPSAoc20zMSArIHNtMTMpIC8gUztcbiAgICBvdXRbMV0gPSAoc20yMyArIHNtMzIpIC8gUztcbiAgICBvdXRbMl0gPSAwLjI1ICogUztcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiwgdmVjdG9yIHRyYW5zbGF0aW9uIGFuZCB2ZWN0b3Igc2NhbGVcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIGxldCBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0LnNjYWxlKGRlc3QsIHNjYWxlKVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gcyBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZShvdXQsIHEsIHYsIHMpIHtcbiAgLy8gUXVhdGVybmlvbiBtYXRoXG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeHkgPSB4ICogeTI7XG4gIHZhciB4eiA9IHggKiB6MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgeXogPSB5ICogejI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgdmFyIHN4ID0gc1swXTtcbiAgdmFyIHN5ID0gc1sxXTtcbiAgdmFyIHN6ID0gc1syXTtcbiAgb3V0WzBdID0gKDEgLSAoeXkgKyB6eikpICogc3g7XG4gIG91dFsxXSA9ICh4eSArIHd6KSAqIHN4O1xuICBvdXRbMl0gPSAoeHogLSB3eSkgKiBzeDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gKHh5IC0gd3opICogc3k7XG4gIG91dFs1XSA9ICgxIC0gKHh4ICsgenopKSAqIHN5O1xuICBvdXRbNl0gPSAoeXogKyB3eCkgKiBzeTtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gKHh6ICsgd3kpICogc3o7XG4gIG91dFs5XSA9ICh5eiAtIHd4KSAqIHN6O1xuICBvdXRbMTBdID0gKDEgLSAoeHggKyB5eSkpICogc3o7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uLCB2ZWN0b3IgdHJhbnNsYXRpb24gYW5kIHZlY3RvciBzY2FsZSwgcm90YXRpbmcgYW5kIHNjYWxpbmcgYXJvdW5kIHRoZSBnaXZlbiBvcmlnaW5cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIG9yaWdpbik7XHJcbiAqICAgICBsZXQgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5zY2FsZShkZXN0LCBzY2FsZSlcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIG5lZ2F0aXZlT3JpZ2luKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXQ0fSBxIFJvdGF0aW9uIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHt2ZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IHMgU2NhbGluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBvIFRoZSBvcmlnaW4gdmVjdG9yIGFyb3VuZCB3aGljaCB0byBzY2FsZSBhbmQgcm90YXRlXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlT3JpZ2luKG91dCwgcSwgdiwgcywgbykge1xuICAvLyBRdWF0ZXJuaW9uIG1hdGhcbiAgdmFyIHggPSBxWzBdLFxuICAgICAgeSA9IHFbMV0sXG4gICAgICB6ID0gcVsyXSxcbiAgICAgIHcgPSBxWzNdO1xuICB2YXIgeDIgPSB4ICsgeDtcbiAgdmFyIHkyID0geSArIHk7XG4gIHZhciB6MiA9IHogKyB6O1xuICB2YXIgeHggPSB4ICogeDI7XG4gIHZhciB4eSA9IHggKiB5MjtcbiAgdmFyIHh6ID0geCAqIHoyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB5eiA9IHkgKiB6MjtcbiAgdmFyIHp6ID0geiAqIHoyO1xuICB2YXIgd3ggPSB3ICogeDI7XG4gIHZhciB3eSA9IHcgKiB5MjtcbiAgdmFyIHd6ID0gdyAqIHoyO1xuICB2YXIgc3ggPSBzWzBdO1xuICB2YXIgc3kgPSBzWzFdO1xuICB2YXIgc3ogPSBzWzJdO1xuICB2YXIgb3ggPSBvWzBdO1xuICB2YXIgb3kgPSBvWzFdO1xuICB2YXIgb3ogPSBvWzJdO1xuICB2YXIgb3V0MCA9ICgxIC0gKHl5ICsgenopKSAqIHN4O1xuICB2YXIgb3V0MSA9ICh4eSArIHd6KSAqIHN4O1xuICB2YXIgb3V0MiA9ICh4eiAtIHd5KSAqIHN4O1xuICB2YXIgb3V0NCA9ICh4eSAtIHd6KSAqIHN5O1xuICB2YXIgb3V0NSA9ICgxIC0gKHh4ICsgenopKSAqIHN5O1xuICB2YXIgb3V0NiA9ICh5eiArIHd4KSAqIHN5O1xuICB2YXIgb3V0OCA9ICh4eiArIHd5KSAqIHN6O1xuICB2YXIgb3V0OSA9ICh5eiAtIHd4KSAqIHN6O1xuICB2YXIgb3V0MTAgPSAoMSAtICh4eCArIHl5KSkgKiBzejtcbiAgb3V0WzBdID0gb3V0MDtcbiAgb3V0WzFdID0gb3V0MTtcbiAgb3V0WzJdID0gb3V0MjtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gb3V0NDtcbiAgb3V0WzVdID0gb3V0NTtcbiAgb3V0WzZdID0gb3V0NjtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gb3V0ODtcbiAgb3V0WzldID0gb3V0OTtcbiAgb3V0WzEwXSA9IG91dDEwO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IHZbMF0gKyBveCAtIChvdXQwICogb3ggKyBvdXQ0ICogb3kgKyBvdXQ4ICogb3opO1xuICBvdXRbMTNdID0gdlsxXSArIG95IC0gKG91dDEgKiBveCArIG91dDUgKiBveSArIG91dDkgKiBveik7XG4gIG91dFsxNF0gPSB2WzJdICsgb3ogLSAob3V0MiAqIG94ICsgb3V0NiAqIG95ICsgb3V0MTAgKiBveik7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYSA0eDQgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuICpcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21RdWF0KG91dCwgcSkge1xuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHl4ID0geSAqIHgyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB6eCA9IHogKiB4MjtcbiAgdmFyIHp5ID0geiAqIHkyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICBvdXRbMV0gPSB5eCArIHd6O1xuICBvdXRbMl0gPSB6eCAtIHd5O1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB5eCAtIHd6O1xuICBvdXRbNV0gPSAxIC0geHggLSB6ejtcbiAgb3V0WzZdID0genkgKyB3eDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0genggKyB3eTtcbiAgb3V0WzldID0genkgLSB3eDtcbiAgb3V0WzEwXSA9IDEgLSB4eCAtIHl5O1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgZnJ1c3R1bSBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtOdW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJ1c3R1bShvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XG4gIHZhciBybCA9IDEgLyAocmlnaHQgLSBsZWZ0KTtcbiAgdmFyIHRiID0gMSAvICh0b3AgLSBib3R0b20pO1xuICB2YXIgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICBvdXRbMF0gPSBuZWFyICogMiAqIHJsO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSBuZWFyICogMiAqIHRiO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xuICBvdXRbOV0gPSAodG9wICsgYm90dG9tKSAqIHRiO1xuICBvdXRbMTBdID0gKGZhciArIG5lYXIpICogbmY7XG4gIG91dFsxMV0gPSAtMTtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gZmFyICogbmVhciAqIDIgKiBuZjtcbiAgb3V0WzE1XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLlxyXG4gKiBQYXNzaW5nIG51bGwvdW5kZWZpbmVkL25vIHZhbHVlIGZvciBmYXIgd2lsbCBnZW5lcmF0ZSBpbmZpbml0ZSBwcm9qZWN0aW9uIG1hdHJpeC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gZm92eSBWZXJ0aWNhbCBmaWVsZCBvZiB2aWV3IGluIHJhZGlhbnNcclxuICogQHBhcmFtIHtudW1iZXJ9IGFzcGVjdCBBc3BlY3QgcmF0aW8uIHR5cGljYWxseSB2aWV3cG9ydCB3aWR0aC9oZWlnaHRcclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bSwgY2FuIGJlIG51bGwgb3IgSW5maW5pdHlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcnNwZWN0aXZlKG91dCwgZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpIHtcbiAgdmFyIGYgPSAxLjAgLyBNYXRoLnRhbihmb3Z5IC8gMiksXG4gICAgICBuZjtcbiAgb3V0WzBdID0gZiAvIGFzcGVjdDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gZjtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzExXSA9IC0xO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNV0gPSAwO1xuXG4gIGlmIChmYXIgIT0gbnVsbCAmJiBmYXIgIT09IEluZmluaXR5KSB7XG4gICAgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgICBvdXRbMTRdID0gMiAqIGZhciAqIG5lYXIgKiBuZjtcbiAgfSBlbHNlIHtcbiAgICBvdXRbMTBdID0gLTE7XG4gICAgb3V0WzE0XSA9IC0yICogbmVhcjtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZmllbGQgb2Ygdmlldy5cclxuICogVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBnZW5lcmF0aW5nIHByb2plY3Rpb24gbWF0cmljZXMgdG8gYmUgdXNlZFxyXG4gKiB3aXRoIHRoZSBzdGlsbCBleHBlcmllbWVudGFsIFdlYlZSIEFQSS5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge09iamVjdH0gZm92IE9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiB1cERlZ3JlZXMsIGRvd25EZWdyZWVzLCBsZWZ0RGVncmVlcywgcmlnaHREZWdyZWVzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3KG91dCwgZm92LCBuZWFyLCBmYXIpIHtcbiAgdmFyIHVwVGFuID0gTWF0aC50YW4oZm92LnVwRGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7XG4gIHZhciBkb3duVGFuID0gTWF0aC50YW4oZm92LmRvd25EZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIGxlZnRUYW4gPSBNYXRoLnRhbihmb3YubGVmdERlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgcmlnaHRUYW4gPSBNYXRoLnRhbihmb3YucmlnaHREZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIHhTY2FsZSA9IDIuMCAvIChsZWZ0VGFuICsgcmlnaHRUYW4pO1xuICB2YXIgeVNjYWxlID0gMi4wIC8gKHVwVGFuICsgZG93blRhbik7XG4gIG91dFswXSA9IHhTY2FsZTtcbiAgb3V0WzFdID0gMC4wO1xuICBvdXRbMl0gPSAwLjA7XG4gIG91dFszXSA9IDAuMDtcbiAgb3V0WzRdID0gMC4wO1xuICBvdXRbNV0gPSB5U2NhbGU7XG4gIG91dFs2XSA9IDAuMDtcbiAgb3V0WzddID0gMC4wO1xuICBvdXRbOF0gPSAtKChsZWZ0VGFuIC0gcmlnaHRUYW4pICogeFNjYWxlICogMC41KTtcbiAgb3V0WzldID0gKHVwVGFuIC0gZG93blRhbikgKiB5U2NhbGUgKiAwLjU7XG4gIG91dFsxMF0gPSBmYXIgLyAobmVhciAtIGZhcik7XG4gIG91dFsxMV0gPSAtMS4wO1xuICBvdXRbMTJdID0gMC4wO1xuICBvdXRbMTNdID0gMC4wO1xuICBvdXRbMTRdID0gZmFyICogbmVhciAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzE1XSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBvcnRob2dvbmFsIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0IExlZnQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHJpZ2h0IFJpZ2h0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgVG9wIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG9ydGhvKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgdmFyIGxyID0gMSAvIChsZWZ0IC0gcmlnaHQpO1xuICB2YXIgYnQgPSAxIC8gKGJvdHRvbSAtIHRvcCk7XG4gIHZhciBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gIG91dFswXSA9IC0yICogbHI7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IC0yICogYnQ7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAyICogbmY7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gKGxlZnQgKyByaWdodCkgKiBscjtcbiAgb3V0WzEzXSA9ICh0b3AgKyBib3R0b20pICogYnQ7XG4gIG91dFsxNF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgbG9vay1hdCBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZXllIHBvc2l0aW9uLCBmb2NhbCBwb2ludCwgYW5kIHVwIGF4aXMuXHJcbiAqIElmIHlvdSB3YW50IGEgbWF0cml4IHRoYXQgYWN0dWFsbHkgbWFrZXMgYW4gb2JqZWN0IGxvb2sgYXQgYW5vdGhlciBvYmplY3QsIHlvdSBzaG91bGQgdXNlIHRhcmdldFRvIGluc3RlYWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHt2ZWMzfSBleWUgUG9zaXRpb24gb2YgdGhlIHZpZXdlclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICogQHBhcmFtIHt2ZWMzfSB1cCB2ZWMzIHBvaW50aW5nIHVwXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsb29rQXQob3V0LCBleWUsIGNlbnRlciwgdXApIHtcbiAgdmFyIHgwLCB4MSwgeDIsIHkwLCB5MSwgeTIsIHowLCB6MSwgejIsIGxlbjtcbiAgdmFyIGV5ZXggPSBleWVbMF07XG4gIHZhciBleWV5ID0gZXllWzFdO1xuICB2YXIgZXlleiA9IGV5ZVsyXTtcbiAgdmFyIHVweCA9IHVwWzBdO1xuICB2YXIgdXB5ID0gdXBbMV07XG4gIHZhciB1cHogPSB1cFsyXTtcbiAgdmFyIGNlbnRlcnggPSBjZW50ZXJbMF07XG4gIHZhciBjZW50ZXJ5ID0gY2VudGVyWzFdO1xuICB2YXIgY2VudGVyeiA9IGNlbnRlclsyXTtcblxuICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgZ2xNYXRyaXguRVBTSUxPTiAmJiBNYXRoLmFicyhleWV5IC0gY2VudGVyeSkgPCBnbE1hdHJpeC5FUFNJTE9OICYmIE1hdGguYWJzKGV5ZXogLSBjZW50ZXJ6KSA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gaWRlbnRpdHkob3V0KTtcbiAgfVxuXG4gIHowID0gZXlleCAtIGNlbnRlcng7XG4gIHoxID0gZXlleSAtIGNlbnRlcnk7XG4gIHoyID0gZXlleiAtIGNlbnRlcno7XG4gIGxlbiA9IDEgLyBNYXRoLmh5cG90KHowLCB6MSwgejIpO1xuICB6MCAqPSBsZW47XG4gIHoxICo9IGxlbjtcbiAgejIgKj0gbGVuO1xuICB4MCA9IHVweSAqIHoyIC0gdXB6ICogejE7XG4gIHgxID0gdXB6ICogejAgLSB1cHggKiB6MjtcbiAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xuICBsZW4gPSBNYXRoLmh5cG90KHgwLCB4MSwgeDIpO1xuXG4gIGlmICghbGVuKSB7XG4gICAgeDAgPSAwO1xuICAgIHgxID0gMDtcbiAgICB4MiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgbGVuID0gMSAvIGxlbjtcbiAgICB4MCAqPSBsZW47XG4gICAgeDEgKj0gbGVuO1xuICAgIHgyICo9IGxlbjtcbiAgfVxuXG4gIHkwID0gejEgKiB4MiAtIHoyICogeDE7XG4gIHkxID0gejIgKiB4MCAtIHowICogeDI7XG4gIHkyID0gejAgKiB4MSAtIHoxICogeDA7XG4gIGxlbiA9IE1hdGguaHlwb3QoeTAsIHkxLCB5Mik7XG5cbiAgaWYgKCFsZW4pIHtcbiAgICB5MCA9IDA7XG4gICAgeTEgPSAwO1xuICAgIHkyID0gMDtcbiAgfSBlbHNlIHtcbiAgICBsZW4gPSAxIC8gbGVuO1xuICAgIHkwICo9IGxlbjtcbiAgICB5MSAqPSBsZW47XG4gICAgeTIgKj0gbGVuO1xuICB9XG5cbiAgb3V0WzBdID0geDA7XG4gIG91dFsxXSA9IHkwO1xuICBvdXRbMl0gPSB6MDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geDE7XG4gIG91dFs1XSA9IHkxO1xuICBvdXRbNl0gPSB6MTtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0geDI7XG4gIG91dFs5XSA9IHkyO1xuICBvdXRbMTBdID0gejI7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gLSh4MCAqIGV5ZXggKyB4MSAqIGV5ZXkgKyB4MiAqIGV5ZXopO1xuICBvdXRbMTNdID0gLSh5MCAqIGV5ZXggKyB5MSAqIGV5ZXkgKyB5MiAqIGV5ZXopO1xuICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBtYXRyaXggdGhhdCBtYWtlcyBzb21ldGhpbmcgbG9vayBhdCBzb21ldGhpbmcgZWxzZS5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGV5ZSBQb3NpdGlvbiBvZiB0aGUgdmlld2VyXHJcbiAqIEBwYXJhbSB7dmVjM30gY2VudGVyIFBvaW50IHRoZSB2aWV3ZXIgaXMgbG9va2luZyBhdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHVwIHZlYzMgcG9pbnRpbmcgdXBcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRvKG91dCwgZXllLCB0YXJnZXQsIHVwKSB7XG4gIHZhciBleWV4ID0gZXllWzBdLFxuICAgICAgZXlleSA9IGV5ZVsxXSxcbiAgICAgIGV5ZXogPSBleWVbMl0sXG4gICAgICB1cHggPSB1cFswXSxcbiAgICAgIHVweSA9IHVwWzFdLFxuICAgICAgdXB6ID0gdXBbMl07XG4gIHZhciB6MCA9IGV5ZXggLSB0YXJnZXRbMF0sXG4gICAgICB6MSA9IGV5ZXkgLSB0YXJnZXRbMV0sXG4gICAgICB6MiA9IGV5ZXogLSB0YXJnZXRbMl07XG4gIHZhciBsZW4gPSB6MCAqIHowICsgejEgKiB6MSArIHoyICogejI7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gICAgejAgKj0gbGVuO1xuICAgIHoxICo9IGxlbjtcbiAgICB6MiAqPSBsZW47XG4gIH1cblxuICB2YXIgeDAgPSB1cHkgKiB6MiAtIHVweiAqIHoxLFxuICAgICAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyLFxuICAgICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xuICBsZW4gPSB4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDI7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gICAgeDAgKj0gbGVuO1xuICAgIHgxICo9IGxlbjtcbiAgICB4MiAqPSBsZW47XG4gIH1cblxuICBvdXRbMF0gPSB4MDtcbiAgb3V0WzFdID0geDE7XG4gIG91dFsyXSA9IHgyO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB6MSAqIHgyIC0gejIgKiB4MTtcbiAgb3V0WzVdID0gejIgKiB4MCAtIHowICogeDI7XG4gIG91dFs2XSA9IHowICogeDEgLSB6MSAqIHgwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB6MDtcbiAgb3V0WzldID0gejE7XG4gIG91dFsxMF0gPSB6MjtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSBleWV4O1xuICBvdXRbMTNdID0gZXlleTtcbiAgb3V0WzE0XSA9IGV5ZXo7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuO1xuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdtYXQ0KCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcsICcgKyBhWzZdICsgJywgJyArIGFbN10gKyAnLCAnICsgYVs4XSArICcsICcgKyBhWzldICsgJywgJyArIGFbMTBdICsgJywgJyArIGFbMTFdICsgJywgJyArIGFbMTJdICsgJywgJyArIGFbMTNdICsgJywgJyArIGFbMTRdICsgJywgJyArIGFbMTVdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5oeXBvdChhWzBdLCBhWzFdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdLCBhWzddLCBhWzhdLCBhWzldLCBhWzEwXSwgYVsxMV0sIGFbMTJdLCBhWzEzXSwgYVsxNF0sIGFbMTVdKTtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQ0J3NcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl07XG4gIG91dFs3XSA9IGFbN10gKyBiWzddO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XTtcbiAgb3V0WzldID0gYVs5XSArIGJbOV07XG4gIG91dFsxMF0gPSBhWzEwXSArIGJbMTBdO1xuICBvdXRbMTFdID0gYVsxMV0gKyBiWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdICsgYlsxMl07XG4gIG91dFsxM10gPSBhWzEzXSArIGJbMTNdO1xuICBvdXRbMTRdID0gYVsxNF0gKyBiWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdICsgYlsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgb3V0WzRdID0gYVs0XSAtIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gLSBiWzVdO1xuICBvdXRbNl0gPSBhWzZdIC0gYls2XTtcbiAgb3V0WzddID0gYVs3XSAtIGJbN107XG4gIG91dFs4XSA9IGFbOF0gLSBiWzhdO1xuICBvdXRbOV0gPSBhWzldIC0gYls5XTtcbiAgb3V0WzEwXSA9IGFbMTBdIC0gYlsxMF07XG4gIG91dFsxMV0gPSBhWzExXSAtIGJbMTFdO1xuICBvdXRbMTJdID0gYVsxMl0gLSBiWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdIC0gYlsxM107XG4gIG91dFsxNF0gPSBhWzE0XSAtIGJbMTRdO1xuICBvdXRbMTVdID0gYVsxNV0gLSBiWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgdGhlIG1hdHJpeCBieSBhIHNjYWxhci5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBtYXRyaXgncyBlbGVtZW50cyBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICBvdXRbNF0gPSBhWzRdICogYjtcbiAgb3V0WzVdID0gYVs1XSAqIGI7XG4gIG91dFs2XSA9IGFbNl0gKiBiO1xuICBvdXRbN10gPSBhWzddICogYjtcbiAgb3V0WzhdID0gYVs4XSAqIGI7XG4gIG91dFs5XSA9IGFbOV0gKiBiO1xuICBvdXRbMTBdID0gYVsxMF0gKiBiO1xuICBvdXRbMTFdID0gYVsxMV0gKiBiO1xuICBvdXRbMTJdID0gYVsxMl0gKiBiO1xuICBvdXRbMTNdID0gYVsxM10gKiBiO1xuICBvdXRbMTRdID0gYVsxNF0gKiBiO1xuICBvdXRbMTVdID0gYVsxNV0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDQncyBhZnRlciBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiJ3MgZWxlbWVudHMgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXJBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XSAqIHNjYWxlO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XSAqIHNjYWxlO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XSAqIHNjYWxlO1xuICBvdXRbN10gPSBhWzddICsgYls3XSAqIHNjYWxlO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XSAqIHNjYWxlO1xuICBvdXRbOV0gPSBhWzldICsgYls5XSAqIHNjYWxlO1xuICBvdXRbMTBdID0gYVsxMF0gKyBiWzEwXSAqIHNjYWxlO1xuICBvdXRbMTFdID0gYVsxMV0gKyBiWzExXSAqIHNjYWxlO1xuICBvdXRbMTJdID0gYVsxMl0gKyBiWzEyXSAqIHNjYWxlO1xuICBvdXRbMTNdID0gYVsxM10gKyBiWzEzXSAqIHNjYWxlO1xuICBvdXRbMTRdID0gYVsxNF0gKyBiWzE0XSAqIHNjYWxlO1xuICBvdXRbMTVdID0gYVsxNV0gKyBiWzE1XSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM10gJiYgYVs0XSA9PT0gYls0XSAmJiBhWzVdID09PSBiWzVdICYmIGFbNl0gPT09IGJbNl0gJiYgYVs3XSA9PT0gYls3XSAmJiBhWzhdID09PSBiWzhdICYmIGFbOV0gPT09IGJbOV0gJiYgYVsxMF0gPT09IGJbMTBdICYmIGFbMTFdID09PSBiWzExXSAmJiBhWzEyXSA9PT0gYlsxMl0gJiYgYVsxM10gPT09IGJbMTNdICYmIGFbMTRdID09PSBiWzE0XSAmJiBhWzE1XSA9PT0gYlsxNV07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQ0fSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XSxcbiAgICAgIGE2ID0gYVs2XSxcbiAgICAgIGE3ID0gYVs3XTtcbiAgdmFyIGE4ID0gYVs4XSxcbiAgICAgIGE5ID0gYVs5XSxcbiAgICAgIGExMCA9IGFbMTBdLFxuICAgICAgYTExID0gYVsxMV07XG4gIHZhciBhMTIgPSBhWzEyXSxcbiAgICAgIGExMyA9IGFbMTNdLFxuICAgICAgYTE0ID0gYVsxNF0sXG4gICAgICBhMTUgPSBhWzE1XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgdmFyIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XSxcbiAgICAgIGI2ID0gYls2XSxcbiAgICAgIGI3ID0gYls3XTtcbiAgdmFyIGI4ID0gYls4XSxcbiAgICAgIGI5ID0gYls5XSxcbiAgICAgIGIxMCA9IGJbMTBdLFxuICAgICAgYjExID0gYlsxMV07XG4gIHZhciBiMTIgPSBiWzEyXSxcbiAgICAgIGIxMyA9IGJbMTNdLFxuICAgICAgYjE0ID0gYlsxNF0sXG4gICAgICBiMTUgPSBiWzE1XTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKSAmJiBNYXRoLmFicyhhNCAtIGI0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNCksIE1hdGguYWJzKGI0KSkgJiYgTWF0aC5hYnMoYTUgLSBiNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTUpLCBNYXRoLmFicyhiNSkpICYmIE1hdGguYWJzKGE2IC0gYjYpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE2KSwgTWF0aC5hYnMoYjYpKSAmJiBNYXRoLmFicyhhNyAtIGI3KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNyksIE1hdGguYWJzKGI3KSkgJiYgTWF0aC5hYnMoYTggLSBiOCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTgpLCBNYXRoLmFicyhiOCkpICYmIE1hdGguYWJzKGE5IC0gYjkpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE5KSwgTWF0aC5hYnMoYjkpKSAmJiBNYXRoLmFicyhhMTAgLSBiMTApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMCksIE1hdGguYWJzKGIxMCkpICYmIE1hdGguYWJzKGExMSAtIGIxMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTExKSwgTWF0aC5hYnMoYjExKSkgJiYgTWF0aC5hYnMoYTEyIC0gYjEyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTIpLCBNYXRoLmFicyhiMTIpKSAmJiBNYXRoLmFicyhhMTMgLSBiMTMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMyksIE1hdGguYWJzKGIxMykpICYmIE1hdGguYWJzKGExNCAtIGIxNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTE0KSwgTWF0aC5hYnMoYjE0KSkgJiYgTWF0aC5hYnMoYTE1IC0gYjE1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTUpLCBNYXRoLmFicyhiMTUpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAzIERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbW9kdWxlIHZlYzNcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWMzXHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeik7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyh4LCB5LCB6KSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgb3V0WzJdID0gejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgdmVjMyB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgc291cmNlIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIHgsIHksIHopIHtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgb3V0WzJdID0gejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICogYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmlkZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAvIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmNlaWwgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2VpbFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2VpbChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5jZWlsKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmNlaWwoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguY2VpbChhWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmZsb29yIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGZsb29yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9vcihvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5mbG9vcihhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5mbG9vcihhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5mbG9vcihhWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1pbihhWzJdLCBiWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1heChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1heChhWzJdLCBiWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLnJvdW5kIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIHJvdW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5yb3VuZChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5yb3VuZChhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5yb3VuZChhWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMydzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdO1xuICB2YXIgeSA9IGJbMV0gLSBhWzFdO1xuICB2YXIgeiA9IGJbMl0gLSBhWzJdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5LCB6KTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkRGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdO1xuICB2YXIgeSA9IGJbMV0gLSBhWzFdO1xuICB2YXIgeiA9IGJbMl0gLSBhWzJdO1xuICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZExlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XG59XG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGludmVydFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcbiAgb3V0WzJdID0gMS4wIC8gYVsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciBsZW4gPSB4ICogeCArIHkgKiB5ICsgeiAqIHo7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgfVxuXG4gIG91dFswXSA9IGFbMF0gKiBsZW47XG4gIG91dFsxXSA9IGFbMV0gKiBsZW47XG4gIG91dFsyXSA9IGFbMl0gKiBsZW47XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXTtcbn1cbi8qKlxyXG4gKiBDb21wdXRlcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcm9zcyhvdXQsIGEsIGIpIHtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXTtcbiAgdmFyIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIGJ6ID0gYlsyXTtcbiAgb3V0WzBdID0gYXkgKiBieiAtIGF6ICogYnk7XG4gIG91dFsxXSA9IGF6ICogYnggLSBheCAqIGJ6O1xuICBvdXRbMl0gPSBheCAqIGJ5IC0gYXkgKiBieDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKG91dCwgYSwgYiwgdCkge1xuICB2YXIgYXggPSBhWzBdO1xuICB2YXIgYXkgPSBhWzFdO1xuICB2YXIgYXogPSBhWzJdO1xuICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgaGVybWl0ZSBpbnRlcnBvbGF0aW9uIHdpdGggdHdvIGNvbnRyb2wgcG9pbnRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYyB0aGUgdGhpcmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGQgdGhlIGZvdXJ0aCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhlcm1pdGUob3V0LCBhLCBiLCBjLCBkLCB0KSB7XG4gIHZhciBmYWN0b3JUaW1lczIgPSB0ICogdDtcbiAgdmFyIGZhY3RvcjEgPSBmYWN0b3JUaW1lczIgKiAoMiAqIHQgLSAzKSArIDE7XG4gIHZhciBmYWN0b3IyID0gZmFjdG9yVGltZXMyICogKHQgLSAyKSArIHQ7XG4gIHZhciBmYWN0b3IzID0gZmFjdG9yVGltZXMyICogKHQgLSAxKTtcbiAgdmFyIGZhY3RvcjQgPSBmYWN0b3JUaW1lczIgKiAoMyAtIDIgKiB0KTtcbiAgb3V0WzBdID0gYVswXSAqIGZhY3RvcjEgKyBiWzBdICogZmFjdG9yMiArIGNbMF0gKiBmYWN0b3IzICsgZFswXSAqIGZhY3RvcjQ7XG4gIG91dFsxXSA9IGFbMV0gKiBmYWN0b3IxICsgYlsxXSAqIGZhY3RvcjIgKyBjWzFdICogZmFjdG9yMyArIGRbMV0gKiBmYWN0b3I0O1xuICBvdXRbMl0gPSBhWzJdICogZmFjdG9yMSArIGJbMl0gKiBmYWN0b3IyICsgY1syXSAqIGZhY3RvcjMgKyBkWzJdICogZmFjdG9yNDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGJlemllciBpbnRlcnBvbGF0aW9uIHdpdGggdHdvIGNvbnRyb2wgcG9pbnRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYyB0aGUgdGhpcmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGQgdGhlIGZvdXJ0aCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGJlemllcihvdXQsIGEsIGIsIGMsIGQsIHQpIHtcbiAgdmFyIGludmVyc2VGYWN0b3IgPSAxIC0gdDtcbiAgdmFyIGludmVyc2VGYWN0b3JUaW1lc1R3byA9IGludmVyc2VGYWN0b3IgKiBpbnZlcnNlRmFjdG9yO1xuICB2YXIgZmFjdG9yVGltZXMyID0gdCAqIHQ7XG4gIHZhciBmYWN0b3IxID0gaW52ZXJzZUZhY3RvclRpbWVzVHdvICogaW52ZXJzZUZhY3RvcjtcbiAgdmFyIGZhY3RvcjIgPSAzICogdCAqIGludmVyc2VGYWN0b3JUaW1lc1R3bztcbiAgdmFyIGZhY3RvcjMgPSAzICogZmFjdG9yVGltZXMyICogaW52ZXJzZUZhY3RvcjtcbiAgdmFyIGZhY3RvcjQgPSBmYWN0b3JUaW1lczIgKiB0O1xuICBvdXRbMF0gPSBhWzBdICogZmFjdG9yMSArIGJbMF0gKiBmYWN0b3IyICsgY1swXSAqIGZhY3RvcjMgKyBkWzBdICogZmFjdG9yNDtcbiAgb3V0WzFdID0gYVsxXSAqIGZhY3RvcjEgKyBiWzFdICogZmFjdG9yMiArIGNbMV0gKiBmYWN0b3IzICsgZFsxXSAqIGZhY3RvcjQ7XG4gIG91dFsyXSA9IGFbMl0gKiBmYWN0b3IxICsgYlsyXSAqIGZhY3RvcjIgKyBjWzJdICogZmFjdG9yMyArIGRbMl0gKiBmYWN0b3I0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb20ob3V0LCBzY2FsZSkge1xuICBzY2FsZSA9IHNjYWxlIHx8IDEuMDtcbiAgdmFyIHIgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIuMCAqIE1hdGguUEk7XG4gIHZhciB6ID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyLjAgLSAxLjA7XG4gIHZhciB6U2NhbGUgPSBNYXRoLnNxcnQoMS4wIC0geiAqIHopICogc2NhbGU7XG4gIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xuICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHpTY2FsZTtcbiAgb3V0WzJdID0geiAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQ0KG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdO1xuICB2YXIgdyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XTtcbiAgdyA9IHcgfHwgMS4wO1xuICBvdXRbMF0gPSAobVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0pIC8gdztcbiAgb3V0WzFdID0gKG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdKSAvIHc7XG4gIG91dFsyXSA9IChtWzJdICogeCArIG1bNl0gKiB5ICsgbVsxMF0gKiB6ICsgbVsxNF0pIC8gdztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBtYXQzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQzfSBtIHRoZSAzeDMgbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQzKG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdO1xuICBvdXRbMF0gPSB4ICogbVswXSArIHkgKiBtWzNdICsgeiAqIG1bNl07XG4gIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcbiAgb3V0WzJdID0geCAqIG1bMl0gKyB5ICogbVs1XSArIHogKiBtWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIHF1YXRcclxuICogQ2FuIGFsc28gYmUgdXNlZCBmb3IgZHVhbCBxdWF0ZXJuaW9ucy4gKE11bHRpcGx5IGl0IHdpdGggdGhlIHJlYWwgcGFydClcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1RdWF0KG91dCwgYSwgcSkge1xuICAvLyBiZW5jaG1hcmtzOiBodHRwczovL2pzcGVyZi5jb20vcXVhdGVybmlvbi10cmFuc2Zvcm0tdmVjMy1pbXBsZW1lbnRhdGlvbnMtZml4ZWRcbiAgdmFyIHF4ID0gcVswXSxcbiAgICAgIHF5ID0gcVsxXSxcbiAgICAgIHF6ID0gcVsyXSxcbiAgICAgIHF3ID0gcVszXTtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTsgLy8gdmFyIHF2ZWMgPSBbcXgsIHF5LCBxel07XG4gIC8vIHZhciB1diA9IHZlYzMuY3Jvc3MoW10sIHF2ZWMsIGEpO1xuXG4gIHZhciB1dnggPSBxeSAqIHogLSBxeiAqIHksXG4gICAgICB1dnkgPSBxeiAqIHggLSBxeCAqIHosXG4gICAgICB1dnogPSBxeCAqIHkgLSBxeSAqIHg7IC8vIHZhciB1dXYgPSB2ZWMzLmNyb3NzKFtdLCBxdmVjLCB1dik7XG5cbiAgdmFyIHV1dnggPSBxeSAqIHV2eiAtIHF6ICogdXZ5LFxuICAgICAgdXV2eSA9IHF6ICogdXZ4IC0gcXggKiB1dnosXG4gICAgICB1dXZ6ID0gcXggKiB1dnkgLSBxeSAqIHV2eDsgLy8gdmVjMy5zY2FsZSh1diwgdXYsIDIgKiB3KTtcblxuICB2YXIgdzIgPSBxdyAqIDI7XG4gIHV2eCAqPSB3MjtcbiAgdXZ5ICo9IHcyO1xuICB1dnogKj0gdzI7IC8vIHZlYzMuc2NhbGUodXV2LCB1dXYsIDIpO1xuXG4gIHV1dnggKj0gMjtcbiAgdXV2eSAqPSAyO1xuICB1dXZ6ICo9IDI7IC8vIHJldHVybiB2ZWMzLmFkZChvdXQsIGEsIHZlYzMuYWRkKG91dCwgdXYsIHV1dikpO1xuXG4gIG91dFswXSA9IHggKyB1dnggKyB1dXZ4O1xuICBvdXRbMV0gPSB5ICsgdXZ5ICsgdXV2eTtcbiAgb3V0WzJdID0geiArIHV2eiArIHV1dno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgeC1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVgob3V0LCBhLCBiLCBjKSB7XG4gIHZhciBwID0gW10sXG4gICAgICByID0gW107IC8vVHJhbnNsYXRlIHBvaW50IHRvIHRoZSBvcmlnaW5cblxuICBwWzBdID0gYVswXSAtIGJbMF07XG4gIHBbMV0gPSBhWzFdIC0gYlsxXTtcbiAgcFsyXSA9IGFbMl0gLSBiWzJdOyAvL3BlcmZvcm0gcm90YXRpb25cblxuICByWzBdID0gcFswXTtcbiAgclsxXSA9IHBbMV0gKiBNYXRoLmNvcyhjKSAtIHBbMl0gKiBNYXRoLnNpbihjKTtcbiAgclsyXSA9IHBbMV0gKiBNYXRoLnNpbihjKSArIHBbMl0gKiBNYXRoLmNvcyhjKTsgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxuXG4gIG91dFswXSA9IHJbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gclsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgeS1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVkob3V0LCBhLCBiLCBjKSB7XG4gIHZhciBwID0gW10sXG4gICAgICByID0gW107IC8vVHJhbnNsYXRlIHBvaW50IHRvIHRoZSBvcmlnaW5cblxuICBwWzBdID0gYVswXSAtIGJbMF07XG4gIHBbMV0gPSBhWzFdIC0gYlsxXTtcbiAgcFsyXSA9IGFbMl0gLSBiWzJdOyAvL3BlcmZvcm0gcm90YXRpb25cblxuICByWzBdID0gcFsyXSAqIE1hdGguc2luKGMpICsgcFswXSAqIE1hdGguY29zKGMpO1xuICByWzFdID0gcFsxXTtcbiAgclsyXSA9IHBbMl0gKiBNYXRoLmNvcyhjKSAtIHBbMF0gKiBNYXRoLnNpbihjKTsgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxuXG4gIG91dFswXSA9IHJbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gclsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgei1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVoob3V0LCBhLCBiLCBjKSB7XG4gIHZhciBwID0gW10sXG4gICAgICByID0gW107IC8vVHJhbnNsYXRlIHBvaW50IHRvIHRoZSBvcmlnaW5cblxuICBwWzBdID0gYVswXSAtIGJbMF07XG4gIHBbMV0gPSBhWzFdIC0gYlsxXTtcbiAgcFsyXSA9IGFbMl0gLSBiWzJdOyAvL3BlcmZvcm0gcm90YXRpb25cblxuICByWzBdID0gcFswXSAqIE1hdGguY29zKGMpIC0gcFsxXSAqIE1hdGguc2luKGMpO1xuICByWzFdID0gcFswXSAqIE1hdGguc2luKGMpICsgcFsxXSAqIE1hdGguY29zKGMpO1xuICByWzJdID0gcFsyXTsgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxuXG4gIG91dFswXSA9IHJbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gclsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0IHRoZSBhbmdsZSBiZXR3ZWVuIHR3byAzRCB2ZWN0b3JzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYW5nbGUoYSwgYikge1xuICB2YXIgdGVtcEEgPSBmcm9tVmFsdWVzKGFbMF0sIGFbMV0sIGFbMl0pO1xuICB2YXIgdGVtcEIgPSBmcm9tVmFsdWVzKGJbMF0sIGJbMV0sIGJbMl0pO1xuICBub3JtYWxpemUodGVtcEEsIHRlbXBBKTtcbiAgbm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XG4gIHZhciBjb3NpbmUgPSBkb3QodGVtcEEsIHRlbXBCKTtcblxuICBpZiAoY29zaW5lID4gMS4wKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAoY29zaW5lIDwgLTEuMCkge1xuICAgIHJldHVybiBNYXRoLlBJO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBNYXRoLmFjb3MoY29zaW5lKTtcbiAgfVxufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzMgdG8gemVyb1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gemVybyhvdXQpIHtcbiAgb3V0WzBdID0gMC4wO1xuICBvdXRbMV0gPSAwLjA7XG4gIG91dFsyXSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICd2ZWMzKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcpJztcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGl2ID0gZGl2aWRlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpc3QgPSBkaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyRGlzdCA9IHNxdWFyZWREaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuID0gbGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjM3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMy4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMzcyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBmb3JFYWNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdmVjID0gY3JlYXRlKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XG4gICAgdmFyIGksIGw7XG5cbiAgICBpZiAoIXN0cmlkZSkge1xuICAgICAgc3RyaWRlID0gMztcbiAgICB9XG5cbiAgICBpZiAoIW9mZnNldCkge1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoY291bnQpIHtcbiAgICAgIGwgPSBNYXRoLm1pbihjb3VudCAqIHN0cmlkZSArIG9mZnNldCwgYS5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsID0gYS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcbiAgICAgIHZlY1swXSA9IGFbaV07XG4gICAgICB2ZWNbMV0gPSBhW2kgKyAxXTtcbiAgICAgIHZlY1syXSA9IGFbaSArIDJdO1xuICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XG4gICAgICBhW2ldID0gdmVjWzBdO1xuICAgICAgYVtpICsgMV0gPSB2ZWNbMV07XG4gICAgICBhW2kgKyAyXSA9IHZlY1syXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfTtcbn0oKTsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiA0IERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbW9kdWxlIHZlYzRcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWM0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdyBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyh4LCB5LCB6LCB3KSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgb3V0WzJdID0gejtcbiAgb3V0WzNdID0gdztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgdmVjNCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgc291cmNlIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIHgsIHksIHosIHcpIHtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgb3V0WzJdID0gejtcbiAgb3V0WzNdID0gdztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYlswXTtcbiAgb3V0WzFdID0gYVsxXSAqIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xuICBvdXRbM10gPSBhWzNdICogYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmlkZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAvIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAvIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5jZWlsIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNlaWxcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNlaWwob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguY2VpbChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5jZWlsKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmNlaWwoYVsyXSk7XG4gIG91dFszXSA9IE1hdGguY2VpbChhWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmZsb29yIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGZsb29yXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9vcihvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5mbG9vcihhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5mbG9vcihhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5mbG9vcihhWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5mbG9vcihhWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1pbihhWzJdLCBiWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5taW4oYVszXSwgYlszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXgob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XG4gIG91dFszXSA9IE1hdGgubWF4KGFbM10sIGJbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGgucm91bmQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gcm91bmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLnJvdW5kKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLnJvdW5kKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLnJvdW5kKGFbMl0pO1xuICBvdXRbM10gPSBNYXRoLnJvdW5kKGFbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyBhIHZlYzQgYnkgYSBzY2FsYXIgbnVtYmVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgdmVjdG9yIGJ5XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjNCdzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdO1xuICB2YXIgeSA9IGJbMV0gLSBhWzFdO1xuICB2YXIgeiA9IGJbMl0gLSBhWzJdO1xuICB2YXIgdyA9IGJbM10gLSBhWzNdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5LCB6LCB3KTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkRGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdO1xuICB2YXIgeSA9IGJbMV0gLSBhWzFdO1xuICB2YXIgeiA9IGJbMl0gLSBhWzJdO1xuICB2YXIgdyA9IGJbM10gLSBhWzNdO1xuICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHc7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICB2YXIgdyA9IGFbM107XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHksIHosIHcpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZExlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciB3ID0gYVszXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3O1xufVxuLyoqXHJcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbmVnYXRlXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGUob3V0LCBhKSB7XG4gIG91dFswXSA9IC1hWzBdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgb3V0WzJdID0gLWFbMl07XG4gIG91dFszXSA9IC1hWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKG91dCwgYSkge1xuICBvdXRbMF0gPSAxLjAgLyBhWzBdO1xuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xuICBvdXRbM10gPSAxLjAgLyBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIHcgPSBhWzNdO1xuICB2YXIgbGVuID0geCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHc7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gIH1cblxuICBvdXRbMF0gPSB4ICogbGVuO1xuICBvdXRbMV0gPSB5ICogbGVuO1xuICBvdXRbMl0gPSB6ICogbGVuO1xuICBvdXRbM10gPSB3ICogbGVuO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRvdChhLCBiKSB7XG4gIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl0gKyBhWzNdICogYlszXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBjcm9zcy1wcm9kdWN0IG9mIHRocmVlIHZlY3RvcnMgaW4gYSA0LWRpbWVuc2lvbmFsIHNwYWNlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gcmVzdWx0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gVSB0aGUgZmlyc3QgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gViB0aGUgc2Vjb25kIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IFcgdGhlIHRoaXJkIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjNH0gcmVzdWx0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3Jvc3Mob3V0LCB1LCB2LCB3KSB7XG4gIHZhciBBID0gdlswXSAqIHdbMV0gLSB2WzFdICogd1swXSxcbiAgICAgIEIgPSB2WzBdICogd1syXSAtIHZbMl0gKiB3WzBdLFxuICAgICAgQyA9IHZbMF0gKiB3WzNdIC0gdlszXSAqIHdbMF0sXG4gICAgICBEID0gdlsxXSAqIHdbMl0gLSB2WzJdICogd1sxXSxcbiAgICAgIEUgPSB2WzFdICogd1szXSAtIHZbM10gKiB3WzFdLFxuICAgICAgRiA9IHZbMl0gKiB3WzNdIC0gdlszXSAqIHdbMl07XG4gIHZhciBHID0gdVswXTtcbiAgdmFyIEggPSB1WzFdO1xuICB2YXIgSSA9IHVbMl07XG4gIHZhciBKID0gdVszXTtcbiAgb3V0WzBdID0gSCAqIEYgLSBJICogRSArIEogKiBEO1xuICBvdXRbMV0gPSAtKEcgKiBGKSArIEkgKiBDIC0gSiAqIEI7XG4gIG91dFsyXSA9IEcgKiBFIC0gSCAqIEMgKyBKICogQTtcbiAgb3V0WzNdID0gLShHICogRCkgKyBIICogQiAtIEkgKiBBO1xuICByZXR1cm4gb3V0O1xufVxuO1xuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAob3V0LCBhLCBiLCB0KSB7XG4gIHZhciBheCA9IGFbMF07XG4gIHZhciBheSA9IGFbMV07XG4gIHZhciBheiA9IGFbMl07XG4gIHZhciBhdyA9IGFbM107XG4gIG91dFswXSA9IGF4ICsgdCAqIChiWzBdIC0gYXgpO1xuICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcbiAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XG4gIG91dFszXSA9IGF3ICsgdCAqIChiWzNdIC0gYXcpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb20ob3V0LCBzY2FsZSkge1xuICBzY2FsZSA9IHNjYWxlIHx8IDEuMDsgLy8gTWFyc2FnbGlhLCBHZW9yZ2UuIENob29zaW5nIGEgUG9pbnQgZnJvbSB0aGUgU3VyZmFjZSBvZiBhXG4gIC8vIFNwaGVyZS4gQW5uLiBNYXRoLiBTdGF0aXN0LiA0MyAoMTk3MiksIG5vLiAyLCA2NDUtLTY0Ni5cbiAgLy8gaHR0cDovL3Byb2plY3RldWNsaWQub3JnL2V1Y2xpZC5hb21zLzExNzc2OTI2NDQ7XG5cbiAgdmFyIHYxLCB2MiwgdjMsIHY0O1xuICB2YXIgczEsIHMyO1xuXG4gIGRvIHtcbiAgICB2MSA9IGdsTWF0cml4LlJBTkRPTSgpICogMiAtIDE7XG4gICAgdjIgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIgLSAxO1xuICAgIHMxID0gdjEgKiB2MSArIHYyICogdjI7XG4gIH0gd2hpbGUgKHMxID49IDEpO1xuXG4gIGRvIHtcbiAgICB2MyA9IGdsTWF0cml4LlJBTkRPTSgpICogMiAtIDE7XG4gICAgdjQgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIgLSAxO1xuICAgIHMyID0gdjMgKiB2MyArIHY0ICogdjQ7XG4gIH0gd2hpbGUgKHMyID49IDEpO1xuXG4gIHZhciBkID0gTWF0aC5zcXJ0KCgxIC0gczEpIC8gczIpO1xuICBvdXRbMF0gPSBzY2FsZSAqIHYxO1xuICBvdXRbMV0gPSBzY2FsZSAqIHYyO1xuICBvdXRbMl0gPSBzY2FsZSAqIHYzICogZDtcbiAgb3V0WzNdID0gc2NhbGUgKiB2NCAqIGQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjNCB3aXRoIGEgbWF0NC5cclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl0sXG4gICAgICB3ID0gYVszXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bNV0gKiB5ICsgbVs5XSAqIHogKyBtWzEzXSAqIHc7XG4gIG91dFsyXSA9IG1bMl0gKiB4ICsgbVs2XSAqIHkgKyBtWzEwXSAqIHogKyBtWzE0XSAqIHc7XG4gIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjNCB3aXRoIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVF1YXQob3V0LCBhLCBxKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07XG4gIHZhciBxeCA9IHFbMF0sXG4gICAgICBxeSA9IHFbMV0sXG4gICAgICBxeiA9IHFbMl0sXG4gICAgICBxdyA9IHFbM107IC8vIGNhbGN1bGF0ZSBxdWF0ICogdmVjXG5cbiAgdmFyIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5O1xuICB2YXIgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7XG4gIHZhciBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcbiAgdmFyIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejsgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxuXG4gIG91dFswXSA9IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXk7XG4gIG91dFsxXSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XG4gIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNCB0byB6ZXJvXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvKG91dCkge1xuICBvdXRbMF0gPSAwLjA7XG4gIG91dFsxXSA9IDAuMDtcbiAgb3V0WzJdID0gMC4wO1xuICBvdXRbM10gPSAwLjA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiAndmVjNCgnICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcpJztcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGl2ID0gZGl2aWRlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpc3QgPSBkaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyRGlzdCA9IHNxdWFyZWREaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQubGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuID0gbGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjNHMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjNC4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWM0cyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBmb3JFYWNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdmVjID0gY3JlYXRlKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XG4gICAgdmFyIGksIGw7XG5cbiAgICBpZiAoIXN0cmlkZSkge1xuICAgICAgc3RyaWRlID0gNDtcbiAgICB9XG5cbiAgICBpZiAoIW9mZnNldCkge1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoY291bnQpIHtcbiAgICAgIGwgPSBNYXRoLm1pbihjb3VudCAqIHN0cmlkZSArIG9mZnNldCwgYS5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsID0gYS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcbiAgICAgIHZlY1swXSA9IGFbaV07XG4gICAgICB2ZWNbMV0gPSBhW2kgKyAxXTtcbiAgICAgIHZlY1syXSA9IGFbaSArIDJdO1xuICAgICAgdmVjWzNdID0gYVtpICsgM107XG4gICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgIGFbaV0gPSB2ZWNbMF07XG4gICAgICBhW2kgKyAxXSA9IHZlY1sxXTtcbiAgICAgIGFbaSArIDJdID0gdmVjWzJdO1xuICAgICAgYVtpICsgM10gPSB2ZWNbM107XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH07XG59KCk7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG5pbXBvcnQgKiBhcyBtYXQzIGZyb20gXCIuL21hdDMuanNcIjtcbmltcG9ydCAqIGFzIHZlYzMgZnJvbSBcIi4vdmVjMy5qc1wiO1xuaW1wb3J0ICogYXMgdmVjNCBmcm9tIFwiLi92ZWM0LmpzXCI7XG4vKipcclxuICogUXVhdGVybmlvblxyXG4gKiBAbW9kdWxlIHF1YXRcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IHF1YXRcclxuICpcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgfVxuXG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgcXVhdCB0byB0aGUgaWRlbnRpdHkgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAwO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxyXG4gKiB0aGVuIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXhpc0FuZ2xlKG91dCwgYXhpcywgcmFkKSB7XG4gIHJhZCA9IHJhZCAqIDAuNTtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICBvdXRbMF0gPSBzICogYXhpc1swXTtcbiAgb3V0WzFdID0gcyAqIGF4aXNbMV07XG4gIG91dFsyXSA9IHMgKiBheGlzWzJdO1xuICBvdXRbM10gPSBNYXRoLmNvcyhyYWQpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldHMgdGhlIHJvdGF0aW9uIGF4aXMgYW5kIGFuZ2xlIGZvciBhIGdpdmVuXHJcbiAqICBxdWF0ZXJuaW9uLiBJZiBhIHF1YXRlcm5pb24gaXMgY3JlYXRlZCB3aXRoXHJcbiAqICBzZXRBeGlzQW5nbGUsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBzYW1lXHJcbiAqICB2YWx1ZXMgYXMgcHJvdmlkaWVkIGluIHRoZSBvcmlnaW5hbCBwYXJhbWV0ZXIgbGlzdFxyXG4gKiAgT1IgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdmFsdWVzLlxyXG4gKiBFeGFtcGxlOiBUaGUgcXVhdGVybmlvbiBmb3JtZWQgYnkgYXhpcyBbMCwgMCwgMV0gYW5kXHJcbiAqICBhbmdsZSAtOTAgaXMgdGhlIHNhbWUgYXMgdGhlIHF1YXRlcm5pb24gZm9ybWVkIGJ5XHJcbiAqICBbMCwgMCwgMV0gYW5kIDI3MC4gVGhpcyBtZXRob2QgZmF2b3JzIHRoZSBsYXR0ZXIuXHJcbiAqIEBwYXJhbSAge3ZlYzN9IG91dF9heGlzICBWZWN0b3IgcmVjZWl2aW5nIHRoZSBheGlzIG9mIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSAge3F1YXR9IHEgICAgIFF1YXRlcm5pb24gdG8gYmUgZGVjb21wb3NlZFxyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICBBbmdsZSwgaW4gcmFkaWFucywgb2YgdGhlIHJvdGF0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXhpc0FuZ2xlKG91dF9heGlzLCBxKSB7XG4gIHZhciByYWQgPSBNYXRoLmFjb3MocVszXSkgKiAyLjA7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkIC8gMi4wKTtcblxuICBpZiAocyA+IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICBvdXRfYXhpc1swXSA9IHFbMF0gLyBzO1xuICAgIG91dF9heGlzWzFdID0gcVsxXSAvIHM7XG4gICAgb3V0X2F4aXNbMl0gPSBxWzJdIC8gcztcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBzIGlzIHplcm8sIHJldHVybiBhbnkgYXhpcyAobm8gcm90YXRpb24gLSBheGlzIGRvZXMgbm90IG1hdHRlcilcbiAgICBvdXRfYXhpc1swXSA9IDE7XG4gICAgb3V0X2F4aXNbMV0gPSAwO1xuICAgIG91dF9heGlzWzJdID0gMDtcbiAgfVxuXG4gIHJldHVybiByYWQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgYW5ndWxhciBkaXN0YW5jZSBiZXR3ZWVuIHR3byB1bml0IHF1YXRlcm5pb25zXHJcbiAqXHJcbiAqIEBwYXJhbSAge3F1YXR9IGEgICAgIE9yaWdpbiB1bml0IHF1YXRlcm5pb24gXHJcbiAqIEBwYXJhbSAge3F1YXR9IGIgICAgIERlc3RpbmF0aW9uIHVuaXQgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICBBbmdsZSwgaW4gcmFkaWFucywgYmV0d2VlbiB0aGUgdHdvIHF1YXRlcm5pb25zXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5nbGUoYSwgYikge1xuICB2YXIgZG90cHJvZHVjdCA9IGRvdChhLCBiKTtcbiAgcmV0dXJuIE1hdGguYWNvcygyICogZG90cHJvZHVjdCAqIGRvdHByb2R1Y3QgLSAxKTtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgdmFyIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIGJ6ID0gYlsyXSxcbiAgICAgIGJ3ID0gYlszXTtcbiAgb3V0WzBdID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieTtcbiAgb3V0WzFdID0gYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBiejtcbiAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieDtcbiAgb3V0WzNdID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFggYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVgob3V0LCBhLCByYWQpIHtcbiAgcmFkICo9IDAuNTtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgdmFyIGJ4ID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGJ3ID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYXggKiBidyArIGF3ICogYng7XG4gIG91dFsxXSA9IGF5ICogYncgKyBheiAqIGJ4O1xuICBvdXRbMl0gPSBheiAqIGJ3IC0gYXkgKiBieDtcbiAgb3V0WzNdID0gYXcgKiBidyAtIGF4ICogYng7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVZKG91dCwgYSwgcmFkKSB7XG4gIHJhZCAqPSAwLjU7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIHZhciBieSA9IE1hdGguc2luKHJhZCksXG4gICAgICBidyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGF4ICogYncgLSBheiAqIGJ5O1xuICBvdXRbMV0gPSBheSAqIGJ3ICsgYXcgKiBieTtcbiAgb3V0WzJdID0gYXogKiBidyArIGF4ICogYnk7XG4gIG91dFszXSA9IGF3ICogYncgLSBheSAqIGJ5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIHJhZCkge1xuICByYWQgKj0gMC41O1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnogPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYncgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBheCAqIGJ3ICsgYXkgKiBiejtcbiAgb3V0WzFdID0gYXkgKiBidyAtIGF4ICogYno7XG4gIG91dFsyXSA9IGF6ICogYncgKyBhdyAqIGJ6O1xuICBvdXRbM10gPSBhdyAqIGJ3IC0gYXogKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBXIGNvbXBvbmVudCBvZiBhIHF1YXQgZnJvbSB0aGUgWCwgWSwgYW5kIFogY29tcG9uZW50cy5cclxuICogQXNzdW1lcyB0aGF0IHF1YXRlcm5pb24gaXMgMSB1bml0IGluIGxlbmd0aC5cclxuICogQW55IGV4aXN0aW5nIFcgY29tcG9uZW50IHdpbGwgYmUgaWdub3JlZC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBXIGNvbXBvbmVudCBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlVyhvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgb3V0WzJdID0gejtcbiAgb3V0WzNdID0gTWF0aC5zcXJ0KE1hdGguYWJzKDEuMCAtIHggKiB4IC0geSAqIHkgLSB6ICogeikpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgZXhwb25lbnRpYWwgb2YgYSB1bml0IHF1YXRlcm5pb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgdGhlIGV4cG9uZW50aWFsIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleHAob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl0sXG4gICAgICB3ID0gYVszXTtcbiAgdmFyIHIgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcbiAgdmFyIGV0ID0gTWF0aC5leHAodyk7XG4gIHZhciBzID0gciA+IDAgPyBldCAqIE1hdGguc2luKHIpIC8gciA6IDA7XG4gIG91dFswXSA9IHggKiBzO1xuICBvdXRbMV0gPSB5ICogcztcbiAgb3V0WzJdID0geiAqIHM7XG4gIG91dFszXSA9IGV0ICogTWF0aC5jb3Mocik7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIHVuaXQgcXVhdGVybmlvbi5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSB0aGUgZXhwb25lbnRpYWwgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxuKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdLFxuICAgICAgdyA9IGFbM107XG4gIHZhciByID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XG4gIHZhciB0ID0gciA+IDAgPyBNYXRoLmF0YW4yKHIsIHcpIC8gciA6IDA7XG4gIG91dFswXSA9IHggKiB0O1xuICBvdXRbMV0gPSB5ICogdDtcbiAgb3V0WzJdID0geiAqIHQ7XG4gIG91dFszXSA9IDAuNSAqIE1hdGgubG9nKHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIHNjYWxhciBwb3dlciBvZiBhIHVuaXQgcXVhdGVybmlvbi5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSB0aGUgZXhwb25lbnRpYWwgb2ZcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBxdWF0ZXJuaW9uIGJ5XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwb3cob3V0LCBhLCBiKSB7XG4gIGxuKG91dCwgYSk7XG4gIHNjYWxlKG91dCwgb3V0LCBiKTtcbiAgZXhwKG91dCwgb3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgLy8gYmVuY2htYXJrczpcbiAgLy8gICAgaHR0cDovL2pzcGVyZi5jb20vcXVhdGVybmlvbi1zbGVycC1pbXBsZW1lbnRhdGlvbnNcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgdmFyIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIGJ6ID0gYlsyXSxcbiAgICAgIGJ3ID0gYlszXTtcbiAgdmFyIG9tZWdhLCBjb3NvbSwgc2lub20sIHNjYWxlMCwgc2NhbGUxOyAvLyBjYWxjIGNvc2luZVxuXG4gIGNvc29tID0gYXggKiBieCArIGF5ICogYnkgKyBheiAqIGJ6ICsgYXcgKiBidzsgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXG5cbiAgaWYgKGNvc29tIDwgMC4wKSB7XG4gICAgY29zb20gPSAtY29zb207XG4gICAgYnggPSAtYng7XG4gICAgYnkgPSAtYnk7XG4gICAgYnogPSAtYno7XG4gICAgYncgPSAtYnc7XG4gIH0gLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xuXG5cbiAgaWYgKDEuMCAtIGNvc29tID4gZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIC8vIHN0YW5kYXJkIGNhc2UgKHNsZXJwKVxuICAgIG9tZWdhID0gTWF0aC5hY29zKGNvc29tKTtcbiAgICBzaW5vbSA9IE1hdGguc2luKG9tZWdhKTtcbiAgICBzY2FsZTAgPSBNYXRoLnNpbigoMS4wIC0gdCkgKiBvbWVnYSkgLyBzaW5vbTtcbiAgICBzY2FsZTEgPSBNYXRoLnNpbih0ICogb21lZ2EpIC8gc2lub207XG4gIH0gZWxzZSB7XG4gICAgLy8gXCJmcm9tXCIgYW5kIFwidG9cIiBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxuICAgIC8vICAuLi4gc28gd2UgY2FuIGRvIGEgbGluZWFyIGludGVycG9sYXRpb25cbiAgICBzY2FsZTAgPSAxLjAgLSB0O1xuICAgIHNjYWxlMSA9IHQ7XG4gIH0gLy8gY2FsY3VsYXRlIGZpbmFsIHZhbHVlc1xuXG5cbiAgb3V0WzBdID0gc2NhbGUwICogYXggKyBzY2FsZTEgKiBieDtcbiAgb3V0WzFdID0gc2NhbGUwICogYXkgKyBzY2FsZTEgKiBieTtcbiAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcbiAgb3V0WzNdID0gc2NhbGUwICogYXcgKyBzY2FsZTEgKiBidztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdW5pdCBxdWF0ZXJuaW9uXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQpIHtcbiAgLy8gSW1wbGVtZW50YXRpb24gb2YgaHR0cDovL3BsYW5uaW5nLmNzLnVpdWMuZWR1L25vZGUxOTguaHRtbFxuICAvLyBUT0RPOiBDYWxsaW5nIHJhbmRvbSAzIHRpbWVzIGlzIHByb2JhYmx5IG5vdCB0aGUgZmFzdGVzdCBzb2x1dGlvblxuICB2YXIgdTEgPSBnbE1hdHJpeC5SQU5ET00oKTtcbiAgdmFyIHUyID0gZ2xNYXRyaXguUkFORE9NKCk7XG4gIHZhciB1MyA9IGdsTWF0cml4LlJBTkRPTSgpO1xuICB2YXIgc3FydDFNaW51c1UxID0gTWF0aC5zcXJ0KDEgLSB1MSk7XG4gIHZhciBzcXJ0VTEgPSBNYXRoLnNxcnQodTEpO1xuICBvdXRbMF0gPSBzcXJ0MU1pbnVzVTEgKiBNYXRoLnNpbigyLjAgKiBNYXRoLlBJICogdTIpO1xuICBvdXRbMV0gPSBzcXJ0MU1pbnVzVTEgKiBNYXRoLmNvcygyLjAgKiBNYXRoLlBJICogdTIpO1xuICBvdXRbMl0gPSBzcXJ0VTEgKiBNYXRoLnNpbigyLjAgKiBNYXRoLlBJICogdTMpO1xuICBvdXRbM10gPSBzcXJ0VTEgKiBNYXRoLmNvcygyLjAgKiBNYXRoLlBJICogdTMpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGludmVyc2Ugb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgaW52ZXJzZSBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgZG90ID0gYTAgKiBhMCArIGExICogYTEgKyBhMiAqIGEyICsgYTMgKiBhMztcbiAgdmFyIGludkRvdCA9IGRvdCA/IDEuMCAvIGRvdCA6IDA7IC8vIFRPRE86IFdvdWxkIGJlIGZhc3RlciB0byByZXR1cm4gWzAsMCwwLDBdIGltbWVkaWF0ZWx5IGlmIGRvdCA9PSAwXG5cbiAgb3V0WzBdID0gLWEwICogaW52RG90O1xuICBvdXRbMV0gPSAtYTEgKiBpbnZEb3Q7XG4gIG91dFsyXSA9IC1hMiAqIGludkRvdDtcbiAgb3V0WzNdID0gYTMgKiBpbnZEb3Q7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgY29uanVnYXRlIG9mIGEgcXVhdFxyXG4gKiBJZiB0aGUgcXVhdGVybmlvbiBpcyBub3JtYWxpemVkLCB0aGlzIGZ1bmN0aW9uIGlzIGZhc3RlciB0aGFuIHF1YXQuaW52ZXJzZSBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIGNvbmp1Z2F0ZSBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29uanVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBxdWF0ZXJuaW9uIGZyb20gdGhlIGdpdmVuIDN4MyByb3RhdGlvbiBtYXRyaXguXHJcbiAqXHJcbiAqIE5PVEU6IFRoZSByZXN1bHRhbnQgcXVhdGVybmlvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28geW91IHNob3VsZCBiZSBzdXJlXHJcbiAqIHRvIHJlbm9ybWFsaXplIHRoZSBxdWF0ZXJuaW9uIHlvdXJzZWxmIHdoZXJlIG5lY2Vzc2FyeS5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7bWF0M30gbSByb3RhdGlvbiBtYXRyaXhcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWF0MyhvdXQsIG0pIHtcbiAgLy8gQWxnb3JpdGhtIGluIEtlbiBTaG9lbWFrZSdzIGFydGljbGUgaW4gMTk4NyBTSUdHUkFQSCBjb3Vyc2Ugbm90ZXNcbiAgLy8gYXJ0aWNsZSBcIlF1YXRlcm5pb24gQ2FsY3VsdXMgYW5kIEZhc3QgQW5pbWF0aW9uXCIuXG4gIHZhciBmVHJhY2UgPSBtWzBdICsgbVs0XSArIG1bOF07XG4gIHZhciBmUm9vdDtcblxuICBpZiAoZlRyYWNlID4gMC4wKSB7XG4gICAgLy8gfHd8ID4gMS8yLCBtYXkgYXMgd2VsbCBjaG9vc2UgdyA+IDEvMlxuICAgIGZSb290ID0gTWF0aC5zcXJ0KGZUcmFjZSArIDEuMCk7IC8vIDJ3XG5cbiAgICBvdXRbM10gPSAwLjUgKiBmUm9vdDtcbiAgICBmUm9vdCA9IDAuNSAvIGZSb290OyAvLyAxLyg0dylcblxuICAgIG91dFswXSA9IChtWzVdIC0gbVs3XSkgKiBmUm9vdDtcbiAgICBvdXRbMV0gPSAobVs2XSAtIG1bMl0pICogZlJvb3Q7XG4gICAgb3V0WzJdID0gKG1bMV0gLSBtWzNdKSAqIGZSb290O1xuICB9IGVsc2Uge1xuICAgIC8vIHx3fCA8PSAxLzJcbiAgICB2YXIgaSA9IDA7XG4gICAgaWYgKG1bNF0gPiBtWzBdKSBpID0gMTtcbiAgICBpZiAobVs4XSA+IG1baSAqIDMgKyBpXSkgaSA9IDI7XG4gICAgdmFyIGogPSAoaSArIDEpICUgMztcbiAgICB2YXIgayA9IChpICsgMikgJSAzO1xuICAgIGZSb290ID0gTWF0aC5zcXJ0KG1baSAqIDMgKyBpXSAtIG1baiAqIDMgKyBqXSAtIG1bayAqIDMgKyBrXSArIDEuMCk7XG4gICAgb3V0W2ldID0gMC41ICogZlJvb3Q7XG4gICAgZlJvb3QgPSAwLjUgLyBmUm9vdDtcbiAgICBvdXRbM10gPSAobVtqICogMyArIGtdIC0gbVtrICogMyArIGpdKSAqIGZSb290O1xuICAgIG91dFtqXSA9IChtW2ogKiAzICsgaV0gKyBtW2kgKiAzICsgal0pICogZlJvb3Q7XG4gICAgb3V0W2tdID0gKG1bayAqIDMgKyBpXSArIG1baSAqIDMgKyBrXSkgKiBmUm9vdDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIHF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gZXVsZXIgYW5nbGUgeCwgeSwgei5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7eH0gQW5nbGUgdG8gcm90YXRlIGFyb3VuZCBYIGF4aXMgaW4gZGVncmVlcy5cclxuICogQHBhcmFtIHt5fSBBbmdsZSB0byByb3RhdGUgYXJvdW5kIFkgYXhpcyBpbiBkZWdyZWVzLlxyXG4gKiBAcGFyYW0ge3p9IEFuZ2xlIHRvIHJvdGF0ZSBhcm91bmQgWiBheGlzIGluIGRlZ3JlZXMuXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV1bGVyKG91dCwgeCwgeSwgeikge1xuICB2YXIgaGFsZlRvUmFkID0gMC41ICogTWF0aC5QSSAvIDE4MC4wO1xuICB4ICo9IGhhbGZUb1JhZDtcbiAgeSAqPSBoYWxmVG9SYWQ7XG4gIHogKj0gaGFsZlRvUmFkO1xuICB2YXIgc3ggPSBNYXRoLnNpbih4KTtcbiAgdmFyIGN4ID0gTWF0aC5jb3MoeCk7XG4gIHZhciBzeSA9IE1hdGguc2luKHkpO1xuICB2YXIgY3kgPSBNYXRoLmNvcyh5KTtcbiAgdmFyIHN6ID0gTWF0aC5zaW4oeik7XG4gIHZhciBjeiA9IE1hdGguY29zKHopO1xuICBvdXRbMF0gPSBzeCAqIGN5ICogY3ogLSBjeCAqIHN5ICogc3o7XG4gIG91dFsxXSA9IGN4ICogc3kgKiBjeiArIHN4ICogY3kgKiBzejtcbiAgb3V0WzJdID0gY3ggKiBjeSAqIHN6IC0gc3ggKiBzeSAqIGN6O1xuICBvdXRbM10gPSBjeCAqIGN5ICogY3ogKyBzeCAqIHN5ICogc3o7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHF1YXRlbmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiAncXVhdCgnICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcpJztcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBjbG9uZSA9IHZlYzQuY2xvbmU7XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBxdWF0IGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdyBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZnJvbVZhbHVlcyA9IHZlYzQuZnJvbVZhbHVlcztcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgcXVhdCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIHNvdXJjZSBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGNvcHkgPSB2ZWM0LmNvcHk7XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgcXVhdCB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdyBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzZXQgPSB2ZWM0LnNldDtcbi8qKlxyXG4gKiBBZGRzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGFkZCA9IHZlYzQuYWRkO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIFNjYWxlcyBhIHF1YXQgYnkgYSBzY2FsYXIgbnVtYmVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgdmVjdG9yIHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgdmVjdG9yIGJ5XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNjYWxlID0gdmVjNC5zY2FsZTtcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRvdCA9IHZlYzQuZG90O1xuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlcnAgPSB2ZWM0LmxlcnA7XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCB2YXIgbGVuZ3RoID0gdmVjNC5sZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbiA9IGxlbmd0aDtcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3F1YXJlZExlbmd0aCA9IHZlYzQuc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckxlbiA9IHNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogTm9ybWFsaXplIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG5vcm1hbGl6ZSA9IHZlYzQubm9ybWFsaXplO1xuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHF1YXRlcm5pb25zIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIFRoZSBmaXJzdCBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgVGhlIHNlY29uZCBxdWF0ZXJuaW9uLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCB2YXIgZXhhY3RFcXVhbHMgPSB2ZWM0LmV4YWN0RXF1YWxzO1xuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHF1YXRlcm5pb25zIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgdmFyIGVxdWFscyA9IHZlYzQuZXF1YWxzO1xuLyoqXHJcbiAqIFNldHMgYSBxdWF0ZXJuaW9uIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBvbmVcclxuICogdmVjdG9yIHRvIGFub3RoZXIuXHJcbiAqXHJcbiAqIEJvdGggdmVjdG9ycyBhcmUgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGluaXRpYWwgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCB2YXIgcm90YXRpb25UbyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRtcHZlYzMgPSB2ZWMzLmNyZWF0ZSgpO1xuICB2YXIgeFVuaXRWZWMzID0gdmVjMy5mcm9tVmFsdWVzKDEsIDAsIDApO1xuICB2YXIgeVVuaXRWZWMzID0gdmVjMy5mcm9tVmFsdWVzKDAsIDEsIDApO1xuICByZXR1cm4gZnVuY3Rpb24gKG91dCwgYSwgYikge1xuICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcblxuICAgIGlmIChkb3QgPCAtMC45OTk5OTkpIHtcbiAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgeFVuaXRWZWMzLCBhKTtcbiAgICAgIGlmICh2ZWMzLmxlbih0bXB2ZWMzKSA8IDAuMDAwMDAxKSB2ZWMzLmNyb3NzKHRtcHZlYzMsIHlVbml0VmVjMywgYSk7XG4gICAgICB2ZWMzLm5vcm1hbGl6ZSh0bXB2ZWMzLCB0bXB2ZWMzKTtcbiAgICAgIHNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xuICAgICAgcmV0dXJuIG91dDtcbiAgICB9IGVsc2UgaWYgKGRvdCA+IDAuOTk5OTk5KSB7XG4gICAgICBvdXRbMF0gPSAwO1xuICAgICAgb3V0WzFdID0gMDtcbiAgICAgIG91dFsyXSA9IDA7XG4gICAgICBvdXRbM10gPSAxO1xuICAgICAgcmV0dXJuIG91dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmVjMy5jcm9zcyh0bXB2ZWMzLCBhLCBiKTtcbiAgICAgIG91dFswXSA9IHRtcHZlYzNbMF07XG4gICAgICBvdXRbMV0gPSB0bXB2ZWMzWzFdO1xuICAgICAgb3V0WzJdID0gdG1wdmVjM1syXTtcbiAgICAgIG91dFszXSA9IDEgKyBkb3Q7XG4gICAgICByZXR1cm4gbm9ybWFsaXplKG91dCwgb3V0KTtcbiAgICB9XG4gIH07XG59KCk7XG4vKipcclxuICogUGVyZm9ybXMgYSBzcGhlcmljYWwgbGluZWFyIGludGVycG9sYXRpb24gd2l0aCB0d28gY29udHJvbCBwb2ludHNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYyB0aGUgdGhpcmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGQgdGhlIGZvdXJ0aCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IHZhciBzcWxlcnAgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZW1wMSA9IGNyZWF0ZSgpO1xuICB2YXIgdGVtcDIgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvdXQsIGEsIGIsIGMsIGQsIHQpIHtcbiAgICBzbGVycCh0ZW1wMSwgYSwgZCwgdCk7XG4gICAgc2xlcnAodGVtcDIsIGIsIGMsIHQpO1xuICAgIHNsZXJwKG91dCwgdGVtcDEsIHRlbXAyLCAyICogdCAqICgxIC0gdCkpO1xuICAgIHJldHVybiBvdXQ7XG4gIH07XG59KCk7XG4vKipcclxuICogU2V0cyB0aGUgc3BlY2lmaWVkIHF1YXRlcm5pb24gd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW5cclxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXHJcbiAqIHBlcnBlbmRpY3VsYXIgdG8gYWxsIG90aGVyIHNwZWNpZmllZCBheGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHJpZ2h0IHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInJpZ2h0XCIgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgICAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwidXBcIiBkaXJlY3Rpb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IHZhciBzZXRBeGVzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbWF0ciA9IG1hdDMuY3JlYXRlKCk7XG4gIHJldHVybiBmdW5jdGlvbiAob3V0LCB2aWV3LCByaWdodCwgdXApIHtcbiAgICBtYXRyWzBdID0gcmlnaHRbMF07XG4gICAgbWF0clszXSA9IHJpZ2h0WzFdO1xuICAgIG1hdHJbNl0gPSByaWdodFsyXTtcbiAgICBtYXRyWzFdID0gdXBbMF07XG4gICAgbWF0cls0XSA9IHVwWzFdO1xuICAgIG1hdHJbN10gPSB1cFsyXTtcbiAgICBtYXRyWzJdID0gLXZpZXdbMF07XG4gICAgbWF0cls1XSA9IC12aWV3WzFdO1xuICAgIG1hdHJbOF0gPSAtdmlld1syXTtcbiAgICByZXR1cm4gbm9ybWFsaXplKG91dCwgZnJvbU1hdDMob3V0LCBtYXRyKSk7XG4gIH07XG59KCk7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG5pbXBvcnQgKiBhcyBxdWF0IGZyb20gXCIuL3F1YXQuanNcIjtcbmltcG9ydCAqIGFzIG1hdDQgZnJvbSBcIi4vbWF0NC5qc1wiO1xuLyoqXHJcbiAqIER1YWwgUXVhdGVybmlvbjxicj5cclxuICogRm9ybWF0OiBbcmVhbCwgZHVhbF08YnI+XHJcbiAqIFF1YXRlcm5pb24gZm9ybWF0OiBYWVpXPGJyPlxyXG4gKiBNYWtlIHN1cmUgdG8gaGF2ZSBub3JtYWxpemVkIGR1YWwgcXVhdGVybmlvbnMsIG90aGVyd2lzZSB0aGUgZnVuY3Rpb25zIG1heSBub3Qgd29yayBhcyBpbnRlbmRlZC48YnI+XHJcbiAqIEBtb2R1bGUgcXVhdDJcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IGR1YWwgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IGEgbmV3IGR1YWwgcXVhdGVybmlvbiBbcmVhbCAtPiByb3RhdGlvbiwgZHVhbCAtPiB0cmFuc2xhdGlvbl1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBkcSA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDgpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIGRxWzBdID0gMDtcbiAgICBkcVsxXSA9IDA7XG4gICAgZHFbMl0gPSAwO1xuICAgIGRxWzRdID0gMDtcbiAgICBkcVs1XSA9IDA7XG4gICAgZHFbNl0gPSAwO1xuICAgIGRxWzddID0gMDtcbiAgfVxuXG4gIGRxWzNdID0gMTtcbiAgcmV0dXJuIGRxO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXQyfSBuZXcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIGRxID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOCk7XG4gIGRxWzBdID0gYVswXTtcbiAgZHFbMV0gPSBhWzFdO1xuICBkcVsyXSA9IGFbMl07XG4gIGRxWzNdID0gYVszXTtcbiAgZHFbNF0gPSBhWzRdO1xuICBkcVs1XSA9IGFbNV07XG4gIGRxWzZdID0gYVs2XTtcbiAgZHFbN10gPSBhWzddO1xuICByZXR1cm4gZHE7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBkdWFsIHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4MSBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geTEgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoxIFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3MSBXIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geDIgWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkyIFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MiBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdzIgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3F1YXQyfSBuZXcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoeDEsIHkxLCB6MSwgdzEsIHgyLCB5MiwgejIsIHcyKSB7XG4gIHZhciBkcSA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDgpO1xuICBkcVswXSA9IHgxO1xuICBkcVsxXSA9IHkxO1xuICBkcVsyXSA9IHoxO1xuICBkcVszXSA9IHcxO1xuICBkcVs0XSA9IHgyO1xuICBkcVs1XSA9IHkyO1xuICBkcVs2XSA9IHoyO1xuICBkcVs3XSA9IHcyO1xuICByZXR1cm4gZHE7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBkdWFsIHF1YXQgZnJvbSB0aGUgZ2l2ZW4gdmFsdWVzIChxdWF0IGFuZCB0cmFuc2xhdGlvbilcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgxIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejEgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcxIFcgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4MiBYIGNvbXBvbmVudCAodHJhbnNsYXRpb24pXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MiBZIGNvbXBvbmVudCAodHJhbnNsYXRpb24pXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MiBaIGNvbXBvbmVudCAodHJhbnNsYXRpb24pXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gbmV3IGR1YWwgcXVhdGVybmlvblxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvblZhbHVlcyh4MSwgeTEsIHoxLCB3MSwgeDIsIHkyLCB6Mikge1xuICB2YXIgZHEgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg4KTtcbiAgZHFbMF0gPSB4MTtcbiAgZHFbMV0gPSB5MTtcbiAgZHFbMl0gPSB6MTtcbiAgZHFbM10gPSB3MTtcbiAgdmFyIGF4ID0geDIgKiAwLjUsXG4gICAgICBheSA9IHkyICogMC41LFxuICAgICAgYXogPSB6MiAqIDAuNTtcbiAgZHFbNF0gPSBheCAqIHcxICsgYXkgKiB6MSAtIGF6ICogeTE7XG4gIGRxWzVdID0gYXkgKiB3MSArIGF6ICogeDEgLSBheCAqIHoxO1xuICBkcVs2XSA9IGF6ICogdzEgKyBheCAqIHkxIC0gYXkgKiB4MTtcbiAgZHFbN10gPSAtYXggKiB4MSAtIGF5ICogeTEgLSBheiAqIHoxO1xuICByZXR1cm4gZHE7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIGR1YWwgcXVhdCBmcm9tIGEgcXVhdGVybmlvbiBhbmQgYSB0cmFuc2xhdGlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBxIGEgbm9ybWFsaXplZCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdCB0cmFubGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIHEsIHQpIHtcbiAgdmFyIGF4ID0gdFswXSAqIDAuNSxcbiAgICAgIGF5ID0gdFsxXSAqIDAuNSxcbiAgICAgIGF6ID0gdFsyXSAqIDAuNSxcbiAgICAgIGJ4ID0gcVswXSxcbiAgICAgIGJ5ID0gcVsxXSxcbiAgICAgIGJ6ID0gcVsyXSxcbiAgICAgIGJ3ID0gcVszXTtcbiAgb3V0WzBdID0gYng7XG4gIG91dFsxXSA9IGJ5O1xuICBvdXRbMl0gPSBiejtcbiAgb3V0WzNdID0gYnc7XG4gIG91dFs0XSA9IGF4ICogYncgKyBheSAqIGJ6IC0gYXogKiBieTtcbiAgb3V0WzVdID0gYXkgKiBidyArIGF6ICogYnggLSBheCAqIGJ6O1xuICBvdXRbNl0gPSBheiAqIGJ3ICsgYXggKiBieSAtIGF5ICogYng7XG4gIG91dFs3XSA9IC1heCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIGR1YWwgcXVhdCBmcm9tIGEgdHJhbnNsYXRpb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjM30gdCB0cmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVRyYW5zbGF0aW9uKG91dCwgdCkge1xuICBvdXRbMF0gPSAwO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAxO1xuICBvdXRbNF0gPSB0WzBdICogMC41O1xuICBvdXRbNV0gPSB0WzFdICogMC41O1xuICBvdXRbNl0gPSB0WzJdICogMC41O1xuICBvdXRbN10gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBkdWFsIHF1YXQgZnJvbSBhIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gcSB0aGUgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb24ob3V0LCBxKSB7XG4gIG91dFswXSA9IHFbMF07XG4gIG91dFsxXSA9IHFbMV07XG4gIG91dFsyXSA9IHFbMl07XG4gIG91dFszXSA9IHFbM107XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBkdWFsIHF1YXQgZnJvbSBhIG1hdHJpeCAoNHg0KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IGR1YWwgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWF0NChvdXQsIGEpIHtcbiAgLy9UT0RPIE9wdGltaXplIHRoaXNcbiAgdmFyIG91dGVyID0gcXVhdC5jcmVhdGUoKTtcbiAgbWF0NC5nZXRSb3RhdGlvbihvdXRlciwgYSk7XG4gIHZhciB0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG4gIG1hdDQuZ2V0VHJhbnNsYXRpb24odCwgYSk7XG4gIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG91dCwgb3V0ZXIsIHQpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBkdWFsIHF1YXQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgc291cmNlIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIGR1YWwgcXVhdCB0byB0aGUgaWRlbnRpdHkgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBkdWFsIHF1YXQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4MSBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geTEgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoxIFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3MSBXIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geDIgWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkyIFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MiBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdzIgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgeDEsIHkxLCB6MSwgdzEsIHgyLCB5MiwgejIsIHcyKSB7XG4gIG91dFswXSA9IHgxO1xuICBvdXRbMV0gPSB5MTtcbiAgb3V0WzJdID0gejE7XG4gIG91dFszXSA9IHcxO1xuICBvdXRbNF0gPSB4MjtcbiAgb3V0WzVdID0geTI7XG4gIG91dFs2XSA9IHoyO1xuICBvdXRbN10gPSB3MjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZXRzIHRoZSByZWFsIHBhcnQgb2YgYSBkdWFsIHF1YXRcclxuICogQHBhcmFtICB7cXVhdH0gb3V0IHJlYWwgcGFydFxyXG4gKiBAcGFyYW0gIHtxdWF0Mn0gYSBEdWFsIFF1YXRlcm5pb25cclxuICogQHJldHVybiB7cXVhdH0gcmVhbCBwYXJ0XHJcbiAqL1xuXG5leHBvcnQgdmFyIGdldFJlYWwgPSBxdWF0LmNvcHk7XG4vKipcclxuICogR2V0cyB0aGUgZHVhbCBwYXJ0IG9mIGEgZHVhbCBxdWF0XHJcbiAqIEBwYXJhbSAge3F1YXR9IG91dCBkdWFsIHBhcnRcclxuICogQHBhcmFtICB7cXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm4ge3F1YXR9IGR1YWwgcGFydFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldER1YWwob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbNF07XG4gIG91dFsxXSA9IGFbNV07XG4gIG91dFsyXSA9IGFbNl07XG4gIG91dFszXSA9IGFbN107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSByZWFsIGNvbXBvbmVudCBvZiBhIGR1YWwgcXVhdCB0byB0aGUgZ2l2ZW4gcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBhIHF1YXRlcm5pb24gcmVwcmVzZW50aW5nIHRoZSByZWFsIHBhcnRcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNldFJlYWwgPSBxdWF0LmNvcHk7XG4vKipcclxuICogU2V0IHRoZSBkdWFsIGNvbXBvbmVudCBvZiBhIGR1YWwgcXVhdCB0byB0aGUgZ2l2ZW4gcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBhIHF1YXRlcm5pb24gcmVwcmVzZW50aW5nIHRoZSBkdWFsIHBhcnRcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0RHVhbChvdXQsIHEpIHtcbiAgb3V0WzRdID0gcVswXTtcbiAgb3V0WzVdID0gcVsxXTtcbiAgb3V0WzZdID0gcVsyXTtcbiAgb3V0WzddID0gcVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZXRzIHRoZSB0cmFuc2xhdGlvbiBvZiBhIG5vcm1hbGl6ZWQgZHVhbCBxdWF0XHJcbiAqIEBwYXJhbSAge3ZlYzN9IG91dCB0cmFuc2xhdGlvblxyXG4gKiBAcGFyYW0gIHtxdWF0Mn0gYSBEdWFsIFF1YXRlcm5pb24gdG8gYmUgZGVjb21wb3NlZFxyXG4gKiBAcmV0dXJuIHt2ZWMzfSB0cmFuc2xhdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9uKG91dCwgYSkge1xuICB2YXIgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddLFxuICAgICAgYnggPSAtYVswXSxcbiAgICAgIGJ5ID0gLWFbMV0sXG4gICAgICBieiA9IC1hWzJdLFxuICAgICAgYncgPSBhWzNdO1xuICBvdXRbMF0gPSAoYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSkgKiAyO1xuICBvdXRbMV0gPSAoYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieikgKiAyO1xuICBvdXRbMl0gPSAoYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieCkgKiAyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zbGF0ZXMgYSBkdWFsIHF1YXQgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0ZXJuaW9uIHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShvdXQsIGEsIHYpIHtcbiAgdmFyIGF4MSA9IGFbMF0sXG4gICAgICBheTEgPSBhWzFdLFxuICAgICAgYXoxID0gYVsyXSxcbiAgICAgIGF3MSA9IGFbM10sXG4gICAgICBieDEgPSB2WzBdICogMC41LFxuICAgICAgYnkxID0gdlsxXSAqIDAuNSxcbiAgICAgIGJ6MSA9IHZbMl0gKiAwLjUsXG4gICAgICBheDIgPSBhWzRdLFxuICAgICAgYXkyID0gYVs1XSxcbiAgICAgIGF6MiA9IGFbNl0sXG4gICAgICBhdzIgPSBhWzddO1xuICBvdXRbMF0gPSBheDE7XG4gIG91dFsxXSA9IGF5MTtcbiAgb3V0WzJdID0gYXoxO1xuICBvdXRbM10gPSBhdzE7XG4gIG91dFs0XSA9IGF3MSAqIGJ4MSArIGF5MSAqIGJ6MSAtIGF6MSAqIGJ5MSArIGF4MjtcbiAgb3V0WzVdID0gYXcxICogYnkxICsgYXoxICogYngxIC0gYXgxICogYnoxICsgYXkyO1xuICBvdXRbNl0gPSBhdzEgKiBiejEgKyBheDEgKiBieTEgLSBheTEgKiBieDEgKyBhejI7XG4gIG91dFs3XSA9IC1heDEgKiBieDEgLSBheTEgKiBieTEgLSBhejEgKiBiejEgKyBhdzI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBhcm91bmQgdGhlIFggYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0ZXJuaW9uIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGhvdyBmYXIgc2hvdWxkIHRoZSByb3RhdGlvbiBiZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVgob3V0LCBhLCByYWQpIHtcbiAgdmFyIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXSxcbiAgICAgIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XSxcbiAgICAgIGF4MSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnksXG4gICAgICBheTEgPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6LFxuICAgICAgYXoxID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieCxcbiAgICAgIGF3MSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHF1YXQucm90YXRlWChvdXQsIGEsIHJhZCk7XG4gIGJ4ID0gb3V0WzBdO1xuICBieSA9IG91dFsxXTtcbiAgYnogPSBvdXRbMl07XG4gIGJ3ID0gb3V0WzNdO1xuICBvdXRbNF0gPSBheDEgKiBidyArIGF3MSAqIGJ4ICsgYXkxICogYnogLSBhejEgKiBieTtcbiAgb3V0WzVdID0gYXkxICogYncgKyBhdzEgKiBieSArIGF6MSAqIGJ4IC0gYXgxICogYno7XG4gIG91dFs2XSA9IGF6MSAqIGJ3ICsgYXcxICogYnogKyBheDEgKiBieSAtIGF5MSAqIGJ4O1xuICBvdXRbN10gPSBhdzEgKiBidyAtIGF4MSAqIGJ4IC0gYXkxICogYnkgLSBhejEgKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgZHVhbCBxdWF0IGFyb3VuZCB0aGUgWSBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgaG93IGZhciBzaG91bGQgdGhlIHJvdGF0aW9uIGJlXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWShvdXQsIGEsIHJhZCkge1xuICB2YXIgYnggPSAtYVswXSxcbiAgICAgIGJ5ID0gLWFbMV0sXG4gICAgICBieiA9IC1hWzJdLFxuICAgICAgYncgPSBhWzNdLFxuICAgICAgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddLFxuICAgICAgYXgxID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSxcbiAgICAgIGF5MSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnosXG4gICAgICBhejEgPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4LFxuICAgICAgYXcxID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcXVhdC5yb3RhdGVZKG91dCwgYSwgcmFkKTtcbiAgYnggPSBvdXRbMF07XG4gIGJ5ID0gb3V0WzFdO1xuICBieiA9IG91dFsyXTtcbiAgYncgPSBvdXRbM107XG4gIG91dFs0XSA9IGF4MSAqIGJ3ICsgYXcxICogYnggKyBheTEgKiBieiAtIGF6MSAqIGJ5O1xuICBvdXRbNV0gPSBheTEgKiBidyArIGF3MSAqIGJ5ICsgYXoxICogYnggLSBheDEgKiBiejtcbiAgb3V0WzZdID0gYXoxICogYncgKyBhdzEgKiBieiArIGF4MSAqIGJ5IC0gYXkxICogYng7XG4gIG91dFs3XSA9IGF3MSAqIGJ3IC0gYXgxICogYnggLSBheTEgKiBieSAtIGF6MSAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYXJvdW5kIHRoZSBaIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBob3cgZmFyIHNob3VsZCB0aGUgcm90YXRpb24gYmVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVaKG91dCwgYSwgcmFkKSB7XG4gIHZhciBieCA9IC1hWzBdLFxuICAgICAgYnkgPSAtYVsxXSxcbiAgICAgIGJ6ID0gLWFbMl0sXG4gICAgICBidyA9IGFbM10sXG4gICAgICBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN10sXG4gICAgICBheDEgPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5LFxuICAgICAgYXkxID0gYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieixcbiAgICAgIGF6MSA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngsXG4gICAgICBhdzEgPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICBxdWF0LnJvdGF0ZVoob3V0LCBhLCByYWQpO1xuICBieCA9IG91dFswXTtcbiAgYnkgPSBvdXRbMV07XG4gIGJ6ID0gb3V0WzJdO1xuICBidyA9IG91dFszXTtcbiAgb3V0WzRdID0gYXgxICogYncgKyBhdzEgKiBieCArIGF5MSAqIGJ6IC0gYXoxICogYnk7XG4gIG91dFs1XSA9IGF5MSAqIGJ3ICsgYXcxICogYnkgKyBhejEgKiBieCAtIGF4MSAqIGJ6O1xuICBvdXRbNl0gPSBhejEgKiBidyArIGF3MSAqIGJ6ICsgYXgxICogYnkgLSBheTEgKiBieDtcbiAgb3V0WzddID0gYXcxICogYncgLSBheDEgKiBieCAtIGF5MSAqIGJ5IC0gYXoxICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBieSBhIGdpdmVuIHF1YXRlcm5pb24gKGEgKiBxKVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0ZXJuaW9uIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgcXVhdGVybmlvbiB0byByb3RhdGUgYnlcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVCeVF1YXRBcHBlbmQob3V0LCBhLCBxKSB7XG4gIHZhciBxeCA9IHFbMF0sXG4gICAgICBxeSA9IHFbMV0sXG4gICAgICBxeiA9IHFbMl0sXG4gICAgICBxdyA9IHFbM10sXG4gICAgICBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIG91dFswXSA9IGF4ICogcXcgKyBhdyAqIHF4ICsgYXkgKiBxeiAtIGF6ICogcXk7XG4gIG91dFsxXSA9IGF5ICogcXcgKyBhdyAqIHF5ICsgYXogKiBxeCAtIGF4ICogcXo7XG4gIG91dFsyXSA9IGF6ICogcXcgKyBhdyAqIHF6ICsgYXggKiBxeSAtIGF5ICogcXg7XG4gIG91dFszXSA9IGF3ICogcXcgLSBheCAqIHF4IC0gYXkgKiBxeSAtIGF6ICogcXo7XG4gIGF4ID0gYVs0XTtcbiAgYXkgPSBhWzVdO1xuICBheiA9IGFbNl07XG4gIGF3ID0gYVs3XTtcbiAgb3V0WzRdID0gYXggKiBxdyArIGF3ICogcXggKyBheSAqIHF6IC0gYXogKiBxeTtcbiAgb3V0WzVdID0gYXkgKiBxdyArIGF3ICogcXkgKyBheiAqIHF4IC0gYXggKiBxejtcbiAgb3V0WzZdID0gYXogKiBxdyArIGF3ICogcXogKyBheCAqIHF5IC0gYXkgKiBxeDtcbiAgb3V0WzddID0gYXcgKiBxdyAtIGF4ICogcXggLSBheSAqIHF5IC0gYXogKiBxejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgZHVhbCBxdWF0IGJ5IGEgZ2l2ZW4gcXVhdGVybmlvbiAocSAqIGEpXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgcXVhdGVybmlvbiB0byByb3RhdGUgYnlcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0ZXJuaW9uIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZUJ5UXVhdFByZXBlbmQob3V0LCBxLCBhKSB7XG4gIHZhciBxeCA9IHFbMF0sXG4gICAgICBxeSA9IHFbMV0sXG4gICAgICBxeiA9IHFbMl0sXG4gICAgICBxdyA9IHFbM10sXG4gICAgICBieCA9IGFbMF0sXG4gICAgICBieSA9IGFbMV0sXG4gICAgICBieiA9IGFbMl0sXG4gICAgICBidyA9IGFbM107XG4gIG91dFswXSA9IHF4ICogYncgKyBxdyAqIGJ4ICsgcXkgKiBieiAtIHF6ICogYnk7XG4gIG91dFsxXSA9IHF5ICogYncgKyBxdyAqIGJ5ICsgcXogKiBieCAtIHF4ICogYno7XG4gIG91dFsyXSA9IHF6ICogYncgKyBxdyAqIGJ6ICsgcXggKiBieSAtIHF5ICogYng7XG4gIG91dFszXSA9IHF3ICogYncgLSBxeCAqIGJ4IC0gcXkgKiBieSAtIHF6ICogYno7XG4gIGJ4ID0gYVs0XTtcbiAgYnkgPSBhWzVdO1xuICBieiA9IGFbNl07XG4gIGJ3ID0gYVs3XTtcbiAgb3V0WzRdID0gcXggKiBidyArIHF3ICogYnggKyBxeSAqIGJ6IC0gcXogKiBieTtcbiAgb3V0WzVdID0gcXkgKiBidyArIHF3ICogYnkgKyBxeiAqIGJ4IC0gcXggKiBiejtcbiAgb3V0WzZdID0gcXogKiBidyArIHF3ICogYnogKyBxeCAqIGJ5IC0gcXkgKiBieDtcbiAgb3V0WzddID0gcXcgKiBidyAtIHF4ICogYnggLSBxeSAqIGJ5IC0gcXogKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgZHVhbCBxdWF0IGFyb3VuZCBhIGdpdmVuIGF4aXMuIERvZXMgdGhlIG5vcm1hbGlzYXRpb24gYXV0b21hdGljYWxseVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0ZXJuaW9uIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIGhvdyBmYXIgdGhlIHJvdGF0aW9uIHNob3VsZCBiZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZUFyb3VuZEF4aXMob3V0LCBhLCBheGlzLCByYWQpIHtcbiAgLy9TcGVjaWFsIGNhc2UgZm9yIHJhZCA9IDBcbiAgaWYgKE1hdGguYWJzKHJhZCkgPCBnbE1hdHJpeC5FUFNJTE9OKSB7XG4gICAgcmV0dXJuIGNvcHkob3V0LCBhKTtcbiAgfVxuXG4gIHZhciBheGlzTGVuZ3RoID0gTWF0aC5oeXBvdChheGlzWzBdLCBheGlzWzFdLCBheGlzWzJdKTtcbiAgcmFkID0gcmFkICogMC41O1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBieCA9IHMgKiBheGlzWzBdIC8gYXhpc0xlbmd0aDtcbiAgdmFyIGJ5ID0gcyAqIGF4aXNbMV0gLyBheGlzTGVuZ3RoO1xuICB2YXIgYnogPSBzICogYXhpc1syXSAvIGF4aXNMZW5ndGg7XG4gIHZhciBidyA9IE1hdGguY29zKHJhZCk7XG4gIHZhciBheDEgPSBhWzBdLFxuICAgICAgYXkxID0gYVsxXSxcbiAgICAgIGF6MSA9IGFbMl0sXG4gICAgICBhdzEgPSBhWzNdO1xuICBvdXRbMF0gPSBheDEgKiBidyArIGF3MSAqIGJ4ICsgYXkxICogYnogLSBhejEgKiBieTtcbiAgb3V0WzFdID0gYXkxICogYncgKyBhdzEgKiBieSArIGF6MSAqIGJ4IC0gYXgxICogYno7XG4gIG91dFsyXSA9IGF6MSAqIGJ3ICsgYXcxICogYnogKyBheDEgKiBieSAtIGF5MSAqIGJ4O1xuICBvdXRbM10gPSBhdzEgKiBidyAtIGF4MSAqIGJ4IC0gYXkxICogYnkgLSBhejEgKiBiejtcbiAgdmFyIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XTtcbiAgb3V0WzRdID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieTtcbiAgb3V0WzVdID0gYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBiejtcbiAgb3V0WzZdID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieDtcbiAgb3V0WzddID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBkdWFsIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV07XG4gIG91dFs2XSA9IGFbNl0gKyBiWzZdO1xuICBvdXRbN10gPSBhWzddICsgYls3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBkdWFsIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYXgwID0gYVswXSxcbiAgICAgIGF5MCA9IGFbMV0sXG4gICAgICBhejAgPSBhWzJdLFxuICAgICAgYXcwID0gYVszXSxcbiAgICAgIGJ4MSA9IGJbNF0sXG4gICAgICBieTEgPSBiWzVdLFxuICAgICAgYnoxID0gYls2XSxcbiAgICAgIGJ3MSA9IGJbN10sXG4gICAgICBheDEgPSBhWzRdLFxuICAgICAgYXkxID0gYVs1XSxcbiAgICAgIGF6MSA9IGFbNl0sXG4gICAgICBhdzEgPSBhWzddLFxuICAgICAgYngwID0gYlswXSxcbiAgICAgIGJ5MCA9IGJbMV0sXG4gICAgICBiejAgPSBiWzJdLFxuICAgICAgYncwID0gYlszXTtcbiAgb3V0WzBdID0gYXgwICogYncwICsgYXcwICogYngwICsgYXkwICogYnowIC0gYXowICogYnkwO1xuICBvdXRbMV0gPSBheTAgKiBidzAgKyBhdzAgKiBieTAgKyBhejAgKiBieDAgLSBheDAgKiBiejA7XG4gIG91dFsyXSA9IGF6MCAqIGJ3MCArIGF3MCAqIGJ6MCArIGF4MCAqIGJ5MCAtIGF5MCAqIGJ4MDtcbiAgb3V0WzNdID0gYXcwICogYncwIC0gYXgwICogYngwIC0gYXkwICogYnkwIC0gYXowICogYnowO1xuICBvdXRbNF0gPSBheDAgKiBidzEgKyBhdzAgKiBieDEgKyBheTAgKiBiejEgLSBhejAgKiBieTEgKyBheDEgKiBidzAgKyBhdzEgKiBieDAgKyBheTEgKiBiejAgLSBhejEgKiBieTA7XG4gIG91dFs1XSA9IGF5MCAqIGJ3MSArIGF3MCAqIGJ5MSArIGF6MCAqIGJ4MSAtIGF4MCAqIGJ6MSArIGF5MSAqIGJ3MCArIGF3MSAqIGJ5MCArIGF6MSAqIGJ4MCAtIGF4MSAqIGJ6MDtcbiAgb3V0WzZdID0gYXowICogYncxICsgYXcwICogYnoxICsgYXgwICogYnkxIC0gYXkwICogYngxICsgYXoxICogYncwICsgYXcxICogYnowICsgYXgxICogYnkwIC0gYXkxICogYngwO1xuICBvdXRbN10gPSBhdzAgKiBidzEgLSBheDAgKiBieDEgLSBheTAgKiBieTEgLSBhejAgKiBiejEgKyBhdzEgKiBidzAgLSBheDEgKiBieDAgLSBheTEgKiBieTAgLSBhejEgKiBiejA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Mi5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIFNjYWxlcyBhIGR1YWwgcXVhdCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0XHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIGR1YWwgcXVhdCBieVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIG91dFs0XSA9IGFbNF0gKiBiO1xuICBvdXRbNV0gPSBhWzVdICogYjtcbiAgb3V0WzZdID0gYVs2XSAqIGI7XG4gIG91dFs3XSA9IGFbN10gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBkdWFsIHF1YXQncyAoVGhlIGRvdCBwcm9kdWN0IG9mIHRoZSByZWFsIHBhcnRzKVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRvdCA9IHF1YXQuZG90O1xuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gZHVhbCBxdWF0cydzXHJcbiAqIE5PVEU6IFRoZSByZXN1bHRpbmcgZHVhbCBxdWF0ZXJuaW9ucyB3b24ndCBhbHdheXMgYmUgbm9ybWFsaXplZCAoVGhlIGVycm9yIGlzIG1vc3Qgbm90aWNlYWJsZSB3aGVuIHQgPSAwLjUpXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKG91dCwgYSwgYiwgdCkge1xuICB2YXIgbXQgPSAxIC0gdDtcbiAgaWYgKGRvdChhLCBiKSA8IDApIHQgPSAtdDtcbiAgb3V0WzBdID0gYVswXSAqIG10ICsgYlswXSAqIHQ7XG4gIG91dFsxXSA9IGFbMV0gKiBtdCArIGJbMV0gKiB0O1xuICBvdXRbMl0gPSBhWzJdICogbXQgKyBiWzJdICogdDtcbiAgb3V0WzNdID0gYVszXSAqIG10ICsgYlszXSAqIHQ7XG4gIG91dFs0XSA9IGFbNF0gKiBtdCArIGJbNF0gKiB0O1xuICBvdXRbNV0gPSBhWzVdICogbXQgKyBiWzVdICogdDtcbiAgb3V0WzZdID0gYVs2XSAqIG10ICsgYls2XSAqIHQ7XG4gIG91dFs3XSA9IGFbN10gKiBtdCArIGJbN10gKiB0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGludmVyc2Ugb2YgYSBkdWFsIHF1YXQuIElmIHRoZXkgYXJlIG5vcm1hbGl6ZWQsIGNvbmp1Z2F0ZSBpcyBjaGVhcGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdCB0byBjYWxjdWxhdGUgaW52ZXJzZSBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIHNxbGVuID0gc3F1YXJlZExlbmd0aChhKTtcbiAgb3V0WzBdID0gLWFbMF0gLyBzcWxlbjtcbiAgb3V0WzFdID0gLWFbMV0gLyBzcWxlbjtcbiAgb3V0WzJdID0gLWFbMl0gLyBzcWxlbjtcbiAgb3V0WzNdID0gYVszXSAvIHNxbGVuO1xuICBvdXRbNF0gPSAtYVs0XSAvIHNxbGVuO1xuICBvdXRbNV0gPSAtYVs1XSAvIHNxbGVuO1xuICBvdXRbNl0gPSAtYVs2XSAvIHNxbGVuO1xuICBvdXRbN10gPSBhWzddIC8gc3FsZW47XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgY29uanVnYXRlIG9mIGEgZHVhbCBxdWF0XHJcbiAqIElmIHRoZSBkdWFsIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBmdW5jdGlvbiBpcyBmYXN0ZXIgdGhhbiBxdWF0Mi5pbnZlcnNlIGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBjb25qdWdhdGUgb2ZcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qdWdhdGUob3V0LCBhKSB7XG4gIG91dFswXSA9IC1hWzBdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgb3V0WzJdID0gLWFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IC1hWzRdO1xuICBvdXRbNV0gPSAtYVs1XTtcbiAgb3V0WzZdID0gLWFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgZHVhbCBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0IHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbmd0aCA9IHF1YXQubGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdDIubGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuID0gbGVuZ3RoO1xuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgZHVhbCBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0IHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXVhcmVkTGVuZ3RoID0gcXVhdC5zcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdDIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckxlbiA9IHNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogTm9ybWFsaXplIGEgZHVhbCBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdGVybmlvbiB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKG91dCwgYSkge1xuICB2YXIgbWFnbml0dWRlID0gc3F1YXJlZExlbmd0aChhKTtcblxuICBpZiAobWFnbml0dWRlID4gMCkge1xuICAgIG1hZ25pdHVkZSA9IE1hdGguc3FydChtYWduaXR1ZGUpO1xuICAgIHZhciBhMCA9IGFbMF0gLyBtYWduaXR1ZGU7XG4gICAgdmFyIGExID0gYVsxXSAvIG1hZ25pdHVkZTtcbiAgICB2YXIgYTIgPSBhWzJdIC8gbWFnbml0dWRlO1xuICAgIHZhciBhMyA9IGFbM10gLyBtYWduaXR1ZGU7XG4gICAgdmFyIGIwID0gYVs0XTtcbiAgICB2YXIgYjEgPSBhWzVdO1xuICAgIHZhciBiMiA9IGFbNl07XG4gICAgdmFyIGIzID0gYVs3XTtcbiAgICB2YXIgYV9kb3RfYiA9IGEwICogYjAgKyBhMSAqIGIxICsgYTIgKiBiMiArIGEzICogYjM7XG4gICAgb3V0WzBdID0gYTA7XG4gICAgb3V0WzFdID0gYTE7XG4gICAgb3V0WzJdID0gYTI7XG4gICAgb3V0WzNdID0gYTM7XG4gICAgb3V0WzRdID0gKGIwIC0gYTAgKiBhX2RvdF9iKSAvIG1hZ25pdHVkZTtcbiAgICBvdXRbNV0gPSAoYjEgLSBhMSAqIGFfZG90X2IpIC8gbWFnbml0dWRlO1xuICAgIG91dFs2XSA9IChiMiAtIGEyICogYV9kb3RfYikgLyBtYWduaXR1ZGU7XG4gICAgb3V0WzddID0gKGIzIC0gYTMgKiBhX2RvdF9iKSAvIG1hZ25pdHVkZTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGR1YWwgcXVhdGVuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0ZXJuaW9uIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1YWwgcXVhdFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiAncXVhdDIoJyArIGFbMF0gKyAnLCAnICsgYVsxXSArICcsICcgKyBhWzJdICsgJywgJyArIGFbM10gKyAnLCAnICsgYVs0XSArICcsICcgKyBhWzVdICsgJywgJyArIGFbNl0gKyAnLCAnICsgYVs3XSArICcpJztcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBkdWFsIHF1YXRlcm5pb25zIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZmlyc3QgZHVhbCBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBiIHRoZSBzZWNvbmQgZHVhbCBxdWF0ZXJuaW9uLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgZHVhbCBxdWF0ZXJuaW9ucyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdICYmIGFbNF0gPT09IGJbNF0gJiYgYVs1XSA9PT0gYls1XSAmJiBhWzZdID09PSBiWzZdICYmIGFbN10gPT09IGJbN107XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZHVhbCBxdWF0ZXJuaW9ucyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IGR1YWwgcXVhdC5cclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIGR1YWwgcXVhdC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGR1YWwgcXVhdHMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XSxcbiAgICAgIGE2ID0gYVs2XSxcbiAgICAgIGE3ID0gYVs3XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXSxcbiAgICAgIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XSxcbiAgICAgIGI2ID0gYls2XSxcbiAgICAgIGI3ID0gYls3XTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKSAmJiBNYXRoLmFicyhhNCAtIGI0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNCksIE1hdGguYWJzKGI0KSkgJiYgTWF0aC5hYnMoYTUgLSBiNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTUpLCBNYXRoLmFicyhiNSkpICYmIE1hdGguYWJzKGE2IC0gYjYpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE2KSwgTWF0aC5hYnMoYjYpKSAmJiBNYXRoLmFicyhhNyAtIGI3KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNyksIE1hdGguYWJzKGI3KSk7XG59IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogMiBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG1vZHVsZSB2ZWMyXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMik7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzBdID0gMDtcbiAgICBvdXRbMV0gPSAwO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzIgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMik7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyh4LCB5KSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgyKTtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgdmVjMiB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgc291cmNlIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIHgsIHkpIHtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmlkZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAvIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLyBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguY2VpbCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjZWlsXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjZWlsKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmNlaWwoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguY2VpbChhWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmZsb29yIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGZsb29yXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9vcihvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5mbG9vcihhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5mbG9vcihhWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5tYXgoYVsxXSwgYlsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5yb3VuZCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byByb3VuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGgucm91bmQoYVswXSk7XG4gIG91dFsxXSA9IE1hdGgucm91bmQoYVsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIGEgdmVjMiBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMidzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxuICAgICAgeSA9IGJbMV0gLSBhWzFdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5KTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkRGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxuICAgICAgeSA9IGJbMV0gLSBhWzFdO1xuICByZXR1cm4geCAqIHggKyB5ICogeTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5KTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWRMZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XG59XG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKG91dCwgYSkge1xuICBvdXRbMF0gPSAxLjAgLyBhWzBdO1xuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIHZhciBsZW4gPSB4ICogeCArIHkgKiB5O1xuXG4gIGlmIChsZW4gPiAwKSB7XG4gICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gIH1cblxuICBvdXRbMF0gPSBhWzBdICogbGVuO1xuICBvdXRbMV0gPSBhWzFdICogbGVuO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRvdChhLCBiKSB7XG4gIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO1xufVxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICogTm90ZSB0aGF0IHRoZSBjcm9zcyBwcm9kdWN0IG11c3QgYnkgZGVmaW5pdGlvbiBwcm9kdWNlIGEgM0QgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcm9zcyhvdXQsIGEsIGIpIHtcbiAgdmFyIHogPSBhWzBdICogYlsxXSAtIGFbMV0gKiBiWzBdO1xuICBvdXRbMF0gPSBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSB6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAob3V0LCBhLCBiLCB0KSB7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV07XG4gIG91dFswXSA9IGF4ICsgdCAqIChiWzBdIC0gYXgpO1xuICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCwgc2NhbGUpIHtcbiAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XG4gIHZhciByID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xuICBvdXRbMF0gPSBNYXRoLmNvcyhyKSAqIHNjYWxlO1xuICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0Mn0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDIob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5O1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bM10gKiB5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MmQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzNdICogeSArIG1bNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0M1xyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQzfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MyhvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVszXSAqIHkgKyBtWzZdO1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQ0XHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzAnXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQ0KG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bMTJdO1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bNV0gKiB5ICsgbVsxM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlIGEgMkQgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IFRoZSByZWNlaXZpbmcgdmVjMlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgVGhlIHZlYzIgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIGIsIGMpIHtcbiAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuICB2YXIgcDAgPSBhWzBdIC0gYlswXSxcbiAgICAgIHAxID0gYVsxXSAtIGJbMV0sXG4gICAgICBzaW5DID0gTWF0aC5zaW4oYyksXG4gICAgICBjb3NDID0gTWF0aC5jb3MoYyk7IC8vcGVyZm9ybSByb3RhdGlvbiBhbmQgdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSBwMCAqIGNvc0MgLSBwMSAqIHNpbkMgKyBiWzBdO1xuICBvdXRbMV0gPSBwMCAqIHNpbkMgKyBwMSAqIGNvc0MgKyBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gMkQgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFuZ2xlKGEsIGIpIHtcbiAgdmFyIHgxID0gYVswXSxcbiAgICAgIHkxID0gYVsxXSxcbiAgICAgIHgyID0gYlswXSxcbiAgICAgIHkyID0gYlsxXTtcbiAgdmFyIGxlbjEgPSB4MSAqIHgxICsgeTEgKiB5MTtcblxuICBpZiAobGVuMSA+IDApIHtcbiAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xuICAgIGxlbjEgPSAxIC8gTWF0aC5zcXJ0KGxlbjEpO1xuICB9XG5cbiAgdmFyIGxlbjIgPSB4MiAqIHgyICsgeTIgKiB5MjtcblxuICBpZiAobGVuMiA+IDApIHtcbiAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xuICAgIGxlbjIgPSAxIC8gTWF0aC5zcXJ0KGxlbjIpO1xuICB9XG5cbiAgdmFyIGNvc2luZSA9ICh4MSAqIHgyICsgeTEgKiB5MikgKiBsZW4xICogbGVuMjtcblxuICBpZiAoY29zaW5lID4gMS4wKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAoY29zaW5lIDwgLTEuMCkge1xuICAgIHJldHVybiBNYXRoLlBJO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBNYXRoLmFjb3MoY29zaW5lKTtcbiAgfVxufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzIgdG8gemVyb1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gemVybyhvdXQpIHtcbiAgb3V0WzBdID0gMC4wO1xuICBvdXRbMV0gPSAwLjA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiAndmVjMignICsgYVswXSArICcsICcgKyBhWzFdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgZXhhY3RseSBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWMyfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpdiA9IGRpdmlkZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuZGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXN0ID0gZGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckRpc3QgPSBzcXVhcmVkRGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMycy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMyLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzJzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSAyO1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XG4gICAgICBhW2ldID0gdmVjWzBdO1xuICAgICAgYVtpICsgMV0gPSB2ZWNbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH07XG59KCk7IiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgQ2lyY2xlQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2NpcmNsZV9idWNrZXQnO1xuaW1wb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnR9IGZyb20gJy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7Z2V0TWF4aW11bVBhaW50VmFsdWUsIHRyYW5zbGF0ZURpc3RhbmNlLCB0cmFuc2xhdGV9IGZyb20gJy4uL3F1ZXJ5X3V0aWxzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vY2lyY2xlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgTGF5b3V0LCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5pbXBvcnQge3ZlYzR9IGZyb20gJ2dsLW1hdHJpeCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7QnVja2V0LCBCdWNrZXRQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0UHJvcHMsIFBhaW50UHJvcHN9IGZyb20gJy4vY2lyY2xlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIENpcmNsZVN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVCdWNrZXQocGFyYW1ldGVyczogQnVja2V0UGFyYW1ldGVyczwqPikge1xuICAgICAgICByZXR1cm4gbmV3IENpcmNsZUJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cyhidWNrZXQ6IEJ1Y2tldCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGNpcmNsZUJ1Y2tldDogQ2lyY2xlQnVja2V0PENpcmNsZVN0eWxlTGF5ZXI+ID0gKGJ1Y2tldDogYW55KTtcbiAgICAgICAgcmV0dXJuIGdldE1heGltdW1QYWludFZhbHVlKCdjaXJjbGUtcmFkaXVzJywgdGhpcywgY2lyY2xlQnVja2V0KSArXG4gICAgICAgICAgICBnZXRNYXhpbXVtUGFpbnRWYWx1ZSgnY2lyY2xlLXN0cm9rZS13aWR0aCcsIHRoaXMsIGNpcmNsZUJ1Y2tldCkgK1xuICAgICAgICAgICAgdHJhbnNsYXRlRGlzdGFuY2UodGhpcy5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUnKSk7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQb2x5Z29uID0gdHJhbnNsYXRlKHF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICB0cmFuc2Zvcm0uYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gdGhpcy5wYWludC5nZXQoJ2NpcmNsZS1yYWRpdXMnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBzdHJva2UgPSB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXN0cm9rZS13aWR0aCcpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IHNpemUgID0gcmFkaXVzICsgc3Ryb2tlO1xuXG4gICAgICAgIC8vIEZvciBwaXRjaC1hbGlnbm1lbnQ6IG1hcCwgY29tcGFyZSBmZWF0dXJlIGdlb21ldHJ5IHRvIHF1ZXJ5IGdlb21ldHJ5IGluIHRoZSBwbGFuZSBvZiB0aGUgdGlsZVxuICAgICAgICAvLyAvLyBPdGhlcndpc2UsIGNvbXBhcmUgZ2VvbWV0cnkgaW4gdGhlIHBsYW5lIG9mIHRoZSB2aWV3cG9ydFxuICAgICAgICAvLyAvLyBBIGNpcmNsZSB3aXRoIGZpeGVkIHNjYWxpbmcgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0IGdldHMgbGFyZ2VyIGluIHRpbGUgc3BhY2UgYXMgaXQgbW92ZXMgaW50byB0aGUgZGlzdGFuY2VcbiAgICAgICAgLy8gLy8gQSBjaXJjbGUgd2l0aCBmaXhlZCBzY2FsaW5nIHJlbGF0aXZlIHRvIHRoZSBtYXAgZ2V0cyBzbWFsbGVyIGluIHZpZXdwb3J0IHNwYWNlIGFzIGl0IG1vdmVzIGludG8gdGhlIGRpc3RhbmNlXG4gICAgICAgIGNvbnN0IGFsaWduV2l0aE1hcCA9IHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFBvbHlnb24gPSBhbGlnbldpdGhNYXAgPyB0cmFuc2xhdGVkUG9seWdvbiA6IHByb2plY3RRdWVyeUdlb21ldHJ5KHRyYW5zbGF0ZWRQb2x5Z29uLCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU2l6ZSA9IGFsaWduV2l0aE1hcCA/IHNpemUgKiBwaXhlbHNUb1RpbGVVbml0cyA6IHNpemU7XG5cbiAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHJpbmcpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUG9pbnQgPSBhbGlnbldpdGhNYXAgPyBwb2ludCA6IHByb2plY3RQb2ludChwb2ludCwgcGl4ZWxQb3NNYXRyaXgpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGFkanVzdGVkU2l6ZSA9IHRyYW5zZm9ybWVkU2l6ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRDZW50ZXIgPSB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIFtwb2ludC54LCBwb2ludC55LCAwLCAxXSwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLXNjYWxlJykgPT09ICd2aWV3cG9ydCcgJiYgdGhpcy5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTaXplICo9IHByb2plY3RlZENlbnRlclszXSAvIHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1zY2FsZScpID09PSAnbWFwJyAmJiB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLWFsaWdubWVudCcpID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkanVzdGVkU2l6ZSAqPSB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHByb2plY3RlZENlbnRlclszXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocG9seWdvbkludGVyc2VjdHNCdWZmZXJlZFBvaW50KHRyYW5zZm9ybWVkUG9seWdvbiwgdHJhbnNmb3JtZWRQb2ludCwgYWRqdXN0ZWRTaXplKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcm9qZWN0UG9pbnQocDogUG9pbnQsIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpIHtcbiAgICBjb25zdCBwb2ludCA9IHZlYzQudHJhbnNmb3JtTWF0NChbXSwgW3AueCwgcC55LCAwLCAxXSwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgIHJldHVybiBuZXcgUG9pbnQocG9pbnRbMF0gLyBwb2ludFszXSwgcG9pbnRbMV0gLyBwb2ludFszXSk7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RRdWVyeUdlb21ldHJ5KHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiwgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSkge1xuICAgIHJldHVybiBxdWVyeUdlb21ldHJ5Lm1hcCgocCkgPT4ge1xuICAgICAgICByZXR1cm4gcHJvamVjdFBvaW50KHAsIHBpeGVsUG9zTWF0cml4KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDaXJjbGVCdWNrZXQgZnJvbSAnLi9jaXJjbGVfYnVja2V0JztcblxuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuaW1wb3J0IHR5cGUgSGVhdG1hcFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcic7XG5cbmNsYXNzIEhlYXRtYXBCdWNrZXQgZXh0ZW5kcyBDaXJjbGVCdWNrZXQ8SGVhdG1hcFN0eWxlTGF5ZXI+IHtcbiAgICAvLyBOZWVkZWQgZm9yIGZsb3cgdG8gYWNjZXB0IG9taXQ6IFsnbGF5ZXJzJ10gYmVsb3csIGR1ZSB0b1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy80MjYyXG4gICAgbGF5ZXJzOiBBcnJheTxIZWF0bWFwU3R5bGVMYXllcj47XG59XG5cbnJlZ2lzdGVyKCdIZWF0bWFwQnVja2V0JywgSGVhdG1hcEJ1Y2tldCwge29taXQ6IFsnbGF5ZXJzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgSGVhdG1hcEJ1Y2tldDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuZXhwb3J0IHR5cGUgU2l6ZSA9IHtcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyXG59O1xuXG50eXBlIFBvaW50ID0ge1xuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXJcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUltYWdlKGltYWdlOiAqLCB7d2lkdGgsIGhlaWdodH06IFNpemUsIGNoYW5uZWxzOiBudW1iZXIsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogY2hhbm5lbHMpO1xuICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChkYXRhLmxlbmd0aCAhPT0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscykge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWlzbWF0Y2hlZCBpbWFnZSBzaXplJyk7XG4gICAgfVxuICAgIGltYWdlLndpZHRoID0gd2lkdGg7XG4gICAgaW1hZ2UuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGltYWdlLmRhdGEgPSBkYXRhO1xuICAgIHJldHVybiBpbWFnZTtcbn1cblxuZnVuY3Rpb24gcmVzaXplSW1hZ2UoaW1hZ2U6ICosIHt3aWR0aCwgaGVpZ2h0fTogU2l6ZSwgY2hhbm5lbHM6IG51bWJlcikge1xuICAgIGlmICh3aWR0aCA9PT0gaW1hZ2Uud2lkdGggJiYgaGVpZ2h0ID09PSBpbWFnZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0ltYWdlID0gY3JlYXRlSW1hZ2Uoe30sIHt3aWR0aCwgaGVpZ2h0fSwgY2hhbm5lbHMpO1xuXG4gICAgY29weUltYWdlKGltYWdlLCBuZXdJbWFnZSwge3g6IDAsIHk6IDB9LCB7eDogMCwgeTogMH0sIHtcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKGltYWdlLndpZHRoLCB3aWR0aCksXG4gICAgICAgIGhlaWdodDogTWF0aC5taW4oaW1hZ2UuaGVpZ2h0LCBoZWlnaHQpXG4gICAgfSwgY2hhbm5lbHMpO1xuXG4gICAgaW1hZ2Uud2lkdGggPSB3aWR0aDtcbiAgICBpbWFnZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgaW1hZ2UuZGF0YSA9IG5ld0ltYWdlLmRhdGE7XG59XG5cbmZ1bmN0aW9uIGNvcHlJbWFnZShzcmNJbWc6ICosIGRzdEltZzogKiwgc3JjUHQ6IFBvaW50LCBkc3RQdDogUG9pbnQsIHNpemU6IFNpemUsIGNoYW5uZWxzOiBudW1iZXIpIHtcbiAgICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZHN0SW1nO1xuICAgIH1cblxuICAgIGlmIChzaXplLndpZHRoID4gc3JjSW1nLndpZHRoIHx8XG4gICAgICAgIHNpemUuaGVpZ2h0ID4gc3JjSW1nLmhlaWdodCB8fFxuICAgICAgICBzcmNQdC54ID4gc3JjSW1nLndpZHRoIC0gc2l6ZS53aWR0aCB8fFxuICAgICAgICBzcmNQdC55ID4gc3JjSW1nLmhlaWdodCAtIHNpemUuaGVpZ2h0KSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHNpemUud2lkdGggPiBkc3RJbWcud2lkdGggfHxcbiAgICAgICAgc2l6ZS5oZWlnaHQgPiBkc3RJbWcuaGVpZ2h0IHx8XG4gICAgICAgIGRzdFB0LnggPiBkc3RJbWcud2lkdGggLSBzaXplLndpZHRoIHx8XG4gICAgICAgIGRzdFB0LnkgPiBkc3RJbWcuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weScpO1xuICAgIH1cblxuICAgIGNvbnN0IHNyY0RhdGEgPSBzcmNJbWcuZGF0YTtcbiAgICBjb25zdCBkc3REYXRhID0gZHN0SW1nLmRhdGE7XG5cbiAgICBhc3NlcnQoc3JjRGF0YSAhPT0gZHN0RGF0YSk7XG5cbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgY29uc3Qgc3JjT2Zmc2V0ID0gKChzcmNQdC55ICsgeSkgKiBzcmNJbWcud2lkdGggKyBzcmNQdC54KSAqIGNoYW5uZWxzO1xuICAgICAgICBjb25zdCBkc3RPZmZzZXQgPSAoKGRzdFB0LnkgKyB5KSAqIGRzdEltZy53aWR0aCArIGRzdFB0LngpICogY2hhbm5lbHM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZS53aWR0aCAqIGNoYW5uZWxzOyBpKyspIHtcbiAgICAgICAgICAgIGRzdERhdGFbZHN0T2Zmc2V0ICsgaV0gPSBzcmNEYXRhW3NyY09mZnNldCArIGldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRzdEltZztcbn1cblxuZXhwb3J0IGNsYXNzIEFscGhhSW1hZ2Uge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgZGF0YTogVWludDhBcnJheTtcblxuICAgIGNvbnN0cnVjdG9yKHNpemU6IFNpemUsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgY3JlYXRlSW1hZ2UodGhpcywgc2l6ZSwgMSwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmVzaXplKHNpemU6IFNpemUpIHtcbiAgICAgICAgcmVzaXplSW1hZ2UodGhpcywgc2l6ZSwgMSk7XG4gICAgfVxuXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxwaGFJbWFnZSh7d2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHR9LCBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29weShzcmNJbWc6IEFscGhhSW1hZ2UsIGRzdEltZzogQWxwaGFJbWFnZSwgc3JjUHQ6IFBvaW50LCBkc3RQdDogUG9pbnQsIHNpemU6IFNpemUpIHtcbiAgICAgICAgY29weUltYWdlKHNyY0ltZywgZHN0SW1nLCBzcmNQdCwgZHN0UHQsIHNpemUsIDEpO1xuICAgIH1cbn1cblxuLy8gTm90IHByZW11bHRpcGxpZWQsIGJlY2F1c2UgSW1hZ2VEYXRhIGlzIG5vdCBwcmVtdWx0aXBsaWVkLlxuLy8gVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIG11c3QgYmUgdXNlZCB3aGVuIHVwbG9hZGluZyB0byBhIHRleHR1cmUuXG5leHBvcnQgY2xhc3MgUkdCQUltYWdlIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuXG4gICAgLy8gZGF0YSBtdXN0IGJlIGEgVWludDhBcnJheSBpbnN0ZWFkIG9mIFVpbnQ4Q2xhbXBlZEFycmF5IGJlY2F1c2UgdGV4SW1hZ2UyRCBkb2VzIG5vdFxuICAgIC8vIHN1cHBvcnQgVWludDhDbGFtcGVkQXJyYXkgaW4gYWxsIGJyb3dzZXJzXG4gICAgZGF0YTogVWludDhBcnJheTtcblxuICAgIGNvbnN0cnVjdG9yKHNpemU6IFNpemUsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgY3JlYXRlSW1hZ2UodGhpcywgc2l6ZSwgNCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmVzaXplKHNpemU6IFNpemUpIHtcbiAgICAgICAgcmVzaXplSW1hZ2UodGhpcywgc2l6ZSwgNCk7XG4gICAgfVxuXG4gICAgcmVwbGFjZShkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXksIGNvcHk/OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0KGRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHR9LCBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29weShzcmNJbWc6IFJHQkFJbWFnZSB8IEltYWdlRGF0YSwgZHN0SW1nOiBSR0JBSW1hZ2UsIHNyY1B0OiBQb2ludCwgZHN0UHQ6IFBvaW50LCBzaXplOiBTaXplKSB7XG4gICAgICAgIGNvcHlJbWFnZShzcmNJbWcsIGRzdEltZywgc3JjUHQsIGRzdFB0LCBzaXplLCA0KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdBbHBoYUltYWdlJywgQWxwaGFJbWFnZSk7XG5yZWdpc3RlcignUkdCQUltYWdlJywgUkdCQUltYWdlKTtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJoZWF0bWFwLXJhZGl1c1wiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhlYXRtYXAtd2VpZ2h0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaGVhdG1hcC1pbnRlbnNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhlYXRtYXAtY29sb3JcIjogQ29sb3JSYW1wUHJvcGVydHksXG4gICAgXCJoZWF0bWFwLW9wYWNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImhlYXRtYXAtcmFkaXVzXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtcmFkaXVzXCJdKSxcbiAgICBcImhlYXRtYXAtd2VpZ2h0XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtd2VpZ2h0XCJdKSxcbiAgICBcImhlYXRtYXAtaW50ZW5zaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oZWF0bWFwXCJdW1wiaGVhdG1hcC1pbnRlbnNpdHlcIl0pLFxuICAgIFwiaGVhdG1hcC1jb2xvclwiOiBuZXcgQ29sb3JSYW1wUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtY29sb3JcIl0pLFxuICAgIFwiaGVhdG1hcC1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oZWF0bWFwXCJdW1wiaGVhdG1hcC1vcGFjaXR5XCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2luZGV4JztcblxuLyoqXG4gKiBHaXZlbiBhbiBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGV2YWx1YXRlIHRvIGEgY29sb3IgcmFtcCwgcmV0dXJuXG4gKiBhIDI1NngxIHB4IFJHQkEgaW1hZ2UgcmVwcmVzZW50aW5nIHRoYXQgcmFtcCBleHByZXNzaW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmRlckNvbG9yUmFtcChleHByZXNzaW9uOiBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbiwgY29sb3JSYW1wRXZhbHVhdGlvblBhcmFtZXRlcjogc3RyaW5nKTogUkdCQUltYWdlIHtcbiAgICBjb25zdCBjb2xvclJhbXBEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMjU2ICogNCk7XG4gICAgY29uc3QgZXZhbHVhdGlvbkdsb2JhbHMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCAyNTY7IGkrKywgaiArPSA0KSB7XG4gICAgICAgIGV2YWx1YXRpb25HbG9iYWxzW2NvbG9yUmFtcEV2YWx1YXRpb25QYXJhbWV0ZXJdID0gaSAvIDI1NTtcbiAgICAgICAgY29uc3QgcHhDb2xvciA9IGV4cHJlc3Npb24uZXZhbHVhdGUoKGV2YWx1YXRpb25HbG9iYWxzOiBhbnkpKTtcbiAgICAgICAgLy8gdGhlIGNvbG9ycyBhcmUgYmVpbmcgdW5wcmVtdWx0aXBsaWVkIGJlY2F1c2UgQ29sb3IgdXNlc1xuICAgICAgICAvLyBwcmVtdWx0aXBsaWVkIHZhbHVlcywgYW5kIHRoZSBUZXh0dXJlIGNsYXNzIGV4cGVjdHMgdW5wcmVtdWx0aXBsaWVkIG9uZXNcbiAgICAgICAgY29sb3JSYW1wRGF0YVtqICsgMF0gPSBNYXRoLmZsb29yKHB4Q29sb3IuciAqIDI1NSAvIHB4Q29sb3IuYSk7XG4gICAgICAgIGNvbG9yUmFtcERhdGFbaiArIDFdID0gTWF0aC5mbG9vcihweENvbG9yLmcgKiAyNTUgLyBweENvbG9yLmEpO1xuICAgICAgICBjb2xvclJhbXBEYXRhW2ogKyAyXSA9IE1hdGguZmxvb3IocHhDb2xvci5iICogMjU1IC8gcHhDb2xvci5hKTtcbiAgICAgICAgY29sb3JSYW1wRGF0YVtqICsgM10gPSBNYXRoLmZsb29yKHB4Q29sb3IuYSAqIDI1NSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSR0JBSW1hZ2Uoe3dpZHRoOiAyNTYsIGhlaWdodDogMX0sIGNvbG9yUmFtcERhdGEpO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgSGVhdG1hcEJ1Y2tldCBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldC9oZWF0bWFwX2J1Y2tldCc7XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2hlYXRtYXBfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgcmVuZGVyQ29sb3JSYW1wIGZyb20gJy4uLy4uL3V0aWwvY29sb3JfcmFtcCc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIFRleHR1cmUgZnJvbSAnLi4vLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHR5cGUgRnJhbWVidWZmZXIgZnJvbSAnLi4vLi4vZ2wvZnJhbWVidWZmZXInO1xuaW1wb3J0IHR5cGUge1BhaW50UHJvcHN9IGZyb20gJy4vaGVhdG1hcF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBIZWF0bWFwU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuXG4gICAgaGVhdG1hcEZibzogP0ZyYW1lYnVmZmVyO1xuICAgIGNvbG9yUmFtcDogUkdCQUltYWdlO1xuICAgIGNvbG9yUmFtcFRleHR1cmU6ID9UZXh0dXJlO1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY3JlYXRlQnVja2V0KG9wdGlvbnM6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IEhlYXRtYXBCdWNrZXQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIGNvbG9yIHJhbXAgdGV4dHVyZSBpcyBnZW5lcmF0ZWQgZm9yIGRlZmF1bHQgaGVhdG1hcCBjb2xvciB0b29cbiAgICAgICAgdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAobmFtZSA9PT0gJ2hlYXRtYXAtY29sb3InKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDb2xvclJhbXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVDb2xvclJhbXAoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbJ2hlYXRtYXAtY29sb3InXS52YWx1ZS5leHByZXNzaW9uO1xuICAgICAgICB0aGlzLmNvbG9yUmFtcCA9IHJlbmRlckNvbG9yUmFtcChleHByZXNzaW9uLCAnaGVhdG1hcERlbnNpdHknKTtcbiAgICAgICAgdGhpcy5jb2xvclJhbXBUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLmhlYXRtYXBGYm8pIHtcbiAgICAgICAgICAgIHRoaXMuaGVhdG1hcEZiby5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmhlYXRtYXBGYm8gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZSgpOiBib29sZWFuICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBoYXNPZmZzY3JlZW5QYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWludC5nZXQoJ2hlYXRtYXAtb3BhY2l0eScpICE9PSAwICYmIHRoaXMudmlzaWJpbGl0eSAhPT0gJ25vbmUnO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhdG1hcFN0eWxlTGF5ZXI7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PENvbG9yPixcbiAgICBcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Q29sb3I+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uXCJdKSxcbiAgICBcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvclwiXSksXG4gICAgXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCJdKSxcbiAgICBcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIl0pLFxuICAgIFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGlsbHNoYWRlXCJdW1wiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiXSksXG4gICAgXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vaGlsbHNoYWRlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7UGFpbnRQcm9wc30gZnJvbSAnLi9oaWxsc2hhZGVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgSGlsbHNoYWRlU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGhhc09mZnNjcmVlblBhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhaW50LmdldCgnaGlsbHNoYWRlLWV4YWdnZXJhdGlvbicpICE9PSAwICYmIHRoaXMudmlzaWJpbGl0eSAhPT0gJ25vbmUnO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGlsbHNoYWRlU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBsYXlvdXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBkZWZhdWx0IGxheW91dDtcbmV4cG9ydCBjb25zdCB7bWVtYmVycywgc2l6ZSwgYWxpZ25tZW50fSA9IGxheW91dDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gZWFyY3V0O1xuXG5mdW5jdGlvbiBlYXJjdXQoZGF0YSwgaG9sZUluZGljZXMsIGRpbSkge1xuXG4gICAgZGltID0gZGltIHx8IDI7XG5cbiAgICB2YXIgaGFzSG9sZXMgPSBob2xlSW5kaWNlcyAmJiBob2xlSW5kaWNlcy5sZW5ndGgsXG4gICAgICAgIG91dGVyTGVuID0gaGFzSG9sZXMgPyBob2xlSW5kaWNlc1swXSAqIGRpbSA6IGRhdGEubGVuZ3RoLFxuICAgICAgICBvdXRlck5vZGUgPSBsaW5rZWRMaXN0KGRhdGEsIDAsIG91dGVyTGVuLCBkaW0sIHRydWUpLFxuICAgICAgICB0cmlhbmdsZXMgPSBbXTtcblxuICAgIGlmICghb3V0ZXJOb2RlIHx8IG91dGVyTm9kZS5uZXh0ID09PSBvdXRlck5vZGUucHJldikgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBpbnZTaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgaW52U2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgaW52U2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgICAgIGludlNpemUgPSBpbnZTaXplICE9PSAwID8gMSAvIGludlNpemUgOiAwO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBpLCBsYXN0O1xuXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICBpZiAobGFzdCAmJiBlcXVhbHMobGFzdCwgbGFzdC5uZXh0KSkge1xuICAgICAgICByZW1vdmVOb2RlKGxhc3QpO1xuICAgICAgICBsYXN0ID0gbGFzdC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0O1xufVxuXG4vLyBlbGltaW5hdGUgY29saW5lYXIgb3IgZHVwbGljYXRlIHBvaW50c1xuZnVuY3Rpb24gZmlsdGVyUG9pbnRzKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoIXN0YXJ0KSByZXR1cm4gc3RhcnQ7XG4gICAgaWYgKCFlbmQpIGVuZCA9IHN0YXJ0O1xuXG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgYWdhaW47XG4gICAgZG8ge1xuICAgICAgICBhZ2FpbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghcC5zdGVpbmVyICYmIChlcXVhbHMocCwgcC5uZXh0KSB8fCBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocCk7XG4gICAgICAgICAgICBwID0gZW5kID0gcC5wcmV2O1xuICAgICAgICAgICAgaWYgKHAgPT09IHAubmV4dCkgYnJlYWs7XG4gICAgICAgICAgICBhZ2FpbiA9IHRydWU7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAgPSBwLm5leHQ7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChhZ2FpbiB8fCBwICE9PSBlbmQpO1xuXG4gICAgcmV0dXJuIGVuZDtcbn1cblxuLy8gbWFpbiBlYXIgc2xpY2luZyBsb29wIHdoaWNoIHRyaWFuZ3VsYXRlcyBhIHBvbHlnb24gKGdpdmVuIGFzIGEgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgcGFzcykge1xuICAgIGlmICghZWFyKSByZXR1cm47XG5cbiAgICAvLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG4gICAgaWYgKCFwYXNzICYmIGludlNpemUpIGluZGV4Q3VydmUoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblxuICAgIHZhciBzdG9wID0gZWFyLFxuICAgICAgICBwcmV2LCBuZXh0O1xuXG4gICAgLy8gaXRlcmF0ZSB0aHJvdWdoIGVhcnMsIHNsaWNpbmcgdGhlbSBvbmUgYnkgb25lXG4gICAgd2hpbGUgKGVhci5wcmV2ICE9PSBlYXIubmV4dCkge1xuICAgICAgICBwcmV2ID0gZWFyLnByZXY7XG4gICAgICAgIG5leHQgPSBlYXIubmV4dDtcblxuICAgICAgICBpZiAoaW52U2l6ZSA/IGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgaW52U2l6ZSkgOiBpc0VhcihlYXIpKSB7XG4gICAgICAgICAgICAvLyBjdXQgb2ZmIHRoZSB0cmlhbmdsZVxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gocHJldi5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGVhci5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKG5leHQuaSAvIGRpbSk7XG5cbiAgICAgICAgICAgIHJlbW92ZU5vZGUoZWFyKTtcblxuICAgICAgICAgICAgLy8gc2tpcHBpbmcgdGhlIG5leHQgdmVydGV4IGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIGludlNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG5cbiAgICB2YXIgcCA9IGVhci5wcmV2WixcbiAgICAgICAgbiA9IGVhci5uZXh0WjtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIGluIGJvdGggZGlyZWN0aW9uc1xuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aICYmIG4gJiYgbi56IDw9IG1heFopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuXG4gICAgICAgIGlmIChuICE9PSBlYXIucHJldiAmJiBuICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIG4ueCwgbi55KSAmJlxuICAgICAgICAgICAgYXJlYShuLnByZXYsIG4sIG4ubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBuID0gbi5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGRlY3JlYXNpbmcgei1vcmRlclxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGluY3JlYXNpbmcgei1vcmRlclxuICAgIHdoaWxlIChuICYmIG4ueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChuICE9PSBlYXIucHJldiAmJiBuICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIG4ueCwgbi55KSAmJlxuICAgICAgICAgICAgYXJlYShuLnByZXYsIG4sIG4ubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBuID0gbi5uZXh0WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIGlmICghZXF1YWxzKGEsIGIpICYmIGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGZpbHRlclBvaW50cyhwKTtcbn1cblxuLy8gdHJ5IHNwbGl0dGluZyBwb2x5Z29uIGludG8gdHdvIGFuZCB0cmlhbmd1bGF0ZSB0aGVtIGluZGVwZW5kZW50bHlcbmZ1bmN0aW9uIHNwbGl0RWFyY3V0KHN0YXJ0LCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xuICAgIC8vIGxvb2sgZm9yIGEgdmFsaWQgZGlhZ29uYWwgdGhhdCBkaXZpZGVzIHRoZSBwb2x5Z29uIGludG8gdHdvXG4gICAgdmFyIGEgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBiID0gYS5uZXh0Lm5leHQ7XG4gICAgICAgIHdoaWxlIChiICE9PSBhLnByZXYpIHtcbiAgICAgICAgICAgIGlmIChhLmkgIT09IGIuaSAmJiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikpIHtcbiAgICAgICAgICAgICAgICAvLyBzcGxpdCB0aGUgcG9seWdvbiBpbiB0d28gYnkgdGhlIGRpYWdvbmFsXG4gICAgICAgICAgICAgICAgdmFyIGMgPSBzcGxpdFBvbHlnb24oYSwgYik7XG5cbiAgICAgICAgICAgICAgICAvLyBmaWx0ZXIgY29saW5lYXIgcG9pbnRzIGFyb3VuZCB0aGUgY3V0c1xuICAgICAgICAgICAgICAgIGEgPSBmaWx0ZXJQb2ludHMoYSwgYS5uZXh0KTtcbiAgICAgICAgICAgICAgICBjID0gZmlsdGVyUG9pbnRzKGMsIGMubmV4dCk7XG5cbiAgICAgICAgICAgICAgICAvLyBydW4gZWFyY3V0IG9uIGVhY2ggaGFsZlxuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChhLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGMsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiID0gYi5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIGEgPSBhLm5leHQ7XG4gICAgfSB3aGlsZSAoYSAhPT0gc3RhcnQpO1xufVxuXG4vLyBsaW5rIGV2ZXJ5IGhvbGUgaW50byB0aGUgb3V0ZXIgbG9vcCwgcHJvZHVjaW5nIGEgc2luZ2xlLXJpbmcgcG9seWdvbiB3aXRob3V0IGhvbGVzXG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pIHtcbiAgICB2YXIgcXVldWUgPSBbXSxcbiAgICAgICAgaSwgbGVuLCBzdGFydCwgZW5kLCBsaXN0O1xuXG4gICAgZm9yIChpID0gMCwgbGVuID0gaG9sZUluZGljZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgc3RhcnQgPSBob2xlSW5kaWNlc1tpXSAqIGRpbTtcbiAgICAgICAgZW5kID0gaSA8IGxlbiAtIDEgPyBob2xlSW5kaWNlc1tpICsgMV0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcbiAgICAgICAgbGlzdCA9IGxpbmtlZExpc3QoZGF0YSwgc3RhcnQsIGVuZCwgZGltLCBmYWxzZSk7XG4gICAgICAgIGlmIChsaXN0ID09PSBsaXN0Lm5leHQpIGxpc3Quc3RlaW5lciA9IHRydWU7XG4gICAgICAgIHF1ZXVlLnB1c2goZ2V0TGVmdG1vc3QobGlzdCkpO1xuICAgIH1cblxuICAgIHF1ZXVlLnNvcnQoY29tcGFyZVgpO1xuXG4gICAgLy8gcHJvY2VzcyBob2xlcyBmcm9tIGxlZnQgdG8gcmlnaHRcbiAgICBmb3IgKGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWxpbWluYXRlSG9sZShxdWV1ZVtpXSwgb3V0ZXJOb2RlKTtcbiAgICAgICAgb3V0ZXJOb2RlID0gZmlsdGVyUG9pbnRzKG91dGVyTm9kZSwgb3V0ZXJOb2RlLm5leHQpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRlck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVYKGEsIGIpIHtcbiAgICByZXR1cm4gYS54IC0gYi54O1xufVxuXG4vLyBmaW5kIGEgYnJpZGdlIGJldHdlZW4gdmVydGljZXMgdGhhdCBjb25uZWN0cyBob2xlIHdpdGggYW4gb3V0ZXIgcmluZyBhbmQgYW5kIGxpbmsgaXRcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGUoaG9sZSwgb3V0ZXJOb2RlKSB7XG4gICAgb3V0ZXJOb2RlID0gZmluZEhvbGVCcmlkZ2UoaG9sZSwgb3V0ZXJOb2RlKTtcbiAgICBpZiAob3V0ZXJOb2RlKSB7XG4gICAgICAgIHZhciBiID0gc3BsaXRQb2x5Z29uKG91dGVyTm9kZSwgaG9sZSk7XG4gICAgICAgIGZpbHRlclBvaW50cyhiLCBiLm5leHQpO1xuICAgIH1cbn1cblxuLy8gRGF2aWQgRWJlcmx5J3MgYWxnb3JpdGhtIGZvciBmaW5kaW5nIGEgYnJpZGdlIGJldHdlZW4gaG9sZSBhbmQgb3V0ZXIgcG9seWdvblxuZnVuY3Rpb24gZmluZEhvbGVCcmlkZ2UoaG9sZSwgb3V0ZXJOb2RlKSB7XG4gICAgdmFyIHAgPSBvdXRlck5vZGUsXG4gICAgICAgIGh4ID0gaG9sZS54LFxuICAgICAgICBoeSA9IGhvbGUueSxcbiAgICAgICAgcXggPSAtSW5maW5pdHksXG4gICAgICAgIG07XG5cbiAgICAvLyBmaW5kIGEgc2VnbWVudCBpbnRlcnNlY3RlZCBieSBhIHJheSBmcm9tIHRoZSBob2xlJ3MgbGVmdG1vc3QgcG9pbnQgdG8gdGhlIGxlZnQ7XG4gICAgLy8gc2VnbWVudCdzIGVuZHBvaW50IHdpdGggbGVzc2VyIHggd2lsbCBiZSBwb3RlbnRpYWwgY29ubmVjdGlvbiBwb2ludFxuICAgIGRvIHtcbiAgICAgICAgaWYgKGh5IDw9IHAueSAmJiBoeSA+PSBwLm5leHQueSAmJiBwLm5leHQueSAhPT0gcC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBpZiAoeCA9PT0gaHgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGh5ID09PSBwLnkpIHJldHVybiBwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaHkgPT09IHAubmV4dC55KSByZXR1cm4gcC5uZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoaHggPT09IHF4KSByZXR1cm4gbTsgLy8gaG9sZSB0b3VjaGVzIG91dGVyIHNlZ21lbnQ7IHBpY2sgbGVmdG1vc3QgZW5kcG9pbnRcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICBteCA9IG0ueCxcbiAgICAgICAgbXkgPSBtLnksXG4gICAgICAgIHRhbk1pbiA9IEluZmluaXR5LFxuICAgICAgICB0YW47XG5cbiAgICBwID0gbTtcblxuICAgIGRvIHtcbiAgICAgICAgaWYgKGh4ID49IHAueCAmJiBwLnggPj0gbXggJiYgaHggIT09IHAueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG15ID8gaHggOiBxeCwgaHksIG14LCBteSwgaHkgPCBteSA/IHF4IDogaHgsIGh5LCBwLngsIHAueSkpIHtcblxuICAgICAgICAgICAgdGFuID0gTWF0aC5hYnMoaHkgLSBwLnkpIC8gKGh4IC0gcC54KTsgLy8gdGFuZ2VudGlhbFxuXG4gICAgICAgICAgICBpZiAobG9jYWxseUluc2lkZShwLCBob2xlKSAmJlxuICAgICAgICAgICAgICAgICh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIChwLnggPiBtLnggfHwgKHAueCA9PT0gbS54ICYmIHNlY3RvckNvbnRhaW5zU2VjdG9yKG0sIHApKSkpKSkge1xuICAgICAgICAgICAgICAgIG0gPSBwO1xuICAgICAgICAgICAgICAgIHRhbk1pbiA9IHRhbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RvcCk7XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gd2hldGhlciBzZWN0b3IgaW4gdmVydGV4IG0gY29udGFpbnMgc2VjdG9yIGluIHZlcnRleCBwIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzXG5mdW5jdGlvbiBzZWN0b3JDb250YWluc1NlY3RvcihtLCBwKSB7XG4gICAgcmV0dXJuIGFyZWEobS5wcmV2LCBtLCBwLnByZXYpIDwgMCAmJiBhcmVhKHAubmV4dCwgbSwgbS5uZXh0KSA8IDA7XG59XG5cbi8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbmZ1bmN0aW9uIGluZGV4Q3VydmUoc3RhcnQsIG1pblgsIG1pblksIGludlNpemUpIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueiA9PT0gbnVsbCkgcC56ID0gek9yZGVyKHAueCwgcC55LCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcbiAgICAgICAgcC5wcmV2WiA9IHAucHJldjtcbiAgICAgICAgcC5uZXh0WiA9IHAubmV4dDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICBwLnByZXZaLm5leHRaID0gbnVsbDtcbiAgICBwLnByZXZaID0gbnVsbDtcblxuICAgIHNvcnRMaW5rZWQocCk7XG59XG5cbi8vIFNpbW9uIFRhdGhhbSdzIGxpbmtlZCBsaXN0IG1lcmdlIHNvcnQgYWxnb3JpdGhtXG4vLyBodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL2FsZ29yaXRobXMvbGlzdHNvcnQuaHRtbFxuZnVuY3Rpb24gc29ydExpbmtlZChsaXN0KSB7XG4gICAgdmFyIGksIHAsIHEsIGUsIHRhaWwsIG51bU1lcmdlcywgcFNpemUsIHFTaXplLFxuICAgICAgICBpblNpemUgPSAxO1xuXG4gICAgZG8ge1xuICAgICAgICBwID0gbGlzdDtcbiAgICAgICAgbGlzdCA9IG51bGw7XG4gICAgICAgIHRhaWwgPSBudWxsO1xuICAgICAgICBudW1NZXJnZXMgPSAwO1xuXG4gICAgICAgIHdoaWxlIChwKSB7XG4gICAgICAgICAgICBudW1NZXJnZXMrKztcbiAgICAgICAgICAgIHEgPSBwO1xuICAgICAgICAgICAgcFNpemUgPSAwO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcFNpemUrKztcbiAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICBpZiAoIXEpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplICE9PSAwICYmIChxU2l6ZSA9PT0gMCB8fCAhcSB8fCBwLnogPD0gcS56KSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHE7XG4gICAgICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBxU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0YWlsKSB0YWlsLm5leHRaID0gZTtcbiAgICAgICAgICAgICAgICBlbHNlIGxpc3QgPSBlO1xuXG4gICAgICAgICAgICAgICAgZS5wcmV2WiA9IHRhaWw7XG4gICAgICAgICAgICAgICAgdGFpbCA9IGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHAgPSBxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFpbC5uZXh0WiA9IG51bGw7XG4gICAgICAgIGluU2l6ZSAqPSAyO1xuXG4gICAgfSB3aGlsZSAobnVtTWVyZ2VzID4gMSk7XG5cbiAgICByZXR1cm4gbGlzdDtcbn1cblxuLy8gei1vcmRlciBvZiBhIHBvaW50IGdpdmVuIGNvb3JkcyBhbmQgaW52ZXJzZSBvZiB0aGUgbG9uZ2VyIHNpZGUgb2YgZGF0YSBiYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpICogaW52U2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpICogaW52U2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LnggfHwgKHAueCA9PT0gbGVmdG1vc3QueCAmJiBwLnkgPCBsZWZ0bW9zdC55KSkgbGVmdG1vc3QgPSBwO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBsZWZ0bW9zdDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2ludCBsaWVzIHdpdGhpbiBhIGNvbnZleCB0cmlhbmdsZVxuZnVuY3Rpb24gcG9pbnRJblRyaWFuZ2xlKGF4LCBheSwgYngsIGJ5LCBjeCwgY3ksIHB4LCBweSkge1xuICAgIHJldHVybiAoY3ggLSBweCkgKiAoYXkgLSBweSkgLSAoYXggLSBweCkgKiAoY3kgLSBweSkgPj0gMCAmJlxuICAgICAgICAgICAoYXggLSBweCkgKiAoYnkgLSBweSkgLSAoYnggLSBweCkgKiAoYXkgLSBweSkgPj0gMCAmJlxuICAgICAgICAgICAoYnggLSBweCkgKiAoY3kgLSBweSkgLSAoY3ggLSBweCkgKiAoYnkgLSBweSkgPj0gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBkaWFnb25hbCBiZXR3ZWVuIHR3byBwb2x5Z29uIG5vZGVzIGlzIHZhbGlkIChsaWVzIGluIHBvbHlnb24gaW50ZXJpb3IpXG5mdW5jdGlvbiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikge1xuICAgIHJldHVybiBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmIC8vIGRvbmVzJ3QgaW50ZXJzZWN0IG90aGVyIGVkZ2VzXG4gICAgICAgICAgIChsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkgJiYgbWlkZGxlSW5zaWRlKGEsIGIpICYmIC8vIGxvY2FsbHkgdmlzaWJsZVxuICAgICAgICAgICAgKGFyZWEoYS5wcmV2LCBhLCBiLnByZXYpIHx8IGFyZWEoYSwgYi5wcmV2LCBiKSkgfHwgLy8gZG9lcyBub3QgY3JlYXRlIG9wcG9zaXRlLWZhY2luZyBzZWN0b3JzXG4gICAgICAgICAgICBlcXVhbHMoYSwgYikgJiYgYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPiAwICYmIGFyZWEoYi5wcmV2LCBiLCBiLm5leHQpID4gMCk7IC8vIHNwZWNpYWwgemVyby1sZW5ndGggY2FzZVxufVxuXG4vLyBzaWduZWQgYXJlYSBvZiBhIHRyaWFuZ2xlXG5mdW5jdGlvbiBhcmVhKHAsIHEsIHIpIHtcbiAgICByZXR1cm4gKHEueSAtIHAueSkgKiAoci54IC0gcS54KSAtIChxLnggLSBwLngpICogKHIueSAtIHEueSk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBwb2ludHMgYXJlIGVxdWFsXG5mdW5jdGlvbiBlcXVhbHMocDEsIHAyKSB7XG4gICAgcmV0dXJuIHAxLnggPT09IHAyLnggJiYgcDEueSA9PT0gcDIueTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHNlZ21lbnRzIGludGVyc2VjdFxuZnVuY3Rpb24gaW50ZXJzZWN0cyhwMSwgcTEsIHAyLCBxMikge1xuICAgIHZhciBvMSA9IHNpZ24oYXJlYShwMSwgcTEsIHAyKSk7XG4gICAgdmFyIG8yID0gc2lnbihhcmVhKHAxLCBxMSwgcTIpKTtcbiAgICB2YXIgbzMgPSBzaWduKGFyZWEocDIsIHEyLCBwMSkpO1xuICAgIHZhciBvNCA9IHNpZ24oYXJlYShwMiwgcTIsIHExKSk7XG5cbiAgICBpZiAobzEgIT09IG8yICYmIG8zICE9PSBvNCkgcmV0dXJuIHRydWU7IC8vIGdlbmVyYWwgY2FzZVxuXG4gICAgaWYgKG8xID09PSAwICYmIG9uU2VnbWVudChwMSwgcDIsIHExKSkgcmV0dXJuIHRydWU7IC8vIHAxLCBxMSBhbmQgcDIgYXJlIGNvbGxpbmVhciBhbmQgcDIgbGllcyBvbiBwMXExXG4gICAgaWYgKG8yID09PSAwICYmIG9uU2VnbWVudChwMSwgcTIsIHExKSkgcmV0dXJuIHRydWU7IC8vIHAxLCBxMSBhbmQgcTIgYXJlIGNvbGxpbmVhciBhbmQgcTIgbGllcyBvbiBwMXExXG4gICAgaWYgKG8zID09PSAwICYmIG9uU2VnbWVudChwMiwgcDEsIHEyKSkgcmV0dXJuIHRydWU7IC8vIHAyLCBxMiBhbmQgcDEgYXJlIGNvbGxpbmVhciBhbmQgcDEgbGllcyBvbiBwMnEyXG4gICAgaWYgKG80ID09PSAwICYmIG9uU2VnbWVudChwMiwgcTEsIHEyKSkgcmV0dXJuIHRydWU7IC8vIHAyLCBxMiBhbmQgcTEgYXJlIGNvbGxpbmVhciBhbmQgcTEgbGllcyBvbiBwMnEyXG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGZvciBjb2xsaW5lYXIgcG9pbnRzIHAsIHEsIHIsIGNoZWNrIGlmIHBvaW50IHEgbGllcyBvbiBzZWdtZW50IHByXG5mdW5jdGlvbiBvblNlZ21lbnQocCwgcSwgcikge1xuICAgIHJldHVybiBxLnggPD0gTWF0aC5tYXgocC54LCByLngpICYmIHEueCA+PSBNYXRoLm1pbihwLngsIHIueCkgJiYgcS55IDw9IE1hdGgubWF4KHAueSwgci55KSAmJiBxLnkgPj0gTWF0aC5taW4ocC55LCByLnkpO1xufVxuXG5mdW5jdGlvbiBzaWduKG51bSkge1xuICAgIHJldHVybiBudW0gPiAwID8gMSA6IG51bSA8IDAgPyAtMSA6IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIHAubmV4dC55ICE9PSBwLnkgJiZcbiAgICAgICAgICAgICAgICAocHggPCAocC5uZXh0LnggLSBwLngpICogKHB5IC0gcC55KSAvIChwLm5leHQueSAtIHAueSkgKyBwLngpKVxuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBpbnNpZGU7XG59XG5cbi8vIGxpbmsgdHdvIHBvbHlnb24gdmVydGljZXMgd2l0aCBhIGJyaWRnZTsgaWYgdGhlIHZlcnRpY2VzIGJlbG9uZyB0byB0aGUgc2FtZSByaW5nLCBpdCBzcGxpdHMgcG9seWdvbiBpbnRvIHR3bztcbi8vIGlmIG9uZSBiZWxvbmdzIHRvIHRoZSBvdXRlciByaW5nIGFuZCBhbm90aGVyIHRvIGEgaG9sZSwgaXQgbWVyZ2VzIGl0IGludG8gYSBzaW5nbGUgcmluZ1xuZnVuY3Rpb24gc3BsaXRQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgYTIgPSBuZXcgTm9kZShhLmksIGEueCwgYS55KSxcbiAgICAgICAgYjIgPSBuZXcgTm9kZShiLmksIGIueCwgYi55KSxcbiAgICAgICAgYW4gPSBhLm5leHQsXG4gICAgICAgIGJwID0gYi5wcmV2O1xuXG4gICAgYS5uZXh0ID0gYjtcbiAgICBiLnByZXYgPSBhO1xuXG4gICAgYTIubmV4dCA9IGFuO1xuICAgIGFuLnByZXYgPSBhMjtcblxuICAgIGIyLm5leHQgPSBhMjtcbiAgICBhMi5wcmV2ID0gYjI7XG5cbiAgICBicC5uZXh0ID0gYjI7XG4gICAgYjIucHJldiA9IGJwO1xuXG4gICAgcmV0dXJuIGIyO1xufVxuXG4vLyBjcmVhdGUgYSBub2RlIGFuZCBvcHRpb25hbGx5IGxpbmsgaXQgd2l0aCBwcmV2aW91cyBvbmUgKGluIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gaW5zZXJ0Tm9kZShpLCB4LCB5LCBsYXN0KSB7XG4gICAgdmFyIHAgPSBuZXcgTm9kZShpLCB4LCB5KTtcblxuICAgIGlmICghbGFzdCkge1xuICAgICAgICBwLnByZXYgPSBwO1xuICAgICAgICBwLm5leHQgPSBwO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcC5uZXh0ID0gbGFzdC5uZXh0O1xuICAgICAgICBwLnByZXYgPSBsYXN0O1xuICAgICAgICBsYXN0Lm5leHQucHJldiA9IHA7XG4gICAgICAgIGxhc3QubmV4dCA9IHA7XG4gICAgfVxuICAgIHJldHVybiBwO1xufVxuXG5mdW5jdGlvbiByZW1vdmVOb2RlKHApIHtcbiAgICBwLm5leHQucHJldiA9IHAucHJldjtcbiAgICBwLnByZXYubmV4dCA9IHAubmV4dDtcblxuICAgIGlmIChwLnByZXZaKSBwLnByZXZaLm5leHRaID0gcC5uZXh0WjtcbiAgICBpZiAocC5uZXh0WikgcC5uZXh0Wi5wcmV2WiA9IHAucHJldlo7XG59XG5cbmZ1bmN0aW9uIE5vZGUoaSwgeCwgeSkge1xuICAgIC8vIHZlcnRleCBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0ZXggbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG5cbi8vIHJldHVybiBhIHBlcmNlbnRhZ2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwb2x5Z29uIGFyZWEgYW5kIGl0cyB0cmlhbmd1bGF0aW9uIGFyZWE7XG4vLyB1c2VkIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiB0cmlhbmd1bGF0aW9uXG5lYXJjdXQuZGV2aWF0aW9uID0gZnVuY3Rpb24gKGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0sIHRyaWFuZ2xlcykge1xuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aDtcbiAgICB2YXIgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGg7XG5cbiAgICB2YXIgcG9seWdvbkFyZWEgPSBNYXRoLmFicyhzaWduZWRBcmVhKGRhdGEsIDAsIG91dGVyTGVuLCBkaW0pKTtcbiAgICBpZiAoaGFzSG9sZXMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBob2xlSW5kaWNlc1tpXSAqIGRpbTtcbiAgICAgICAgICAgIHZhciBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgcG9seWdvbkFyZWEgLT0gTWF0aC5hYnMoc2lnbmVkQXJlYShkYXRhLCBzdGFydCwgZW5kLCBkaW0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0cmlhbmdsZXNBcmVhID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIHZhciBhID0gdHJpYW5nbGVzW2ldICogZGltO1xuICAgICAgICB2YXIgYiA9IHRyaWFuZ2xlc1tpICsgMV0gKiBkaW07XG4gICAgICAgIHZhciBjID0gdHJpYW5nbGVzW2kgKyAyXSAqIGRpbTtcbiAgICAgICAgdHJpYW5nbGVzQXJlYSArPSBNYXRoLmFicyhcbiAgICAgICAgICAgIChkYXRhW2FdIC0gZGF0YVtjXSkgKiAoZGF0YVtiICsgMV0gLSBkYXRhW2EgKyAxXSkgLVxuICAgICAgICAgICAgKGRhdGFbYV0gLSBkYXRhW2JdKSAqIChkYXRhW2MgKyAxXSAtIGRhdGFbYSArIDFdKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvbHlnb25BcmVhID09PSAwICYmIHRyaWFuZ2xlc0FyZWEgPT09IDAgPyAwIDpcbiAgICAgICAgTWF0aC5hYnMoKHRyaWFuZ2xlc0FyZWEgLSBwb2x5Z29uQXJlYSkgLyBwb2x5Z29uQXJlYSk7XG59O1xuXG5mdW5jdGlvbiBzaWduZWRBcmVhKGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSkge1xuICAgIHZhciBzdW0gPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cbiAgICByZXR1cm4gc3VtO1xufVxuXG4vLyB0dXJuIGEgcG9seWdvbiBpbiBhIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5IGZvcm0gKGUuZy4gYXMgaW4gR2VvSlNPTikgaW50byBhIGZvcm0gRWFyY3V0IGFjY2VwdHNcbmVhcmN1dC5mbGF0dGVuID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgZGltID0gZGF0YVswXVswXS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdCA9IHt2ZXJ0aWNlczogW10sIGhvbGVzOiBbXSwgZGltZW5zaW9uczogZGltfSxcbiAgICAgICAgaG9sZUluZGV4ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRhdGFbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGltOyBkKyspIHJlc3VsdC52ZXJ0aWNlcy5wdXNoKGRhdGFbaV1bal1bZF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgaG9sZUluZGV4ICs9IGRhdGFbaSAtIDFdLmxlbmd0aDtcbiAgICAgICAgICAgIHJlc3VsdC5ob2xlcy5wdXNoKGhvbGVJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1aWNrc2VsZWN0KGFyciwgaywgbGVmdCwgcmlnaHQsIGNvbXBhcmUpIHtcbiAgICBxdWlja3NlbGVjdFN0ZXAoYXJyLCBrLCBsZWZ0IHx8IDAsIHJpZ2h0IHx8IChhcnIubGVuZ3RoIC0gMSksIGNvbXBhcmUgfHwgZGVmYXVsdENvbXBhcmUpO1xufVxuXG5mdW5jdGlvbiBxdWlja3NlbGVjdFN0ZXAoYXJyLCBrLCBsZWZ0LCByaWdodCwgY29tcGFyZSkge1xuXG4gICAgd2hpbGUgKHJpZ2h0ID4gbGVmdCkge1xuICAgICAgICBpZiAocmlnaHQgLSBsZWZ0ID4gNjAwKSB7XG4gICAgICAgICAgICB2YXIgbiA9IHJpZ2h0IC0gbGVmdCArIDE7XG4gICAgICAgICAgICB2YXIgbSA9IGsgLSBsZWZ0ICsgMTtcbiAgICAgICAgICAgIHZhciB6ID0gTWF0aC5sb2cobik7XG4gICAgICAgICAgICB2YXIgcyA9IDAuNSAqIE1hdGguZXhwKDIgKiB6IC8gMyk7XG4gICAgICAgICAgICB2YXIgc2QgPSAwLjUgKiBNYXRoLnNxcnQoeiAqIHMgKiAobiAtIHMpIC8gbikgKiAobSAtIG4gLyAyIDwgMCA/IC0xIDogMSk7XG4gICAgICAgICAgICB2YXIgbmV3TGVmdCA9IE1hdGgubWF4KGxlZnQsIE1hdGguZmxvb3IoayAtIG0gKiBzIC8gbiArIHNkKSk7XG4gICAgICAgICAgICB2YXIgbmV3UmlnaHQgPSBNYXRoLm1pbihyaWdodCwgTWF0aC5mbG9vcihrICsgKG4gLSBtKSAqIHMgLyBuICsgc2QpKTtcbiAgICAgICAgICAgIHF1aWNrc2VsZWN0U3RlcChhcnIsIGssIG5ld0xlZnQsIG5ld1JpZ2h0LCBjb21wYXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gYXJyW2tdO1xuICAgICAgICB2YXIgaSA9IGxlZnQ7XG4gICAgICAgIHZhciBqID0gcmlnaHQ7XG5cbiAgICAgICAgc3dhcChhcnIsIGxlZnQsIGspO1xuICAgICAgICBpZiAoY29tcGFyZShhcnJbcmlnaHRdLCB0KSA+IDApIHN3YXAoYXJyLCBsZWZ0LCByaWdodCk7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBqKSB7XG4gICAgICAgICAgICBzd2FwKGFyciwgaSwgaik7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB3aGlsZSAoY29tcGFyZShhcnJbaV0sIHQpIDwgMCkgaSsrO1xuICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUoYXJyW2pdLCB0KSA+IDApIGotLTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21wYXJlKGFycltsZWZ0XSwgdCkgPT09IDApIHN3YXAoYXJyLCBsZWZ0LCBqKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgICBzd2FwKGFyciwgaiwgcmlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGogPD0gaykgbGVmdCA9IGogKyAxO1xuICAgICAgICBpZiAoayA8PSBqKSByaWdodCA9IGogLSAxO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc3dhcChhcnIsIGksIGopIHtcbiAgICB2YXIgdG1wID0gYXJyW2ldO1xuICAgIGFycltpXSA9IGFycltqXTtcbiAgICBhcnJbal0gPSB0bXA7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgcXVpY2tzZWxlY3QgZnJvbSAncXVpY2tzZWxlY3QnO1xuXG5pbXBvcnQge2NhbGN1bGF0ZVNpZ25lZEFyZWF9IGZyb20gJy4vdXRpbCc7XG5cbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vLyBjbGFzc2lmaWVzIGFuIGFycmF5IG9mIHJpbmdzIGludG8gcG9seWdvbnMgd2l0aCBvdXRlciByaW5ncyBhbmQgaG9sZXNcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNsYXNzaWZ5UmluZ3MocmluZ3M6IEFycmF5PEFycmF5PFBvaW50Pj4sIG1heFJpbmdzOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW4gPSByaW5ncy5sZW5ndGg7XG5cbiAgICBpZiAobGVuIDw9IDEpIHJldHVybiBbcmluZ3NdO1xuXG4gICAgY29uc3QgcG9seWdvbnMgPSBbXTtcbiAgICBsZXQgcG9seWdvbixcbiAgICAgICAgY2N3O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBhcmVhID0gY2FsY3VsYXRlU2lnbmVkQXJlYShyaW5nc1tpXSk7XG4gICAgICAgIGlmIChhcmVhID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICAocmluZ3NbaV06IGFueSkuYXJlYSA9IE1hdGguYWJzKGFyZWEpO1xuXG4gICAgICAgIGlmIChjY3cgPT09IHVuZGVmaW5lZCkgY2N3ID0gYXJlYSA8IDA7XG5cbiAgICAgICAgaWYgKGNjdyA9PT0gYXJlYSA8IDApIHtcbiAgICAgICAgICAgIGlmIChwb2x5Z29uKSBwb2x5Z29ucy5wdXNoKHBvbHlnb24pO1xuICAgICAgICAgICAgcG9seWdvbiA9IFtyaW5nc1tpXV07XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIChwb2x5Z29uOiBhbnkpLnB1c2gocmluZ3NbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwb2x5Z29uKSBwb2x5Z29ucy5wdXNoKHBvbHlnb24pO1xuXG4gICAgLy8gRWFyY3V0IHBlcmZvcm1hbmNlIGRlZ3JhZGVzIHdpdGggdGhlICMgb2YgcmluZ3MgaW4gYSBwb2x5Z29uLiBGb3IgdGhpc1xuICAgIC8vIHJlYXNvbiwgd2UgbGltaXQgc3RyaXAgb3V0IGFsbCBidXQgdGhlIGBtYXhSaW5nc2AgbGFyZ2VzdCByaW5ncy5cbiAgICBpZiAobWF4UmluZ3MgPiAxKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcG9seWdvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChwb2x5Z29uc1tqXS5sZW5ndGggPD0gbWF4UmluZ3MpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcXVpY2tzZWxlY3QocG9seWdvbnNbal0sIG1heFJpbmdzLCAxLCBwb2x5Z29uc1tqXS5sZW5ndGggLSAxLCBjb21wYXJlQXJlYXMpO1xuICAgICAgICAgICAgcG9seWdvbnNbal0gPSBwb2x5Z29uc1tqXS5zbGljZSgwLCBtYXhSaW5ncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcG9seWdvbnM7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVBcmVhcyhhLCBiKSB7XG4gICAgcmV0dXJuIGIuYXJlYSAtIGEuYXJlYTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSBGaWxsU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIExpbmVTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgQnVja2V0RmVhdHVyZSxcbiAgICBQb3B1bGF0ZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vYnVja2V0JztcblxudHlwZSBQYXR0ZXJuU3R5bGVMYXllcnMgPVxuICAgIEFycmF5PExpbmVTdHlsZUxheWVyPiB8XG4gICAgQXJyYXk8RmlsbFN0eWxlTGF5ZXI+IHxcbiAgICBBcnJheTxGaWxsRXh0cnVzaW9uU3R5bGVMYXllcj47XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQYXR0ZXJuKHR5cGU6IHN0cmluZywgbGF5ZXJzOiBQYXR0ZXJuU3R5bGVMYXllcnMsIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycykge1xuICAgIGNvbnN0IHBhdHRlcm5zID0gb3B0aW9ucy5wYXR0ZXJuRGVwZW5kZW5jaWVzO1xuICAgIGxldCBoYXNQYXR0ZXJuID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHkgPSBsYXllci5wYWludC5nZXQoYCR7dHlwZX0tcGF0dGVybmApO1xuICAgICAgICBpZiAoIXBhdHRlcm5Qcm9wZXJ0eS5pc0NvbnN0YW50KCkpIHtcbiAgICAgICAgICAgIGhhc1BhdHRlcm4gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uc3RhbnRQYXR0ZXJuID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IobnVsbCk7XG4gICAgICAgIGlmIChjb25zdGFudFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGhhc1BhdHRlcm4gPSB0cnVlO1xuICAgICAgICAgICAgcGF0dGVybnNbY29uc3RhbnRQYXR0ZXJuLnRvXSA9ICB0cnVlO1xuICAgICAgICAgICAgcGF0dGVybnNbY29uc3RhbnRQYXR0ZXJuLmZyb21dID0gIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUGF0dGVybjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFBhdHRlcm5EZXBlbmRlbmNpZXModHlwZTogc3RyaW5nLCBsYXllcnM6IFBhdHRlcm5TdHlsZUxheWVycywgcGF0dGVybkZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIHpvb206IG51bWJlciwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBvcHRpb25zLnBhdHRlcm5EZXBlbmRlbmNpZXM7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgY29uc3QgcGF0dGVyblByb3BlcnR5ID0gbGF5ZXIucGFpbnQuZ2V0KGAke3R5cGV9LXBhdHRlcm5gKTtcblxuICAgICAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHlWYWx1ZSA9IHBhdHRlcm5Qcm9wZXJ0eS52YWx1ZTtcbiAgICAgICAgaWYgKHBhdHRlcm5Qcm9wZXJ0eVZhbHVlLmtpbmQgIT09IFwiY29uc3RhbnRcIikge1xuICAgICAgICAgICAgbGV0IG1pbiA9IHBhdHRlcm5Qcm9wZXJ0eVZhbHVlLmV2YWx1YXRlKHt6b29tOiB6b29tIC0gMX0sIHBhdHRlcm5GZWF0dXJlLCB7fSwgb3B0aW9ucy5hdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgbGV0IG1pZCA9IHBhdHRlcm5Qcm9wZXJ0eVZhbHVlLmV2YWx1YXRlKHt6b29tfSwgcGF0dGVybkZlYXR1cmUsIHt9LCBvcHRpb25zLmF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICBsZXQgbWF4ID0gcGF0dGVyblByb3BlcnR5VmFsdWUuZXZhbHVhdGUoe3pvb206IHpvb20gKyAxfSwgcGF0dGVybkZlYXR1cmUsIHt9LCBvcHRpb25zLmF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICBtaW4gPSBtaW4gJiYgbWluLm5hbWUgPyBtaW4ubmFtZSA6IG1pbjtcbiAgICAgICAgICAgIG1pZCA9IG1pZCAmJiBtaWQubmFtZSA/IG1pZC5uYW1lIDogbWlkO1xuICAgICAgICAgICAgbWF4ID0gbWF4ICYmIG1heC5uYW1lID8gbWF4Lm5hbWUgOiBtYXg7XG4gICAgICAgICAgICAvLyBhZGQgdG8gcGF0dGVybkRlcGVuZGVuY2llc1xuICAgICAgICAgICAgcGF0dGVybnNbbWluXSA9IHRydWU7XG4gICAgICAgICAgICBwYXR0ZXJuc1ttaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgIHBhdHRlcm5zW21heF0gPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBzYXZlIGZvciBsYXlvdXRcbiAgICAgICAgICAgIHBhdHRlcm5GZWF0dXJlLnBhdHRlcm5zW2xheWVyLmlkXSA9IHttaW4sIG1pZCwgbWF4fTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF0dGVybkZlYXR1cmU7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0ZpbGxMYXlvdXRBcnJheX0gZnJvbSAnLi4vYXJyYXlfdHlwZXMnO1xuXG5pbXBvcnQge21lbWJlcnMgYXMgbGF5b3V0QXR0cmlidXRlc30gZnJvbSAnLi9maWxsX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtMaW5lSW5kZXhBcnJheSwgVHJpYW5nbGVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCBlYXJjdXQgZnJvbSAnZWFyY3V0JztcbmltcG9ydCBjbGFzc2lmeVJpbmdzIGZyb20gJy4uLy4uL3V0aWwvY2xhc3NpZnlfcmluZ3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuY29uc3QgRUFSQ1VUX01BWF9SSU5HUyA9IDUwMDtcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQge2hhc1BhdHRlcm4sIGFkZFBhdHRlcm5EZXBlbmRlbmNpZXN9IGZyb20gJy4vcGF0dGVybl9idWNrZXRfZmVhdHVyZXMnO1xuaW1wb3J0IGxvYWRHZW9tZXRyeSBmcm9tICcuLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgQnVja2V0LFxuICAgIEJ1Y2tldFBhcmFtZXRlcnMsXG4gICAgQnVja2V0RmVhdHVyZSxcbiAgICBJbmRleGVkRmVhdHVyZSxcbiAgICBQb3B1bGF0ZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vYnVja2V0JztcbmltcG9ydCB0eXBlIEZpbGxTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGVzfSBmcm9tICcuLi8uLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi8uLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuXG5jbGFzcyBGaWxsQnVja2V0IGltcGxlbWVudHMgQnVja2V0IHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVyczogQXJyYXk8RmlsbFN0eWxlTGF5ZXI+O1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxGaWxsU3R5bGVMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBwYXR0ZXJuRmVhdHVyZXM6IEFycmF5PEJ1Y2tldEZlYXR1cmU+O1xuXG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IEZpbGxMYXlvdXRBcnJheTtcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5MjogTGluZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXIyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxGaWxsU3R5bGVMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgc2VnbWVudHMyOiBTZWdtZW50VmVjdG9yO1xuICAgIHVwbG9hZGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQnVja2V0UGFyYW1ldGVyczxGaWxsU3R5bGVMYXllcj4pIHtcbiAgICAgICAgdGhpcy56b29tID0gb3B0aW9ucy56b29tO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gb3B0aW9ucy5vdmVyc2NhbGluZztcbiAgICAgICAgdGhpcy5sYXllcnMgPSBvcHRpb25zLmxheWVycztcbiAgICAgICAgdGhpcy5sYXllcklkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXR0ZXJuRmVhdHVyZXMgPSBbXTtcblxuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IEZpbGxMYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLmluZGV4QXJyYXkgPSBuZXcgVHJpYW5nbGVJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheTIgPSBuZXcgTGluZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzMiA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcyA9IHRoaXMubGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pc1N0YXRlRGVwZW5kZW50KCkpLm1hcCgobCkgPT4gbC5pZCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGhhc1BhdHRlcm4oJ2ZpbGwnLCB0aGlzLmxheWVycywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGZpbGxTb3J0S2V5ID0gdGhpcy5sYXllcnNbMF0ubGF5b3V0LmdldCgnZmlsbC1zb3J0LWtleScpO1xuICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2ZlYXR1cmUsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSBvZiBmZWF0dXJlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy56b29tKSwgZmVhdHVyZSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGxvYWRHZW9tZXRyeShmZWF0dXJlKTtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRLZXkgPSBmaWxsU29ydEtleSA/XG4gICAgICAgICAgICAgICAgZmlsbFNvcnRLZXkuZXZhbHVhdGUoZmVhdHVyZSwge30sIG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzKSA6XG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlOiBCdWNrZXRGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgIGlkOiBmZWF0dXJlLmlkLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuczoge30sXG4gICAgICAgICAgICAgICAgc29ydEtleVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMucHVzaChidWNrZXRGZWF0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxsU29ydEtleSkge1xuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBpbiB1c2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBidWNrZXRGZWF0dXJlIG9mIGJ1Y2tldEZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSA9IGJ1Y2tldEZlYXR1cmU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1BhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuRmVhdHVyZSA9IGFkZFBhdHRlcm5EZXBlbmRlbmNpZXMoJ2ZpbGwnLCB0aGlzLmxheWVycywgYnVja2V0RmVhdHVyZSwgdGhpcy56b29tLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuIGZlYXR1cmVzIGFyZSBhZGRlZCBvbmx5IG9uY2UgdGhlIHBhdHRlcm4gaXMgbG9hZGVkIGludG8gdGhlIGltYWdlIGF0bGFzXG4gICAgICAgICAgICAgICAgLy8gc28gYXJlIHN0b3JlZCBkdXJpbmcgcG9wdWxhdGUgdW50aWwgbGF0ZXIgdXBkYXRlZCB3aXRoIHBvc2l0aW9ucyBieSB0aWxlIHdvcmtlciBpbiBhZGRGZWF0dXJlc1xuICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybkZlYXR1cmVzLnB1c2gocGF0dGVybkZlYXR1cmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoYnVja2V0RmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCB7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlc1tpbmRleF0uZmVhdHVyZTtcbiAgICAgICAgICAgIG9wdGlvbnMuZmVhdHVyZUluZGV4Lmluc2VydChmZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIHRoaXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5zdGF0ZURlcGVuZGVudExheWVycywgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIGFkZEZlYXR1cmVzKG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycywgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHRoaXMucGF0dGVybkZlYXR1cmVzKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoZmVhdHVyZSwgZmVhdHVyZS5nZW9tZXRyeSwgZmVhdHVyZS5pbmRleCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVwbG9hZFBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy51cGxvYWRlZCB8fCB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZDtcbiAgICB9XG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnVwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIGxheW91dEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIHRoaXMudXBsb2FkZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlcjIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzMi5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZShmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgaW5kZXg6IG51bWJlciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBwb2x5Z29uIG9mIGNsYXNzaWZ5UmluZ3MoZ2VvbWV0cnksIEVBUkNVVF9NQVhfUklOR1MpKSB7XG4gICAgICAgICAgICBsZXQgbnVtVmVydGljZXMgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBudW1WZXJ0aWNlcyArPSByaW5nLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdHJpYW5nbGVTZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChudW1WZXJ0aWNlcywgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWFuZ2xlSW5kZXggPSB0cmlhbmdsZVNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGhvbGVJbmRpY2VzID0gW107XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyaW5nICE9PSBwb2x5Z29uWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvbGVJbmRpY2VzLnB1c2goZmxhdHRlbmVkLmxlbmd0aCAvIDIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVTZWdtZW50ID0gdGhpcy5zZWdtZW50czIucHJlcGFyZVNlZ21lbnQocmluZy5sZW5ndGgsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheTIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVJbmRleCA9IGxpbmVTZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socmluZ1swXS54LCByaW5nWzBdLnkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2sobGluZUluZGV4ICsgcmluZy5sZW5ndGggLSAxLCBsaW5lSW5kZXgpO1xuICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHJpbmdbMF0ueCk7XG4gICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocmluZ1swXS55KTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHJpbmdbaV0ueCwgcmluZ1tpXS55KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayhsaW5lSW5kZXggKyBpIC0gMSwgbGluZUluZGV4ICsgaSk7XG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHJpbmdbaV0ueCk7XG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHJpbmdbaV0ueSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGluZVNlZ21lbnQudmVydGV4TGVuZ3RoICs9IHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxpbmVTZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSByaW5nLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5kaWNlcyA9IGVhcmN1dChmbGF0dGVuZWQsIGhvbGVJbmRpY2VzKTtcbiAgICAgICAgICAgIGFzc2VydChpbmRpY2VzLmxlbmd0aCAlIDMgPT09IDApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2ldLFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2kgKyAyXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlU2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gbnVtVmVydGljZXM7XG4gICAgICAgICAgICB0cmlhbmdsZVNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IGluZGljZXMubGVuZ3RoIC8gMztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0ZpbGxCdWNrZXQnLCBGaWxsQnVja2V0LCB7b21pdDogWydsYXllcnMnLCAncGF0dGVybkZlYXR1cmVzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsbEJ1Y2tldDtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIExheW91dFByb3BzID0ge3xcbiAgICBcImZpbGwtc29ydC1rZXlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImZpbGwtc29ydC1rZXlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfZmlsbFwiXVtcImZpbGwtc29ydC1rZXlcIl0pLFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1hbnRpYWxpYXNcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJmaWxsLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJmaWxsLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJmaWxsLW91dGxpbmUtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtdHJhbnNsYXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiZmlsbC1wYXR0ZXJuXCI6IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJmaWxsLWFudGlhbGlhc1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtYW50aWFsaWFzXCJdKSxcbiAgICBcImZpbGwtb3BhY2l0eVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLW9wYWNpdHlcIl0pLFxuICAgIFwiZmlsbC1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLWNvbG9yXCJdKSxcbiAgICBcImZpbGwtb3V0bGluZS1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLW91dGxpbmUtY29sb3JcIl0pLFxuICAgIFwiZmlsbC10cmFuc2xhdGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLXRyYW5zbGF0ZVwiXSksXG4gICAgXCJmaWxsLXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFxuICAgIFwiZmlsbC1wYXR0ZXJuXCI6IG5ldyBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLXBhdHRlcm5cIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQsIGxheW91dCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiwgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgRmlsbEJ1Y2tldCBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldC9maWxsX2J1Y2tldCc7XG5pbXBvcnQge3BvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29ufSBmcm9tICcuLi8uLi91dGlsL2ludGVyc2VjdGlvbl90ZXN0cyc7XG5pbXBvcnQge3RyYW5zbGF0ZURpc3RhbmNlLCB0cmFuc2xhdGV9IGZyb20gJy4uL3F1ZXJ5X3V0aWxzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vZmlsbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIExheW91dCwgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge0xheW91dFByb3BzLCBQYWludFByb3BzfSBmcm9tICcuL2ZpbGxfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIEZpbGxTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3VuZXZhbHVhdGVkTGF5b3V0OiBMYXlvdXQ8TGF5b3V0UHJvcHM+O1xuICAgIGxheW91dDogUG9zc2libHlFdmFsdWF0ZWQ8TGF5b3V0UHJvcHM+O1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgcmVjYWxjdWxhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBzdXBlci5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuXG4gICAgICAgIGNvbnN0IG91dGxpbmVDb2xvciA9IHRoaXMucGFpbnQuX3ZhbHVlc1snZmlsbC1vdXRsaW5lLWNvbG9yJ107XG4gICAgICAgIGlmIChvdXRsaW5lQ29sb3IudmFsdWUua2luZCA9PT0gJ2NvbnN0YW50JyAmJiBvdXRsaW5lQ29sb3IudmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5wYWludC5fdmFsdWVzWydmaWxsLW91dGxpbmUtY29sb3InXSA9IHRoaXMucGFpbnQuX3ZhbHVlc1snZmlsbC1jb2xvciddO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8Kj4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxsQnVja2V0KHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHF1ZXJ5UmFkaXVzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVEaXN0YW5jZSh0aGlzLnBhaW50LmdldCgnZmlsbC10cmFuc2xhdGUnKSk7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFBvbHlnb24gPSB0cmFuc2xhdGUocXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdmaWxsLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlLWFuY2hvcicpLFxuICAgICAgICAgICAgdHJhbnNmb3JtLmFuZ2xlLCBwaXhlbHNUb1RpbGVVbml0cyk7XG4gICAgICAgIHJldHVybiBwb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbih0cmFuc2xhdGVkUG9seWdvbiwgZ2VvbWV0cnkpO1xuICAgIH1cblxuICAgIGlzVGlsZUNsaXBwZWQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsbFN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuY29uc3QgbGF5b3V0ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zJywgICAgICAgICAgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX25vcm1hbF9lZCcsICAgIGNvbXBvbmVudHM6IDQsIHR5cGU6ICdJbnQxNid9LFxuXSwgNCk7XG5cbmV4cG9ydCBkZWZhdWx0IGxheW91dDtcbmV4cG9ydCBjb25zdCB7bWVtYmVycywgc2l6ZSwgYWxpZ25tZW50fSA9IGxheW91dDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnQG1hcGJveC9wb2ludC1nZW9tZXRyeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvclRpbGVGZWF0dXJlO1xuXG5mdW5jdGlvbiBWZWN0b3JUaWxlRmVhdHVyZShwYmYsIGVuZCwgZXh0ZW50LCBrZXlzLCB2YWx1ZXMpIHtcbiAgICAvLyBQdWJsaWNcbiAgICB0aGlzLnByb3BlcnRpZXMgPSB7fTtcbiAgICB0aGlzLmV4dGVudCA9IGV4dGVudDtcbiAgICB0aGlzLnR5cGUgPSAwO1xuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX3BiZiA9IHBiZjtcbiAgICB0aGlzLl9nZW9tZXRyeSA9IC0xO1xuICAgIHRoaXMuX2tleXMgPSBrZXlzO1xuICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcztcblxuICAgIHBiZi5yZWFkRmllbGRzKHJlYWRGZWF0dXJlLCB0aGlzLCBlbmQpO1xufVxuXG5mdW5jdGlvbiByZWFkRmVhdHVyZSh0YWcsIGZlYXR1cmUsIHBiZikge1xuICAgIGlmICh0YWcgPT0gMSkgZmVhdHVyZS5pZCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09IDIpIHJlYWRUYWcocGJmLCBmZWF0dXJlKTtcbiAgICBlbHNlIGlmICh0YWcgPT0gMykgZmVhdHVyZS50eXBlID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT0gNCkgZmVhdHVyZS5fZ2VvbWV0cnkgPSBwYmYucG9zO1xufVxuXG5mdW5jdGlvbiByZWFkVGFnKHBiZiwgZmVhdHVyZSkge1xuICAgIHZhciBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcztcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIHZhciBrZXkgPSBmZWF0dXJlLl9rZXlzW3BiZi5yZWFkVmFyaW50KCldLFxuICAgICAgICAgICAgdmFsdWUgPSBmZWF0dXJlLl92YWx1ZXNbcGJmLnJlYWRWYXJpbnQoKV07XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllc1trZXldID0gdmFsdWU7XG4gICAgfVxufVxuXG5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyA9IFsnVW5rbm93bicsICdQb2ludCcsICdMaW5lU3RyaW5nJywgJ1BvbHlnb24nXTtcblxuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLmxvYWRHZW9tZXRyeSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYmYgPSB0aGlzLl9wYmY7XG4gICAgcGJmLnBvcyA9IHRoaXMuX2dlb21ldHJ5O1xuXG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zLFxuICAgICAgICBjbWQgPSAxLFxuICAgICAgICBsZW5ndGggPSAwLFxuICAgICAgICB4ID0gMCxcbiAgICAgICAgeSA9IDAsXG4gICAgICAgIGxpbmVzID0gW10sXG4gICAgICAgIGxpbmU7XG5cbiAgICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgICAgICBpZiAobGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHZhciBjbWRMZW4gPSBwYmYucmVhZFZhcmludCgpO1xuICAgICAgICAgICAgY21kID0gY21kTGVuICYgMHg3O1xuICAgICAgICAgICAgbGVuZ3RoID0gY21kTGVuID4+IDM7XG4gICAgICAgIH1cblxuICAgICAgICBsZW5ndGgtLTtcblxuICAgICAgICBpZiAoY21kID09PSAxIHx8IGNtZCA9PT0gMikge1xuICAgICAgICAgICAgeCArPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICAgICAgICAgIHkgKz0gcGJmLnJlYWRTVmFyaW50KCk7XG5cbiAgICAgICAgICAgIGlmIChjbWQgPT09IDEpIHsgLy8gbW92ZVRvXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7XG4gICAgICAgICAgICAgICAgbGluZSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaW5lLnB1c2gobmV3IFBvaW50KHgsIHkpKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNtZCA9PT0gNykge1xuXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcG5pay12ZWN0b3ItdGlsZS9pc3N1ZXMvOTBcbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgbGluZS5wdXNoKGxpbmVbMF0uY2xvbmUoKSk7IC8vIGNsb3NlUG9seWdvblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29tbWFuZCAnICsgY21kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsaW5lKSBsaW5lcy5wdXNoKGxpbmUpO1xuXG4gICAgcmV0dXJuIGxpbmVzO1xufTtcblxuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLmJib3ggPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGJmID0gdGhpcy5fcGJmO1xuICAgIHBiZi5wb3MgPSB0aGlzLl9nZW9tZXRyeTtcblxuICAgIHZhciBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcyxcbiAgICAgICAgY21kID0gMSxcbiAgICAgICAgbGVuZ3RoID0gMCxcbiAgICAgICAgeCA9IDAsXG4gICAgICAgIHkgPSAwLFxuICAgICAgICB4MSA9IEluZmluaXR5LFxuICAgICAgICB4MiA9IC1JbmZpbml0eSxcbiAgICAgICAgeTEgPSBJbmZpbml0eSxcbiAgICAgICAgeTIgPSAtSW5maW5pdHk7XG5cbiAgICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgICAgICBpZiAobGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHZhciBjbWRMZW4gPSBwYmYucmVhZFZhcmludCgpO1xuICAgICAgICAgICAgY21kID0gY21kTGVuICYgMHg3O1xuICAgICAgICAgICAgbGVuZ3RoID0gY21kTGVuID4+IDM7XG4gICAgICAgIH1cblxuICAgICAgICBsZW5ndGgtLTtcblxuICAgICAgICBpZiAoY21kID09PSAxIHx8IGNtZCA9PT0gMikge1xuICAgICAgICAgICAgeCArPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICAgICAgICAgIHkgKz0gcGJmLnJlYWRTVmFyaW50KCk7XG4gICAgICAgICAgICBpZiAoeCA8IHgxKSB4MSA9IHg7XG4gICAgICAgICAgICBpZiAoeCA+IHgyKSB4MiA9IHg7XG4gICAgICAgICAgICBpZiAoeSA8IHkxKSB5MSA9IHk7XG4gICAgICAgICAgICBpZiAoeSA+IHkyKSB5MiA9IHk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjbWQgIT09IDcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb21tYW5kICcgKyBjbWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFt4MSwgeTEsIHgyLCB5Ml07XG59O1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUudG9HZW9KU09OID0gZnVuY3Rpb24oeCwgeSwgeikge1xuICAgIHZhciBzaXplID0gdGhpcy5leHRlbnQgKiBNYXRoLnBvdygyLCB6KSxcbiAgICAgICAgeDAgPSB0aGlzLmV4dGVudCAqIHgsXG4gICAgICAgIHkwID0gdGhpcy5leHRlbnQgKiB5LFxuICAgICAgICBjb29yZHMgPSB0aGlzLmxvYWRHZW9tZXRyeSgpLFxuICAgICAgICB0eXBlID0gVmVjdG9yVGlsZUZlYXR1cmUudHlwZXNbdGhpcy50eXBlXSxcbiAgICAgICAgaSwgajtcblxuICAgIGZ1bmN0aW9uIHByb2plY3QobGluZSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gbGluZVtqXSwgeTIgPSAxODAgLSAocC55ICsgeTApICogMzYwIC8gc2l6ZTtcbiAgICAgICAgICAgIGxpbmVbal0gPSBbXG4gICAgICAgICAgICAgICAgKHAueCArIHgwKSAqIDM2MCAvIHNpemUgLSAxODAsXG4gICAgICAgICAgICAgICAgMzYwIC8gTWF0aC5QSSAqIE1hdGguYXRhbihNYXRoLmV4cCh5MiAqIE1hdGguUEkgLyAxODApKSAtIDkwXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICBjYXNlIDE6XG4gICAgICAgIHZhciBwb2ludHMgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gY29vcmRzW2ldWzBdO1xuICAgICAgICB9XG4gICAgICAgIGNvb3JkcyA9IHBvaW50cztcbiAgICAgICAgcHJvamVjdChjb29yZHMpO1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgMjpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcHJvamVjdChjb29yZHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgICBjb29yZHMgPSBjbGFzc2lmeVJpbmdzKGNvb3Jkcyk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0KGNvb3Jkc1tpXVtqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGNvb3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29vcmRzID0gY29vcmRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGUgPSAnTXVsdGknICsgdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICB0eXBlOiBcIkZlYXR1cmVcIixcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICBjb29yZGluYXRlczogY29vcmRzXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IHRoaXMucHJvcGVydGllc1xuICAgIH07XG5cbiAgICBpZiAoJ2lkJyBpbiB0aGlzKSB7XG4gICAgICAgIHJlc3VsdC5pZCA9IHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGNsYXNzaWZpZXMgYW4gYXJyYXkgb2YgcmluZ3MgaW50byBwb2x5Z29ucyB3aXRoIG91dGVyIHJpbmdzIGFuZCBob2xlc1xuXG5mdW5jdGlvbiBjbGFzc2lmeVJpbmdzKHJpbmdzKSB7XG4gICAgdmFyIGxlbiA9IHJpbmdzLmxlbmd0aDtcblxuICAgIGlmIChsZW4gPD0gMSkgcmV0dXJuIFtyaW5nc107XG5cbiAgICB2YXIgcG9seWdvbnMgPSBbXSxcbiAgICAgICAgcG9seWdvbixcbiAgICAgICAgY2N3O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgYXJlYSA9IHNpZ25lZEFyZWEocmluZ3NbaV0pO1xuICAgICAgICBpZiAoYXJlYSA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgaWYgKGNjdyA9PT0gdW5kZWZpbmVkKSBjY3cgPSBhcmVhIDwgMDtcblxuICAgICAgICBpZiAoY2N3ID09PSBhcmVhIDwgMCkge1xuICAgICAgICAgICAgaWYgKHBvbHlnb24pIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG4gICAgICAgICAgICBwb2x5Z29uID0gW3JpbmdzW2ldXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9seWdvbi5wdXNoKHJpbmdzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocG9seWdvbikgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcblxuICAgIHJldHVybiBwb2x5Z29ucztcbn1cblxuZnVuY3Rpb24gc2lnbmVkQXJlYShyaW5nKSB7XG4gICAgdmFyIHN1bSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMSwgcDEsIHAyOyBpIDwgbGVuOyBqID0gaSsrKSB7XG4gICAgICAgIHAxID0gcmluZ1tpXTtcbiAgICAgICAgcDIgPSByaW5nW2pdO1xuICAgICAgICBzdW0gKz0gKHAyLnggLSBwMS54KSAqIChwMS55ICsgcDIueSk7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWZWN0b3JUaWxlRmVhdHVyZSA9IHJlcXVpcmUoJy4vdmVjdG9ydGlsZWZlYXR1cmUuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBWZWN0b3JUaWxlTGF5ZXI7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGVMYXllcihwYmYsIGVuZCkge1xuICAgIC8vIFB1YmxpY1xuICAgIHRoaXMudmVyc2lvbiA9IDE7XG4gICAgdGhpcy5uYW1lID0gbnVsbDtcbiAgICB0aGlzLmV4dGVudCA9IDQwOTY7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX3BiZiA9IHBiZjtcbiAgICB0aGlzLl9rZXlzID0gW107XG4gICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgdGhpcy5fZmVhdHVyZXMgPSBbXTtcblxuICAgIHBiZi5yZWFkRmllbGRzKHJlYWRMYXllciwgdGhpcywgZW5kKTtcblxuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5fZmVhdHVyZXMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiByZWFkTGF5ZXIodGFnLCBsYXllciwgcGJmKSB7XG4gICAgaWYgKHRhZyA9PT0gMTUpIGxheWVyLnZlcnNpb24gPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMSkgbGF5ZXIubmFtZSA9IHBiZi5yZWFkU3RyaW5nKCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA1KSBsYXllci5leHRlbnQgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMikgbGF5ZXIuX2ZlYXR1cmVzLnB1c2gocGJmLnBvcyk7XG4gICAgZWxzZSBpZiAodGFnID09PSAzKSBsYXllci5fa2V5cy5wdXNoKHBiZi5yZWFkU3RyaW5nKCkpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gNCkgbGF5ZXIuX3ZhbHVlcy5wdXNoKHJlYWRWYWx1ZU1lc3NhZ2UocGJmKSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRWYWx1ZU1lc3NhZ2UocGJmKSB7XG4gICAgdmFyIHZhbHVlID0gbnVsbCxcbiAgICAgICAgZW5kID0gcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3M7XG5cbiAgICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgICAgICB2YXIgdGFnID0gcGJmLnJlYWRWYXJpbnQoKSA+PiAzO1xuXG4gICAgICAgIHZhbHVlID0gdGFnID09PSAxID8gcGJmLnJlYWRTdHJpbmcoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDIgPyBwYmYucmVhZEZsb2F0KCkgOlxuICAgICAgICAgICAgdGFnID09PSAzID8gcGJmLnJlYWREb3VibGUoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDQgPyBwYmYucmVhZFZhcmludDY0KCkgOlxuICAgICAgICAgICAgdGFnID09PSA1ID8gcGJmLnJlYWRWYXJpbnQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDYgPyBwYmYucmVhZFNWYXJpbnQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDcgPyBwYmYucmVhZEJvb2xlYW4oKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG4vLyByZXR1cm4gZmVhdHVyZSBgaWAgZnJvbSB0aGlzIGxheWVyIGFzIGEgYFZlY3RvclRpbGVGZWF0dXJlYFxuVmVjdG9yVGlsZUxheWVyLnByb3RvdHlwZS5mZWF0dXJlID0gZnVuY3Rpb24oaSkge1xuICAgIGlmIChpIDwgMCB8fCBpID49IHRoaXMuX2ZlYXR1cmVzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdmZWF0dXJlIGluZGV4IG91dCBvZiBib3VuZHMnKTtcblxuICAgIHRoaXMuX3BiZi5wb3MgPSB0aGlzLl9mZWF0dXJlc1tpXTtcblxuICAgIHZhciBlbmQgPSB0aGlzLl9wYmYucmVhZFZhcmludCgpICsgdGhpcy5fcGJmLnBvcztcbiAgICByZXR1cm4gbmV3IFZlY3RvclRpbGVGZWF0dXJlKHRoaXMuX3BiZiwgZW5kLCB0aGlzLmV4dGVudCwgdGhpcy5fa2V5cywgdGhpcy5fdmFsdWVzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWZWN0b3JUaWxlTGF5ZXIgPSByZXF1aXJlKCcuL3ZlY3RvcnRpbGVsYXllcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvclRpbGU7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGUocGJmLCBlbmQpIHtcbiAgICB0aGlzLmxheWVycyA9IHBiZi5yZWFkRmllbGRzKHJlYWRUaWxlLCB7fSwgZW5kKTtcbn1cblxuZnVuY3Rpb24gcmVhZFRpbGUodGFnLCBsYXllcnMsIHBiZikge1xuICAgIGlmICh0YWcgPT09IDMpIHtcbiAgICAgICAgdmFyIGxheWVyID0gbmV3IFZlY3RvclRpbGVMYXllcihwYmYsIHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zKTtcbiAgICAgICAgaWYgKGxheWVyLmxlbmd0aCkgbGF5ZXJzW2xheWVyLm5hbWVdID0gbGF5ZXI7XG4gICAgfVxufVxuXG4iLCJtb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlID0gcmVxdWlyZSgnLi9saWIvdmVjdG9ydGlsZS5qcycpO1xubW9kdWxlLmV4cG9ydHMuVmVjdG9yVGlsZUZlYXR1cmUgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlZmVhdHVyZS5qcycpO1xubW9kdWxlLmV4cG9ydHMuVmVjdG9yVGlsZUxheWVyID0gcmVxdWlyZSgnLi9saWIvdmVjdG9ydGlsZWxheWVyLmpzJyk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0ZpbGxFeHRydXNpb25MYXlvdXRBcnJheX0gZnJvbSAnLi4vYXJyYXlfdHlwZXMnO1xuXG5pbXBvcnQge21lbWJlcnMgYXMgbGF5b3V0QXR0cmlidXRlc30gZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHtQcm9ncmFtQ29uZmlndXJhdGlvblNldH0gZnJvbSAnLi4vcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7VHJpYW5nbGVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZXh0ZW50JztcbmltcG9ydCBlYXJjdXQgZnJvbSAnZWFyY3V0JztcbmltcG9ydCBtdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5jb25zdCB2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzID0gbXZ0LlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzO1xuaW1wb3J0IGNsYXNzaWZ5UmluZ3MgZnJvbSAnLi4vLi4vdXRpbC9jbGFzc2lmeV9yaW5ncyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5jb25zdCBFQVJDVVRfTUFYX1JJTkdTID0gNTAwO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCB7aGFzUGF0dGVybiwgYWRkUGF0dGVybkRlcGVuZGVuY2llc30gZnJvbSAnLi9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuXG5pbXBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmNvbnN0IEZBQ1RPUiA9IE1hdGgucG93KDIsIDEzKTtcblxuZnVuY3Rpb24gYWRkVmVydGV4KHZlcnRleEFycmF5LCB4LCB5LCBueCwgbnksIG56LCB0LCBlKSB7XG4gICAgdmVydGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgIC8vIGFfcG9zXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIC8vIGFfbm9ybWFsX2VkOiAzLWNvbXBvbmVudCBub3JtYWwgYW5kIDEtY29tcG9uZW50IGVkZ2VkaXN0YW5jZVxuICAgICAgICBNYXRoLmZsb29yKG54ICogRkFDVE9SKSAqIDIgKyB0LFxuICAgICAgICBueSAqIEZBQ1RPUiAqIDIsXG4gICAgICAgIG56ICogRkFDVE9SICogMixcbiAgICAgICAgLy8gZWRnZWRpc3RhbmNlICh1c2VkIGZvciB3cmFwcGluZyBwYXR0ZXJucyBhcm91bmQgZXh0cnVzaW9uIHNpZGVzKVxuICAgICAgICBNYXRoLnJvdW5kKGUpXG4gICAgKTtcbn1cblxuY2xhc3MgRmlsbEV4dHJ1c2lvbkJ1Y2tldCBpbXBsZW1lbnRzIEJ1Y2tldCB7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBsYXllcnM6IEFycmF5PEZpbGxFeHRydXNpb25TdHlsZUxheWVyPjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogRmlsbEV4dHJ1c2lvbkxheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxGaWxsRXh0cnVzaW9uU3R5bGVMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG4gICAgZmVhdHVyZXM6IEFycmF5PEJ1Y2tldEZlYXR1cmU+O1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQnVja2V0UGFyYW1ldGVyczxGaWxsRXh0cnVzaW9uU3R5bGVMYXllcj4pIHtcbiAgICAgICAgdGhpcy56b29tID0gb3B0aW9ucy56b29tO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gb3B0aW9ucy5vdmVyc2NhbGluZztcbiAgICAgICAgdGhpcy5sYXllcnMgPSBvcHRpb25zLmxheWVycztcbiAgICAgICAgdGhpcy5sYXllcklkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IEZpbGxFeHRydXNpb25MYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLmluZGV4QXJyYXkgPSBuZXcgVHJpYW5nbGVJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zID0gbmV3IFByb2dyYW1Db25maWd1cmF0aW9uU2V0KGxheW91dEF0dHJpYnV0ZXMsIG9wdGlvbnMubGF5ZXJzLCBvcHRpb25zLnpvb20pO1xuICAgICAgICB0aGlzLnNlZ21lbnRzID0gbmV3IFNlZ21lbnRWZWN0b3IoKTtcbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcblxuICAgIH1cblxuICAgIHBvcHVsYXRlKGZlYXR1cmVzOiBBcnJheTxJbmRleGVkRmVhdHVyZT4sIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLmZlYXR1cmVzID0gW107XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGhhc1BhdHRlcm4oJ2ZpbGwtZXh0cnVzaW9uJywgdGhpcy5sYXllcnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2ZlYXR1cmUsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSBvZiBmZWF0dXJlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy56b29tKSwgZmVhdHVyZSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGxvYWRHZW9tZXRyeShmZWF0dXJlKTtcblxuICAgICAgICAgICAgY29uc3QgcGF0dGVybkZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgdHlwZTogZmVhdHVyZS50eXBlLFxuICAgICAgICAgICAgICAgIHBhdHRlcm5zOiB7fVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmZWF0dXJlLmlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHBhdHRlcm5GZWF0dXJlLmlkID0gZmVhdHVyZS5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUGF0dGVybikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaChhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzKCdmaWxsLWV4dHJ1c2lvbicsIHRoaXMubGF5ZXJzLCBwYXR0ZXJuRmVhdHVyZSwgdGhpcy56b29tLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShwYXR0ZXJuRmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCB7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbnMuZmVhdHVyZUluZGV4Lmluc2VydChmZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIHRoaXMuaW5kZXgsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZXMob3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgdGhpcy5mZWF0dXJlcykge1xuICAgICAgICAgICAgY29uc3Qge2dlb21ldHJ5fSA9IGZlYXR1cmU7XG4gICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoZmVhdHVyZSwgZ2VvbWV0cnksIGZlYXR1cmUuaW5kZXgsIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCBsYXlvdXRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZShmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgaW5kZXg6IG51bWJlciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBwb2x5Z29uIG9mIGNsYXNzaWZ5UmluZ3MoZ2VvbWV0cnksIEVBUkNVVF9NQVhfUklOR1MpKSB7XG4gICAgICAgICAgICBsZXQgbnVtVmVydGljZXMgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBudW1WZXJ0aWNlcyArPSByaW5nLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXkpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcG9seWdvbikge1xuICAgICAgICAgICAgICAgIGlmIChyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNFbnRpcmVseU91dHNpZGUocmluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGVkZ2VEaXN0YW5jZSA9IDA7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHJpbmcubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcDEgPSByaW5nW3BdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwID49IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAyID0gcmluZ1twIC0gMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNCb3VuZGFyeUVkZ2UocDEsIHAyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50LnZlcnRleExlbmd0aCArIDQgPiBTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVycCA9IHAxLnN1YihwMikuX3BlcnAoKS5fdW5pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3QgPSBwMi5kaXN0KHAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZURpc3RhbmNlICsgZGlzdCA+IDMyNzY4KSBlZGdlRGlzdGFuY2UgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHAxLngsIHAxLnksIHBlcnAueCwgcGVycC55LCAwLCAwLCBlZGdlRGlzdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCBwMS54LCBwMS55LCBwZXJwLngsIHBlcnAueSwgMCwgMSwgZWRnZURpc3RhbmNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VEaXN0YW5jZSArPSBkaXN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHAyLngsIHAyLnksIHBlcnAueCwgcGVycC55LCAwLCAwLCBlZGdlRGlzdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCBwMi54LCBwMi55LCBwZXJwLngsIHBlcnAueSwgMCwgMSwgZWRnZURpc3RhbmNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDosKUwozDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwpBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDosKUwoIgMCAgMSDDosKUwoIgQ291bnRlci1jbG9ja3dpc2Ugd2luZGluZyBvcmRlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDosKUwoIgICAgICDDosKUwoIgVHJpYW5nbGUgMTogMCA9PiAyID0+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDosKUwoIgMiAgMyDDosKUwoIgVHJpYW5nbGUgMjogMSA9PiAyID0+IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDosKUwpTDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwphcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soYm90dG9tUmlnaHQsIGJvdHRvbVJpZ2h0ICsgMiwgYm90dG9tUmlnaHQgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soYm90dG9tUmlnaHQgKyAxLCBib3R0b21SaWdodCArIDIsIGJvdHRvbVJpZ2h0ICsgMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWdtZW50LnZlcnRleExlbmd0aCArIG51bVZlcnRpY2VzID4gU2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCkge1xuICAgICAgICAgICAgICAgIHNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KG51bVZlcnRpY2VzLCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL09ubHkgdHJpYW5ndWxhdGUgYW5kIGRyYXcgdGhlIGFyZWEgb2YgdGhlIGZlYXR1cmUgaWYgaXQgaXMgYSBwb2x5Z29uXG4gICAgICAgICAgICAvL090aGVyIGZlYXR1cmUgdHlwZXMgKGUuZy4gTGluZVN0cmluZykgZG8gbm90IGhhdmUgYXJlYSwgc28gdHJpYW5ndWxhdGlvbiBpcyBwb2ludGxlc3MgLyB1bmRlZmluZWRcbiAgICAgICAgICAgIGlmICh2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzW2ZlYXR1cmUudHlwZV0gIT09ICdQb2x5Z29uJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgZmxhdHRlbmVkID0gW107XG4gICAgICAgICAgICBjb25zdCBob2xlSW5kaWNlcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgdHJpYW5nbGVJbmRleCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcG9seWdvbikge1xuICAgICAgICAgICAgICAgIGlmIChyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmluZyAhPT0gcG9seWdvblswXSkge1xuICAgICAgICAgICAgICAgICAgICBob2xlSW5kaWNlcy5wdXNoKGZsYXR0ZW5lZC5sZW5ndGggLyAyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHJpbmdbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHAueCwgcC55LCAwLCAwLCAxLCAxLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICBmbGF0dGVuZWQucHVzaChwLngpO1xuICAgICAgICAgICAgICAgICAgICBmbGF0dGVuZWQucHVzaChwLnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5kaWNlcyA9IGVhcmN1dChmbGF0dGVuZWQsIGhvbGVJbmRpY2VzKTtcbiAgICAgICAgICAgIGFzc2VydChpbmRpY2VzLmxlbmd0aCAlIDMgPT09IDApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGljZXMubGVuZ3RoOyBqICs9IDMpIHtcbiAgICAgICAgICAgICAgICAvLyBDb3VudGVyLWNsb2Nrd2lzZSB3aW5kaW5nIG9yZGVyLlxuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbal0sXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2ogKyAyXSxcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbaiArIDFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gaW5kaWNlcy5sZW5ndGggLyAzO1xuICAgICAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gbnVtVmVydGljZXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0ZpbGxFeHRydXNpb25CdWNrZXQnLCBGaWxsRXh0cnVzaW9uQnVja2V0LCB7b21pdDogWydsYXllcnMnLCAnZmVhdHVyZXMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaWxsRXh0cnVzaW9uQnVja2V0O1xuXG5mdW5jdGlvbiBpc0JvdW5kYXJ5RWRnZShwMSwgcDIpIHtcbiAgICByZXR1cm4gKHAxLnggPT09IHAyLnggJiYgKHAxLnggPCAwIHx8IHAxLnggPiBFWFRFTlQpKSB8fFxuICAgICAgICAocDEueSA9PT0gcDIueSAmJiAocDEueSA8IDAgfHwgcDEueSA+IEVYVEVOVCkpO1xufVxuXG5mdW5jdGlvbiBpc0VudGlyZWx5T3V0c2lkZShyaW5nKSB7XG4gICAgcmV0dXJuIHJpbmcuZXZlcnkocCA9PiBwLnggPCAwKSB8fFxuICAgICAgICByaW5nLmV2ZXJ5KHAgPT4gcC54ID4gRVhURU5UKSB8fFxuICAgICAgICByaW5nLmV2ZXJ5KHAgPT4gcC55IDwgMCkgfHxcbiAgICAgICAgcmluZy5ldmVyeShwID0+IHAueSA+IEVYVEVOVCk7XG59XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCI6IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHRcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWNvbG9yXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24taGVpZ2h0XCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWJhc2VcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWJhc2VcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IEZpbGxFeHRydXNpb25CdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0JztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNQb2x5Z29uLCBwb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbn0gZnJvbSAnLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IHt0cmFuc2xhdGVEaXN0YW5jZSwgdHJhbnNsYXRlfSBmcm9tICcuLi9xdWVyeV91dGlscyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHt2ZWM0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsbEV4dHJ1c2lvbkJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRlRGlzdGFuY2UodGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBpczNEKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpOiBib29sZWFuIHwgbnVtYmVyIHtcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMpO1xuXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1oZWlnaHQnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLWJhc2UnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkgPSBwcm9qZWN0UXVlcnlHZW9tZXRyeSh0cmFuc2xhdGVkUG9seWdvbiwgcGl4ZWxQb3NNYXRyaXgsIHRyYW5zZm9ybSwgMCk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdGVkID0gcHJvamVjdEV4dHJ1c2lvbihnZW9tZXRyeSwgYmFzZSwgaGVpZ2h0LCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IHByb2plY3RlZEJhc2UgPSBwcm9qZWN0ZWRbMF07XG4gICAgICAgIGNvbnN0IHByb2plY3RlZFRvcCA9IHByb2plY3RlZFsxXTtcbiAgICAgICAgcmV0dXJuIGNoZWNrSW50ZXJzZWN0aW9uKHByb2plY3RlZEJhc2UsIHByb2plY3RlZFRvcCwgcHJvamVjdGVkUXVlcnlHZW9tZXRyeSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkb3QoYSwgYikge1xuICAgIHJldHVybiBhLnggKiBiLnggKyBhLnkgKiBiLnk7XG59XG5cbmZ1bmN0aW9uIGdldEludGVyc2VjdGlvbkRpc3RhbmNlKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiwgcHJvamVjdGVkRmFjZTogQXJyYXk8UG9pbnQ+KSB7XG5cbiAgICBpZiAocHJvamVjdGVkUXVlcnlHZW9tZXRyeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gRm9yIHBvaW50IHF1ZXJpZXMgY2FsY3VsYXRlIHRoZSB6IGF0IHdoaWNoIHRoZSBwb2ludCBpbnRlcnNlY3RzIHRoZSBmYWNlXG4gICAgICAgIC8vIHVzaW5nIGJhcnljZW50cmljIGNvb3JkaW5hdGVzLlxuXG4gICAgICAgIC8vIEZpbmQgdGhlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzIG9mIHRoZSBwcm9qZWN0ZWQgcG9pbnQgd2l0aGluIHRoZSBmaXJzdFxuICAgICAgICAvLyB0cmlhbmdsZSBvZiB0aGUgZmFjZSwgdXNpbmcgb25seSB0aGUgeHkgcGxhbmUuIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIHRoZVxuICAgICAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmaXJzdCB0cmlhbmdsZSBiZWNhdXNlIGFsbCB0aGUgdHJpYW5nbGVzIGluIHRoZSBmYWNlXG4gICAgICAgIC8vIGFyZSBpbiB0aGUgc2FtZSBwbGFuZS5cbiAgICAgICAgY29uc3QgYSA9IHByb2plY3RlZEZhY2VbMF07XG4gICAgICAgIGNvbnN0IGIgPSBwcm9qZWN0ZWRGYWNlWzFdO1xuICAgICAgICBjb25zdCBjID0gcHJvamVjdGVkRmFjZVszXTtcbiAgICAgICAgY29uc3QgcCA9IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnlbMF07XG5cbiAgICAgICAgY29uc3QgYWIgPSBiLnN1YihhKTtcbiAgICAgICAgY29uc3QgYWMgPSBjLnN1YihhKTtcbiAgICAgICAgY29uc3QgYXAgPSBwLnN1YihhKTtcblxuICAgICAgICBjb25zdCBkb3RBQkFCID0gZG90KGFiLCBhYik7XG4gICAgICAgIGNvbnN0IGRvdEFCQUMgPSBkb3QoYWIsIGFjKTtcbiAgICAgICAgY29uc3QgZG90QUNBQyA9IGRvdChhYywgYWMpO1xuICAgICAgICBjb25zdCBkb3RBUEFCID0gZG90KGFwLCBhYik7XG4gICAgICAgIGNvbnN0IGRvdEFQQUMgPSBkb3QoYXAsIGFjKTtcbiAgICAgICAgY29uc3QgZGVub20gPSBkb3RBQkFCICogZG90QUNBQyAtIGRvdEFCQUMgKiBkb3RBQkFDO1xuICAgICAgICBjb25zdCB2ID0gKGRvdEFDQUMgKiBkb3RBUEFCIC0gZG90QUJBQyAqIGRvdEFQQUMpIC8gZGVub207XG4gICAgICAgIGNvbnN0IHcgPSAoZG90QUJBQiAqIGRvdEFQQUMgLSBkb3RBQkFDICogZG90QVBBQikgLyBkZW5vbTtcbiAgICAgICAgY29uc3QgdSA9IDEgLSB2IC0gdztcblxuICAgICAgICAvLyBVc2UgdGhlIGJhcnljZW50cmljIHdlaWdodGluZyBhbG9uZyB3aXRoIHRoZSBvcmlnaW5hbCB0cmlhbmdsZSB6IGNvb3JkaW5hdGVzIHRvIGdldCB0aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9uLlxuICAgICAgICByZXR1cm4gYS56ICogdSArIGIueiAqIHYgKyBjLnogKiB3O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlIGNvdW50cyBhcyBjbG9zZXN0IGlzIGxlc3MgY2xlYXIgd2hlbiB0aGUgcXVlcnkgaXMgYSBib3guIFRoaXNcbiAgICAgICAgLy8gcmV0dXJucyB0aGUgZGlzdGFuY2UgdG8gdGhlIG5lYXJlc3QgcG9pbnQgb24gdGhlIGZhY2UsIHdoZXRoZXIgaXQgaXNcbiAgICAgICAgLy8gd2l0aGluIHRoZSBxdWVyeSBvciBub3QuIEl0IGNvdWxkIGJlIG1vcmUgY29ycmVjdCB0byByZXR1cm4gdGhlXG4gICAgICAgIC8vIGRpc3RhbmNlIHRvIHRoZSBjbG9zZXN0IHBvaW50IHdpdGhpbiB0aGUgcXVlcnkgYm94IGJ1dCB0aGlzIHdvdWxkIGJlXG4gICAgICAgIC8vIG1vcmUgY29tcGxpY2F0ZWQgYW5kIGV4cGVuc2l2ZSB0byBjYWxjdWxhdGUgd2l0aCBsaXR0bGUgYmVuZWZpdC5cbiAgICAgICAgbGV0IGNsb3Nlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvamVjdGVkRmFjZSkge1xuICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gTWF0aC5taW4oY2xvc2VzdERpc3RhbmNlLCBwLnopO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9zZXN0RGlzdGFuY2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0ludGVyc2VjdGlvbihwcm9qZWN0ZWRCYXNlOiBBcnJheTxQb2ludD4sIHByb2plY3RlZFRvcDogQXJyYXk8UG9pbnQ+LCBwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4pIHtcbiAgICBsZXQgY2xvc2VzdERpc3RhbmNlID0gSW5maW5pdHk7XG5cbiAgICBpZiAocG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb24ocHJvamVjdGVkUXVlcnlHZW9tZXRyeSwgcHJvamVjdGVkVG9wKSkge1xuICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBnZXRJbnRlcnNlY3Rpb25EaXN0YW5jZShwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5LCBwcm9qZWN0ZWRUb3BbMF0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IHIgPSAwOyByIDwgcHJvamVjdGVkVG9wLmxlbmd0aDsgcisrKSB7XG4gICAgICAgIGNvbnN0IHJpbmdUb3AgPSBwcm9qZWN0ZWRUb3Bbcl07XG4gICAgICAgIGNvbnN0IHJpbmdCYXNlID0gcHJvamVjdGVkQmFzZVtyXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCByaW5nVG9wLmxlbmd0aCAtIDE7IHArKykge1xuICAgICAgICAgICAgY29uc3QgdG9wQSA9IHJpbmdUb3BbcF07XG4gICAgICAgICAgICBjb25zdCB0b3BCID0gcmluZ1RvcFtwICsgMV07XG4gICAgICAgICAgICBjb25zdCBiYXNlQSA9IHJpbmdCYXNlW3BdO1xuICAgICAgICAgICAgY29uc3QgYmFzZUIgPSByaW5nQmFzZVtwICsgMV07XG4gICAgICAgICAgICBjb25zdCBmYWNlID0gW3RvcEEsIHRvcEIsIGJhc2VCLCBiYXNlQSwgdG9wQV07XG4gICAgICAgICAgICBpZiAocG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnksIGZhY2UpKSB7XG4gICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gTWF0aC5taW4oY2xvc2VzdERpc3RhbmNlLCBnZXRJbnRlcnNlY3Rpb25EaXN0YW5jZShwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5LCBmYWNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvc2VzdERpc3RhbmNlID09PSBJbmZpbml0eSA/IGZhbHNlIDogY2xvc2VzdERpc3RhbmNlO1xufVxuXG4vKlxuICogUHJvamVjdCB0aGUgZ2VvbWV0cnkgdXNpbmcgbWF0cml4IGBtYC4gVGhpcyBpcyBlc3NlbnRpYWxseSBkb2luZ1xuICogYHZlYzQudHJhbnNmb3JtTWF0NChbXSwgW3AueCwgcC55LCB6LCAxXSwgbSlgIGJ1dCB0aGUgbXVsdGlwbGljYXRpb25cbiAqIGlzIGlubGluZWQgc28gdGhhdCBwYXJ0cyBvZiB0aGUgcHJvamVjdGlvbiB0aGF0IGFyZSB0aGUgc2FtZSBhY3Jvc3NcbiAqIGRpZmZlcmVudCBwb2ludHMgY2FuIG9ubHkgYmUgZG9uZSBvbmNlLiBUaGlzIHByb2R1Y2VkIGEgbWVhc3VyYWJsZVxuICogcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHByb2plY3RFeHRydXNpb24oZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sIHpCYXNlOiBudW1iZXIsIHpUb3A6IG51bWJlciwgbTogRmxvYXQzMkFycmF5KSB7XG4gICAgY29uc3QgcHJvamVjdGVkQmFzZSA9IFtdO1xuICAgIGNvbnN0IHByb2plY3RlZFRvcCA9IFtdO1xuXG4gICAgY29uc3QgYmFzZVhaID0gbVs4XSAqIHpCYXNlO1xuICAgIGNvbnN0IGJhc2VZWiA9IG1bOV0gKiB6QmFzZTtcbiAgICBjb25zdCBiYXNlWlogPSBtWzEwXSAqIHpCYXNlO1xuICAgIGNvbnN0IGJhc2VXWiA9IG1bMTFdICogekJhc2U7XG4gICAgY29uc3QgdG9wWFogPSBtWzhdICogelRvcDtcbiAgICBjb25zdCB0b3BZWiA9IG1bOV0gKiB6VG9wO1xuICAgIGNvbnN0IHRvcFpaID0gbVsxMF0gKiB6VG9wO1xuICAgIGNvbnN0IHRvcFdaID0gbVsxMV0gKiB6VG9wO1xuXG4gICAgZm9yIChjb25zdCByIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgIGNvbnN0IHJpbmdCYXNlID0gW107XG4gICAgICAgIGNvbnN0IHJpbmdUb3AgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHIpIHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBwLng7XG4gICAgICAgICAgICBjb25zdCB5ID0gcC55O1xuXG4gICAgICAgICAgICBjb25zdCBzWCA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcbiAgICAgICAgICAgIGNvbnN0IHNZID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bMTNdO1xuICAgICAgICAgICAgY29uc3Qgc1ogPSBtWzJdICogeCArIG1bNl0gKiB5ICsgbVsxNF07XG4gICAgICAgICAgICBjb25zdCBzVyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzE1XTtcblxuICAgICAgICAgICAgY29uc3QgYmFzZVggPSBzWCArIGJhc2VYWjtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VZID0gc1kgKyBiYXNlWVo7XG4gICAgICAgICAgICBjb25zdCBiYXNlWiA9IHNaICsgYmFzZVpaO1xuICAgICAgICAgICAgY29uc3QgYmFzZVcgPSBzVyArIGJhc2VXWjtcblxuICAgICAgICAgICAgY29uc3QgdG9wWCA9IHNYICsgdG9wWFo7XG4gICAgICAgICAgICBjb25zdCB0b3BZID0gc1kgKyB0b3BZWjtcbiAgICAgICAgICAgIGNvbnN0IHRvcFogPSBzWiArIHRvcFpaO1xuICAgICAgICAgICAgY29uc3QgdG9wVyA9IHNXICsgdG9wV1o7XG5cbiAgICAgICAgICAgIGNvbnN0IGIgPSBuZXcgUG9pbnQoYmFzZVggLyBiYXNlVywgYmFzZVkgLyBiYXNlVyk7XG4gICAgICAgICAgICBiLnogPSBiYXNlWiAvIGJhc2VXO1xuICAgICAgICAgICAgcmluZ0Jhc2UucHVzaChiKTtcblxuICAgICAgICAgICAgY29uc3QgdCA9IG5ldyBQb2ludCh0b3BYIC8gdG9wVywgdG9wWSAvIHRvcFcpO1xuICAgICAgICAgICAgdC56ID0gdG9wWiAvIHRvcFc7XG4gICAgICAgICAgICByaW5nVG9wLnB1c2godCk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvamVjdGVkQmFzZS5wdXNoKHJpbmdCYXNlKTtcbiAgICAgICAgcHJvamVjdGVkVG9wLnB1c2gocmluZ1RvcCk7XG4gICAgfVxuICAgIHJldHVybiBbcHJvamVjdGVkQmFzZSwgcHJvamVjdGVkVG9wXTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFF1ZXJ5R2VvbWV0cnkocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LCBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSwgejogbnVtYmVyKSB7XG4gICAgY29uc3QgcHJvamVjdGVkUXVlcnlHZW9tZXRyeSA9IFtdO1xuICAgIGZvciAoY29uc3QgcCBvZiBxdWVyeUdlb21ldHJ5KSB7XG4gICAgICAgIGNvbnN0IHYgPSBbcC54LCBwLnksIHosIDFdO1xuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodiwgdiwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgICAgICBwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5LnB1c2gobmV3IFBvaW50KHZbMF0gLyB2WzNdLCB2WzFdIC8gdlszXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvamVjdGVkUXVlcnlHZW9tZXRyeTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuY29uc3QgbGluZUxheW91dEF0dHJpYnV0ZXMgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3Nfbm9ybWFsJywgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX2RhdGEnLCBjb21wb25lbnRzOiA0LCB0eXBlOiAnVWludDgnfVxuXSwgNCk7XG5cbmV4cG9ydCBkZWZhdWx0IGxpbmVMYXlvdXRBdHRyaWJ1dGVzO1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGluZUxheW91dEF0dHJpYnV0ZXM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0xpbmVMYXlvdXRBcnJheX0gZnJvbSAnLi4vYXJyYXlfdHlwZXMnO1xuXG5pbXBvcnQge21lbWJlcnMgYXMgbGF5b3V0QXR0cmlidXRlc30gZnJvbSAnLi9saW5lX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9leHRlbnQnO1xuaW1wb3J0IG12dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmNvbnN0IHZlY3RvclRpbGVGZWF0dXJlVHlwZXMgPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXM7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHtoYXNQYXR0ZXJuLCBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzfSBmcm9tICcuL3BhdHRlcm5fYnVja2V0X2ZlYXR1cmVzJztcbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBMaW5lU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge1NlZ21lbnR9IGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuLy8gTk9URSBPTiBFWFRSVURFIFNDQUxFOlxuLy8gc2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3Igc28gdGhhdCB0aGUgbm9ybWFsIGxlbmd0aCBpcyB0aGlzIHZhbHVlLlxuLy8gY29udGFpbnMgdGhlIFwidGV4dHVyZVwiIG5vcm1hbHMgKC0xLi4xKS4gdGhpcyBpcyBkaXN0aW5jdCBmcm9tIHRoZSBleHRydWRlXG4vLyBub3JtYWxzIGZvciBsaW5lIGpvaW5zLCBiZWNhdXNlIHRoZSB4LXZhbHVlIHJlbWFpbnMgMCBmb3IgdGhlIHRleHR1cmVcbi8vIG5vcm1hbCBhcnJheSwgd2hpbGUgdGhlIGV4dHJ1ZGUgbm9ybWFsIGFjdHVhbGx5IG1vdmVzIHRoZSB2ZXJ0ZXggdG8gY3JlYXRlXG4vLyB0aGUgYWN1dGUvYmV2ZWxsZWQgbGluZSBqb2luLlxuY29uc3QgRVhUUlVERV9TQ0FMRSA9IDYzO1xuXG4vKlxuICogU2hhcnAgY29ybmVycyBjYXVzZSBkYXNoZWQgbGluZXMgdG8gdGlsdCBiZWNhdXNlIHRoZSBkaXN0YW5jZSBhbG9uZyB0aGUgbGluZVxuICogaXMgdGhlIHNhbWUgYXQgYm90aCB0aGUgaW5uZXIgYW5kIG91dGVyIGNvcm5lcnMuIFRvIGltcHJvdmUgdGhlIGFwcGVhcmFuY2Ugb2ZcbiAqIGRhc2hlZCBsaW5lcyB3ZSBhZGQgZXh0cmEgcG9pbnRzIG5lYXIgc2hhcnAgY29ybmVycyBzbyB0aGF0IGEgc21hbGxlciBwYXJ0XG4gKiBvZiB0aGUgbGluZSBpcyB0aWx0ZWQuXG4gKlxuICogQ09TX0hBTEZfU0hBUlBfQ09STkVSIGNvbnRyb2xzIGhvdyBzaGFycCBhIGNvcm5lciBoYXMgdG8gYmUgZm9yIHVzIHRvIGFkZCBhblxuICogZXh0cmEgdmVydGV4LiBUaGUgZGVmYXVsdCBpcyA3NSBkZWdyZWVzLlxuICpcbiAqIFRoZSBuZXdseSBjcmVhdGVkIHZlcnRpY2VzIGFyZSBwbGFjZWQgU0hBUlBfQ09STkVSX09GRlNFVCBwaXhlbHMgZnJvbSB0aGUgY29ybmVyLlxuICovXG5jb25zdCBDT1NfSEFMRl9TSEFSUF9DT1JORVIgPSBNYXRoLmNvcyg3NSAvIDIgKiAoTWF0aC5QSSAvIDE4MCkpO1xuY29uc3QgU0hBUlBfQ09STkVSX09GRlNFVCA9IDE1O1xuXG4vLyBBbmdsZSBwZXIgdHJpYW5nbGUgZm9yIGFwcHJveGltYXRpbmcgcm91bmQgbGluZSBqb2lucy5cbmNvbnN0IERFR19QRVJfVFJJQU5HTEUgPSAyMDtcblxuLy8gVGhlIG51bWJlciBvZiBiaXRzIHRoYXQgaXMgdXNlZCB0byBzdG9yZSB0aGUgbGluZSBkaXN0YW5jZSBpbiB0aGUgYnVmZmVyLlxuY29uc3QgTElORV9ESVNUQU5DRV9CVUZGRVJfQklUUyA9IDE1O1xuXG4vLyBXZSBkb24ndCBoYXZlIGVub3VnaCBiaXRzIGZvciB0aGUgbGluZSBkaXN0YW5jZSBhcyB3ZSdkIGxpa2UgdG8gaGF2ZSwgc29cbi8vIHVzZSB0aGlzIHZhbHVlIHRvIHNjYWxlIHRoZSBsaW5lIGRpc3RhbmNlIChpbiB0aWxlIHVuaXRzKSBkb3duIHRvIGEgc21hbGxlclxuLy8gdmFsdWUuIFRoaXMgbGV0cyB1cyBzdG9yZSBsb25nZXIgZGlzdGFuY2VzIHdoaWxlIHNhY3JpZmljaW5nIHByZWNpc2lvbi5cbmNvbnN0IExJTkVfRElTVEFOQ0VfU0NBTEUgPSAxIC8gMjtcblxuLy8gVGhlIG1heGltdW0gbGluZSBkaXN0YW5jZSwgaW4gdGlsZSB1bml0cywgdGhhdCBmaXRzIGluIHRoZSBidWZmZXIuXG5jb25zdCBNQVhfTElORV9ESVNUQU5DRSA9IE1hdGgucG93KDIsIExJTkVfRElTVEFOQ0VfQlVGRkVSX0JJVFMgLSAxKSAvIExJTkVfRElTVEFOQ0VfU0NBTEU7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTGluZUJ1Y2tldCBpbXBsZW1lbnRzIEJ1Y2tldCB7XG4gICAgZGlzdGFuY2U6IG51bWJlcjtcbiAgICB0b3RhbERpc3RhbmNlOiBudW1iZXI7XG4gICAgc2NhbGVkRGlzdGFuY2U6IG51bWJlcjtcbiAgICBjbGlwU3RhcnQ6IG51bWJlcjtcbiAgICBjbGlwRW5kOiBudW1iZXI7XG5cbiAgICBlMTogbnVtYmVyO1xuICAgIGUyOiBudW1iZXI7XG5cbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVyczogQXJyYXk8TGluZVN0eWxlTGF5ZXI+O1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxhbnk+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgcGF0dGVybkZlYXR1cmVzOiBBcnJheTxCdWNrZXRGZWF0dXJlPjtcblxuICAgIGxheW91dFZlcnRleEFycmF5OiBMaW5lTGF5b3V0QXJyYXk7XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PExpbmVTdHlsZUxheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICB1cGxvYWRlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJ1Y2tldFBhcmFtZXRlcnM8TGluZVN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHRoaXMuem9vbSA9IG9wdGlvbnMuem9vbTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGluZyA9IG9wdGlvbnMub3ZlcnNjYWxpbmc7XG4gICAgICAgIHRoaXMubGF5ZXJzID0gb3B0aW9ucy5sYXllcnM7XG4gICAgICAgIHRoaXMubGF5ZXJJZHMgPSB0aGlzLmxheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIuaWQpO1xuICAgICAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleDtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGF0dGVybkZlYXR1cmVzID0gW107XG5cbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSA9IG5ldyBMaW5lTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChsYXlvdXRBdHRyaWJ1dGVzLCBvcHRpb25zLmxheWVycywgb3B0aW9ucy56b29tKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gaGFzUGF0dGVybignbGluZScsIHRoaXMubGF5ZXJzLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGluZVNvcnRLZXkgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQuZ2V0KCdsaW5lLXNvcnQta2V5Jyk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmVzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBmZWF0dXJlKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuICAgICAgICAgICAgY29uc3Qgc29ydEtleSA9IGxpbmVTb3J0S2V5ID9cbiAgICAgICAgICAgICAgICBsaW5lU29ydEtleS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkgOlxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgY29uc3QgYnVja2V0RmVhdHVyZTogQnVja2V0RmVhdHVyZSA9IHtcbiAgICAgICAgICAgICAgICBpZDogZmVhdHVyZS5pZCxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgdHlwZTogZmVhdHVyZS50eXBlLFxuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnksXG4gICAgICAgICAgICAgICAgcGF0dGVybnM6IHt9LFxuICAgICAgICAgICAgICAgIHNvcnRLZXlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnB1c2goYnVja2V0RmVhdHVyZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluZVNvcnRLZXkpIHtcbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBhLnNvcnRLZXkgaXMgYWx3YXlzIGEgbnVtYmVyIHdoZW4gaW4gdXNlXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoYS5zb3J0S2V5OiBhbnkpOiBudW1iZXIpIC0gKChiLnNvcnRLZXk6IGFueSk6IG51bWJlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYnVja2V0RmVhdHVyZSBvZiBidWNrZXRGZWF0dXJlcykge1xuICAgICAgICAgICAgY29uc3Qge2dlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gPSBidWNrZXRGZWF0dXJlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybkJ1Y2tldEZlYXR1cmUgPSBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzKCdsaW5lJywgdGhpcy5sYXllcnMsIGJ1Y2tldEZlYXR1cmUsIHRoaXMuem9vbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gcGF0dGVybiBmZWF0dXJlcyBhcmUgYWRkZWQgb25seSBvbmNlIHRoZSBwYXR0ZXJuIGlzIGxvYWRlZCBpbnRvIHRoZSBpbWFnZSBhdGxhc1xuICAgICAgICAgICAgICAgIC8vIHNvIGFyZSBzdG9yZWQgZHVyaW5nIHBvcHVsYXRlIHVudGlsIGxhdGVyIHVwZGF0ZWQgd2l0aCBwb3NpdGlvbnMgYnkgdGlsZSB3b3JrZXIgaW4gYWRkRmVhdHVyZXNcbiAgICAgICAgICAgICAgICB0aGlzLnBhdHRlcm5GZWF0dXJlcy5wdXNoKHBhdHRlcm5CdWNrZXRGZWF0dXJlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwge30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNbaW5kZXhdLmZlYXR1cmU7XG4gICAgICAgICAgICBvcHRpb25zLmZlYXR1cmVJbmRleC5pbnNlcnQoZmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4LCB0aGlzLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlcyhvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiB0aGlzLnBhdHRlcm5GZWF0dXJlcykge1xuICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGZlYXR1cmUsIGZlYXR1cmUuZ2VvbWV0cnksIGZlYXR1cmUuaW5kZXgsIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB1cGxvYWRQZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudXBsb2FkZWQgfHwgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQ7XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnVwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIGxheW91dEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIHRoaXMudXBsb2FkZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlKGZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBpbmRleDogbnVtYmVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIGNvbnN0IGpvaW4gPSBsYXlvdXQuZ2V0KCdsaW5lLWpvaW4nKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgICAgIGNvbnN0IGNhcCA9IGxheW91dC5nZXQoJ2xpbmUtY2FwJyk7XG4gICAgICAgIGNvbnN0IG1pdGVyTGltaXQgPSBsYXlvdXQuZ2V0KCdsaW5lLW1pdGVyLWxpbWl0Jyk7XG4gICAgICAgIGNvbnN0IHJvdW5kTGltaXQgPSBsYXlvdXQuZ2V0KCdsaW5lLXJvdW5kLWxpbWl0Jyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFkZExpbmUobGluZSwgZmVhdHVyZSwgam9pbiwgY2FwLCBtaXRlckxpbWl0LCByb3VuZExpbWl0LCBpbmRleCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkTGluZSh2ZXJ0aWNlczogQXJyYXk8UG9pbnQ+LCBmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBqb2luOiBzdHJpbmcsIGNhcDogc3RyaW5nLCBtaXRlckxpbWl0OiBudW1iZXIsIHJvdW5kTGltaXQ6IG51bWJlciwgaW5kZXg6IG51bWJlciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9IDA7XG4gICAgICAgIHRoaXMuc2NhbGVkRGlzdGFuY2UgPSAwO1xuICAgICAgICB0aGlzLnRvdGFsRGlzdGFuY2UgPSAwO1xuXG4gICAgICAgIGlmICghIWZlYXR1cmUucHJvcGVydGllcyAmJlxuICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCdtYXBib3hfY2xpcF9zdGFydCcpICYmXG4gICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ21hcGJveF9jbGlwX2VuZCcpKSB7XG5cbiAgICAgICAgICAgIHRoaXMuY2xpcFN0YXJ0ID0gK2ZlYXR1cmUucHJvcGVydGllc1snbWFwYm94X2NsaXBfc3RhcnQnXTtcbiAgICAgICAgICAgIHRoaXMuY2xpcEVuZCA9ICtmZWF0dXJlLnByb3BlcnRpZXNbJ21hcGJveF9jbGlwX2VuZCddO1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIGRpc3RhbmNlLCBpbiB0aWxlIHVuaXRzLCBvZiB0aGlzIHRpbGVkIGxpbmUgZmVhdHVyZVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsRGlzdGFuY2UgKz0gdmVydGljZXNbaV0uZGlzdCh2ZXJ0aWNlc1tpICsgMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNQb2x5Z29uID0gdmVjdG9yVGlsZUZlYXR1cmVUeXBlc1tmZWF0dXJlLnR5cGVdID09PSAnUG9seWdvbic7XG5cbiAgICAgICAgLy8gSWYgdGhlIGxpbmUgaGFzIGR1cGxpY2F0ZSB2ZXJ0aWNlcyBhdCB0aGUgZW5kcywgYWRqdXN0IHN0YXJ0L2xlbmd0aCB0byByZW1vdmUgdGhlbS5cbiAgICAgICAgbGV0IGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGxlbiA+PSAyICYmIHZlcnRpY2VzW2xlbiAtIDFdLmVxdWFscyh2ZXJ0aWNlc1tsZW4gLSAyXSkpIHtcbiAgICAgICAgICAgIGxlbi0tO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaXJzdCA9IDA7XG4gICAgICAgIHdoaWxlIChmaXJzdCA8IGxlbiAtIDEgJiYgdmVydGljZXNbZmlyc3RdLmVxdWFscyh2ZXJ0aWNlc1tmaXJzdCArIDFdKSkge1xuICAgICAgICAgICAgZmlyc3QrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElnbm9yZSBpbnZhbGlkIGdlb21ldHJ5LlxuICAgICAgICBpZiAobGVuIDwgKGlzUG9seWdvbiA/IDMgOiAyKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChqb2luID09PSAnYmV2ZWwnKSBtaXRlckxpbWl0ID0gMS4wNTtcblxuICAgICAgICBjb25zdCBzaGFycENvcm5lck9mZnNldCA9IFNIQVJQX0NPUk5FUl9PRkZTRVQgKiAoRVhURU5UIC8gKDUxMiAqIHRoaXMub3ZlcnNjYWxpbmcpKTtcblxuICAgICAgICAvLyB3ZSBjb3VsZCBiZSBtb3JlIHByZWNpc2UsIGJ1dCBpdCB3b3VsZCBvbmx5IHNhdmUgYSBuZWdsaWdpYmxlIGFtb3VudCBvZiBzcGFjZVxuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChsZW4gKiAxMCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcblxuICAgICAgICBsZXQgY3VycmVudFZlcnRleDtcbiAgICAgICAgbGV0IHByZXZWZXJ0ZXggPSAoKHVuZGVmaW5lZDogYW55KTogUG9pbnQpO1xuICAgICAgICBsZXQgbmV4dFZlcnRleCA9ICgodW5kZWZpbmVkOiBhbnkpOiBQb2ludCk7XG4gICAgICAgIGxldCBwcmV2Tm9ybWFsID0gKCh1bmRlZmluZWQ6IGFueSk6IFBvaW50KTtcbiAgICAgICAgbGV0IG5leHROb3JtYWwgPSAoKHVuZGVmaW5lZDogYW55KTogUG9pbnQpO1xuXG4gICAgICAgIC8vIHRoZSBsYXN0IHR3byB2ZXJ0aWNlcyBhZGRlZFxuICAgICAgICB0aGlzLmUxID0gdGhpcy5lMiA9IC0xO1xuXG4gICAgICAgIGlmIChpc1BvbHlnb24pIHtcbiAgICAgICAgICAgIGN1cnJlbnRWZXJ0ZXggPSB2ZXJ0aWNlc1tsZW4gLSAyXTtcbiAgICAgICAgICAgIG5leHROb3JtYWwgPSB2ZXJ0aWNlc1tmaXJzdF0uc3ViKGN1cnJlbnRWZXJ0ZXgpLl91bml0KCkuX3BlcnAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBmaXJzdDsgaSA8IGxlbjsgaSsrKSB7XG5cbiAgICAgICAgICAgIG5leHRWZXJ0ZXggPSBpc1BvbHlnb24gJiYgaSA9PT0gbGVuIC0gMSA/XG4gICAgICAgICAgICAgICAgdmVydGljZXNbZmlyc3QgKyAxXSA6IC8vIGlmIHRoZSBsaW5lIGlzIGNsb3NlZCwgd2UgdHJlYXQgdGhlIGxhc3QgdmVydGV4IGxpa2UgdGhlIGZpcnN0XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaSArIDFdOyAvLyBqdXN0IHRoZSBuZXh0IHZlcnRleFxuXG4gICAgICAgICAgICAvLyBpZiB0d28gY29uc2VjdXRpdmUgdmVydGljZXMgZXhpc3QsIHNraXAgdGhlIGN1cnJlbnQgb25lXG4gICAgICAgICAgICBpZiAobmV4dFZlcnRleCAmJiB2ZXJ0aWNlc1tpXS5lcXVhbHMobmV4dFZlcnRleCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAobmV4dE5vcm1hbCkgcHJldk5vcm1hbCA9IG5leHROb3JtYWw7XG4gICAgICAgICAgICBpZiAoY3VycmVudFZlcnRleCkgcHJldlZlcnRleCA9IGN1cnJlbnRWZXJ0ZXg7XG5cbiAgICAgICAgICAgIGN1cnJlbnRWZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBub3JtYWwgdG93YXJkcyB0aGUgbmV4dCB2ZXJ0ZXggaW4gdGhpcyBsaW5lLiBJbiBjYXNlXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBuZXh0IHZlcnRleCwgcHJldGVuZCB0aGF0IHRoZSBsaW5lIGlzIGNvbnRpbnVpbmcgc3RyYWlnaHQsXG4gICAgICAgICAgICAvLyBtZWFuaW5nIHRoYXQgd2UgYXJlIGp1c3QgdXNpbmcgdGhlIHByZXZpb3VzIG5vcm1hbC5cbiAgICAgICAgICAgIG5leHROb3JtYWwgPSBuZXh0VmVydGV4ID8gbmV4dFZlcnRleC5zdWIoY3VycmVudFZlcnRleCkuX3VuaXQoKS5fcGVycCgpIDogcHJldk5vcm1hbDtcblxuICAgICAgICAgICAgLy8gSWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIHByZXZpb3VzIG5vcm1hbCwgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIGFcbiAgICAgICAgICAgIC8vIG5vbi1jbG9zZWQgbGluZSwgc28gd2UncmUgZG9pbmcgYSBzdHJhaWdodCBcImpvaW5cIi5cbiAgICAgICAgICAgIHByZXZOb3JtYWwgPSBwcmV2Tm9ybWFsIHx8IG5leHROb3JtYWw7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB0aGUgbm9ybWFsIG9mIHRoZSBqb2luIGV4dHJ1c2lvbi4gSXQgaXMgdGhlIGFuZ2xlIGJpc2VjdG9yXG4gICAgICAgICAgICAvLyBvZiB0aGUgc2VnbWVudHMgYmV0d2VlbiB0aGUgcHJldmlvdXMgbGluZSBhbmQgdGhlIG5leHQgbGluZS5cbiAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIDE4MMOCwrAgYW5nbGVzLCB0aGUgcHJldiBhbmQgbmV4dCBub3JtYWxzIGNhbmNlbCBlYWNoIG90aGVyIG91dDpcbiAgICAgICAgICAgIC8vIHByZXZOb3JtYWwgKyBuZXh0Tm9ybWFsID0gKDAsIDApLCBpdHMgbWFnbml0dWRlIGlzIDAsIHNvIHRoZSB1bml0IHZlY3RvciB3b3VsZCBiZVxuICAgICAgICAgICAgLy8gdW5kZWZpbmVkLiBJbiB0aGF0IGNhc2UsIHdlJ3JlIGtlZXBpbmcgdGhlIGpvaW5Ob3JtYWwgYXQgKDAsIDApLCBzbyB0aGF0IHRoZSBjb3NIYWxmQW5nbGVcbiAgICAgICAgICAgIC8vIGJlbG93IHdpbGwgYWxzbyBiZWNvbWUgMCBhbmQgbWl0ZXJMZW5ndGggd2lsbCBiZWNvbWUgSW5maW5pdHkuXG4gICAgICAgICAgICBsZXQgam9pbk5vcm1hbCA9IHByZXZOb3JtYWwuYWRkKG5leHROb3JtYWwpO1xuICAgICAgICAgICAgaWYgKGpvaW5Ob3JtYWwueCAhPT0gMCB8fCBqb2luTm9ybWFsLnkgIT09IDApIHtcbiAgICAgICAgICAgICAgICBqb2luTm9ybWFsLl91bml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiAgam9pbk5vcm1hbCAgICAgcHJldk5vcm1hbFxuICAgICAgICAgICAgICogICAgICAgICAgICAgw6LChsKWICAgICAgw6LChsKRXG4gICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAuX19fX19fX18uIHByZXZWZXJ0ZXhcbiAgICAgICAgICAgICAqICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAqIG5leHROb3JtYWwgIMOiwobCkCAgfCAgY3VycmVudFZlcnRleFxuICAgICAgICAgICAgICogICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICogICAgIG5leHRWZXJ0ZXggIVxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAvLyBjYWxjdWxhdGUgY29zaW5lcyBvZiB0aGUgYW5nbGUgKGFuZCBpdHMgaGFsZikgdXNpbmcgZG90IHByb2R1Y3RcbiAgICAgICAgICAgIGNvbnN0IGNvc0FuZ2xlID0gcHJldk5vcm1hbC54ICogbmV4dE5vcm1hbC54ICsgcHJldk5vcm1hbC55ICogbmV4dE5vcm1hbC55O1xuICAgICAgICAgICAgY29uc3QgY29zSGFsZkFuZ2xlID0gam9pbk5vcm1hbC54ICogbmV4dE5vcm1hbC54ICsgam9pbk5vcm1hbC55ICogbmV4dE5vcm1hbC55O1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgbWl0ZXIgKHRoZSByYXRpbyBvZiB0aGUgbWl0ZXIgdG8gdGhlIHdpZHRoKVxuICAgICAgICAgICAgLy8gYXMgdGhlIGludmVyc2Ugb2YgY29zaW5lIG9mIHRoZSBhbmdsZSBiZXR3ZWVuIG5leHQgYW5kIGpvaW4gbm9ybWFsc1xuICAgICAgICAgICAgY29uc3QgbWl0ZXJMZW5ndGggPSBjb3NIYWxmQW5nbGUgIT09IDAgPyAxIC8gY29zSGFsZkFuZ2xlIDogSW5maW5pdHk7XG5cbiAgICAgICAgICAgIC8vIGFwcHJveGltYXRlIGFuZ2xlIGZyb20gY29zaW5lXG4gICAgICAgICAgICBjb25zdCBhcHByb3hBbmdsZSA9IDIgKiBNYXRoLnNxcnQoMiAtIDIgKiBjb3NIYWxmQW5nbGUpO1xuXG4gICAgICAgICAgICBjb25zdCBpc1NoYXJwQ29ybmVyID0gY29zSGFsZkFuZ2xlIDwgQ09TX0hBTEZfU0hBUlBfQ09STkVSICYmIHByZXZWZXJ0ZXggJiYgbmV4dFZlcnRleDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVUdXJuc0xlZnQgPSBwcmV2Tm9ybWFsLnggKiBuZXh0Tm9ybWFsLnkgLSBwcmV2Tm9ybWFsLnkgKiBuZXh0Tm9ybWFsLnggPiAwO1xuXG4gICAgICAgICAgICBpZiAoaXNTaGFycENvcm5lciAmJiBpID4gZmlyc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2U2VnbWVudExlbmd0aCA9IGN1cnJlbnRWZXJ0ZXguZGlzdChwcmV2VmVydGV4KTtcbiAgICAgICAgICAgICAgICBpZiAocHJldlNlZ21lbnRMZW5ndGggPiAyICogc2hhcnBDb3JuZXJPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UHJldlZlcnRleCA9IGN1cnJlbnRWZXJ0ZXguc3ViKGN1cnJlbnRWZXJ0ZXguc3ViKHByZXZWZXJ0ZXgpLl9tdWx0KHNoYXJwQ29ybmVyT2Zmc2V0IC8gcHJldlNlZ21lbnRMZW5ndGgpLl9yb3VuZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEaXN0YW5jZShwcmV2VmVydGV4LCBuZXdQcmV2VmVydGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KG5ld1ByZXZWZXJ0ZXgsIHByZXZOb3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2VmVydGV4ID0gbmV3UHJldlZlcnRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRoZSBqb2luIGlmIGEgbWlkZGxlIHZlcnRleCwgb3RoZXJ3aXNlIHRoZSBjYXAuXG4gICAgICAgICAgICBjb25zdCBtaWRkbGVWZXJ0ZXggPSBwcmV2VmVydGV4ICYmIG5leHRWZXJ0ZXg7XG4gICAgICAgICAgICBsZXQgY3VycmVudEpvaW4gPSBtaWRkbGVWZXJ0ZXggPyBqb2luIDogaXNQb2x5Z29uID8gJ2J1dHQnIDogY2FwO1xuXG4gICAgICAgICAgICBpZiAobWlkZGxlVmVydGV4ICYmIGN1cnJlbnRKb2luID09PSAncm91bmQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pdGVyTGVuZ3RoIDwgcm91bmRMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Sm9pbiA9ICdtaXRlcic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtaXRlckxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRKb2luID0gJ2Zha2Vyb3VuZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdtaXRlcicgJiYgbWl0ZXJMZW5ndGggPiBtaXRlckxpbWl0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEpvaW4gPSAnYmV2ZWwnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdiZXZlbCcpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgbWF4aW11bSBleHRydWRlIGxlbmd0aCBpcyAxMjggLyA2MyA9IDIgdGltZXMgdGhlIHdpZHRoIG9mIHRoZSBsaW5lXG4gICAgICAgICAgICAgICAgLy8gc28gaWYgbWl0ZXJMZW5ndGggPj0gMiB3ZSBuZWVkIHRvIGRyYXcgYSBkaWZmZXJlbnQgdHlwZSBvZiBiZXZlbCBoZXJlLlxuICAgICAgICAgICAgICAgIGlmIChtaXRlckxlbmd0aCA+IDIpIGN1cnJlbnRKb2luID0gJ2ZsaXBiZXZlbCc7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbWl0ZXJMZW5ndGggaXMgcmVhbGx5IHNtYWxsIGFuZCB0aGUgbGluZSBiZXZlbCB3b3VsZG4ndCBiZSB2aXNpYmxlLFxuICAgICAgICAgICAgICAgIC8vIGp1c3QgZHJhdyBhIG1pdGVyIGpvaW4gdG8gc2F2ZSBhIHRyaWFuZ2xlLlxuICAgICAgICAgICAgICAgIGlmIChtaXRlckxlbmd0aCA8IG1pdGVyTGltaXQpIGN1cnJlbnRKb2luID0gJ21pdGVyJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhvdyBmYXIgYWxvbmcgdGhlIGxpbmUgdGhlIGN1cnJlbnRWZXJ0ZXggaXNcbiAgICAgICAgICAgIGlmIChwcmV2VmVydGV4KSB0aGlzLnVwZGF0ZURpc3RhbmNlKHByZXZWZXJ0ZXgsIGN1cnJlbnRWZXJ0ZXgpO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdtaXRlcicpIHtcblxuICAgICAgICAgICAgICAgIGpvaW5Ob3JtYWwuX211bHQobWl0ZXJMZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Sm9pbiA9PT0gJ2ZsaXBiZXZlbCcpIHtcbiAgICAgICAgICAgICAgICAvLyBtaXRlciBpcyB0b28gYmlnLCBmbGlwIHRoZSBkaXJlY3Rpb24gdG8gbWFrZSBhIGJldmVsZWQgam9pblxuXG4gICAgICAgICAgICAgICAgaWYgKG1pdGVyTGVuZ3RoID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFsbW9zdCBwYXJhbGxlbCBsaW5lc1xuICAgICAgICAgICAgICAgICAgICBqb2luTm9ybWFsID0gbmV4dE5vcm1hbC5tdWx0KC0xKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJldmVsTGVuZ3RoID0gbWl0ZXJMZW5ndGggKiBwcmV2Tm9ybWFsLmFkZChuZXh0Tm9ybWFsKS5tYWcoKSAvIHByZXZOb3JtYWwuc3ViKG5leHROb3JtYWwpLm1hZygpO1xuICAgICAgICAgICAgICAgICAgICBqb2luTm9ybWFsLl9wZXJwKCkuX211bHQoYmV2ZWxMZW5ndGggKiAobGluZVR1cm5zTGVmdCA/IC0xIDogMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgam9pbk5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIGpvaW5Ob3JtYWwubXVsdCgtMSksIDAsIDAsIHNlZ21lbnQpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAnYmV2ZWwnIHx8IGN1cnJlbnRKb2luID09PSAnZmFrZXJvdW5kJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IC1NYXRoLnNxcnQobWl0ZXJMZW5ndGggKiBtaXRlckxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldEEgPSBsaW5lVHVybnNMZWZ0ID8gb2Zmc2V0IDogMDtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRCID0gbGluZVR1cm5zTGVmdCA/IDAgOiBvZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAvLyBDbG9zZSBwcmV2aW91cyBzZWdtZW50IHdpdGggYSBiZXZlbFxuICAgICAgICAgICAgICAgIGlmIChwcmV2VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBwcmV2Tm9ybWFsLCBvZmZzZXRBLCBvZmZzZXRCLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdmYWtlcm91bmQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBqb2luIGFuZ2xlIGlzIHNoYXJwIGVub3VnaCB0aGF0IGEgcm91bmQgam9pbiB3b3VsZCBiZSB2aXNpYmxlLlxuICAgICAgICAgICAgICAgICAgICAvLyBCZXZlbCBqb2lucyBmaWxsIHRoZSBnYXAgYmV0d2VlbiBzZWdtZW50cyB3aXRoIGEgc2luZ2xlIHBpZSBzbGljZSB0cmlhbmdsZS5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgcm91bmQgam9pbiBieSBhZGRpbmcgbXVsdGlwbGUgcGllIHNsaWNlcy4gVGhlIGpvaW4gaXNuJ3QgYWN0dWFsbHkgcm91bmQsIGJ1dFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCBsb29rcyBsaWtlIGl0IGlzIGF0IHRoZSBzaXplcyB3ZSByZW5kZXIgbGluZXMgYXQuXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gcGljayB0aGUgbnVtYmVyIG9mIHRyaWFuZ2xlcyBmb3IgYXBwcm94aW1hdGluZyByb3VuZCBqb2luIGJ5IGJhc2VkIG9uIHRoZSBhbmdsZSBiZXR3ZWVuIG5vcm1hbHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgucm91bmQoKGFwcHJveEFuZ2xlICogMTgwIC8gTWF0aC5QSSkgLyBERUdfUEVSX1RSSUFOR0xFKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBtID0gMTsgbSA8IG47IG0rKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSBtIC8gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICE9PSAwLjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcHByb3hpbWF0ZSBzcGhlcmljYWwgaW50ZXJwb2xhdGlvbiBodHRwczovL29ic2VydmFibGVocS5jb20vQG1vdXJuZXIvYXBwcm94aW1hdGluZy1nZW9tZXRyaWMtc2xlcnBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0MiA9IHQgLSAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQSA9IDEuMDkwNCArIGNvc0FuZ2xlICogKC0zLjI0NTIgKyBjb3NBbmdsZSAqICgzLjU1NjQ1IC0gY29zQW5nbGUgKiAxLjQzNTE5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQiA9IDAuODQ4MDEzICsgY29zQW5nbGUgKiAoLTEuMDYwMjEgKyBjb3NBbmdsZSAqIDAuMjE1NjM4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdCArIHQgKiB0MiAqICh0IC0gMSkgKiAoQSAqIHQyICogdDIgKyBCKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJ1ZGUgPSBuZXh0Tm9ybWFsLnN1YihwcmV2Tm9ybWFsKS5fbXVsdCh0KS5fYWRkKHByZXZOb3JtYWwpLl91bml0KCkuX211bHQobGluZVR1cm5zTGVmdCA/IC0xIDogMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEhhbGZWZXJ0ZXgoY3VycmVudFZlcnRleCwgZXh0cnVkZS54LCBleHRydWRlLnksIGZhbHNlLCBsaW5lVHVybnNMZWZ0LCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IG5leHQgc2VnbWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgbmV4dE5vcm1hbCwgLW9mZnNldEEsIC1vZmZzZXRCLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEpvaW4gPT09ICdidXR0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLCAwLCAwLCBzZWdtZW50KTsgLy8gYnV0dCBjYXBcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Sm9pbiA9PT0gJ3NxdWFyZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBwcmV2VmVydGV4ID8gMSA6IC0xOyAvLyBjbG9zaW5nIG9yIHN0YXJ0aW5nIHNxdWFyZSBjYXBcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgam9pbk5vcm1hbCwgb2Zmc2V0LCBvZmZzZXQsIHNlZ21lbnQpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAncm91bmQnKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJldlZlcnRleCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSBwcmV2aW91cyBzZWdtZW50IHdpdGggYnV0dFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgcHJldk5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHJvdW5kIGNhcCBvciBsaW5lam9pbiBhdCBlbmQgb2Ygc2VnbWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgcHJldk5vcm1hbCwgMSwgMSwgc2VnbWVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCByb3VuZCBjYXAgYmVmb3JlIGZpcnN0IHNlZ21lbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIG5leHROb3JtYWwsIC0xLCAtMSwgc2VnbWVudCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgbmV4dCBzZWdtZW50IHdpdGggYSBidXR0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBuZXh0Tm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1NoYXJwQ29ybmVyICYmIGkgPCBsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFNlZ21lbnRMZW5ndGggPSBjdXJyZW50VmVydGV4LmRpc3QobmV4dFZlcnRleCk7XG4gICAgICAgICAgICAgICAgaWYgKG5leHRTZWdtZW50TGVuZ3RoID4gMiAqIHNoYXJwQ29ybmVyT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0N1cnJlbnRWZXJ0ZXggPSBjdXJyZW50VmVydGV4LmFkZChuZXh0VmVydGV4LnN1YihjdXJyZW50VmVydGV4KS5fbXVsdChzaGFycENvcm5lck9mZnNldCAvIG5leHRTZWdtZW50TGVuZ3RoKS5fcm91bmQoKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzdGFuY2UoY3VycmVudFZlcnRleCwgbmV3Q3VycmVudFZlcnRleCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChuZXdDdXJyZW50VmVydGV4LCBuZXh0Tm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZlcnRleCA9IG5ld0N1cnJlbnRWZXJ0ZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCwgZmVhdHVyZSwgaW5kZXgsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdHdvIHZlcnRpY2VzIHRvIHRoZSBidWZmZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHAgdGhlIGxpbmUgdmVydGV4IHRvIGFkZCBidWZmZXIgdmVydGljZXMgZm9yXG4gICAgICogQHBhcmFtIG5vcm1hbCB2ZXJ0ZXggbm9ybWFsXG4gICAgICogQHBhcmFtIGVuZExlZnQgZXh0cnVkZSB0byBzaGlmdCB0aGUgbGVmdCB2ZXJ0ZXggYWxvbmcgdGhlIGxpbmVcbiAgICAgKiBAcGFyYW0gZW5kUmlnaHQgZXh0cnVkZSB0byBzaGlmdCB0aGUgbGVmdCB2ZXJ0ZXggYWxvbmcgdGhlIGxpbmVcbiAgICAgKiBAcGFyYW0gc2VnbWVudCB0aGUgc2VnbWVudCBvYmplY3QgdG8gYWRkIHRoZSB2ZXJ0ZXggdG9cbiAgICAgKiBAcGFyYW0gcm91bmQgd2hldGhlciB0aGlzIGlzIGEgcm91bmQgY2FwXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBhZGRDdXJyZW50VmVydGV4KHA6IFBvaW50LCBub3JtYWw6IFBvaW50LCBlbmRMZWZ0OiBudW1iZXIsIGVuZFJpZ2h0OiBudW1iZXIsIHNlZ21lbnQ6IFNlZ21lbnQsIHJvdW5kOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgLy8gbGVmdCBhbmQgcmlnaHQgZXh0cnVkZSB2ZWN0b3JzLCBwZXJwZW5kaWN1bGFybHkgc2hpZnRlZCBieSBlbmRMZWZ0L2VuZFJpZ2h0XG4gICAgICAgIGNvbnN0IGxlZnRYID0gbm9ybWFsLnggKyBub3JtYWwueSAqIGVuZExlZnQ7XG4gICAgICAgIGNvbnN0IGxlZnRZID0gbm9ybWFsLnkgLSBub3JtYWwueCAqIGVuZExlZnQ7XG4gICAgICAgIGNvbnN0IHJpZ2h0WCA9IC1ub3JtYWwueCArIG5vcm1hbC55ICogZW5kUmlnaHQ7XG4gICAgICAgIGNvbnN0IHJpZ2h0WSA9IC1ub3JtYWwueSAtIG5vcm1hbC54ICogZW5kUmlnaHQ7XG5cbiAgICAgICAgdGhpcy5hZGRIYWxmVmVydGV4KHAsIGxlZnRYLCBsZWZ0WSwgcm91bmQsIGZhbHNlLCBlbmRMZWZ0LCBzZWdtZW50KTtcbiAgICAgICAgdGhpcy5hZGRIYWxmVmVydGV4KHAsIHJpZ2h0WCwgcmlnaHRZLCByb3VuZCwgdHJ1ZSwgLWVuZFJpZ2h0LCBzZWdtZW50KTtcblxuICAgICAgICAvLyBUaGVyZSBpcyBhIG1heGltdW0gXCJkaXN0YW5jZSBhbG9uZyB0aGUgbGluZVwiIHRoYXQgd2UgY2FuIHN0b3JlIGluIHRoZSBidWZmZXJzLlxuICAgICAgICAvLyBXaGVuIHdlIGdldCBjbG9zZSB0byB0aGUgZGlzdGFuY2UsIHJlc2V0IGl0IHRvIHplcm8gYW5kIGFkZCB0aGUgdmVydGV4IGFnYWluIHdpdGhcbiAgICAgICAgLy8gYSBkaXN0YW5jZSBvZiB6ZXJvLiBUaGUgbWF4IGRpc3RhbmNlIGlzIGRldGVybWluZWQgYnkgdGhlIG51bWJlciBvZiBiaXRzIHdlIGFsbG9jYXRlXG4gICAgICAgIC8vIHRvIGBsaW5lc29mYXJgLlxuICAgICAgICBpZiAodGhpcy5kaXN0YW5jZSA+IE1BWF9MSU5FX0RJU1RBTkNFIC8gMiAmJiB0aGlzLnRvdGFsRGlzdGFuY2UgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2UgPSAwO1xuICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsIG5vcm1hbCwgZW5kTGVmdCwgZW5kUmlnaHQsIHNlZ21lbnQsIHJvdW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEhhbGZWZXJ0ZXgoe3gsIHl9OiBQb2ludCwgZXh0cnVkZVg6IG51bWJlciwgZXh0cnVkZVk6IG51bWJlciwgcm91bmQ6IGJvb2xlYW4sIHVwOiBib29sZWFuLCBkaXI6IG51bWJlciwgc2VnbWVudDogU2VnbWVudCkge1xuICAgICAgICAvLyBzY2FsZSBkb3duIHNvIHRoYXQgd2UgY2FuIHN0b3JlIGxvbmdlciBkaXN0YW5jZXMgd2hpbGUgc2FjcmlmaWNpbmcgcHJlY2lzaW9uLlxuICAgICAgICBjb25zdCBsaW5lc29mYXIgPSB0aGlzLnNjYWxlZERpc3RhbmNlICogTElORV9ESVNUQU5DRV9TQ0FMRTtcblxuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAgICAgLy8gYV9wb3Nfbm9ybWFsXG4gICAgICAgICAgICAvLyBFbmNvZGUgcm91bmQvdXAgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHNcbiAgICAgICAgICAgICh4IDw8IDEpICsgKHJvdW5kID8gMSA6IDApLFxuICAgICAgICAgICAgKHkgPDwgMSkgKyAodXAgPyAxIDogMCksXG4gICAgICAgICAgICAvLyBhX2RhdGFcbiAgICAgICAgICAgIC8vIGFkZCAxMjggdG8gc3RvcmUgYSBieXRlIGluIGFuIHVuc2lnbmVkIGJ5dGVcbiAgICAgICAgICAgIE1hdGgucm91bmQoRVhUUlVERV9TQ0FMRSAqIGV4dHJ1ZGVYKSArIDEyOCxcbiAgICAgICAgICAgIE1hdGgucm91bmQoRVhUUlVERV9TQ0FMRSAqIGV4dHJ1ZGVZKSArIDEyOCxcbiAgICAgICAgICAgIC8vIEVuY29kZSB0aGUgLTEvMC8xIGRpcmVjdGlvbiB2YWx1ZSBpbnRvIHRoZSBmaXJzdCB0d28gYml0cyBvZiAueiBvZiBhX2RhdGEuXG4gICAgICAgICAgICAvLyBDb21iaW5lIGl0IHdpdGggdGhlIGxvd2VyIDYgYml0cyBvZiBgbGluZXNvZmFyYCAoc2hpZnRlZCBieSAyIGJpdGVzIHRvIG1ha2VcbiAgICAgICAgICAgIC8vIHJvb20gZm9yIHRoZSBkaXJlY3Rpb24gdmFsdWUpLiBUaGUgdXBwZXIgOCBiaXRzIG9mIGBsaW5lc29mYXJgIGFyZSBwbGFjZWQgaW5cbiAgICAgICAgICAgIC8vIHRoZSBgd2AgY29tcG9uZW50LlxuICAgICAgICAgICAgKChkaXIgPT09IDAgPyAwIDogKGRpciA8IDAgPyAtMSA6IDEpKSArIDEpIHwgKChsaW5lc29mYXIgJiAweDNGKSA8PCAyKSxcbiAgICAgICAgICAgIGxpbmVzb2ZhciA+PiA2KTtcblxuICAgICAgICBjb25zdCBlID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGgrKztcbiAgICAgICAgaWYgKHRoaXMuZTEgPj0gMCAmJiB0aGlzLmUyID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh0aGlzLmUxLCB0aGlzLmUyLCBlKTtcbiAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwKSB7XG4gICAgICAgICAgICB0aGlzLmUyID0gZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZTEgPSBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlRGlzdGFuY2UocHJldjogUG9pbnQsIG5leHQ6IFBvaW50KSB7XG4gICAgICAgIHRoaXMuZGlzdGFuY2UgKz0gcHJldi5kaXN0KG5leHQpO1xuXG4gICAgICAgIC8vIEtub3dpbmcgdGhlIHJhdGlvIG9mIHRoZSBmdWxsIGxpbmVzdHJpbmcgY292ZXJlZCBieSB0aGlzIHRpbGVkIGZlYXR1cmUsIGFzIHdlbGxcbiAgICAgICAgLy8gYXMgdGhlIHRvdGFsIGRpc3RhbmNlIChpbiB0aWxlIHVuaXRzKSBvZiB0aGlzIHRpbGVkIGZlYXR1cmUsIGFuZCB0aGUgZGlzdGFuY2VcbiAgICAgICAgLy8gKGluIHRpbGUgdW5pdHMpIG9mIHRoZSBjdXJyZW50IHZlcnRleCwgd2UgY2FuIGRldGVybWluZSB0aGUgcmVsYXRpdmUgZGlzdGFuY2VcbiAgICAgICAgLy8gb2YgdGhpcyB2ZXJ0ZXggYWxvbmcgdGhlIGZ1bGwgbGluZXN0cmluZyBmZWF0dXJlIGFuZCBzY2FsZSBpdCB0byBbMCwgMl4xNSlcbiAgICAgICAgdGhpcy5zY2FsZWREaXN0YW5jZSA9IHRoaXMudG90YWxEaXN0YW5jZSA+IDAgP1xuICAgICAgICAgICAgKHRoaXMuY2xpcFN0YXJ0ICsgKHRoaXMuY2xpcEVuZCAtIHRoaXMuY2xpcFN0YXJ0KSAqIHRoaXMuZGlzdGFuY2UgLyB0aGlzLnRvdGFsRGlzdGFuY2UpICAqIChNQVhfTElORV9ESVNUQU5DRSAtIDEpIDpcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2U7XG4gICAgfVxufVxuXG5yZWdpc3RlcignTGluZUJ1Y2tldCcsIExpbmVCdWNrZXQsIHtvbWl0OiBbJ2xheWVycycsICdwYXR0ZXJuRmVhdHVyZXMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBMaW5lQnVja2V0O1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSB7fFxuICAgIFwibGluZS1jYXBcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJidXR0XCIgfCBcInJvdW5kXCIgfCBcInNxdWFyZVwiPixcbiAgICBcImxpbmUtam9pblwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJiZXZlbFwiIHwgXCJyb3VuZFwiIHwgXCJtaXRlclwiPixcbiAgICBcImxpbmUtbWl0ZXItbGltaXRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtcm91bmQtbGltaXRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtc29ydC1rZXlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImxpbmUtY2FwXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfbGluZVwiXVtcImxpbmUtY2FwXCJdKSxcbiAgICBcImxpbmUtam9pblwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9saW5lXCJdW1wibGluZS1qb2luXCJdKSxcbiAgICBcImxpbmUtbWl0ZXItbGltaXRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9saW5lXCJdW1wibGluZS1taXRlci1saW1pdFwiXSksXG4gICAgXCJsaW5lLXJvdW5kLWxpbWl0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfbGluZVwiXVtcImxpbmUtcm91bmQtbGltaXRcIl0pLFxuICAgIFwibGluZS1zb3J0LWtleVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9saW5lXCJdW1wibGluZS1zb3J0LWtleVwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJsaW5lLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJsaW5lLXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcImxpbmUtd2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLWdhcC13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtb2Zmc2V0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1ibHVyXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1kYXNoYXJyYXlcIjogQ3Jvc3NGYWRlZFByb3BlcnR5PEFycmF5PG51bWJlcj4+LFxuICAgIFwibGluZS1wYXR0ZXJuXCI6IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJsaW5lLWdyYWRpZW50XCI6IENvbG9yUmFtcFByb3BlcnR5LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwibGluZS1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtb3BhY2l0eVwiXSksXG4gICAgXCJsaW5lLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtY29sb3JcIl0pLFxuICAgIFwibGluZS10cmFuc2xhdGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLXRyYW5zbGF0ZVwiXSksXG4gICAgXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFxuICAgIFwibGluZS13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLXdpZHRoXCJdKSxcbiAgICBcImxpbmUtZ2FwLXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtZ2FwLXdpZHRoXCJdKSxcbiAgICBcImxpbmUtb2Zmc2V0XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtb2Zmc2V0XCJdKSxcbiAgICBcImxpbmUtYmx1clwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLWJsdXJcIl0pLFxuICAgIFwibGluZS1kYXNoYXJyYXlcIjogbmV3IENyb3NzRmFkZWRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1kYXNoYXJyYXlcIl0pLFxuICAgIFwibGluZS1wYXR0ZXJuXCI6IG5ldyBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLXBhdHRlcm5cIl0pLFxuICAgIFwibGluZS1ncmFkaWVudFwiOiBuZXcgQ29sb3JSYW1wUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtZ3JhZGllbnRcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQsIGxheW91dCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiwgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5pbXBvcnQgTGluZUJ1Y2tldCBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldC9saW5lX2J1Y2tldCc7XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQge3BvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmV9IGZyb20gJy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7Z2V0TWF4aW11bVBhaW50VmFsdWUsIHRyYW5zbGF0ZURpc3RhbmNlLCB0cmFuc2xhdGV9IGZyb20gJy4uL3F1ZXJ5X3V0aWxzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vbGluZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgcmVuZGVyQ29sb3JSYW1wIGZyb20gJy4uLy4uL3V0aWwvY29sb3JfcmFtcCc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBMYXlvdXQsIFBvc3NpYmx5RXZhbHVhdGVkLCBEYXRhRHJpdmVuUHJvcGVydHl9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldCwgQnVja2V0UGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUge0xheW91dFByb3BzLCBQYWludFByb3BzfSBmcm9tICcuL2xpbmVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBUZXh0dXJlIGZyb20gJy4uLy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBMaW5lRmxvb3J3aWR0aFByb3BlcnR5IGV4dGVuZHMgRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4ge1xuICAgIHVzZUludGVnZXJab29tOiB0cnVlO1xuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZSwgcGFyYW1ldGVycykge1xuICAgICAgICBwYXJhbWV0ZXJzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKE1hdGguZmxvb3IocGFyYW1ldGVycy56b29tKSwge1xuICAgICAgICAgICAgbm93OiBwYXJhbWV0ZXJzLm5vdyxcbiAgICAgICAgICAgIGZhZGVEdXJhdGlvbjogcGFyYW1ldGVycy5mYWRlRHVyYXRpb24sXG4gICAgICAgICAgICB6b29tSGlzdG9yeTogcGFyYW1ldGVycy56b29tSGlzdG9yeSxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHBhcmFtZXRlcnMudHJhbnNpdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnBvc3NpYmx5RXZhbHVhdGUodmFsdWUsIHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKHZhbHVlLCBnbG9iYWxzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgZ2xvYmFscyA9IGV4dGVuZCh7fSwgZ2xvYmFscywge3pvb206IE1hdGguZmxvb3IoZ2xvYmFscy56b29tKX0pO1xuICAgICAgICByZXR1cm4gc3VwZXIuZXZhbHVhdGUodmFsdWUsIGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgfVxufVxuXG5jb25zdCBsaW5lRmxvb3J3aWR0aFByb3BlcnR5ID0gbmV3IExpbmVGbG9vcndpZHRoUHJvcGVydHkocHJvcGVydGllcy5wYWludC5wcm9wZXJ0aWVzWydsaW5lLXdpZHRoJ10uc3BlY2lmaWNhdGlvbik7XG5saW5lRmxvb3J3aWR0aFByb3BlcnR5LnVzZUludGVnZXJab29tID0gdHJ1ZTtcblxuY2xhc3MgTGluZVN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBncmFkaWVudDogP1JHQkFJbWFnZTtcbiAgICBncmFkaWVudFRleHR1cmU6ID9UZXh0dXJlO1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAobmFtZSA9PT0gJ2xpbmUtZ3JhZGllbnQnKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFkaWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZUdyYWRpZW50KCkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWydsaW5lLWdyYWRpZW50J10udmFsdWUuZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5ncmFkaWVudCA9IHJlbmRlckNvbG9yUmFtcChleHByZXNzaW9uLCAnbGluZVByb2dyZXNzJyk7XG4gICAgICAgIHRoaXMuZ3JhZGllbnRUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHN1cGVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgKHRoaXMucGFpbnQuX3ZhbHVlczogYW55KVsnbGluZS1mbG9vcndpZHRoJ10gPVxuICAgICAgICAgICAgbGluZUZsb29yd2lkdGhQcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlKHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5fdmFsdWVzWydsaW5lLXdpZHRoJ10udmFsdWUsIHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUJ1Y2tldChwYXJhbWV0ZXJzOiBCdWNrZXRQYXJhbWV0ZXJzPCo+KSB7XG4gICAgICAgIHJldHVybiBuZXcgTGluZUJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cyhidWNrZXQ6IEJ1Y2tldCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGxpbmVCdWNrZXQ6IExpbmVCdWNrZXQgPSAoYnVja2V0OiBhbnkpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGdldExpbmVXaWR0aChcbiAgICAgICAgICAgIGdldE1heGltdW1QYWludFZhbHVlKCdsaW5lLXdpZHRoJywgdGhpcywgbGluZUJ1Y2tldCksXG4gICAgICAgICAgICBnZXRNYXhpbXVtUGFpbnRWYWx1ZSgnbGluZS1nYXAtd2lkdGgnLCB0aGlzLCBsaW5lQnVja2V0KSk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGdldE1heGltdW1QYWludFZhbHVlKCdsaW5lLW9mZnNldCcsIHRoaXMsIGxpbmVCdWNrZXQpO1xuICAgICAgICByZXR1cm4gd2lkdGggLyAyICsgTWF0aC5hYnMob2Zmc2V0KSArIHRyYW5zbGF0ZURpc3RhbmNlKHRoaXMucGFpbnQuZ2V0KCdsaW5lLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2xpbmUtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICB0cmFuc2Zvcm0uYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgY29uc3QgaGFsZldpZHRoID0gcGl4ZWxzVG9UaWxlVW5pdHMgLyAyICogZ2V0TGluZVdpZHRoKFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2xpbmUtd2lkdGgnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2xpbmUtZ2FwLXdpZHRoJykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSB0aGlzLnBhaW50LmdldCgnbGluZS1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBpZiAobGluZU9mZnNldCkge1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSBvZmZzZXRMaW5lKGdlb21ldHJ5LCBsaW5lT2Zmc2V0ICogcGl4ZWxzVG9UaWxlVW5pdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmUodHJhbnNsYXRlZFBvbHlnb24sIGdlb21ldHJ5LCBoYWxmV2lkdGgpO1xuICAgIH1cblxuICAgIGlzVGlsZUNsaXBwZWQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluZVN0eWxlTGF5ZXI7XG5cbmZ1bmN0aW9uIGdldExpbmVXaWR0aChsaW5lV2lkdGgsIGxpbmVHYXBXaWR0aCkge1xuICAgIGlmIChsaW5lR2FwV2lkdGggPiAwKSB7XG4gICAgICAgIHJldHVybiBsaW5lR2FwV2lkdGggKyAyICogbGluZVdpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsaW5lV2lkdGg7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBvZmZzZXRMaW5lKHJpbmdzLCBvZmZzZXQpIHtcbiAgICBjb25zdCBuZXdSaW5ncyA9IFtdO1xuICAgIGNvbnN0IHplcm8gPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCByaW5ncy5sZW5ndGg7IGsrKykge1xuICAgICAgICBjb25zdCByaW5nID0gcmluZ3Nba107XG4gICAgICAgIGNvbnN0IG5ld1JpbmcgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gcmluZ1tpIC0gMV07XG4gICAgICAgICAgICBjb25zdCBiID0gcmluZ1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSByaW5nW2kgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGFUb0IgPSBpID09PSAwID8gemVybyA6IGIuc3ViKGEpLl91bml0KCkuX3BlcnAoKTtcbiAgICAgICAgICAgIGNvbnN0IGJUb0MgPSBpID09PSByaW5nLmxlbmd0aCAtIDEgPyB6ZXJvIDogYy5zdWIoYikuX3VuaXQoKS5fcGVycCgpO1xuICAgICAgICAgICAgY29uc3QgZXh0cnVkZSA9IGFUb0IuX2FkZChiVG9DKS5fdW5pdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBjb3NIYWxmQW5nbGUgPSBleHRydWRlLnggKiBiVG9DLnggKyBleHRydWRlLnkgKiBiVG9DLnk7XG4gICAgICAgICAgICBleHRydWRlLl9tdWx0KDEgLyBjb3NIYWxmQW5nbGUpO1xuXG4gICAgICAgICAgICBuZXdSaW5nLnB1c2goZXh0cnVkZS5fbXVsdChvZmZzZXQpLl9hZGQoYikpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JpbmdzLnB1c2gobmV3UmluZyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdSaW5ncztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmV4cG9ydCBjb25zdCBzeW1ib2xMYXlvdXRBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zX29mZnNldCcsICBjb21wb25lbnRzOiA0LCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2FfZGF0YScsICAgICAgICBjb21wb25lbnRzOiA0LCB0eXBlOiAnVWludDE2J31cbl0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1pY0xheW91dEF0dHJpYnV0ZXMgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wcm9qZWN0ZWRfcG9zJywgY29tcG9uZW50czogMywgdHlwZTogJ0Zsb2F0MzInfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBwbGFjZW1lbnRPcGFjaXR5QXR0cmlidXRlcyA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX2ZhZGVfb3BhY2l0eScsIGNvbXBvbmVudHM6IDEsIHR5cGU6ICdVaW50MzInfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25WZXJ0ZXhBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcGxhY2VkJywgY29tcG9uZW50czogMiwgdHlwZTogJ1VpbnQ4J30sXG4gICAge25hbWU6ICdhX3NoaWZ0JywgY29tcG9uZW50czogMiwgdHlwZTogJ0Zsb2F0MzInfVxuXSk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25Cb3ggPSBjcmVhdGVMYXlvdXQoW1xuICAgIC8vIHRoZSBib3ggaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBhbmNob3IgcG9pbnRcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclBvaW50WCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yUG9pbnRZJ30sXG5cbiAgICAvLyBkaXN0YW5jZXMgdG8gdGhlIGVkZ2VzIGZyb20gdGhlIGFuY2hvclxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneDEnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3kxJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd4Mid9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneTInfSxcblxuICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmVhdHVyZSBpbiB0aGUgb3JpZ2luYWwgdmVjdG9ydGlsZVxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ2ZlYXR1cmVJbmRleCd9LFxuICAgIC8vIHRoZSBzb3VyY2UgbGF5ZXIgdGhlIGZlYXR1cmUgYXBwZWFycyBpblxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3NvdXJjZUxheWVySW5kZXgnfSxcbiAgICAvLyB0aGUgYnVja2V0IHRoZSBmZWF0dXJlIGFwcGVhcnMgaW5cbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdidWNrZXRJbmRleCd9LFxuXG4gICAgLy8gY29sbGlzaW9uIGNpcmNsZXMgZm9yIGxpbmVzIHN0b3JlIHRoZWlyIGRpc3RhbmNlIHRvIHRoZSBhbmNob3IgaW4gdGlsZSB1bml0c1xuICAgIC8vIHNvIHRoYXQgdGhleSBjYW4gYmUgaWdub3JlZCBpZiB0aGUgcHJvamVjdGVkIGxhYmVsIGRvZXNuJ3QgZXh0ZW5kIGludG9cbiAgICAvLyB0aGUgYm94IGFyZWFcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3JhZGl1cyd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yJ31cbl0pO1xuXG5leHBvcnQgY29uc3QgY29sbGlzaW9uQm94TGF5b3V0ID0gY3JlYXRlTGF5b3V0KFsgLy8gdXNlZCB0byByZW5kZXIgY29sbGlzaW9uIGJveGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXNcbiAgICB7bmFtZTogJ2FfcG9zJywgICAgICAgIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9hbmNob3JfcG9zJywgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX2V4dHJ1ZGUnLCAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25DaXJjbGVMYXlvdXQgPSBjcmVhdGVMYXlvdXQoWyAvLyB1c2VkIHRvIHJlbmRlciBjb2xsaXNpb24gY2lyY2xlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzXG4gICAge25hbWU6ICdhX3BvcycsICAgICAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2FfYW5jaG9yX3BvcycsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9leHRydWRlJywgICAgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J31cbl0sIDQpO1xuXG5leHBvcnQgY29uc3QgcGxhY2VtZW50ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclknfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdnbHlwaFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1HbHlwaHMnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICd2ZXJ0ZXhTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MzInLCBuYW1lOiAnbGluZVN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdsaW5lTGVuZ3RoJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnc2VnbWVudCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2xvd2VyU2l6ZSd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3VwcGVyU2l6ZSd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICdsaW5lT2Zmc2V0WCd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICdsaW5lT2Zmc2V0WSd9LFxuICAgIHt0eXBlOiAnVWludDgnLCBuYW1lOiAnd3JpdGluZ01vZGUnfSxcbiAgICB7dHlwZTogJ1VpbnQ4JywgbmFtZTogJ3BsYWNlZE9yaWVudGF0aW9uJ30sXG4gICAge3R5cGU6ICdVaW50OCcsIG5hbWU6ICdoaWRkZW4nfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdjcm9zc1RpbGVJRCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYXNzb2NpYXRlZEljb25JbmRleCd9XG5dKTtcblxuZXhwb3J0IGNvbnN0IHN5bWJvbEluc3RhbmNlID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclknfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3JpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2xlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3ZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdwbGFjZWRJY29uU3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3ZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAna2V5J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndGV4dEJveFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd0ZXh0Qm94RW5kSW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndmVydGljYWxUZXh0Qm94RW5kSW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdpY29uQm94U3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2ljb25Cb3hFbmRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3ZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2ZlYXR1cmVJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ251bUhvcml6b250YWxHbHlwaFZlcnRpY2VzJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbnVtSWNvblZlcnRpY2VzJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbnVtVmVydGljYWxJY29uVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdjcm9zc1RpbGVJRCd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICd0ZXh0Qm94U2NhbGUnfSxcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBjb21wb25lbnRzOiAyLCBuYW1lOiAndGV4dE9mZnNldCd9XG5dKTtcblxuZXhwb3J0IGNvbnN0IGdseXBoT2Zmc2V0ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBuYW1lOiAnb2Zmc2V0WCd9XG5dKTtcblxuZXhwb3J0IGNvbnN0IGxpbmVWZXJ0ZXggPSBjcmVhdGVMYXlvdXQoW1xuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneSd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAndGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3InfVxuXSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BsdWdpbiBhcyBydGxUZXh0UGx1Z2lufSBmcm9tICcuLi9zb3VyY2UvcnRsX3RleHRfcGx1Z2luJztcblxuaW1wb3J0IHR5cGUgU3ltYm9sU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmV9IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UZXh0KHRleHQ6IHN0cmluZywgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsIGZlYXR1cmU6IEZlYXR1cmUpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXRyYW5zZm9ybScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICBpZiAodHJhbnNmb3JtID09PSAndXBwZXJjYXNlJykge1xuICAgICAgICB0ZXh0ID0gdGV4dC50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgIH0gZWxzZSBpZiAodHJhbnNmb3JtID09PSAnbG93ZXJjYXNlJykge1xuICAgICAgICB0ZXh0ID0gdGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmIChydGxUZXh0UGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZykge1xuICAgICAgICB0ZXh0ID0gcnRsVGV4dFBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmcodGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRleHQ6IEZvcm1hdHRlZCwgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsIGZlYXR1cmU6IEZlYXR1cmUpOiBGb3JtYXR0ZWQge1xuICAgIHRleHQuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgICAgc2VjdGlvbi50ZXh0ID0gdHJhbnNmb3JtVGV4dChzZWN0aW9uLnRleHQsIGxheWVyLCBmZWF0dXJlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGV4dDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtTeW1ib2xGZWF0dXJlfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGZlYXR1cmVzOiBBcnJheTxTeW1ib2xGZWF0dXJlPik6IEFycmF5PFN5bWJvbEZlYXR1cmU+IHtcbiAgICBjb25zdCBsZWZ0SW5kZXg6IHtbc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuICAgIGNvbnN0IHJpZ2h0SW5kZXg6IHtbc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuICAgIGNvbnN0IG1lcmdlZEZlYXR1cmVzID0gW107XG4gICAgbGV0IG1lcmdlZEluZGV4ID0gMDtcblxuICAgIGZ1bmN0aW9uIGFkZChrKSB7XG4gICAgICAgIG1lcmdlZEZlYXR1cmVzLnB1c2goZmVhdHVyZXNba10pO1xuICAgICAgICBtZXJnZWRJbmRleCsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlRnJvbVJpZ2h0KGxlZnRLZXk6IHN0cmluZywgcmlnaHRLZXk6IHN0cmluZywgZ2VvbSkge1xuICAgICAgICBjb25zdCBpID0gcmlnaHRJbmRleFtsZWZ0S2V5XTtcbiAgICAgICAgZGVsZXRlIHJpZ2h0SW5kZXhbbGVmdEtleV07XG4gICAgICAgIHJpZ2h0SW5kZXhbcmlnaHRLZXldID0gaTtcblxuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXS5wb3AoKTtcbiAgICAgICAgbWVyZ2VkRmVhdHVyZXNbaV0uZ2VvbWV0cnlbMF0gPSBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXS5jb25jYXQoZ2VvbVswXSk7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlRnJvbUxlZnQobGVmdEtleTogc3RyaW5nLCByaWdodEtleTogc3RyaW5nLCBnZW9tKSB7XG4gICAgICAgIGNvbnN0IGkgPSBsZWZ0SW5kZXhbcmlnaHRLZXldO1xuICAgICAgICBkZWxldGUgbGVmdEluZGV4W3JpZ2h0S2V5XTtcbiAgICAgICAgbGVmdEluZGV4W2xlZnRLZXldID0gaTtcblxuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXS5zaGlmdCgpO1xuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXSA9IGdlb21bMF0uY29uY2F0KG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdKTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0S2V5KHRleHQsIGdlb20sIG9uUmlnaHQpIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBvblJpZ2h0ID8gZ2VvbVswXVtnZW9tWzBdLmxlbmd0aCAtIDFdIDogZ2VvbVswXVswXTtcbiAgICAgICAgcmV0dXJuIGAke3RleHR9OiR7cG9pbnQueH06JHtwb2ludC55fWA7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBmZWF0dXJlcy5sZW5ndGg7IGsrKykge1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNba107XG4gICAgICAgIGNvbnN0IGdlb20gPSBmZWF0dXJlLmdlb21ldHJ5O1xuICAgICAgICBjb25zdCB0ZXh0ID0gZmVhdHVyZS50ZXh0ID8gZmVhdHVyZS50ZXh0LnRvU3RyaW5nKCkgOiBudWxsO1xuXG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgYWRkKGspO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZWZ0S2V5ID0gZ2V0S2V5KHRleHQsIGdlb20pLFxuICAgICAgICAgICAgcmlnaHRLZXkgPSBnZXRLZXkodGV4dCwgZ2VvbSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKChsZWZ0S2V5IGluIHJpZ2h0SW5kZXgpICYmIChyaWdodEtleSBpbiBsZWZ0SW5kZXgpICYmIChyaWdodEluZGV4W2xlZnRLZXldICE9PSBsZWZ0SW5kZXhbcmlnaHRLZXldKSkge1xuICAgICAgICAgICAgLy8gZm91bmQgbGluZXMgd2l0aCB0aGUgc2FtZSB0ZXh0IGFkamFjZW50IHRvIGJvdGggZW5kcyBvZiB0aGUgY3VycmVudCBsaW5lLCBtZXJnZSBhbGwgdGhyZWVcbiAgICAgICAgICAgIGNvbnN0IGogPSBtZXJnZUZyb21MZWZ0KGxlZnRLZXksIHJpZ2h0S2V5LCBnZW9tKTtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBtZXJnZUZyb21SaWdodChsZWZ0S2V5LCByaWdodEtleSwgbWVyZ2VkRmVhdHVyZXNbal0uZ2VvbWV0cnkpO1xuXG4gICAgICAgICAgICBkZWxldGUgbGVmdEluZGV4W2xlZnRLZXldO1xuICAgICAgICAgICAgZGVsZXRlIHJpZ2h0SW5kZXhbcmlnaHRLZXldO1xuXG4gICAgICAgICAgICByaWdodEluZGV4W2dldEtleSh0ZXh0LCBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeSwgdHJ1ZSldID0gaTtcbiAgICAgICAgICAgIG1lcmdlZEZlYXR1cmVzW2pdLmdlb21ldHJ5ID0gKG51bGw6IGFueSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChsZWZ0S2V5IGluIHJpZ2h0SW5kZXgpIHtcbiAgICAgICAgICAgIC8vIGZvdW5kIG1lcmdlYWJsZSBsaW5lIGFkamFjZW50IHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBsaW5lLCBtZXJnZVxuICAgICAgICAgICAgbWVyZ2VGcm9tUmlnaHQobGVmdEtleSwgcmlnaHRLZXksIGdlb20pO1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmlnaHRLZXkgaW4gbGVmdEluZGV4KSB7XG4gICAgICAgICAgICAvLyBmb3VuZCBtZXJnZWFibGUgbGluZSBhZGphY2VudCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUsIG1lcmdlXG4gICAgICAgICAgICBtZXJnZUZyb21MZWZ0KGxlZnRLZXksIHJpZ2h0S2V5LCBnZW9tKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbm8gYWRqYWNlbnQgbGluZXMsIGFkZCBhcyBhIG5ldyBpdGVtXG4gICAgICAgICAgICBhZGQoayk7XG4gICAgICAgICAgICBsZWZ0SW5kZXhbbGVmdEtleV0gPSBtZXJnZWRJbmRleCAtIDE7XG4gICAgICAgICAgICByaWdodEluZGV4W3JpZ2h0S2V5XSA9IG1lcmdlZEluZGV4IC0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWRGZWF0dXJlcy5maWx0ZXIoKGYpID0+IGYuZ2VvbWV0cnkpO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24sXG59IGZyb20gJy4vc2NyaXB0X2RldGVjdGlvbic7XG5cbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXAgPSB7XG4gICAgJyEnOiAnw6/CuMKVJyxcbiAgICAnIyc6ICfDr8K8woMnLFxuICAgICckJzogJ8OvwrzChCcsXG4gICAgJyUnOiAnw6/CvMKFJyxcbiAgICAnJic6ICfDr8K8woYnLFxuICAgICcoJzogJ8OvwrjCtScsXG4gICAgJyknOiAnw6/CuMK2JyxcbiAgICAnKic6ICfDr8K8woonLFxuICAgICcrJzogJ8OvwrzCiycsXG4gICAgJywnOiAnw6/CuMKQJyxcbiAgICAnLSc6ICfDr8K4wrInLFxuICAgICcuJzogJ8OjwoPCuycsXG4gICAgJy8nOiAnw6/CvMKPJyxcbiAgICAnOic6ICfDr8K4wpMnLFxuICAgICc7JzogJ8OvwrjClCcsXG4gICAgJzwnOiAnw6/CuMK/JyxcbiAgICAnPSc6ICfDr8K8wp0nLFxuICAgICc+JzogJ8OvwrnCgCcsXG4gICAgJz8nOiAnw6/CuMKWJyxcbiAgICAnQCc6ICfDr8K8wqAnLFxuICAgICdbJzogJ8OvwrnChycsXG4gICAgJ1xcXFwnOiAnw6/CvMK8JyxcbiAgICAnXSc6ICfDr8K5wognLFxuICAgICdeJzogJ8OvwrzCvicsXG4gICAgJ18nOiAnw6/CuMKzJyxcbiAgICAnYCc6ICfDr8K9woAnLFxuICAgICd7JzogJ8OvwrjCtycsXG4gICAgJ3wnOiAnw6LCgMKVJyxcbiAgICAnfSc6ICfDr8K4wrgnLFxuICAgICd+JzogJ8Ovwr3CnicsXG4gICAgJ8OCwqInOiAnw6/Cv8KgJyxcbiAgICAnw4LCoyc6ICfDr8K/wqEnLFxuICAgICfDgsKlJzogJ8Ovwr/CpScsXG4gICAgJ8OCwqYnOiAnw6/Cv8KkJyxcbiAgICAnw4LCrCc6ICfDr8K/wqInLFxuICAgICfDgsKvJzogJ8Ovwr/CoycsXG4gICAgJ8OiwoDCkyc6ICfDr8K4wrInLFxuICAgICfDosKAwpQnOiAnw6/CuMKxJyxcbiAgICAnw6LCgMKYJzogJ8OvwrnCgycsXG4gICAgJ8OiwoDCmSc6ICfDr8K5woQnLFxuICAgICfDosKAwpwnOiAnw6/CucKBJyxcbiAgICAnw6LCgMKdJzogJ8OvwrnCgicsXG4gICAgJ8OiwoDCpic6ICfDr8K4wpknLFxuICAgICfDosKAwqcnOiAnw6PCg8K7JyxcbiAgICAnw6LCgsKpJzogJ8Ovwr/CpicsXG4gICAgJ8OjwoDCgSc6ICfDr8K4wpEnLFxuICAgICfDo8KAwoInOiAnw6/CuMKSJyxcbiAgICAnw6PCgMKIJzogJ8OvwrjCvycsXG4gICAgJ8OjwoDCiSc6ICfDr8K5woAnLFxuICAgICfDo8KAwoonOiAnw6/CuMK9JyxcbiAgICAnw6PCgMKLJzogJ8OvwrjCvicsXG4gICAgJ8OjwoDCjCc6ICfDr8K5woEnLFxuICAgICfDo8KAwo0nOiAnw6/CucKCJyxcbiAgICAnw6PCgMKOJzogJ8OvwrnCgycsXG4gICAgJ8OjwoDCjyc6ICfDr8K5woQnLFxuICAgICfDo8KAwpAnOiAnw6/CuMK7JyxcbiAgICAnw6PCgMKRJzogJ8OvwrjCvCcsXG4gICAgJ8OjwoDClCc6ICfDr8K4wrknLFxuICAgICfDo8KAwpUnOiAnw6/CuMK6JyxcbiAgICAnw6PCgMKWJzogJ8OvwrjClycsXG4gICAgJ8OjwoDClyc6ICfDr8K4wpgnLFxuICAgICfDr8K8woEnOiAnw6/CuMKVJyxcbiAgICAnw6/CvMKIJzogJ8OvwrjCtScsXG4gICAgJ8OvwrzCiSc6ICfDr8K4wrYnLFxuICAgICfDr8K8wownOiAnw6/CuMKQJyxcbiAgICAnw6/CvMKNJzogJ8OvwrjCsicsXG4gICAgJ8OvwrzCjic6ICfDo8KDwrsnLFxuICAgICfDr8K8wponOiAnw6/CuMKTJyxcbiAgICAnw6/CvMKbJzogJ8OvwrjClCcsXG4gICAgJ8OvwrzCnCc6ICfDr8K4wr8nLFxuICAgICfDr8K8wp4nOiAnw6/CucKAJyxcbiAgICAnw6/CvMKfJzogJ8OvwrjClicsXG4gICAgJ8OvwrzCuyc6ICfDr8K5wocnLFxuICAgICfDr8K8wr0nOiAnw6/CucKIJyxcbiAgICAnw6/CvMK/JzogJ8OvwrjCsycsXG4gICAgJ8Ovwr3Cmyc6ICfDr8K4wrcnLFxuICAgICfDr8K9wpwnOiAnw6LCgMKVJyxcbiAgICAnw6/CvcKdJzogJ8OvwrjCuCcsXG4gICAgJ8Ovwr3Cnyc6ICfDr8K4wrUnLFxuICAgICfDr8K9wqAnOiAnw6/CuMK2JyxcbiAgICAnw6/CvcKhJzogJ8OvwrjCkicsXG4gICAgJ8Ovwr3Coic6ICfDr8K5woEnLFxuICAgICfDr8K9wqMnOiAnw6/CucKCJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVydGljYWxpemVQdW5jdHVhdGlvbihpbnB1dDogc3RyaW5nKSB7XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuZXh0Q2hhckNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkgKyAxKSB8fCBudWxsO1xuICAgICAgICBjb25zdCBwcmV2Q2hhckNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkgLSAxKSB8fCBudWxsO1xuXG4gICAgICAgIGNvbnN0IGNhblJlcGxhY2VQdW5jdHVhdGlvbiA9IChcbiAgICAgICAgICAgICghbmV4dENoYXJDb2RlIHx8ICFjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24obmV4dENoYXJDb2RlKSB8fCB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbaW5wdXRbaSArIDFdXSkgJiZcbiAgICAgICAgICAgICghcHJldkNoYXJDb2RlIHx8ICFjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24ocHJldkNoYXJDb2RlKSB8fCB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbaW5wdXRbaSAtIDFdXSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2FuUmVwbGFjZVB1bmN0dWF0aW9uICYmIHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcFtpbnB1dFtpXV0pIHtcbiAgICAgICAgICAgIG91dHB1dCArPSB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbaW5wdXRbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0ICs9IGlucHV0W2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbn1cblxuIiwiLy8gQGZsb3dcbi8vIE9ORV9FTSBjb25zdGFudCB1c2VkIHRvIGdvIGJldHdlZW4gXCJlbVwiIHVuaXRzIHVzZWQgaW4gc3R5bGUgc3BlYyBhbmQgXCJwb2ludHNcIiB1c2VkIGludGVybmFsbHkgZm9yIGxheW91dFxuXG5leHBvcnQgZGVmYXVsdCAyNDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gICAgY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uLFxuICAgIGNoYXJBbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nLFxuICAgIGNoYXJJbkNvbXBsZXhTaGFwaW5nU2NyaXB0XG59IGZyb20gJy4uL3V0aWwvc2NyaXB0X2RldGVjdGlvbic7XG5pbXBvcnQgdmVydGljYWxpemVQdW5jdHVhdGlvbiBmcm9tICcuLi91dGlsL3ZlcnRpY2FsaXplX3B1bmN0dWF0aW9uJztcbmltcG9ydCB7cGx1Z2luIGFzIHJ0bFRleHRQbHVnaW59IGZyb20gJy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuaW1wb3J0IE9ORV9FTSBmcm9tICcuL29uZV9lbSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmNvbnN0IFdyaXRpbmdNb2RlID0ge1xuICAgIGhvcml6b250YWw6IDEsXG4gICAgdmVydGljYWw6IDIsXG4gICAgaG9yaXpvbnRhbE9ubHk6IDNcbn07XG5cbmV4cG9ydCB7c2hhcGVUZXh0LCBzaGFwZUljb24sIGZpdEljb25Ub1RleHQsIGdldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGV9O1xuXG4vLyBUaGUgcG9zaXRpb24gb2YgYSBnbHlwaCByZWxhdGl2ZSB0byB0aGUgdGV4dCdzIGFuY2hvciBwb2ludC5cbmV4cG9ydCB0eXBlIFBvc2l0aW9uZWRHbHlwaCA9IHtcbiAgICBnbHlwaDogbnVtYmVyLFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgdmVydGljYWw6IGJvb2xlYW4sXG4gICAgc2NhbGU6IG51bWJlcixcbiAgICBmb250U3RhY2s6IHN0cmluZyxcbiAgICBzZWN0aW9uSW5kZXg6IG51bWJlclxufTtcblxuLy8gQSBjb2xsZWN0aW9uIG9mIHBvc2l0aW9uZWQgZ2x5cGhzIGFuZCBzb21lIG1ldGFkYXRhXG5leHBvcnQgdHlwZSBTaGFwaW5nID0ge1xuICAgIHBvc2l0aW9uZWRHbHlwaHM6IEFycmF5PFBvc2l0aW9uZWRHbHlwaD4sXG4gICAgdG9wOiBudW1iZXIsXG4gICAgYm90dG9tOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIHJpZ2h0OiBudW1iZXIsXG4gICAgd3JpdGluZ01vZGU6IDEgfCAyLFxuICAgIGxpbmVDb3VudDogbnVtYmVyLFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICB5T2Zmc2V0OiBudW1iZXIsXG59O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xBbmNob3IgPSAnY2VudGVyJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nIHwgJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnO1xuZXhwb3J0IHR5cGUgVGV4dEp1c3RpZnkgPSAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG5cbmNsYXNzIFRhZ2dlZFN0cmluZyB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHNlY3Rpb25JbmRleDogQXJyYXk8bnVtYmVyPiAvLyBtYXBzIGVhY2ggY2hhcmFjdGVyIGluICd0ZXh0JyB0byBpdHMgY29ycmVzcG9uZGluZyBlbnRyeSBpbiAnc2VjdGlvbnMnXG4gICAgc2VjdGlvbnM6IEFycmF5PHsgc2NhbGU6IG51bWJlciwgZm9udFN0YWNrOiBzdHJpbmcgfT5cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRleHQgPSBcIlwiO1xuICAgICAgICB0aGlzLnNlY3Rpb25JbmRleCA9IFtdO1xuICAgICAgICB0aGlzLnNlY3Rpb25zID0gW107XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21GZWF0dXJlKHRleHQ6IEZvcm1hdHRlZCwgZGVmYXVsdEZvbnRTdGFjazogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0LnNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGV4dC5zZWN0aW9uc1tpXTtcbiAgICAgICAgICAgIHJlc3VsdC5zZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzY2FsZTogc2VjdGlvbi5zY2FsZSB8fCAxLFxuICAgICAgICAgICAgICAgIGZvbnRTdGFjazogc2VjdGlvbi5mb250U3RhY2sgfHwgZGVmYXVsdEZvbnRTdGFja1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHQudGV4dCArPSBzZWN0aW9uLnRleHQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNlY3Rpb24udGV4dC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZWN0aW9uSW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGxlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBnZXRTZWN0aW9uKGluZGV4OiBudW1iZXIpOiB7IHNjYWxlOiBudW1iZXIsIGZvbnRTdGFjazogc3RyaW5nIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWN0aW9uc1t0aGlzLnNlY3Rpb25JbmRleFtpbmRleF1dO1xuICAgIH1cblxuICAgIGdldFNlY3Rpb25JbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4W2luZGV4XTtcbiAgICB9XG5cbiAgICBnZXRDaGFyQ29kZShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICB9XG5cbiAgICB2ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKCkge1xuICAgICAgICB0aGlzLnRleHQgPSB2ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKHRoaXMudGV4dCk7XG4gICAgfVxuXG4gICAgdHJpbSgpIHtcbiAgICAgICAgbGV0IGJlZ2lubmluZ1doaXRlc3BhY2UgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDtcbiAgICAgICAgICAgIGkgPCB0aGlzLnRleHQubGVuZ3RoICYmIHdoaXRlc3BhY2VbdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSldO1xuICAgICAgICAgICAgaSsrKSB7XG4gICAgICAgICAgICBiZWdpbm5pbmdXaGl0ZXNwYWNlKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRyYWlsaW5nV2hpdGVzcGFjZSA9IHRoaXMudGV4dC5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnRleHQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGkgPj0gMCAmJiBpID49IGJlZ2lubmluZ1doaXRlc3BhY2UgJiYgd2hpdGVzcGFjZVt0aGlzLnRleHQuY2hhckNvZGVBdChpKV07XG4gICAgICAgICAgICBpLS0pIHtcbiAgICAgICAgICAgIHRyYWlsaW5nV2hpdGVzcGFjZS0tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMudGV4dC5zdWJzdHJpbmcoYmVnaW5uaW5nV2hpdGVzcGFjZSwgdHJhaWxpbmdXaGl0ZXNwYWNlKTtcbiAgICAgICAgdGhpcy5zZWN0aW9uSW5kZXggPSB0aGlzLnNlY3Rpb25JbmRleC5zbGljZShiZWdpbm5pbmdXaGl0ZXNwYWNlLCB0cmFpbGluZ1doaXRlc3BhY2UpO1xuICAgIH1cblxuICAgIHN1YnN0cmluZyhzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFRhZ2dlZFN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN1YnN0cmluZyA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgc3Vic3RyaW5nLnRleHQgPSB0aGlzLnRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgICAgICBzdWJzdHJpbmcuc2VjdGlvbkluZGV4ID0gdGhpcy5zZWN0aW9uSW5kZXguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgIHN1YnN0cmluZy5zZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnM7XG4gICAgICAgIHJldHVybiBzdWJzdHJpbmc7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9XG5cbiAgICBnZXRNYXhTY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4LnJlZHVjZSgobWF4LCBpbmRleCkgPT4gTWF0aC5tYXgobWF4LCB0aGlzLnNlY3Rpb25zW2luZGV4XS5zY2FsZSksIDApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYnJlYWtMaW5lcyhpbnB1dDogVGFnZ2VkU3RyaW5nLCBsaW5lQnJlYWtQb2ludHM6IEFycmF5PG51bWJlcj4pOiBBcnJheTxUYWdnZWRTdHJpbmc+IHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIGNvbnN0IHRleHQgPSBpbnB1dC50ZXh0O1xuICAgIGxldCBzdGFydCA9IDA7XG4gICAgZm9yIChjb25zdCBsaW5lQnJlYWsgb2YgbGluZUJyZWFrUG9pbnRzKSB7XG4gICAgICAgIGxpbmVzLnB1c2goaW5wdXQuc3Vic3RyaW5nKHN0YXJ0LCBsaW5lQnJlYWspKTtcbiAgICAgICAgc3RhcnQgPSBsaW5lQnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgbGluZXMucHVzaChpbnB1dC5zdWJzdHJpbmcoc3RhcnQsIHRleHQubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcztcbn1cblxuZnVuY3Rpb24gc2hhcGVUZXh0KHRleHQ6IEZvcm1hdHRlZCxcbiAgICAgICAgICAgICAgICAgICBnbHlwaHM6IHtbc3RyaW5nXToge1tudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGb250U3RhY2s6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0QW5jaG9yOiBTeW1ib2xBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgdGV4dEp1c3RpZnk6IFRleHRKdXN0aWZ5LFxuICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgd3JpdGluZ01vZGU6IDEgfCAyLFxuICAgICAgICAgICAgICAgICAgIGFsbG93VmVydGljYWxQbGFjZW1lbnQ6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgc3ltYm9sUGxhY2VtZW50OiBzdHJpbmcpOiBTaGFwaW5nIHwgZmFsc2Uge1xuICAgIGNvbnN0IGxvZ2ljYWxJbnB1dCA9IFRhZ2dlZFN0cmluZy5mcm9tRmVhdHVyZSh0ZXh0LCBkZWZhdWx0Rm9udFN0YWNrKTtcblxuICAgIGlmICh3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwpIHtcbiAgICAgICAgbG9naWNhbElucHV0LnZlcnRpY2FsaXplUHVuY3R1YXRpb24oKTtcbiAgICB9XG5cbiAgICBsZXQgbGluZXM6IEFycmF5PFRhZ2dlZFN0cmluZz47XG5cbiAgICBjb25zdCB7cHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0LCBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9ID0gcnRsVGV4dFBsdWdpbjtcbiAgICBpZiAocHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0ICYmIGxvZ2ljYWxJbnB1dC5zZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gQmlkaSBkb2Vzbid0IGhhdmUgdG8gYmUgc3R5bGUtYXdhcmVcbiAgICAgICAgbGluZXMgPSBbXTtcbiAgICAgICAgY29uc3QgdW50YWdnZWRMaW5lcyA9XG4gICAgICAgICAgICBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQobG9naWNhbElucHV0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lTGluZUJyZWFrcyhsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaHMsIHN5bWJvbFBsYWNlbWVudCkpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdW50YWdnZWRMaW5lcykge1xuICAgICAgICAgICAgY29uc3QgdGFnZ2VkTGluZSA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUudGV4dCA9IGxpbmU7XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnNlY3Rpb25zID0gbG9naWNhbElucHV0LnNlY3Rpb25zO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGFnZ2VkTGluZS5zZWN0aW9uSW5kZXgucHVzaCgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVzLnB1c2godGFnZ2VkTGluZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dCkge1xuICAgICAgICAvLyBOZWVkIHZlcnNpb24gb2YgbWFwYm94LWdsLXJ0bC10ZXh0IHdpdGggc3R5bGUgc3VwcG9ydCBmb3IgY29tYmluaW5nIFJUTCB0ZXh0XG4gICAgICAgIC8vIHdpdGggZm9ybWF0dGluZ1xuICAgICAgICBsaW5lcyA9IFtdO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRMaW5lcyA9XG4gICAgICAgICAgICBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQobG9naWNhbElucHV0LnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbElucHV0LnNlY3Rpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVMaW5lQnJlYWtzKGxvZ2ljYWxJbnB1dCwgc3BhY2luZywgbWF4V2lkdGgsIGdseXBocywgc3ltYm9sUGxhY2VtZW50KSk7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBwcm9jZXNzZWRMaW5lcykge1xuICAgICAgICAgICAgY29uc3QgdGFnZ2VkTGluZSA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUudGV4dCA9IGxpbmVbMF07XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnNlY3Rpb25JbmRleCA9IGxpbmVbMV07XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnNlY3Rpb25zID0gbG9naWNhbElucHV0LnNlY3Rpb25zO1xuICAgICAgICAgICAgbGluZXMucHVzaCh0YWdnZWRMaW5lKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVzID0gYnJlYWtMaW5lcyhsb2dpY2FsSW5wdXQsIGRldGVybWluZUxpbmVCcmVha3MobG9naWNhbElucHV0LCBzcGFjaW5nLCBtYXhXaWR0aCwgZ2x5cGhzLCBzeW1ib2xQbGFjZW1lbnQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbmVkR2x5cGhzID0gW107XG4gICAgY29uc3Qgc2hhcGluZyA9IHtcbiAgICAgICAgcG9zaXRpb25lZEdseXBocyxcbiAgICAgICAgdGV4dDogbG9naWNhbElucHV0LnRvU3RyaW5nKCksXG4gICAgICAgIHRvcDogdHJhbnNsYXRlWzFdLFxuICAgICAgICBib3R0b206IHRyYW5zbGF0ZVsxXSxcbiAgICAgICAgbGVmdDogdHJhbnNsYXRlWzBdLFxuICAgICAgICByaWdodDogdHJhbnNsYXRlWzBdLFxuICAgICAgICB3cml0aW5nTW9kZSxcbiAgICAgICAgbGluZUNvdW50OiBsaW5lcy5sZW5ndGgsXG4gICAgICAgIHlPZmZzZXQ6IC0xNyAvLyB0aGUgeSBvZmZzZXQgKnNob3VsZCogYmUgcGFydCBvZiB0aGUgZm9udCBtZXRhZGF0YVxuICAgIH07XG5cbiAgICBzaGFwZUxpbmVzKHNoYXBpbmcsIGdseXBocywgbGluZXMsIGxpbmVIZWlnaHQsIHRleHRBbmNob3IsIHRleHRKdXN0aWZ5LCB3cml0aW5nTW9kZSwgc3BhY2luZywgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCk7XG4gICAgaWYgKCFwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHNoYXBpbmc7XG59XG5cbi8vIHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8zODBcbi8qIGVzbGludCBuby11c2VsZXNzLWNvbXB1dGVkLWtleTogMCAqL1xuXG5jb25zdCB3aGl0ZXNwYWNlOiB7W251bWJlcl06IGJvb2xlYW59ID0ge1xuICAgIFsweDA5XTogdHJ1ZSwgLy8gdGFiXG4gICAgWzB4MGFdOiB0cnVlLCAvLyBuZXdsaW5lXG4gICAgWzB4MGJdOiB0cnVlLCAvLyB2ZXJ0aWNhbCB0YWJcbiAgICBbMHgwY106IHRydWUsIC8vIGZvcm0gZmVlZFxuICAgIFsweDBkXTogdHJ1ZSwgLy8gY2FycmlhZ2UgcmV0dXJuXG4gICAgWzB4MjBdOiB0cnVlLCAvLyBzcGFjZVxufTtcblxuY29uc3QgYnJlYWthYmxlOiB7W251bWJlcl06IGJvb2xlYW59ID0ge1xuICAgIFsweDBhXTogICB0cnVlLCAvLyBuZXdsaW5lXG4gICAgWzB4MjBdOiAgIHRydWUsIC8vIHNwYWNlXG4gICAgWzB4MjZdOiAgIHRydWUsIC8vIGFtcGVyc2FuZFxuICAgIFsweDI4XTogICB0cnVlLCAvLyBsZWZ0IHBhcmVudGhlc2lzXG4gICAgWzB4MjldOiAgIHRydWUsIC8vIHJpZ2h0IHBhcmVudGhlc2lzXG4gICAgWzB4MmJdOiAgIHRydWUsIC8vIHBsdXMgc2lnblxuICAgIFsweDJkXTogICB0cnVlLCAvLyBoeXBoZW4tbWludXNcbiAgICBbMHgyZl06ICAgdHJ1ZSwgLy8gc29saWR1c1xuICAgIFsweGFkXTogICB0cnVlLCAvLyBzb2Z0IGh5cGhlblxuICAgIFsweGI3XTogICB0cnVlLCAvLyBtaWRkbGUgZG90XG4gICAgWzB4MjAwYl06IHRydWUsIC8vIHplcm8td2lkdGggc3BhY2VcbiAgICBbMHgyMDEwXTogdHJ1ZSwgLy8gaHlwaGVuXG4gICAgWzB4MjAxM106IHRydWUsIC8vIGVuIGRhc2hcbiAgICBbMHgyMDI3XTogdHJ1ZSAgLy8gaW50ZXJwdW5jdFxuICAgIC8vIE1hbnkgb3RoZXIgY2hhcmFjdGVycyBtYXkgYmUgcmVhc29uYWJsZSBicmVha3BvaW50c1xuICAgIC8vIENvbnNpZGVyIFwibmV1dHJhbCBvcmllbnRhdGlvblwiIGNoYXJhY3RlcnMgYXQgc2NyaXB0RGV0ZWN0aW9uLmNoYXJIYXNOZXV0cmFsVmVydGljYWxPcmllbnRhdGlvblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMzY1OFxufTtcblxuZnVuY3Rpb24gZGV0ZXJtaW5lQXZlcmFnZUxpbmVXaWR0aChsb2dpY2FsSW5wdXQ6IFRhZ2dlZFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0pIHtcbiAgICBsZXQgdG90YWxXaWR0aCA9IDA7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbG9naWNhbElucHV0Lmxlbmd0aCgpOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBsb2dpY2FsSW5wdXQuZ2V0U2VjdGlvbihpbmRleCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGdseXBoTWFwW3NlY3Rpb24uZm9udFN0YWNrXTtcbiAgICAgICAgY29uc3QgZ2x5cGggPSBwb3NpdGlvbnMgJiYgcG9zaXRpb25zW2xvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpbmRleCldO1xuICAgICAgICBpZiAoIWdseXBoKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIHRvdGFsV2lkdGggKz0gZ2x5cGgubWV0cmljcy5hZHZhbmNlICogc2VjdGlvbi5zY2FsZSArIHNwYWNpbmc7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZUNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHRvdGFsV2lkdGggLyBtYXhXaWR0aCkpO1xuICAgIHJldHVybiB0b3RhbFdpZHRoIC8gbGluZUNvdW50O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVCYWRuZXNzKGxpbmVXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5hbHR5OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdEJyZWFrOiBib29sZWFuKSB7XG4gICAgY29uc3QgcmFnZ2VkbmVzcyA9IE1hdGgucG93KGxpbmVXaWR0aCAtIHRhcmdldFdpZHRoLCAyKTtcbiAgICBpZiAoaXNMYXN0QnJlYWspIHtcbiAgICAgICAgLy8gRmF2b3IgZmluYWxzIGxpbmVzIHNob3J0ZXIgdGhhbiBhdmVyYWdlIG92ZXIgbG9uZ2VyIHRoYW4gYXZlcmFnZVxuICAgICAgICBpZiAobGluZVdpZHRoIDwgdGFyZ2V0V2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiByYWdnZWRuZXNzIC8gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByYWdnZWRuZXNzICogMjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByYWdnZWRuZXNzICsgTWF0aC5hYnMocGVuYWx0eSkgKiBwZW5hbHR5O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVQZW5hbHR5KGNvZGVQb2ludDogbnVtYmVyLCBuZXh0Q29kZVBvaW50OiBudW1iZXIsIHBlbmFsaXphYmxlSWRlb2dyYXBoaWNCcmVhazogYm9vbGVhbikge1xuICAgIGxldCBwZW5hbHR5ID0gMDtcbiAgICAvLyBGb3JjZSBicmVhayBvbiBuZXdsaW5lXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gMHgwYSkge1xuICAgICAgICBwZW5hbHR5IC09IDEwMDAwO1xuICAgIH1cbiAgICAvLyBQZW5hbGl6ZSBicmVha3MgYmV0d2VlbiBjaGFyYWN0ZXJzIHRoYXQgYWxsb3cgaWRlb2dyYXBoaWMgYnJlYWtpbmcgYmVjYXVzZVxuICAgIC8vIHRoZXkgYXJlIGxlc3MgcHJlZmVyYWJsZSB0aGFuIGJyZWFrcyBhdCBzcGFjZXMgKG9yIHplcm8gd2lkdGggc3BhY2VzKS5cbiAgICBpZiAocGVuYWxpemFibGVJZGVvZ3JhcGhpY0JyZWFrKSB7XG4gICAgICAgIHBlbmFsdHkgKz0gMTUwO1xuICAgIH1cblxuICAgIC8vIFBlbmFsaXplIG9wZW4gcGFyZW50aGVzaXMgYXQgZW5kIG9mIGxpbmVcbiAgICBpZiAoY29kZVBvaW50ID09PSAweDI4IHx8IGNvZGVQb2ludCA9PT0gMHhmZjA4KSB7XG4gICAgICAgIHBlbmFsdHkgKz0gNTA7XG4gICAgfVxuXG4gICAgLy8gUGVuYWxpemUgY2xvc2UgcGFyZW50aGVzaXMgYXQgYmVnaW5uaW5nIG9mIGxpbmVcbiAgICBpZiAobmV4dENvZGVQb2ludCA9PT0gMHgyOSB8fCBuZXh0Q29kZVBvaW50ID09PSAweGZmMDkpIHtcbiAgICAgICAgcGVuYWx0eSArPSA1MDtcbiAgICB9XG4gICAgcmV0dXJuIHBlbmFsdHk7XG59XG5cbnR5cGUgQnJlYWsgPSB7XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICB4OiBudW1iZXIsXG4gICAgcHJpb3JCcmVhazogP0JyZWFrLFxuICAgIGJhZG5lc3M6IG51bWJlclxufTtcblxuZnVuY3Rpb24gZXZhbHVhdGVCcmVhayhicmVha0luZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrWDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxCcmVha3M6IEFycmF5PEJyZWFrPixcbiAgICAgICAgICAgICAgICAgICAgICAgcGVuYWx0eTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3RCcmVhazogYm9vbGVhbik6IEJyZWFrIHtcbiAgICAvLyBXZSBjb3VsZCBza2lwIGV2YWx1YXRpbmcgYnJlYWtzIHdoZXJlIHRoZSBsaW5lIGxlbmd0aCAoYnJlYWtYIC0gcHJpb3JCcmVhay54KSA+IG1heFdpZHRoXG4gICAgLy8gIC4uLmJ1dCBpbiBmYWN0IHdlIGFsbG93IGxpbmVzIGxvbmdlciB0aGFuIG1heFdpZHRoIChpZiB0aGVyZSdzIG5vIGJyZWFrIHBvaW50cylcbiAgICAvLyAgLi4uYW5kIHdoZW4gdGFyZ2V0V2lkdGggYW5kIG1heFdpZHRoIGFyZSBjbG9zZSwgc3RyaWN0bHkgZW5mb3JjaW5nIG1heFdpZHRoIGNhbiBnaXZlXG4gICAgLy8gICAgIG1vcmUgbG9wc2lkZWQgcmVzdWx0cy5cblxuICAgIGxldCBiZXN0UHJpb3JCcmVhazogP0JyZWFrID0gbnVsbDtcbiAgICBsZXQgYmVzdEJyZWFrQmFkbmVzcyA9IGNhbGN1bGF0ZUJhZG5lc3MoYnJlYWtYLCB0YXJnZXRXaWR0aCwgcGVuYWx0eSwgaXNMYXN0QnJlYWspO1xuXG4gICAgZm9yIChjb25zdCBwb3RlbnRpYWxCcmVhayBvZiBwb3RlbnRpYWxCcmVha3MpIHtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoID0gYnJlYWtYIC0gcG90ZW50aWFsQnJlYWsueDtcbiAgICAgICAgY29uc3QgYnJlYWtCYWRuZXNzID1cbiAgICAgICAgICAgIGNhbGN1bGF0ZUJhZG5lc3MobGluZVdpZHRoLCB0YXJnZXRXaWR0aCwgcGVuYWx0eSwgaXNMYXN0QnJlYWspICsgcG90ZW50aWFsQnJlYWsuYmFkbmVzcztcbiAgICAgICAgaWYgKGJyZWFrQmFkbmVzcyA8PSBiZXN0QnJlYWtCYWRuZXNzKSB7XG4gICAgICAgICAgICBiZXN0UHJpb3JCcmVhayA9IHBvdGVudGlhbEJyZWFrO1xuICAgICAgICAgICAgYmVzdEJyZWFrQmFkbmVzcyA9IGJyZWFrQmFkbmVzcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGluZGV4OiBicmVha0luZGV4LFxuICAgICAgICB4OiBicmVha1gsXG4gICAgICAgIHByaW9yQnJlYWs6IGJlc3RQcmlvckJyZWFrLFxuICAgICAgICBiYWRuZXNzOiBiZXN0QnJlYWtCYWRuZXNzXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbGVhc3RCYWRCcmVha3MobGFzdExpbmVCcmVhazogP0JyZWFrKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgaWYgKCFsYXN0TGluZUJyZWFrKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGxlYXN0QmFkQnJlYWtzKGxhc3RMaW5lQnJlYWsucHJpb3JCcmVhaykuY29uY2F0KGxhc3RMaW5lQnJlYWsuaW5kZXgpO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVMaW5lQnJlYWtzKGxvZ2ljYWxJbnB1dDogVGFnZ2VkU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W3N0cmluZ106IHtbbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sUGxhY2VtZW50OiBzdHJpbmcpOiBBcnJheTxudW1iZXI+IHtcbiAgICBpZiAoc3ltYm9sUGxhY2VtZW50ICE9PSAncG9pbnQnKVxuICAgICAgICByZXR1cm4gW107XG5cbiAgICBpZiAoIWxvZ2ljYWxJbnB1dClcbiAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgcG90ZW50aWFsTGluZUJyZWFrcyA9IFtdO1xuICAgIGNvbnN0IHRhcmdldFdpZHRoID0gZGV0ZXJtaW5lQXZlcmFnZUxpbmVXaWR0aChsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaE1hcCk7XG5cbiAgICBjb25zdCBoYXNTZXJ2ZXJTdWdnZXN0ZWRCcmVha3BvaW50cyA9IGxvZ2ljYWxJbnB1dC50ZXh0LmluZGV4T2YoXCJcXHUyMDBiXCIpID49IDA7XG5cbiAgICBsZXQgY3VycmVudFggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2dpY2FsSW5wdXQubGVuZ3RoKCk7IGkrKykge1xuICAgICAgICBjb25zdCBzZWN0aW9uID0gbG9naWNhbElucHV0LmdldFNlY3Rpb24oaSk7XG4gICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGxvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gZ2x5cGhNYXBbc2VjdGlvbi5mb250U3RhY2tdO1xuICAgICAgICBjb25zdCBnbHlwaCA9IHBvc2l0aW9ucyAmJiBwb3NpdGlvbnNbY29kZVBvaW50XTtcblxuICAgICAgICBpZiAoZ2x5cGggJiYgIXdoaXRlc3BhY2VbY29kZVBvaW50XSlcbiAgICAgICAgICAgIGN1cnJlbnRYICs9IGdseXBoLm1ldHJpY3MuYWR2YW5jZSAqIHNlY3Rpb24uc2NhbGUgKyBzcGFjaW5nO1xuXG4gICAgICAgIC8vIElkZW9ncmFwaGljIGNoYXJhY3RlcnMsIHNwYWNlcywgYW5kIHdvcmQtYnJlYWtpbmcgcHVuY3R1YXRpb24gdGhhdCBvZnRlbiBhcHBlYXIgd2l0aG91dFxuICAgICAgICAvLyBzdXJyb3VuZGluZyBzcGFjZXMuXG4gICAgICAgIGlmICgoaSA8IGxvZ2ljYWxJbnB1dC5sZW5ndGgoKSAtIDEpKSB7XG4gICAgICAgICAgICBjb25zdCBpZGVvZ3JhcGhpY0JyZWFrID0gY2hhckFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcoY29kZVBvaW50KTtcbiAgICAgICAgICAgIGlmIChicmVha2FibGVbY29kZVBvaW50XSB8fCBpZGVvZ3JhcGhpY0JyZWFrKSB7XG5cbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlQnJlYWsoXG4gICAgICAgICAgICAgICAgICAgICAgICBpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUGVuYWx0eShjb2RlUG9pbnQsIGxvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpICsgMSksIGlkZW9ncmFwaGljQnJlYWsgJiYgaGFzU2VydmVyU3VnZ2VzdGVkQnJlYWtwb2ludHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsZWFzdEJhZEJyZWFrcyhcbiAgICAgICAgZXZhbHVhdGVCcmVhayhcbiAgICAgICAgICAgIGxvZ2ljYWxJbnB1dC5sZW5ndGgoKSxcbiAgICAgICAgICAgIGN1cnJlbnRYLFxuICAgICAgICAgICAgdGFyZ2V0V2lkdGgsXG4gICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRydWUpKTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5jaG9yQWxpZ25tZW50KGFuY2hvcjogU3ltYm9sQW5jaG9yKSB7XG4gICAgbGV0IGhvcml6b250YWxBbGlnbiA9IDAuNSwgdmVydGljYWxBbGlnbiA9IDAuNTtcblxuICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgaG9yaXpvbnRhbEFsaWduID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAndG9wLWxlZnQnOlxuICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgaG9yaXpvbnRhbEFsaWduID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICBjYXNlICdib3R0b20nOlxuICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICB2ZXJ0aWNhbEFsaWduID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgdmVydGljYWxBbGlnbiA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufTtcbn1cblxuZnVuY3Rpb24gc2hhcGVMaW5lcyhzaGFwaW5nOiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVzOiBBcnJheTxUYWdnZWRTdHJpbmc+LFxuICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbmNob3I6IFN5bWJvbEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgdGV4dEp1c3RpZnk6IFRleHRKdXN0aWZ5LFxuICAgICAgICAgICAgICAgICAgICB3cml0aW5nTW9kZTogMSB8IDIsXG4gICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbikge1xuXG4gICAgbGV0IHggPSAwO1xuICAgIGxldCB5ID0gc2hhcGluZy55T2Zmc2V0O1xuXG4gICAgbGV0IG1heExpbmVMZW5ndGggPSAwO1xuICAgIGNvbnN0IHBvc2l0aW9uZWRHbHlwaHMgPSBzaGFwaW5nLnBvc2l0aW9uZWRHbHlwaHM7XG5cbiAgICBjb25zdCBqdXN0aWZ5ID1cbiAgICAgICAgdGV4dEp1c3RpZnkgPT09ICdyaWdodCcgPyAxIDpcbiAgICAgICAgdGV4dEp1c3RpZnkgPT09ICdsZWZ0JyA/IDAgOiAwLjU7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgbGluZS50cmltKCk7XG5cbiAgICAgICAgY29uc3QgbGluZU1heFNjYWxlID0gbGluZS5nZXRNYXhTY2FsZSgpO1xuXG4gICAgICAgIGlmICghbGluZS5sZW5ndGgoKSkge1xuICAgICAgICAgICAgeSArPSBsaW5lSGVpZ2h0OyAvLyBTdGlsbCBuZWVkIGEgbGluZSBmZWVkIGFmdGVyIGVtcHR5IGxpbmVcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZVN0YXJ0SW5kZXggPSBwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCgpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBsaW5lLmdldFNlY3Rpb24oaSk7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSBsaW5lLmdldFNlY3Rpb25JbmRleChpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGxpbmUuZ2V0Q2hhckNvZGUoaSk7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBiYXNlbGluZSwgYnV0IHNpbmNlIHdlJ3JlIGxheWluZyBvdXRcbiAgICAgICAgICAgIC8vIGF0IDI0IHBvaW50cywgd2UgY2FuIGNhbGN1bGF0ZSBob3cgbXVjaCBpdCB3aWxsIG1vdmUgd2hlblxuICAgICAgICAgICAgLy8gd2Ugc2NhbGUgdXAgb3IgZG93bi5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VsaW5lT2Zmc2V0ID0gKGxpbmVNYXhTY2FsZSAtIHNlY3Rpb24uc2NhbGUpICogMjQ7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBnbHlwaE1hcFtzZWN0aW9uLmZvbnRTdGFja107XG4gICAgICAgICAgICBjb25zdCBnbHlwaCA9IHBvc2l0aW9ucyAmJiBwb3NpdGlvbnNbY29kZVBvaW50XTtcblxuICAgICAgICAgICAgaWYgKCFnbHlwaCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICh3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbCB8fFxuICAgICAgICAgICAgICAgIC8vIERvbid0IHZlcnRpY2FsaXplIGdseXBocyB0aGF0IGhhdmUgbm8gdXByaWdodCBvcmllbnRhdGlvbiBpZiB2ZXJ0aWNhbCBwbGFjZW1lbnQgaXMgZGlzYWJsZWQuXG4gICAgICAgICAgICAgICAgKCFhbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICFjaGFySGFzVXByaWdodFZlcnRpY2FsT3JpZW50YXRpb24oY29kZVBvaW50KSkgfHxcbiAgICAgICAgICAgICAgICAvLyBJZiB2ZXJ0aWNhbCBwbGFjZW1lbnQgaXMgZWJhYmxlZCwgZG9uJ3QgdmVydGljYWxpemUgZ2x5cGhzIHRoYXRcbiAgICAgICAgICAgICAgICAvLyBhcmUgZnJvbSBjb21wbGV4IHRleHQgbGF5b3V0IHNjcmlwdCwgb3Igd2hpdGVzcGFjZXMuXG4gICAgICAgICAgICAgICAgKGFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgKHdoaXRlc3BhY2VbY29kZVBvaW50XSB8fCBjaGFySW5Db21wbGV4U2hhcGluZ1NjcmlwdChjb2RlUG9pbnQpKSkpIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmVkR2x5cGhzLnB1c2goe2dseXBoOiBjb2RlUG9pbnQsIHgsIHk6IHkgKyBiYXNlbGluZU9mZnNldCwgdmVydGljYWw6IGZhbHNlLCBzY2FsZTogc2VjdGlvbi5zY2FsZSwgZm9udFN0YWNrOiBzZWN0aW9uLmZvbnRTdGFjaywgc2VjdGlvbkluZGV4fSk7XG4gICAgICAgICAgICAgICAgeCArPSBnbHlwaC5tZXRyaWNzLmFkdmFuY2UgKiBzZWN0aW9uLnNjYWxlICsgc3BhY2luZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25lZEdseXBocy5wdXNoKHtnbHlwaDogY29kZVBvaW50LCB4LCB5OiB5ICsgYmFzZWxpbmVPZmZzZXQsIHZlcnRpY2FsOiB0cnVlLCBzY2FsZTogc2VjdGlvbi5zY2FsZSwgZm9udFN0YWNrOiBzZWN0aW9uLmZvbnRTdGFjaywgc2VjdGlvbkluZGV4fSk7XG4gICAgICAgICAgICAgICAgeCArPSBPTkVfRU0gKiBzZWN0aW9uLnNjYWxlICsgc3BhY2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkganVzdGlmeSBpZiB3ZSBwbGFjZWQgYXQgbGVhc3Qgb25lIGdseXBoXG4gICAgICAgIGlmIChwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aCAhPT0gbGluZVN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSB4IC0gc3BhY2luZztcbiAgICAgICAgICAgIG1heExpbmVMZW5ndGggPSBNYXRoLm1heChsaW5lTGVuZ3RoLCBtYXhMaW5lTGVuZ3RoKTtcblxuICAgICAgICAgICAganVzdGlmeUxpbmUocG9zaXRpb25lZEdseXBocywgZ2x5cGhNYXAsIGxpbmVTdGFydEluZGV4LCBwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aCAtIDEsIGp1c3RpZnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgeCA9IDA7XG4gICAgICAgIHkgKz0gbGluZUhlaWdodCAqIGxpbmVNYXhTY2FsZTtcbiAgICB9XG5cbiAgICBjb25zdCB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufSA9IGdldEFuY2hvckFsaWdubWVudCh0ZXh0QW5jaG9yKTtcbiAgICBhbGlnbihwb3NpdGlvbmVkR2x5cGhzLCBqdXN0aWZ5LCBob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ24sIG1heExpbmVMZW5ndGgsIGxpbmVIZWlnaHQsIGxpbmVzLmxlbmd0aCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGJvdW5kaW5nIGJveFxuICAgIGNvbnN0IGhlaWdodCA9IHkgLSBzaGFwaW5nLnlPZmZzZXQ7XG5cbiAgICBzaGFwaW5nLnRvcCArPSAtdmVydGljYWxBbGlnbiAqIGhlaWdodDtcbiAgICBzaGFwaW5nLmJvdHRvbSA9IHNoYXBpbmcudG9wICsgaGVpZ2h0O1xuICAgIHNoYXBpbmcubGVmdCArPSAtaG9yaXpvbnRhbEFsaWduICogbWF4TGluZUxlbmd0aDtcbiAgICBzaGFwaW5nLnJpZ2h0ID0gc2hhcGluZy5sZWZ0ICsgbWF4TGluZUxlbmd0aDtcbn1cblxuLy8ganVzdGlmeSByaWdodCA9IDEsIGxlZnQgPSAwLCBjZW50ZXIgPSAwLjVcbmZ1bmN0aW9uIGp1c3RpZnlMaW5lKHBvc2l0aW9uZWRHbHlwaHM6IEFycmF5PFBvc2l0aW9uZWRHbHlwaD4sXG4gICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgICBzdGFydDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgZW5kOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5OiAxIHwgMCB8IDAuNSkge1xuICAgIGlmICghanVzdGlmeSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgbGFzdFBvc2l0aW9uZWRHbHlwaCA9IHBvc2l0aW9uZWRHbHlwaHNbZW5kXTtcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBnbHlwaE1hcFtsYXN0UG9zaXRpb25lZEdseXBoLmZvbnRTdGFja107XG4gICAgY29uc3QgZ2x5cGggPSBwb3NpdGlvbnMgJiYgcG9zaXRpb25zW2xhc3RQb3NpdGlvbmVkR2x5cGguZ2x5cGhdO1xuICAgIGlmIChnbHlwaCkge1xuICAgICAgICBjb25zdCBsYXN0QWR2YW5jZSA9IGdseXBoLm1ldHJpY3MuYWR2YW5jZSAqIGxhc3RQb3NpdGlvbmVkR2x5cGguc2NhbGU7XG4gICAgICAgIGNvbnN0IGxpbmVJbmRlbnQgPSAocG9zaXRpb25lZEdseXBoc1tlbmRdLnggKyBsYXN0QWR2YW5jZSkgKiBqdXN0aWZ5O1xuXG4gICAgICAgIGZvciAobGV0IGogPSBzdGFydDsgaiA8PSBlbmQ7IGorKykge1xuICAgICAgICAgICAgcG9zaXRpb25lZEdseXBoc1tqXS54IC09IGxpbmVJbmRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFsaWduKHBvc2l0aW9uZWRHbHlwaHM6IEFycmF5PFBvc2l0aW9uZWRHbHlwaD4sXG4gICAgICAgICAgICAgICBqdXN0aWZ5OiBudW1iZXIsXG4gICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ246IG51bWJlcixcbiAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IG51bWJlcixcbiAgICAgICAgICAgICAgIG1heExpbmVMZW5ndGg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVDb3VudDogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2hpZnRYID0gKGp1c3RpZnkgLSBob3Jpem9udGFsQWxpZ24pICogbWF4TGluZUxlbmd0aDtcbiAgICBjb25zdCBzaGlmdFkgPSAoLXZlcnRpY2FsQWxpZ24gKiBsaW5lQ291bnQgKyAwLjUpICogbGluZUhlaWdodDtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcG9zaXRpb25lZEdseXBocy5sZW5ndGg7IGorKykge1xuICAgICAgICBwb3NpdGlvbmVkR2x5cGhzW2pdLnggKz0gc2hpZnRYO1xuICAgICAgICBwb3NpdGlvbmVkR2x5cGhzW2pdLnkgKz0gc2hpZnRZO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgUG9zaXRpb25lZEljb24gPSB7XG4gICAgaW1hZ2U6IEltYWdlUG9zaXRpb24sXG4gICAgdG9wOiBudW1iZXIsXG4gICAgYm90dG9tOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIHJpZ2h0OiBudW1iZXJcbn07XG5cbmZ1bmN0aW9uIHNoYXBlSWNvbihpbWFnZTogSW1hZ2VQb3NpdGlvbiwgaWNvbk9mZnNldDogW251bWJlciwgbnVtYmVyXSwgaWNvbkFuY2hvcjogU3ltYm9sQW5jaG9yKTogUG9zaXRpb25lZEljb24ge1xuICAgIGNvbnN0IHtob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ259ID0gZ2V0QW5jaG9yQWxpZ25tZW50KGljb25BbmNob3IpO1xuICAgIGNvbnN0IGR4ID0gaWNvbk9mZnNldFswXTtcbiAgICBjb25zdCBkeSA9IGljb25PZmZzZXRbMV07XG4gICAgY29uc3QgeDEgPSBkeCAtIGltYWdlLmRpc3BsYXlTaXplWzBdICogaG9yaXpvbnRhbEFsaWduO1xuICAgIGNvbnN0IHgyID0geDEgKyBpbWFnZS5kaXNwbGF5U2l6ZVswXTtcbiAgICBjb25zdCB5MSA9IGR5IC0gaW1hZ2UuZGlzcGxheVNpemVbMV0gKiB2ZXJ0aWNhbEFsaWduO1xuICAgIGNvbnN0IHkyID0geTEgKyBpbWFnZS5kaXNwbGF5U2l6ZVsxXTtcbiAgICByZXR1cm4ge2ltYWdlLCB0b3A6IHkxLCBib3R0b206IHkyLCBsZWZ0OiB4MSwgcmlnaHQ6IHgyfTtcbn1cblxuZnVuY3Rpb24gZml0SWNvblRvVGV4dChzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiwgc2hhcGVkVGV4dDogU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgdGV4dEZpdDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciBdLFxuICAgICAgICAgICAgICAgICAgICAgICBpY29uT2Zmc2V0OiBbIG51bWJlciwgbnVtYmVyIF0sIGZvbnRTY2FsZTogbnVtYmVyKTogUG9zaXRpb25lZEljb24ge1xuICAgIGFzc2VydCh0ZXh0Rml0ICE9PSAnbm9uZScpO1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhZGRpbmcpICYmIHBhZGRpbmcubGVuZ3RoID09PSA0KTtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShpY29uT2Zmc2V0KSAmJiBpY29uT2Zmc2V0Lmxlbmd0aCA9PT0gMik7XG5cbiAgICBjb25zdCBpbWFnZSA9IHNoYXBlZEljb24uaW1hZ2U7XG5cbiAgICAvLyBXZSBkb24ndCByZXNwZWN0IHRoZSBpY29uLWFuY2hvciwgYmVjYXVzZSBpY29uLXRleHQtZml0IGlzIHNldC4gSW5zdGVhZCxcbiAgICAvLyB0aGUgaWNvbiB3aWxsIGJlIGNlbnRlcmVkIG9uIHRoZSB0ZXh0LCB0aGVuIHN0cmV0Y2hlZCBpbiB0aGUgZ2l2ZW5cbiAgICAvLyBkaW1lbnNpb25zLlxuXG4gICAgY29uc3QgdGV4dExlZnQgPSBzaGFwZWRUZXh0LmxlZnQgKiBmb250U2NhbGU7XG4gICAgY29uc3QgdGV4dFJpZ2h0ID0gc2hhcGVkVGV4dC5yaWdodCAqIGZvbnRTY2FsZTtcblxuICAgIGxldCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQ7XG4gICAgaWYgKHRleHRGaXQgPT09ICd3aWR0aCcgfHwgdGV4dEZpdCA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIC8vIFN0cmV0Y2hlZCBob3Jpem9udGFsbHkgdG8gdGhlIHRleHQgd2lkdGhcbiAgICAgICAgbGVmdCA9IGljb25PZmZzZXRbMF0gKyB0ZXh0TGVmdCAtIHBhZGRpbmdbM107XG4gICAgICAgIHJpZ2h0ID0gaWNvbk9mZnNldFswXSArIHRleHRSaWdodCArIHBhZGRpbmdbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2VudGVyZWQgb24gdGhlIHRleHRcbiAgICAgICAgbGVmdCA9IGljb25PZmZzZXRbMF0gKyAodGV4dExlZnQgKyB0ZXh0UmlnaHQgLSBpbWFnZS5kaXNwbGF5U2l6ZVswXSkgLyAyO1xuICAgICAgICByaWdodCA9IGxlZnQgKyBpbWFnZS5kaXNwbGF5U2l6ZVswXTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0VG9wID0gc2hhcGVkVGV4dC50b3AgKiBmb250U2NhbGU7XG4gICAgY29uc3QgdGV4dEJvdHRvbSA9IHNoYXBlZFRleHQuYm90dG9tICogZm9udFNjYWxlO1xuICAgIGlmICh0ZXh0Rml0ID09PSAnaGVpZ2h0JyB8fCB0ZXh0Rml0ID09PSAnYm90aCcpIHtcbiAgICAgICAgLy8gU3RyZXRjaGVkIHZlcnRpY2FsbHkgdG8gdGhlIHRleHQgaGVpZ2h0XG4gICAgICAgIHRvcCA9IGljb25PZmZzZXRbMV0gKyB0ZXh0VG9wIC0gcGFkZGluZ1swXTtcbiAgICAgICAgYm90dG9tID0gaWNvbk9mZnNldFsxXSArIHRleHRCb3R0b20gKyBwYWRkaW5nWzJdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENlbnRlcmVkIG9uIHRoZSB0ZXh0XG4gICAgICAgIHRvcCA9IGljb25PZmZzZXRbMV0gKyAodGV4dFRvcCArIHRleHRCb3R0b20gLSBpbWFnZS5kaXNwbGF5U2l6ZVsxXSkgLyAyO1xuICAgICAgICBib3R0b20gPSB0b3AgKyBpbWFnZS5kaXNwbGF5U2l6ZVsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2ltYWdlLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnR9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5jbGFzcyBBbmNob3IgZXh0ZW5kcyBQb2ludCB7XG4gICAgYW5nbGU6IGFueTtcbiAgICBzZWdtZW50OiBudW1iZXIgfCB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IoeDogbnVtYmVyLCB5OiBudW1iZXIsIGFuZ2xlOiBudW1iZXIsIHNlZ21lbnQ/OiBudW1iZXIpIHtcbiAgICAgICAgc3VwZXIoeCwgeSk7XG4gICAgICAgIHRoaXMuYW5nbGUgPSBhbmdsZTtcbiAgICAgICAgaWYgKHNlZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZWdtZW50ID0gc2VnbWVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFuY2hvcih0aGlzLngsIHRoaXMueSwgdGhpcy5hbmdsZSwgdGhpcy5zZWdtZW50KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdBbmNob3InLCBBbmNob3IpO1xuXG5leHBvcnQgZGVmYXVsdCBBbmNob3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBJbnRlcnBvbGF0ZSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHtjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5pbXBvcnQgdHlwZSB7UHJvcGVydHlWYWx1ZSwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtJbnRlcnBvbGF0aW9uVHlwZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlJztcblxuY29uc3QgU0laRV9QQUNLX0ZBQ1RPUiA9IDI1NjtcblxuZXhwb3J0IHtnZXRTaXplRGF0YSwgZXZhbHVhdGVTaXplRm9yRmVhdHVyZSwgZXZhbHVhdGVTaXplRm9yWm9vbSwgU0laRV9QQUNLX0ZBQ1RPUn07XG5cbmV4cG9ydCB0eXBlIFNpemVEYXRhID0ge1xuICAgIGtpbmQ6ICdjb25zdGFudCcsXG4gICAgbGF5b3V0U2l6ZTogbnVtYmVyXG59IHwge1xuICAgIGtpbmQ6ICdzb3VyY2UnXG59IHwge1xuICAgIGtpbmQ6ICdjYW1lcmEnLFxuICAgIG1pblpvb206IG51bWJlcixcbiAgICBtYXhab29tOiBudW1iZXIsXG4gICAgbWluU2l6ZTogbnVtYmVyLFxuICAgIG1heFNpemU6IG51bWJlcixcbiAgICBpbnRlcnBvbGF0aW9uVHlwZTogP0ludGVycG9sYXRpb25UeXBlXG59IHwge1xuICAgIGtpbmQ6ICdjb21wb3NpdGUnLFxuICAgIG1pblpvb206IG51bWJlcixcbiAgICBtYXhab29tOiBudW1iZXIsXG4gICAgaW50ZXJwb2xhdGlvblR5cGU6ID9JbnRlcnBvbGF0aW9uVHlwZVxufTtcblxuLy8gRm9yIHt0ZXh0LGljb259LXNpemUsIGdldCB0aGUgYnVja2V0LWxldmVsIGRhdGEgdGhhdCB3aWxsIGJlIG5lZWRlZCBieVxuLy8gdGhlIHBhaW50ZXIgdG8gc2V0IHN5bWJvbC1zaXplLXJlbGF0ZWQgdW5pZm9ybXNcbmZ1bmN0aW9uIGdldFNpemVEYXRhKHRpbGVab29tOiBudW1iZXIsIHZhbHVlOiBQcm9wZXJ0eVZhbHVlPG51bWJlciwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4+KTogU2l6ZURhdGEge1xuICAgIGNvbnN0IHtleHByZXNzaW9ufSA9IHZhbHVlO1xuXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICBjb25zdCBsYXlvdXRTaXplID0gZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGlsZVpvb20gKyAxKSk7XG4gICAgICAgIHJldHVybiB7a2luZDogJ2NvbnN0YW50JywgbGF5b3V0U2l6ZX07XG5cbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgcmV0dXJuIHtraW5kOiAnc291cmNlJ307XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7em9vbVN0b3BzLCBpbnRlcnBvbGF0aW9uVHlwZX0gPSBleHByZXNzaW9uO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBjb3ZlcmluZyB6b29tIHN0b3BzIGZvciB6b29tLWRlcGVuZGVudCB2YWx1ZXNcbiAgICAgICAgbGV0IGxvd2VyID0gMDtcbiAgICAgICAgd2hpbGUgKGxvd2VyIDwgem9vbVN0b3BzLmxlbmd0aCAmJiB6b29tU3RvcHNbbG93ZXJdIDw9IHRpbGVab29tKSBsb3dlcisrO1xuICAgICAgICBsb3dlciA9IE1hdGgubWF4KDAsIGxvd2VyIC0gMSk7XG4gICAgICAgIGxldCB1cHBlciA9IGxvd2VyO1xuICAgICAgICB3aGlsZSAodXBwZXIgPCB6b29tU3RvcHMubGVuZ3RoICYmIHpvb21TdG9wc1t1cHBlcl0gPCB0aWxlWm9vbSArIDEpIHVwcGVyKys7XG4gICAgICAgIHVwcGVyID0gTWF0aC5taW4oem9vbVN0b3BzLmxlbmd0aCAtIDEsIHVwcGVyKTtcblxuICAgICAgICBjb25zdCBtaW5ab29tID0gem9vbVN0b3BzW2xvd2VyXTtcbiAgICAgICAgY29uc3QgbWF4Wm9vbSA9IHpvb21TdG9wc1t1cHBlcl07XG5cbiAgICAgICAgLy8gV2UnZCBsaWtlIHRvIGJlIGFibGUgdG8gdXNlIENhbWVyYUV4cHJlc3Npb24gb3IgQ29tcG9zaXRlRXhwcmVzc2lvbiBpbiB0aGVzZVxuICAgICAgICAvLyByZXR1cm4gdHlwZXMgcmF0aGVyIHRoYW4gRXhwcmVzc2lvblNwZWNpZmljYXRpb24sIGJ1dCB0aGUgZm9ybWVyIGFyZSBub3RcbiAgICAgICAgLy8gdHJhbnNmZXJyYWJsZSBhY3Jvc3MgV2ViIFdvcmtlciBib3VuZGFyaWVzLlxuICAgICAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHtraW5kOiAnY29tcG9zaXRlJywgbWluWm9vbSwgbWF4Wm9vbSwgaW50ZXJwb2xhdGlvblR5cGV9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm9yIGNhbWVyYSBmdW5jdGlvbnMsIGFsc28gc2F2ZSBvZmYgdGhlIGZ1bmN0aW9uIHZhbHVlc1xuICAgICAgICAvLyBldmFsdWF0ZWQgYXQgdGhlIGNvdmVyaW5nIHpvb20gbGV2ZWxzXG4gICAgICAgIGNvbnN0IG1pblNpemUgPSBleHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtaW5ab29tKSk7XG4gICAgICAgIGNvbnN0IG1heFNpemUgPSBleHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtYXhab29tKSk7XG5cbiAgICAgICAgcmV0dXJuIHtraW5kOiAnY2FtZXJhJywgbWluWm9vbSwgbWF4Wm9vbSwgbWluU2l6ZSwgbWF4U2l6ZSwgaW50ZXJwb2xhdGlvblR5cGV9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVTaXplRm9yRmVhdHVyZShzaXplRGF0YTogU2l6ZURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1U2l6ZSwgdVNpemVUfTogeyB1U2l6ZTogbnVtYmVyLCB1U2l6ZVQ6IG51bWJlciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bG93ZXJTaXplLCB1cHBlclNpemV9OiB7IGxvd2VyU2l6ZTogbnVtYmVyLCB1cHBlclNpemU6IG51bWJlcn0pIHtcbiAgICBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgcmV0dXJuIGxvd2VyU2l6ZSAvIFNJWkVfUEFDS19GQUNUT1I7XG4gICAgfSBlbHNlIGlmIChzaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGUobG93ZXJTaXplIC8gU0laRV9QQUNLX0ZBQ1RPUiwgdXBwZXJTaXplIC8gU0laRV9QQUNLX0ZBQ1RPUiwgdVNpemVUKTtcbiAgICB9XG4gICAgcmV0dXJuIHVTaXplO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZVNpemVGb3Jab29tKHNpemVEYXRhOiBTaXplRGF0YSwgem9vbTogbnVtYmVyKSB7XG4gICAgbGV0IHVTaXplVCA9IDA7XG4gICAgbGV0IHVTaXplID0gMDtcblxuICAgIGlmIChzaXplRGF0YS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgIHVTaXplID0gc2l6ZURhdGEubGF5b3V0U2l6ZTtcblxuICAgIH0gZWxzZSBpZiAoc2l6ZURhdGEua2luZCAhPT0gJ3NvdXJjZScpIHtcbiAgICAgICAgY29uc3Qge2ludGVycG9sYXRpb25UeXBlLCBtaW5ab29tLCBtYXhab29tfSA9IHNpemVEYXRhO1xuXG4gICAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGNvdWxkIGdldCB0aGUgZXhhY3QgdmFsdWUgb2YgdGhlIGNhbWVyYSBmdW5jdGlvblxuICAgICAgICAvLyBhdCB6ID0gdHIuem9vbSwgd2UgaW50ZW50aW9uYWxseSBkbyBub3Q6IGluc3RlYWQsIHdlIGludGVycG9sYXRlXG4gICAgICAgIC8vIGJldHdlZW4gdGhlIGNhbWVyYSBmdW5jdGlvbiB2YWx1ZXMgYXQgYSBwYWlyIG9mIHpvb20gc3RvcHMgY292ZXJpbmdcbiAgICAgICAgLy8gW3RpbGVab29tLCB0aWxlWm9vbSArIDFdIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGlzXG4gICAgICAgIC8vIHJlc3RyaWN0aW9uIG9uIGNvbXBvc2l0ZSBmdW5jdGlvbnNcbiAgICAgICAgY29uc3QgdCA9ICFpbnRlcnBvbGF0aW9uVHlwZSA/IDAgOiBjbGFtcChcbiAgICAgICAgICAgIEludGVycG9sYXRlLmludGVycG9sYXRpb25GYWN0b3IoaW50ZXJwb2xhdGlvblR5cGUsIHpvb20sIG1pblpvb20sIG1heFpvb20pLCAwLCAxKTtcblxuICAgICAgICBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ2NhbWVyYScpIHtcbiAgICAgICAgICAgIHVTaXplID0gaW50ZXJwb2xhdGUoc2l6ZURhdGEubWluU2l6ZSwgc2l6ZURhdGEubWF4U2l6ZSwgdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1U2l6ZVQgPSB0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHt1U2l6ZVQsIHVTaXplfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7c3ltYm9sTGF5b3V0QXR0cmlidXRlcyxcbiAgICBjb2xsaXNpb25WZXJ0ZXhBdHRyaWJ1dGVzLFxuICAgIGNvbGxpc2lvbkJveExheW91dCxcbiAgICBjb2xsaXNpb25DaXJjbGVMYXlvdXQsXG4gICAgZHluYW1pY0xheW91dEF0dHJpYnV0ZXNcbn0gZnJvbSAnLi9zeW1ib2xfYXR0cmlidXRlcyc7XG5cbmltcG9ydCB7U3ltYm9sTGF5b3V0QXJyYXksXG4gICAgU3ltYm9sRHluYW1pY0xheW91dEFycmF5LFxuICAgIFN5bWJvbE9wYWNpdHlBcnJheSxcbiAgICBDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSxcbiAgICBDb2xsaXNpb25DaXJjbGVMYXlvdXRBcnJheSxcbiAgICBDb2xsaXNpb25WZXJ0ZXhBcnJheSxcbiAgICBQbGFjZWRTeW1ib2xBcnJheSxcbiAgICBTeW1ib2xJbnN0YW5jZUFycmF5LFxuICAgIEdseXBoT2Zmc2V0QXJyYXksXG4gICAgU3ltYm9sTGluZVZlcnRleEFycmF5XG59IGZyb20gJy4uL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXksIExpbmVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0cmFuc2Zvcm1UZXh0IGZyb20gJy4uLy4uL3N5bWJvbC90cmFuc2Zvcm1fdGV4dCc7XG5pbXBvcnQgbWVyZ2VMaW5lcyBmcm9tICcuLi8uLi9zeW1ib2wvbWVyZ2VsaW5lcyc7XG5pbXBvcnQge2FsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGV9IGZyb20gJy4uLy4uL3V0aWwvc2NyaXB0X2RldGVjdGlvbic7XG5pbXBvcnQge1dyaXRpbmdNb2RlfSBmcm9tICcuLi8uLi9zeW1ib2wvc2hhcGluZyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IG12dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmNvbnN0IHZlY3RvclRpbGVGZWF0dXJlVHlwZXMgPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXM7XG5pbXBvcnQge3ZlcnRpY2FsaXplZENoYXJhY3Rlck1hcH0gZnJvbSAnLi4vLi4vdXRpbC92ZXJ0aWNhbGl6ZV9wdW5jdHVhdGlvbic7XG5pbXBvcnQgQW5jaG9yIGZyb20gJy4uLy4uL3N5bWJvbC9hbmNob3InO1xuaW1wb3J0IHtnZXRTaXplRGF0YX0gZnJvbSAnLi4vLi4vc3ltYm9sL3N5bWJvbF9zaXplJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgQnVja2V0LFxuICAgIEJ1Y2tldFBhcmFtZXRlcnMsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7Q29sbGlzaW9uQm94QXJyYXksIENvbGxpc2lvbkJveCwgU3ltYm9sSW5zdGFuY2V9IGZyb20gJy4uL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIHtTdHJ1Y3RBcnJheSwgU3RydWN0QXJyYXlNZW1iZXJ9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcbmltcG9ydCBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtTeW1ib2xRdWFkfSBmcm9tICcuLi8uLi9zeW1ib2wvcXVhZHMnO1xuaW1wb3J0IHR5cGUge1NpemVEYXRhfSBmcm9tICcuLi8uLi9zeW1ib2wvc3ltYm9sX3NpemUnO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmV4cG9ydCB0eXBlIFNpbmdsZUNvbGxpc2lvbkJveCA9IHtcbiAgICB4MTogbnVtYmVyO1xuICAgIHkxOiBudW1iZXI7XG4gICAgeDI6IG51bWJlcjtcbiAgICB5MjogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50WDogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50WTogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQ29sbGlzaW9uQXJyYXlzID0ge1xuICAgIHRleHRCb3g/OiBTaW5nbGVDb2xsaXNpb25Cb3g7XG4gICAgdmVydGljYWxUZXh0Qm94PzogU2luZ2xlQ29sbGlzaW9uQm94O1xuICAgIGljb25Cb3g/OiBTaW5nbGVDb2xsaXNpb25Cb3g7XG4gICAgdmVydGljYWxJY29uQm94PzogU2luZ2xlQ29sbGlzaW9uQm94O1xuICAgIHRleHRDaXJjbGVzPzogQXJyYXk8bnVtYmVyPjtcbiAgICB0ZXh0RmVhdHVyZUluZGV4PzogbnVtYmVyO1xuICAgIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleD86IG51bWJlcjtcbiAgICBpY29uRmVhdHVyZUluZGV4PzogbnVtYmVyO1xuICAgIHZlcnRpY2FsSWNvbkZlYXR1cmVJbmRleD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFN5bWJvbEZlYXR1cmUgPSB7fFxuICAgIHNvcnRLZXk6IG51bWJlciB8IHZvaWQsXG4gICAgdGV4dDogRm9ybWF0dGVkIHwgdm9pZCxcbiAgICBpY29uOiBSZXNvbHZlZEltYWdlIHwgdm9pZCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICBwcm9wZXJ0aWVzOiBPYmplY3QsXG4gICAgdHlwZTogJ1BvaW50JyB8ICdMaW5lU3RyaW5nJyB8ICdQb2x5Z29uJyxcbiAgICBpZD86IGFueVxufH07XG5cbi8vIE9wYWNpdHkgYXJyYXlzIGFyZSBmcmVxdWVudGx5IHVwZGF0ZWQgYnV0IGRvbid0IGNvbnRhaW4gYSBsb3Qgb2YgaW5mb3JtYXRpb24sIHNvIHdlIHBhY2sgdGhlbVxuLy8gdGlnaHQuIEVhY2ggVWludDMyIGlzIGFjdHVhbGx5IGZvdXIgZHVwbGljYXRlIFVpbnQ4cyBmb3IgdGhlIGZvdXIgY29ybmVycyBvZiBhIGdseXBoXG4vLyA3IGJpdHMgYXJlIGZvciB0aGUgY3VycmVudCBvcGFjaXR5LCBhbmQgdGhlIGxvd2VzdCBiaXQgaXMgdGhlIHRhcmdldCBvcGFjaXR5XG5cbi8vIGFjdHVhbGx5IGRlZmluZWQgaW4gc3ltYm9sX2F0dHJpYnV0ZXMuanNcbi8vIGNvbnN0IHBsYWNlbWVudE9wYWNpdHlBdHRyaWJ1dGVzID0gW1xuLy8gICAgIHsgbmFtZTogJ2FfZmFkZV9vcGFjaXR5JywgY29tcG9uZW50czogMSwgdHlwZTogJ1VpbnQzMicgfVxuLy8gXTtcbmNvbnN0IHNoYWRlck9wYWNpdHlBdHRyaWJ1dGVzID0gW1xuICAgIHtuYW1lOiAnYV9mYWRlX29wYWNpdHknLCBjb21wb25lbnRzOiAxLCB0eXBlOiAnVWludDgnLCBvZmZzZXQ6IDB9XG5dO1xuXG5mdW5jdGlvbiBhZGRWZXJ0ZXgoYXJyYXksIGFuY2hvclgsIGFuY2hvclksIG94LCBveSwgdHgsIHR5LCBzaXplVmVydGV4KSB7XG4gICAgYXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgIC8vIGFfcG9zX29mZnNldFxuICAgICAgICBhbmNob3JYLFxuICAgICAgICBhbmNob3JZLFxuICAgICAgICBNYXRoLnJvdW5kKG94ICogMzIpLFxuICAgICAgICBNYXRoLnJvdW5kKG95ICogMzIpLFxuXG4gICAgICAgIC8vIGFfZGF0YVxuICAgICAgICB0eCwgLy8geCBjb29yZGluYXRlIG9mIHN5bWJvbCBvbiBnbHlwaCBhdGxhcyB0ZXh0dXJlXG4gICAgICAgIHR5LCAvLyB5IGNvb3JkaW5hdGUgb2Ygc3ltYm9sIG9uIGdseXBoIGF0bGFzIHRleHR1cmVcbiAgICAgICAgc2l6ZVZlcnRleCA/IHNpemVWZXJ0ZXhbMF0gOiAwLFxuICAgICAgICBzaXplVmVydGV4ID8gc2l6ZVZlcnRleFsxXSA6IDBcbiAgICApO1xufVxuXG5mdW5jdGlvbiBhZGREeW5hbWljQXR0cmlidXRlcyhkeW5hbWljTGF5b3V0VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5LCBwOiBQb2ludCwgYW5nbGU6IG51bWJlcikge1xuICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwLngsIHAueSwgYW5nbGUpO1xuICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwLngsIHAueSwgYW5nbGUpO1xuICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwLngsIHAueSwgYW5nbGUpO1xuICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwLngsIHAueSwgYW5nbGUpO1xufVxuXG5leHBvcnQgY2xhc3MgU3ltYm9sQnVmZmVycyB7XG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IFN5bWJvbExheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIHByb2dyYW1Db25maWd1cmF0aW9uczogUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQ8U3ltYm9sU3R5bGVMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG5cbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXk6IFN5bWJvbER5bmFtaWNMYXlvdXRBcnJheTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBvcGFjaXR5VmVydGV4QXJyYXk6IFN5bWJvbE9wYWNpdHlBcnJheTtcbiAgICBvcGFjaXR5VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheTogQ29sbGlzaW9uVmVydGV4QXJyYXk7XG4gICAgY29sbGlzaW9uVmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBwbGFjZWRTeW1ib2xBcnJheTogUGxhY2VkU3ltYm9sQXJyYXk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PFN5bWJvbFN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgU3ltYm9sTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IHByb2dyYW1Db25maWd1cmF0aW9ucztcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5ID0gbmV3IFN5bWJvbER5bmFtaWNMYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSA9IG5ldyBTeW1ib2xPcGFjaXR5QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wbGFjZWRTeW1ib2xBcnJheSA9IG5ldyBQbGFjZWRTeW1ib2xBcnJheSgpO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0LCBkeW5hbWljSW5kZXhCdWZmZXI6IGJvb2xlYW4sIHVwbG9hZD86IGJvb2xlYW4sIHVwZGF0ZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHVwbG9hZCkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCBzeW1ib2xMYXlvdXRBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5LCBkeW5hbWljSW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGR5bmFtaWNMYXlvdXRBdHRyaWJ1dGVzLm1lbWJlcnMsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5vcGFjaXR5VmVydGV4QXJyYXksIHNoYWRlck9wYWNpdHlBdHRyaWJ1dGVzLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBoYWNrIHNvIHRoYXQgd2UgY2FuIHdyaXRlIHRvIG9wYWNpdHlWZXJ0ZXhBcnJheSB3aXRoIHVpbnQzMnNcbiAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBzaGFkZXJzIHJlYWQgdWludDhzXG4gICAgICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuaXRlbVNpemUgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGxvYWQgfHwgdXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignU3ltYm9sQnVmZmVycycsIFN5bWJvbEJ1ZmZlcnMpO1xuXG5jbGFzcyBDb2xsaXNpb25CdWZmZXJzIHtcbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXk7XG4gICAgbGF5b3V0QXR0cmlidXRlczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG5cbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheTogQ29sbGlzaW9uVmVydGV4QXJyYXk7XG4gICAgY29sbGlzaW9uVmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihMYXlvdXRBcnJheTogQ2xhc3M8U3RydWN0QXJyYXk+LFxuICAgICAgICAgICAgICAgIGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPixcbiAgICAgICAgICAgICAgICBJbmRleEFycmF5OiBDbGFzczxUcmlhbmdsZUluZGV4QXJyYXkgfCBMaW5lSW5kZXhBcnJheT4pIHtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSA9IG5ldyBMYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLmxheW91dEF0dHJpYnV0ZXMgPSBsYXlvdXRBdHRyaWJ1dGVzO1xuICAgICAgICB0aGlzLmluZGV4QXJyYXkgPSBuZXcgSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzID0gbmV3IFNlZ21lbnRWZWN0b3IoKTtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheSA9IG5ldyBDb2xsaXNpb25WZXJ0ZXhBcnJheSgpO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5sYXlvdXRBdHRyaWJ1dGVzKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBdHRyaWJ1dGVzLm1lbWJlcnMsIHRydWUpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdDb2xsaXNpb25CdWZmZXJzJywgQ29sbGlzaW9uQnVmZmVycyk7XG5cbi8qKlxuICogVW5saWtlIG90aGVyIGJ1Y2tldHMsIHdoaWNoIHNpbXBseSBpbXBsZW1lbnQgI2FkZEZlYXR1cmUgd2l0aCB0eXBlLXNwZWNpZmljXG4gKiBsb2dpYyBmb3IgKGVzc2VudGlhbGx5KSB0cmlhbmd1bGF0aW5nIGZlYXR1cmUgZ2VvbWV0cmllcywgU3ltYm9sQnVja2V0XG4gKiByZXF1aXJlcyBzcGVjaWFsaXplZCBiZWhhdmlvcjpcbiAqXG4gKiAxLiBXb3JrZXJUaWxlI3BhcnNlKCksIHRoZSBsb2dpY2FsIG93bmVyIG9mIHRoZSBidWNrZXQgY3JlYXRpb24gcHJvY2VzcyxcbiAqICAgIGNhbGxzIFN5bWJvbEJ1Y2tldCNwb3B1bGF0ZSgpLCB3aGljaCByZXNvbHZlcyB0ZXh0IGFuZCBpY29uIHRva2VucyBvblxuICogICAgZWFjaCBmZWF0dXJlLCBhZGRzIGVhY2ggZ2x5cGhzIGFuZCBzeW1ib2xzIG5lZWRlZCB0byB0aGUgcGFzc2VkLWluXG4gKiAgICBjb2xsZWN0aW9ucyBvcHRpb25zLmdseXBoRGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zLmljb25EZXBlbmRlbmNpZXMsIGFuZFxuICogICAgc3RvcmVzIHRoZSBmZWF0dXJlIGRhdGEgZm9yIHVzZSBpbiBzdWJzZXF1ZW50IHN0ZXAgKHRoaXMuZmVhdHVyZXMpLlxuICpcbiAqIDIuIFdvcmtlclRpbGUgYXN5bmNocm9ub3VzbHkgcmVxdWVzdHMgZnJvbSB0aGUgbWFpbiB0aHJlYWQgYWxsIG9mIHRoZSBnbHlwaHNcbiAqICAgIGFuZCBpY29ucyBuZWVkZWQgKGJ5IHRoaXMgYnVja2V0IGFuZCBhbnkgb3RoZXJzKS4gV2hlbiBnbHlwaHMgYW5kIGljb25zXG4gKiAgICBoYXZlIGJlZW4gcmVjZWl2ZWQsIHRoZSBXb3JrZXJUaWxlIGNyZWF0ZXMgYSBDb2xsaXNpb25JbmRleCBhbmQgaW52b2tlczpcbiAqXG4gKiAzLiBwZXJmb3JtU3ltYm9sTGF5b3V0KGJ1Y2tldCwgc3RhY2tzLCBpY29ucykgcGVyZm9ybSB0ZXh0cyBzaGFwaW5nIGFuZFxuICogICAgbGF5b3V0IG9uIGEgU3ltYm9sIEJ1Y2tldC4gVGhpcyBzdGVwIHBvcHVsYXRlczpcbiAqICAgICAgYHRoaXMuc3ltYm9sSW5zdGFuY2VzYDogbWV0YWRhdGEgb24gZ2VuZXJhdGVkIHN5bWJvbHNcbiAqICAgICAgYHRoaXMuY29sbGlzaW9uQm94QXJyYXlgOiBjb2xsaXNpb24gZGF0YSBmb3IgdXNlIGJ5IGZvcmVncm91bmRcbiAqICAgICAgYHRoaXMudGV4dGA6IFN5bWJvbEJ1ZmZlcnMgZm9yIHRleHQgc3ltYm9sc1xuICogICAgICBgdGhpcy5pY29uc2A6IFN5bWJvbEJ1ZmZlcnMgZm9yIGljb25zXG4gKiAgICAgIGB0aGlzLmljb25Db2xsaXNpb25Cb3hgOiBEZWJ1ZyBTeW1ib2xCdWZmZXJzIGZvciBpY29uIGNvbGxpc2lvbiBib3hlc1xuICogICAgICBgdGhpcy50ZXh0Q29sbGlzaW9uQm94YDogRGVidWcgU3ltYm9sQnVmZmVycyBmb3IgdGV4dCBjb2xsaXNpb24gYm94ZXNcbiAqICAgICAgYHRoaXMuaWNvbkNvbGxpc2lvbkNpcmNsZWA6IERlYnVnIFN5bWJvbEJ1ZmZlcnMgZm9yIGljb24gY29sbGlzaW9uIGNpcmNsZXNcbiAqICAgICAgYHRoaXMudGV4dENvbGxpc2lvbkNpcmNsZWA6IERlYnVnIFN5bWJvbEJ1ZmZlcnMgZm9yIHRleHQgY29sbGlzaW9uIGNpcmNsZXNcbiAqICAgIFRoZSByZXN1bHRzIGFyZSBzZW50IHRvIHRoZSBmb3JlZ3JvdW5kIGZvciByZW5kZXJpbmdcbiAqXG4gKiA0LiBwZXJmb3JtU3ltYm9sUGxhY2VtZW50KGJ1Y2tldCwgY29sbGlzaW9uSW5kZXgpIGlzIHJ1biBvbiB0aGUgZm9yZWdyb3VuZCxcbiAqICAgIGFuZCB1c2VzIHRoZSBDb2xsaXNpb25JbmRleCBhbG9uZyB3aXRoIGN1cnJlbnQgY2FtZXJhIHNldHRpbmdzIHRvIGRldGVybWluZVxuICogICAgd2hpY2ggc3ltYm9scyBjYW4gYWN0dWFsbHkgc2hvdyBvbiB0aGUgbWFwLiBDb2xsaWRlZCBzeW1ib2xzIGFyZSBoaWRkZW5cbiAqICAgIHVzaW5nIGEgZHluYW1pYyBcIk9wYWNpdHlWZXJ0ZXhBcnJheVwiLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN5bWJvbEJ1Y2tldCBpbXBsZW1lbnRzIEJ1Y2tldCB7XG4gICAgc3RhdGljIE1BWF9HTFlQSFM6IG51bWJlcjtcbiAgICBzdGF0aWMgYWRkRHluYW1pY0F0dHJpYnV0ZXM6IHR5cGVvZiBhZGREeW5hbWljQXR0cmlidXRlcztcblxuICAgIGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheTtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBsYXllcnM6IEFycmF5PFN5bWJvbFN0eWxlTGF5ZXI+O1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxTeW1ib2xTdHlsZUxheWVyPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBzZGZJY29uczogYm9vbGVhbjtcbiAgICBpY29uc05lZWRMaW5lYXI6IGJvb2xlYW47XG4gICAgYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyO1xuICAgIGp1c3RSZWxvYWRlZDogYm9vbGVhbjtcbiAgICBoYXNQYXR0ZXJuOiBib29sZWFuO1xuXG4gICAgdGV4dFNpemVEYXRhOiBTaXplRGF0YTtcbiAgICBpY29uU2l6ZURhdGE6IFNpemVEYXRhO1xuXG4gICAgZ2x5cGhPZmZzZXRBcnJheTogR2x5cGhPZmZzZXRBcnJheTtcbiAgICBsaW5lVmVydGV4QXJyYXk6IFN5bWJvbExpbmVWZXJ0ZXhBcnJheTtcbiAgICBmZWF0dXJlczogQXJyYXk8U3ltYm9sRmVhdHVyZT47XG4gICAgc3ltYm9sSW5zdGFuY2VzOiBTeW1ib2xJbnN0YW5jZUFycmF5O1xuICAgIGNvbGxpc2lvbkFycmF5czogQXJyYXk8Q29sbGlzaW9uQXJyYXlzPjtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgdGlsZVBpeGVsUmF0aW86IG51bWJlcjtcbiAgICBjb21wYXJlVGV4dDoge1tzdHJpbmddOiBBcnJheTxQb2ludD59O1xuICAgIGZhZGVTdGFydFRpbWU6IG51bWJlcjtcbiAgICBzb3J0RmVhdHVyZXNCeUtleTogYm9vbGVhbjtcbiAgICBzb3J0RmVhdHVyZXNCeVk6IGJvb2xlYW47XG4gICAgc29ydGVkQW5nbGU6IG51bWJlcjtcbiAgICBmZWF0dXJlU29ydE9yZGVyOiBBcnJheTxudW1iZXI+O1xuXG4gICAgdGV4dDogU3ltYm9sQnVmZmVycztcbiAgICBpY29uOiBTeW1ib2xCdWZmZXJzO1xuICAgIHRleHRDb2xsaXNpb25Cb3g6IENvbGxpc2lvbkJ1ZmZlcnM7XG4gICAgaWNvbkNvbGxpc2lvbkJveDogQ29sbGlzaW9uQnVmZmVycztcbiAgICB0ZXh0Q29sbGlzaW9uQ2lyY2xlOiBDb2xsaXNpb25CdWZmZXJzO1xuICAgIGljb25Db2xsaXNpb25DaXJjbGU6IENvbGxpc2lvbkJ1ZmZlcnM7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIHNvdXJjZUlEOiBzdHJpbmc7XG4gICAgc3ltYm9sSW5zdGFuY2VJbmRleGVzOiBBcnJheTxudW1iZXI+O1xuICAgIHdyaXRpbmdNb2RlczogQXJyYXk8bnVtYmVyPjtcbiAgICBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50OiBib29sZWFuO1xuICAgIGhhc1BhaW50T3ZlcnJpZGVzOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQnVja2V0UGFyYW1ldGVyczxTeW1ib2xTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLmNvbGxpc2lvbkJveEFycmF5ID0gb3B0aW9ucy5jb2xsaXNpb25Cb3hBcnJheTtcbiAgICAgICAgdGhpcy56b29tID0gb3B0aW9ucy56b29tO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gb3B0aW9ucy5vdmVyc2NhbGluZztcbiAgICAgICAgdGhpcy5sYXllcnMgPSBvcHRpb25zLmxheWVycztcbiAgICAgICAgdGhpcy5sYXllcklkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW8gPSBvcHRpb25zLnBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMuc291cmNlTGF5ZXJJbmRleCA9IG9wdGlvbnMuc291cmNlTGF5ZXJJbmRleDtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzUGFpbnRPdmVycmlkZXMgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMubGF5ZXJzWzBdO1xuICAgICAgICBjb25zdCB1bmV2YWx1YXRlZExheW91dFZhbHVlcyA9IGxheWVyLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzO1xuXG4gICAgICAgIHRoaXMudGV4dFNpemVEYXRhID0gZ2V0U2l6ZURhdGEodGhpcy56b29tLCB1bmV2YWx1YXRlZExheW91dFZhbHVlc1sndGV4dC1zaXplJ10pO1xuICAgICAgICB0aGlzLmljb25TaXplRGF0YSA9IGdldFNpemVEYXRhKHRoaXMuem9vbSwgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddKTtcblxuICAgICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIGNvbnN0IHNvcnRLZXkgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtc29ydC1rZXknKTtcbiAgICAgICAgY29uc3Qgek9yZGVyID0gbGF5b3V0LmdldCgnc3ltYm9sLXotb3JkZXInKTtcbiAgICAgICAgdGhpcy5zb3J0RmVhdHVyZXNCeUtleSA9IHpPcmRlciAhPT0gJ3ZpZXdwb3J0LXknICYmIHNvcnRLZXkuY29uc3RhbnRPcigxKSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB6T3JkZXJCeVZpZXdwb3J0WSA9IHpPcmRlciA9PT0gJ3ZpZXdwb3J0LXknIHx8ICh6T3JkZXIgPT09ICdhdXRvJyAmJiAhdGhpcy5zb3J0RmVhdHVyZXNCeUtleSk7XG4gICAgICAgIHRoaXMuc29ydEZlYXR1cmVzQnlZID0gek9yZGVyQnlWaWV3cG9ydFkgJiYgKGxheW91dC5nZXQoJ3RleHQtYWxsb3ctb3ZlcmxhcCcpIHx8IGxheW91dC5nZXQoJ2ljb24tYWxsb3ctb3ZlcmxhcCcpIHx8XG4gICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LWlnbm9yZS1wbGFjZW1lbnQnKSB8fCBsYXlvdXQuZ2V0KCdpY29uLWlnbm9yZS1wbGFjZW1lbnQnKSk7XG5cbiAgICAgICAgaWYgKGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSA9PT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgdGhpcy53cml0aW5nTW9kZXMgPSBsYXlvdXQuZ2V0KCd0ZXh0LXdyaXRpbmctbW9kZScpLm1hcCh3bSA9PiBXcml0aW5nTW9kZVt3bV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcblxuICAgICAgICB0aGlzLnNvdXJjZUlEID0gb3B0aW9ucy5zb3VyY2VJRDtcbiAgICB9XG5cbiAgICBjcmVhdGVBcnJheXMoKSB7XG4gICAgICAgIGNvbnN0IGxheW91dCA9IHRoaXMubGF5ZXJzWzBdLmxheW91dDtcbiAgICAgICAgdGhpcy5oYXNQYWludE92ZXJyaWRlcyA9IFN5bWJvbFN0eWxlTGF5ZXIuaGFzUGFpbnRPdmVycmlkZXMobGF5b3V0KTtcblxuICAgICAgICB0aGlzLnRleHQgPSBuZXcgU3ltYm9sQnVmZmVycyhuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQoc3ltYm9sTGF5b3V0QXR0cmlidXRlcy5tZW1iZXJzLCB0aGlzLmxheWVycywgdGhpcy56b29tLCBwcm9wZXJ0eSA9PiAvXnRleHQvLnRlc3QocHJvcGVydHkpKSk7XG4gICAgICAgIHRoaXMuaWNvbiA9IG5ldyBTeW1ib2xCdWZmZXJzKG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChzeW1ib2xMYXlvdXRBdHRyaWJ1dGVzLm1lbWJlcnMsIHRoaXMubGF5ZXJzLCB0aGlzLnpvb20sIHByb3BlcnR5ID0+IC9eaWNvbi8udGVzdChwcm9wZXJ0eSkpKTtcblxuICAgICAgICB0aGlzLnRleHRDb2xsaXNpb25Cb3ggPSBuZXcgQ29sbGlzaW9uQnVmZmVycyhDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSwgY29sbGlzaW9uQm94TGF5b3V0Lm1lbWJlcnMsIExpbmVJbmRleEFycmF5KTtcbiAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQm94ID0gbmV3IENvbGxpc2lvbkJ1ZmZlcnMoQ29sbGlzaW9uQm94TGF5b3V0QXJyYXksIGNvbGxpc2lvbkJveExheW91dC5tZW1iZXJzLCBMaW5lSW5kZXhBcnJheSk7XG4gICAgICAgIHRoaXMudGV4dENvbGxpc2lvbkNpcmNsZSA9IG5ldyBDb2xsaXNpb25CdWZmZXJzKENvbGxpc2lvbkNpcmNsZUxheW91dEFycmF5LCBjb2xsaXNpb25DaXJjbGVMYXlvdXQubWVtYmVycywgVHJpYW5nbGVJbmRleEFycmF5KTtcbiAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQ2lyY2xlID0gbmV3IENvbGxpc2lvbkJ1ZmZlcnMoQ29sbGlzaW9uQ2lyY2xlTGF5b3V0QXJyYXksIGNvbGxpc2lvbkNpcmNsZUxheW91dC5tZW1iZXJzLCBUcmlhbmdsZUluZGV4QXJyYXkpO1xuXG4gICAgICAgIHRoaXMuZ2x5cGhPZmZzZXRBcnJheSA9IG5ldyBHbHlwaE9mZnNldEFycmF5KCk7XG4gICAgICAgIHRoaXMubGluZVZlcnRleEFycmF5ID0gbmV3IFN5bWJvbExpbmVWZXJ0ZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnN5bWJvbEluc3RhbmNlcyA9IG5ldyBTeW1ib2xJbnN0YW5jZUFycmF5KCk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlR2x5cGhEZXBlbmRlbmNpZXModGV4dDogc3RyaW5nLCBzdGFjazoge1tudW1iZXJdOiBib29sZWFufSwgdGV4dEFsb25nTGluZTogYm9vbGVhbiwgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbiwgZG9lc0FsbG93VmVydGljYWxXcml0aW5nTW9kZTogYm9vbGVhbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN0YWNrW3RleHQuY2hhckNvZGVBdChpKV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCh0ZXh0QWxvbmdMaW5lIHx8IGFsbG93VmVydGljYWxQbGFjZW1lbnQpICYmIGRvZXNBbGxvd1ZlcnRpY2FsV3JpdGluZ01vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbENoYXIgPSB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbdGV4dC5jaGFyQXQoaSldO1xuICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbENoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2tbdmVydGljYWxDaGFyLmNoYXJDb2RlQXQoMCldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmxheWVyc1swXTtcbiAgICAgICAgY29uc3QgbGF5b3V0ID0gbGF5ZXIubGF5b3V0O1xuXG4gICAgICAgIGNvbnN0IHRleHRGb250ID0gbGF5b3V0LmdldCgndGV4dC1mb250Jyk7XG4gICAgICAgIGNvbnN0IHRleHRGaWVsZCA9IGxheW91dC5nZXQoJ3RleHQtZmllbGQnKTtcbiAgICAgICAgY29uc3QgaWNvbkltYWdlID0gbGF5b3V0LmdldCgnaWNvbi1pbWFnZScpO1xuICAgICAgICBjb25zdCBoYXNUZXh0ID1cbiAgICAgICAgICAgICh0ZXh0RmllbGQudmFsdWUua2luZCAhPT0gJ2NvbnN0YW50JyB8fCB0ZXh0RmllbGQudmFsdWUudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgKHRleHRGb250LnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcgfHwgdGV4dEZvbnQudmFsdWUudmFsdWUubGVuZ3RoID4gMCk7XG4gICAgICAgIC8vIHdlIHNob3VsZCBhbHdheXMgcmVzb2x2ZSB0aGUgaWNvbi1pbWFnZSB2YWx1ZSBpZiB0aGUgcHJvcGVydHkgd2FzIGRlZmluZWQgaW4gdGhlIHN0eWxlXG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHVzIHRvIGZpcmUgdGhlIHN0eWxlaW1hZ2VtaXNzaW5nIGV2ZW50IGlmIGltYWdlIGV2YWx1YXRpb24gcmV0dXJucyBudWxsXG4gICAgICAgIC8vIHRoZSBvbmx5IHdheSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG51bGwgcmV0dXJuZWQgZnJvbSBhIGNvYWxlc2NlIHN0YXRlbWVudCB3aXRoIG5vIHZhbGlkIGltYWdlc1xuICAgICAgICAvLyBhbmQgbnVsbCByZXR1cm5lZCBiZWNhdXNlIGljb24taW1hZ2Ugd2Fzbid0IGRlZmluZWQgaXMgdG8gY2hlY2sgd2hldGhlciBvciBub3QgaWNvbkltYWdlLnBhcmFtZXRlcnMgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgICAgIGNvbnN0IGhhc0ljb24gPSAoaWNvbkltYWdlLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcgfHwgISFpY29uSW1hZ2UudmFsdWUudmFsdWUpICYmIE9iamVjdC5rZXlzKGljb25JbWFnZS5wYXJhbWV0ZXJzKS5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBzeW1ib2xTb3J0S2V5ID0gbGF5b3V0LmdldCgnc3ltYm9sLXNvcnQta2V5Jyk7XG5cbiAgICAgICAgdGhpcy5mZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIGlmICghaGFzVGV4dCAmJiAhaGFzSWNvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWNvbnMgPSBvcHRpb25zLmljb25EZXBlbmRlbmNpZXM7XG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IG9wdGlvbnMuZ2x5cGhEZXBlbmRlbmNpZXM7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUltYWdlcyA9IG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzO1xuICAgICAgICBjb25zdCBnbG9iYWxQcm9wZXJ0aWVzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSk7XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAoIWxheWVyLl9mZWF0dXJlRmlsdGVyKGdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmUpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0ZXh0OiBGb3JtYXR0ZWQgfCB2b2lkO1xuICAgICAgICAgICAgaWYgKGhhc1RleHQpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHByZXNzaW9uIGV2YWx1YXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGNvZXJjZSB0byBGb3JtYXR0ZWRcbiAgICAgICAgICAgICAgICAvLyBidXQgcGxhaW4gc3RyaW5nIHRva2VuIGV2YWx1YXRpb24gc2tpcHMgdGhhdCBwYXRod2F5IHNvIGRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnNpb24gaGVyZS5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFRva2VucyA9IGxheWVyLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygndGV4dC1maWVsZCcsIGZlYXR1cmUsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICAgICAgdGV4dCA9IHRyYW5zZm9ybVRleHQocmVzb2x2ZWRUb2tlbnMgaW5zdGFuY2VvZiBGb3JtYXR0ZWQgP1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFRva2VucyA6XG4gICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlZC5mcm9tU3RyaW5nKHJlc29sdmVkVG9rZW5zKSxcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIsIGZlYXR1cmUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaWNvbjogUmVzb2x2ZWRJbWFnZSB8IHZvaWQ7XG4gICAgICAgICAgICBpZiAoaGFzSWNvbikge1xuICAgICAgICAgICAgICAgIC8vIEV4cHJlc3Npb24gZXZhbHVhdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgY29lcmNlIHRvIEltYWdlXG4gICAgICAgICAgICAgICAgLy8gYnV0IHBsYWluIHN0cmluZyB0b2tlbiBldmFsdWF0aW9uIHNraXBzIHRoYXQgcGF0aHdheSBzbyBkbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJzaW9uIGhlcmUuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUb2tlbnMgPSBsYXllci5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoJ2ljb24taW1hZ2UnLCBmZWF0dXJlLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZFRva2VucyBpbnN0YW5jZW9mIFJlc29sdmVkSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbiA9IHJlc29sdmVkVG9rZW5zO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGljb24gPSBSZXNvbHZlZEltYWdlLmZyb21TdHJpbmcocmVzb2x2ZWRUb2tlbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0ZXh0ICYmICFpY29uKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvcnRLZXkgPSB0aGlzLnNvcnRGZWF0dXJlc0J5S2V5ID9cbiAgICAgICAgICAgICAgICBzeW1ib2xTb3J0S2V5LmV2YWx1YXRlKGZlYXR1cmUsIHt9KSA6XG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCBzeW1ib2xGZWF0dXJlOiBTeW1ib2xGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgaWNvbixcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBsb2FkR2VvbWV0cnkoZmVhdHVyZSksXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IHZlY3RvclRpbGVGZWF0dXJlVHlwZXNbZmVhdHVyZS50eXBlXSxcbiAgICAgICAgICAgICAgICBzb3J0S2V5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmZWF0dXJlLmlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHN5bWJvbEZlYXR1cmUuaWQgPSBmZWF0dXJlLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKHN5bWJvbEZlYXR1cmUpO1xuXG4gICAgICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIGljb25zW2ljb24ubmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTdGFjayA9IHRleHRGb250LmV2YWx1YXRlKGZlYXR1cmUsIHt9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dEFsb25nTGluZSA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnICYmIGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JztcbiAgICAgICAgICAgICAgICB0aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQgPSB0aGlzLndyaXRpbmdNb2RlcyAmJiB0aGlzLndyaXRpbmdNb2Rlcy5pbmRleE9mKFdyaXRpbmdNb2RlLnZlcnRpY2FsKSA+PSAwO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0ZXh0LnNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvZXNBbGxvd1ZlcnRpY2FsV3JpdGluZ01vZGUgPSBhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlKHRleHQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25Gb250ID0gc2VjdGlvbi5mb250U3RhY2sgfHwgZm9udFN0YWNrO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uU3RhY2sgPSBzdGFja3Nbc2VjdGlvbkZvbnRdID0gc3RhY2tzW3NlY3Rpb25Gb250XSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVHbHlwaERlcGVuZGVuY2llcyhzZWN0aW9uLnRleHQsIHNlY3Rpb25TdGFjaywgdGV4dEFsb25nTGluZSwgdGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50LCBkb2VzQWxsb3dWZXJ0aWNhbFdyaXRpbmdNb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpID09PSAnbGluZScpIHtcbiAgICAgICAgICAgIC8vIE1lcmdlIGFkamFjZW50IGxpbmVzIHdpdGggdGhlIHNhbWUgdGV4dCB0byBpbXByb3ZlIGxhYmVsbGluZy5cbiAgICAgICAgICAgIC8vIEl0J3MgYmV0dGVyIHRvIHBsYWNlIGxhYmVscyBvbiBvbmUgbG9uZyBsaW5lIHRoYW4gb24gbWFueSBzaG9ydCBzZWdtZW50cy5cbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMgPSBtZXJnZUxpbmVzKHRoaXMuZmVhdHVyZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBzb3J0RmVhdHVyZXNCeUtleSBpcyB0cnVlXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoYS5zb3J0S2V5OiBhbnkpOiBudW1iZXIpIC0gKChiLnNvcnRLZXk6IGFueSk6IG51bWJlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5sYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMubGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB1cGxvYWRQZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudXBsb2FkZWQgfHwgdGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCB8fCB0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQm94LnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgICAgIHRoaXMuaWNvbkNvbGxpc2lvbkJveC51cGxvYWQoY29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLnRleHRDb2xsaXNpb25DaXJjbGUudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQ2lyY2xlLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRleHQudXBsb2FkKGNvbnRleHQsIHRoaXMuc29ydEZlYXR1cmVzQnlZLCAhdGhpcy51cGxvYWRlZCwgdGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCk7XG4gICAgICAgIHRoaXMuaWNvbi51cGxvYWQoY29udGV4dCwgdGhpcy5zb3J0RmVhdHVyZXNCeVksICF0aGlzLnVwbG9hZGVkLCB0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkKTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy50ZXh0LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pY29uLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQm94LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQm94LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQ2lyY2xlLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQ2lyY2xlLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRUb0xpbmVWZXJ0ZXhBcnJheShhbmNob3I6IEFuY2hvciwgbGluZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGxpbmVTdGFydEluZGV4ID0gdGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICBpZiAoYW5jaG9yLnNlZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHN1bUZvcndhcmRMZW5ndGggPSBhbmNob3IuZGlzdChsaW5lW2FuY2hvci5zZWdtZW50ICsgMV0pO1xuICAgICAgICAgICAgbGV0IHN1bUJhY2t3YXJkTGVuZ3RoID0gYW5jaG9yLmRpc3QobGluZVthbmNob3Iuc2VnbWVudF0pO1xuICAgICAgICAgICAgY29uc3QgdmVydGljZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBhbmNob3Iuc2VnbWVudCArIDE7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB7eDogbGluZVtpXS54LCB5OiBsaW5lW2ldLnksIHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOiBzdW1Gb3J3YXJkTGVuZ3RofTtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IGxpbmUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBzdW1Gb3J3YXJkTGVuZ3RoICs9IGxpbmVbaSArIDFdLmRpc3QobGluZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGFuY2hvci5zZWdtZW50IHx8IDA7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB7eDogbGluZVtpXS54LCB5OiBsaW5lW2ldLnksIHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOiBzdW1CYWNrd2FyZExlbmd0aH07XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bUJhY2t3YXJkTGVuZ3RoICs9IGxpbmVbaSAtIDFdLmRpc3QobGluZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGV4ID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVmVydGV4QXJyYXkuZW1wbGFjZUJhY2sodmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5lU3RhcnRJbmRleCxcbiAgICAgICAgICAgIGxpbmVMZW5ndGg6IHRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aCAtIGxpbmVTdGFydEluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkU3ltYm9scyhhcnJheXM6IFN5bWJvbEJ1ZmZlcnMsXG4gICAgICAgICAgICAgICBxdWFkczogQXJyYXk8U3ltYm9sUXVhZD4sXG4gICAgICAgICAgICAgICBzaXplVmVydGV4OiBhbnksXG4gICAgICAgICAgICAgICBsaW5lT2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgYWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlOiBhbnksXG4gICAgICAgICAgICAgICBsYWJlbEFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgbGluZVN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVMZW5ndGg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGFzc29jaWF0ZWRJY29uSW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpbmRleEFycmF5ID0gYXJyYXlzLmluZGV4QXJyYXk7XG4gICAgICAgIGNvbnN0IGxheW91dFZlcnRleEFycmF5ID0gYXJyYXlzLmxheW91dFZlcnRleEFycmF5O1xuICAgICAgICBjb25zdCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkgPSBhcnJheXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5O1xuXG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBhcnJheXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCAqIHF1YWRzLmxlbmd0aCwgYXJyYXlzLmxheW91dFZlcnRleEFycmF5LCBhcnJheXMuaW5kZXhBcnJheSwgZmVhdHVyZS5zb3J0S2V5KTtcbiAgICAgICAgY29uc3QgZ2x5cGhPZmZzZXRBcnJheVN0YXJ0ID0gdGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgdmVydGV4U3RhcnRJbmRleCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IGFuZ2xlID0gKHRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiB3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwpID8gTWF0aC5QSSAvIDIgOiAwO1xuXG4gICAgICAgIGNvbnN0IGFkZFN5bWJvbCA9IChzeW1ib2w6IFN5bWJvbFF1YWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRsID0gc3ltYm9sLnRsLFxuICAgICAgICAgICAgICAgIHRyID0gc3ltYm9sLnRyLFxuICAgICAgICAgICAgICAgIGJsID0gc3ltYm9sLmJsLFxuICAgICAgICAgICAgICAgIGJyID0gc3ltYm9sLmJyLFxuICAgICAgICAgICAgICAgIHRleCA9IHN5bWJvbC50ZXg7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgIGNvbnN0IHkgPSBzeW1ib2wuZ2x5cGhPZmZzZXRbMV07XG4gICAgICAgICAgICBhZGRWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGxhYmVsQW5jaG9yLngsIGxhYmVsQW5jaG9yLnksIHRsLngsIHkgKyB0bC55LCB0ZXgueCwgdGV4LnksIHNpemVWZXJ0ZXgpO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCB0ci54LCB5ICsgdHIueSwgdGV4LnggKyB0ZXgudywgdGV4LnksIHNpemVWZXJ0ZXgpO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCBibC54LCB5ICsgYmwueSwgdGV4LngsIHRleC55ICsgdGV4LmgsIHNpemVWZXJ0ZXgpO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCBici54LCB5ICsgYnIueSwgdGV4LnggKyB0ZXgudywgdGV4LnkgKyB0ZXguaCwgc2l6ZVZlcnRleCk7XG5cbiAgICAgICAgICAgIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgbGFiZWxBbmNob3IsIGFuZ2xlKTtcblxuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCwgaW5kZXggKyAxLCBpbmRleCArIDIpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCArIDEsIGluZGV4ICsgMiwgaW5kZXggKyAzKTtcblxuICAgICAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gNDtcbiAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDI7XG5cbiAgICAgICAgICAgIHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5lbXBsYWNlQmFjayhzeW1ib2wuZ2x5cGhPZmZzZXRbMF0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChmZWF0dXJlLnRleHQgJiYgZmVhdHVyZS50ZXh0LnNlY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGZlYXR1cmUudGV4dC5zZWN0aW9ucztcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUGFpbnRPdmVycmlkZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudFNlY3Rpb25JbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3B1bGF0ZVBhaW50QXJyYXlGb3JTZWN0aW9uID0gKHNlY3Rpb25JbmRleD86IG51bWJlciwgbGFzdFNlY3Rpb246IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTZWN0aW9uSW5kZXggIT09IHVuZGVmaW5lZCAmJiAoY3VycmVudFNlY3Rpb25JbmRleCAhPT0gc2VjdGlvbkluZGV4IHx8IGxhc3RTZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKGFycmF5cy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGZlYXR1cmUuaW5kZXgsIHt9LCBzZWN0aW9uc1tjdXJyZW50U2VjdGlvbkluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlY3Rpb25JbmRleCA9IHNlY3Rpb25JbmRleDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzeW1ib2wgb2YgcXVhZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVQYWludEFycmF5Rm9yU2VjdGlvbihzeW1ib2wuc2VjdGlvbkluZGV4LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN5bWJvbChzeW1ib2wpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFBvcHVsYXRlIHBhaW50IGFycmF5cyBmb3IgdGhlIGxhc3Qgc2VjdGlvbi5cbiAgICAgICAgICAgICAgICBwb3B1bGF0ZVBhaW50QXJyYXlGb3JTZWN0aW9uKGN1cnJlbnRTZWN0aW9uSW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbCBvZiBxdWFkcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTeW1ib2woc3ltYm9sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJyYXlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKGFycmF5cy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGZlYXR1cmUuaW5kZXgsIHt9LCBzZWN0aW9uc1swXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ltYm9sIG9mIHF1YWRzKSB7XG4gICAgICAgICAgICAgICAgYWRkU3ltYm9sKHN5bWJvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcnJheXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXMoYXJyYXlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCwgZmVhdHVyZSwgZmVhdHVyZS5pbmRleCwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlzLnBsYWNlZFN5bWJvbEFycmF5LmVtcGxhY2VCYWNrKGxhYmVsQW5jaG9yLngsIGxhYmVsQW5jaG9yLnksXG4gICAgICAgICAgICBnbHlwaE9mZnNldEFycmF5U3RhcnQsIHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGggLSBnbHlwaE9mZnNldEFycmF5U3RhcnQsIHZlcnRleFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUxlbmd0aCwgKGxhYmVsQW5jaG9yLnNlZ21lbnQ6IGFueSksXG4gICAgICAgICAgICBzaXplVmVydGV4ID8gc2l6ZVZlcnRleFswXSA6IDAsIHNpemVWZXJ0ZXggPyBzaXplVmVydGV4WzFdIDogMCxcbiAgICAgICAgICAgIGxpbmVPZmZzZXRbMF0sIGxpbmVPZmZzZXRbMV0sXG4gICAgICAgICAgICB3cml0aW5nTW9kZSxcbiAgICAgICAgICAgIC8vIHBsYWNlZE9yaWVudGF0aW9uIGlzIG51bGwgaW5pdGlhbGx5OyB3aWxsIGJlIHVwZGF0ZWQgdG8gaG9yaXpvbnRhbCgxKS92ZXJ0aWNhbCgyKSBpZiBwbGFjZWRcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAoZmFsc2U6IGFueSksXG4gICAgICAgICAgICAvLyBUaGUgY3Jvc3NUaWxlSUQgaXMgb25seSBmaWxsZWQvdXNlZCBvbiB0aGUgZm9yZWdyb3VuZCBmb3IgZHluYW1pYyB0ZXh0IGFuY2hvcnNcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBhc3NvY2lhdGVkSWNvbkluZGV4XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXk6IFN0cnVjdEFycmF5LCBwb2ludDogUG9pbnQsIGFuY2hvclg6IG51bWJlciwgYW5jaG9yWTogbnVtYmVyLCBleHRydWRlOiBQb2ludCkge1xuICAgICAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjaygwLCAwKTtcbiAgICAgICAgcmV0dXJuIGxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAgICAgLy8gcG9zXG4gICAgICAgICAgICBwb2ludC54LFxuICAgICAgICAgICAgcG9pbnQueSxcbiAgICAgICAgICAgIC8vIGFfYW5jaG9yX3Bvc1xuICAgICAgICAgICAgYW5jaG9yWCxcbiAgICAgICAgICAgIGFuY2hvclksXG4gICAgICAgICAgICAvLyBleHRydWRlXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGV4dHJ1ZGUueCksXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGV4dHJ1ZGUueSkpO1xuICAgIH1cblxuICAgIGFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgYXJyYXlzOiBDb2xsaXNpb25CdWZmZXJzLCBib3hBbmNob3JQb2ludDogUG9pbnQsIHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgaXNDaXJjbGU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IGFycmF5cy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LCBhcnJheXMubGF5b3V0VmVydGV4QXJyYXksIGFycmF5cy5pbmRleEFycmF5KTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICBjb25zdCBsYXlvdXRWZXJ0ZXhBcnJheSA9IGFycmF5cy5sYXlvdXRWZXJ0ZXhBcnJheTtcbiAgICAgICAgY29uc3QgY29sbGlzaW9uVmVydGV4QXJyYXkgPSBhcnJheXMuY29sbGlzaW9uVmVydGV4QXJyYXk7XG5cbiAgICAgICAgY29uc3QgYW5jaG9yWCA9IHN5bWJvbEluc3RhbmNlLmFuY2hvclg7XG4gICAgICAgIGNvbnN0IGFuY2hvclkgPSBzeW1ib2xJbnN0YW5jZS5hbmNob3JZO1xuXG4gICAgICAgIHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBcnJheSwgYm94QW5jaG9yUG9pbnQsIGFuY2hvclgsIGFuY2hvclksIG5ldyBQb2ludCh4MSwgeTEpKTtcbiAgICAgICAgdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGNvbGxpc2lvblZlcnRleEFycmF5LCBib3hBbmNob3JQb2ludCwgYW5jaG9yWCwgYW5jaG9yWSwgbmV3IFBvaW50KHgyLCB5MSkpO1xuICAgICAgICB0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXksIGJveEFuY2hvclBvaW50LCBhbmNob3JYLCBhbmNob3JZLCBuZXcgUG9pbnQoeDIsIHkyKSk7XG4gICAgICAgIHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBcnJheSwgYm94QW5jaG9yUG9pbnQsIGFuY2hvclgsIGFuY2hvclksIG5ldyBQb2ludCh4MSwgeTIpKTtcblxuICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSA0O1xuICAgICAgICBpZiAoaXNDaXJjbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheSA9IChhcnJheXMuaW5kZXhBcnJheTogYW55KTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMSwgaW5kZXggKyAyKTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMiwgaW5kZXggKyAzKTtcblxuICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4QXJyYXk6IExpbmVJbmRleEFycmF5ID0gKGFycmF5cy5pbmRleEFycmF5OiBhbnkpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCwgaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXggKyAxLCBpbmRleCArIDIpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCArIDIsIGluZGV4ICsgMyk7XG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4ICsgMywgaW5kZXgpO1xuXG4gICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSA0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgaXNUZXh0OiBib29sZWFuKSB7XG4gICAgICAgIGZvciAobGV0IGIgPSBzdGFydEluZGV4OyBiIDwgZW5kSW5kZXg7IGIrKykge1xuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAodGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQoYik6IGFueSk7XG4gICAgICAgICAgICBjb25zdCB4MSA9IGJveC54MTtcbiAgICAgICAgICAgIGNvbnN0IHkxID0gYm94LnkxO1xuICAgICAgICAgICAgY29uc3QgeDIgPSBib3gueDI7XG4gICAgICAgICAgICBjb25zdCB5MiA9IGJveC55MjtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIHJhZGl1cyA+IDAsIHRoaXMgY29sbGlzaW9uIGJveCBpcyBhY3R1YWxseSBhIGNpcmNsZVxuICAgICAgICAgICAgLy8gVGhlIGRhdGEgd2UgYWRkIHRvIHRoZSBidWZmZXJzIGlzIGV4YWN0bHkgdGhlIHNhbWUsIGJ1dCB3ZSdsbCByZW5kZXIgd2l0aCBhIGRpZmZlcmVudCBzaGFkZXIuXG4gICAgICAgICAgICBjb25zdCBpc0NpcmNsZSA9IGJveC5yYWRpdXMgPiAwO1xuICAgICAgICAgICAgdGhpcy5hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRpY2VzKHgxLCB5MSwgeDIsIHkyLCBpc0NpcmNsZSA/XG4gICAgICAgICAgICAgICAgKGlzVGV4dCA/IHRoaXMudGV4dENvbGxpc2lvbkNpcmNsZSA6IHRoaXMuaWNvbkNvbGxpc2lvbkNpcmNsZSkgOiAoaXNUZXh0ID8gdGhpcy50ZXh0Q29sbGlzaW9uQm94IDogdGhpcy5pY29uQ29sbGlzaW9uQm94KSxcbiAgICAgICAgICAgICAgICBib3guYW5jaG9yUG9pbnQsIHN5bWJvbEluc3RhbmNlLCBpc0NpcmNsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycygpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3ltYm9sSW5zdGFuY2UudGV4dEJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLnRleHRCb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LCBzeW1ib2xJbnN0YW5jZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3ltYm9sSW5zdGFuY2UuaWNvbkJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLmljb25Cb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4LCBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZXNlIGZsYXQgYXJyYXlzIGFyZSBtZWFudCB0byBiZSBxdWlja2VyIHRvIGl0ZXJhdGUgb3ZlciB0aGFuIHRoZSBzb3VyY2VcbiAgICAvLyBDb2xsaXNpb25Cb3hBcnJheVxuICAgIF9kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzRm9yU3ltYm9sKGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgdGV4dFN0YXJ0SW5kZXg6IG51bWJlciwgdGV4dEVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZlcnRpY2FsVGV4dFN0YXJ0SW5kZXg6IG51bWJlciwgdmVydGljYWxUZXh0RW5kSW5kZXg6IG51bWJlcixcbiAgICAgICAgaWNvblN0YXJ0SW5kZXg6IG51bWJlciwgaWNvbkVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZlcnRpY2FsSWNvblN0YXJ0SW5kZXg6IG51bWJlciwgdmVydGljYWxJY29uRW5kSW5kZXg6IG51bWJlcik6IENvbGxpc2lvbkFycmF5cyB7XG5cbiAgICAgICAgY29uc3QgY29sbGlzaW9uQXJyYXlzID0ge307XG4gICAgICAgIGZvciAobGV0IGsgPSB0ZXh0U3RhcnRJbmRleDsgayA8IHRleHRFbmRJbmRleDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9IChjb2xsaXNpb25Cb3hBcnJheS5nZXQoayk6IGFueSk7XG4gICAgICAgICAgICBpZiAoYm94LnJhZGl1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy50ZXh0Qm94ID0ge3gxOiBib3gueDEsIHkxOiBib3gueTEsIHgyOiBib3gueDIsIHkyOiBib3gueTIsIGFuY2hvclBvaW50WDogYm94LmFuY2hvclBvaW50WCwgYW5jaG9yUG9pbnRZOiBib3guYW5jaG9yUG9pbnRZfTtcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCA9IGJveC5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIE9ubHkgb25lIGJveCBhbGxvd2VkIHBlciBpbnN0YW5jZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbGxpc2lvbkFycmF5cy50ZXh0Q2lyY2xlcykge1xuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudGV4dENpcmNsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnRleHRGZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB1c2VkID0gMTsgLy8gTWF5IGJlIHVwZGF0ZWQgYXQgY29sbGlzaW9uIGRldGVjdGlvbiB0aW1lXG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnRleHRDaXJjbGVzLnB1c2goYm94LmFuY2hvclBvaW50WCwgYm94LmFuY2hvclBvaW50WSwgYm94LnJhZGl1cywgYm94LnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciwgdXNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgayA9IHZlcnRpY2FsVGV4dFN0YXJ0SW5kZXg7IGsgPCB2ZXJ0aWNhbFRleHRFbmRJbmRleDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9IChjb2xsaXNpb25Cb3hBcnJheS5nZXQoayk6IGFueSk7XG4gICAgICAgICAgICBpZiAoYm94LnJhZGl1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3ggPSB7eDE6IGJveC54MSwgeTE6IGJveC55MSwgeDI6IGJveC54MiwgeTI6IGJveC55MiwgYW5jaG9yUG9pbnRYOiBib3guYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFk6IGJveC5hbmNob3JQb2ludFl9O1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBPbmx5IG9uZSBib3ggYWxsb3dlZCBwZXIgaW5zdGFuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrID0gaWNvblN0YXJ0SW5kZXg7IGsgPCBpY29uRW5kSW5kZXg7IGsrKykge1xuICAgICAgICAgICAgLy8gQW4gaWNvbiBjYW4gb25seSBoYXZlIG9uZSBib3ggbm93LCBzbyB0aGlzIGluZGV4aW5nIGlzIGEgYml0IHZlc3RpZ2lhbC4uLlxuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAoY29sbGlzaW9uQm94QXJyYXkuZ2V0KGspOiBhbnkpO1xuICAgICAgICAgICAgaWYgKGJveC5yYWRpdXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMuaWNvbkJveCA9IHt4MTogYm94LngxLCB5MTogYm94LnkxLCB4MjogYm94LngyLCB5MjogYm94LnkyLCBhbmNob3JQb2ludFg6IGJveC5hbmNob3JQb2ludFgsIGFuY2hvclBvaW50WTogYm94LmFuY2hvclBvaW50WX07XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBPbmx5IG9uZSBib3ggYWxsb3dlZCBwZXIgaW5zdGFuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrID0gdmVydGljYWxJY29uU3RhcnRJbmRleDsgayA8IHZlcnRpY2FsSWNvbkVuZEluZGV4OyBrKyspIHtcbiAgICAgICAgICAgIC8vIEFuIGljb24gY2FuIG9ubHkgaGF2ZSBvbmUgYm94IG5vdywgc28gdGhpcyBpbmRleGluZyBpcyBhIGJpdCB2ZXN0aWdpYWwuLi5cbiAgICAgICAgICAgIGNvbnN0IGJveDogQ29sbGlzaW9uQm94ID0gKGNvbGxpc2lvbkJveEFycmF5LmdldChrKTogYW55KTtcbiAgICAgICAgICAgIGlmIChib3gucmFkaXVzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkJveCA9IHt4MTogYm94LngxLCB5MTogYm94LnkxLCB4MjogYm94LngyLCB5MjogYm94LnkyLCBhbmNob3JQb2ludFg6IGJveC5hbmNob3JQb2ludFgsIGFuY2hvclBvaW50WTogYm94LmFuY2hvclBvaW50WX07XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkZlYXR1cmVJbmRleCA9IGJveC5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIE9ubHkgb25lIGJveCBhbGxvd2VkIHBlciBpbnN0YW5jZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsaXNpb25BcnJheXM7XG4gICAgfVxuXG4gICAgZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25BcnJheXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkFycmF5cy5wdXNoKHRoaXMuX2Rlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXNGb3JTeW1ib2woXG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudGV4dEJveEVuZEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxUZXh0Qm94RW5kSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuaWNvbkJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuaWNvbkJveEVuZEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxJY29uQm94RW5kSW5kZXhcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzVGV4dERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNJY29uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb25Db2xsaXNpb25Cb3guc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNUZXh0Q29sbGlzaW9uQ2lyY2xlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dENvbGxpc2lvbkNpcmNsZS5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc0ljb25Db2xsaXNpb25DaXJjbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pY29uQ29sbGlzaW9uQ2lyY2xlLnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgYWRkSW5kaWNlc0ZvclBsYWNlZFRleHRTeW1ib2wocGxhY2VkVGV4dFN5bWJvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGxhY2VkU3ltYm9sID0gdGhpcy50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChwbGFjZWRUZXh0U3ltYm9sSW5kZXgpO1xuXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gcGxhY2VkU3ltYm9sLnZlcnRleFN0YXJ0SW5kZXggKyBwbGFjZWRTeW1ib2wubnVtR2x5cGhzICogNDtcbiAgICAgICAgZm9yIChsZXQgdmVydGV4SW5kZXggPSBwbGFjZWRTeW1ib2wudmVydGV4U3RhcnRJbmRleDsgdmVydGV4SW5kZXggPCBlbmRJbmRleDsgdmVydGV4SW5kZXggKz0gNCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodmVydGV4SW5kZXgsIHZlcnRleEluZGV4ICsgMSwgdmVydGV4SW5kZXggKyAyKTtcbiAgICAgICAgICAgIHRoaXMudGV4dC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHZlcnRleEluZGV4ICsgMSwgdmVydGV4SW5kZXggKyAyLCB2ZXJ0ZXhJbmRleCArIDMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkSW5kaWNlc0ZvclBsYWNlZEljb25TeW1ib2wocGxhY2VkSWNvblN5bWJvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGxhY2VkSWNvbiA9IHRoaXMuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQocGxhY2VkSWNvblN5bWJvbEluZGV4KTtcbiAgICAgICAgaWYgKHBsYWNlZEljb24ubnVtR2x5cGhzKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJ0ZXhJbmRleCA9IHBsYWNlZEljb24udmVydGV4U3RhcnRJbmRleDtcbiAgICAgICAgICAgIHRoaXMuaWNvbi5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHZlcnRleEluZGV4LCB2ZXJ0ZXhJbmRleCArIDEsIHZlcnRleEluZGV4ICsgMik7XG4gICAgICAgICAgICB0aGlzLmljb24uaW5kZXhBcnJheS5lbXBsYWNlQmFjayh2ZXJ0ZXhJbmRleCArIDEsIHZlcnRleEluZGV4ICsgMiwgdmVydGV4SW5kZXggKyAzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNvcnRlZFN5bWJvbEluZGV4ZXMoYW5nbGU6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5zb3J0ZWRBbmdsZSA9PT0gYW5nbGUgJiYgdGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgY29uc3QgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICBjb25zdCByb3RhdGVkWXMgPSBbXTtcbiAgICAgICAgY29uc3QgZmVhdHVyZUluZGV4ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChpKTtcbiAgICAgICAgICAgIHJvdGF0ZWRZcy5wdXNoKE1hdGgucm91bmQoc2luICogc3ltYm9sSW5zdGFuY2UuYW5jaG9yWCArIGNvcyAqIHN5bWJvbEluc3RhbmNlLmFuY2hvclkpIHwgMCk7XG4gICAgICAgICAgICBmZWF0dXJlSW5kZXhlcy5wdXNoKHN5bWJvbEluc3RhbmNlLmZlYXR1cmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQuc29ydCgoYUluZGV4LCBiSW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAocm90YXRlZFlzW2FJbmRleF0gLSByb3RhdGVkWXNbYkluZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAoZmVhdHVyZUluZGV4ZXNbYkluZGV4XSAtIGZlYXR1cmVJbmRleGVzW2FJbmRleF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHNvcnRGZWF0dXJlcyhhbmdsZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5zb3J0RmVhdHVyZXNCeVkpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuc29ydGVkQW5nbGUgPT09IGFuZ2xlKSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIGN1cnJlbnQgYXBwcm9hY2ggdG8gc29ydGluZyBkb2Vzbid0IHNvcnQgYWNyb3NzIHNlZ21lbnRzIHNvIGRvbid0IHRyeS5cbiAgICAgICAgLy8gU29ydGluZyB3aXRoaW4gc2VnbWVudHMgc2VwYXJhdGVseSBzZWVtZWQgbm90IHRvIGJlIHdvcnRoIHRoZSBjb21wbGV4aXR5LlxuICAgICAgICBpZiAodGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDEgfHwgdGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDEpIHJldHVybjtcblxuICAgICAgICAvLyBJZiB0aGUgc3ltYm9scyBhcmUgYWxsb3dlZCB0byBvdmVybGFwIHNvcnQgdGhlbSBieSB0aGVpciB2ZXJ0aWNhbCBzY3JlZW4gcG9zaXRpb24uXG4gICAgICAgIC8vIFRoZSBpbmRleCBhcnJheSBidWZmZXIgaXMgcmV3cml0dGVuIHRvIHJlZmVyZW5jZSB0aGUgKHVuY2hhbmdlZCkgdmVydGljZXMgaW4gdGhlXG4gICAgICAgIC8vIHNvcnRlZCBvcmRlci5cblxuICAgICAgICAvLyBUbyBhdm9pZCBzb3J0aW5nIHRoZSBhY3R1YWwgc3ltYm9sSW5zdGFuY2UgYXJyYXkgd2Ugc29ydCBhbiBhcnJheSBvZiBpbmRleGVzLlxuICAgICAgICB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcyA9IHRoaXMuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyhhbmdsZSk7XG4gICAgICAgIHRoaXMuc29ydGVkQW5nbGUgPSBhbmdsZTtcblxuICAgICAgICB0aGlzLnRleHQuaW5kZXhBcnJheS5jbGVhcigpO1xuICAgICAgICB0aGlzLmljb24uaW5kZXhBcnJheS5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMuZmVhdHVyZVNvcnRPcmRlciA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVTb3J0T3JkZXIucHVzaChzeW1ib2xJbnN0YW5jZS5mZWF0dXJlSW5kZXgpO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgICAgIF0uZm9yRWFjaCgoaW5kZXgsIGksIGFycmF5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhZGQgYSBnaXZlbiBpbmRleCB0aGUgZmlyc3QgdGltZSBpdCBzaG93cyB1cCxcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBkdXBsaWNhdGUgb3BhY2l0eSBlbnRyaWVzIHdoZW4gbXVsdGlwbGUganVzdGlmaWNhdGlvbnNcbiAgICAgICAgICAgICAgICAvLyBzaGFyZSB0aGUgc2FtZSBnbHlwaHMuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgYXJyYXkuaW5kZXhPZihpbmRleCkgPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkVGV4dFN5bWJvbChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkVGV4dFN5bWJvbChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS5wbGFjZWRJY29uU3ltYm9sSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkSW5kaWNlc0ZvclBsYWNlZEljb25TeW1ib2woc3ltYm9sSW5zdGFuY2UucGxhY2VkSWNvblN5bWJvbEluZGV4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRJY29uU3ltYm9sKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRleHQuaW5kZXhCdWZmZXIpIHRoaXMudGV4dC5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMudGV4dC5pbmRleEFycmF5KTtcbiAgICAgICAgaWYgKHRoaXMuaWNvbi5pbmRleEJ1ZmZlcikgdGhpcy5pY29uLmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5pY29uLmluZGV4QXJyYXkpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1N5bWJvbEJ1Y2tldCcsIFN5bWJvbEJ1Y2tldCwge1xuICAgIG9taXQ6IFsnbGF5ZXJzJywgJ2NvbGxpc2lvbkJveEFycmF5JywgJ2ZlYXR1cmVzJywgJ2NvbXBhcmVUZXh0J11cbn0pO1xuXG4vLyB0aGlzIGNvbnN0YW50IGlzIGJhc2VkIG9uIHRoZSBzaXplIG9mIFN0cnVjdEFycmF5IGluZGV4ZXMgdXNlZCBpbiBhIHN5bWJvbFxuLy8gYnVja2V0LS1uYW1lbHksIGdseXBoT2Zmc2V0QXJyYXlTdGFydFxuLy8gZWcgdGhlIG1heCB2YWxpZCBVSW50MTYgaXMgNjUsNTM1XG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI5MDcgZm9yIG1vdGl2YXRpb25cbi8vIGxpbmVTdGFydEluZGV4IGFuZCB0ZXh0Qm94U3RhcnRJbmRleCBjb3VsZCBwb3RlbnRpYWxseSBiZSBjb25jZXJuc1xuLy8gYnV0IHdlIGV4cGVjdCB0aGVyZSB0byBiZSBtYW55IGZld2VyIGJveGVzL2xpbmVzIHRoYW4gZ2x5cGhzXG5TeW1ib2xCdWNrZXQuTUFYX0dMWVBIUyA9IDY1NTM1O1xuXG5TeW1ib2xCdWNrZXQuYWRkRHluYW1pY0F0dHJpYnV0ZXMgPSBhZGREeW5hbWljQXR0cmlidXRlcztcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sQnVja2V0O1xuZXhwb3J0IHthZGREeW5hbWljQXR0cmlidXRlc307XG4iLCIvLyBAZmxvd1xuZXhwb3J0IGRlZmF1bHQgcmVzb2x2ZVRva2VucztcblxuLyoqXG4gKiBSZXBsYWNlIHRva2VucyBpbiBhIHN0cmluZyB0ZW1wbGF0ZSB3aXRoIHZhbHVlcyBpbiBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyBhIGtleS92YWx1ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0b2tlbnMgYW5kIHJlcGxhY2VtZW50c1xuICogQHBhcmFtIHRleHQgdGhlIHRlbXBsYXRlIHN0cmluZ1xuICogQHJldHVybnMgdGhlIHRlbXBsYXRlIHdpdGggdG9rZW5zIHJlcGxhY2VkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXNvbHZlVG9rZW5zKHByb3BlcnRpZXM6IHsrW3N0cmluZ106IG1peGVkfSwgdGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC97KFtee31dKyl9L2csIChtYXRjaCwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGtleSBpbiBwcm9wZXJ0aWVzID8gU3RyaW5nKHByb3BlcnRpZXNba2V5XSkgOiAnJztcbiAgICB9KTtcbn1cbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB7XG4gICAgQ29sb3JUeXBlXG59IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIExheW91dFByb3BzID0ge3xcbiAgICBcInN5bWJvbC1wbGFjZW1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJwb2ludFwiIHwgXCJsaW5lXCIgfCBcImxpbmUtY2VudGVyXCI+LFxuICAgIFwic3ltYm9sLXNwYWNpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInN5bWJvbC1hdm9pZC1lZGdlc1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcInN5bWJvbC1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInN5bWJvbC16LW9yZGVyXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwiYXV0b1wiIHwgXCJ2aWV3cG9ydC15XCIgfCBcInNvdXJjZVwiPixcbiAgICBcImljb24tYWxsb3ctb3ZlcmxhcFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImljb24taWdub3JlLXBsYWNlbWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImljb24tb3B0aW9uYWxcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiIHwgXCJhdXRvXCI+LFxuICAgIFwiaWNvbi1zaXplXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi10ZXh0LWZpdFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm5vbmVcIiB8IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgfCBcImJvdGhcIj4sXG4gICAgXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiaWNvbi1pbWFnZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJpY29uLXJvdGF0ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24tcGFkZGluZ1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi1rZWVwLXVwcmlnaHRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJpY29uLW9mZnNldFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJpY29uLWFuY2hvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJjZW50ZXJcIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcInRvcC1sZWZ0XCIgfCBcInRvcC1yaWdodFwiIHwgXCJib3R0b20tbGVmdFwiIHwgXCJib3R0b20tcmlnaHRcIj4sXG4gICAgXCJpY29uLXBpdGNoLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiIHwgXCJhdXRvXCI+LFxuICAgIFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIiB8IFwiYXV0b1wiPixcbiAgICBcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCIgfCBcImF1dG9cIj4sXG4gICAgXCJ0ZXh0LWZpZWxkXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxGb3JtYXR0ZWQ+LFxuICAgIFwidGV4dC1mb250XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxBcnJheTxzdHJpbmc+PixcbiAgICBcInRleHQtc2l6ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtbWF4LXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1saW5lLWhlaWdodFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1sZXR0ZXItc3BhY2luZ1wiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtanVzdGlmeVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJhdXRvXCIgfCBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCI+LFxuICAgIFwidGV4dC1yYWRpYWwtb2Zmc2V0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC12YXJpYWJsZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8QXJyYXk8XCJjZW50ZXJcIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcInRvcC1sZWZ0XCIgfCBcInRvcC1yaWdodFwiIHwgXCJib3R0b20tbGVmdFwiIHwgXCJib3R0b20tcmlnaHRcIj4+LFxuICAgIFwidGV4dC1hbmNob3JcIjogRGF0YURyaXZlblByb3BlcnR5PFwiY2VudGVyXCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiIHwgXCJ0b3AtbGVmdFwiIHwgXCJ0b3AtcmlnaHRcIiB8IFwiYm90dG9tLWxlZnRcIiB8IFwiYm90dG9tLXJpZ2h0XCI+LFxuICAgIFwidGV4dC1tYXgtYW5nbGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtd3JpdGluZy1tb2RlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PEFycmF5PFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiPj4sXG4gICAgXCJ0ZXh0LXJvdGF0ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtcGFkZGluZ1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1rZWVwLXVwcmlnaHRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJ0ZXh0LXRyYW5zZm9ybVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJub25lXCIgfCBcInVwcGVyY2FzZVwiIHwgXCJsb3dlcmNhc2VcIj4sXG4gICAgXCJ0ZXh0LW9mZnNldFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJ0ZXh0LW9wdGlvbmFsXCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxufH07XG5cbmNvbnN0IGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJzeW1ib2wtcGxhY2VtZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLXBsYWNlbWVudFwiXSksXG4gICAgXCJzeW1ib2wtc3BhY2luZ1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC1zcGFjaW5nXCJdKSxcbiAgICBcInN5bWJvbC1hdm9pZC1lZGdlc1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC1hdm9pZC1lZGdlc1wiXSksXG4gICAgXCJzeW1ib2wtc29ydC1rZXlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLXNvcnQta2V5XCJdKSxcbiAgICBcInN5bWJvbC16LW9yZGVyXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLXotb3JkZXJcIl0pLFxuICAgIFwiaWNvbi1hbGxvdy1vdmVybGFwXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1hbGxvdy1vdmVybGFwXCJdKSxcbiAgICBcImljb24taWdub3JlLXBsYWNlbWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24taWdub3JlLXBsYWNlbWVudFwiXSksXG4gICAgXCJpY29uLW9wdGlvbmFsXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1vcHRpb25hbFwiXSksXG4gICAgXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tcm90YXRpb24tYWxpZ25tZW50XCJdKSxcbiAgICBcImljb24tc2l6ZVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXNpemVcIl0pLFxuICAgIFwiaWNvbi10ZXh0LWZpdFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tdGV4dC1maXRcIl0pLFxuICAgIFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCJdKSxcbiAgICBcImljb24taW1hZ2VcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1pbWFnZVwiXSksXG4gICAgXCJpY29uLXJvdGF0ZVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXJvdGF0ZVwiXSksXG4gICAgXCJpY29uLXBhZGRpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXBhZGRpbmdcIl0pLFxuICAgIFwiaWNvbi1rZWVwLXVwcmlnaHRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLWtlZXAtdXByaWdodFwiXSksXG4gICAgXCJpY29uLW9mZnNldFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLW9mZnNldFwiXSksXG4gICAgXCJpY29uLWFuY2hvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLWFuY2hvclwiXSksXG4gICAgXCJpY29uLXBpdGNoLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tcGl0Y2gtYWxpZ25tZW50XCJdKSxcbiAgICBcInRleHQtcGl0Y2gtYWxpZ25tZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1waXRjaC1hbGlnbm1lbnRcIl0pLFxuICAgIFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiXSksXG4gICAgXCJ0ZXh0LWZpZWxkXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtZmllbGRcIl0pLFxuICAgIFwidGV4dC1mb250XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtZm9udFwiXSksXG4gICAgXCJ0ZXh0LXNpemVcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1zaXplXCJdKSxcbiAgICBcInRleHQtbWF4LXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtbWF4LXdpZHRoXCJdKSxcbiAgICBcInRleHQtbGluZS1oZWlnaHRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWxpbmUtaGVpZ2h0XCJdKSxcbiAgICBcInRleHQtbGV0dGVyLXNwYWNpbmdcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1sZXR0ZXItc3BhY2luZ1wiXSksXG4gICAgXCJ0ZXh0LWp1c3RpZnlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1qdXN0aWZ5XCJdKSxcbiAgICBcInRleHQtcmFkaWFsLW9mZnNldFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXJhZGlhbC1vZmZzZXRcIl0pLFxuICAgIFwidGV4dC12YXJpYWJsZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXZhcmlhYmxlLWFuY2hvclwiXSksXG4gICAgXCJ0ZXh0LWFuY2hvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWFuY2hvclwiXSksXG4gICAgXCJ0ZXh0LW1heC1hbmdsZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtbWF4LWFuZ2xlXCJdKSxcbiAgICBcInRleHQtd3JpdGluZy1tb2RlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC13cml0aW5nLW1vZGVcIl0pLFxuICAgIFwidGV4dC1yb3RhdGVcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1yb3RhdGVcIl0pLFxuICAgIFwidGV4dC1wYWRkaW5nXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1wYWRkaW5nXCJdKSxcbiAgICBcInRleHQta2VlcC11cHJpZ2h0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1rZWVwLXVwcmlnaHRcIl0pLFxuICAgIFwidGV4dC10cmFuc2Zvcm1cIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC10cmFuc2Zvcm1cIl0pLFxuICAgIFwidGV4dC1vZmZzZXRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1vZmZzZXRcIl0pLFxuICAgIFwidGV4dC1hbGxvdy1vdmVybGFwXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1hbGxvdy1vdmVybGFwXCJdKSxcbiAgICBcInRleHQtaWdub3JlLXBsYWNlbWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtaWdub3JlLXBsYWNlbWVudFwiXSksXG4gICAgXCJ0ZXh0LW9wdGlvbmFsXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1vcHRpb25hbFwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJpY29uLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJpY29uLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJpY29uLWhhbG8tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImljb24taGFsby13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24taGFsby1ibHVyXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJpY29uLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJ0ZXh0LW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJ0ZXh0LWhhbG8tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcInRleHQtaGFsby13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtaGFsby1ibHVyXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJpY29uLW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLW9wYWNpdHlcIl0pLFxuICAgIFwiaWNvbi1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24tY29sb3JcIl0pLFxuICAgIFwiaWNvbi1oYWxvLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi1oYWxvLWNvbG9yXCJdKSxcbiAgICBcImljb24taGFsby13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24taGFsby13aWR0aFwiXSksXG4gICAgXCJpY29uLWhhbG8tYmx1clwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24taGFsby1ibHVyXCJdKSxcbiAgICBcImljb24tdHJhbnNsYXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLXRyYW5zbGF0ZVwiXSksXG4gICAgXCJpY29uLXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24tdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJ0ZXh0LW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LW9wYWNpdHlcIl0pLFxuICAgIFwidGV4dC1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtY29sb3JcIl0sIHsgcnVudGltZVR5cGU6IENvbG9yVHlwZSwgZ2V0T3ZlcnJpZGU6IChvKSA9PiBvLnRleHRDb2xvciwgaGFzT3ZlcnJpZGU6IChvKSA9PiAhIW8udGV4dENvbG9yIH0pLFxuICAgIFwidGV4dC1oYWxvLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC1oYWxvLWNvbG9yXCJdKSxcbiAgICBcInRleHQtaGFsby13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtaGFsby13aWR0aFwiXSksXG4gICAgXCJ0ZXh0LWhhbG8tYmx1clwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtaGFsby1ibHVyXCJdKSxcbiAgICBcInRleHQtdHJhbnNsYXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LXRyYW5zbGF0ZVwiXSksXG4gICAgXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtdHJhbnNsYXRlLWFuY2hvclwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtab29tQ29uc3RhbnRFeHByZXNzaW9ufSBmcm9tICcuLi8uLi9leHByZXNzaW9uJztcbmltcG9ydCB7TnVsbFR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7UG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuLi8uLi8uLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdFNlY3Rpb25PdmVycmlkZTxUPiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgZGVmYXVsdFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD47XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZhdWx0VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPikge1xuICAgICAgICBhc3NlcnQoZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcyAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy50eXBlID0gZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcyA/IGRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5vdmVycmlkZXMucnVudGltZVR5cGUgOiBOdWxsVHlwZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBpZiAoY3R4LmZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJyaWRlcyA9IHRoaXMuZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcztcbiAgICAgICAgICAgIGlmIChvdmVycmlkZXMgJiYgb3ZlcnJpZGVzLmhhc092ZXJyaWRlKGN0eC5mb3JtYXR0ZWRTZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdmVycmlkZXMuZ2V0T3ZlcnJpZGUoY3R4LmZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN0eC5mZWF0dXJlICYmIGN0eC5mZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZS5ldmFsdWF0ZShjdHguZmVhdHVyZSwgY3R4LmZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi5kZWZhdWx0O1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZS5pc0NvbnN0YW50KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cHI6IFpvb21Db25zdGFudEV4cHJlc3Npb248J3NvdXJjZSc+ID0gKCh0aGlzLmRlZmF1bHRWYWx1ZS52YWx1ZSk6IGFueSk7XG4gICAgICAgICAgICBmbihleHByLl9zdHlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYW5ub3QgYmUgc3RhdGljYWxseSBldmFsdWF0ZWQsIGFzIHRoZSBvdXRwdXQgZGVwZW5kcyBvbiB0aGUgZXZhbHVhdGlvbiBjb250ZXh0LlxuICAgIHBvc3NpYmxlT3V0cHV0cygpOiBBcnJheTxWYWx1ZSB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5yZWdpc3RlcignRm9ybWF0U2VjdGlvbk92ZXJyaWRlJywgRm9ybWF0U2VjdGlvbk92ZXJyaWRlLCB7b21pdDogWydkZWZhdWx0VmFsdWUnXX0pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgU3ltYm9sQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHJlc29sdmVUb2tlbnMgZnJvbSAnLi4vLi4vdXRpbC9yZXNvbHZlX3Rva2Vucyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL3N5bWJvbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHtcbiAgICBUcmFuc2l0aW9uYWJsZSxcbiAgICBUcmFuc2l0aW9uaW5nLFxuICAgIExheW91dCxcbiAgICBQb3NzaWJseUV2YWx1YXRlZCxcbiAgICBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUsXG4gICAgUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHtcbiAgICBpc0V4cHJlc3Npb24sXG4gICAgU3R5bGVFeHByZXNzaW9uLFxuICAgIFpvb21Db25zdGFudEV4cHJlc3Npb24sXG4gICAgWm9vbURlcGVuZGVudEV4cHJlc3Npb25cbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcblxuaW1wb3J0IHR5cGUge0J1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtMYXlvdXRQcm9wcywgUGFpbnRQcm9wc30gZnJvbSAnLi9zeW1ib2xfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZSwgU291cmNlRXhwcmVzc2lvbiwgQ29tcG9zaXRlRXhwcmVzc2lvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZXhwcmVzc2lvbic7XG5pbXBvcnQge0Zvcm1hdHRlZFR5cGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcyc7XG5pbXBvcnQge3R5cGVPZn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3ZhbHVlcyc7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IEZvcm1hdFNlY3Rpb25PdmVycmlkZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvZm9ybWF0X3NlY3Rpb25fb3ZlcnJpZGUnO1xuaW1wb3J0IEZvcm1hdEV4cHJlc3Npb24gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2Zvcm1hdCc7XG5pbXBvcnQgTGl0ZXJhbCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbGl0ZXJhbCc7XG5cbmNsYXNzIFN5bWJvbFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHN1cGVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgnaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgIT09ICdwb2ludCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWydpY29uLXJvdGF0aW9uLWFsaWdubWVudCddID0gJ21hcCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ2ljb24tcm90YXRpb24tYWxpZ25tZW50J10gPSAndmlld3BvcnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgIT09ICdwb2ludCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWyd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCddID0gJ21hcCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtcm90YXRpb24tYWxpZ25tZW50J10gPSAndmlld3BvcnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdW5zcGVjaWZpZWQsIGAqLXBpdGNoLWFsaWdubWVudGAgaW5oZXJpdHMgYCotcm90YXRpb24tYWxpZ25tZW50YFxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtcGl0Y2gtYWxpZ25tZW50J10gPSB0aGlzLmxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgnaWNvbi1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWydpY29uLXBpdGNoLWFsaWdubWVudCddID0gdGhpcy5sYXlvdXQuZ2V0KCdpY29uLXJvdGF0aW9uLWFsaWdubWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpID09PSAncG9pbnQnKSB7XG4gICAgICAgICAgICBjb25zdCB3cml0aW5nTW9kZXMgPSB0aGlzLmxheW91dC5nZXQoJ3RleHQtd3JpdGluZy1tb2RlJyk7XG4gICAgICAgICAgICBpZiAod3JpdGluZ01vZGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZXMsIHByZXNlcnZpbmcgb3JkZXJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWR1cGVkID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtIG9mIHdyaXRpbmdNb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVkdXBlZC5pbmRleE9mKG0pIDwgMCkgZGVkdXBlZC5wdXNoKG0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWyd0ZXh0LXdyaXRpbmctbW9kZSddID0gZGVkdXBlZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1sndGV4dC13cml0aW5nLW1vZGUnXSA9IFsnaG9yaXpvbnRhbCddO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0UGFpbnRPdmVycmlkZXMoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMobmFtZTogKiwgZmVhdHVyZTogRmVhdHVyZSwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5sYXlvdXQuZ2V0KG5hbWUpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICBjb25zdCB1bmV2YWx1YXRlZCA9IHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXNbbmFtZV07XG4gICAgICAgIGlmICghdW5ldmFsdWF0ZWQuaXNEYXRhRHJpdmVuKCkgJiYgIWlzRXhwcmVzc2lvbih1bmV2YWx1YXRlZC52YWx1ZSkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlVG9rZW5zKGZlYXR1cmUucHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNyZWF0ZUJ1Y2tldChwYXJhbWV0ZXJzOiBCdWNrZXRQYXJhbWV0ZXJzPCo+KSB7XG4gICAgICAgIHJldHVybiBuZXcgU3ltYm9sQnVja2V0KHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHF1ZXJ5UmFkaXVzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUoKTogYm9vbGVhbiB7XG4gICAgICAgIGFzc2VydChmYWxzZSk7IC8vIFNob3VsZCB0YWtlIGEgZGlmZmVyZW50IHBhdGggaW4gRmVhdHVyZUluZGV4XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBfc2V0UGFpbnRPdmVycmlkZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3Qgb3ZlcnJpZGFibGUgb2YgcHJvcGVydGllcy5wYWludC5vdmVycmlkYWJsZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghU3ltYm9sU3R5bGVMYXllci5oYXNQYWludE92ZXJyaWRlKHRoaXMubGF5b3V0LCBvdmVycmlkYWJsZSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG92ZXJyaWRlbiA9IHRoaXMucGFpbnQuZ2V0KG92ZXJyaWRhYmxlKTtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJyaWRlID0gbmV3IEZvcm1hdFNlY3Rpb25PdmVycmlkZShvdmVycmlkZW4pO1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVFeHByZXNzaW9uID0gbmV3IFN0eWxlRXhwcmVzc2lvbihvdmVycmlkZSwgb3ZlcnJpZGVuLnByb3BlcnR5LnNwZWNpZmljYXRpb24pO1xuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBudWxsO1xuICAgICAgICAgICAgaWYgKG92ZXJyaWRlbi52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnIHx8IG92ZXJyaWRlbi52YWx1ZS5raW5kID09PSAnc291cmNlJykge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSAobmV3IFpvb21Db25zdGFudEV4cHJlc3Npb24oJ3NvdXJjZScsIHN0eWxlRXhwcmVzc2lvbik6IFNvdXJjZUV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gKG5ldyBab29tRGVwZW5kZW50RXhwcmVzc2lvbignY29tcG9zaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVuLnZhbHVlLnpvb21TdG9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZW4udmFsdWUuX2ludGVycG9sYXRpb25UeXBlKTogQ29tcG9zaXRlRXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhaW50Ll92YWx1ZXNbb3ZlcnJpZGFibGVdID0gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZShvdmVycmlkZW4ucHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVuLnBhcmFtZXRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZTxULCBSPihuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+LCBuZXdWYWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0IHx8IG9sZFZhbHVlLmlzRGF0YURyaXZlbigpIHx8IG5ld1ZhbHVlLmlzRGF0YURyaXZlbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN5bWJvbFN0eWxlTGF5ZXIuaGFzUGFpbnRPdmVycmlkZSh0aGlzLmxheW91dCwgbmFtZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGhhc1BhaW50T3ZlcnJpZGUobGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz4sIHByb3BlcnR5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRleHRGaWVsZCA9IGxheW91dC5nZXQoJ3RleHQtZmllbGQnKTtcbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0aWVzLnBhaW50LnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgbGV0IGhhc092ZXJyaWRlcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGNoZWNrU2VjdGlvbnMgPSAoc2VjdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5vdmVycmlkZXMgJiYgcHJvcGVydHkub3ZlcnJpZGVzLmhhc092ZXJyaWRlKHNlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc092ZXJyaWRlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRleHRGaWVsZC52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnICYmIHRleHRGaWVsZC52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgY2hlY2tTZWN0aW9ucyh0ZXh0RmllbGQudmFsdWUudmFsdWUuc2VjdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRleHRGaWVsZC52YWx1ZS5raW5kID09PSAnc291cmNlJykge1xuXG4gICAgICAgICAgICBjb25zdCBjaGVja0V4cHJlc3Npb24gPSAoZXhwcmVzc2lvbjogRXhwcmVzc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPdmVycmlkZXMpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgTGl0ZXJhbCAmJiB0eXBlT2YoZXhwcmVzc2lvbi52YWx1ZSkgPT09IEZvcm1hdHRlZFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkOiBGb3JtYXR0ZWQgPSAoKGV4cHJlc3Npb24udmFsdWUpOiBhbnkpO1xuICAgICAgICAgICAgICAgICAgICBjaGVja1NlY3Rpb25zKGZvcm1hdHRlZC5zZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgRm9ybWF0RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBjaGVja1NlY3Rpb25zKGV4cHJlc3Npb24uc2VjdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uZWFjaENoaWxkKGNoZWNrRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZXhwcjogWm9vbUNvbnN0YW50RXhwcmVzc2lvbjwnc291cmNlJz4gPSAoKHRleHRGaWVsZC52YWx1ZSk6IGFueSk7XG4gICAgICAgICAgICBpZiAoZXhwci5fc3R5bGVFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tFeHByZXNzaW9uKGV4cHIuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoYXNPdmVycmlkZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGhhc1BhaW50T3ZlcnJpZGVzKGxheW91dDogUG9zc2libHlFdmFsdWF0ZWQ8TGF5b3V0UHJvcHM+KTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAoY29uc3Qgb3ZlcnJpZGFibGUgb2YgcHJvcGVydGllcy5wYWludC5vdmVycmlkYWJsZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChTeW1ib2xTdHlsZUxheWVyLmhhc1BhaW50T3ZlcnJpZGUobGF5b3V0LCBvdmVycmlkYWJsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2xTdHlsZUxheWVyO1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcImJhY2tncm91bmQtY29sb3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Q29sb3I+LFxuICAgIFwiYmFja2dyb3VuZC1wYXR0ZXJuXCI6IENyb3NzRmFkZWRQcm9wZXJ0eTxSZXNvbHZlZEltYWdlPixcbiAgICBcImJhY2tncm91bmQtb3BhY2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfYmFja2dyb3VuZFwiXVtcImJhY2tncm91bmQtY29sb3JcIl0pLFxuICAgIFwiYmFja2dyb3VuZC1wYXR0ZXJuXCI6IG5ldyBDcm9zc0ZhZGVkUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfYmFja2dyb3VuZFwiXVtcImJhY2tncm91bmQtcGF0dGVyblwiXSksXG4gICAgXCJiYWNrZ3JvdW5kLW9wYWNpdHlcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2JhY2tncm91bmRcIl1bXCJiYWNrZ3JvdW5kLW9wYWNpdHlcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7UGFpbnRQcm9wc30gZnJvbSAnLi9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIEJhY2tncm91bmRTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYWNrZ3JvdW5kU3R5bGVMYXllcjtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJyYXN0ZXItb3BhY2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwicmFzdGVyLWh1ZS1yb3RhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwicmFzdGVyLWJyaWdodG5lc3MtbWF4XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItc2F0dXJhdGlvblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwicmFzdGVyLWNvbnRyYXN0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItcmVzYW1wbGluZ1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcImxpbmVhclwiIHwgXCJuZWFyZXN0XCI+LFxuICAgIFwicmFzdGVyLWZhZGUtZHVyYXRpb25cIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcInJhc3Rlci1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItb3BhY2l0eVwiXSksXG4gICAgXCJyYXN0ZXItaHVlLXJvdGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLWh1ZS1yb3RhdGVcIl0pLFxuICAgIFwicmFzdGVyLWJyaWdodG5lc3MtbWluXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIl0pLFxuICAgIFwicmFzdGVyLWJyaWdodG5lc3MtbWF4XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIl0pLFxuICAgIFwicmFzdGVyLXNhdHVyYXRpb25cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1zYXR1cmF0aW9uXCJdKSxcbiAgICBcInJhc3Rlci1jb250cmFzdFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLWNvbnRyYXN0XCJdKSxcbiAgICBcInJhc3Rlci1yZXNhbXBsaW5nXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItcmVzYW1wbGluZ1wiXSksXG4gICAgXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLWZhZGUtZHVyYXRpb25cIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9yYXN0ZXJfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL3Jhc3Rlcl9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBSYXN0ZXJTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSYXN0ZXJTdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uLy4uL3VpL21hcCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbnR5cGUgQ3VzdG9tUmVuZGVyTWV0aG9kID0gKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIG1hdHJpeDogQXJyYXk8bnVtYmVyPikgPT4gdm9pZDtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGN1c3RvbSBzdHlsZSBsYXllcnMuIFRoaXMgaXMgYSBzcGVjaWZpY2F0aW9uIGZvclxuICogaW1wbGVtZW50ZXJzIHRvIG1vZGVsOiBpdCBpcyBub3QgYW4gZXhwb3J0ZWQgbWV0aG9kIG9yIGNsYXNzLlxuICpcbiAqIEN1c3RvbSBsYXllcnMgYWxsb3cgYSB1c2VyIHRvIHJlbmRlciBkaXJlY3RseSBpbnRvIHRoZSBtYXAncyBHTCBjb250ZXh0IHVzaW5nIHRoZSBtYXAncyBjYW1lcmEuXG4gKiBUaGVzZSBsYXllcnMgY2FuIGJlIGFkZGVkIGJldHdlZW4gYW55IHJlZ3VsYXIgbGF5ZXJzIHVzaW5nIHtAbGluayBNYXAjYWRkTGF5ZXJ9LlxuICpcbiAqIEN1c3RvbSBsYXllcnMgbXVzdCBoYXZlIGEgdW5pcXVlIGBpZGAgYW5kIG11c3QgaGF2ZSB0aGUgYHR5cGVgIG9mIGBcImN1c3RvbVwiYC5cbiAqIFRoZXkgbXVzdCBpbXBsZW1lbnQgYHJlbmRlcmAgYW5kIG1heSBpbXBsZW1lbnQgYHByZXJlbmRlcmAsIGBvbkFkZGAgYW5kIGBvblJlbW92ZWAuXG4gKiBUaGV5IGNhbiB0cmlnZ2VyIHJlbmRlcmluZyB1c2luZyB7QGxpbmsgTWFwI3RyaWdnZXJSZXBhaW50fVxuICogYW5kIHRoZXkgc2hvdWxkIGFwcHJvcHJpYXRlbHkgaGFuZGxlIHtAbGluayBNYXAuZXZlbnQ6d2ViZ2xjb250ZXh0bG9zdH0gYW5kXG4gKiB7QGxpbmsgTWFwLmV2ZW50OndlYmdsY29udGV4dHJlc3RvcmVkfS5cbiAqXG4gKiBUaGUgYHJlbmRlcmluZ01vZGVgIHByb3BlcnR5IGNvbnRyb2xzIHdoZXRoZXIgdGhlIGxheWVyIGlzIHRyZWF0ZWQgYXMgYSBgXCIyZFwiYCBvciBgXCIzZFwiYCBtYXAgbGF5ZXIuIFVzZTpcbiAqIC0gYFwicmVuZGVyaW5nTW9kZVwiOiBcIjNkXCJgIHRvIHVzZSB0aGUgZGVwdGggYnVmZmVyIGFuZCBzaGFyZSBpdCB3aXRoIG90aGVyIGxheWVyc1xuICogLSBgXCJyZW5kZXJpbmdNb2RlXCI6IFwiMmRcImAgdG8gYWRkIGEgbGF5ZXIgd2l0aCBubyBkZXB0aC4gSWYgeW91IG5lZWQgdG8gdXNlIHRoZSBkZXB0aCBidWZmZXIgZm9yIGEgYFwiMmRcImAgbGF5ZXIgeW91IG11c3QgdXNlIGFuIG9mZnNjcmVlblxuICogICBmcmFtZWJ1ZmZlciBhbmQge0BsaW5rIEN1c3RvbUxheWVySW50ZXJmYWNlI3ByZXJlbmRlcn1cbiAqXG4gKiBAaW50ZXJmYWNlIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgQSB1bmlxdWUgbGF5ZXIgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSBUaGUgbGF5ZXIncyB0eXBlLiBNdXN0IGJlIGBcImN1c3RvbVwiYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZW5kZXJpbmdNb2RlIEVpdGhlciBgXCIyZFwiYCBvciBgXCIzZFwiYC4gRGVmYXVsdHMgdG8gYFwiMmRcImAuXG4gKiBAZXhhbXBsZVxuICogLy8gQ3VzdG9tIGxheWVyIGltcGxlbWVudGVkIGFzIEVTNiBjbGFzc1xuICogY2xhc3MgTnVsbElzbGFuZExheWVyIHtcbiAqICAgICBjb25zdHJ1Y3RvcigpIHtcbiAqICAgICAgICAgdGhpcy5pZCA9ICdudWxsLWlzbGFuZCc7XG4gKiAgICAgICAgIHRoaXMudHlwZSA9ICdjdXN0b20nO1xuICogICAgICAgICB0aGlzLnJlbmRlcmluZ01vZGUgPSAnMmQnO1xuICogICAgIH1cbiAqXG4gKiAgICAgb25BZGQobWFwLCBnbCkge1xuICogICAgICAgICBjb25zdCB2ZXJ0ZXhTb3VyY2UgPSBgXG4gKiAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbiAqICAgICAgICAgdm9pZCBtYWluKCkge1xuICogICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoMC41LCAwLjUsIDAuMCwgMS4wKTtcbiAqICAgICAgICAgICAgIGdsX1BvaW50U2l6ZSA9IDIwLjA7XG4gKiAgICAgICAgIH1gO1xuICpcbiAqICAgICAgICAgY29uc3QgZnJhZ21lbnRTb3VyY2UgPSBgXG4gKiAgICAgICAgIHZvaWQgbWFpbigpIHtcbiAqICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAwLjAsIDAuMCwgMS4wKTtcbiAqICAgICAgICAgfWA7XG4gKlxuICogICAgICAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuVkVSVEVYX1NIQURFUik7XG4gKiAgICAgICAgIGdsLnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNvdXJjZSk7XG4gKiAgICAgICAgIGdsLmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTtcbiAqICAgICAgICAgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTtcbiAqICAgICAgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNvdXJjZSk7XG4gKiAgICAgICAgIGdsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuICpcbiAqICAgICAgICAgdGhpcy5wcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuICogICAgICAgICBnbC5hdHRhY2hTaGFkZXIodGhpcy5wcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpO1xuICogICAgICAgICBnbC5hdHRhY2hTaGFkZXIodGhpcy5wcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7XG4gKiAgICAgICAgIGdsLmxpbmtQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG4gKiAgICAgfVxuICpcbiAqICAgICByZW5kZXIoZ2wsIG1hdHJpeCkge1xuICogICAgICAgICBnbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG4gKiAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYoZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwgXCJ1X21hdHJpeFwiKSwgZmFsc2UsIG1hdHJpeCk7XG4gKiAgICAgICAgIGdsLmRyYXdBcnJheXMoZ2wuUE9JTlRTLCAwLCAxKTtcbiAqICAgICB9XG4gKiB9XG4gKlxuICogbWFwLm9uKCdsb2FkJywgZnVuY3Rpb24oKSB7XG4gKiAgICAgbWFwLmFkZExheWVyKG5ldyBOdWxsSXNsYW5kTGF5ZXIoKSk7XG4gKiB9KTtcbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgbGF5ZXIgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIE1hcCB3aXRoIHtAbGluayBNYXAjYWRkTGF5ZXJ9LiBUaGlzXG4gKiBnaXZlcyB0aGUgbGF5ZXIgYSBjaGFuY2UgdG8gaW5pdGlhbGl6ZSBnbCByZXNvdXJjZXMgYW5kIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVycy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBDdXN0b21MYXllckludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvbkFkZFxuICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwIHRoaXMgY3VzdG9tIGxheWVyIHdhcyBqdXN0IGFkZGVkIHRvLlxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBnbCBjb250ZXh0IGZvciB0aGUgbWFwLlxuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBsYXllciBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIE1hcCB3aXRoIHtAbGluayBNYXAjcmVtb3ZlTGF5ZXJ9LiBUaGlzXG4gKiBnaXZlcyB0aGUgbGF5ZXIgYSBjaGFuY2UgdG8gY2xlYW4gdXAgZ2wgcmVzb3VyY2VzIGFuZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgQ3VzdG9tTGF5ZXJJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgb25SZW1vdmVcbiAqIEBwYXJhbSB7TWFwfSBtYXAgVGhlIE1hcCB0aGlzIGN1c3RvbSBsYXllciB3YXMganVzdCBhZGRlZCB0by5cbiAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgZ2wgY29udGV4dCBmb3IgdGhlIG1hcC5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgZHVyaW5nIGEgcmVuZGVyIGZyYW1lIHRvIGFsbG93IGEgbGF5ZXIgdG8gcHJlcGFyZSByZXNvdXJjZXMgb3IgcmVuZGVyIGludG8gYSB0ZXh0dXJlLlxuICpcbiAqIFRoZSBsYXllciBjYW5ub3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGN1cnJlbnQgR0wgc3RhdGUgYW5kIG11c3QgYmluZCBhIGZyYW1lYnVmZmVyIGJlZm9yZSByZW5kZXJpbmcuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgQ3VzdG9tTGF5ZXJJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgcHJlcmVuZGVyXG4gKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIG1hcCdzIGdsIGNvbnRleHQuXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IG1hdHJpeCBUaGUgbWFwJ3MgY2FtZXJhIG1hdHJpeC4gSXQgcHJvamVjdHMgc3BoZXJpY2FsIG1lcmNhdG9yXG4gKiBjb29yZGluYXRlcyB0byBnbCBjb29yZGluYXRlcy4gVGhlIG1lcmNhdG9yIGNvb3JkaW5hdGUgYFswLCAwXWAgcmVwcmVzZW50cyB0aGVcbiAqIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgbWVyY2F0b3Igd29ybGQgYW5kIGBbMSwgMV1gIHJlcHJlc2VudHMgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIuIFdoZW5cbiAqIHRoZSBgcmVuZGVyaW5nTW9kZWAgaXMgYFwiM2RcImAsIHRoZSB6IGNvb3JkaW5hdGUgaXMgY29uZm9ybWFsLiBBIGJveCB3aXRoIGlkZW50aWNhbCB4LCB5LCBhbmQgelxuICogbGVuZ3RocyBpbiBtZXJjYXRvciB1bml0cyB3b3VsZCBiZSByZW5kZXJlZCBhcyBhIGN1YmUuIHtAbGluayBNZXJjYXRvckNvb3JkaW5hdGV9LmZyb21MYXRMbmdcbiAqIGNhbiBiZSB1c2VkIHRvIHByb2plY3QgYSBgTG5nTGF0YCB0byBhIG1lcmNhdG9yIGNvb3JkaW5hdGUuXG4gKi9cblxuLyoqXG4gKiBDYWxsZWQgZHVyaW5nIGEgcmVuZGVyIGZyYW1lIGFsbG93aW5nIHRoZSBsYXllciB0byBkcmF3IGludG8gdGhlIEdMIGNvbnRleHQuXG4gKlxuICogVGhlIGxheWVyIGNhbiBhc3N1bWUgYmxlbmRpbmcgYW5kIGRlcHRoIHN0YXRlIGlzIHNldCB0byBhbGxvdyB0aGUgbGF5ZXIgdG8gcHJvcGVybHlcbiAqIGJsZW5kIGFuZCBjbGlwIG90aGVyIGxheWVycy4gVGhlIGxheWVyIGNhbm5vdCBtYWtlIGFueSBvdGhlciBhc3N1bXB0aW9ucyBhYm91dCB0aGVcbiAqIGN1cnJlbnQgR0wgc3RhdGUuXG4gKlxuICogSWYgdGhlIGxheWVyIG5lZWRzIHRvIHJlbmRlciB0byBhIHRleHR1cmUsIGl0IHNob3VsZCBpbXBsZW1lbnQgdGhlIGBwcmVyZW5kZXJgIG1ldGhvZFxuICogdG8gZG8gdGhpcyBhbmQgb25seSB1c2UgdGhlIGByZW5kZXJgIG1ldGhvZCBmb3IgZHJhd2luZyBkaXJlY3RseSBpbnRvIHRoZSBtYWluIGZyYW1lYnVmZmVyLlxuICpcbiAqIFRoZSBibGVuZCBmdW5jdGlvbiBpcyBzZXQgdG8gYGdsLmJsZW5kRnVuYyhnbC5PTkUsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEpYC4gVGhpcyBleHBlY3RzXG4gKiBjb2xvcnMgdG8gYmUgcHJvdmlkZWQgaW4gcHJlbXVsdGlwbGllZCBhbHBoYSBmb3JtIHdoZXJlIHRoZSBgcmAsIGBnYCBhbmQgYGJgIHZhbHVlcyBhcmUgYWxyZWFkeVxuICogbXVsdGlwbGllZCBieSB0aGUgYGFgIHZhbHVlLiBJZiB5b3UgYXJlIHVuYWJsZSB0byBwcm92aWRlIGNvbG9ycyBpbiBwcmVtdWx0aXBsaWVkIGZvcm0geW91XG4gKiBtYXkgd2FudCB0byBjaGFuZ2UgdGhlIGJsZW5kIGZ1bmN0aW9uIHRvXG4gKiBgZ2wuYmxlbmRGdW5jU2VwYXJhdGUoZ2wuU1JDX0FMUEhBLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCBnbC5PTkUsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEpYC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBDdXN0b21MYXllckludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSByZW5kZXJcbiAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgbWFwJ3MgZ2wgY29udGV4dC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gbWF0cml4IFRoZSBtYXAncyBjYW1lcmEgbWF0cml4LiBJdCBwcm9qZWN0cyBzcGhlcmljYWwgbWVyY2F0b3JcbiAqIGNvb3JkaW5hdGVzIHRvIGdsIGNvb3JkaW5hdGVzLiBUaGUgc3BoZXJpY2FsIG1lcmNhdG9yIGNvb3JkaW5hdGUgYFswLCAwXWAgcmVwcmVzZW50cyB0aGVcbiAqIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgbWVyY2F0b3Igd29ybGQgYW5kIGBbMSwgMV1gIHJlcHJlc2VudHMgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIuIFdoZW5cbiAqIHRoZSBgcmVuZGVyaW5nTW9kZWAgaXMgYFwiM2RcImAsIHRoZSB6IGNvb3JkaW5hdGUgaXMgY29uZm9ybWFsLiBBIGJveCB3aXRoIGlkZW50aWNhbCB4LCB5LCBhbmQgelxuICogbGVuZ3RocyBpbiBtZXJjYXRvciB1bml0cyB3b3VsZCBiZSByZW5kZXJlZCBhcyBhIGN1YmUuIHtAbGluayBNZXJjYXRvckNvb3JkaW5hdGV9LmZyb21MYXRMbmdcbiAqIGNhbiBiZSB1c2VkIHRvIHByb2plY3QgYSBgTG5nTGF0YCB0byBhIG1lcmNhdG9yIGNvb3JkaW5hdGUuXG4gKi9cbmV4cG9ydCB0eXBlIEN1c3RvbUxheWVySW50ZXJmYWNlID0ge1xuICAgIGlkOiBzdHJpbmcsXG4gICAgdHlwZTogXCJjdXN0b21cIixcbiAgICByZW5kZXJpbmdNb2RlOiBcIjJkXCIgfCBcIjNkXCIsXG4gICAgcmVuZGVyOiBDdXN0b21SZW5kZXJNZXRob2QsXG4gICAgcHJlcmVuZGVyOiA/Q3VzdG9tUmVuZGVyTWV0aG9kLFxuICAgIG9uQWRkOiA/KG1hcDogTWFwLCBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSA9PiB2b2lkLFxuICAgIG9uUmVtb3ZlOiA/KG1hcDogTWFwLCBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSA9PiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUN1c3RvbVN0eWxlTGF5ZXIobGF5ZXJPYmplY3Q6IEN1c3RvbUxheWVySW50ZXJmYWNlKSB7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgY29uc3QgaWQgPSBsYXllck9iamVjdC5pZDtcblxuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBsYXllcnMuJHtpZH06IG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJpZFwiYFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXJPYmplY3QucmVuZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYGxheWVycy4ke2lkfTogbWlzc2luZyByZXF1aXJlZCBtZXRob2QgXCJyZW5kZXJcImBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGxheWVyT2JqZWN0LnJlbmRlcmluZ01vZGUgJiZcbiAgICAgICAgbGF5ZXJPYmplY3QucmVuZGVyaW5nTW9kZSAhPT0gJzJkJyAmJlxuICAgICAgICBsYXllck9iamVjdC5yZW5kZXJpbmdNb2RlICE9PSAnM2QnKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBsYXllcnMuJHtpZH06IHByb3BlcnR5IFwicmVuZGVyaW5nTW9kZVwiIG11c3QgYmUgZWl0aGVyIFwiMmRcIiBvciBcIjNkXCJgXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG59XG5cbmNsYXNzIEN1c3RvbVN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcblxuICAgIGltcGxlbWVudGF0aW9uOiBDdXN0b21MYXllckludGVyZmFjZTtcblxuICAgIGNvbnN0cnVjdG9yKGltcGxlbWVudGF0aW9uOiBDdXN0b21MYXllckludGVyZmFjZSkge1xuICAgICAgICBzdXBlcihpbXBsZW1lbnRhdGlvbiwge30pO1xuICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uID0gaW1wbGVtZW50YXRpb247XG4gICAgfVxuXG4gICAgaXMzRCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wbGVtZW50YXRpb24ucmVuZGVyaW5nTW9kZSA9PT0gJzNkJztcbiAgICB9XG5cbiAgICBoYXNPZmZzY3JlZW5QYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbXBsZW1lbnRhdGlvbi5wcmVyZW5kZXIgIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZSgpIHt9XG4gICAgdXBkYXRlVHJhbnNpdGlvbnMoKSB7fVxuICAgIGhhc1RyYW5zaXRpb24oKSB7fVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBhc3NlcnQoZmFsc2UsIFwiQ3VzdG9tIGxheWVycyBjYW5ub3QgYmUgc2VyaWFsaXplZFwiKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICBpZiAodGhpcy5pbXBsZW1lbnRhdGlvbi5vbkFkZCkge1xuICAgICAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbi5vbkFkZChtYXAsIG1hcC5wYWludGVyLmNvbnRleHQuZ2wpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25SZW1vdmUobWFwOiBNYXApIHtcbiAgICAgICAgaWYgKHRoaXMuaW1wbGVtZW50YXRpb24ub25SZW1vdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24ub25SZW1vdmUobWFwLCBtYXAucGFpbnRlci5jb250ZXh0LmdsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBjaXJjbGUgZnJvbSAnLi9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGhlYXRtYXAgZnJvbSAnLi9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyJztcbmltcG9ydCBoaWxsc2hhZGUgZnJvbSAnLi9zdHlsZV9sYXllci9oaWxsc2hhZGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGZpbGwgZnJvbSAnLi9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uIGZyb20gJy4vc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGxpbmUgZnJvbSAnLi9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcbmltcG9ydCBzeW1ib2wgZnJvbSAnLi9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGJhY2tncm91bmQgZnJvbSAnLi9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyJztcbmltcG9ydCByYXN0ZXIgZnJvbSAnLi9zdHlsZV9sYXllci9yYXN0ZXJfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IEN1c3RvbVN0eWxlTGF5ZXIgZnJvbSAnLi9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0N1c3RvbUxheWVySW50ZXJmYWNlfSBmcm9tICcuL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5cbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jb25zdCBzdWJjbGFzc2VzID0ge1xuICAgIGNpcmNsZSxcbiAgICBoZWF0bWFwLFxuICAgIGhpbGxzaGFkZSxcbiAgICBmaWxsLFxuICAgICdmaWxsLWV4dHJ1c2lvbic6IGZpbGxFeHRydXNpb24sXG4gICAgbGluZSxcbiAgICBzeW1ib2wsXG4gICAgYmFja2dyb3VuZCxcbiAgICByYXN0ZXJcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN0eWxlTGF5ZXIobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbiB8IEN1c3RvbUxheWVySW50ZXJmYWNlKSB7XG4gICAgaWYgKGxheWVyLnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3VzdG9tU3R5bGVMYXllcihsYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBzdWJjbGFzc2VzW2xheWVyLnR5cGVdKGxheWVyKTtcbiAgICB9XG59XG5cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcG90cGFjayhib3hlcykge1xuXG4gICAgLy8gY2FsY3VsYXRlIHRvdGFsIGJveCBhcmVhIGFuZCBtYXhpbXVtIGJveCB3aWR0aFxuICAgIGxldCBhcmVhID0gMDtcbiAgICBsZXQgbWF4V2lkdGggPSAwO1xuXG4gICAgZm9yIChjb25zdCBib3ggb2YgYm94ZXMpIHtcbiAgICAgICAgYXJlYSArPSBib3gudyAqIGJveC5oO1xuICAgICAgICBtYXhXaWR0aCA9IE1hdGgubWF4KG1heFdpZHRoLCBib3gudyk7XG4gICAgfVxuXG4gICAgLy8gc29ydCB0aGUgYm94ZXMgZm9yIGluc2VydGlvbiBieSBoZWlnaHQsIGRlc2NlbmRpbmdcbiAgICBib3hlcy5zb3J0KChhLCBiKSA9PiBiLmggLSBhLmgpO1xuXG4gICAgLy8gYWltIGZvciBhIHNxdWFyaXNoIHJlc3VsdGluZyBjb250YWluZXIsXG4gICAgLy8gc2xpZ2h0bHkgYWRqdXN0ZWQgZm9yIHN1Yi0xMDAlIHNwYWNlIHV0aWxpemF0aW9uXG4gICAgY29uc3Qgc3RhcnRXaWR0aCA9IE1hdGgubWF4KE1hdGguY2VpbChNYXRoLnNxcnQoYXJlYSAvIDAuOTUpKSwgbWF4V2lkdGgpO1xuXG4gICAgLy8gc3RhcnQgd2l0aCBhIHNpbmdsZSBlbXB0eSBzcGFjZSwgdW5ib3VuZGVkIGF0IHRoZSBib3R0b21cbiAgICBjb25zdCBzcGFjZXMgPSBbe3g6IDAsIHk6IDAsIHc6IHN0YXJ0V2lkdGgsIGg6IEluZmluaXR5fV07XG5cbiAgICBsZXQgd2lkdGggPSAwO1xuICAgIGxldCBoZWlnaHQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBib3ggb2YgYm94ZXMpIHtcbiAgICAgICAgLy8gbG9vayB0aHJvdWdoIHNwYWNlcyBiYWNrd2FyZHMgc28gdGhhdCB3ZSBjaGVjayBzbWFsbGVyIHNwYWNlcyBmaXJzdFxuICAgICAgICBmb3IgKGxldCBpID0gc3BhY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFjZSA9IHNwYWNlc1tpXTtcblxuICAgICAgICAgICAgLy8gbG9vayBmb3IgZW1wdHkgc3BhY2VzIHRoYXQgY2FuIGFjY29tbW9kYXRlIHRoZSBjdXJyZW50IGJveFxuICAgICAgICAgICAgaWYgKGJveC53ID4gc3BhY2UudyB8fCBib3guaCA+IHNwYWNlLmgpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBmb3VuZCB0aGUgc3BhY2U7IGFkZCB0aGUgYm94IHRvIGl0cyB0b3AtbGVmdCBjb3JuZXJcbiAgICAgICAgICAgIC8vIHwtLS0tLS0tfC0tLS0tLS18XG4gICAgICAgICAgICAvLyB8ICBib3ggIHwgICAgICAgfFxuICAgICAgICAgICAgLy8gfF9fX19fX198ICAgICAgIHxcbiAgICAgICAgICAgIC8vIHwgICAgICAgICBzcGFjZSB8XG4gICAgICAgICAgICAvLyB8X19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgYm94LnggPSBzcGFjZS54O1xuICAgICAgICAgICAgYm94LnkgPSBzcGFjZS55O1xuXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIGJveC55ICsgYm94LmgpO1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgYm94LnggKyBib3gudyk7XG5cbiAgICAgICAgICAgIGlmIChib3gudyA9PT0gc3BhY2UudyAmJiBib3guaCA9PT0gc3BhY2UuaCkge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIG1hdGNoZXMgdGhlIGJveCBleGFjdGx5OyByZW1vdmUgaXRcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0ID0gc3BhY2VzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGlmIChpIDwgc3BhY2VzLmxlbmd0aCkgc3BhY2VzW2ldID0gbGFzdDtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChib3guaCA9PT0gc3BhY2UuaCkge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIG1hdGNoZXMgdGhlIGJveCBoZWlnaHQ7IHVwZGF0ZSBpdCBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIC8vIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXxcbiAgICAgICAgICAgICAgICAvLyB8ICBib3ggIHwgdXBkYXRlZCBzcGFjZSB8XG4gICAgICAgICAgICAgICAgLy8gfF9fX19fX198X19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIHNwYWNlLnggKz0gYm94Lnc7XG4gICAgICAgICAgICAgICAgc3BhY2UudyAtPSBib3gudztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChib3gudyA9PT0gc3BhY2Uudykge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIG1hdGNoZXMgdGhlIGJveCB3aWR0aDsgdXBkYXRlIGl0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgLy8gfC0tLS0tLS0tLS0tLS0tLXxcbiAgICAgICAgICAgICAgICAvLyB8ICAgICAgYm94ICAgICAgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19fX19fX19fX198XG4gICAgICAgICAgICAgICAgLy8gfCB1cGRhdGVkIHNwYWNlIHxcbiAgICAgICAgICAgICAgICAvLyB8X19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIHNwYWNlLnkgKz0gYm94Lmg7XG4gICAgICAgICAgICAgICAgc3BhY2UuaCAtPSBib3guaDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGJveCBzcGxpdHMgdGhlIHNwYWNlIGludG8gdHdvIHNwYWNlc1xuICAgICAgICAgICAgICAgIC8vIHwtLS0tLS0tfC0tLS0tLS0tLS0tfFxuICAgICAgICAgICAgICAgIC8vIHwgIGJveCAgfCBuZXcgc3BhY2UgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19ffF9fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIC8vIHwgdXBkYXRlZCBzcGFjZSAgICAgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIHNwYWNlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgeDogc3BhY2UueCArIGJveC53LFxuICAgICAgICAgICAgICAgICAgICB5OiBzcGFjZS55LFxuICAgICAgICAgICAgICAgICAgICB3OiBzcGFjZS53IC0gYm94LncsXG4gICAgICAgICAgICAgICAgICAgIGg6IGJveC5oXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3BhY2UueSArPSBib3guaDtcbiAgICAgICAgICAgICAgICBzcGFjZS5oIC09IGJveC5oO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB3OiB3aWR0aCwgLy8gY29udGFpbmVyIHdpZHRoXG4gICAgICAgIGg6IGhlaWdodCwgLy8gY29udGFpbmVyIGhlaWdodFxuICAgICAgICBmaWxsOiAoYXJlYSAvICh3aWR0aCAqIGhlaWdodCkpIHx8IDAgLy8gc3BhY2UgdXRpbGl6YXRpb25cbiAgICB9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBwb3RwYWNrIGZyb20gJ3BvdHBhY2snO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUgSW1hZ2VNYW5hZ2VyIGZyb20gJy4vaW1hZ2VfbWFuYWdlcic7XG5pbXBvcnQgdHlwZSBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5cbmNvbnN0IHBhZGRpbmcgPSAxO1xuXG50eXBlIFJlY3QgPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB3OiBudW1iZXIsXG4gICAgaDogbnVtYmVyXG59O1xuXG5leHBvcnQgY2xhc3MgSW1hZ2VQb3NpdGlvbiB7XG4gICAgcGFkZGVkUmVjdDogUmVjdDtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgdmVyc2lvbjogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IocGFkZGVkUmVjdDogUmVjdCwge3BpeGVsUmF0aW8sIHZlcnNpb259OiBTdHlsZUltYWdlKSB7XG4gICAgICAgIHRoaXMucGFkZGVkUmVjdCA9IHBhZGRlZFJlY3Q7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgfVxuXG4gICAgZ2V0IHRsKCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5wYWRkZWRSZWN0LnggKyBwYWRkaW5nLFxuICAgICAgICAgICAgdGhpcy5wYWRkZWRSZWN0LnkgKyBwYWRkaW5nXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0IGJyKCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5wYWRkZWRSZWN0LnggKyB0aGlzLnBhZGRlZFJlY3QudyAtIHBhZGRpbmcsXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueSArIHRoaXMucGFkZGVkUmVjdC5oIC0gcGFkZGluZ1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldCB0bGJyKCk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy50bC5jb25jYXQodGhpcy5icik7XG4gICAgfVxuXG4gICAgZ2V0IGRpc3BsYXlTaXplKCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgKHRoaXMucGFkZGVkUmVjdC53IC0gcGFkZGluZyAqIDIpIC8gdGhpcy5waXhlbFJhdGlvLFxuICAgICAgICAgICAgKHRoaXMucGFkZGVkUmVjdC5oIC0gcGFkZGluZyAqIDIpIC8gdGhpcy5waXhlbFJhdGlvXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZUF0bGFzIHtcbiAgICBpbWFnZTogUkdCQUltYWdlO1xuICAgIGljb25Qb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn07XG4gICAgcGF0dGVyblBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufTtcbiAgICBoYXZlUmVuZGVyQ2FsbGJhY2tzOiBBcnJheTxzdHJpbmc+O1xuICAgIHVwbG9hZGVkOiA/Ym9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGljb25zOiB7W3N0cmluZ106IFN0eWxlSW1hZ2V9LCBwYXR0ZXJuczoge1tzdHJpbmddOiBTdHlsZUltYWdlfSkge1xuICAgICAgICBjb25zdCBpY29uUG9zaXRpb25zID0ge30sIHBhdHRlcm5Qb3NpdGlvbnMgPSB7fTtcbiAgICAgICAgdGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzID0gW107XG5cbiAgICAgICAgY29uc3QgYmlucyA9IFtdO1xuXG4gICAgICAgIHRoaXMuYWRkSW1hZ2VzKGljb25zLCBpY29uUG9zaXRpb25zLCBiaW5zKTtcbiAgICAgICAgdGhpcy5hZGRJbWFnZXMocGF0dGVybnMsIHBhdHRlcm5Qb3NpdGlvbnMsIGJpbnMpO1xuXG4gICAgICAgIGNvbnN0IHt3LCBofSA9IHBvdHBhY2soYmlucyk7XG4gICAgICAgIGNvbnN0IGltYWdlID0gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IHcgfHwgMSwgaGVpZ2h0OiBoIHx8IDF9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGljb25zKSB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBpY29uc1tpZF07XG4gICAgICAgICAgICBjb25zdCBiaW4gPSBpY29uUG9zaXRpb25zW2lkXS5wYWRkZWRSZWN0O1xuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogMCwgeTogMH0sIHt4OiBiaW4ueCArIHBhZGRpbmcsIHk6IGJpbi55ICsgcGFkZGluZ30sIHNyYy5kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gcGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHBhdHRlcm5zW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IHBhdHRlcm5Qb3NpdGlvbnNbaWRdLnBhZGRlZFJlY3Q7XG4gICAgICAgICAgICBjb25zdCB4ID0gYmluLnggKyBwYWRkaW5nLFxuICAgICAgICAgICAgICAgIHkgPSBiaW4ueSArIHBhZGRpbmcsXG4gICAgICAgICAgICAgICAgdyA9IHNyYy5kYXRhLndpZHRoLFxuICAgICAgICAgICAgICAgIGggPSBzcmMuZGF0YS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYy5kYXRhLCBpbWFnZSwge3g6IDAsIHk6IDB9LCB7eCwgeX0sIHNyYy5kYXRhKTtcbiAgICAgICAgICAgIC8vIEFkZCAxIHBpeGVsIHdyYXBwZWQgcGFkZGluZyBvbiBlYWNoIHNpZGUgb2YgdGhlIGltYWdlLlxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogMCwgeTogaCAtIDF9LCB7eCwgeTogeSAtIDF9LCB7d2lkdGg6IHcsIGhlaWdodDogMX0pOyAvLyBUXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCB5OiAgICAgMH0sIHt4LCB5OiB5ICsgaH0sIHt3aWR0aDogdywgaGVpZ2h0OiAxfSk7IC8vIEJcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYy5kYXRhLCBpbWFnZSwge3g6IHcgLSAxLCB5OiAwfSwge3g6IHggLSAxLCB5fSwge3dpZHRoOiAxLCBoZWlnaHQ6IGh9KTsgLy8gTFxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogMCwgICAgIHk6IDB9LCB7eDogeCArIHcsIHl9LCB7d2lkdGg6IDEsIGhlaWdodDogaH0pOyAvLyBSXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gICAgICAgIHRoaXMuaWNvblBvc2l0aW9ucyA9IGljb25Qb3NpdGlvbnM7XG4gICAgICAgIHRoaXMucGF0dGVyblBvc2l0aW9ucyA9IHBhdHRlcm5Qb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgYWRkSW1hZ2VzKGltYWdlczoge1tzdHJpbmddOiBTdHlsZUltYWdlfSwgcG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LCBiaW5zOiBBcnJheTxSZWN0Pikge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGltYWdlcykge1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gaW1hZ2VzW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgdzogc3JjLmRhdGEud2lkdGggKyAyICogcGFkZGluZyxcbiAgICAgICAgICAgICAgICBoOiBzcmMuZGF0YS5oZWlnaHQgKyAyICogcGFkZGluZyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBiaW5zLnB1c2goYmluKTtcbiAgICAgICAgICAgIHBvc2l0aW9uc1tpZF0gPSBuZXcgSW1hZ2VQb3NpdGlvbihiaW4sIHNyYyk7XG5cbiAgICAgICAgICAgIGlmIChzcmMuaGFzUmVuZGVyQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3MucHVzaChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXRjaFVwZGF0ZWRJbWFnZXMoaW1hZ2VNYW5hZ2VyOiBJbWFnZU1hbmFnZXIsIHRleHR1cmU6IFRleHR1cmUpIHtcbiAgICAgICAgaW1hZ2VNYW5hZ2VyLmRpc3BhdGNoUmVuZGVyQ2FsbGJhY2tzKHRoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcyk7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBpbWFnZU1hbmFnZXIudXBkYXRlZEltYWdlcykge1xuICAgICAgICAgICAgdGhpcy5wYXRjaFVwZGF0ZWRJbWFnZSh0aGlzLmljb25Qb3NpdGlvbnNbbmFtZV0sIGltYWdlTWFuYWdlci5nZXRJbWFnZShuYW1lKSwgdGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMucGF0dGVyblBvc2l0aW9uc1tuYW1lXSwgaW1hZ2VNYW5hZ2VyLmdldEltYWdlKG5hbWUpLCB0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBhdGNoVXBkYXRlZEltYWdlKHBvc2l0aW9uOiA/SW1hZ2VQb3NpdGlvbiwgaW1hZ2U6ID9TdHlsZUltYWdlLCB0ZXh0dXJlOiBUZXh0dXJlKSB7XG4gICAgICAgIGlmICghcG9zaXRpb24gfHwgIWltYWdlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uLnZlcnNpb24gPT09IGltYWdlLnZlcnNpb24pIHJldHVybjtcblxuICAgICAgICBwb3NpdGlvbi52ZXJzaW9uID0gaW1hZ2UudmVyc2lvbjtcbiAgICAgICAgY29uc3QgW3gsIHldID0gcG9zaXRpb24udGw7XG4gICAgICAgIHRleHR1cmUudXBkYXRlKGltYWdlLmRhdGEsIHVuZGVmaW5lZCwge3gsIHl9KTtcbiAgICB9XG5cbn1cblxucmVnaXN0ZXIoJ0ltYWdlUG9zaXRpb24nLCBJbWFnZVBvc2l0aW9uKTtcbnJlZ2lzdGVyKCdJbWFnZUF0bGFzJywgSW1hZ2VBdGxhcyk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmNvbnN0IHtIVE1MSW1hZ2VFbGVtZW50LCBIVE1MQ2FudmFzRWxlbWVudCwgSFRNTFZpZGVvRWxlbWVudCwgSW1hZ2VEYXRhfSA9IHdpbmRvdztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtSR0JBSW1hZ2UsIEFscGhhSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuXG5leHBvcnQgdHlwZSBUZXh0dXJlRm9ybWF0ID1cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnUkdCQSc+XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0FMUEhBJz47XG5leHBvcnQgdHlwZSBUZXh0dXJlRmlsdGVyID1cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnTElORUFSJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnTElORUFSX01JUE1BUF9ORUFSRVNUJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnTkVBUkVTVCc+O1xuZXhwb3J0IHR5cGUgVGV4dHVyZVdyYXAgPVxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdSRVBFQVQnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdDTEFNUF9UT19FREdFJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnTUlSUk9SRURfUkVQRUFUJz47XG5cbnR5cGUgRW1wdHlJbWFnZSA9IHtcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGRhdGE6IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgVGV4dHVyZUltYWdlID1cbiAgICB8IFJHQkFJbWFnZVxuICAgIHwgQWxwaGFJbWFnZVxuICAgIHwgSFRNTEltYWdlRWxlbWVudFxuICAgIHwgSFRNTENhbnZhc0VsZW1lbnRcbiAgICB8IEhUTUxWaWRlb0VsZW1lbnRcbiAgICB8IEltYWdlRGF0YVxuICAgIHwgRW1wdHlJbWFnZTtcblxuY2xhc3MgVGV4dHVyZSB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICBzaXplOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIHRleHR1cmU6IFdlYkdMVGV4dHVyZTtcbiAgICBmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XG4gICAgZmlsdGVyOiA/VGV4dHVyZUZpbHRlcjtcbiAgICB3cmFwOiA/VGV4dHVyZVdyYXA7XG4gICAgdXNlTWlwbWFwOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgaW1hZ2U6IFRleHR1cmVJbWFnZSwgZm9ybWF0OiBUZXh0dXJlRm9ybWF0LCBvcHRpb25zOiA/eyBwcmVtdWx0aXBseT86IGJvb2xlYW4sIHVzZU1pcG1hcD86IGJvb2xlYW4gfSkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gY29udGV4dC5nbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlKGltYWdlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICB1cGRhdGUoaW1hZ2U6IFRleHR1cmVJbWFnZSwgb3B0aW9uczogP3twcmVtdWx0aXBseT86IGJvb2xlYW4sIHVzZU1pcG1hcD86IGJvb2xlYW59LCBwb3NpdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSkge1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBpbWFnZTtcbiAgICAgICAgY29uc3QgcmVzaXplID0gKCF0aGlzLnNpemUgfHwgdGhpcy5zaXplWzBdICE9PSB3aWR0aCB8fCB0aGlzLnNpemVbMV0gIT09IGhlaWdodCkgJiYgIXBvc2l0aW9uO1xuICAgICAgICBjb25zdCB7Y29udGV4dH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7Z2x9ID0gY29udGV4dDtcblxuICAgICAgICB0aGlzLnVzZU1pcG1hcCA9IEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLnVzZU1pcG1hcCk7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG5cbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0KGZhbHNlKTtcbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrLnNldCgxKTtcbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQodGhpcy5mb3JtYXQgPT09IGdsLlJHQkEgJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMucHJlbXVsdGlwbHkgIT09IGZhbHNlKSk7XG5cbiAgICAgICAgaWYgKHJlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zaXplID0gW3dpZHRoLCBoZWlnaHRdO1xuXG4gICAgICAgICAgICBpZiAoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlLmRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7eCwgeX0gPSBwb3NpdGlvbiB8fCB7eDogMCwgeTogMH07XG4gICAgICAgICAgICBpZiAoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB4LCB5LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgaW1hZ2UuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy51c2VNaXBtYXAgJiYgdGhpcy5pc1NpemVQb3dlck9mVHdvKCkpIHtcbiAgICAgICAgICAgIGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmluZChmaWx0ZXI6IFRleHR1cmVGaWx0ZXIsIHdyYXA6IFRleHR1cmVXcmFwLCBtaW5GaWx0ZXI6ID9UZXh0dXJlRmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHtjb250ZXh0fSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHtnbH0gPSBjb250ZXh0O1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xuXG4gICAgICAgIGlmIChtaW5GaWx0ZXIgPT09IGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCAmJiAhdGhpcy5pc1NpemVQb3dlck9mVHdvKCkpIHtcbiAgICAgICAgICAgIG1pbkZpbHRlciA9IGdsLkxJTkVBUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXIgIT09IHRoaXMuZmlsdGVyKSB7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBtaW5GaWx0ZXIgfHwgZmlsdGVyKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdyYXAgIT09IHRoaXMud3JhcCkge1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgd3JhcCk7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCB3cmFwKTtcbiAgICAgICAgICAgIHRoaXMud3JhcCA9IHdyYXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1NpemVQb3dlck9mVHdvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaXplWzBdID09PSB0aGlzLnNpemVbMV0gJiYgKE1hdGgubG9nKHRoaXMuc2l6ZVswXSkgLyBNYXRoLkxOMikgJSAxID09PSAwO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gKG51bGw6IGFueSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlO1xuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBiZjtcblxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0Jyk7XG5cbmZ1bmN0aW9uIFBiZihidWYpIHtcbiAgICB0aGlzLmJ1ZiA9IEFycmF5QnVmZmVyLmlzVmlldyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoYnVmKSA/IGJ1ZiA6IG5ldyBVaW50OEFycmF5KGJ1ZiB8fCAwKTtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy50eXBlID0gMDtcbiAgICB0aGlzLmxlbmd0aCA9IHRoaXMuYnVmLmxlbmd0aDtcbn1cblxuUGJmLlZhcmludCAgPSAwOyAvLyB2YXJpbnQ6IGludDMyLCBpbnQ2NCwgdWludDMyLCB1aW50NjQsIHNpbnQzMiwgc2ludDY0LCBib29sLCBlbnVtXG5QYmYuRml4ZWQ2NCA9IDE7IC8vIDY0LWJpdDogZG91YmxlLCBmaXhlZDY0LCBzZml4ZWQ2NFxuUGJmLkJ5dGVzICAgPSAyOyAvLyBsZW5ndGgtZGVsaW1pdGVkOiBzdHJpbmcsIGJ5dGVzLCBlbWJlZGRlZCBtZXNzYWdlcywgcGFja2VkIHJlcGVhdGVkIGZpZWxkc1xuUGJmLkZpeGVkMzIgPSA1OyAvLyAzMi1iaXQ6IGZsb2F0LCBmaXhlZDMyLCBzZml4ZWQzMlxuXG52YXIgU0hJRlRfTEVGVF8zMiA9ICgxIDw8IDE2KSAqICgxIDw8IDE2KSxcbiAgICBTSElGVF9SSUdIVF8zMiA9IDEgLyBTSElGVF9MRUZUXzMyO1xuXG4vLyBUaHJlc2hvbGQgY2hvc2VuIGJhc2VkIG9uIGJvdGggYmVuY2htYXJraW5nIGFuZCBrbm93bGVkZ2UgYWJvdXQgYnJvd3NlciBzdHJpbmdcbi8vIGRhdGEgc3RydWN0dXJlcyAod2hpY2ggY3VycmVudGx5IHN3aXRjaCBzdHJ1Y3R1cmUgdHlwZXMgYXQgMTIgYnl0ZXMgb3IgbW9yZSlcbnZhciBURVhUX0RFQ09ERVJfTUlOX0xFTkdUSCA9IDEyO1xudmFyIHV0ZjhUZXh0RGVjb2RlciA9IHR5cGVvZiBUZXh0RGVjb2RlciA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogbmV3IFRleHREZWNvZGVyKCd1dGY4Jyk7XG5cblBiZi5wcm90b3R5cGUgPSB7XG5cbiAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5idWYgPSBudWxsO1xuICAgIH0sXG5cbiAgICAvLyA9PT0gUkVBRElORyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgcmVhZEZpZWxkczogZnVuY3Rpb24ocmVhZEZpZWxkLCByZXN1bHQsIGVuZCkge1xuICAgICAgICBlbmQgPSBlbmQgfHwgdGhpcy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5yZWFkVmFyaW50KCksXG4gICAgICAgICAgICAgICAgdGFnID0gdmFsID4+IDMsXG4gICAgICAgICAgICAgICAgc3RhcnRQb3MgPSB0aGlzLnBvcztcblxuICAgICAgICAgICAgdGhpcy50eXBlID0gdmFsICYgMHg3O1xuICAgICAgICAgICAgcmVhZEZpZWxkKHRhZywgcmVzdWx0LCB0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBzdGFydFBvcykgdGhpcy5za2lwKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcmVhZE1lc3NhZ2U6IGZ1bmN0aW9uKHJlYWRGaWVsZCwgcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRGaWVsZHMocmVhZEZpZWxkLCByZXN1bHQsIHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MpO1xuICAgIH0sXG5cbiAgICByZWFkRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkVUludDMyKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRTRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkSW50MzIodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgLy8gNjQtYml0IGludCBoYW5kbGluZyBpcyBiYXNlZCBvbiBnaXRodWIuY29tL2Rwdy9ub2RlLWJ1ZmZlci1tb3JlLWludHMgKE1JVC1saWNlbnNlZClcblxuICAgIHJlYWRGaXhlZDY0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zKSArIHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zICsgNCkgKiBTSElGVF9MRUZUXzMyO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkU0ZpeGVkNjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gcmVhZFVJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MpICsgcmVhZEludDMyKHRoaXMuYnVmLCB0aGlzLnBvcyArIDQpICogU0hJRlRfTEVGVF8zMjtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZEZsb2F0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IGllZWU3NTQucmVhZCh0aGlzLmJ1ZiwgdGhpcy5wb3MsIHRydWUsIDIzLCA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZERvdWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSBpZWVlNzU0LnJlYWQodGhpcy5idWYsIHRoaXMucG9zLCB0cnVlLCA1MiwgOCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRWYXJpbnQ6IGZ1bmN0aW9uKGlzU2lnbmVkKSB7XG4gICAgICAgIHZhciBidWYgPSB0aGlzLmJ1ZixcbiAgICAgICAgICAgIHZhbCwgYjtcblxuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgID0gIGIgJiAweDdmOyAgICAgICAgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCA3OyAgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCAxNDsgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCAyMTsgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zXTsgICB2YWwgfD0gKGIgJiAweDBmKSA8PCAyODtcblxuICAgICAgICByZXR1cm4gcmVhZFZhcmludFJlbWFpbmRlcih2YWwsIGlzU2lnbmVkLCB0aGlzKTtcbiAgICB9LFxuXG4gICAgcmVhZFZhcmludDY0OiBmdW5jdGlvbigpIHsgLy8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2Mi4wLjFcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFZhcmludCh0cnVlKTtcbiAgICB9LFxuXG4gICAgcmVhZFNWYXJpbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbnVtID0gdGhpcy5yZWFkVmFyaW50KCk7XG4gICAgICAgIHJldHVybiBudW0gJSAyID09PSAxID8gKG51bSArIDEpIC8gLTIgOiBudW0gLyAyOyAvLyB6aWd6YWcgZW5jb2RpbmdcbiAgICB9LFxuXG4gICAgcmVhZEJvb2xlYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnJlYWRWYXJpbnQoKSk7XG4gICAgfSxcblxuICAgIHJlYWRTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcztcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zO1xuICAgICAgICB0aGlzLnBvcyA9IGVuZDtcblxuICAgICAgICBpZiAoZW5kIC0gcG9zID49IFRFWFRfREVDT0RFUl9NSU5fTEVOR1RIICYmIHV0ZjhUZXh0RGVjb2Rlcikge1xuICAgICAgICAgICAgLy8gbG9uZ2VyIHN0cmluZ3MgYXJlIGZhc3Qgd2l0aCB0aGUgYnVpbHQtaW4gYnJvd3NlciBUZXh0RGVjb2RlciBBUElcbiAgICAgICAgICAgIHJldHVybiByZWFkVXRmOFRleHREZWNvZGVyKHRoaXMuYnVmLCBwb3MsIGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvcnQgc3RyaW5ncyBhcmUgZmFzdCB3aXRoIG91ciBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgICAgICAgcmV0dXJuIHJlYWRVdGY4KHRoaXMuYnVmLCBwb3MsIGVuZCk7XG4gICAgfSxcblxuICAgIHJlYWRCeXRlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLFxuICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsIGVuZCk7XG4gICAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH0sXG5cbiAgICAvLyB2ZXJib3NlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOyBkb2Vzbid0IGFmZmVjdCBnemlwcGVkIHNpemVcblxuICAgIHJlYWRQYWNrZWRWYXJpbnQ6IGZ1bmN0aW9uKGFyciwgaXNTaWduZWQpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkVmFyaW50KGlzU2lnbmVkKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkVmFyaW50KGlzU2lnbmVkKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkU1ZhcmludDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRCb29sZWFuOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEZsb2F0OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRG91YmxlOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRG91YmxlKCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRGaXhlZDMyOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZFNGaXhlZDMyOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRml4ZWQ2NDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRml4ZWQ2NCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRTRml4ZWQ2NDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG5cbiAgICBza2lwOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB2YWwgJiAweDc7XG4gICAgICAgIGlmICh0eXBlID09PSBQYmYuVmFyaW50KSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gPiAweDdmKSB7fVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSBQYmYuQnl0ZXMpIHRoaXMucG9zID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcztcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gUGJmLkZpeGVkMzIpIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFBiZi5GaXhlZDY0KSB0aGlzLnBvcyArPSA4O1xuICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcignVW5pbXBsZW1lbnRlZCB0eXBlOiAnICsgdHlwZSk7XG4gICAgfSxcblxuICAgIC8vID09PSBXUklUSU5HID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICB3cml0ZVRhZzogZnVuY3Rpb24odGFnLCB0eXBlKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoKHRhZyA8PCAzKSB8IHR5cGUpO1xuICAgIH0sXG5cbiAgICByZWFsbG9jOiBmdW5jdGlvbihtaW4pIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDE2O1xuXG4gICAgICAgIHdoaWxlIChsZW5ndGggPCB0aGlzLnBvcyArIG1pbikgbGVuZ3RoICo9IDI7XG5cbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgICAgICAgYnVmLnNldCh0aGlzLmJ1Zik7XG4gICAgICAgICAgICB0aGlzLmJ1ZiA9IGJ1ZjtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5wb3M7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmLnN1YmFycmF5KDAsIHRoaXMubGVuZ3RoKTtcbiAgICB9LFxuXG4gICAgd3JpdGVGaXhlZDMyOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCB2YWwsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVTRml4ZWQzMjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgfSxcblxuICAgIHdyaXRlRml4ZWQ2NDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg4KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsICYgLTEsIHRoaXMucG9zKTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgTWF0aC5mbG9vcih2YWwgKiBTSElGVF9SSUdIVF8zMiksIHRoaXMucG9zICsgNCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgfSxcblxuICAgIHdyaXRlU0ZpeGVkNjQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIHZhbCAmIC0xLCB0aGlzLnBvcyk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIE1hdGguZmxvb3IodmFsICogU0hJRlRfUklHSFRfMzIpLCB0aGlzLnBvcyArIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgIH0sXG5cbiAgICB3cml0ZVZhcmludDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHZhbCA9ICt2YWwgfHwgMDtcblxuICAgICAgICBpZiAodmFsID4gMHhmZmZmZmZmIHx8IHZhbCA8IDApIHtcbiAgICAgICAgICAgIHdyaXRlQmlnVmFyaW50KHZhbCwgdGhpcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG5cbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAgICAgICAgICAgdmFsICYgMHg3ZiAgfCAodmFsID4gMHg3ZiA/IDB4ODAgOiAwKTsgaWYgKHZhbCA8PSAweDdmKSByZXR1cm47XG4gICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+PSA3KSAmIDB4N2YpIHwgKHZhbCA+IDB4N2YgPyAweDgwIDogMCk7IGlmICh2YWwgPD0gMHg3ZikgcmV0dXJuO1xuICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICgodmFsID4+Pj0gNykgJiAweDdmKSB8ICh2YWwgPiAweDdmID8gMHg4MCA6IDApOyBpZiAodmFsIDw9IDB4N2YpIHJldHVybjtcbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAgICh2YWwgPj4+IDcpICYgMHg3ZjtcbiAgICB9LFxuXG4gICAgd3JpdGVTVmFyaW50OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludCh2YWwgPCAwID8gLXZhbCAqIDIgLSAxIDogdmFsICogMik7XG4gICAgfSxcblxuICAgIHdyaXRlQm9vbGVhbjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih2YWwpKTtcbiAgICB9LFxuXG4gICAgd3JpdGVTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICAgICAgdGhpcy5yZWFsbG9jKHN0ci5sZW5ndGggKiA0KTtcblxuICAgICAgICB0aGlzLnBvcysrOyAvLyByZXNlcnZlIDEgYnl0ZSBmb3Igc2hvcnQgc3RyaW5nIGxlbmd0aFxuXG4gICAgICAgIHZhciBzdGFydFBvcyA9IHRoaXMucG9zO1xuICAgICAgICAvLyB3cml0ZSB0aGUgc3RyaW5nIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIgYW5kIHNlZSBob3cgbXVjaCB3YXMgd3JpdHRlblxuICAgICAgICB0aGlzLnBvcyA9IHdyaXRlVXRmOCh0aGlzLmJ1Ziwgc3RyLCB0aGlzLnBvcyk7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgICAgIGlmIChsZW4gPj0gMHg4MCkgbWFrZVJvb21Gb3JFeHRyYUxlbmd0aChzdGFydFBvcywgbGVuLCB0aGlzKTtcblxuICAgICAgICAvLyBmaW5hbGx5LCB3cml0ZSB0aGUgbWVzc2FnZSBsZW5ndGggaW4gdGhlIHJlc2VydmVkIHBsYWNlIGFuZCByZXN0b3JlIHRoZSBwb3NpdGlvblxuICAgICAgICB0aGlzLnBvcyA9IHN0YXJ0UG9zIC0gMTtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChsZW4pO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgfSxcblxuICAgIHdyaXRlRmxvYXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG4gICAgICAgIGllZWU3NTQud3JpdGUodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MsIHRydWUsIDIzLCA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVEb3VibGU6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIGllZWU3NTQud3JpdGUodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MsIHRydWUsIDUyLCA4KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICB9LFxuXG4gICAgd3JpdGVCeXRlczogZnVuY3Rpb24oYnVmZmVyKSB7XG4gICAgICAgIHZhciBsZW4gPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucmVhbGxvYyhsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9IGJ1ZmZlcltpXTtcbiAgICB9LFxuXG4gICAgd3JpdGVSYXdNZXNzYWdlOiBmdW5jdGlvbihmbiwgb2JqKSB7XG4gICAgICAgIHRoaXMucG9zKys7IC8vIHJlc2VydmUgMSBieXRlIGZvciBzaG9ydCBtZXNzYWdlIGxlbmd0aFxuXG4gICAgICAgIC8vIHdyaXRlIHRoZSBtZXNzYWdlIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIgYW5kIHNlZSBob3cgbXVjaCB3YXMgd3JpdHRlblxuICAgICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnBvcztcbiAgICAgICAgZm4ob2JqLCB0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMucG9zIC0gc3RhcnRQb3M7XG5cbiAgICAgICAgaWYgKGxlbiA+PSAweDgwKSBtYWtlUm9vbUZvckV4dHJhTGVuZ3RoKHN0YXJ0UG9zLCBsZW4sIHRoaXMpO1xuXG4gICAgICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSBtZXNzYWdlIGxlbmd0aCBpbiB0aGUgcmVzZXJ2ZWQgcGxhY2UgYW5kIHJlc3RvcmUgdGhlIHBvc2l0aW9uXG4gICAgICAgIHRoaXMucG9zID0gc3RhcnRQb3MgLSAxO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucG9zICs9IGxlbjtcbiAgICB9LFxuXG4gICAgd3JpdGVNZXNzYWdlOiBmdW5jdGlvbih0YWcsIGZuLCBvYmopIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVSYXdNZXNzYWdlKGZuLCBvYmopO1xuICAgIH0sXG5cbiAgICB3cml0ZVBhY2tlZFZhcmludDogICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFZhcmludCwgYXJyKTsgICB9LFxuICAgIHdyaXRlUGFja2VkU1ZhcmludDogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkU1ZhcmludCwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRCb29sZWFuOiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRCb29sZWFuLCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZEZsb2F0OiAgICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEZsb2F0LCBhcnIpOyAgICB9LFxuICAgIHdyaXRlUGFja2VkRG91YmxlOiAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRG91YmxlLCBhcnIpOyAgIH0sXG4gICAgd3JpdGVQYWNrZWRGaXhlZDMyOiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRGaXhlZDMyLCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZFNGaXhlZDMyOiBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFNGaXhlZDMyLCBhcnIpOyB9LFxuICAgIHdyaXRlUGFja2VkRml4ZWQ2NDogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRml4ZWQ2NCwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRTRml4ZWQ2NDogZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRTRml4ZWQ2NCwgYXJyKTsgfSxcblxuICAgIHdyaXRlQnl0ZXNGaWVsZDogZnVuY3Rpb24odGFnLCBidWZmZXIpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVCeXRlcyhidWZmZXIpO1xuICAgIH0sXG4gICAgd3JpdGVGaXhlZDMyRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQzMik7XG4gICAgICAgIHRoaXMud3JpdGVGaXhlZDMyKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNGaXhlZDMyRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQzMik7XG4gICAgICAgIHRoaXMud3JpdGVTRml4ZWQzMih2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVGaXhlZDY0RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVGaXhlZDY0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNGaXhlZDY0RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVTRml4ZWQ2NCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVWYXJpbnRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5WYXJpbnQpO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNWYXJpbnRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5WYXJpbnQpO1xuICAgICAgICB0aGlzLndyaXRlU1ZhcmludCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVTdHJpbmdGaWVsZDogZnVuY3Rpb24odGFnLCBzdHIpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVTdHJpbmcoc3RyKTtcbiAgICB9LFxuICAgIHdyaXRlRmxvYXRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDMyKTtcbiAgICAgICAgdGhpcy53cml0ZUZsb2F0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZURvdWJsZUZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkNjQpO1xuICAgICAgICB0aGlzLndyaXRlRG91YmxlKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZUJvb2xlYW5GaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludEZpZWxkKHRhZywgQm9vbGVhbih2YWwpKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiByZWFkVmFyaW50UmVtYWluZGVyKGwsIHMsIHApIHtcbiAgICB2YXIgYnVmID0gcC5idWYsXG4gICAgICAgIGgsIGI7XG5cbiAgICBiID0gYnVmW3AucG9zKytdOyBoICA9IChiICYgMHg3MCkgPj4gNDsgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAzOyAgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4N2YpIDw8IDEwOyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcbiAgICBiID0gYnVmW3AucG9zKytdOyBoIHw9IChiICYgMHg3ZikgPDwgMTc7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAyNDsgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4MDEpIDw8IDMxOyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcblxuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXMnKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBhY2tlZEVuZChwYmYpIHtcbiAgICByZXR1cm4gcGJmLnR5cGUgPT09IFBiZi5CeXRlcyA/XG4gICAgICAgIHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zIDogcGJmLnBvcyArIDE7XG59XG5cbmZ1bmN0aW9uIHRvTnVtKGxvdywgaGlnaCwgaXNTaWduZWQpIHtcbiAgICBpZiAoaXNTaWduZWQpIHtcbiAgICAgICAgcmV0dXJuIGhpZ2ggKiAweDEwMDAwMDAwMCArIChsb3cgPj4+IDApO1xuICAgIH1cblxuICAgIHJldHVybiAoKGhpZ2ggPj4+IDApICogMHgxMDAwMDAwMDApICsgKGxvdyA+Pj4gMCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmlnVmFyaW50KHZhbCwgcGJmKSB7XG4gICAgdmFyIGxvdywgaGlnaDtcblxuICAgIGlmICh2YWwgPj0gMCkge1xuICAgICAgICBsb3cgID0gKHZhbCAlIDB4MTAwMDAwMDAwKSB8IDA7XG4gICAgICAgIGhpZ2ggPSAodmFsIC8gMHgxMDAwMDAwMDApIHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb3cgID0gfigtdmFsICUgMHgxMDAwMDAwMDApO1xuICAgICAgICBoaWdoID0gfigtdmFsIC8gMHgxMDAwMDAwMDApO1xuXG4gICAgICAgIGlmIChsb3cgXiAweGZmZmZmZmZmKSB7XG4gICAgICAgICAgICBsb3cgPSAobG93ICsgMSkgfCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG93ID0gMDtcbiAgICAgICAgICAgIGhpZ2ggPSAoaGlnaCArIDEpIHwgMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWwgPj0gMHgxMDAwMDAwMDAwMDAwMDAwMCB8fCB2YWwgPCAtMHgxMDAwMDAwMDAwMDAwMDAwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIHZhcmludCBkb2VzblxcJ3QgZml0IGludG8gMTAgYnl0ZXMnKTtcbiAgICB9XG5cbiAgICBwYmYucmVhbGxvYygxMCk7XG5cbiAgICB3cml0ZUJpZ1ZhcmludExvdyhsb3csIGhpZ2gsIHBiZik7XG4gICAgd3JpdGVCaWdWYXJpbnRIaWdoKGhpZ2gsIHBiZik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmlnVmFyaW50TG93KGxvdywgaGlnaCwgcGJmKSB7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zXSAgID0gbG93ICYgMHg3Zjtcbn1cblxuZnVuY3Rpb24gd3JpdGVCaWdWYXJpbnRIaWdoKGhpZ2gsIHBiZikge1xuICAgIHZhciBsc2IgPSAoaGlnaCAmIDB4MDcpIDw8IDQ7XG5cbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gfD0gbHNiICAgICAgICAgfCAoKGhpZ2ggPj4+PSAzKSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3ZiB8ICgoaGlnaCA+Pj49IDcpID8gMHg4MCA6IDApOyBpZiAoIWhpZ2gpIHJldHVybjtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gID0gaGlnaCAmIDB4N2YgfCAoKGhpZ2ggPj4+PSA3KSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3Zjtcbn1cblxuZnVuY3Rpb24gbWFrZVJvb21Gb3JFeHRyYUxlbmd0aChzdGFydFBvcywgbGVuLCBwYmYpIHtcbiAgICB2YXIgZXh0cmFMZW4gPVxuICAgICAgICBsZW4gPD0gMHgzZmZmID8gMSA6XG4gICAgICAgIGxlbiA8PSAweDFmZmZmZiA/IDIgOlxuICAgICAgICBsZW4gPD0gMHhmZmZmZmZmID8gMyA6IE1hdGguZmxvb3IoTWF0aC5sb2cobGVuKSAvIChNYXRoLkxOMiAqIDcpKTtcblxuICAgIC8vIGlmIDEgYnl0ZSBpc24ndCBlbm91Z2ggZm9yIGVuY29kaW5nIG1lc3NhZ2UgbGVuZ3RoLCBzaGlmdCB0aGUgZGF0YSB0byB0aGUgcmlnaHRcbiAgICBwYmYucmVhbGxvYyhleHRyYUxlbik7XG4gICAgZm9yICh2YXIgaSA9IHBiZi5wb3MgLSAxOyBpID49IHN0YXJ0UG9zOyBpLS0pIHBiZi5idWZbaSArIGV4dHJhTGVuXSA9IHBiZi5idWZbaV07XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGFja2VkVmFyaW50KGFyciwgcGJmKSAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVZhcmludChhcnJbaV0pOyAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU1ZhcmludChhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNWYXJpbnQoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRmxvYXQoYXJyLCBwYmYpICAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZsb2F0KGFycltpXSk7ICAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRG91YmxlKGFyciwgcGJmKSAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZURvdWJsZShhcnJbaV0pOyAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkQm9vbGVhbihhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUJvb2xlYW4oYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRml4ZWQzMihhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZpeGVkMzIoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU0ZpeGVkMzIoYXJyLCBwYmYpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNGaXhlZDMyKGFycltpXSk7IH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRml4ZWQ2NChhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZpeGVkNjQoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU0ZpeGVkNjQoYXJyLCBwYmYpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNGaXhlZDY0KGFycltpXSk7IH1cblxuLy8gQnVmZmVyIGNvZGUgYmVsb3cgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlciwgTUlULWxpY2Vuc2VkXG5cbmZ1bmN0aW9uIHJlYWRVSW50MzIoYnVmLCBwb3MpIHtcbiAgICByZXR1cm4gKChidWZbcG9zXSkgfFxuICAgICAgICAoYnVmW3BvcyArIDFdIDw8IDgpIHxcbiAgICAgICAgKGJ1Zltwb3MgKyAyXSA8PCAxNikpICtcbiAgICAgICAgKGJ1Zltwb3MgKyAzXSAqIDB4MTAwMDAwMCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzIoYnVmLCB2YWwsIHBvcykge1xuICAgIGJ1Zltwb3NdID0gdmFsO1xuICAgIGJ1Zltwb3MgKyAxXSA9ICh2YWwgPj4+IDgpO1xuICAgIGJ1Zltwb3MgKyAyXSA9ICh2YWwgPj4+IDE2KTtcbiAgICBidWZbcG9zICsgM10gPSAodmFsID4+PiAyNCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQzMihidWYsIHBvcykge1xuICAgIHJldHVybiAoKGJ1Zltwb3NdKSB8XG4gICAgICAgIChidWZbcG9zICsgMV0gPDwgOCkgfFxuICAgICAgICAoYnVmW3BvcyArIDJdIDw8IDE2KSkgK1xuICAgICAgICAoYnVmW3BvcyArIDNdIDw8IDI0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFV0ZjgoYnVmLCBwb3MsIGVuZCkge1xuICAgIHZhciBzdHIgPSAnJztcbiAgICB2YXIgaSA9IHBvcztcblxuICAgIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgICAgIHZhciBiMCA9IGJ1ZltpXTtcbiAgICAgICAgdmFyIGMgPSBudWxsOyAvLyBjb2RlcG9pbnRcbiAgICAgICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPVxuICAgICAgICAgICAgYjAgPiAweEVGID8gNCA6XG4gICAgICAgICAgICBiMCA+IDB4REYgPyAzIDpcbiAgICAgICAgICAgIGIwID4gMHhCRiA/IDIgOiAxO1xuXG4gICAgICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA+IGVuZCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIGIxLCBiMiwgYjM7XG5cbiAgICAgICAgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChiMCA8IDB4ODApIHtcbiAgICAgICAgICAgICAgICBjID0gYjA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNQZXJTZXF1ZW5jZSA9PT0gMikge1xuICAgICAgICAgICAgYjEgPSBidWZbaSArIDFdO1xuICAgICAgICAgICAgaWYgKChiMSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICAgICAgYyA9IChiMCAmIDB4MUYpIDw8IDB4NiB8IChiMSAmIDB4M0YpO1xuICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4N0YpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDMpIHtcbiAgICAgICAgICAgIGIxID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICAgIGIyID0gYnVmW2kgKyAyXTtcbiAgICAgICAgICAgIGlmICgoYjEgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjIgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSAoYjAgJiAweEYpIDw8IDB4QyB8IChiMSAmIDB4M0YpIDw8IDB4NiB8IChiMiAmIDB4M0YpO1xuICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4N0ZGIHx8IChjID49IDB4RDgwMCAmJiBjIDw9IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDQpIHtcbiAgICAgICAgICAgIGIxID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICAgIGIyID0gYnVmW2kgKyAyXTtcbiAgICAgICAgICAgIGIzID0gYnVmW2kgKyAzXTtcbiAgICAgICAgICAgIGlmICgoYjEgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjIgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjMgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSAoYjAgJiAweEYpIDw8IDB4MTIgfCAoYjEgJiAweDNGKSA8PCAweEMgfCAoYjIgJiAweDNGKSA8PCAweDYgfCAoYjMgJiAweDNGKTtcbiAgICAgICAgICAgICAgICBpZiAoYyA8PSAweEZGRkYgfHwgYyA+PSAweDExMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICBjID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYyA9IDB4RkZGRDtcbiAgICAgICAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoYyA+IDB4RkZGRikge1xuICAgICAgICAgICAgYyAtPSAweDEwMDAwO1xuICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG4gICAgICAgICAgICBjID0gMHhEQzAwIHwgYyAmIDB4M0ZGO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiByZWFkVXRmOFRleHREZWNvZGVyKGJ1ZiwgcG9zLCBlbmQpIHtcbiAgICByZXR1cm4gdXRmOFRleHREZWNvZGVyLmRlY29kZShidWYuc3ViYXJyYXkocG9zLCBlbmQpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVVdGY4KGJ1Ziwgc3RyLCBwb3MpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYywgbGVhZDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSk7IC8vIGNvZGUgcG9pbnRcblxuICAgICAgICBpZiAoYyA+IDB4RDdGRiAmJiBjIDwgMHhFMDAwKSB7XG4gICAgICAgICAgICBpZiAobGVhZCkge1xuICAgICAgICAgICAgICAgIGlmIChjIDwgMHhEQzAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEVGO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRjtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkQ7XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPSBjO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjID0gbGVhZCAtIDB4RDgwMCA8PCAxMCB8IGMgLSAweERDMDAgfCAweDEwMDAwO1xuICAgICAgICAgICAgICAgICAgICBsZWFkID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjID4gMHhEQkZGIHx8IChpICsgMSA9PT0gc3RyLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4RUY7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJGO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZWFkID0gYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobGVhZCkge1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4RUY7XG4gICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRjtcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJEO1xuICAgICAgICAgICAgbGVhZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4NiB8IDB4QzA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjIDwgMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweEMgfCAweEUwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4MTIgfCAweEYwO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweEMgJiAweDNGIHwgMHg4MDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHg2ICYgMHgzRiB8IDB4ODA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZbcG9zKytdID0gYyAmIDB4M0YgfCAweDgwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwb3M7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0FscGhhSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuXG5pbXBvcnQgUHJvdG9idWYgZnJvbSAncGJmJztcbmNvbnN0IGJvcmRlciA9IDM7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuL3N0eWxlX2dseXBoJztcblxuZnVuY3Rpb24gcmVhZEZvbnRzdGFja3ModGFnOiBudW1iZXIsIGdseXBoczogQXJyYXk8U3R5bGVHbHlwaD4sIHBiZjogUHJvdG9idWYpIHtcbiAgICBpZiAodGFnID09PSAxKSB7XG4gICAgICAgIHBiZi5yZWFkTWVzc2FnZShyZWFkRm9udHN0YWNrLCBnbHlwaHMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVhZEZvbnRzdGFjayh0YWc6IG51bWJlciwgZ2x5cGhzOiBBcnJheTxTdHlsZUdseXBoPiwgcGJmOiBQcm90b2J1Zikge1xuICAgIGlmICh0YWcgPT09IDMpIHtcbiAgICAgICAgY29uc3Qge2lkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCwgYWR2YW5jZX0gPSBwYmYucmVhZE1lc3NhZ2UocmVhZEdseXBoLCB7fSk7XG4gICAgICAgIGdseXBocy5wdXNoKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgYml0bWFwOiBuZXcgQWxwaGFJbWFnZSh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoICsgMiAqIGJvcmRlcixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCArIDIgKiBib3JkZXJcbiAgICAgICAgICAgIH0sIGJpdG1hcCksXG4gICAgICAgICAgICBtZXRyaWNzOiB7d2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCBhZHZhbmNlfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRHbHlwaCh0YWc6IG51bWJlciwgZ2x5cGg6IE9iamVjdCwgcGJmOiBQcm90b2J1Zikge1xuICAgIGlmICh0YWcgPT09IDEpIGdseXBoLmlkID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDIpIGdseXBoLmJpdG1hcCA9IHBiZi5yZWFkQnl0ZXMoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDMpIGdseXBoLndpZHRoID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDQpIGdseXBoLmhlaWdodCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA1KSBnbHlwaC5sZWZ0ID0gcGJmLnJlYWRTVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA2KSBnbHlwaC50b3AgPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDcpIGdseXBoLmFkdmFuY2UgPSBwYmYucmVhZFZhcmludCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZGF0YTogQXJyYXlCdWZmZXIgfCBVaW50OEFycmF5KTogQXJyYXk8U3R5bGVHbHlwaD4ge1xuICAgIHJldHVybiBuZXcgUHJvdG9idWYoZGF0YSkucmVhZEZpZWxkcyhyZWFkRm9udHN0YWNrcywgW10pO1xufVxuXG5leHBvcnQgY29uc3QgR0xZUEhfUEJGX0JPUkRFUiA9IGJvcmRlcjtcbiIsIi8vIEBmbG93XG5cbi8qKlxuICogSW52b2tlcyB0aGUgd3JhcHBlZCBmdW5jdGlvbiBpbiBhIG5vbi1ibG9ja2luZyB3YXkgd2hlbiB0cmlnZ2VyKCkgaXMgY2FsbGVkLiBJbnZvY2F0aW9uIHJlcXVlc3RzXG4gKiBhcmUgaWdub3JlZCB1bnRpbCB0aGUgZnVuY3Rpb24gd2FzIGFjdHVhbGx5IGludm9rZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVGhyb3R0bGVkSW52b2tlciB7XG4gICAgX2NoYW5uZWw6IE1lc3NhZ2VDaGFubmVsO1xuICAgIF90cmlnZ2VyZWQ6IGJvb2xlYW47XG4gICAgX2NhbGxiYWNrOiBGdW5jdGlvblxuXG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbC5wb3J0Mi5vbm1lc3NhZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmlnZ2VyKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3RyaWdnZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBkZWxldGUgdGhpcy5fY2hhbm5lbDtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSAoKSA9PiB7fTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRocm90dGxlZEludm9rZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge3NlcmlhbGl6ZSwgZGVzZXJpYWxpemV9IGZyb20gJy4vd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgVGhyb3R0bGVkSW52b2tlciBmcm9tICcuL3Rocm90dGxlZF9pbnZva2VyJztcblxuaW1wb3J0IHR5cGUge1RyYW5zZmVyYWJsZX0gZnJvbSAnLi4vdHlwZXMvdHJhbnNmZXJhYmxlJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW0FjdG9yIGRlc2lnbiBwYXR0ZXJuXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FjdG9yX21vZGVsKVxuICogdGhhdCBtYWludGFpbnMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFzeW5jaHJvbm91cyB0YXNrcyBhbmQgdGhlIG9iamVjdHNcbiAqIHRoYXQgc3BpbiB0aGVtIG9mZiAtIGluIHRoaXMgY2FzZSwgdGFza3MgbGlrZSBwYXJzaW5nIHBhcnRzIG9mIHN0eWxlcyxcbiAqIG93bmVkIGJ5IHRoZSBzdHlsZXNcbiAqXG4gKiBAcGFyYW0ge1dlYldvcmtlcn0gdGFyZ2V0XG4gKiBAcGFyYW0ge1dlYldvcmtlcn0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG1hcElkIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBNYXAgaW5zdGFuY2UgdXNpbmcgdGhpcyBBY3Rvci5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEFjdG9yIHtcbiAgICB0YXJnZXQ6IGFueTtcbiAgICBwYXJlbnQ6IGFueTtcbiAgICBtYXBJZDogP251bWJlcjtcbiAgICBjYWxsYmFja3M6IHsgbnVtYmVyOiBhbnkgfTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdGFza3M6IHsgbnVtYmVyOiBhbnkgfTtcbiAgICB0YXNrUXVldWU6IEFycmF5PG51bWJlcj47XG4gICAgY2FuY2VsQ2FsbGJhY2tzOiB7IG51bWJlcjogQ2FuY2VsYWJsZSB9O1xuICAgIGludm9rZXI6IFRocm90dGxlZEludm9rZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQ6IGFueSwgcGFyZW50OiBhbnksIG1hcElkOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5tYXBJZCA9IG1hcElkO1xuICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IHt9O1xuICAgICAgICB0aGlzLnRhc2tzID0ge307XG4gICAgICAgIHRoaXMudGFza1F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuY2FuY2VsQ2FsbGJhY2tzID0ge307XG4gICAgICAgIGJpbmRBbGwoWydyZWNlaXZlJywgJ3Byb2Nlc3MnXSwgdGhpcyk7XG4gICAgICAgIHRoaXMuaW52b2tlciA9IG5ldyBUaHJvdHRsZWRJbnZva2VyKHRoaXMucHJvY2Vzcyk7XG4gICAgICAgIHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZW5kcyBhIG1lc3NhZ2UgZnJvbSBhIG1haW4tdGhyZWFkIG1hcCB0byBhIFdvcmtlciBvciBmcm9tIGEgV29ya2VyIGJhY2sgdG9cbiAgICAgKiBhIG1haW4tdGhyZWFkIG1hcCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgbWV0aG9kIHRvIGludm9rZSBvciAnW3NvdXJjZS10eXBlXS5bc291cmNlLW5hbWVdLm5hbWUnIGZvciBhIG1ldGhvZCBvbiBhIFdvcmtlclNvdXJjZS5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0TWFwSWQgQSBwYXJ0aWN1bGFyIG1hcElkIHRvIHdoaWNoIHRvIHNlbmQgdGhpcyBtZXNzYWdlLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2VuZCh0eXBlOiBzdHJpbmcsIGRhdGE6IG1peGVkLCBjYWxsYmFjazogP0Z1bmN0aW9uLCB0YXJnZXRNYXBJZDogP3N0cmluZyk6ID9DYW5jZWxhYmxlIHtcbiAgICAgICAgLy8gV2UncmUgdXNpbmcgYSBzdHJpbmcgSUQgaW5zdGVhZCBvZiBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgYmVpbmcgdXNlZCBhcyBvYmplY3Qga2V5c1xuICAgICAgICAvLyBhbnl3YXksIGFuZCB0aHVzIHN0cmluZ2lmaWVkIGltcGxpY2l0bHkuIFdlIHVzZSByYW5kb20gSURzIGJlY2F1c2UgYW4gYWN0b3IgbWF5IHJlY2VpdmVcbiAgICAgICAgLy8gbWVzc2FnZSBmcm9tIG11bHRpcGxlIG90aGVyIGFjdG9ycyB3aGljaCBjb3VsZCBydW4gaW4gZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiBBXG4gICAgICAgIC8vIGxpbmVhcmx5IGluY3JlYXNpbmcgSUQgY291bGQgcHJvZHVjZSBjb2xsaXNpb25zLlxuICAgICAgICBjb25zdCBpZCA9IE1hdGgucm91bmQoKE1hdGgucmFuZG9tKCkgKiAxZTE4KSkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygwLCAxMCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3NbaWRdID0gY2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmZmVyczogQXJyYXk8VHJhbnNmZXJhYmxlPiA9IFtdO1xuICAgICAgICB0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBoYXNDYWxsYmFjazogISFjYWxsYmFjayxcbiAgICAgICAgICAgIHRhcmdldE1hcElkLFxuICAgICAgICAgICAgc291cmNlTWFwSWQ6IHRoaXMubWFwSWQsXG4gICAgICAgICAgICBkYXRhOiBzZXJpYWxpemUoZGF0YSwgYnVmZmVycylcbiAgICAgICAgfSwgYnVmZmVycyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBjYWxsYmFjayB0byBudWxsIHNvIHRoYXQgaXQgbmV2ZXIgZmlyZXMgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgYWJvcnRlZC5cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJzxjYW5jZWw+JyxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWFwSWQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcElkOiB0aGlzLm1hcElkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVjZWl2ZShtZXNzYWdlOiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1lc3NhZ2UuZGF0YSxcbiAgICAgICAgICAgIGlkID0gZGF0YS5pZDtcblxuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS50YXJnZXRNYXBJZCAmJiB0aGlzLm1hcElkICE9PSBkYXRhLnRhcmdldE1hcElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnPGNhbmNlbD4nKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9yaWdpbmFsIHJlcXVlc3QgZnJvbSB0aGUgcXVldWUuIFRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiBpdFxuICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4ga2lja2VkIG9mZiB5ZXQuIFRoZSBpZCB3aWxsIHJlbWFpbiBpbiB0aGUgcXVldWUsIGJ1dCBiZWNhdXNlXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIHRhc2ssIGl0IHdpbGwgYmUgZHJvcHBlZCBvbmNlIGl0J3MgdGltZSB0byBleGVjdXRlIGl0LlxuICAgICAgICAgICAgZGVsZXRlIHRoaXMudGFza3NbaWRdO1xuICAgICAgICAgICAgY29uc3QgY2FuY2VsID0gdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB0YXNrcyB0aGF0IHdlIG5lZWQgdG8gcHJvY2VzcyBiZWZvcmUgYWN0dWFsbHkgcHJvY2Vzc2luZyB0aGVtLiBUaGlzXG4gICAgICAgICAgICAvLyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgcmVjZWl2aW5nIG1lc3NhZ2VzLCBhbmQgaW4gcGFydGljdWxhcixcbiAgICAgICAgICAgIC8vIDxjYW5jZWw+IG1lc3NhZ2VzLiBTb21lIHRhc2tzIG1heSB0YWtlIGEgd2hpbGUgaW4gdGhlIHdvcmtlciB0aHJlYWQsIHNvIGJlZm9yZVxuICAgICAgICAgICAgLy8gZXhlY3V0aW5nIHRoZSBuZXh0IHRhc2sgaW4gb3VyIHF1ZXVlLCBwb3N0TWVzc2FnZSBwcmVlbXB0cyB0aGlzIGFuZCA8Y2FuY2VsPlxuICAgICAgICAgICAgLy8gbWVzc2FnZXMgY2FuIGJlIHByb2Nlc3NlZC4gV2UncmUgdXNpbmcgYSBNZXNzYWdlQ2hhbm5lbCBvYmplY3QgdG8gZ2V0IHRocm90dGxlIHRoZVxuICAgICAgICAgICAgLy8gcHJvY2VzcygpIGZsb3cgdG8gb25lIGF0IGEgdGltZS5cbiAgICAgICAgICAgIHRoaXMudGFza3NbaWRdID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMudGFza1F1ZXVlLnB1c2goaWQpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VyLnRyaWdnZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3MoKSB7XG4gICAgICAgIGlmICghdGhpcy50YXNrUXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRhc2tRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBjb25zdCB0YXNrID0gdGhpcy50YXNrc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnRhc2tzW2lkXTtcbiAgICAgICAgLy8gU2NoZWR1bGUgYW5vdGhlciBwcm9jZXNzIGNhbGwgaWYgd2Uga25vdyB0aGVyZSdzIG1vcmUgdG8gcHJvY2VzcyBfYmVmb3JlXyBpbnZva2luZyB0aGVcbiAgICAgICAgLy8gY3VycmVudCB0YXNrLiBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IHByb2Nlc3NpbmcgY29udGludWVzIGV2ZW4gaWYgdGhlIGN1cnJlbnQgdGFza1xuICAgICAgICAvLyBkb2Vzbid0IGV4ZWN1dGUgc3VjY2Vzc2Z1bGx5LlxuICAgICAgICBpZiAodGhpcy50YXNrUXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZXIudHJpZ2dlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFzaykge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHRhc2sgSUQgZG9lc24ndCBoYXZlIGFzc29jaWF0ZWQgdGFzayBkYXRhIGFueW1vcmUsIGl0IHdhcyBjYW5jZWxlZC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXNrLnR5cGUgPT09ICc8cmVzcG9uc2U+Jykge1xuICAgICAgICAgICAgLy8gVGhlIGRvbmUoKSBmdW5jdGlvbiBpbiB0aGUgY291bnRlcnBhcnQgaGFzIGJlZW4gY2FsbGVkLCBhbmQgd2UgYXJlIG5vd1xuICAgICAgICAgICAgLy8gZmlyaW5nIHRoZSBjYWxsYmFjayBpbiB0aGUgb3JpZ2luYXRpbmcgYWN0b3IsIGlmIHRoZXJlIGlzIG9uZS5cbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGdldCBhIHJlc3BvbnNlLCBidXQgZG9uJ3QgaGF2ZSBhIGNhbGxiYWNrLCB0aGUgcmVxdWVzdCB3YXMgY2FuY2VsZWQuXG4gICAgICAgICAgICAgICAgaWYgKHRhc2suZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGVzZXJpYWxpemUodGFzay5lcnJvcikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGRlc2VyaWFsaXplKHRhc2suZGF0YSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSB0YXNrLmhhc0NhbGxiYWNrID8gKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBidWZmZXJzOiBBcnJheTxUcmFuc2ZlcmFibGU+ID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJzxyZXNwb25zZT4nLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBJZDogdGhpcy5tYXBJZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVyciA/IHNlcmlhbGl6ZShlcnIpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogc2VyaWFsaXplKGRhdGEsIGJ1ZmZlcnMpXG4gICAgICAgICAgICAgICAgfSwgYnVmZmVycyk7XG4gICAgICAgICAgICB9IDogKF8pID0+IHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IChkZXNlcmlhbGl6ZSh0YXNrLmRhdGEpOiBhbnkpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50W3Rhc2sudHlwZV0pIHtcbiAgICAgICAgICAgICAgICAvLyB0YXNrLnR5cGUgPT0gJ2xvYWRUaWxlJywgJ3JlbW92ZVRpbGUnLCBldGMuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB0aGlzLnBhcmVudFt0YXNrLnR5cGVdKHRhc2suc291cmNlTWFwSWQsIHBhcmFtcywgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIHRhc2sudHlwZSA9PSBzb3VyY2V0eXBlLm1ldGhvZFxuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0YXNrLnR5cGUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY29wZSA9ICh0aGlzLnBhcmVudDogYW55KS5nZXRXb3JrZXJTb3VyY2UodGFzay5zb3VyY2VNYXBJZCwga2V5c1swXSwgcGFyYW1zLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBzY29wZVtrZXlzWzFdXShwYXJhbXMsIGRvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBObyBmdW5jdGlvbiB3YXMgZm91bmQuXG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uICR7dGFzay50eXBlfWApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFjb21wbGV0ZWQgJiYgY2FsbGJhY2sgJiYgY2FsbGJhY2suY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3dzIGNhbmNlbGluZyB0aGUgdGFzayBhcyBsb25nIGFzIGl0IGhhc24ndCBiZWVuIGNvbXBsZXRlZCB5ZXQuXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdID0gY2FsbGJhY2suY2FuY2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB0aGlzLmludm9rZXIucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmUsIGZhbHNlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFjdG9yO1xuIiwiZXhwb3J0IHsgZ2V0VVJMLCBnZXRUaWxlQkJveCwgZ2V0TWVyY0Nvb3JkcyB9O1xuXG5cbi8qKlxuICogZ2V0VVJMXG4gKlxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBiYXNlVXJsICBCYXNlIHVybCBvZiB0aGUgV01TIHNlcnZlclxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBsYXllciAgICBMYXllciBuYW1lXG4gKiBAcGFyYW0gICAge051bWJlcn0gIHggICAgICAgIFRpbGUgY29vcmRpbmF0ZSB4XG4gKiBAcGFyYW0gICAge051bWJlcn0gIHkgICAgICAgIFRpbGUgY29vcmRpbmF0ZSB5XG4gKiBAcGFyYW0gICAge051bWJlcn0gIHogICAgICAgIFRpbGUgem9vbVxuICogQHBhcmFtICAgIHtPYmplY3R9ICBbb3B0aW9uc11cbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgW29wdGlvbnMuZm9ybWF0PSdpbWFnZS9wbmcnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy5zZXJ2aWNlPSdXTVMnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy52ZXJzaW9uPScxLjEuMSddXG4gKiBAcGFyYW0gICAge1N0cmluZ30gIFtvcHRpb25zLnJlcXVlc3Q9J0dldE1hcCddXG4gKiBAcGFyYW0gICAge1N0cmluZ30gIFtvcHRpb25zLnNycz0nRVBTRzozODU3J11cbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgW29wdGlvbnMud2lkdGg9JzI1NiddXG4gKiBAcGFyYW0gICAge051bWJlcn0gIFtvcHRpb25zLmhlaWdodD0nMjU2J11cbiAqIEByZXR1cm5zICB7U3RyaW5nfSAgdXJsXG4gKiBAZXhhbXBsZVxuICogdmFyIGJhc2VVcmwgPSAnaHR0cDovL2dlb2RhdGEuc3RhdGUubmoudXMvaW1hZ2VyeXdtcy9OYXR1cmFsMjAxNSc7XG4gKiB2YXIgbGF5ZXIgPSAnTmF0dXJhbDIwMTUnO1xuICogdmFyIHVybCA9IHdob290cy5nZXRVUkwoYmFzZVVybCwgbGF5ZXIsIDE1NDMwOCwgMTk3MTY3LCAxOSk7XG4gKi9cbmZ1bmN0aW9uIGdldFVSTChiYXNlVXJsLCBsYXllciwgeCwgeSwgeiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgdmFyIHVybCA9IGJhc2VVcmwgKyAnPycgKyBbXG4gICAgICAgICdiYm94PScgICAgKyBnZXRUaWxlQkJveCh4LCB5LCB6KSxcbiAgICAgICAgJ2Zvcm1hdD0nICArIChvcHRpb25zLmZvcm1hdCB8fCAnaW1hZ2UvcG5nJyksXG4gICAgICAgICdzZXJ2aWNlPScgKyAob3B0aW9ucy5zZXJ2aWNlIHx8ICdXTVMnKSxcbiAgICAgICAgJ3ZlcnNpb249JyArIChvcHRpb25zLnZlcnNpb24gfHwgJzEuMS4xJyksXG4gICAgICAgICdyZXF1ZXN0PScgKyAob3B0aW9ucy5yZXF1ZXN0IHx8ICdHZXRNYXAnKSxcbiAgICAgICAgJ3Nycz0nICAgICArIChvcHRpb25zLnNycyB8fCAnRVBTRzozODU3JyksXG4gICAgICAgICd3aWR0aD0nICAgKyAob3B0aW9ucy53aWR0aCB8fCAyNTYpLFxuICAgICAgICAnaGVpZ2h0PScgICsgKG9wdGlvbnMuaGVpZ2h0IHx8IDI1NiksXG4gICAgICAgICdsYXllcnM9JyAgKyBsYXllclxuICAgIF0uam9pbignJicpO1xuXG4gICAgcmV0dXJuIHVybDtcbn1cblxuXG4vKipcbiAqIGdldFRpbGVCQm94XG4gKlxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB4ICBUaWxlIGNvb3JkaW5hdGUgeFxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB5ICBUaWxlIGNvb3JkaW5hdGUgeVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB6ICBUaWxlIHpvb21cbiAqIEByZXR1cm5zICB7U3RyaW5nfSAgU3RyaW5nIG9mIHRoZSBib3VuZGluZyBib3hcbiAqL1xuZnVuY3Rpb24gZ2V0VGlsZUJCb3goeCwgeSwgeikge1xuICAgIC8vIGZvciBHb29nbGUvT1NNIHRpbGUgc2NoZW1lIHdlIG5lZWQgdG8gYWx0ZXIgdGhlIHlcbiAgICB5ID0gKE1hdGgucG93KDIsIHopIC0geSAtIDEpO1xuXG4gICAgdmFyIG1pbiA9IGdldE1lcmNDb29yZHMoeCAqIDI1NiwgeSAqIDI1NiwgeiksXG4gICAgICAgIG1heCA9IGdldE1lcmNDb29yZHMoKHggKyAxKSAqIDI1NiwgKHkgKyAxKSAqIDI1Niwgeik7XG5cbiAgICByZXR1cm4gbWluWzBdICsgJywnICsgbWluWzFdICsgJywnICsgbWF4WzBdICsgJywnICsgbWF4WzFdO1xufVxuXG5cbi8qKlxuICogZ2V0TWVyY0Nvb3Jkc1xuICpcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeCAgUGl4ZWwgY29vcmRpbmF0ZSB4XG4gKiBAcGFyYW0gICAge051bWJlcn0gIHkgIFBpeGVsIGNvb3JkaW5hdGUgeVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB6ICBUaWxlIHpvb21cbiAqIEByZXR1cm5zICB7QXJyYXl9ICAgW3gsIHldXG4gKi9cbmZ1bmN0aW9uIGdldE1lcmNDb29yZHMoeCwgeSwgeikge1xuICAgIHZhciByZXNvbHV0aW9uID0gKDIgKiBNYXRoLlBJICogNjM3ODEzNyAvIDI1NikgLyBNYXRoLnBvdygyLCB6KSxcbiAgICAgICAgbWVyY194ID0gKHggKiByZXNvbHV0aW9uIC0gMiAqIE1hdGguUEkgICogNjM3ODEzNyAvIDIuMCksXG4gICAgICAgIG1lcmNfeSA9ICh5ICogcmVzb2x1dGlvbiAtIDIgKiBNYXRoLlBJICAqIDYzNzgxMzcgLyAyLjApO1xuXG4gICAgcmV0dXJuIFttZXJjX3gsIG1lcmNfeV07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0IGZyb20gJy4vbG5nX2xhdCc7XG5cbmltcG9ydCB0eXBlIHtMbmdMYXRMaWtlfSBmcm9tICcuL2xuZ19sYXQnO1xuXG4vKipcbiAqIEEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IHJlcHJlc2VudHMgYSBnZW9ncmFwaGljYWwgYm91bmRpbmcgYm94LFxuICogZGVmaW5lZCBieSBpdHMgc291dGh3ZXN0IGFuZCBub3J0aGVhc3QgcG9pbnRzIGluIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUuXG4gKlxuICogSWYgbm8gYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsIGEgYG51bGxgIGJvdW5kaW5nIGJveCBpcyBjcmVhdGVkLlxuICpcbiAqIE5vdGUgdGhhdCBhbnkgTWFwYm94IEdMIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBgTG5nTGF0Qm91bmRzYCBvYmplY3QgYXMgYW4gYXJndW1lbnQgb3Igb3B0aW9uXG4gKiBjYW4gYWxzbyBhY2NlcHQgYW4gYEFycmF5YCBvZiB0d28ge0BsaW5rIExuZ0xhdExpa2V9IGNvbnN0cnVjdHMgYW5kIHdpbGwgcGVyZm9ybSBhbiBpbXBsaWNpdCBjb252ZXJzaW9uLlxuICogVGhpcyBmbGV4aWJsZSB0eXBlIGlzIGRvY3VtZW50ZWQgYXMge0BsaW5rIExuZ0xhdEJvdW5kc0xpa2V9LlxuICpcbiAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gW3N3XSBUaGUgc291dGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICogQHBhcmFtIHtMbmdMYXRMaWtlfSBbbmVdIFRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gKiBAZXhhbXBsZVxuICogdmFyIHN3ID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTg3NiwgNDAuNzY2MSk7XG4gKiB2YXIgbmUgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45Mzk3LCA0MC44MDAyKTtcbiAqIHZhciBsbGIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKHN3LCBuZSk7XG4gKi9cbmNsYXNzIExuZ0xhdEJvdW5kcyB7XG4gICAgX25lOiBMbmdMYXQ7XG4gICAgX3N3OiBMbmdMYXQ7XG5cbiAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHRvbyBmbGV4aWJsZSB0byB0eXBlLiBJdCBzaG91bGQgbm90IGJlIHNvIGZsZXhpYmxlLlxuICAgIGNvbnN0cnVjdG9yKHN3OiBhbnksIG5lOiBhbnkpIHtcbiAgICAgICAgaWYgKCFzdykge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9IGVsc2UgaWYgKG5lKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNvdXRoV2VzdChzdykuc2V0Tm9ydGhFYXN0KG5lKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U291dGhXZXN0KFtzd1swXSwgc3dbMV1dKS5zZXROb3J0aEVhc3QoW3N3WzJdLCBzd1szXV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTb3V0aFdlc3Qoc3dbMF0pLnNldE5vcnRoRWFzdChzd1sxXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIG5vcnRoZWFzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveFxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBuZVxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldE5vcnRoRWFzdChuZTogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9uZSA9IG5lIGluc3RhbmNlb2YgTG5nTGF0ID8gbmV3IExuZ0xhdChuZS5sbmcsIG5lLmxhdCkgOiBMbmdMYXQuY29udmVydChuZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc291dGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IHN3XG4gICAgICogQHJldHVybnMge0xuZ0xhdEJvdW5kc30gYHRoaXNgXG4gICAgICovXG4gICAgc2V0U291dGhXZXN0KHN3OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIHRoaXMuX3N3ID0gc3cgaW5zdGFuY2VvZiBMbmdMYXQgPyBuZXcgTG5nTGF0KHN3LmxuZywgc3cubGF0KSA6IExuZ0xhdC5jb252ZXJ0KHN3KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0ZW5kIHRoZSBib3VuZHMgdG8gaW5jbHVkZSBhIGdpdmVuIExuZ0xhdCBvciBMbmdMYXRCb3VuZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdHxMbmdMYXRCb3VuZHN9IG9iaiBvYmplY3QgdG8gZXh0ZW5kIHRvXG4gICAgICogQHJldHVybnMge0xuZ0xhdEJvdW5kc30gYHRoaXNgXG4gICAgICovXG4gICAgZXh0ZW5kKG9iajogTG5nTGF0IHwgTG5nTGF0Qm91bmRzKSB7XG4gICAgICAgIGNvbnN0IHN3ID0gdGhpcy5fc3csXG4gICAgICAgICAgICBuZSA9IHRoaXMuX25lO1xuICAgICAgICBsZXQgc3cyLCBuZTI7XG5cbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIExuZ0xhdCkge1xuICAgICAgICAgICAgc3cyID0gb2JqO1xuICAgICAgICAgICAgbmUyID0gb2JqO1xuXG4gICAgICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTG5nTGF0Qm91bmRzKSB7XG4gICAgICAgICAgICBzdzIgPSBvYmouX3N3O1xuICAgICAgICAgICAgbmUyID0gb2JqLl9uZTtcblxuICAgICAgICAgICAgaWYgKCFzdzIgfHwgIW5lMikgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmV2ZXJ5KEFycmF5LmlzQXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dGVuZChMbmdMYXRCb3VuZHMuY29udmVydChvYmopKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQoTG5nTGF0LmNvbnZlcnQob2JqKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN3ICYmICFuZSkge1xuICAgICAgICAgICAgdGhpcy5fc3cgPSBuZXcgTG5nTGF0KHN3Mi5sbmcsIHN3Mi5sYXQpO1xuICAgICAgICAgICAgdGhpcy5fbmUgPSBuZXcgTG5nTGF0KG5lMi5sbmcsIG5lMi5sYXQpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdy5sbmcgPSBNYXRoLm1pbihzdzIubG5nLCBzdy5sbmcpO1xuICAgICAgICAgICAgc3cubGF0ID0gTWF0aC5taW4oc3cyLmxhdCwgc3cubGF0KTtcbiAgICAgICAgICAgIG5lLmxuZyA9IE1hdGgubWF4KG5lMi5sbmcsIG5lLmxuZyk7XG4gICAgICAgICAgICBuZS5sYXQgPSBNYXRoLm1heChuZTIubGF0LCBuZS5sYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUgZXF1aWRpc3RhbnQgZnJvbSB0aGUgYm91bmRpbmcgYm94J3MgY29ybmVycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBib3VuZGluZyBib3gncyBjZW50ZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGxiID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhbLTczLjk4NzYsIDQwLjc2NjFdLCBbLTczLjkzOTcsIDQwLjgwMDJdKTtcbiAgICAgKiBsbGIuZ2V0Q2VudGVyKCk7IC8vID0gTG5nTGF0IHtsbmc6IC03My45NjM2NSwgbGF0OiA0MC43ODMxNX1cbiAgICAgKi9cbiAgICBnZXRDZW50ZXIoKTogTG5nTGF0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQoKHRoaXMuX3N3LmxuZyArIHRoaXMuX25lLmxuZykgLyAyLCAodGhpcy5fc3cubGF0ICsgdGhpcy5fbmUubGF0KSAvIDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNvdXRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBzb3V0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0U291dGhXZXN0KCk6IExuZ0xhdCB7IHJldHVybiB0aGlzLl9zdzsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIG5vcnRoZWFzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXROb3J0aEVhc3QoKTogTG5nTGF0IHsgcmV0dXJuIHRoaXMuX25lOyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIG5vcnRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgbm9ydGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldE5vcnRoV2VzdCgpOiBMbmdMYXQgeyByZXR1cm4gbmV3IExuZ0xhdCh0aGlzLmdldFdlc3QoKSwgdGhpcy5nZXROb3J0aCgpKTsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBzb3V0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIHNvdXRoZWFzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRTb3V0aEVhc3QoKTogTG5nTGF0IHsgcmV0dXJuIG5ldyBMbmdMYXQodGhpcy5nZXRFYXN0KCksIHRoaXMuZ2V0U291dGgoKSk7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgd2VzdCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHdlc3QgZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldFdlc3QoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3N3LmxuZzsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBzb3V0aCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHNvdXRoIGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRTb3V0aCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fc3cubGF0OyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIGVhc3QgZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBlYXN0IGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRFYXN0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9uZS5sbmc7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgbm9ydGggZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBub3J0aCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0Tm9ydGgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX25lLmxhdDsgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYm91bmRpbmcgYm94IHJlcHJlc2VudGVkIGFzIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PEFycmF5PG51bWJlcj4+fSBUaGUgYm91bmRpbmcgYm94IHJlcHJlc2VudGVkIGFzIGFuIGFycmF5LCBjb25zaXN0aW5nIG9mIHRoZVxuICAgICAqICAgc291dGh3ZXN0IGFuZCBub3J0aGVhc3QgY29vcmRpbmF0ZXMgb2YgdGhlIGJvdW5kaW5nIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBudW1iZXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsYiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSk7XG4gICAgICogbGxiLnRvQXJyYXkoKTsgLy8gPSBbWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXV1cbiAgICAgKi9cbiAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gW3RoaXMuX3N3LnRvQXJyYXkoKSwgdGhpcy5fbmUudG9BcnJheSgpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGJvdW5kaW5nIGJveCByZXByZXNlbnRlZCBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBib3VuZGluZyBib3ggcmVwcmVzZW50cyBhcyBhIHN0cmluZyBvZiB0aGUgZm9ybWF0XG4gICAgICogICBgJ0xuZ0xhdEJvdW5kcyhMbmdMYXQobG5nLCBsYXQpLCBMbmdMYXQobG5nLCBsYXQpKSdgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsYiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSk7XG4gICAgICogbGxiLnRvU3RyaW5nKCk7IC8vID0gXCJMbmdMYXRCb3VuZHMoTG5nTGF0KC03My45ODc2LCA0MC43NjYxKSwgTG5nTGF0KC03My45Mzk3LCA0MC44MDAyKSlcIlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYExuZ0xhdEJvdW5kcygke3RoaXMuX3N3LnRvU3RyaW5nKCl9LCAke3RoaXMuX25lLnRvU3RyaW5nKCl9KWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGJvdW5kaW5nIGJveCBpcyBhbiBlbXB0eS9gbnVsbGAtdHlwZSBib3guXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBib3VuZHMgaGF2ZSBiZWVuIGRlZmluZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICAgKi9cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gISh0aGlzLl9zdyAmJiB0aGlzLl9uZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYW4gYXJyYXkgdG8gYSBgTG5nTGF0Qm91bmRzYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBJZiBhIGBMbmdMYXRCb3VuZHNgIG9iamVjdCBpcyBwYXNzZWQgaW4sIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIEludGVybmFsbHksIHRoZSBmdW5jdGlvbiBjYWxscyBgTG5nTGF0I2NvbnZlcnRgIHRvIGNvbnZlcnQgYXJyYXlzIHRvIGBMbmdMYXRgIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0Qm91bmRzTGlrZX0gaW5wdXQgQW4gYXJyYXkgb2YgdHdvIGNvb3JkaW5hdGVzIHRvIGNvbnZlcnQsIG9yIGEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IHRvIHJldHVybi5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSBBIG5ldyBgTG5nTGF0Qm91bmRzYCBvYmplY3QsIGlmIGEgY29udmVyc2lvbiBvY2N1cnJlZCwgb3IgdGhlIG9yaWdpbmFsIGBMbmdMYXRCb3VuZHNgIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBhcnIgPSBbWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXV07XG4gICAgICogdmFyIGxsYiA9IG1hcGJveGdsLkxuZ0xhdEJvdW5kcy5jb252ZXJ0KGFycik7XG4gICAgICogbGxiOyAgIC8vID0gTG5nTGF0Qm91bmRzIHtfc3c6IExuZ0xhdCB7bG5nOiAtNzMuOTg3NiwgbGF0OiA0MC43NjYxfSwgX25lOiBMbmdMYXQge2xuZzogLTczLjkzOTcsIGxhdDogNDAuODAwMn19XG4gICAgICovXG4gICAgc3RhdGljIGNvbnZlcnQoaW5wdXQ6IExuZ0xhdEJvdW5kc0xpa2UpOiBMbmdMYXRCb3VuZHMge1xuICAgICAgICBpZiAoIWlucHV0IHx8IGlucHV0IGluc3RhbmNlb2YgTG5nTGF0Qm91bmRzKSByZXR1cm4gaW5wdXQ7XG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0Qm91bmRzKGlucHV0KTtcbiAgICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgTG5nTGF0Qm91bmRzfSBvYmplY3QsIGFuIGFycmF5IG9mIHtAbGluayBMbmdMYXRMaWtlfSBvYmplY3RzIGluIFtzdywgbmVdIG9yZGVyLFxuICogb3IgYW4gYXJyYXkgb2YgbnVtYmVycyBpbiBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBvcmRlci5cbiAqXG4gKiBAdHlwZWRlZiB7TG5nTGF0Qm91bmRzIHwgW0xuZ0xhdExpa2UsIExuZ0xhdExpa2VdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl19IExuZ0xhdEJvdW5kc0xpa2VcbiAqIEBleGFtcGxlXG4gKiB2YXIgdjEgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKFxuICogICBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45ODc2LCA0MC43NjYxKSxcbiAqICAgbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTM5NywgNDAuODAwMilcbiAqICk7XG4gKiB2YXIgdjIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKFstNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl0pXG4gKiB2YXIgdjMgPSBbWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXV07XG4gKi9cbmV4cG9ydCB0eXBlIExuZ0xhdEJvdW5kc0xpa2UgPSBMbmdMYXRCb3VuZHMgfCBbTG5nTGF0TGlrZSwgTG5nTGF0TGlrZV0gfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuZXhwb3J0IGRlZmF1bHQgTG5nTGF0Qm91bmRzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3cmFwfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuL2xuZ19sYXRfYm91bmRzJztcblxuLyoqXG4gKiBBIGBMbmdMYXRgIG9iamVjdCByZXByZXNlbnRzIGEgZ2l2ZW4gbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBjb29yZGluYXRlLCBtZWFzdXJlZCBpbiBkZWdyZWVzLlxuICpcbiAqIE1hcGJveCBHTCB1c2VzIGxvbmdpdHVkZSwgbGF0aXR1ZGUgY29vcmRpbmF0ZSBvcmRlciAoYXMgb3Bwb3NlZCB0byBsYXRpdHVkZSwgbG9uZ2l0dWRlKSB0byBtYXRjaCBHZW9KU09OLlxuICpcbiAqIE5vdGUgdGhhdCBhbnkgTWFwYm94IEdMIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBgTG5nTGF0YCBvYmplY3QgYXMgYW4gYXJndW1lbnQgb3Igb3B0aW9uXG4gKiBjYW4gYWxzbyBhY2NlcHQgYW4gYEFycmF5YCBvZiB0d28gbnVtYmVycyBhbmQgd2lsbCBwZXJmb3JtIGFuIGltcGxpY2l0IGNvbnZlcnNpb24uXG4gKiBUaGlzIGZsZXhpYmxlIHR5cGUgaXMgZG9jdW1lbnRlZCBhcyB7QGxpbmsgTG5nTGF0TGlrZX0uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGxuZyBMb25naXR1ZGUsIG1lYXN1cmVkIGluIGRlZ3JlZXMuXG4gKiBAcGFyYW0ge251bWJlcn0gbGF0IExhdGl0dWRlLCBtZWFzdXJlZCBpbiBkZWdyZWVzLlxuICogQGV4YW1wbGVcbiAqIHZhciBsbCA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk3NDksIDQwLjc3MzYpO1xuICogQHNlZSBbR2V0IGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL21vdXNlLXBvc2l0aW9uLylcbiAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC8pXG4gKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgd2l0aGluIGEgYm91bmRpbmcgYm94XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3VzaW5nLWJveC1xdWVyeXJlbmRlcmVkZmVhdHVyZXMvKVxuICogQHNlZSBbQ3JlYXRlIGEgdGltZWxpbmUgYW5pbWF0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3RpbWVsaW5lLWFuaW1hdGlvbi8pXG4gKi9cbmNsYXNzIExuZ0xhdCB7XG4gICAgbG5nOiBudW1iZXI7XG4gICAgbGF0OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihsbmc6IG51bWJlciwgbGF0OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGlzTmFOKGxuZykgfHwgaXNOYU4obGF0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIExuZ0xhdCBvYmplY3Q6ICgke2xuZ30sICR7bGF0fSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxuZyA9ICtsbmc7XG4gICAgICAgIHRoaXMubGF0ID0gK2xhdDtcbiAgICAgICAgaWYgKHRoaXMubGF0ID4gOTAgfHwgdGhpcy5sYXQgPCAtOTApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBMbmdMYXQgbGF0aXR1ZGUgdmFsdWU6IG11c3QgYmUgYmV0d2VlbiAtOTAgYW5kIDkwJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IGBMbmdMYXRgIG9iamVjdCB3aG9zZSBsb25naXR1ZGUgaXMgd3JhcHBlZCB0byB0aGUgcmFuZ2UgKC0xODAsIDE4MCkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgd3JhcHBlZCBgTG5nTGF0YCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KDI4Ni4wMjUxLCA0MC43NzM2KTtcbiAgICAgKiB2YXIgd3JhcHBlZCA9IGxsLndyYXAoKTtcbiAgICAgKiB3cmFwcGVkLmxuZzsgLy8gPSAtNzMuOTc0OVxuICAgICAqL1xuICAgIHdyYXAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0KHdyYXAodGhpcy5sbmcsIC0xODAsIDE4MCksIHRoaXMubGF0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb29yZGluYXRlcyByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxudW1iZXI+fSBUaGUgY29vcmRpbmF0ZXMgcmVwcmVzZXRlZCBhcyBhbiBhcnJheSBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTc0OSwgNDAuNzczNik7XG4gICAgICogbGwudG9BcnJheSgpOyAvLyA9IFstNzMuOTc0OSwgNDAuNzczNl1cbiAgICAgKi9cbiAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gW3RoaXMubG5nLCB0aGlzLmxhdF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMgcmVwcmVzZW50IGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvb3JkaW5hdGVzIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nIG9mIHRoZSBmb3JtYXQgYCdMbmdMYXQobG5nLCBsYXQpJ2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45NzQ5LCA0MC43NzM2KTtcbiAgICAgKiBsbC50b1N0cmluZygpOyAvLyA9IFwiTG5nTGF0KC03My45NzQ5LCA0MC43NzM2KVwiXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgTG5nTGF0KCR7dGhpcy5sbmd9LCAke3RoaXMubGF0fSlgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBgTG5nTGF0Qm91bmRzYCBmcm9tIHRoZSBjb29yZGluYXRlcyBleHRlbmRlZCBieSBhIGdpdmVuIGByYWRpdXNgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXM9MF0gRGlzdGFuY2UgaW4gbWV0ZXJzIGZyb20gdGhlIGNvb3JkaW5hdGVzIHRvIGV4dGVuZCB0aGUgYm91bmRzLlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IEEgbmV3IGBMbmdMYXRCb3VuZHNgIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvb3JkaW5hdGVzIGV4dGVuZGVkIGJ5IHRoZSBgcmFkaXVzYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbCA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk3NDksIDQwLjc3MzYpO1xuICAgICAqIGxsLnRvQm91bmRzKDEwMCkudG9BcnJheSgpOyAvLyA9IFtbLTczLjk3NTAxODYyMTQxMzI4LCA0MC43NzM1MTAxNjg0NzIyOV0sIFstNzMuOTc0NzgxMzc4NTg2NzMsIDQwLjc3MzY4OTgzMTUyNzcxXV1cbiAgICAgKi9cbiAgICB0b0JvdW5kcyhyYWRpdXM/OiBudW1iZXIgPSAwKSB7XG4gICAgICAgIGNvbnN0IGVhcnRoQ2lyY3VtZmVyZW5jZUluTWV0ZXJzQXRFcXVhdG9yID0gNDAwNzUwMTc7XG4gICAgICAgIGNvbnN0IGxhdEFjY3VyYWN5ID0gMzYwICogcmFkaXVzIC8gZWFydGhDaXJjdW1mZXJlbmNlSW5NZXRlcnNBdEVxdWF0b3IsXG4gICAgICAgICAgICBsbmdBY2N1cmFjeSA9IGxhdEFjY3VyYWN5IC8gTWF0aC5jb3MoKE1hdGguUEkgLyAxODApICogdGhpcy5sYXQpO1xuXG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0Qm91bmRzKG5ldyBMbmdMYXQodGhpcy5sbmcgLSBsbmdBY2N1cmFjeSwgdGhpcy5sYXQgLSBsYXRBY2N1cmFjeSksXG4gICAgICAgICAgICBuZXcgTG5nTGF0KHRoaXMubG5nICsgbG5nQWNjdXJhY3ksIHRoaXMubGF0ICsgbGF0QWNjdXJhY3kpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiB0d28gbnVtYmVycyBvciBhbiBvYmplY3Qgd2l0aCBgbG5nYCBhbmQgYGxhdGAgb3IgYGxvbmAgYW5kIGBsYXRgIHByb3BlcnRpZXNcbiAgICAgKiB0byBhIGBMbmdMYXRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIElmIGEgYExuZ0xhdGAgb2JqZWN0IGlzIHBhc3NlZCBpbiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXQgdW5jaGFuZ2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBpbnB1dCBBbiBhcnJheSBvZiB0d28gbnVtYmVycyBvciBvYmplY3QgdG8gY29udmVydCwgb3IgYSBgTG5nTGF0YCBvYmplY3QgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IEEgbmV3IGBMbmdMYXRgIG9iamVjdCwgaWYgYSBjb252ZXJzaW9uIG9jY3VycmVkLCBvciB0aGUgb3JpZ2luYWwgYExuZ0xhdGAgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGFyciA9IFstNzMuOTc0OSwgNDAuNzczNl07XG4gICAgICogdmFyIGxsID0gbWFwYm94Z2wuTG5nTGF0LmNvbnZlcnQoYXJyKTtcbiAgICAgKiBsbDsgICAvLyA9IExuZ0xhdCB7bG5nOiAtNzMuOTc0OSwgbGF0OiA0MC43NzM2fVxuICAgICAqL1xuICAgIHN0YXRpYyBjb252ZXJ0KGlucHV0OiBMbmdMYXRMaWtlKTogTG5nTGF0IHtcbiAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgTG5nTGF0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpICYmIChpbnB1dC5sZW5ndGggPT09IDIgfHwgaW5wdXQubGVuZ3RoID09PSAzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQoTnVtYmVyKGlucHV0WzBdKSwgTnVtYmVyKGlucHV0WzFdKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExuZ0xhdChcbiAgICAgICAgICAgICAgICAvLyBmbG93IGNhbid0IHJlZmluZSB0aGlzIHRvIGhhdmUgb25lIG9mIGxuZyBvciBsYXQsIHNvIHdlIGhhdmUgdG8gY2FzdCB0byBhbnlcbiAgICAgICAgICAgICAgICBOdW1iZXIoJ2xuZycgaW4gaW5wdXQgPyAoaW5wdXQ6IGFueSkubG5nIDogKGlucHV0OiBhbnkpLmxvbiksXG4gICAgICAgICAgICAgICAgTnVtYmVyKGlucHV0LmxhdClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYExuZ0xhdExpa2VgIGFyZ3VtZW50IG11c3QgYmUgc3BlY2lmaWVkIGFzIGEgTG5nTGF0IGluc3RhbmNlLCBhbiBvYmplY3Qge2xuZzogPGxuZz4sIGxhdDogPGxhdD59LCBhbiBvYmplY3Qge2xvbjogPGxuZz4sIGxhdDogPGxhdD59LCBvciBhbiBhcnJheSBvZiBbPGxuZz4sIDxsYXQ+XVwiKTtcbiAgICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgTG5nTGF0fSBvYmplY3QsIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIHJlcHJlc2VudGluZyBsb25naXR1ZGUgYW5kIGxhdGl0dWRlLFxuICogb3IgYW4gb2JqZWN0IHdpdGggYGxuZ2AgYW5kIGBsYXRgIG9yIGBsb25gIGFuZCBgbGF0YCBwcm9wZXJ0aWVzLlxuICpcbiAqIEB0eXBlZGVmIHtMbmdMYXQgfCB7bG5nOiBudW1iZXIsIGxhdDogbnVtYmVyfSB8IHtsb246IG51bWJlciwgbGF0OiBudW1iZXJ9IHwgW251bWJlciwgbnVtYmVyXX0gTG5nTGF0TGlrZVxuICogQGV4YW1wbGVcbiAqIHZhciB2MSA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTEyMi40MjA2NzksIDM3Ljc3MjUzNyk7XG4gKiB2YXIgdjIgPSBbLTEyMi40MjA2NzksIDM3Ljc3MjUzN107XG4gKiB2YXIgdjMgPSB7bG9uOiAtMTIyLjQyMDY3OSwgbGF0OiAzNy43NzI1Mzd9O1xuICovXG5leHBvcnQgdHlwZSBMbmdMYXRMaWtlID0gTG5nTGF0IHwge2xuZzogbnVtYmVyLCBsYXQ6IG51bWJlcn0gfCB7bG9uOiBudW1iZXIsIGxhdDogbnVtYmVyfSB8IFtudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCBkZWZhdWx0IExuZ0xhdDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcblxuLypcbiAqIFRoZSBjaXJjdW1mZXJlbmNlIG9mIHRoZSB3b3JsZCBpbiBtZXRlcnMgYXQgdGhlIGVxdWF0b3IuXG4gKi9cbmNvbnN0IGNpcmN1bWZlcmVuY2VBdEVxdWF0b3IgPSAyICogTWF0aC5QSSAqIDYzNzgxMzc7XG5cbi8qXG4gKiBUaGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgd29ybGQgaW4gbWV0ZXJzIGF0IHRoZSBnaXZlbiBsYXRpdHVkZS5cbiAqL1xuZnVuY3Rpb24gY2lyY3VtZmVyZW5jZUF0TGF0aXR1ZGUobGF0aXR1ZGU6IG51bWJlcikge1xuICAgIHJldHVybiBjaXJjdW1mZXJlbmNlQXRFcXVhdG9yICogTWF0aC5jb3MobGF0aXR1ZGUgKiBNYXRoLlBJIC8gMTgwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmNhdG9yWGZyb21MbmcobG5nOiBudW1iZXIpIHtcbiAgICByZXR1cm4gKDE4MCArIGxuZykgLyAzNjA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvcllmcm9tTGF0KGxhdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuICgxODAgLSAoMTgwIC8gTWF0aC5QSSAqIE1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkgLyA0ICsgbGF0ICogTWF0aC5QSSAvIDM2MCkpKSkgLyAzNjA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclpmcm9tQWx0aXR1ZGUoYWx0aXR1ZGU6IG51bWJlciwgbGF0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYWx0aXR1ZGUgLyBjaXJjdW1mZXJlbmNlQXRMYXRpdHVkZShsYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG5nRnJvbU1lcmNhdG9yWCh4OiBudW1iZXIpIHtcbiAgICByZXR1cm4geCAqIDM2MCAtIDE4MDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdEZyb21NZXJjYXRvclkoeTogbnVtYmVyKSB7XG4gICAgY29uc3QgeTIgPSAxODAgLSB5ICogMzYwO1xuICAgIHJldHVybiAzNjAgLyBNYXRoLlBJICogTWF0aC5hdGFuKE1hdGguZXhwKHkyICogTWF0aC5QSSAvIDE4MCkpIC0gOTA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHRpdHVkZUZyb21NZXJjYXRvclooejogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICByZXR1cm4geiAqIGNpcmN1bWZlcmVuY2VBdExhdGl0dWRlKGxhdEZyb21NZXJjYXRvclkoeSkpO1xufVxuXG4vKipcbiAqIERldGVybWluZSB0aGUgTWVyY2F0b3Igc2NhbGUgZmFjdG9yIGZvciBhIGdpdmVuIGxhdGl0dWRlLCBzZWVcbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01lcmNhdG9yX3Byb2plY3Rpb24jU2NhbGVfZmFjdG9yXG4gKlxuICogQXQgdGhlIGVxdWF0b3IgdGhlIHNjYWxlIGZhY3RvciB3aWxsIGJlIDEsIHdoaWNoIGluY3JlYXNlcyBhdCBoaWdoZXIgbGF0aXR1ZGVzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsYXQgTGF0aXR1ZGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHNjYWxlIGZhY3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JTY2FsZShsYXQ6IG51bWJlcikge1xuICAgIHJldHVybiAxIC8gTWF0aC5jb3MobGF0ICogTWF0aC5QSSAvIDE4MCk7XG59XG5cbi8qKlxuICogQSBgTWVyY2F0b3JDb29yZGluYXRlYCBvYmplY3QgcmVwcmVzZW50cyBhIHByb2plY3RlZCB0aHJlZSBkaW1lbnNpb25hbCBwb3NpdGlvbi5cbiAqXG4gKiBgTWVyY2F0b3JDb29yZGluYXRlYCB1c2VzIHRoZSB3ZWIgbWVyY2F0b3IgcHJvamVjdGlvbiAoW0VQU0c6Mzg1N10oaHR0cHM6Ly9lcHNnLmlvLzM4NTcpKSB3aXRoIHNsaWdodGx5IGRpZmZlcmVudCB1bml0czpcbiAqIC0gdGhlIHNpemUgb2YgMSB1bml0IGlzIHRoZSB3aWR0aCBvZiB0aGUgcHJvamVjdGVkIHdvcmxkIGluc3RlYWQgb2YgdGhlIFwibWVyY2F0b3IgbWV0ZXJcIlxuICogLSB0aGUgb3JpZ2luIG9mIHRoZSBjb29yZGluYXRlIHNwYWNlIGlzIGF0IHRoZSBub3J0aC13ZXN0IGNvcm5lciBpbnN0ZWFkIG9mIHRoZSBtaWRkbGVcbiAqXG4gKiBGb3IgZXhhbXBsZSwgYE1lcmNhdG9yQ29vcmRpbmF0ZSgwLCAwLCAwKWAgaXMgdGhlIG5vcnRoLXdlc3QgY29ybmVyIG9mIHRoZSBtZXJjYXRvciB3b3JsZCBhbmRcbiAqIGBNZXJjYXRvckNvb3JkaW5hdGUoMSwgMSwgMClgIGlzIHRoZSBzb3V0aC1lYXN0IGNvcm5lci4gSWYgeW91IGFyZSBmYW1pbGlhciB3aXRoXG4gKiBbdmVjdG9yIHRpbGVzXShodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L3ZlY3Rvci10aWxlLXNwZWMpIGl0IG1heSBiZSBoZWxwZnVsIHRvIHRoaW5rXG4gKiBvZiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBhcyB0aGUgYDAvMC8wYCB0aWxlIHdpdGggYW4gZXh0ZW50IG9mIGAxYC5cbiAqXG4gKiBUaGUgYHpgIGRpbWVuc2lvbiBvZiBgTWVyY2F0b3JDb29yZGluYXRlYCBpcyBjb25mb3JtYWwuIEEgY3ViZSBpbiB0aGUgbWVyY2F0b3IgY29vcmRpbmF0ZSBzcGFjZSB3b3VsZCBiZSByZW5kZXJlZCBhcyBhIGN1YmUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIHggY29tcG9uZW50IG9mIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSB5IGNvbXBvbmVudCBvZiB0aGUgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0geiBUaGUgeiBjb21wb25lbnQgb2YgdGhlIHBvc2l0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBudWxsSXNsYW5kID0gbmV3IG1hcGJveGdsLk1lcmNhdG9yQ29vcmRpbmF0ZSgwLjUsIDAuNSwgMCk7XG4gKlxuICogQHNlZSBbQWRkIGEgY3VzdG9tIHN0eWxlIGxheWVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2N1c3RvbS1zdHlsZS1sYXllci8pXG4gKi9cbmNsYXNzIE1lcmNhdG9yQ29vcmRpbmF0ZSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB6OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyID0gMCkge1xuICAgICAgICB0aGlzLnggPSAreDtcbiAgICAgICAgdGhpcy55ID0gK3k7XG4gICAgICAgIHRoaXMueiA9ICt6O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2plY3QgYSBgTG5nTGF0YCB0byBhIGBNZXJjYXRvckNvb3JkaW5hdGVgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBsbmdMYXRMaWtlIFRoZSBsb2NhdGlvbiB0byBwcm9qZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhbHRpdHVkZSBUaGUgYWx0aXR1ZGUgaW4gbWV0ZXJzIG9mIHRoZSBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7TWVyY2F0b3JDb29yZGluYXRlfSBUaGUgcHJvamVjdGVkIG1lcmNhdG9yIGNvb3JkaW5hdGUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgY29vcmQgPSBtYXBib3hnbC5NZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCh7IGxuZzogMCwgbGF0OiAwfSwgMCk7XG4gICAgICogY29vcmQ7IC8vIE1lcmNhdG9yQ29vcmRpbmF0ZSgwLjUsIDAuNSwgMClcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbUxuZ0xhdChsbmdMYXRMaWtlOiBMbmdMYXRMaWtlLCBhbHRpdHVkZTogbnVtYmVyID0gMCkge1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBMbmdMYXQuY29udmVydChsbmdMYXRMaWtlKTtcblxuICAgICAgICByZXR1cm4gbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShcbiAgICAgICAgICAgICAgICBtZXJjYXRvclhmcm9tTG5nKGxuZ0xhdC5sbmcpLFxuICAgICAgICAgICAgICAgIG1lcmNhdG9yWWZyb21MYXQobG5nTGF0LmxhdCksXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JaZnJvbUFsdGl0dWRlKGFsdGl0dWRlLCBsbmdMYXQubGF0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYExuZ0xhdGAgZm9yIHRoZSBjb29yZGluYXRlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIGBMbmdMYXRgIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBjb29yZCA9IG5ldyBtYXBib3hnbC5NZXJjYXRvckNvb3JkaW5hdGUoMC41LCAwLjUsIDApO1xuICAgICAqIHZhciBsYXRMbmcgPSBjb29yZC50b0xuZ0xhdCgpOyAvLyBMbmdMYXQoMCwgMClcbiAgICAgKi9cbiAgICB0b0xuZ0xhdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQoXG4gICAgICAgICAgICAgICAgbG5nRnJvbU1lcmNhdG9yWCh0aGlzLngpLFxuICAgICAgICAgICAgICAgIGxhdEZyb21NZXJjYXRvclkodGhpcy55KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWx0aXR1ZGUgaW4gbWV0ZXJzIG9mIHRoZSBjb29yZGluYXRlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn0gVGhlIGFsdGl0dWRlIGluIG1ldGVycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBjb29yZCA9IG5ldyBtYXBib3hnbC5NZXJjYXRvckNvb3JkaW5hdGUoMCwgMCwgMC4wMik7XG4gICAgICogY29vcmQudG9BbHRpdHVkZSgpOyAvLyA2OTE0LjI4MTk1NjI5NTMzOVxuICAgICAqL1xuICAgIHRvQWx0aXR1ZGUoKSB7XG4gICAgICAgIHJldHVybiBhbHRpdHVkZUZyb21NZXJjYXRvcloodGhpcy56LCB0aGlzLnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRpc3RhbmNlIG9mIDEgbWV0ZXIgaW4gYE1lcmNhdG9yQ29vcmRpbmF0ZWAgdW5pdHMgYXQgdGhpcyBsYXRpdHVkZS5cbiAgICAgKlxuICAgICAqIEZvciBjb29yZGluYXRlcyBpbiByZWFsIHdvcmxkIHVuaXRzIHVzaW5nIG1ldGVycywgdGhpcyBuYXR1cmFsbHkgcHJvdmlkZXMgdGhlIHNjYWxlXG4gICAgICogdG8gdHJhbnNmb3JtIGludG8gYE1lcmNhdG9yQ29vcmRpbmF0ZWBzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn0gRGlzdGFuY2Ugb2YgMSBtZXRlciBpbiBgTWVyY2F0b3JDb29yZGluYXRlYCB1bml0cy5cbiAgICAgKi9cbiAgICBtZXRlckluTWVyY2F0b3JDb29yZGluYXRlVW5pdHMoKSB7XG4gICAgICAgIC8vIDEgbWV0ZXIgLyBjaXJjdW1mZXJlbmNlIGF0IGVxdWF0b3IgaW4gbWV0ZXJzICogTWVyY2F0b3IgcHJvamVjdGlvbiBzY2FsZSBmYWN0b3IgYXQgdGhpcyBsYXRpdHVkZVxuICAgICAgICByZXR1cm4gMSAvIGNpcmN1bWZlcmVuY2VBdEVxdWF0b3IgKiBtZXJjYXRvclNjYWxlKGxhdEZyb21NZXJjYXRvclkodGhpcy55KSk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lcmNhdG9yQ29vcmRpbmF0ZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0VGlsZUJCb3h9IGZyb20gJ0BtYXBib3gvd2hvb3RzLWpzJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmV4cG9ydCBjbGFzcyBDYW5vbmljYWxUaWxlSUQge1xuICAgIHo6IG51bWJlcjtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoejogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBhc3NlcnQoeiA+PSAwICYmIHogPD0gMjUpO1xuICAgICAgICBhc3NlcnQoeCA+PSAwICYmIHggPCBNYXRoLnBvdygyLCB6KSk7XG4gICAgICAgIGFzc2VydCh5ID49IDAgJiYgeSA8IE1hdGgucG93KDIsIHopKTtcbiAgICAgICAgdGhpcy56ID0gejtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgdGhpcy5rZXkgPSBjYWxjdWxhdGVLZXkoMCwgeiwgeCwgeSk7XG4gICAgfVxuXG4gICAgZXF1YWxzKGlkOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueiA9PT0gaWQueiAmJiB0aGlzLnggPT09IGlkLnggJiYgdGhpcy55ID09PSBpZC55O1xuICAgIH1cblxuICAgIC8vIGdpdmVuIGEgbGlzdCBvZiB1cmxzLCBjaG9vc2UgYSB1cmwgdGVtcGxhdGUgYW5kIHJldHVybiBhIHRpbGUgVVJMXG4gICAgdXJsKHVybHM6IEFycmF5PHN0cmluZz4sIHNjaGVtZTogP3N0cmluZykge1xuICAgICAgICBjb25zdCBiYm94ID0gZ2V0VGlsZUJCb3godGhpcy54LCB0aGlzLnksIHRoaXMueik7XG4gICAgICAgIGNvbnN0IHF1YWRrZXkgPSBnZXRRdWFka2V5KHRoaXMueiwgdGhpcy54LCB0aGlzLnkpO1xuXG4gICAgICAgIHJldHVybiB1cmxzWyh0aGlzLnggKyB0aGlzLnkpICUgdXJscy5sZW5ndGhdXG4gICAgICAgICAgICAucmVwbGFjZSgne3ByZWZpeH0nLCAodGhpcy54ICUgMTYpLnRvU3RyaW5nKDE2KSArICh0aGlzLnkgJSAxNikudG9TdHJpbmcoMTYpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t6fScsIFN0cmluZyh0aGlzLnopKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t4fScsIFN0cmluZyh0aGlzLngpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t5fScsIFN0cmluZyhzY2hlbWUgPT09ICd0bXMnID8gKE1hdGgucG93KDIsIHRoaXMueikgLSB0aGlzLnkgLSAxKSA6IHRoaXMueSkpXG4gICAgICAgICAgICAucmVwbGFjZSgne3F1YWRrZXl9JywgcXVhZGtleSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7YmJveC1lcHNnLTM4NTd9JywgYmJveCk7XG4gICAgfVxuXG4gICAgZ2V0VGlsZVBvaW50KGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgY29uc3QgdGlsZXNBdFpvb20gPSBNYXRoLnBvdygyLCB0aGlzLnopO1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICAgICAgKGNvb3JkLnggKiB0aWxlc0F0Wm9vbSAtIHRoaXMueCkgKiBFWFRFTlQsXG4gICAgICAgICAgICAoY29vcmQueSAqIHRpbGVzQXRab29tIC0gdGhpcy55KSAqIEVYVEVOVCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW53cmFwcGVkVGlsZUlEIHtcbiAgICB3cmFwOiBudW1iZXI7XG4gICAgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQ7XG4gICAga2V5OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih3cmFwOiBudW1iZXIsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIHRoaXMud3JhcCA9IHdyYXA7XG4gICAgICAgIHRoaXMuY2Fub25pY2FsID0gY2Fub25pY2FsO1xuICAgICAgICB0aGlzLmtleSA9IGNhbGN1bGF0ZUtleSh3cmFwLCBjYW5vbmljYWwueiwgY2Fub25pY2FsLngsIGNhbm9uaWNhbC55KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPdmVyc2NhbGVkVGlsZUlEIHtcbiAgICBvdmVyc2NhbGVkWjogbnVtYmVyO1xuICAgIHdyYXA6IG51bWJlcjtcbiAgICBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRDtcbiAgICBrZXk6IG51bWJlcjtcbiAgICBwb3NNYXRyaXg6IEZsb2F0MzJBcnJheTtcblxuICAgIGNvbnN0cnVjdG9yKG92ZXJzY2FsZWRaOiBudW1iZXIsIHdyYXA6IG51bWJlciwgejogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBhc3NlcnQob3ZlcnNjYWxlZFogPj0geik7XG4gICAgICAgIHRoaXMub3ZlcnNjYWxlZFogPSBvdmVyc2NhbGVkWjtcbiAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgdGhpcy5jYW5vbmljYWwgPSBuZXcgQ2Fub25pY2FsVGlsZUlEKHosICt4LCAreSk7XG4gICAgICAgIHRoaXMua2V5ID0gY2FsY3VsYXRlS2V5KHdyYXAsIG92ZXJzY2FsZWRaLCB4LCB5KTtcbiAgICB9XG5cbiAgICBlcXVhbHMoaWQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcnNjYWxlZFogPT09IGlkLm92ZXJzY2FsZWRaICYmIHRoaXMud3JhcCA9PT0gaWQud3JhcCAmJiB0aGlzLmNhbm9uaWNhbC5lcXVhbHMoaWQuY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICBzY2FsZWRUbyh0YXJnZXRaOiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KHRhcmdldFogPD0gdGhpcy5vdmVyc2NhbGVkWik7XG4gICAgICAgIGNvbnN0IHpEaWZmZXJlbmNlID0gdGhpcy5jYW5vbmljYWwueiAtIHRhcmdldFo7XG4gICAgICAgIGlmICh0YXJnZXRaID4gdGhpcy5jYW5vbmljYWwueikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHRhcmdldFosIHRoaXMud3JhcCwgdGhpcy5jYW5vbmljYWwueiwgdGhpcy5jYW5vbmljYWwueCwgdGhpcy5jYW5vbmljYWwueSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE92ZXJzY2FsZWRUaWxlSUQodGFyZ2V0WiwgdGhpcy53cmFwLCB0YXJnZXRaLCB0aGlzLmNhbm9uaWNhbC54ID4+IHpEaWZmZXJlbmNlLCB0aGlzLmNhbm9uaWNhbC55ID4+IHpEaWZmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQ2hpbGRPZihwYXJlbnQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgaWYgKHBhcmVudC53cmFwICE9PSB0aGlzLndyYXApIHtcbiAgICAgICAgICAgIC8vIFdlIGNhbid0IGJlIGEgY2hpbGQgaWYgd2UncmUgaW4gYSBkaWZmZXJlbnQgd29ybGQgY29weVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHpEaWZmZXJlbmNlID0gdGhpcy5jYW5vbmljYWwueiAtIHBhcmVudC5jYW5vbmljYWwuejtcbiAgICAgICAgLy8gV2UncmUgZmlyc3QgdGVzdGluZyBmb3IgeiA9PSAwLCB0byBhdm9pZCBhIDMyIGJpdCBzaGlmdCwgd2hpY2ggaXMgdW5kZWZpbmVkLlxuICAgICAgICByZXR1cm4gcGFyZW50Lm92ZXJzY2FsZWRaID09PSAwIHx8IChcbiAgICAgICAgICAgIHBhcmVudC5vdmVyc2NhbGVkWiA8IHRoaXMub3ZlcnNjYWxlZFogJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2Fub25pY2FsLnggPT09ICh0aGlzLmNhbm9uaWNhbC54ID4+IHpEaWZmZXJlbmNlKSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudC5jYW5vbmljYWwueSA9PT0gKHRoaXMuY2Fub25pY2FsLnkgPj4gekRpZmZlcmVuY2UpKTtcbiAgICB9XG5cbiAgICBjaGlsZHJlbihzb3VyY2VNYXhab29tOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMub3ZlcnNjYWxlZFogPj0gc291cmNlTWF4Wm9vbSkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGEgc2luZ2xlIHRpbGUgY29vcmQgcmVwcmVzZW50aW5nIGEgYW4gb3ZlcnNjYWxlZCB0aWxlXG4gICAgICAgICAgICByZXR1cm4gW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRoaXMub3ZlcnNjYWxlZFogKyAxLCB0aGlzLndyYXAsIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLmNhbm9uaWNhbC56ICsgMTtcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuY2Fub25pY2FsLnggKiAyO1xuICAgICAgICBjb25zdCB5ID0gdGhpcy5jYW5vbmljYWwueSAqIDI7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh6LCB0aGlzLndyYXAsIHosIHgsIHkpLFxuICAgICAgICAgICAgbmV3IE92ZXJzY2FsZWRUaWxlSUQoeiwgdGhpcy53cmFwLCB6LCB4ICsgMSwgeSksXG4gICAgICAgICAgICBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh6LCB0aGlzLndyYXAsIHosIHgsIHkgKyAxKSxcbiAgICAgICAgICAgIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHosIHRoaXMud3JhcCwgeiwgeCArIDEsIHkgKyAxKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGlzTGVzc1RoYW4ocmhzOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXAgPCByaHMud3JhcCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLndyYXAgPiByaHMud3JhcCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLm92ZXJzY2FsZWRaIDwgcmhzLm92ZXJzY2FsZWRaKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMub3ZlcnNjYWxlZFogPiByaHMub3ZlcnNjYWxlZFopIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5jYW5vbmljYWwueCA8IHJocy5jYW5vbmljYWwueCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLmNhbm9uaWNhbC54ID4gcmhzLmNhbm9uaWNhbC54KSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuY2Fub25pY2FsLnkgPCByaHMuY2Fub25pY2FsLnkpIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgd3JhcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHRoaXMub3ZlcnNjYWxlZFosIDAsIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpO1xuICAgIH1cblxuICAgIHVud3JhcFRvKHdyYXA6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IE92ZXJzY2FsZWRUaWxlSUQodGhpcy5vdmVyc2NhbGVkWiwgd3JhcCwgdGhpcy5jYW5vbmljYWwueiwgdGhpcy5jYW5vbmljYWwueCwgdGhpcy5jYW5vbmljYWwueSk7XG4gICAgfVxuXG4gICAgb3ZlcnNjYWxlRmFjdG9yKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwgdGhpcy5vdmVyc2NhbGVkWiAtIHRoaXMuY2Fub25pY2FsLnopO1xuICAgIH1cblxuICAgIHRvVW53cmFwcGVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVud3JhcHBlZFRpbGVJRCh0aGlzLndyYXAsIHRoaXMuY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3ZlcnNjYWxlZFp9LyR7dGhpcy5jYW5vbmljYWwueH0vJHt0aGlzLmNhbm9uaWNhbC55fWA7XG4gICAgfVxuXG4gICAgZ2V0VGlsZVBvaW50KGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fub25pY2FsLmdldFRpbGVQb2ludChuZXcgTWVyY2F0b3JDb29yZGluYXRlKGNvb3JkLnggLSB0aGlzLndyYXAsIGNvb3JkLnkpKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUtleSh3cmFwOiBudW1iZXIsIHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICB3cmFwICo9IDI7XG4gICAgaWYgKHdyYXAgPCAwKSB3cmFwID0gd3JhcCAqIC0xIC0gMTtcbiAgICBjb25zdCBkaW0gPSAxIDw8IHo7XG4gICAgcmV0dXJuICgoZGltICogZGltICogd3JhcCArIGRpbSAqIHkgKyB4KSAqIDMyKSArIHo7XG59XG5cbmZ1bmN0aW9uIGdldFF1YWRrZXkoeiwgeCwgeSkge1xuICAgIGxldCBxdWFka2V5ID0gJycsIG1hc2s7XG4gICAgZm9yIChsZXQgaSA9IHo7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgbWFzayA9IDEgPDwgKGkgLSAxKTtcbiAgICAgICAgcXVhZGtleSArPSAoKHggJiBtYXNrID8gMSA6IDApICsgKHkgJiBtYXNrID8gMiA6IDApKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1YWRrZXk7XG59XG5cbnJlZ2lzdGVyKCdDYW5vbmljYWxUaWxlSUQnLCBDYW5vbmljYWxUaWxlSUQpO1xucmVnaXN0ZXIoJ092ZXJzY2FsZWRUaWxlSUQnLCBPdmVyc2NhbGVkVGlsZUlELCB7b21pdDogWydwb3NNYXRyaXgnXX0pO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHt3YXJuT25jZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbi8vIERFTURhdGEgaXMgYSBkYXRhIHN0cnVjdHVyZSBmb3IgZGVjb2RpbmcsIGJhY2tmaWxsaW5nLCBhbmQgc3RvcmluZyBlbGV2YXRpb24gZGF0YSBmb3IgcHJvY2Vzc2luZyBpbiB0aGUgaGlsbHNoYWRlIHNoYWRlcnNcbi8vIGRhdGEgY2FuIGJlIHBvcHVsYXRlZCBlaXRoZXIgZnJvbSBhIHBuZ3JhdyBpbWFnZSB0aWxlIG9yIGZyb20gc2VybGlhemVkIGRhdGEgc2VudCBiYWNrIGZyb20gYSB3b3JrZXIuIFdoZW4gZGF0YSBpcyBpbml0aWFsbHlcbi8vIGxvYWRlZCBmcm9tIGEgaW1hZ2UgdGlsZSwgd2UgZGVjb2RlIHRoZSBwaXhlbCB2YWx1ZXMgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGRlY29kaW5nIGZvcm11bGEsIGJ1dCB3ZSBzdG9yZSB0aGVcbi8vIGVsZXZhdGlvbiBkYXRhIGFzIGFuIEludDMyIHZhbHVlLiB3ZSBhZGQgNjU1MzYgKDJeMTYpIHRvIGVsaW1pbmF0ZSBuZWdhdGl2ZSB2YWx1ZXMgYW5kIGVuYWJsZSB0aGUgdXNlIG9mXG4vLyBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gY3JlYXRpbmcgdGhlIHRleHR1cmUgdXNlZCBpbiB0aGUgaGlsbHNoYWRlUHJlcGFyZSBzdGVwLlxuXG4vLyBERU1EYXRhIGFsc28gaGFuZGxlcyB0aGUgYmFja2ZpbGxpbmcgb2YgZGF0YSBmcm9tIGEgdGlsZSdzIG5laWdoYm9yaW5nIHRpbGVzLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIHVzZSBhIHBpeGVsJ3MgOFxuLy8gc3Vycm91bmRpbmcgcGl4ZWwgdmFsdWVzIHRvIGNvbXB1dGUgdGhlIHNsb3BlIGF0IHRoYXQgcGl4ZWwsIGFuZCB3ZSBjYW5ub3QgYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIHNsb3BlIGF0IHBpeGVscyBvbiBhXG4vLyB0aWxlJ3MgZWRnZSB3aXRob3V0IGJhY2tmaWxsaW5nIGZyb20gbmVpZ2hib3JpbmcgdGlsZXMuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFTURhdGEge1xuICAgIHVpZDogc3RyaW5nO1xuICAgIGRhdGE6IFVpbnQzMkFycmF5O1xuICAgIHN0cmlkZTogbnVtYmVyO1xuICAgIGRpbTogbnVtYmVyO1xuICAgIGVuY29kaW5nOiBcIm1hcGJveFwiIHwgXCJ0ZXJyYXJpdW1cIjtcblxuICAgIC8vIFJHQkFJbWFnZSBkYXRhIGhhcyB1bmlmb3JtIDFweCBwYWRkaW5nIG9uIGFsbCBzaWRlczogc3F1YXJlIHRpbGUgZWRnZSBzaXplIGRlZmluZXMgc3RyaWRlXG4gICAgLy8gYW5kIGRpbSBpcyBjYWxjdWxhdGVkIGFzIHN0cmlkZSAtIDIuXG4gICAgY29uc3RydWN0b3IodWlkOiBzdHJpbmcsIGRhdGE6IFJHQkFJbWFnZSwgZW5jb2Rpbmc6IFwibWFwYm94XCIgfCBcInRlcnJhcml1bVwiKSB7XG4gICAgICAgIHRoaXMudWlkID0gdWlkO1xuICAgICAgICBpZiAoZGF0YS5oZWlnaHQgIT09IGRhdGEud2lkdGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdERU0gdGlsZXMgbXVzdCBiZSBzcXVhcmUnKTtcbiAgICAgICAgaWYgKGVuY29kaW5nICYmIGVuY29kaW5nICE9PSBcIm1hcGJveFwiICYmIGVuY29kaW5nICE9PSBcInRlcnJhcml1bVwiKSByZXR1cm4gd2Fybk9uY2UoXG4gICAgICAgICAgICBgXCIke2VuY29kaW5nfVwiIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgXCJtYXBib3hcIiBhbmQgXCJ0ZXJyYXJpdW1cIi5gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RyaWRlID0gZGF0YS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGRpbSA9IHRoaXMuZGltID0gZGF0YS5oZWlnaHQgLSAyO1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgVWludDMyQXJyYXkoZGF0YS5kYXRhLmJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZyB8fCAnbWFwYm94JztcblxuICAgICAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBmbGFzaGluZyBzZWFtcyBiZXR3ZWVuIHRpbGVzLCBoZXJlIHdlIGFyZSBpbml0aWFsbHkgcG9wdWxhdGluZyBhIDFweCBib3JkZXIgb2YgcGl4ZWxzIGFyb3VuZCB0aGUgaW1hZ2VcbiAgICAgICAgLy8gd2l0aCB0aGUgZGF0YSBvZiB0aGUgbmVhcmVzdCBwaXhlbCBmcm9tIHRoZSBpbWFnZS4gdGhpcyBkYXRhIGlzIGV2ZW50dWFsbHkgcmVwbGFjZWQgd2hlbiB0aGUgdGlsZSdzIG5laWdoYm9yaW5nXG4gICAgICAgIC8vIHRpbGVzIGFyZSBsb2FkZWQgYW5kIHRoZSBhY2N1cmF0ZSBkYXRhIGNhbiBiZSBiYWNrZmlsbGVkIHVzaW5nIERFTURhdGEjYmFja2ZpbGxCb3JkZXJcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBkaW07IHgrKykge1xuICAgICAgICAgICAgLy8gbGVmdCB2ZXJ0aWNhbCBib3JkZXJcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoLTEsIHgpXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoMCwgeCldO1xuICAgICAgICAgICAgLy8gcmlnaHQgdmVydGljYWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSwgeCldID0gdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0gLSAxLCB4KV07XG4gICAgICAgICAgICAvLyBsZWZ0IGhvcml6b250YWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIC0xKV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIDApXTtcbiAgICAgICAgICAgIC8vIHJpZ2h0IGhvcml6b250YWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIGRpbSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCBkaW0gLSAxKV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29ybmVyc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KC0xLCAtMSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCgwLCAwKV07XG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltLCAtMSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0gLSAxLCAwKV07XG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoLTEsIGRpbSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCgwLCBkaW0gLSAxKV07XG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltLCBkaW0pXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltIC0gMSwgZGltIC0gMSldO1xuICAgIH1cblxuICAgIGdldCh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBwaXhlbHMgPSBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pZHgoeCwgeSkgKiA0O1xuICAgICAgICBjb25zdCB1bnBhY2sgPSB0aGlzLmVuY29kaW5nID09PSBcInRlcnJhcml1bVwiID8gdGhpcy5fdW5wYWNrVGVycmFyaXVtIDogdGhpcy5fdW5wYWNrTWFwYm94O1xuICAgICAgICByZXR1cm4gdW5wYWNrKHBpeGVsc1tpbmRleF0sIHBpeGVsc1tpbmRleCArIDFdLCBwaXhlbHNbaW5kZXggKyAyXSk7XG4gICAgfVxuXG4gICAgZ2V0VW5wYWNrVmVjdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGluZyA9PT0gXCJ0ZXJyYXJpdW1cIiA/IFsyNTYuMCwgMS4wLCAxLjAgLyAyNTYuMCwgMzI3NjguMF0gOiBbNjU1My42LCAyNS42LCAwLjEsIDEwMDAwLjBdO1xuICAgIH1cblxuICAgIF9pZHgoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHggPCAtMSB8fCB4ID49IHRoaXMuZGltICsgMSB8fCAgeSA8IC0xIHx8IHkgPj0gdGhpcy5kaW0gKyAxKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgREVNIGRhdGEnKTtcbiAgICAgICAgcmV0dXJuICh5ICsgMSkgKiB0aGlzLnN0cmlkZSArICh4ICsgMSk7XG4gICAgfVxuXG4gICAgX3VucGFja01hcGJveChyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgICAgIC8vIHVucGFja2luZyBmb3JtdWxhIGZvciBtYXBib3gudGVycmFpbi1yZ2I6XG4gICAgICAgIC8vIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9hY2Nlc3MtZWxldmF0aW9uLWRhdGEvI21hcGJveC10ZXJyYWluLXJnYlxuICAgICAgICByZXR1cm4gKChyICogMjU2ICogMjU2ICsgZyAqIDI1Ni4wICsgYikgLyAxMC4wIC0gMTAwMDAuMCk7XG4gICAgfVxuXG4gICAgX3VucGFja1RlcnJhcml1bShyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgICAgIC8vIHVucGFja2luZyBmb3JtdWxhIGZvciBtYXB6ZW4gdGVycmFyaXVtOlxuICAgICAgICAvLyBodHRwczovL2F3cy5hbWF6b24uY29tL3B1YmxpYy1kYXRhc2V0cy90ZXJyYWluL1xuICAgICAgICByZXR1cm4gKChyICogMjU2ICsgZyArIGIgLyAyNTYpIC0gMzI3NjguMCk7XG4gICAgfVxuXG4gICAgZ2V0UGl4ZWxzKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IHRoaXMuc3RyaWRlLCBoZWlnaHQ6IHRoaXMuc3RyaWRlfSwgbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcikpO1xuICAgIH1cblxuICAgIGJhY2tmaWxsQm9yZGVyKGJvcmRlclRpbGU6IERFTURhdGEsIGR4OiBudW1iZXIsIGR5OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuZGltICE9PSBib3JkZXJUaWxlLmRpbSkgdGhyb3cgbmV3IEVycm9yKCdkZW0gZGltZW5zaW9uIG1pc21hdGNoJyk7XG5cbiAgICAgICAgbGV0IHhNaW4gPSBkeCAqIHRoaXMuZGltLFxuICAgICAgICAgICAgeE1heCA9IGR4ICogdGhpcy5kaW0gKyB0aGlzLmRpbSxcbiAgICAgICAgICAgIHlNaW4gPSBkeSAqIHRoaXMuZGltLFxuICAgICAgICAgICAgeU1heCA9IGR5ICogdGhpcy5kaW0gKyB0aGlzLmRpbTtcblxuICAgICAgICBzd2l0Y2ggKGR4KSB7XG4gICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICB4TWluID0geE1heCAtIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgeE1heCA9IHhNaW4gKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGR5KSB7XG4gICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICB5TWluID0geU1heCAtIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgeU1heCA9IHlNaW4gKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBveCA9IC1keCAqIHRoaXMuZGltO1xuICAgICAgICBjb25zdCBveSA9IC1keSAqIHRoaXMuZGltO1xuICAgICAgICBmb3IgKGxldCB5ID0geU1pbjsgeSA8IHlNYXg7IHkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgeCA9IHhNaW47IHggPCB4TWF4OyB4KyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIHkpXSA9IGJvcmRlclRpbGUuZGF0YVt0aGlzLl9pZHgoeCArIG94LCB5ICsgb3kpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0RFTURhdGEnLCBERU1EYXRhKTtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCB0eXBlOiAnSW50MTYnLCBjb21wb25lbnRzOiAyfSxcbiAgICB7bmFtZTogJ2FfdGV4dHVyZV9wb3MnLCB0eXBlOiAnSW50MTYnLCBjb21wb25lbnRzOiAyfVxuXSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4vYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHR5cGUgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHR5cGUge1R5cGVkU3R5bGVMYXllcn0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvdHlwZWRfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgRmVhdHVyZUluZGV4IGZyb20gJy4vZmVhdHVyZV9pbmRleCc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmV4cG9ydCB0eXBlIEJ1Y2tldFBhcmFtZXRlcnM8TGF5ZXI6IFR5cGVkU3R5bGVMYXllcj4gPSB7XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBsYXllcnM6IEFycmF5PExheWVyPixcbiAgICB6b29tOiBudW1iZXIsXG4gICAgcGl4ZWxSYXRpbzogbnVtYmVyLFxuICAgIG92ZXJzY2FsaW5nOiBudW1iZXIsXG4gICAgY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5LFxuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICBzb3VyY2VJRDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFBvcHVsYXRlUGFyYW1ldGVycyA9IHtcbiAgICBmZWF0dXJlSW5kZXg6IEZlYXR1cmVJbmRleCxcbiAgICBpY29uRGVwZW5kZW5jaWVzOiB7fSxcbiAgICBwYXR0ZXJuRGVwZW5kZW5jaWVzOiB7fSxcbiAgICBnbHlwaERlcGVuZGVuY2llczoge30sXG4gICAgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+XG59XG5cbmV4cG9ydCB0eXBlIEluZGV4ZWRGZWF0dXJlID0ge1xuICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxufVxuXG5leHBvcnQgdHlwZSBCdWNrZXRGZWF0dXJlID0ge3xcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICBwcm9wZXJ0aWVzOiBPYmplY3QsXG4gICAgdHlwZTogMSB8IDIgfCAzLFxuICAgIGlkPzogYW55LFxuICAgICtwYXR0ZXJuczoge1tzdHJpbmddOiB7XCJtaW5cIjogc3RyaW5nLCBcIm1pZFwiOiBzdHJpbmcsIFwibWF4XCI6IHN0cmluZ319LFxuICAgIHNvcnRLZXk/OiBudW1iZXJcbnx9O1xuXG4vKipcbiAqIFRoZSBgQnVja2V0YCBpbnRlcmZhY2UgaXMgdGhlIHNpbmdsZSBwb2ludCBvZiBrbm93bGVkZ2UgYWJvdXQgdHVybmluZyB2ZWN0b3JcbiAqIHRpbGVzIGludG8gV2ViR0wgYnVmZmVycy5cbiAqXG4gKiBgQnVja2V0YCBpcyBhbiBhYnN0cmFjdCBpbnRlcmZhY2UuIEFuIGltcGxlbWVudGF0aW9uIGV4aXN0cyBmb3IgZWFjaCBzdHlsZSBsYXllciB0eXBlLlxuICogQ3JlYXRlIGEgYnVja2V0IHZpYSB0aGUgYFN0eWxlTGF5ZXIjY3JlYXRlQnVja2V0YCBtZXRob2QuXG4gKlxuICogVGhlIGNvbmNyZXRlIGJ1Y2tldCB0eXBlcywgdXNpbmcgbGF5b3V0IG9wdGlvbnMgZnJvbSB0aGUgc3R5bGUgbGF5ZXIsXG4gKiB0cmFuc2Zvcm0gZmVhdHVyZSBnZW9tZXRyaWVzIGludG8gdmVydGV4IGFuZCBpbmRleCBkYXRhIGZvciB1c2UgYnkgdGhlXG4gKiB2ZXJ0ZXggc2hhZGVyLiAgVGhleSBhbHNvICh2aWEgYFByb2dyYW1Db25maWd1cmF0aW9uYCkgdXNlIGZlYXR1cmVcbiAqIHByb3BlcnRpZXMgYW5kIHRoZSB6b29tIGxldmVsIHRvIHBvcHVsYXRlIHRoZSBhdHRyaWJ1dGVzIG5lZWRlZCBmb3JcbiAqIGRhdGEtZHJpdmVuIHN0eWxpbmcuXG4gKlxuICogQnVja2V0cyBhcmUgZGVzaWduZWQgdG8gYmUgYnVpbHQgb24gYSB3b3JrZXIgdGhyZWFkIGFuZCB0aGVuIHNlcmlhbGl6ZWQgYW5kXG4gKiB0cmFuc2ZlcnJlZCBiYWNrIHRvIHRoZSBtYWluIHRocmVhZCBmb3IgcmVuZGVyaW5nLiAgT24gdGhlIHdvcmtlciBzaWRlLCBhXG4gKiBidWNrZXQncyB2ZXJ0ZXgsIGluZGV4LCBhbmQgYXR0cmlidXRlIGRhdGEgaXMgc3RvcmVkIGluIGBidWNrZXQuYXJyYXlzOlxuICogQXJyYXlHcm91cGAuICBXaGVuIGEgYnVja2V0J3MgZGF0YSBpcyBzZXJpYWxpemVkIGFuZCBzZW50IGJhY2sgdG8gdGhlIG1haW5cbiAqIHRocmVhZCwgaXMgZ2V0cyBkZXNlcmlhbGl6ZWQgKHVzaW5nIGBuZXcgQnVja2V0KHNlcmlhbGl6ZWRCdWNrZXREYXRhKWAsIHdpdGhcbiAqIHRoZSBhcnJheSBkYXRhIG5vdyBzdG9yZWQgaW4gYGJ1Y2tldC5idWZmZXJzOiBCdWZmZXJHcm91cGAuICBCdWZmZXJHcm91cHNcbiAqIGhvbGQgdGhlIHNhbWUgZGF0YSBhcyBBcnJheUdyb3VwcywgYnV0IGFyZSB0dW5lZCBmb3IgY29uc3VtcHRpb24gYnkgV2ViR0wuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXQge1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgK2xheWVyczogQXJyYXk8YW55PjtcbiAgICArc3RhdGVEZXBlbmRlbnRMYXllcnM6IEFycmF5PGFueT47XG4gICAgK3N0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKTogdm9pZDtcbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KTogdm9pZDtcbiAgICBpc0VtcHR5KCk6IGJvb2xlYW47XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCk6IHZvaWQ7XG4gICAgdXBsb2FkUGVuZGluZygpOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogUmVsZWFzZSB0aGUgV2ViR0wgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnVmZmVycy4gTm90ZSB0aGF0IGJlY2F1c2VcbiAgICAgKiBidWNrZXRzIGFyZSBzaGFyZWQgYmV0d2VlbiBsYXllcnMgaGF2aW5nIHRoZSBzYW1lIGxheW91dCBwcm9wZXJ0aWVzLCB0aGV5XG4gICAgICogbXVzdCBiZSBkZXN0cm95ZWQgaW4gZ3JvdXBzIChhbGwgYnVja2V0cyBmb3IgYSB0aWxlLCBvciBhbGwgc3ltYm9sIGJ1Y2tldHMpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBkZXN0cm95KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZShpbnB1dDogQXJyYXk8QnVja2V0Piwgc3R5bGU6IFN0eWxlKToge1tzdHJpbmddOiBCdWNrZXR9IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7fTtcblxuICAgIC8vIEd1YXJkIGFnYWluc3QgdGhlIGNhc2Ugd2hlcmUgdGhlIG1hcCdzIHN0eWxlIGhhcyBiZWVuIHNldCB0byBudWxsIHdoaWxlXG4gICAgLy8gdGhpcyBidWNrZXQgaGFzIGJlZW4gcGFyc2luZy5cbiAgICBpZiAoIXN0eWxlKSByZXR1cm4gb3V0cHV0O1xuXG4gICAgZm9yIChjb25zdCBidWNrZXQgb2YgaW5wdXQpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gYnVja2V0LmxheWVySWRzXG4gICAgICAgICAgICAubWFwKChpZCkgPT4gc3R5bGUuZ2V0TGF5ZXIoaWQpKVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgICBpZiAobGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsb29rIHVwIFN0eWxlTGF5ZXIgb2JqZWN0cyBmcm9tIGxheWVyIGlkcyAoc2luY2Ugd2UgZG9uJ3RcbiAgICAgICAgLy8gd2FudCB0byB3YXN0ZSB0aW1lIHNlcmlhbGl6aW5nL2NvcHlpbmcgdGhlbSBmcm9tIHRoZSB3b3JrZXIpXG4gICAgICAgIChidWNrZXQ6IGFueSkubGF5ZXJzID0gbGF5ZXJzO1xuICAgICAgICBpZiAoKGJ1Y2tldDogYW55KS5zdGF0ZURlcGVuZGVudExheWVySWRzKSB7XG4gICAgICAgICAgICAoYnVja2V0OiBhbnkpLnN0YXRlRGVwZW5kZW50TGF5ZXJzID0gKGJ1Y2tldDogYW55KS5zdGF0ZURlcGVuZGVudExheWVySWRzLm1hcCgobElkKSA9PiBsYXllcnMuZmlsdGVyKChsKSA9PiBsLmlkID09PSBsSWQpWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICAgICAgb3V0cHV0W2xheWVyLmlkXSA9IGJ1Y2tldDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG59XG4iLCIvLyBAZmxvdyBzdHJpY3RcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5jbGFzcyBEaWN0aW9uYXJ5Q29kZXIge1xuICAgIF9zdHJpbmdUb051bWJlcjogeyBbc3RyaW5nXTogbnVtYmVyIH07XG4gICAgX251bWJlclRvU3RyaW5nOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3Ioc3RyaW5nczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9zdHJpbmdUb051bWJlciA9IHt9O1xuICAgICAgICB0aGlzLl9udW1iZXJUb1N0cmluZyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZyA9IHN0cmluZ3NbaV07XG4gICAgICAgICAgICB0aGlzLl9zdHJpbmdUb051bWJlcltzdHJpbmddID0gaTtcbiAgICAgICAgICAgIHRoaXMuX251bWJlclRvU3RyaW5nW2ldID0gc3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5jb2RlKHN0cmluZzogc3RyaW5nKSB7XG4gICAgICAgIGFzc2VydChzdHJpbmcgaW4gdGhpcy5fc3RyaW5nVG9OdW1iZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nVG9OdW1iZXJbc3RyaW5nXTtcbiAgICB9XG5cbiAgICBkZWNvZGUobjogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydChuIDwgdGhpcy5fbnVtYmVyVG9TdHJpbmcubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlclRvU3RyaW5nW25dO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGljdGlvbmFyeUNvZGVyO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHtHZW9KU09OR2VvbWV0cnl9IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5cbmNsYXNzIEZlYXR1cmUge1xuICAgIHR5cGU6ICdGZWF0dXJlJztcbiAgICBfZ2VvbWV0cnk6ID9HZW9KU09OR2VvbWV0cnk7XG4gICAgcHJvcGVydGllczoge307XG4gICAgaWQ6IG51bWJlciB8IHN0cmluZyB8IHZvaWQ7XG5cbiAgICBfdmVjdG9yVGlsZUZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlO1xuXG4gICAgY29uc3RydWN0b3IodmVjdG9yVGlsZUZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLCB6OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdGZWF0dXJlJztcblxuICAgICAgICB0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZSA9IHZlY3RvclRpbGVGZWF0dXJlO1xuICAgICAgICAodmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3ogPSB6O1xuICAgICAgICAodmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3ggPSB4O1xuICAgICAgICAodmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3kgPSB5O1xuXG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHZlY3RvclRpbGVGZWF0dXJlLnByb3BlcnRpZXM7XG5cbiAgICAgICAgaWYgKHZlY3RvclRpbGVGZWF0dXJlLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB2ZWN0b3JUaWxlRmVhdHVyZS5pZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBnZW9tZXRyeSgpOiA/R2VvSlNPTkdlb21ldHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuX2dlb21ldHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5ID0gdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUudG9HZW9KU09OKFxuICAgICAgICAgICAgICAgICh0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feCxcbiAgICAgICAgICAgICAgICAodGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3ksXG4gICAgICAgICAgICAgICAgKHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl96KS5nZW9tZXRyeTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2VvbWV0cnk7XG4gICAgfVxuXG4gICAgc2V0IGdlb21ldHJ5KGc6ID9HZW9KU09OR2VvbWV0cnkpIHtcbiAgICAgICAgdGhpcy5fZ2VvbWV0cnkgPSBnO1xuICAgIH1cblxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGdlb21ldHJ5OiB0aGlzLmdlb21ldHJ5XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgaSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gJ19nZW9tZXRyeScgfHwgaSA9PT0gJ192ZWN0b3JUaWxlRmVhdHVyZScpIGNvbnRpbnVlO1xuICAgICAgICAgICAganNvbltpXSA9ICh0aGlzOiBhbnkpW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmVhdHVyZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVTdGF0ZXMgPSB7W2ZlYXR1cmVfaWQ6IHN0cmluZ106IEZlYXR1cmVTdGF0ZX07XG5leHBvcnQgdHlwZSBMYXllckZlYXR1cmVTdGF0ZXMgPSB7W2xheWVyOiBzdHJpbmddOiBGZWF0dXJlU3RhdGVzfTtcblxuLyoqXG4gKiBTb3VyY2VGZWF0dXJlU3RhdGUgbWFuYWdlcyB0aGUgc3RhdGUgYW5kIHBlbmRpbmcgY2hhbmdlc1xuICogdG8gZmVhdHVyZXMgaW4gYSBzb3VyY2UsIHNlcGFyYXRlZCBieSBzb3VyY2UgbGF5ZXIuXG4gKiBzdGF0ZUNoYW5nZXMgYW5kIGRlbGV0ZWRTdGF0ZXMgYmF0Y2ggYWxsIGNoYW5nZXMgdG8gdGhlIHRpbGUgKHVwZGF0ZXMgYW5kIHJlbW92ZXMsIHJlc3BlY3RpdmVseSlcbiAqIGJldHdlZW4gY29hbGVzY2UoKSBldmVudHMuIGFkZEZlYXR1cmVTdGF0ZSgpIGFuZCByZW1vdmVGZWF0dXJlU3RhdGUoKSBhbHNvIHVwZGF0ZSB0aGVpciBjb3VudGVycGFydCdzXG4gKiBsaXN0IG9mIGNoYW5nZXMsIHN1Y2ggdGhhdCBjb2FsZXNjZSgpIGNhbiBhcHBseSB0aGUgcHJvcGVyIHN0YXRlIGNoYW5nZXMgd2hpbGUgYWdub3N0aWMgdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuXG4gKiBJbiBkZWxldGVkU3RhdGVzLCBhbGwgbnVsbCdzIGRlbm90ZSBjb21wbGV0ZSByZW1vdmFsIG9mIHN0YXRlIGF0IHRoYXQgc2NvcGVcbiAqIEBwcml2YXRlXG4qL1xuY2xhc3MgU291cmNlRmVhdHVyZVN0YXRlIHtcbiAgICBzdGF0ZTogTGF5ZXJGZWF0dXJlU3RhdGVzO1xuICAgIHN0YXRlQ2hhbmdlczogTGF5ZXJGZWF0dXJlU3RhdGVzO1xuICAgIGRlbGV0ZWRTdGF0ZXM6IHt9O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMgPSB7fTtcbiAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzID0ge307XG4gICAgfVxuXG4gICAgdXBkYXRlU3RhdGUoc291cmNlTGF5ZXI6IHN0cmluZywgZmVhdHVyZUlkOiBudW1iZXIsIG5ld1N0YXRlOiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IFN0cmluZyhmZWF0dXJlSWQpO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0gPSB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0gfHwge307XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSB8fCB7fTtcbiAgICAgICAgZXh0ZW5kKHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSwgbmV3U3RhdGUpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZ0IGluIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZ0ICE9PSBmZWF0dXJlKSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2Z0XSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlRGVsZXRpb25RdWV1ZWQgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdICYmIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPT09IG51bGw7XG4gICAgICAgICAgICBpZiAoZmVhdHVyZURlbGV0aW9uUXVldWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1N0YXRlW3Byb3BdKSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW3Byb3BdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0aW9uSW5RdWV1ZSA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gJiYgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSAmJiB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV0gPT09IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGlvbkluUXVldWUpIGRlbGV0ZSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyOiBzdHJpbmcsIGZlYXR1cmVJZD86IG51bWJlciwga2V5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyRGVsZXRlZCA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPT09IG51bGw7XG4gICAgICAgIGlmIChzb3VyY2VMYXllckRlbGV0ZWQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBmZWF0dXJlID0gU3RyaW5nKGZlYXR1cmVJZCk7XG5cbiAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gfHwge307XG5cbiAgICAgICAgaWYgKGtleSAmJiBmZWF0dXJlSWQgIT09IHVuZGVmaW5lZCAmJiBmZWF0dXJlSWQgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSB8fCB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZlYXR1cmVJZCAhPT0gdW5kZWZpbmVkICYmIGZlYXR1cmVJZCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVJblF1ZXVlID0gdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdICYmIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXTtcbiAgICAgICAgICAgIGlmICh1cGRhdGVJblF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSkgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldID0gbnVsbDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBnZXRTdGF0ZShzb3VyY2VMYXllcjogc3RyaW5nLCBmZWF0dXJlSWQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gU3RyaW5nKGZlYXR1cmVJZCk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSB8fCB7fTtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXSB8fCB7fTtcblxuICAgICAgICBjb25zdCByZWNvbmNpbGVkU3RhdGUgPSBleHRlbmQoe30sIGJhc2VbZmVhdHVyZV0sIGNoYW5nZXNbZmVhdHVyZV0pO1xuXG4gICAgICAgIC8vcmV0dXJuIGVtcHR5IG9iamVjdCBpZiB0aGUgd2hvbGUgc291cmNlIGxheWVyIGlzIGF3YWl0aW5nIGRlbGV0aW9uXG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID09PSBudWxsKSByZXR1cm4ge307XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVEZWxldGlvbnMgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVJZF07XG4gICAgICAgICAgICBpZiAoZmVhdHVyZURlbGV0aW9ucyA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGZlYXR1cmVEZWxldGlvbnMpIGRlbGV0ZSByZWNvbmNpbGVkU3RhdGVbcHJvcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZWRTdGF0ZTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplVGlsZVN0YXRlKHRpbGU6IFRpbGUsIHBhaW50ZXI6IGFueSkge1xuICAgICAgICB0aWxlLnNldEZlYXR1cmVTdGF0ZSh0aGlzLnN0YXRlLCBwYWludGVyKTtcbiAgICB9XG5cbiAgICBjb2FsZXNjZUNoYW5nZXModGlsZXM6IHtbYW55XTogVGlsZX0sIHBhaW50ZXI6IGFueSkge1xuICAgICAgICAvL3RyYWNrIGNoYW5nZXMgd2l0aCBmdWxsIHN0YXRlIG9iamVjdHMsIGJ1dCBvbmx5IGZvciBmZWF0dXJlcyB0aGF0IGdvdCBtb2RpZmllZFxuICAgICAgICBjb25zdCBmZWF0dXJlc0NoYW5nZWQ6IExheWVyRmVhdHVyZVN0YXRlcyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlTGF5ZXIgaW4gdGhpcy5zdGF0ZUNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdICA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJTdGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBpbiB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdKSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGV4dGVuZCh0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSwgdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdKTtcbiAgICAgICAgICAgICAgICBsYXllclN0YXRlc1tmZWF0dXJlXSA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVhdHVyZXNDaGFuZ2VkW3NvdXJjZUxheWVyXSA9IGxheWVyU3RhdGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzb3VyY2VMYXllciBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdICA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJTdGF0ZXMgPSB7fTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZ0IGluIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyU3RhdGVzW2Z0XSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmdF0gPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZVdob2xlRmVhdHVyZVN0YXRlID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9PT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlbGV0ZVdob2xlRmVhdHVyZVN0YXRlKSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJTdGF0ZXNbZmVhdHVyZV0gPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZlYXR1cmVzQ2hhbmdlZFtzb3VyY2VMYXllcl0gPSBmZWF0dXJlc0NoYW5nZWRbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICAgICAgZXh0ZW5kKGZlYXR1cmVzQ2hhbmdlZFtzb3VyY2VMYXllcl0sIGxheWVyU3RhdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzID0ge307XG4gICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlcyA9IHt9O1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhmZWF0dXJlc0NoYW5nZWQpLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1tpZF07XG4gICAgICAgICAgICB0aWxlLnNldEZlYXR1cmVTdGF0ZShmZWF0dXJlc0NoYW5nZWQsIHBhaW50ZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTb3VyY2VGZWF0dXJlU3RhdGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi9leHRlbnQnO1xuaW1wb3J0IGZlYXR1cmVGaWx0ZXIgZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgR3JpZCBmcm9tICdncmlkLWluZGV4JztcbmltcG9ydCBEaWN0aW9uYXJ5Q29kZXIgZnJvbSAnLi4vdXRpbC9kaWN0aW9uYXJ5X2NvZGVyJztcbmltcG9ydCB2dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmltcG9ydCBQcm90b2J1ZiBmcm9tICdwYmYnO1xuaW1wb3J0IEdlb0pTT05GZWF0dXJlIGZyb20gJy4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uJztcbmltcG9ydCB7YXJyYXlzSW50ZXJzZWN0fSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgU291cmNlRmVhdHVyZVN0YXRlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0JveH0gZnJvbSAnLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuXG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlRmlsdGVyfSBmcm9tICcuLi9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuaW1wb3J0IHtGZWF0dXJlSW5kZXhBcnJheX0gZnJvbSAnLi9hcnJheV90eXBlcyc7XG5cbnR5cGUgUXVlcnlQYXJhbWV0ZXJzID0ge1xuICAgIHNjYWxlOiBudW1iZXIsXG4gICAgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICB0aWxlU2l6ZTogbnVtYmVyLFxuICAgIHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICBjYW1lcmFRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgcXVlcnlQYWRkaW5nOiBudW1iZXIsXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGZpbHRlcjogRmlsdGVyU3BlY2lmaWNhdGlvbixcbiAgICAgICAgbGF5ZXJzOiBBcnJheTxzdHJpbmc+LFxuICAgIH1cbn1cblxuY2xhc3MgRmVhdHVyZUluZGV4IHtcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQ7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB6OiBudW1iZXI7XG4gICAgZ3JpZDogR3JpZDtcbiAgICBncmlkM0Q6IEdyaWQ7XG4gICAgZmVhdHVyZUluZGV4QXJyYXk6IEZlYXR1cmVJbmRleEFycmF5O1xuXG4gICAgcmF3VGlsZURhdGE6IEFycmF5QnVmZmVyO1xuICAgIGJ1Y2tldExheWVySURzOiBBcnJheTxBcnJheTxzdHJpbmc+PjtcblxuICAgIHZ0TGF5ZXJzOiB7W3N0cmluZ106IFZlY3RvclRpbGVMYXllcn07XG4gICAgc291cmNlTGF5ZXJDb2RlcjogRGljdGlvbmFyeUNvZGVyO1xuXG4gICAgY29uc3RydWN0b3IodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELFxuICAgICAgICAgICAgICAgIGdyaWQ/OiBHcmlkLFxuICAgICAgICAgICAgICAgIGZlYXR1cmVJbmRleEFycmF5PzogRmVhdHVyZUluZGV4QXJyYXkpIHtcbiAgICAgICAgdGhpcy50aWxlSUQgPSB0aWxlSUQ7XG4gICAgICAgIHRoaXMueCA9IHRpbGVJRC5jYW5vbmljYWwueDtcbiAgICAgICAgdGhpcy55ID0gdGlsZUlELmNhbm9uaWNhbC55O1xuICAgICAgICB0aGlzLnogPSB0aWxlSUQuY2Fub25pY2FsLno7XG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQgfHwgbmV3IEdyaWQoRVhURU5ULCAxNiwgMCk7XG4gICAgICAgIHRoaXMuZ3JpZDNEID0gbmV3IEdyaWQoRVhURU5ULCAxNiwgMCk7XG4gICAgICAgIHRoaXMuZmVhdHVyZUluZGV4QXJyYXkgPSBmZWF0dXJlSW5kZXhBcnJheSB8fCBuZXcgRmVhdHVyZUluZGV4QXJyYXkoKTtcbiAgICB9XG5cbiAgICBpbnNlcnQoZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBmZWF0dXJlSW5kZXg6IG51bWJlciwgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLCBidWNrZXRJbmRleDogbnVtYmVyLCBpczNEPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmZlYXR1cmVJbmRleEFycmF5Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5mZWF0dXJlSW5kZXhBcnJheS5lbXBsYWNlQmFjayhmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4KTtcblxuICAgICAgICBjb25zdCBncmlkID0gaXMzRCA/IHRoaXMuZ3JpZDNEIDogdGhpcy5ncmlkO1xuXG4gICAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgZ2VvbWV0cnkubGVuZ3RoOyByKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJpbmcgPSBnZW9tZXRyeVtyXTtcblxuICAgICAgICAgICAgY29uc3QgYmJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByaW5nW2ldO1xuICAgICAgICAgICAgICAgIGJib3hbMF0gPSBNYXRoLm1pbihiYm94WzBdLCBwLngpO1xuICAgICAgICAgICAgICAgIGJib3hbMV0gPSBNYXRoLm1pbihiYm94WzFdLCBwLnkpO1xuICAgICAgICAgICAgICAgIGJib3hbMl0gPSBNYXRoLm1heChiYm94WzJdLCBwLngpO1xuICAgICAgICAgICAgICAgIGJib3hbM10gPSBNYXRoLm1heChiYm94WzNdLCBwLnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYmJveFswXSA8IEVYVEVOVCAmJlxuICAgICAgICAgICAgICAgIGJib3hbMV0gPCBFWFRFTlQgJiZcbiAgICAgICAgICAgICAgICBiYm94WzJdID49IDAgJiZcbiAgICAgICAgICAgICAgICBiYm94WzNdID49IDApIHtcbiAgICAgICAgICAgICAgICBncmlkLmluc2VydChrZXksIGJib3hbMF0sIGJib3hbMV0sIGJib3hbMl0sIGJib3hbM10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZFZUTGF5ZXJzKCk6IHtbc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfSB7XG4gICAgICAgIGlmICghdGhpcy52dExheWVycykge1xuICAgICAgICAgICAgdGhpcy52dExheWVycyA9IG5ldyB2dC5WZWN0b3JUaWxlKG5ldyBQcm90b2J1Zih0aGlzLnJhd1RpbGVEYXRhKSkubGF5ZXJzO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VMYXllckNvZGVyID0gbmV3IERpY3Rpb25hcnlDb2Rlcih0aGlzLnZ0TGF5ZXJzID8gT2JqZWN0LmtleXModGhpcy52dExheWVycykuc29ydCgpIDogWydfZ2VvanNvblRpbGVMYXllciddKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52dExheWVycztcbiAgICB9XG5cbiAgICAvLyBGaW5kcyBub24tc3ltYm9sIGZlYXR1cmVzIGluIHRoaXMgdGlsZSBhdCBhIHBhcnRpY3VsYXIgcG9zaXRpb24uXG4gICAgcXVlcnkoYXJnczogUXVlcnlQYXJhbWV0ZXJzLCBzdHlsZUxheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfSwgc291cmNlRmVhdHVyZVN0YXRlOiBTb3VyY2VGZWF0dXJlU3RhdGUpOiB7W3N0cmluZ106IEFycmF5PHsgZmVhdHVyZUluZGV4OiBudW1iZXIsIGZlYXR1cmU6IEdlb0pTT05GZWF0dXJlIH0+fSB7XG4gICAgICAgIHRoaXMubG9hZFZUTGF5ZXJzKCk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gYXJncy5wYXJhbXMgfHwge30sXG4gICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0cyA9IEVYVEVOVCAvIGFyZ3MudGlsZVNpemUgLyBhcmdzLnNjYWxlLFxuICAgICAgICAgICAgZmlsdGVyID0gZmVhdHVyZUZpbHRlcihwYXJhbXMuZmlsdGVyKTtcblxuICAgICAgICBjb25zdCBxdWVyeUdlb21ldHJ5ID0gYXJncy5xdWVyeUdlb21ldHJ5O1xuICAgICAgICBjb25zdCBxdWVyeVBhZGRpbmcgPSBhcmdzLnF1ZXJ5UGFkZGluZyAqIHBpeGVsc1RvVGlsZVVuaXRzO1xuXG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IGdldEJvdW5kcyhxdWVyeUdlb21ldHJ5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmcgPSB0aGlzLmdyaWQucXVlcnkoYm91bmRzLm1pblggLSBxdWVyeVBhZGRpbmcsIGJvdW5kcy5taW5ZIC0gcXVlcnlQYWRkaW5nLCBib3VuZHMubWF4WCArIHF1ZXJ5UGFkZGluZywgYm91bmRzLm1heFkgKyBxdWVyeVBhZGRpbmcpO1xuXG4gICAgICAgIGNvbnN0IGNhbWVyYUJvdW5kcyA9IGdldEJvdW5kcyhhcmdzLmNhbWVyYVF1ZXJ5R2VvbWV0cnkpO1xuICAgICAgICBjb25zdCBtYXRjaGluZzNEID0gdGhpcy5ncmlkM0QucXVlcnkoXG4gICAgICAgICAgICAgICAgY2FtZXJhQm91bmRzLm1pblggLSBxdWVyeVBhZGRpbmcsIGNhbWVyYUJvdW5kcy5taW5ZIC0gcXVlcnlQYWRkaW5nLCBjYW1lcmFCb3VuZHMubWF4WCArIHF1ZXJ5UGFkZGluZywgY2FtZXJhQm91bmRzLm1heFkgKyBxdWVyeVBhZGRpbmcsXG4gICAgICAgICAgICAgICAgKGJ4MSwgYnkxLCBieDIsIGJ5MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9seWdvbkludGVyc2VjdHNCb3goYXJncy5jYW1lcmFRdWVyeUdlb21ldHJ5LCBieDEgLSBxdWVyeVBhZGRpbmcsIGJ5MSAtIHF1ZXJ5UGFkZGluZywgYngyICsgcXVlcnlQYWRkaW5nLCBieTIgKyBxdWVyeVBhZGRpbmcpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIG1hdGNoaW5nM0QpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nLnB1c2goa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdGNoaW5nLnNvcnQodG9wRG93bkZlYXR1cmVDb21wYXJhdG9yKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgbGV0IHByZXZpb3VzSW5kZXg7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWF0Y2hpbmcubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2hpbmdba107XG5cbiAgICAgICAgICAgIC8vIGRvbid0IGNoZWNrIHRoZSBzYW1lIGZlYXR1cmUgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gcHJldmlvdXNJbmRleCkgY29udGludWU7XG4gICAgICAgICAgICBwcmV2aW91c0luZGV4ID0gaW5kZXg7XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5mZWF0dXJlSW5kZXhBcnJheS5nZXQoaW5kZXgpO1xuICAgICAgICAgICAgbGV0IGZlYXR1cmVHZW9tZXRyeSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUoXG4gICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgIG1hdGNoLmJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIG1hdGNoLnNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgbWF0Y2guZmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICBwYXJhbXMubGF5ZXJzLFxuICAgICAgICAgICAgICAgIHN0eWxlTGF5ZXJzLFxuICAgICAgICAgICAgICAgIChmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSwgc3R5bGVMYXllcjogU3R5bGVMYXllcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZlYXR1cmVHZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBmZWF0dXJlU3RhdGUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBmZWF0dXJlLXN0YXRlYCBleHByZXNzaW9uIGV2YWx1YXRpb24gcmVxdWlyZXMgZmVhdHVyZSBzdGF0ZSB0byBiZSBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZSA9IHNvdXJjZUZlYXR1cmVTdGF0ZS5nZXRTdGF0ZShzdHlsZUxheWVyLnNvdXJjZUxheWVyIHx8ICdfZ2VvanNvblRpbGVMYXllcicsIGZlYXR1cmUuaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZUxheWVyLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUocXVlcnlHZW9tZXRyeSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBmZWF0dXJlR2VvbWV0cnksIHRoaXMueiwgYXJncy50cmFuc2Zvcm0sIHBpeGVsc1RvVGlsZVVuaXRzLCBhcmdzLnBpeGVsUG9zTWF0cml4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBsb2FkTWF0Y2hpbmdGZWF0dXJlKFxuICAgICAgICByZXN1bHQ6IHtbc3RyaW5nXTogQXJyYXk8eyBmZWF0dXJlSW5kZXg6IG51bWJlciwgZmVhdHVyZTogR2VvSlNPTkZlYXR1cmUgfT59LFxuICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgIGZlYXR1cmVJbmRleDogbnVtYmVyLFxuICAgICAgICBmaWx0ZXI6IEZlYXR1cmVGaWx0ZXIsXG4gICAgICAgIGZpbHRlckxheWVySURzOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICBzdHlsZUxheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfSxcbiAgICAgICAgaW50ZXJzZWN0aW9uVGVzdD86IChmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSwgc3R5bGVMYXllcjogU3R5bGVMYXllcikgPT4gYm9vbGVhbiB8IG51bWJlcikge1xuXG4gICAgICAgIGNvbnN0IGxheWVySURzID0gdGhpcy5idWNrZXRMYXllcklEc1tidWNrZXRJbmRleF07XG4gICAgICAgIGlmIChmaWx0ZXJMYXllcklEcyAmJiAhYXJyYXlzSW50ZXJzZWN0KGZpbHRlckxheWVySURzLCBsYXllcklEcykpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJOYW1lID0gdGhpcy5zb3VyY2VMYXllckNvZGVyLmRlY29kZShzb3VyY2VMYXllckluZGV4KTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB0aGlzLnZ0TGF5ZXJzW3NvdXJjZUxheWVyTmFtZV07XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBzb3VyY2VMYXllci5mZWF0dXJlKGZlYXR1cmVJbmRleCk7XG5cbiAgICAgICAgaWYgKCFmaWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSwgZmVhdHVyZSkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBsYXllcklEcy5sZW5ndGg7IGwrKykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJRCA9IGxheWVySURzW2xdO1xuXG4gICAgICAgICAgICBpZiAoZmlsdGVyTGF5ZXJJRHMgJiYgZmlsdGVyTGF5ZXJJRHMuaW5kZXhPZihsYXllcklEKSA8IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHN0eWxlTGF5ZXJzW2xheWVySURdO1xuICAgICAgICAgICAgaWYgKCFzdHlsZUxheWVyKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uWiA9ICFpbnRlcnNlY3Rpb25UZXN0IHx8IGludGVyc2VjdGlvblRlc3QoZmVhdHVyZSwgc3R5bGVMYXllcik7XG4gICAgICAgICAgICBpZiAoIWludGVyc2VjdGlvblopIHtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IGFwcGxpZWQgZm9yIG5vbi1zeW1ib2wgZmVhdHVyZXNcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ2VvanNvbkZlYXR1cmUgPSBuZXcgR2VvSlNPTkZlYXR1cmUoZmVhdHVyZSwgdGhpcy56LCB0aGlzLngsIHRoaXMueSk7XG4gICAgICAgICAgICAoZ2VvanNvbkZlYXR1cmU6IGFueSkubGF5ZXIgPSBzdHlsZUxheWVyLnNlcmlhbGl6ZSgpO1xuICAgICAgICAgICAgbGV0IGxheWVyUmVzdWx0ID0gcmVzdWx0W2xheWVySURdO1xuICAgICAgICAgICAgaWYgKGxheWVyUmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBsYXllclJlc3VsdCA9IHJlc3VsdFtsYXllcklEXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGF5ZXJSZXN1bHQucHVzaCh7ZmVhdHVyZUluZGV4LCBmZWF0dXJlOiBnZW9qc29uRmVhdHVyZSwgaW50ZXJzZWN0aW9uWn0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2l2ZW4gYSBzZXQgb2Ygc3ltYm9sIGluZGV4ZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb29rZWQgdXAsXG4gICAgLy8gcmV0dXJuIGEgbWF0Y2hpbmcgc2V0IG9mIEdlb0pTT05GZWF0dXJlc1xuICAgIGxvb2t1cFN5bWJvbEZlYXR1cmVzKHN5bWJvbEZlYXR1cmVJbmRleGVzOiBBcnJheTxudW1iZXI+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclNwZWM6IEZpbHRlclNwZWNpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGF5ZXJJRHM6IEFycmF5PHN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVMYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn0pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIHRoaXMubG9hZFZUTGF5ZXJzKCk7XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gZmVhdHVyZUZpbHRlcihmaWx0ZXJTcGVjKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbEZlYXR1cmVJbmRleCBvZiBzeW1ib2xGZWF0dXJlSW5kZXhlcykge1xuICAgICAgICAgICAgdGhpcy5sb2FkTWF0Y2hpbmdGZWF0dXJlKFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICBidWNrZXRJbmRleCxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVyTGF5ZXJJRHMsXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGhhc0xheWVyKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklEcyBvZiB0aGlzLmJ1Y2tldExheWVySURzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxheWVySUQgb2YgbGF5ZXJJRHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWQgPT09IGxheWVySUQpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoXG4gICAgJ0ZlYXR1cmVJbmRleCcsXG4gICAgRmVhdHVyZUluZGV4LFxuICAgIHtvbWl0OiBbJ3Jhd1RpbGVEYXRhJywgJ3NvdXJjZUxheWVyQ29kZXInXX1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IEZlYXR1cmVJbmRleDtcblxuZnVuY3Rpb24gZ2V0Qm91bmRzKGdlb21ldHJ5OiBBcnJheTxQb2ludD4pIHtcbiAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgbGV0IG1heFggPSAtSW5maW5pdHk7XG4gICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG4gICAgZm9yIChjb25zdCBwIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwLngpO1xuICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcC55KTtcbiAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHAueCk7XG4gICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwLnkpO1xuICAgIH1cbiAgICByZXR1cm4ge21pblgsIG1pblksIG1heFgsIG1heFl9O1xufVxuXG5mdW5jdGlvbiB0b3BEb3duRmVhdHVyZUNvbXBhcmF0b3IoYSwgYikge1xuICAgIHJldHVybiBiIC0gYTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dW5pcXVlSWQsIGRlZXBFcXVhbCwgcGFyc2VDYWNoZUNvbnRyb2x9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge2Rlc2VyaWFsaXplIGFzIGRlc2VyaWFsaXplQnVja2V0fSBmcm9tICcuLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgRmVhdHVyZUluZGV4IGZyb20gJy4uL2RhdGEvZmVhdHVyZV9pbmRleCc7XG5pbXBvcnQgR2VvSlNPTkZlYXR1cmUgZnJvbSAnLi4vdXRpbC92ZWN0b3J0aWxlX3RvX2dlb2pzb24nO1xuaW1wb3J0IGZlYXR1cmVGaWx0ZXIgZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHtSYXN0ZXJCb3VuZHNBcnJheSwgQ29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHJhc3RlckJvdW5kc0F0dHJpYnV0ZXMgZnJvbSAnLi4vZGF0YS9yYXN0ZXJfYm91bmRzX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2RhdGEvaW5kZXhfYXJyYXlfdHlwZSc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgU291cmNlRmVhdHVyZVN0YXRlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuXG5jb25zdCBDTE9DS19TS0VXX1JFVFJZX1RJTUVPVVQgPSAzMDAwMDtcblxuaW1wb3J0IHR5cGUge0J1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7V29ya2VyVGlsZVJlc3VsdH0gZnJvbSAnLi93b3JrZXJfc291cmNlJztcbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUgREVNRGF0YSBmcm9tICcuLi9kYXRhL2RlbV9kYXRhJztcbmltcG9ydCB0eXBlIHtBbHBoYUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcbmltcG9ydCB0eXBlIEltYWdlQXRsYXMgZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIEltYWdlTWFuYWdlciBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfbWFuYWdlcic7XG5pbXBvcnQgdHlwZSB7TWFza30gZnJvbSAnLi4vcmVuZGVyL3RpbGVfbWFzayc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgRnJhbWVidWZmZXIgZnJvbSAnLi4vZ2wvZnJhbWVidWZmZXInO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xheWVyRmVhdHVyZVN0YXRlc30gZnJvbSAnLi9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge0ZpbHRlclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBUaWxlU3RhdGUgPVxuICAgIHwgJ2xvYWRpbmcnICAgLy8gVGlsZSBkYXRhIGlzIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcuXG4gICAgfCAnbG9hZGVkJyAgICAvLyBUaWxlIGRhdGEgaGFzIGJlZW4gbG9hZGVkLiBUaWxlIGNhbiBiZSByZW5kZXJlZC5cbiAgICB8ICdyZWxvYWRpbmcnIC8vIFRpbGUgZGF0YSBoYXMgYmVlbiBsb2FkZWQgYW5kIGlzIGJlaW5nIHVwZGF0ZWQuIFRpbGUgY2FuIGJlIHJlbmRlcmVkLlxuICAgIHwgJ3VubG9hZGVkJyAgLy8gVGlsZSBkYXRhIGhhcyBiZWVuIGRlbGV0ZWQuXG4gICAgfCAnZXJyb3JlZCcgICAvLyBUaWxlIGRhdGEgd2FzIG5vdCBsb2FkZWQgYmVjYXVzZSBvZiBhbiBlcnJvci5cbiAgICB8ICdleHBpcmVkJzsgIC8qIFRpbGUgZGF0YSB3YXMgcHJldmlvdXNseSBsb2FkZWQsIGJ1dCBoYXMgZXhwaXJlZCBwZXIgaXRzXG4gICAgICAgICAgICAgICAgICAgKiBIVFRQIGhlYWRlcnMgYW5kIGlzIGluIHRoZSBwcm9jZXNzIG9mIHJlZnJlc2hpbmcuICovXG5cbi8qKlxuICogQSB0aWxlIG9iamVjdCBpcyB0aGUgY29tYmluYXRpb24gb2YgYSBDb29yZGluYXRlLCB3aGljaCBkZWZpbmVzXG4gKiBpdHMgcGxhY2UsIGFzIHdlbGwgYXMgYSB1bmlxdWUgSUQgYW5kIGRhdGEgdHJhY2tpbmcgZm9yIGl0cyBjb250ZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVGlsZSB7XG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEO1xuICAgIHVpZDogbnVtYmVyO1xuICAgIHVzZXM6IG51bWJlcjtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIGJ1Y2tldHM6IHtbc3RyaW5nXTogQnVja2V0fTtcbiAgICBsYXRlc3RGZWF0dXJlSW5kZXg6ID9GZWF0dXJlSW5kZXg7XG4gICAgbGF0ZXN0UmF3VGlsZURhdGE6ID9BcnJheUJ1ZmZlcjtcbiAgICBpbWFnZUF0bGFzOiA/SW1hZ2VBdGxhcztcbiAgICBpbWFnZUF0bGFzVGV4dHVyZTogVGV4dHVyZTtcbiAgICBnbHlwaEF0bGFzSW1hZ2U6ID9BbHBoYUltYWdlO1xuICAgIGdseXBoQXRsYXNUZXh0dXJlOiBUZXh0dXJlO1xuICAgIGV4cGlyYXRpb25UaW1lOiBhbnk7XG4gICAgZXhwaXJlZFJlcXVlc3RDb3VudDogbnVtYmVyO1xuICAgIHN0YXRlOiBUaWxlU3RhdGU7XG4gICAgdGltZUFkZGVkOiBhbnk7XG4gICAgZmFkZUVuZFRpbWU6IGFueTtcbiAgICBjb2xsaXNpb25Cb3hBcnJheTogP0NvbGxpc2lvbkJveEFycmF5O1xuICAgIHJlZG9XaGVuRG9uZTogYm9vbGVhbjtcbiAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW47XG4gICAgcGxhY2VtZW50U291cmNlOiBhbnk7XG4gICAgYWN0b3I6ID9BY3RvcjtcbiAgICB2dExheWVyczoge1tzdHJpbmddOiBWZWN0b3JUaWxlTGF5ZXJ9O1xuICAgIG1hc2s6IE1hc2s7XG5cbiAgICBuZWlnaGJvcmluZ1RpbGVzOiA/T2JqZWN0O1xuICAgIGRlbTogP0RFTURhdGE7XG4gICAgYWJvcnRlZDogP2Jvb2xlYW47XG4gICAgbWFza2VkQm91bmRzQnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuICAgIG1hc2tlZEluZGV4QnVmZmVyOiA/SW5kZXhCdWZmZXI7XG4gICAgc2VnbWVudHM6ID9TZWdtZW50VmVjdG9yO1xuICAgIG5lZWRzSGlsbHNoYWRlUHJlcGFyZTogP2Jvb2xlYW47XG4gICAgcmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgdGV4dHVyZTogYW55O1xuICAgIGZibzogP0ZyYW1lYnVmZmVyO1xuICAgIGRlbVRleHR1cmU6ID9UZXh0dXJlO1xuICAgIHJlZnJlc2hlZFVwb25FeHBpcmF0aW9uOiBib29sZWFuO1xuICAgIHJlbG9hZENhbGxiYWNrOiBhbnk7XG4gICAgcmVzb3VyY2VUaW1pbmc6ID9BcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPjtcbiAgICBxdWVyeVBhZGRpbmc6IG51bWJlcjtcblxuICAgIHN5bWJvbEZhZGVIb2xkVW50aWw6ID9udW1iZXI7XG4gICAgaGFzU3ltYm9sQnVja2V0czogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7T3ZlcnNjYWxlZFRpbGVJRH0gdGlsZUlEXG4gICAgICogQHBhcmFtIHNpemVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnRpbGVJRCA9IHRpbGVJRDtcbiAgICAgICAgdGhpcy51aWQgPSB1bmlxdWVJZCgpO1xuICAgICAgICB0aGlzLnVzZXMgPSAwO1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gc2l6ZTtcbiAgICAgICAgdGhpcy5idWNrZXRzID0ge307XG4gICAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBudWxsO1xuICAgICAgICB0aGlzLnF1ZXJ5UGFkZGluZyA9IDA7XG4gICAgICAgIHRoaXMuaGFzU3ltYm9sQnVja2V0cyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgcmVzcG9uc2Ugd2FzIGFscmVhZHkgZXhwaXJlZCB3aGVuXG4gICAgICAgIC8vIHJlY2VpdmVkLiBXZSdyZSB1c2luZyB0aGlzIHRvIGFkZCBhIGRlbGF5IHdoZW4gbWFraW5nIGEgbmV3IHJlcXVlc3RcbiAgICAgICAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIHJldHJ5aW5nIGltbWVkaWF0ZWx5IGluIGNhc2Ugb2YgYSBzZXJ2ZXJcbiAgICAgICAgLy8gc2VydmluZyBleHBpcmVkIHRpbGVzLlxuICAgICAgICB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQgPSAwO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSAnbG9hZGluZyc7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGYWRlRHVyYXRpb24oZHVyYXRpb246IG51bWJlcikge1xuICAgICAgICBjb25zdCBmYWRlRW5kVGltZSA9IGR1cmF0aW9uICsgdGhpcy50aW1lQWRkZWQ7XG4gICAgICAgIGlmIChmYWRlRW5kVGltZSA8IGJyb3dzZXIubm93KCkpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuZmFkZUVuZFRpbWUgJiYgZmFkZUVuZFRpbWUgPCB0aGlzLmZhZGVFbmRUaW1lKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5mYWRlRW5kVGltZSA9IGZhZGVFbmRUaW1lO1xuICAgIH1cblxuICAgIHdhc1JlcXVlc3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09ICdlcnJvcmVkJyB8fCB0aGlzLnN0YXRlID09PSAnbG9hZGVkJyB8fCB0aGlzLnN0YXRlID09PSAncmVsb2FkaW5nJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIGRhdGEgb2JqZWN0IHdpdGggYSAnYnVmZmVycycgcHJvcGVydHksIGxvYWQgaXQgaW50b1xuICAgICAqIHRoaXMgdGlsZSdzIGVsZW1lbnRHcm91cHMgYW5kIGJ1ZmZlcnMgcHJvcGVydGllcyBhbmQgc2V0IGxvYWRlZFxuICAgICAqIHRvIHRydWUuIElmIHRoZSBkYXRhIGlzIG51bGwsIGxpa2UgaW4gdGhlIGNhc2Ugb2YgYW4gZW1wdHlcbiAgICAgKiBHZW9KU09OIHRpbGUsIG5vLW9wIGJ1dCBzdGlsbCBzZXQgbG9hZGVkIHRvIHRydWUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICAgKiBAcGFyYW0gcGFpbnRlclxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBsb2FkVmVjdG9yRGF0YShkYXRhOiBXb3JrZXJUaWxlUmVzdWx0LCBwYWludGVyOiBhbnksIGp1c3RSZWxvYWRlZDogP2Jvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICB0aGlzLnVubG9hZFZlY3RvckRhdGEoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSAnbG9hZGVkJztcblxuICAgICAgICAvLyBlbXB0eSBHZW9KU09OIHRpbGVcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkJveEFycmF5ID0gbmV3IENvbGxpc2lvbkJveEFycmF5KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5mZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4ID0gZGF0YS5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICBpZiAoZGF0YS5yYXdUaWxlRGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgdmVjdG9yIHRpbGVzIGhhdmUgcmF3VGlsZURhdGEsIGFuZCB0aGV5IHdvbid0IHVwZGF0ZSBpdCBmb3JcbiAgICAgICAgICAgICAgICAvLyAncmVsb2FkVGlsZSdcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdFJhd1RpbGVEYXRhID0gZGF0YS5yYXdUaWxlRGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSA9IGRhdGEucmF3VGlsZURhdGE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGF0ZXN0UmF3VGlsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiByYXdUaWxlRGF0YSBoYXNuJ3QgdXBkYXRlZCwgaG9sZCBvbnRvIGEgcG9pbnRlciB0byB0aGUgbGFzdFxuICAgICAgICAgICAgICAgIC8vIG9uZSB3ZSByZWNlaXZlZFxuICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhID0gdGhpcy5sYXRlc3RSYXdUaWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbGxpc2lvbkJveEFycmF5ID0gZGF0YS5jb2xsaXNpb25Cb3hBcnJheTtcbiAgICAgICAgdGhpcy5idWNrZXRzID0gZGVzZXJpYWxpemVCdWNrZXQoZGF0YS5idWNrZXRzLCBwYWludGVyLnN0eWxlKTtcblxuICAgICAgICB0aGlzLmhhc1N5bWJvbEJ1Y2tldHMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IHRoaXMuYnVja2V0c1tpZF07XG4gICAgICAgICAgICBpZiAoYnVja2V0IGluc3RhbmNlb2YgU3ltYm9sQnVja2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNTeW1ib2xCdWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoanVzdFJlbG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5qdXN0UmVsb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucXVlcnlQYWRkaW5nID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IHRoaXMuYnVja2V0c1tpZF07XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFkZGluZyA9IE1hdGgubWF4KHRoaXMucXVlcnlQYWRkaW5nLCBwYWludGVyLnN0eWxlLmdldExheWVyKGlkKS5xdWVyeVJhZGl1cyhidWNrZXQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcyA9IGRhdGEuaW1hZ2VBdGxhcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5nbHlwaEF0bGFzSW1hZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhBdGxhc0ltYWdlID0gZGF0YS5nbHlwaEF0bGFzSW1hZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWxlYXNlIGFueSBkYXRhIG9yIFdlYkdMIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgdGlsZS5cbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdW5sb2FkVmVjdG9yRGF0YSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgIHRoaXMuYnVja2V0c1tpZF0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVja2V0cyA9IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlQXRsYXNUZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXNUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nbHlwaEF0bGFzVGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy5nbHlwaEF0bGFzVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAndW5sb2FkZWQnO1xuICAgIH1cblxuICAgIGdldEJ1Y2tldChsYXllcjogU3R5bGVMYXllcikge1xuICAgICAgICByZXR1cm4gdGhpcy5idWNrZXRzW2xheWVyLmlkXTtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuYnVja2V0cykge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy5idWNrZXRzW2lkXTtcbiAgICAgICAgICAgIGlmIChidWNrZXQudXBsb2FkUGVuZGluZygpKSB7XG4gICAgICAgICAgICAgICAgYnVja2V0LnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VBdGxhcyAmJiAhdGhpcy5pbWFnZUF0bGFzLnVwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXNUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgdGhpcy5pbWFnZUF0bGFzLmltYWdlLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nbHlwaEF0bGFzSW1hZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLmdseXBoQXRsYXNJbWFnZSwgZ2wuQUxQSEEpO1xuICAgICAgICAgICAgdGhpcy5nbHlwaEF0bGFzSW1hZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJlcGFyZShpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlcikge1xuICAgICAgICBpZiAodGhpcy5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXMucGF0Y2hVcGRhdGVkSW1hZ2VzKGltYWdlTWFuYWdlciwgdGhpcy5pbWFnZUF0bGFzVGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBRdWVyaWVzIG5vbi1zeW1ib2wgZmVhdHVyZXMgcmVuZGVyZWQgZm9yIHRoaXMgdGlsZS5cbiAgICAvLyBTeW1ib2wgZmVhdHVyZXMgYXJlIHF1ZXJpZWQgZ2xvYmFsbHlcbiAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMobGF5ZXJzOiB7W3N0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGZWF0dXJlU3RhdGU6IFNvdXJjZUZlYXR1cmVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmFRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sIGxheWVyczogQXJyYXk8c3RyaW5nPiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4UGl0Y2hTY2FsZUZhY3RvcjogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KToge1tzdHJpbmddOiBBcnJheTx7IGZlYXR1cmVJbmRleDogbnVtYmVyLCBmZWF0dXJlOiBHZW9KU09ORmVhdHVyZSB9Pn0ge1xuICAgICAgICBpZiAoIXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4IHx8ICF0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSlcbiAgICAgICAgICAgIHJldHVybiB7fTtcblxuICAgICAgICByZXR1cm4gdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe1xuICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIGNhbWVyYVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplLFxuICAgICAgICAgICAgcGl4ZWxQb3NNYXRyaXgsXG4gICAgICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBxdWVyeVBhZGRpbmc6IHRoaXMucXVlcnlQYWRkaW5nICogbWF4UGl0Y2hTY2FsZUZhY3RvclxuICAgICAgICB9LCBsYXllcnMsIHNvdXJjZUZlYXR1cmVTdGF0ZSk7XG4gICAgfVxuXG4gICAgcXVlcnlTb3VyY2VGZWF0dXJlcyhyZXN1bHQ6IEFycmF5PEdlb0pTT05GZWF0dXJlPiwgcGFyYW1zOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCB8fCAhdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEpIHJldHVybjtcblxuICAgICAgICBjb25zdCB2dExheWVycyA9IHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LmxvYWRWVExheWVycygpO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gcGFyYW1zID8gcGFyYW1zLnNvdXJjZUxheWVyIDogJyc7XG4gICAgICAgIGNvbnN0IGxheWVyID0gdnRMYXllcnMuX2dlb2pzb25UaWxlTGF5ZXIgfHwgdnRMYXllcnNbc291cmNlTGF5ZXJdO1xuXG4gICAgICAgIGlmICghbGF5ZXIpIHJldHVybjtcblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBmZWF0dXJlRmlsdGVyKHBhcmFtcyAmJiBwYXJhbXMuZmlsdGVyKTtcbiAgICAgICAgY29uc3Qge3osIHgsIHl9ID0gdGhpcy50aWxlSUQuY2Fub25pY2FsO1xuICAgICAgICBjb25zdCBjb29yZCA9IHt6LCB4LCB5fTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbGF5ZXIuZmVhdHVyZShpKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSwgZmVhdHVyZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBnZW9qc29uRmVhdHVyZSA9IG5ldyBHZW9KU09ORmVhdHVyZShmZWF0dXJlLCB6LCB4LCB5KTtcbiAgICAgICAgICAgICAgICAoZ2VvanNvbkZlYXR1cmU6IGFueSkudGlsZSA9IGNvb3JkO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlb2pzb25GZWF0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyTWFzaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VnbWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VnbWVudHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWFza2VkQm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5tYXNrZWRCb3VuZHNCdWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWFza2VkSW5kZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMubWFza2VkSW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubWFza2VkSW5kZXhCdWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgdGhpcy5tYXNrO1xuICAgIH1cblxuICAgIHNldE1hc2sobWFzazogTWFzaywgY29udGV4dDogQ29udGV4dCkge1xuXG4gICAgICAgIC8vIGRvbid0IHJlZG8gYnVmZmVyIHdvcmsgaWYgdGhlIG1hc2sgaXMgdGhlIHNhbWU7XG4gICAgICAgIGlmIChkZWVwRXF1YWwodGhpcy5tYXNrLCBtYXNrKSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY2xlYXJNYXNrKCk7XG4gICAgICAgIHRoaXMubWFzayA9IG1hc2s7XG5cbiAgICAgICAgLy8gV2Ugd2FudCB0byByZW5kZXIgdGhlIGZ1bGwgdGlsZSwgYW5kIGtlZXBpbmcgdGhlIHNlZ21lbnRzL3ZlcnRpY2VzL2luZGljZXMgZW1wdHkgbWVhbnNcbiAgICAgICAgLy8gdXNpbmcgdGhlIGdsb2JhbCBzaGFyZWQgYnVmZmVycyBmb3IgY292ZXJpbmcgdGhlIGVudGlyZSB0aWxlLlxuICAgICAgICBpZiAoZGVlcEVxdWFsKG1hc2ssIHsnMCc6IHRydWV9KSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG1hc2tlZEJvdW5kc0FycmF5ID0gbmV3IFJhc3RlckJvdW5kc0FycmF5KCk7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyYXkgPSBuZXcgVHJpYW5nbGVJbmRleEFycmF5KCk7XG5cbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBzZWdtZW50IHNvIHRoYXQgd2Ugd2lsbCB1cGxvYWQgKGVtcHR5KSBidWZmZXJzIGV2ZW4gd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvXG4gICAgICAgIC8vIGRyYXcgZm9yIHRoaXMgdGlsZS5cbiAgICAgICAgdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCgwLCBtYXNrZWRCb3VuZHNBcnJheSwgaW5kZXhBcnJheSk7XG5cbiAgICAgICAgY29uc3QgbWFza0FycmF5ID0gT2JqZWN0LmtleXMobWFzayk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBtYXNrQ29vcmQgPSBtYXNrWyttYXNrQXJyYXlbaV1dO1xuICAgICAgICAgICAgY29uc3QgdmVydGV4RXh0ZW50ID0gRVhURU5UID4+IG1hc2tDb29yZC56O1xuICAgICAgICAgICAgY29uc3QgdGxWZXJ0ZXggPSBuZXcgUG9pbnQobWFza0Nvb3JkLnggKiB2ZXJ0ZXhFeHRlbnQsIG1hc2tDb29yZC55ICogdmVydGV4RXh0ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGJyVmVydGV4ID0gbmV3IFBvaW50KHRsVmVydGV4LnggKyB2ZXJ0ZXhFeHRlbnQsIHRsVmVydGV4LnkgKyB2ZXJ0ZXhFeHRlbnQpO1xuXG4gICAgICAgICAgICAvLyBub3Qgc3VyZSB3aHkgZmxvdyBpcyBjb21wbGFpbmluZyBoZXJlIGJlY2F1c2UgaXQgZG9lc24ndCBjb21wbGFpbiBhdCBMNDAxXG4gICAgICAgICAgICBjb25zdCBzZWdtZW50ID0gKHRoaXMuc2VnbWVudHM6IGFueSkucHJlcGFyZVNlZ21lbnQoNCwgbWFza2VkQm91bmRzQXJyYXksIGluZGV4QXJyYXkpO1xuXG4gICAgICAgICAgICBtYXNrZWRCb3VuZHNBcnJheS5lbXBsYWNlQmFjayh0bFZlcnRleC54LCB0bFZlcnRleC55LCB0bFZlcnRleC54LCB0bFZlcnRleC55KTtcbiAgICAgICAgICAgIG1hc2tlZEJvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGJyVmVydGV4LngsIHRsVmVydGV4LnksIGJyVmVydGV4LngsIHRsVmVydGV4LnkpO1xuICAgICAgICAgICAgbWFza2VkQm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGxWZXJ0ZXgueCwgYnJWZXJ0ZXgueSwgdGxWZXJ0ZXgueCwgYnJWZXJ0ZXgueSk7XG4gICAgICAgICAgICBtYXNrZWRCb3VuZHNBcnJheS5lbXBsYWNlQmFjayhiclZlcnRleC54LCBiclZlcnRleC55LCBiclZlcnRleC54LCBiclZlcnRleC55KTtcblxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG4gICAgICAgICAgICAvLyAwLCAxLCAyXG4gICAgICAgICAgICAvLyAxLCAyLCAzXG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKG9mZnNldCwgb2Zmc2V0ICsgMSwgb2Zmc2V0ICsgMik7XG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKG9mZnNldCArIDEsIG9mZnNldCArIDIsIG9mZnNldCArIDMpO1xuXG4gICAgICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSA0O1xuICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFza2VkQm91bmRzQnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIobWFza2VkQm91bmRzQXJyYXksIHJhc3RlckJvdW5kc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgIHRoaXMubWFza2VkSW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKGluZGV4QXJyYXkpO1xuICAgIH1cblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSAnbG9hZGVkJyB8fCB0aGlzLnN0YXRlID09PSAncmVsb2FkaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnZXhwaXJlZCc7XG4gICAgfVxuXG4gICAgcGF0dGVybnNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlQXRsYXMgJiYgISFPYmplY3Qua2V5cyh0aGlzLmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9ucykubGVuZ3RoO1xuICAgIH1cblxuICAgIHNldEV4cGlyeURhdGEoZGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IHByaW9yID0gdGhpcy5leHBpcmF0aW9uVGltZTtcblxuICAgICAgICBpZiAoZGF0YS5jYWNoZUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZENDID0gcGFyc2VDYWNoZUNvbnRyb2woZGF0YS5jYWNoZUNvbnRyb2wpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZENDWydtYXgtYWdlJ10pIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBEYXRlLm5vdygpICsgcGFyc2VkQ0NbJ21heC1hZ2UnXSAqIDEwMDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5leHBpcmVzKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGlyYXRpb25UaW1lID0gbmV3IERhdGUoZGF0YS5leHBpcmVzKS5nZXRUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBpc0V4cGlyZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvblRpbWUgPiBub3cpIHtcbiAgICAgICAgICAgICAgICBpc0V4cGlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXByaW9yKSB7XG4gICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5leHBpcmF0aW9uVGltZSA8IHByaW9yKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwaXJpbmcgZGF0ZSBpcyBnb2luZyBiYWNrd2FyZHM6XG4gICAgICAgICAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICAgICAgICAgICAgICBpc0V4cGlyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5leHBpcmF0aW9uVGltZSAtIHByaW9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFkZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgaXMgc2VydmluZyB0aGUgc2FtZSBleHBpcmVkIHJlc291cmNlIG92ZXIgYW5kIG92ZXI6IGZhbGxcbiAgICAgICAgICAgICAgICAgICAgLy8gYmFjayB0byBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICAgICAgICAgICAgICAgICAgICBpc0V4cGlyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgZWl0aGVyIHRoZSBjbGllbnQgb3IgdGhlIHNlcnZlciBjbG9jayBpcyB3cm9uZyBhbmRcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGludGVycG9sYXRlIGEgdmFsaWQgZXhwaXJhdGlvbiBkYXRlIChmcm9tIHRoZSBjbGllbnQgUE9WKVxuICAgICAgICAgICAgICAgICAgICAvLyBvYnNlcnZpbmcgYSBtaW5pbXVtIHRpbWVvdXQuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBub3cgKyBNYXRoLm1heChkZWx0YSwgQ0xPQ0tfU0tFV19SRVRSWV9USU1FT1VUKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzRXhwaXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCsrO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnZXhwaXJlZCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRFeHBpcnlUaW1lb3V0KCkge1xuICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxMDAwICogKDEgPDwgTWF0aC5taW4odGhpcy5leHBpcmVkUmVxdWVzdENvdW50IC0gMSwgMzEpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTWF4IHZhbHVlIGZvciBgc2V0VGltZW91dGAgaW1wbGVtZW50YXRpb25zIGlzIGEgMzIgYml0IGludGVnZXI7IGNhcCB0aGlzIGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZXhwaXJhdGlvblRpbWUgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgTWF0aC5wb3coMiwgMzEpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRGZWF0dXJlU3RhdGUoc3RhdGVzOiBMYXllckZlYXR1cmVTdGF0ZXMsIHBhaW50ZXI6IGFueSkge1xuICAgICAgICBpZiAoIXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4IHx8XG4gICAgICAgICAgICAhdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEgfHxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2dExheWVycyA9IHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LmxvYWRWVExheWVycygpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgLy8gQnVja2V0cyBhcmUgZ3JvdXBlZCBieSBjb21tb24gc291cmNlLWxheWVyXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllcklkID0gYnVja2V0LmxheWVyc1swXVsnc291cmNlTGF5ZXInXSB8fCAnX2dlb2pzb25UaWxlTGF5ZXInO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB2dExheWVyc1tzb3VyY2VMYXllcklkXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVyU3RhdGVzID0gc3RhdGVzW3NvdXJjZUxheWVySWRdO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VMYXllciB8fCAhc291cmNlTGF5ZXJTdGF0ZXMgfHwgT2JqZWN0LmtleXMoc291cmNlTGF5ZXJTdGF0ZXMpLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGJ1Y2tldC51cGRhdGUoc291cmNlTGF5ZXJTdGF0ZXMsIHNvdXJjZUxheWVyLCB0aGlzLmltYWdlQXRsYXMgJiYgdGhpcy5pbWFnZUF0bGFzLnBhdHRlcm5Qb3NpdGlvbnMgfHwge30pO1xuICAgICAgICAgICAgaWYgKHBhaW50ZXIgJiYgcGFpbnRlci5zdHlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlQYWRkaW5nID0gTWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsIHBhaW50ZXIuc3R5bGUuZ2V0TGF5ZXIoaWQpLnF1ZXJ5UmFkaXVzKGJ1Y2tldCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9sZGluZ0ZvckZhZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWwgIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzeW1ib2xGYWRlRmluaXNoZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsIHx8IHRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbCA8IGJyb3dzZXIubm93KCk7XG4gICAgfVxuXG4gICAgY2xlYXJGYWRlSG9sZCgpIHtcbiAgICAgICAgdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHNldEhvbGREdXJhdGlvbihkdXJhdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbCA9IGJyb3dzZXIubm93KCkgKyBkdXJhdGlvbjtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpbGU7XG4iLCJcbmV4cG9ydCBkZWZhdWx0IFsndHlwZScsICdzb3VyY2UnLCAnc291cmNlLWxheWVyJywgJ21pbnpvb20nLCAnbWF4em9vbScsICdmaWx0ZXInLCAnbGF5b3V0J107XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgZGVmYXVsdCBjaGVja01heEFuZ2xlO1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIEFuY2hvciBmcm9tICcuL2FuY2hvcic7XG5cbi8qKlxuICogTGFiZWxzIHBsYWNlZCBhcm91bmQgcmVhbGx5IHNoYXJwIGFuZ2xlcyBhcmVuJ3QgcmVhZGFibGUuIENoZWNrIGlmIGFueVxuICogcGFydCBvZiB0aGUgcG90ZW50aWFsIGxhYmVsIGhhcyBhIGNvbWJpbmVkIGFuZ2xlIHRoYXQgaXMgdG9vIGJpZy5cbiAqXG4gKiBAcGFyYW0gbGluZVxuICogQHBhcmFtIGFuY2hvciBUaGUgcG9pbnQgb24gdGhlIGxpbmUgYXJvdW5kIHdoaWNoIHRoZSBsYWJlbCBpcyBhbmNob3JlZC5cbiAqIEBwYXJhbSBsYWJlbExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBsYWJlbCBpbiBnZW9tZXRyeSB1bml0cy5cbiAqIEBwYXJhbSB3aW5kb3dTaXplIFRoZSBjaGVjayBmYWlscyBpZiB0aGUgY29tYmluZWQgYW5nbGVzIHdpdGhpbiBhIHBhcnQgb2YgdGhlIGxpbmUgdGhhdCBpcyBgd2luZG93U2l6ZWAgbG9uZyBpcyB0b28gYmlnLlxuICogQHBhcmFtIG1heEFuZ2xlIFRoZSBtYXhpbXVtIGNvbWJpbmVkIGFuZ2xlIHRoYXQgYW55IHdpbmRvdyBhbG9uZyB0aGUgbGFiZWwgaXMgYWxsb3dlZCB0byBoYXZlLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIHRoZSBsYWJlbCBzaG91bGQgYmUgcGxhY2VkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja01heEFuZ2xlKGxpbmU6IEFycmF5PFBvaW50PiwgYW5jaG9yOiBBbmNob3IsIGxhYmVsTGVuZ3RoOiBudW1iZXIsIHdpbmRvd1NpemU6IG51bWJlciwgbWF4QW5nbGU6IG51bWJlcikge1xuXG4gICAgLy8gaG9yaXpvbnRhbCBsYWJlbHMgYWx3YXlzIHBhc3NcbiAgICBpZiAoYW5jaG9yLnNlZ21lbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG5cbiAgICBsZXQgcCA9IGFuY2hvcjtcbiAgICBsZXQgaW5kZXggPSBhbmNob3Iuc2VnbWVudCArIDE7XG4gICAgbGV0IGFuY2hvckRpc3RhbmNlID0gMDtcblxuICAgIC8vIG1vdmUgYmFja3dhcmRzIGFsb25nIHRoZSBsaW5lIHRvIHRoZSBmaXJzdCBzZWdtZW50IHRoZSBsYWJlbCBhcHBlYXJzIG9uXG4gICAgd2hpbGUgKGFuY2hvckRpc3RhbmNlID4gLWxhYmVsTGVuZ3RoIC8gMikge1xuICAgICAgICBpbmRleC0tO1xuXG4gICAgICAgIC8vIHRoZXJlIGlzbid0IGVub3VnaCByb29tIGZvciB0aGUgbGFiZWwgYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgYW5jaG9yRGlzdGFuY2UgLT0gbGluZVtpbmRleF0uZGlzdChwKTtcbiAgICAgICAgcCA9IGxpbmVbaW5kZXhdO1xuICAgIH1cblxuICAgIGFuY2hvckRpc3RhbmNlICs9IGxpbmVbaW5kZXhdLmRpc3QobGluZVtpbmRleCArIDFdKTtcbiAgICBpbmRleCsrO1xuXG4gICAgLy8gc3RvcmUgcmVjZW50IGNvcm5lcnMgYW5kIHRoZWlyIHRvdGFsIGFuZ2xlIGRpZmZlcmVuY2VcbiAgICBjb25zdCByZWNlbnRDb3JuZXJzID0gW107XG4gICAgbGV0IHJlY2VudEFuZ2xlRGVsdGEgPSAwO1xuXG4gICAgLy8gbW92ZSBmb3J3YXJkcyBieSB0aGUgbGVuZ3RoIG9mIHRoZSBsYWJlbCBhbmQgY2hlY2sgYW5nbGVzIGFsb25nIHRoZSB3YXlcbiAgICB3aGlsZSAoYW5jaG9yRGlzdGFuY2UgPCBsYWJlbExlbmd0aCAvIDIpIHtcbiAgICAgICAgY29uc3QgcHJldiA9IGxpbmVbaW5kZXggLSAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGxpbmVbaW5kZXhdO1xuICAgICAgICBjb25zdCBuZXh0ID0gbGluZVtpbmRleCArIDFdO1xuXG4gICAgICAgIC8vIHRoZXJlIGlzbid0IGVub3VnaCByb29tIGZvciB0aGUgbGFiZWwgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGxpbmVcbiAgICAgICAgaWYgKCFuZXh0KSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgbGV0IGFuZ2xlRGVsdGEgPSBwcmV2LmFuZ2xlVG8oY3VycmVudCkgLSBjdXJyZW50LmFuZ2xlVG8obmV4dCk7XG4gICAgICAgIC8vIHJlc3RyaWN0IGFuZ2xlIHRvIC1waS4ucGkgcmFuZ2VcbiAgICAgICAgYW5nbGVEZWx0YSA9IE1hdGguYWJzKCgoYW5nbGVEZWx0YSArIDMgKiBNYXRoLlBJKSAlIChNYXRoLlBJICogMikpIC0gTWF0aC5QSSk7XG5cbiAgICAgICAgcmVjZW50Q29ybmVycy5wdXNoKHtcbiAgICAgICAgICAgIGRpc3RhbmNlOiBhbmNob3JEaXN0YW5jZSxcbiAgICAgICAgICAgIGFuZ2xlRGVsdGFcbiAgICAgICAgfSk7XG4gICAgICAgIHJlY2VudEFuZ2xlRGVsdGEgKz0gYW5nbGVEZWx0YTtcblxuICAgICAgICAvLyByZW1vdmUgY29ybmVycyB0aGF0IGFyZSBmYXIgZW5vdWdoIGF3YXkgZnJvbSB0aGUgbGlzdCBvZiByZWNlbnQgYW5jaG9yc1xuICAgICAgICB3aGlsZSAoYW5jaG9yRGlzdGFuY2UgLSByZWNlbnRDb3JuZXJzWzBdLmRpc3RhbmNlID4gd2luZG93U2l6ZSkge1xuICAgICAgICAgICAgcmVjZW50QW5nbGVEZWx0YSAtPSByZWNlbnRDb3JuZXJzLnNoaWZ0KCkuYW5nbGVEZWx0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoZSBzdW0gb2YgYW5nbGVzIHdpdGhpbiB0aGUgd2luZG93IGFyZWEgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBjaGVjayBmYWlscy5cbiAgICAgICAgaWYgKHJlY2VudEFuZ2xlRGVsdGEgPiBtYXhBbmdsZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGFuY2hvckRpc3RhbmNlICs9IGN1cnJlbnQuZGlzdChuZXh0KTtcbiAgICB9XG5cbiAgICAvLyBubyBwYXJ0IG9mIHRoZSBsaW5lIGhhZCBhbiBhbmdsZSBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZC4gY2hlY2sgcGFzc2VzLlxuICAgIHJldHVybiB0cnVlO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZSc7XG5cbmltcG9ydCBBbmNob3IgZnJvbSAnLi4vc3ltYm9sL2FuY2hvcic7XG5pbXBvcnQgY2hlY2tNYXhBbmdsZSBmcm9tICcuL2NoZWNrX21heF9hbmdsZSc7XG5cbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge1NoYXBpbmcsIFBvc2l0aW9uZWRJY29ufSBmcm9tICcuL3NoYXBpbmcnO1xuXG5leHBvcnQge2dldEFuY2hvcnMsIGdldENlbnRlckFuY2hvcn07XG5cbmZ1bmN0aW9uIGdldExpbmVMZW5ndGgobGluZTogQXJyYXk8UG9pbnQ+KTogbnVtYmVyIHtcbiAgICBsZXQgbGluZUxlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW5lLmxlbmd0aCAtIDE7IGsrKykge1xuICAgICAgICBsaW5lTGVuZ3RoICs9IGxpbmVba10uZGlzdChsaW5lW2sgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lTGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBnZXRBbmdsZVdpbmRvd1NpemUoc2hhcGVkVGV4dDogP1NoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2NhbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHNoYXBlZFRleHQgP1xuICAgICAgICAzIC8gNSAqIGdseXBoU2l6ZSAqIGJveFNjYWxlIDpcbiAgICAgICAgMDtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcGVkTGFiZWxMZW5ndGgoc2hhcGVkVGV4dDogP1NoYXBpbmcsIHNoYXBlZEljb246ID9Qb3NpdGlvbmVkSWNvbik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBzaGFwZWRUZXh0ID8gc2hhcGVkVGV4dC5yaWdodCAtIHNoYXBlZFRleHQubGVmdCA6IDAsXG4gICAgICAgIHNoYXBlZEljb24gPyBzaGFwZWRJY29uLnJpZ2h0IC0gc2hhcGVkSWNvbi5sZWZ0IDogMCk7XG59XG5cbmZ1bmN0aW9uIGdldENlbnRlckFuY2hvcihsaW5lOiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWF4QW5nbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0OiA/U2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiA/UG9zaXRpb25lZEljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgYm94U2NhbGU6IG51bWJlcikge1xuICAgIGNvbnN0IGFuZ2xlV2luZG93U2l6ZSA9IGdldEFuZ2xlV2luZG93U2l6ZShzaGFwZWRUZXh0LCBnbHlwaFNpemUsIGJveFNjYWxlKTtcbiAgICBjb25zdCBsYWJlbExlbmd0aCA9IGdldFNoYXBlZExhYmVsTGVuZ3RoKHNoYXBlZFRleHQsIHNoYXBlZEljb24pICogYm94U2NhbGU7XG5cbiAgICBsZXQgcHJldkRpc3RhbmNlID0gMDtcbiAgICBjb25zdCBjZW50ZXJEaXN0YW5jZSA9IGdldExpbmVMZW5ndGgobGluZSkgLyAyO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCAtIDE7IGkrKykge1xuXG4gICAgICAgIGNvbnN0IGEgPSBsaW5lW2ldLFxuICAgICAgICAgICAgYiA9IGxpbmVbaSArIDFdO1xuXG4gICAgICAgIGNvbnN0IHNlZ21lbnREaXN0YW5jZSA9IGEuZGlzdChiKTtcblxuICAgICAgICBpZiAocHJldkRpc3RhbmNlICsgc2VnbWVudERpc3RhbmNlID4gY2VudGVyRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjZW50ZXIgaXMgb24gdGhpcyBzZWdtZW50XG4gICAgICAgICAgICBjb25zdCB0ID0gKGNlbnRlckRpc3RhbmNlIC0gcHJldkRpc3RhbmNlKSAvIHNlZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICB4ID0gaW50ZXJwb2xhdGUoYS54LCBiLngsIHQpLFxuICAgICAgICAgICAgICAgIHkgPSBpbnRlcnBvbGF0ZShhLnksIGIueSwgdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBBbmNob3IoeCwgeSwgYi5hbmdsZVRvKGEpLCBpKTtcbiAgICAgICAgICAgIGFuY2hvci5fcm91bmQoKTtcbiAgICAgICAgICAgIGlmICghYW5nbGVXaW5kb3dTaXplIHx8IGNoZWNrTWF4QW5nbGUobGluZSwgYW5jaG9yLCBsYWJlbExlbmd0aCwgYW5nbGVXaW5kb3dTaXplLCBtYXhBbmdsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYW5jaG9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2RGlzdGFuY2UgKz0gc2VnbWVudERpc3RhbmNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0QW5jaG9ycyhsaW5lOiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgbWF4QW5nbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dDogP1NoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZEljb246ID9Qb3NpdGlvbmVkSWNvbixcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGJveFNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJzY2FsaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHRpbGVFeHRlbnQ6IG51bWJlcikge1xuXG4gICAgLy8gUmVzYW1wbGUgYSBsaW5lIHRvIGdldCBhbmNob3IgcG9pbnRzIGZvciBsYWJlbHMgYW5kIGNoZWNrIHRoYXQgZWFjaFxuICAgIC8vIHBvdGVudGlhbCBsYWJlbCBwYXNzZXMgdGV4dC1tYXgtYW5nbGUgY2hlY2sgYW5kIGhhcyBlbm91Z2ggZnJvb20gdG8gZml0XG4gICAgLy8gb24gdGhlIGxpbmUuXG5cbiAgICBjb25zdCBhbmdsZVdpbmRvd1NpemUgPSBnZXRBbmdsZVdpbmRvd1NpemUoc2hhcGVkVGV4dCwgZ2x5cGhTaXplLCBib3hTY2FsZSk7XG4gICAgY29uc3Qgc2hhcGVkTGFiZWxMZW5ndGggPSBnZXRTaGFwZWRMYWJlbExlbmd0aChzaGFwZWRUZXh0LCBzaGFwZWRJY29uKTtcbiAgICBjb25zdCBsYWJlbExlbmd0aCA9IHNoYXBlZExhYmVsTGVuZ3RoICogYm94U2NhbGU7XG5cbiAgICAvLyBJcyB0aGUgbGluZSBjb250aW51ZWQgZnJvbSBvdXRzaWRlIHRoZSB0aWxlIGJvdW5kYXJ5P1xuICAgIGNvbnN0IGlzTGluZUNvbnRpbnVlZCA9IGxpbmVbMF0ueCA9PT0gMCB8fCBsaW5lWzBdLnggPT09IHRpbGVFeHRlbnQgfHwgbGluZVswXS55ID09PSAwIHx8IGxpbmVbMF0ueSA9PT0gdGlsZUV4dGVudDtcblxuICAgIC8vIElzIHRoZSBsYWJlbCBsb25nLCByZWxhdGl2ZSB0byB0aGUgc3BhY2luZz9cbiAgICAvLyBJZiBzbywgYWRqdXN0IHRoZSBzcGFjaW5nIHNvIHRoZXJlIGlzIGFsd2F5cyBhIG1pbmltdW0gc3BhY2Ugb2YgYHNwYWNpbmcgLyA0YCBiZXR3ZWVuIGxhYmVsIGVkZ2VzLlxuICAgIGlmIChzcGFjaW5nIC0gbGFiZWxMZW5ndGggPCBzcGFjaW5nIC8gNCkge1xuICAgICAgICBzcGFjaW5nID0gbGFiZWxMZW5ndGggKyBzcGFjaW5nIC8gNDtcbiAgICB9XG5cbiAgICAvLyBPZmZzZXQgdGhlIGZpcnN0IGFuY2hvciBieTpcbiAgICAvLyBFaXRoZXIgaGFsZiB0aGUgbGFiZWwgbGVuZ3RoIHBsdXMgYSBmaXhlZCBleHRyYSBvZmZzZXQgaWYgdGhlIGxpbmUgaXMgbm90IGNvbnRpbnVlZFxuICAgIC8vIE9yIGhhbGYgdGhlIHNwYWNpbmcgaWYgdGhlIGxpbmUgaXMgY29udGludWVkLlxuXG4gICAgLy8gRm9yIG5vbi1jb250aW51ZWQgbGluZXMsIGFkZCBhIGJpdCBvZiBmaXhlZCBleHRyYSBvZmZzZXQgdG8gYXZvaWQgY29sbGlzaW9ucyBhdCBUIGludGVyc2VjdGlvbnMuXG4gICAgY29uc3QgZml4ZWRFeHRyYU9mZnNldCA9IGdseXBoU2l6ZSAqIDI7XG5cbiAgICBjb25zdCBvZmZzZXQgPSAhaXNMaW5lQ29udGludWVkID9cbiAgICAgICAgKChzaGFwZWRMYWJlbExlbmd0aCAvIDIgKyBmaXhlZEV4dHJhT2Zmc2V0KSAqIGJveFNjYWxlICogb3ZlcnNjYWxpbmcpICUgc3BhY2luZyA6XG4gICAgICAgIChzcGFjaW5nIC8gMiAqIG92ZXJzY2FsaW5nKSAlIHNwYWNpbmc7XG5cbiAgICByZXR1cm4gcmVzYW1wbGUobGluZSwgb2Zmc2V0LCBzcGFjaW5nLCBhbmdsZVdpbmRvd1NpemUsIG1heEFuZ2xlLCBsYWJlbExlbmd0aCwgaXNMaW5lQ29udGludWVkLCBmYWxzZSwgdGlsZUV4dGVudCk7XG59XG5cbmZ1bmN0aW9uIHJlc2FtcGxlKGxpbmUsIG9mZnNldCwgc3BhY2luZywgYW5nbGVXaW5kb3dTaXplLCBtYXhBbmdsZSwgbGFiZWxMZW5ndGgsIGlzTGluZUNvbnRpbnVlZCwgcGxhY2VBdE1pZGRsZSwgdGlsZUV4dGVudCkge1xuXG4gICAgY29uc3QgaGFsZkxhYmVsTGVuZ3RoID0gbGFiZWxMZW5ndGggLyAyO1xuICAgIGNvbnN0IGxpbmVMZW5ndGggPSBnZXRMaW5lTGVuZ3RoKGxpbmUpO1xuXG4gICAgbGV0IGRpc3RhbmNlID0gMCxcbiAgICAgICAgbWFya2VkRGlzdGFuY2UgPSBvZmZzZXQgLSBzcGFjaW5nO1xuXG4gICAgbGV0IGFuY2hvcnMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGggLSAxOyBpKyspIHtcblxuICAgICAgICBjb25zdCBhID0gbGluZVtpXSxcbiAgICAgICAgICAgIGIgPSBsaW5lW2kgKyAxXTtcblxuICAgICAgICBjb25zdCBzZWdtZW50RGlzdCA9IGEuZGlzdChiKSxcbiAgICAgICAgICAgIGFuZ2xlID0gYi5hbmdsZVRvKGEpO1xuXG4gICAgICAgIHdoaWxlIChtYXJrZWREaXN0YW5jZSArIHNwYWNpbmcgPCBkaXN0YW5jZSArIHNlZ21lbnREaXN0KSB7XG4gICAgICAgICAgICBtYXJrZWREaXN0YW5jZSArPSBzcGFjaW5nO1xuXG4gICAgICAgICAgICBjb25zdCB0ID0gKG1hcmtlZERpc3RhbmNlIC0gZGlzdGFuY2UpIC8gc2VnbWVudERpc3QsXG4gICAgICAgICAgICAgICAgeCA9IGludGVycG9sYXRlKGEueCwgYi54LCB0KSxcbiAgICAgICAgICAgICAgICB5ID0gaW50ZXJwb2xhdGUoYS55LCBiLnksIHQpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBwb2ludCBpcyB3aXRoaW4gdGhlIHRpbGUgYm91bmRhcmllcyBhbmQgdGhhdFxuICAgICAgICAgICAgLy8gdGhlIGxhYmVsIHdvdWxkIGZpdCBiZWZvcmUgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBsaW5lXG4gICAgICAgICAgICAvLyBpZiBwbGFjZWQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgICAgIGlmICh4ID49IDAgJiYgeCA8IHRpbGVFeHRlbnQgJiYgeSA+PSAwICYmIHkgPCB0aWxlRXh0ZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlZERpc3RhbmNlIC0gaGFsZkxhYmVsTGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFya2VkRGlzdGFuY2UgKyBoYWxmTGFiZWxMZW5ndGggPD0gbGluZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBBbmNob3IoeCwgeSwgYW5nbGUsIGkpO1xuICAgICAgICAgICAgICAgIGFuY2hvci5fcm91bmQoKTtcblxuICAgICAgICAgICAgICAgIGlmICghYW5nbGVXaW5kb3dTaXplIHx8IGNoZWNrTWF4QW5nbGUobGluZSwgYW5jaG9yLCBsYWJlbExlbmd0aCwgYW5nbGVXaW5kb3dTaXplLCBtYXhBbmdsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5wdXNoKGFuY2hvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGlzdGFuY2UgKz0gc2VnbWVudERpc3Q7XG4gICAgfVxuXG4gICAgaWYgKCFwbGFjZUF0TWlkZGxlICYmICFhbmNob3JzLmxlbmd0aCAmJiAhaXNMaW5lQ29udGludWVkKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBhdHRlbXB0IGF0IGZpbmRpbmcgYW5jaG9ycyBhdCB3aGljaCBsYWJlbHMgY2FuIGJlIHBsYWNlZCBmYWlsZWQuXG4gICAgICAgIC8vIFRyeSBhZ2FpbiwgYnV0IHRoaXMgdGltZSBqdXN0IHRyeSBwbGFjaW5nIG9uZSBhbmNob3IgYXQgdGhlIG1pZGRsZSBvZiB0aGUgbGluZS5cbiAgICAgICAgLy8gVGhpcyBoYXMgdGhlIG1vc3QgZWZmZWN0IGZvciBzaG9ydCBsaW5lcyBpbiBvdmVyc2NhbGVkIHRpbGVzLCBzaW5jZSB0aGVcbiAgICAgICAgLy8gaW5pdGlhbCBvZmZzZXQgdXNlZCBpbiBvdmVyc2NhbGVkIHRpbGVzIGlzIGNhbGN1bGF0ZWQgdG8gYWxpZ24gbGFiZWxzIHdpdGggcG9zaXRpb25zIGluXG4gICAgICAgIC8vIHBhcmVudCB0aWxlcyBpbnN0ZWFkIG9mIHBsYWNpbmcgdGhlIGxhYmVsIGFzIGNsb3NlIHRvIHRoZSBiZWdpbm5pbmcgYXMgcG9zc2libGUuXG4gICAgICAgIGFuY2hvcnMgPSByZXNhbXBsZShsaW5lLCBkaXN0YW5jZSAvIDIsIHNwYWNpbmcsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUsIGxhYmVsTGVuZ3RoLCBpc0xpbmVDb250aW51ZWQsIHRydWUsIHRpbGVFeHRlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNob3JzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5leHBvcnQgZGVmYXVsdCBjbGlwTGluZTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJ0IG9mIGEgbXVsdGlsaW5lIHRoYXQgaW50ZXJzZWN0cyB3aXRoIHRoZSBwcm92aWRlZCByZWN0YW5ndWxhciBib3guXG4gKlxuICogQHBhcmFtIGxpbmVzXG4gKiBAcGFyYW0geDEgdGhlIGxlZnQgZWRnZSBvZiB0aGUgYm94XG4gKiBAcGFyYW0geTEgdGhlIHRvcCBlZGdlIG9mIHRoZSBib3hcbiAqIEBwYXJhbSB4MiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgYm94XG4gKiBAcGFyYW0geTIgdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBib3hcbiAqIEByZXR1cm5zIGxpbmVzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGlwTGluZShsaW5lczogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcik6IEFycmF5PEFycmF5PFBvaW50Pj4ge1xuICAgIGNvbnN0IGNsaXBwZWRMaW5lcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCBsaW5lcy5sZW5ndGg7IGwrKykge1xuICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbbF07XG4gICAgICAgIGxldCBjbGlwcGVkTGluZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcDAgPSBsaW5lW2ldO1xuICAgICAgICAgICAgbGV0IHAxID0gbGluZVtpICsgMV07XG5cbiAgICAgICAgICAgIGlmIChwMC54IDwgeDEgJiYgcDEueCA8IHgxKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAwLnggPCB4MSkge1xuICAgICAgICAgICAgICAgIHAwID0gbmV3IFBvaW50KHgxLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDEgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDEueCA8IHgxKSB7XG4gICAgICAgICAgICAgICAgcDEgPSBuZXcgUG9pbnQoeDEsIHAwLnkgKyAocDEueSAtIHAwLnkpICogKCh4MSAtIHAwLngpIC8gKHAxLnggLSBwMC54KSkpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocDAueSA8IHkxICYmIHAxLnkgPCB5MSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMC55IDwgeTEpIHtcbiAgICAgICAgICAgICAgICBwMCA9IG5ldyBQb2ludChwMC54ICsgKHAxLnggLSBwMC54KSAqICgoeTEgLSBwMC55KSAvIChwMS55IC0gcDAueSkpLCB5MSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAxLnkgPCB5MSkge1xuICAgICAgICAgICAgICAgIHAxID0gbmV3IFBvaW50KHAwLnggKyAocDEueCAtIHAwLngpICogKCh5MSAtIHAwLnkpIC8gKHAxLnkgLSBwMC55KSksIHkxKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHAwLnggPj0geDIgJiYgcDEueCA+PSB4Mikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMC54ID49IHgyKSB7XG4gICAgICAgICAgICAgICAgcDAgPSBuZXcgUG9pbnQoeDIsIHAwLnkgKyAocDEueSAtIHAwLnkpICogKCh4MiAtIHAwLngpIC8gKHAxLnggLSBwMC54KSkpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMS54ID49IHgyKSB7XG4gICAgICAgICAgICAgICAgcDEgPSBuZXcgUG9pbnQoeDIsIHAwLnkgKyAocDEueSAtIHAwLnkpICogKCh4MiAtIHAwLngpIC8gKHAxLnggLSBwMC54KSkpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocDAueSA+PSB5MiAmJiBwMS55ID49IHkyKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAwLnkgPj0geTIpIHtcbiAgICAgICAgICAgICAgICBwMCA9IG5ldyBQb2ludChwMC54ICsgKHAxLnggLSBwMC54KSAqICgoeTIgLSBwMC55KSAvIChwMS55IC0gcDAueSkpLCB5MikuX3JvdW5kKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAxLnkgPj0geTIpIHtcbiAgICAgICAgICAgICAgICBwMSA9IG5ldyBQb2ludChwMC54ICsgKHAxLnggLSBwMC54KSAqICgoeTIgLSBwMC55KSAvIChwMS55IC0gcDAueSkpLCB5MikuX3JvdW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghY2xpcHBlZExpbmUgfHwgIXAwLmVxdWFscyhjbGlwcGVkTGluZVtjbGlwcGVkTGluZS5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgICAgICAgICBjbGlwcGVkTGluZSA9IFtwMF07XG4gICAgICAgICAgICAgICAgY2xpcHBlZExpbmVzLnB1c2goY2xpcHBlZExpbmUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbGlwcGVkTGluZS5wdXNoKHAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGlwcGVkTGluZXM7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB7R0xZUEhfUEJGX0JPUkRFUn0gZnJvbSAnLi4vc3R5bGUvcGFyc2VfZ2x5cGhfcGJmJztcblxuaW1wb3J0IHR5cGUgQW5jaG9yIGZyb20gJy4vYW5jaG9yJztcbmltcG9ydCB0eXBlIHtQb3NpdGlvbmVkSWNvbiwgU2hhcGluZ30gZnJvbSAnLi9zaGFwaW5nJztcbmltcG9ydCB0eXBlIFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlfSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0dseXBoUG9zaXRpb259IGZyb20gJy4uL3JlbmRlci9nbHlwaF9hdGxhcyc7XG5pbXBvcnQgT05FX0VNIGZyb20gJy4vb25lX2VtJztcblxuLyoqXG4gKiBBIHRleHR1cmVkIHF1YWQgZm9yIHJlbmRlcmluZyBhIHNpbmdsZSBpY29uIG9yIGdseXBoLlxuICpcbiAqIFRoZSB6b29tIHJhbmdlIHRoZSBnbHlwaCBjYW4gYmUgc2hvd24gaXMgZGVmaW5lZCBieSBtaW5TY2FsZSBhbmQgbWF4U2NhbGUuXG4gKlxuICogQHBhcmFtIHRsIFRoZSBvZmZzZXQgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBmcm9tIHRoZSBhbmNob3IuXG4gKiBAcGFyYW0gdHIgVGhlIG9mZnNldCBvZiB0aGUgdG9wIHJpZ2h0IGNvcm5lciBmcm9tIHRoZSBhbmNob3IuXG4gKiBAcGFyYW0gYmwgVGhlIG9mZnNldCBvZiB0aGUgYm90dG9tIGxlZnQgY29ybmVyIGZyb20gdGhlIGFuY2hvci5cbiAqIEBwYXJhbSBiciBUaGUgb2Zmc2V0IG9mIHRoZSBib3R0b20gcmlnaHQgY29ybmVyIGZyb20gdGhlIGFuY2hvci5cbiAqIEBwYXJhbSB0ZXggVGhlIHRleHR1cmUgY29vcmRpbmF0ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IHR5cGUgU3ltYm9sUXVhZCA9IHtcbiAgICB0bDogUG9pbnQsXG4gICAgdHI6IFBvaW50LFxuICAgIGJsOiBQb2ludCxcbiAgICBicjogUG9pbnQsXG4gICAgdGV4OiB7XG4gICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgeTogbnVtYmVyLFxuICAgICAgICB3OiBudW1iZXIsXG4gICAgICAgIGg6IG51bWJlclxuICAgIH0sXG4gICAgd3JpdGluZ01vZGU6IGFueSB8IHZvaWQsXG4gICAgZ2x5cGhPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgc2VjdGlvbkluZGV4OiBudW1iZXJcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBxdWFkcyB1c2VkIGZvciByZW5kZXJpbmcgYW4gaWNvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uUXVhZHMoXG4gICAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogUG9zaXRpb25lZEljb24sXG4gICAgICAgICAgICAgICAgICAgICAgaWNvblJvdGF0ZTogbnVtYmVyKTogQXJyYXk8U3ltYm9sUXVhZD4ge1xuICAgIGNvbnN0IGltYWdlID0gc2hhcGVkSWNvbi5pbWFnZTtcblxuICAgIC8vIElmIHlvdSBoYXZlIGEgMTBweCBpY29uIHRoYXQgaXNuJ3QgcGVyZmVjdGx5IGFsaWduZWQgdG8gdGhlIHBpeGVsIGdyaWQgaXQgd2lsbCBjb3ZlciAxMSBhY3R1YWxcbiAgICAvLyBwaXhlbHMuIFRoZSBxdWFkIG5lZWRzIHRvIGJlIHBhZGRlZCB0byBhY2NvdW50IGZvciB0aGlzLCBvdGhlcndpc2UgdGhleSdsbCBsb29rIHNsaWdodGx5IGNsaXBwZWRcbiAgICAvLyBvbiBvbmUgZWRnZSBpbiBzb21lIGNhc2VzLlxuICAgIGNvbnN0IGJvcmRlciA9IDE7XG5cbiAgICAvLyBFeHBhbmQgdGhlIGJveCB0byByZXNwZWN0IHRoZSAxIHBpeGVsIGJvcmRlciBpbiB0aGUgYXRsYXMgaW1hZ2UuIFdlJ3JlIHVzaW5nIGBpbWFnZS5wYWRkZWRSZWN0IC0gYm9yZGVyYFxuICAgIC8vIGluc3RlYWQgb2YgaW1hZ2UuZGlzcGxheVNpemUgYmVjYXVzZSB3ZSBvbmx5IHBhZCB3aXRoIG9uZSBwaXhlbCBmb3IgcmV0aW5hIGltYWdlcyBhcyB3ZWxsLCBhbmQgdGhlXG4gICAgLy8gZGlzcGxheVNpemUgdXNlcyB0aGUgbG9naWNhbCBkaW1lbnNpb25zLCBub3QgdGhlIHBoeXNpY2FsIHBpeGVsIGRpbWVuc2lvbnMuXG4gICAgY29uc3QgaWNvbldpZHRoID0gc2hhcGVkSWNvbi5yaWdodCAtIHNoYXBlZEljb24ubGVmdDtcbiAgICBjb25zdCBleHBhbmRYID0gKGljb25XaWR0aCAqIGltYWdlLnBhZGRlZFJlY3QudyAvIChpbWFnZS5wYWRkZWRSZWN0LncgLSAyICogYm9yZGVyKSAtIGljb25XaWR0aCkgLyAyO1xuICAgIGNvbnN0IGxlZnQgPSBzaGFwZWRJY29uLmxlZnQgLSBleHBhbmRYO1xuICAgIGNvbnN0IHJpZ2h0ID0gc2hhcGVkSWNvbi5yaWdodCArIGV4cGFuZFg7XG5cbiAgICBjb25zdCBpY29uSGVpZ2h0ID0gc2hhcGVkSWNvbi5ib3R0b20gLSBzaGFwZWRJY29uLnRvcDtcbiAgICBjb25zdCBleHBhbmRZID0gKGljb25IZWlnaHQgKiBpbWFnZS5wYWRkZWRSZWN0LmggLyAoaW1hZ2UucGFkZGVkUmVjdC5oIC0gMiAqIGJvcmRlcikgLSBpY29uSGVpZ2h0KSAvIDI7XG4gICAgY29uc3QgdG9wID0gc2hhcGVkSWNvbi50b3AgLSBleHBhbmRZO1xuICAgIGNvbnN0IGJvdHRvbSA9IHNoYXBlZEljb24uYm90dG9tICsgZXhwYW5kWTtcblxuICAgIGNvbnN0IHRsID0gbmV3IFBvaW50KGxlZnQsIHRvcCk7XG4gICAgY29uc3QgdHIgPSBuZXcgUG9pbnQocmlnaHQsIHRvcCk7XG4gICAgY29uc3QgYnIgPSBuZXcgUG9pbnQocmlnaHQsIGJvdHRvbSk7XG4gICAgY29uc3QgYmwgPSBuZXcgUG9pbnQobGVmdCwgYm90dG9tKTtcblxuICAgIGNvbnN0IGFuZ2xlID0gaWNvblJvdGF0ZSAqIE1hdGguUEkgLyAxODA7XG5cbiAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGUpLFxuICAgICAgICAgICAgY29zID0gTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgICAgICAgbWF0cml4ID0gW2NvcywgLXNpbiwgc2luLCBjb3NdO1xuXG4gICAgICAgIHRsLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgIHRyLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgIGJsLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgIGJyLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgfVxuXG4gICAgLy8gSWNvbiBxdWFkIGlzIHBhZGRlZCwgc28gdGV4dHVyZSBjb29yZGluYXRlcyBhbHNvIG5lZWQgdG8gYmUgcGFkZGVkLlxuICAgIHJldHVybiBbe3RsLCB0ciwgYmwsIGJyLCB0ZXg6IGltYWdlLnBhZGRlZFJlY3QsIHdyaXRpbmdNb2RlOiB1bmRlZmluZWQsIGdseXBoT2Zmc2V0OiBbMCwgMF0sIHNlY3Rpb25JbmRleDogMH1dO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgcXVhZHMgdXNlZCBmb3IgcmVuZGVyaW5nIGEgdGV4dCBsYWJlbC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbHlwaFF1YWRzKGFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgICAgICAgICBzaGFwaW5nOiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgICAgICBsYXllcjogU3ltYm9sU3R5bGVMYXllcixcbiAgICAgICAgICAgICAgICAgICAgICAgYWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtbc3RyaW5nXToge1tudW1iZXJdOiBHbHlwaFBvc2l0aW9ufX0sXG4gICAgICAgICAgICAgICAgICAgICAgIGFsbG93VmVydGljYWxQbGFjZW1lbnQ6IGJvb2xlYW4pOiBBcnJheTxTeW1ib2xRdWFkPiB7XG5cbiAgICBjb25zdCB0ZXh0Um90YXRlID0gbGF5ZXIubGF5b3V0LmdldCgndGV4dC1yb3RhdGUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkgKiBNYXRoLlBJIC8gMTgwO1xuXG4gICAgY29uc3QgcG9zaXRpb25lZEdseXBocyA9IHNoYXBpbmcucG9zaXRpb25lZEdseXBocztcbiAgICBjb25zdCBxdWFkcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uZWRHbHlwaCA9IHBvc2l0aW9uZWRHbHlwaHNba107XG4gICAgICAgIGNvbnN0IGdseXBoUG9zaXRpb25zID0gcG9zaXRpb25zW3Bvc2l0aW9uZWRHbHlwaC5mb250U3RhY2tdO1xuICAgICAgICBjb25zdCBnbHlwaCA9IGdseXBoUG9zaXRpb25zICYmIGdseXBoUG9zaXRpb25zW3Bvc2l0aW9uZWRHbHlwaC5nbHlwaF07XG4gICAgICAgIGlmICghZ2x5cGgpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHJlY3QgPSBnbHlwaC5yZWN0O1xuICAgICAgICBpZiAoIXJlY3QpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIFRoZSByZWN0cyBoYXZlIGFuIGFkZGRpdGlvbmFsIGJ1ZmZlciB0aGF0IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGVpciBzaXplLlxuICAgICAgICBjb25zdCBnbHlwaFBhZGRpbmcgPSAxLjA7XG4gICAgICAgIGNvbnN0IHJlY3RCdWZmZXIgPSBHTFlQSF9QQkZfQk9SREVSICsgZ2x5cGhQYWRkaW5nO1xuXG4gICAgICAgIGNvbnN0IGhhbGZBZHZhbmNlID0gZ2x5cGgubWV0cmljcy5hZHZhbmNlICogcG9zaXRpb25lZEdseXBoLnNjYWxlIC8gMjtcblxuICAgICAgICBjb25zdCBnbHlwaE9mZnNldCA9IGFsb25nTGluZSA/XG4gICAgICAgICAgICBbcG9zaXRpb25lZEdseXBoLnggKyBoYWxmQWR2YW5jZSwgcG9zaXRpb25lZEdseXBoLnldIDpcbiAgICAgICAgICAgIFswLCAwXTtcblxuICAgICAgICBsZXQgYnVpbHRJbk9mZnNldCA9IGFsb25nTGluZSA/XG4gICAgICAgICAgICBbMCwgMF0gOlxuICAgICAgICAgICAgW3Bvc2l0aW9uZWRHbHlwaC54ICsgaGFsZkFkdmFuY2UgKyB0ZXh0T2Zmc2V0WzBdLCBwb3NpdGlvbmVkR2x5cGgueSArIHRleHRPZmZzZXRbMV1dO1xuXG4gICAgICAgIGNvbnN0IHJvdGF0ZVZlcnRpY2FsR2x5cGggPSAoYWxvbmdMaW5lIHx8IGFsbG93VmVydGljYWxQbGFjZW1lbnQpICYmIHBvc2l0aW9uZWRHbHlwaC52ZXJ0aWNhbDtcblxuICAgICAgICBsZXQgdmVydGljYWxpemVkTGFiZWxPZmZzZXQgPSBbMCwgMF07XG4gICAgICAgIGlmIChyb3RhdGVWZXJ0aWNhbEdseXBoKSB7XG4gICAgICAgICAgICAvLyBWZXJ0aWNhbCBQT0kgbGFiZWxzIHRoYXQgYXJlIHJvdGF0ZWQgOTBkZWcgQ1cgYW5kIHdob3NlIGdseXBocyBtdXN0IHByZXNlcnZlIHVwcmlnaHQgb3JpZW50YXRpb25cbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgcm90YXRlZCA5MGRlZyBDQ1cuIEFmdGVyIGEgcXVhZCBpcyByb3RhdGVkLCBpdCBpcyB0cmFuc2xhdGVkIHRvIHRoZSBvcmlnaW5hbCBidWlsdC1pbiBvZmZzZXQuXG4gICAgICAgICAgICB2ZXJ0aWNhbGl6ZWRMYWJlbE9mZnNldCA9IGJ1aWx0SW5PZmZzZXQ7XG4gICAgICAgICAgICBidWlsdEluT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeDEgPSAoZ2x5cGgubWV0cmljcy5sZWZ0IC0gcmVjdEJ1ZmZlcikgKiBwb3NpdGlvbmVkR2x5cGguc2NhbGUgLSBoYWxmQWR2YW5jZSArIGJ1aWx0SW5PZmZzZXRbMF07XG4gICAgICAgIGNvbnN0IHkxID0gKC1nbHlwaC5tZXRyaWNzLnRvcCAtIHJlY3RCdWZmZXIpICogcG9zaXRpb25lZEdseXBoLnNjYWxlICsgYnVpbHRJbk9mZnNldFsxXTtcbiAgICAgICAgY29uc3QgeDIgPSB4MSArIHJlY3QudyAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZTtcbiAgICAgICAgY29uc3QgeTIgPSB5MSArIHJlY3QuaCAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZTtcblxuICAgICAgICBjb25zdCB0bCA9IG5ldyBQb2ludCh4MSwgeTEpO1xuICAgICAgICBjb25zdCB0ciA9IG5ldyBQb2ludCh4MiwgeTEpO1xuICAgICAgICBjb25zdCBibCA9IG5ldyBQb2ludCh4MSwgeTIpO1xuICAgICAgICBjb25zdCBiciA9IG5ldyBQb2ludCh4MiwgeTIpO1xuXG4gICAgICAgIGlmIChyb3RhdGVWZXJ0aWNhbEdseXBoKSB7XG4gICAgICAgICAgICAvLyBWZXJ0aWNhbC1zdXBwb3J0aW5nIGdseXBocyBhcmUgbGFpZCBvdXQgaW4gMjR4MjQgcG9pbnQgYm94ZXMgKDEgc3F1YXJlIGVtKVxuICAgICAgICAgICAgLy8gSW4gaG9yaXpvbnRhbCBvcmllbnRhdGlvbiwgdGhlIHkgdmFsdWVzIGZvciBnbHlwaHMgYXJlIGJlbG93IHRoZSBtaWRsaW5lXG4gICAgICAgICAgICAvLyBhbmQgd2UgdXNlIGEgXCJ5T2Zmc2V0XCIgb2YgLTE3IHRvIHB1bGwgdGhlbSB1cCB0byB0aGUgbWlkZGxlLlxuICAgICAgICAgICAgLy8gQnkgcm90YXRpbmcgY291bnRlci1jbG9ja3dpc2UgYXJvdW5kIHRoZSBwb2ludCBhdCB0aGUgY2VudGVyIG9mIHRoZSBsZWZ0XG4gICAgICAgICAgICAvLyBlZGdlIG9mIGEgMjR4MjQgbGF5b3V0IGJveCBjZW50ZXJlZCBiZWxvdyB0aGUgbWlkbGluZSwgd2UgYWxpZ24gdGhlIGNlbnRlclxuICAgICAgICAgICAgLy8gb2YgdGhlIGdseXBocyB3aXRoIHRoZSBob3Jpem9udGFsIG1pZGxpbmUsIHNvIHRoZSB5T2Zmc2V0IGlzIG5vIGxvbmdlclxuICAgICAgICAgICAgLy8gbmVjZXNzYXJ5LCBidXQgd2UgYWxzbyBwdWxsIHRoZSBnbHlwaCB0byB0aGUgbGVmdCBhbG9uZyB0aGUgeCBheGlzLlxuICAgICAgICAgICAgLy8gVGhlIHkgY29vcmRpbmF0ZSBpbmNsdWRlcyBiYXNlbGluZSB5T2Zmc2V0LCB0aHVzIG5lZWRzIHRvIGJlIGFjY291bnRlZFxuICAgICAgICAgICAgLy8gZm9yIHdoZW4gZ2x5cGggaXMgcm90YXRlZCBhbmQgdHJhbnNsYXRlZC5cbiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IG5ldyBQb2ludCgtaGFsZkFkdmFuY2UsIGhhbGZBZHZhbmNlIC0gc2hhcGluZy55T2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsUm90YXRpb24gPSAtTWF0aC5QSSAvIDI7XG5cbiAgICAgICAgICAgIC8vIHhIYWxmV2lkaHRPZmZzZXRjb3JyZWN0aW9uIGlzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGZ1bGwtd2lkdGggYW5kIGhhbGYtd2lkdGhcbiAgICAgICAgICAgIC8vIGFkdmFuY2UsIHNob3VsZCBiZSAwIGZvciBmdWxsLXdpZHRoIGdseXBocyBhbmQgd2lsbCBwdWxsIHVwIGhhbGYtd2lkdGggZ2x5cGhzLlxuICAgICAgICAgICAgY29uc3QgeEhhbGZXaWRodE9mZnNldGNvcnJlY3Rpb24gPSBPTkVfRU0gLyAyIC0gaGFsZkFkdmFuY2U7XG4gICAgICAgICAgICBjb25zdCB4T2Zmc2V0Q29ycmVjdGlvbiA9IG5ldyBQb2ludCg1IC0gc2hhcGluZy55T2Zmc2V0IC0geEhhbGZXaWRodE9mZnNldGNvcnJlY3Rpb24sIDApO1xuICAgICAgICAgICAgY29uc3QgdmVydGljYWxPZmZzZXRDb3JyZWN0aW9uID0gbmV3IFBvaW50KC4uLnZlcnRpY2FsaXplZExhYmVsT2Zmc2V0KTtcbiAgICAgICAgICAgIHRsLl9yb3RhdGVBcm91bmQodmVydGljYWxSb3RhdGlvbiwgY2VudGVyKS5fYWRkKHhPZmZzZXRDb3JyZWN0aW9uKS5fYWRkKHZlcnRpY2FsT2Zmc2V0Q29ycmVjdGlvbik7XG4gICAgICAgICAgICB0ci5fcm90YXRlQXJvdW5kKHZlcnRpY2FsUm90YXRpb24sIGNlbnRlcikuX2FkZCh4T2Zmc2V0Q29ycmVjdGlvbikuX2FkZCh2ZXJ0aWNhbE9mZnNldENvcnJlY3Rpb24pO1xuICAgICAgICAgICAgYmwuX3JvdGF0ZUFyb3VuZCh2ZXJ0aWNhbFJvdGF0aW9uLCBjZW50ZXIpLl9hZGQoeE9mZnNldENvcnJlY3Rpb24pLl9hZGQodmVydGljYWxPZmZzZXRDb3JyZWN0aW9uKTtcbiAgICAgICAgICAgIGJyLl9yb3RhdGVBcm91bmQodmVydGljYWxSb3RhdGlvbiwgY2VudGVyKS5fYWRkKHhPZmZzZXRDb3JyZWN0aW9uKS5fYWRkKHZlcnRpY2FsT2Zmc2V0Q29ycmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dFJvdGF0ZSkge1xuICAgICAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4odGV4dFJvdGF0ZSksXG4gICAgICAgICAgICAgICAgY29zID0gTWF0aC5jb3ModGV4dFJvdGF0ZSksXG4gICAgICAgICAgICAgICAgbWF0cml4ID0gW2NvcywgLXNpbiwgc2luLCBjb3NdO1xuXG4gICAgICAgICAgICB0bC5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgdHIuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgIGJsLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICBici5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVhZHMucHVzaCh7dGwsIHRyLCBibCwgYnIsIHRleDogcmVjdCwgd3JpdGluZ01vZGU6IHNoYXBpbmcud3JpdGluZ01vZGUsIGdseXBoT2Zmc2V0LCBzZWN0aW9uSW5kZXg6IHBvc2l0aW9uZWRHbHlwaC5zZWN0aW9uSW5kZXh9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVhZHM7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUgQW5jaG9yIGZyb20gJy4vYW5jaG9yJztcblxuLyoqXG4gKiBBIENvbGxpc2lvbkZlYXR1cmUgcmVwcmVzZW50cyB0aGUgYXJlYSBvZiB0aGUgdGlsZSBjb3ZlcmVkIGJ5IGEgc2luZ2xlIGxhYmVsLlxuICogSXQgaXMgdXNlZCB3aXRoIENvbGxpc2lvbkluZGV4IHRvIGNoZWNrIGlmIHRoZSBsYWJlbCBvdmVybGFwcyB3aXRoIGFueVxuICogcHJldmlvdXMgbGFiZWxzLiBBIENvbGxpc2lvbkZlYXR1cmUgaXMgbW9zdGx5IGp1c3QgYSBzZXQgb2YgQ29sbGlzaW9uQm94XG4gKiBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbGxpc2lvbkZlYXR1cmUge1xuICAgIGJveFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBib3hFbmRJbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgQ29sbGlzaW9uRmVhdHVyZSwgYWRkaW5nIGl0cyBjb2xsaXNpb24gYm94IGRhdGEgdG8gdGhlIGdpdmVuIGNvbGxpc2lvbkJveEFycmF5IGluIHRoZSBwcm9jZXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxpbmUgVGhlIGdlb21ldHJ5IHRoZSBsYWJlbCBpcyBwbGFjZWQgb24uXG4gICAgICogQHBhcmFtIGFuY2hvciBUaGUgcG9pbnQgYWxvbmcgdGhlIGxpbmUgYXJvdW5kIHdoaWNoIHRoZSBsYWJlbCBpcyBhbmNob3JlZC5cbiAgICAgKiBAcGFyYW0gc2hhcGVkIFRoZSB0ZXh0IG9yIGljb24gc2hhcGluZyByZXN1bHRzLlxuICAgICAqIEBwYXJhbSBib3hTY2FsZSBBIG1hZ2ljIG51bWJlciB1c2VkIHRvIGNvbnZlcnQgZnJvbSBnbHlwaCBtZXRyaWNzIHVuaXRzIHRvIGdlb21ldHJ5IHVuaXRzLlxuICAgICAqIEBwYXJhbSBwYWRkaW5nIFRoZSBhbW91bnQgb2YgcGFkZGluZyB0byBhZGQgYXJvdW5kIHRoZSBsYWJlbCBlZGdlcy5cbiAgICAgKiBAcGFyYW0gYWxpZ25MaW5lIFdoZXRoZXIgdGhlIGxhYmVsIGlzIGFsaWduZWQgd2l0aCB0aGUgbGluZSBvciB0aGUgdmlld3BvcnQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgIGxpbmU6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICBhbmNob3I6IEFuY2hvcixcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICBzaGFwZWQ6IE9iamVjdCxcbiAgICAgICAgICAgICAgICBib3hTY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgb3ZlcnNjYWxpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICByb3RhdGU6IG51bWJlcikge1xuICAgICAgICBsZXQgeTEgPSBzaGFwZWQudG9wICogYm94U2NhbGUgLSBwYWRkaW5nO1xuICAgICAgICBsZXQgeTIgPSBzaGFwZWQuYm90dG9tICogYm94U2NhbGUgKyBwYWRkaW5nO1xuICAgICAgICBsZXQgeDEgPSBzaGFwZWQubGVmdCAqIGJveFNjYWxlIC0gcGFkZGluZztcbiAgICAgICAgbGV0IHgyID0gc2hhcGVkLnJpZ2h0ICogYm94U2NhbGUgKyBwYWRkaW5nO1xuXG4gICAgICAgIHRoaXMuYm94U3RhcnRJbmRleCA9IGNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgICAgICBpZiAoYWxpZ25MaW5lKSB7XG5cbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSB5MiAtIHkxO1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0geDIgLSB4MTtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgbWluaW11bSBib3ggaGVpZ2h0IHRvIGF2b2lkIHZlcnkgbWFueSBzbWFsbCBsYWJlbHNcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1heCgxMCAqIGJveFNjYWxlLCBoZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkTGluZUNvbGxpc2lvbkNpcmNsZXMoY29sbGlzaW9uQm94QXJyYXksIGxpbmUsIGFuY2hvciwgKGFuY2hvci5zZWdtZW50OiBhbnkpLCBsZW5ndGgsIGhlaWdodCwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCwgb3ZlcnNjYWxpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocm90YXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgKi1yb3RhdGUgaW4gcG9pbnQgY29sbGlzaW9uIGJveGVzXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy82MDc1XG4gICAgICAgICAgICAgICAgLy8gRG9lc24ndCBhY2NvdW50IGZvciBpY29uLXRleHQtZml0XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0bCA9IG5ldyBQb2ludCh4MSwgeTEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyID0gbmV3IFBvaW50KHgyLCB5MSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmwgPSBuZXcgUG9pbnQoeDEsIHkyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiciA9IG5ldyBQb2ludCh4MiwgeTIpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgcm90YXRlUmFkaWFucyA9IHJvdGF0ZSAqIE1hdGguUEkgLyAxODA7XG5cbiAgICAgICAgICAgICAgICB0bC5fcm90YXRlKHJvdGF0ZVJhZGlhbnMpO1xuICAgICAgICAgICAgICAgIHRyLl9yb3RhdGUocm90YXRlUmFkaWFucyk7XG4gICAgICAgICAgICAgICAgYmwuX3JvdGF0ZShyb3RhdGVSYWRpYW5zKTtcbiAgICAgICAgICAgICAgICBici5fcm90YXRlKHJvdGF0ZVJhZGlhbnMpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ29sbGlzaW9uIGZlYXR1cmVzIHJlcXVpcmUgYW4gXCJvbi1heGlzXCIgZ2VvbWV0cnksXG4gICAgICAgICAgICAgICAgLy8gc28gdGFrZSB0aGUgZW52ZWxvcGUgb2YgdGhlIHJvdGF0ZWQgZ2VvbWV0cnlcbiAgICAgICAgICAgICAgICAvLyAobWF5IGJlIHF1aXRlIGxhcmdlIGZvciB3aWRlIGxhYmVscyByb3RhdGVkIDQ1IGRlZ3JlZXMpXG4gICAgICAgICAgICAgICAgeDEgPSBNYXRoLm1pbih0bC54LCB0ci54LCBibC54LCBici54KTtcbiAgICAgICAgICAgICAgICB4MiA9IE1hdGgubWF4KHRsLngsIHRyLngsIGJsLngsIGJyLngpO1xuICAgICAgICAgICAgICAgIHkxID0gTWF0aC5taW4odGwueSwgdHIueSwgYmwueSwgYnIueSk7XG4gICAgICAgICAgICAgICAgeTIgPSBNYXRoLm1heCh0bC55LCB0ci55LCBibC55LCBici55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5LmVtcGxhY2VCYWNrKGFuY2hvci54LCBhbmNob3IueSwgeDEsIHkxLCB4MiwgeTIsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgMCwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJveEVuZEluZGV4ID0gY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHNldCBvZiBDb2xsaXNpb25Cb3ggb2JqZWN0cyBmb3IgYSBsaW5lLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxhYmVsTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIGxhYmVsIGluIGdlb21ldHJ5IHVuaXRzLlxuICAgICAqIEBwYXJhbSBhbmNob3IgVGhlIHBvaW50IGFsb25nIHRoZSBsaW5lIGFyb3VuZCB3aGljaCB0aGUgbGFiZWwgaXMgYW5jaG9yZWQuXG4gICAgICogQHBhcmFtIGJveFNpemUgVGhlIHNpemUgb2YgdGhlIGNvbGxpc2lvbiBib3hlcyB0aGF0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9hZGRMaW5lQ29sbGlzaW9uQ2lyY2xlcyhjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3I6IEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsTGVuZ3RoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyc2NhbGluZzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBib3hTaXplIC8gMjtcbiAgICAgICAgY29uc3QgbkJveGVzID0gTWF0aC5mbG9vcihsYWJlbExlbmd0aCAvIHN0ZXApIHx8IDE7XG4gICAgICAgIC8vIFdlIGNhbGN1bGF0ZSBsaW5lIGNvbGxpc2lvbiBjaXJjbGVzIG91dCB0byAzMDAlIG9mIHdoYXQgd291bGQgbm9ybWFsbHkgYmUgb3VyXG4gICAgICAgIC8vIG1heCBzaXplLCB0byBhbGxvdyBjb2xsaXNpb24gZGV0ZWN0aW9uIHRvIHdvcmsgb24gbGFiZWxzIHRoYXQgZXhwYW5kIGFzXG4gICAgICAgIC8vIHRoZXkgbW92ZSBpbnRvIHRoZSBkaXN0YW5jZVxuICAgICAgICAvLyBWZXJ0aWNhbGx5IG9yaWVudGVkIGxhYmVscyBpbiB0aGUgZGlzdGFudCBmaWVsZCBjYW4gZXh0ZW5kIHBhc3QgdGhpcyBwYWRkaW5nXG4gICAgICAgIC8vIFRoaXMgaXMgYSBub3RpY2VhYmxlIHByb2JsZW0gaW4gb3ZlcnNjYWxlZCB0aWxlcyB3aGVyZSB0aGUgcGl0Y2ggMC1iYXNlZFxuICAgICAgICAvLyBzeW1ib2wgc3BhY2luZyB3aWxsIHB1dCBsYWJlbHMgdmVyeSBjbG9zZSB0b2dldGhlciBpbiBhIHBpdGNoZWQgbWFwLlxuICAgICAgICAvLyBUbyByZWR1Y2UgdGhlIGNvc3Qgb2YgYWRkaW5nIGV4dHJhIGNvbGxpc2lvbiBjaXJjbGVzLCB3ZSBzbG93bHkgaW5jcmVhc2VcbiAgICAgICAgLy8gdGhlbSBmb3Igb3ZlcnNjYWxlZCB0aWxlcy5cbiAgICAgICAgY29uc3Qgb3ZlcnNjYWxpbmdQYWRkaW5nRmFjdG9yID0gMSArIC40ICogTWF0aC5sb2cob3ZlcnNjYWxpbmcpIC8gTWF0aC5MTjI7XG4gICAgICAgIGNvbnN0IG5QaXRjaFBhZGRpbmdCb3hlcyA9IE1hdGguZmxvb3IobkJveGVzICogb3ZlcnNjYWxpbmdQYWRkaW5nRmFjdG9yIC8gMik7XG5cbiAgICAgICAgLy8gb2Zmc2V0IHRoZSBjZW50ZXIgb2YgdGhlIGZpcnN0IGJveCBieSBoYWxmIGEgYm94IHNvIHRoYXQgdGhlIGVkZ2Ugb2YgdGhlXG4gICAgICAgIC8vIGJveCBpcyBhdCB0aGUgZWRnZSBvZiB0aGUgbGFiZWwuXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94T2Zmc2V0ID0gLWJveFNpemUgLyAyO1xuXG4gICAgICAgIGxldCBwID0gYW5jaG9yO1xuICAgICAgICBsZXQgaW5kZXggPSBzZWdtZW50ICsgMTtcbiAgICAgICAgbGV0IGFuY2hvckRpc3RhbmNlID0gZmlyc3RCb3hPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGxhYmVsU3RhcnREaXN0YW5jZSA9IC1sYWJlbExlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdTdGFydERpc3RhbmNlID0gbGFiZWxTdGFydERpc3RhbmNlIC0gbGFiZWxMZW5ndGggLyA0O1xuICAgICAgICAvLyBtb3ZlIGJhY2t3YXJkcyBhbG9uZyB0aGUgbGluZSB0byB0aGUgZmlyc3Qgc2VnbWVudCB0aGUgbGFiZWwgYXBwZWFycyBvblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpbmRleC0tO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFuY2hvckRpc3RhbmNlID4gbGFiZWxTdGFydERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzbid0IGVub3VnaCByb29tIGZvciB0aGUgbGFiZWwgYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVja01heEFuZ2xlIHNob3VsZCBoYXZlIGFscmVhZHkgY2F1Z2h0IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsaW5lIGRvZXNuJ3QgZXh0ZW5kIGZhciBlbm91Z2ggYmFjayBmb3IgYWxsIG9mIG91ciBwYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgICAvLyBidXQgd2UgZ290IGZhciBlbm91Z2ggdG8gc2hvdyB0aGUgbGFiZWwgdW5kZXIgbW9zdCBjb25kaXRpb25zLlxuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yRGlzdGFuY2UgLT0gbGluZVtpbmRleF0uZGlzdChwKTtcbiAgICAgICAgICAgICAgICBwID0gbGluZVtpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGFuY2hvckRpc3RhbmNlID4gcGFkZGluZ1N0YXJ0RGlzdGFuY2UpO1xuXG4gICAgICAgIGxldCBzZWdtZW50TGVuZ3RoID0gbGluZVtpbmRleF0uZGlzdChsaW5lW2luZGV4ICsgMV0pO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAtblBpdGNoUGFkZGluZ0JveGVzOyBpIDwgbkJveGVzICsgblBpdGNoUGFkZGluZ0JveGVzOyBpKyspIHtcblxuICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIHRoZSBib3ggd2lsbCBiZSBmcm9tIHRoZSBhbmNob3JcbiAgICAgICAgICAgIGNvbnN0IGJveE9mZnNldCA9IGkgKiBzdGVwO1xuICAgICAgICAgICAgbGV0IGJveERpc3RhbmNlVG9BbmNob3IgPSBsYWJlbFN0YXJ0RGlzdGFuY2UgKyBib3hPZmZzZXQ7XG5cbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIGRpc3RhbmNlIGJldHdlZW4gcGl0Y2ggcGFkZGluZyBib3hlcyBiaWdnZXJcbiAgICAgICAgICAgIGlmIChib3hPZmZzZXQgPCAwKSBib3hEaXN0YW5jZVRvQW5jaG9yICs9IGJveE9mZnNldDtcbiAgICAgICAgICAgIGlmIChib3hPZmZzZXQgPiBsYWJlbExlbmd0aCkgYm94RGlzdGFuY2VUb0FuY2hvciArPSBib3hPZmZzZXQgLSBsYWJlbExlbmd0aDtcblxuICAgICAgICAgICAgaWYgKGJveERpc3RhbmNlVG9BbmNob3IgPCBhbmNob3JEaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBsaW5lIGRvZXNuJ3QgZXh0ZW5kIGZhciBlbm91Z2ggYmFjayBmb3IgdGhpcyBib3gsIHNraXAgaXRcbiAgICAgICAgICAgICAgICAvLyAoVGhpcyBjb3VsZCBhbGxvdyBmb3IgbGluZSBjb2xsaXNpb25zIG9uIGRpc3RhbnQgdGlsZXMpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoZSBib3ggaXMgbm90IG9uIHRoZSBjdXJyZW50IHNlZ21lbnQuIE1vdmUgdG8gdGhlIG5leHQgc2VnbWVudC5cbiAgICAgICAgICAgIHdoaWxlIChhbmNob3JEaXN0YW5jZSArIHNlZ21lbnRMZW5ndGggPCBib3hEaXN0YW5jZVRvQW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yRGlzdGFuY2UgKz0gc2VnbWVudExlbmd0aDtcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXNuJ3QgZW5vdWdoIHJvb20gYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGxpbmUuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA+PSBsaW5lLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IGxpbmVbaW5kZXhdLmRpc3QobGluZVtpbmRleCArIDFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIHRoZSBib3ggd2lsbCBiZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlZ21lbnRcbiAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRCb3hEaXN0YW5jZSA9IGJveERpc3RhbmNlVG9BbmNob3IgLSBhbmNob3JEaXN0YW5jZTtcblxuICAgICAgICAgICAgY29uc3QgcDAgPSBsaW5lW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHAxID0gbGluZVtpbmRleCArIDFdO1xuICAgICAgICAgICAgY29uc3QgYm94QW5jaG9yUG9pbnQgPSBwMS5zdWIocDApLl91bml0KCkuX211bHQoc2VnbWVudEJveERpc3RhbmNlKS5fYWRkKHAwKS5fcm91bmQoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyB3aXRoaW4gYm94U2l6ZSBvZiB0aGUgYW5jaG9yLCBmb3JjZSB0aGUgYm94IHRvIGJlIHVzZWRcbiAgICAgICAgICAgIC8vIChzbyBldmVuIDAtd2lkdGggbGFiZWxzIHVzZSBhdCBsZWFzdCBvbmUgYm94KVxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgLjggbXVsdGlwbGljYXRpb24gZ2l2ZXMgdXMgYSBsaXR0bGUgYml0IG9mIGNvbnNlcnZhdGl2ZVxuICAgICAgICAgICAgLy8gcGFkZGluZyBpbiBjaG9vc2luZyB3aGljaCBib3hlcyB0byB1c2UgKHNlZSBDb2xsaXNpb25JbmRleCNwbGFjZWRDb2xsaXNpb25DaXJjbGVzKVxuICAgICAgICAgICAgY29uc3QgcGFkZGVkQW5jaG9yRGlzdGFuY2UgPSBNYXRoLmFicyhib3hEaXN0YW5jZVRvQW5jaG9yIC0gZmlyc3RCb3hPZmZzZXQpIDwgc3RlcCA/XG4gICAgICAgICAgICAgICAgMCA6XG4gICAgICAgICAgICAgICAgKGJveERpc3RhbmNlVG9BbmNob3IgLSBmaXJzdEJveE9mZnNldCkgKiAwLjg7XG5cbiAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5LmVtcGxhY2VCYWNrKGJveEFuY2hvclBvaW50LngsIGJveEFuY2hvclBvaW50LnksXG4gICAgICAgICAgICAgICAgLWJveFNpemUgLyAyLCAtYm94U2l6ZSAvIDIsIGJveFNpemUgLyAyLCBib3hTaXplIC8gMixcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIGJveFNpemUgLyAyLCBwYWRkZWRBbmNob3JEaXN0YW5jZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxpc2lvbkZlYXR1cmU7XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpbnlRdWV1ZSB7XG4gICAgY29uc3RydWN0b3IoZGF0YSA9IFtdLCBjb21wYXJlID0gZGVmYXVsdENvbXBhcmUpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLmNvbXBhcmUgPSBjb21wYXJlO1xuXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAodGhpcy5sZW5ndGggPj4gMSkgLSAxOyBpID49IDA7IGktLSkgdGhpcy5fZG93bihpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1c2goaXRlbSkge1xuICAgICAgICB0aGlzLmRhdGEucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAgICAgdGhpcy5fdXAodGhpcy5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBwb3AoKSB7XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmRhdGFbMF07XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuZGF0YS5wb3AoKTtcbiAgICAgICAgdGhpcy5sZW5ndGgtLTtcblxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbMF0gPSBib3R0b207XG4gICAgICAgICAgICB0aGlzLl9kb3duKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvcDtcbiAgICB9XG5cbiAgICBwZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhWzBdO1xuICAgIH1cblxuICAgIF91cChwb3MpIHtcbiAgICAgICAgY29uc3Qge2RhdGEsIGNvbXBhcmV9ID0gdGhpcztcbiAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFbcG9zXTtcblxuICAgICAgICB3aGlsZSAocG9zID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gKHBvcyAtIDEpID4+IDE7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gZGF0YVtwYXJlbnRdO1xuICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgY3VycmVudCkgPj0gMCkgYnJlYWs7XG4gICAgICAgICAgICBkYXRhW3Bvc10gPSBjdXJyZW50O1xuICAgICAgICAgICAgcG9zID0gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtwb3NdID0gaXRlbTtcbiAgICB9XG5cbiAgICBfZG93bihwb3MpIHtcbiAgICAgICAgY29uc3Qge2RhdGEsIGNvbXBhcmV9ID0gdGhpcztcbiAgICAgICAgY29uc3QgaGFsZkxlbmd0aCA9IHRoaXMubGVuZ3RoID4+IDE7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhW3Bvc107XG5cbiAgICAgICAgd2hpbGUgKHBvcyA8IGhhbGZMZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBsZWZ0ID0gKHBvcyA8PCAxKSArIDE7XG4gICAgICAgICAgICBsZXQgYmVzdCA9IGRhdGFbbGVmdF07XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGxlZnQgKyAxO1xuXG4gICAgICAgICAgICBpZiAocmlnaHQgPCB0aGlzLmxlbmd0aCAmJiBjb21wYXJlKGRhdGFbcmlnaHRdLCBiZXN0KSA8IDApIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmVzdCA9IGRhdGFbcmlnaHRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbXBhcmUoYmVzdCwgaXRlbSkgPj0gMCkgYnJlYWs7XG5cbiAgICAgICAgICAgIGRhdGFbcG9zXSA9IGJlc3Q7XG4gICAgICAgICAgICBwb3MgPSBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtwb3NdID0gaXRlbTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUXVldWUgZnJvbSAndGlueXF1ZXVlJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHtkaXN0VG9TZWdtZW50U3F1YXJlZH0gZnJvbSAnLi9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuXG4vKipcbiAqIEZpbmRzIGFuIGFwcHJveGltYXRpb24gb2YgYSBwb2x5Z29uJ3MgUG9sZSBPZiBJbmFjY2Vzc2liaWxpeSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb2xlX29mX2luYWNjZXNzaWJpbGl0eVxuICogVGhpcyBpcyBhIGNvcHkgb2YgaHR0cDovL2dpdGh1Yi5jb20vbWFwYm94L3BvbHlsYWJlbCBhZGFwdGVkIHRvIHVzZSBQb2ludHNcbiAqXG4gKiBAcGFyYW0gcG9seWdvblJpbmdzIGZpcnN0IGl0ZW0gaW4gYXJyYXkgaXMgdGhlIG91dGVyIHJpbmcgZm9sbG93ZWQgb3B0aW9uYWxseSBieSB0aGUgbGlzdCBvZiBob2xlcywgc2hvdWxkIGJlIGFuIGVsZW1lbnQgb2YgdGhlIHJlc3VsdCBvZiB1dGlsL2NsYXNzaWZ5X3JpbmdzXG4gKiBAcGFyYW0gcHJlY2lzaW9uIFNwZWNpZmllZCBpbiBpbnB1dCBjb29yZGluYXRlIHVuaXRzLiBJZiAwIHJldHVybnMgYWZ0ZXIgZmlyc3QgcnVuLCBpZiA+IDAgcmVwZWF0ZWRseSBuYXJyb3dzIHRoZSBzZWFyY2ggc3BhY2UgdW50aWwgdGhlIHJhZGl1cyBvZiB0aGUgYXJlYSBzZWFyY2hlZCBmb3IgdGhlIGJlc3QgcG9sZSBpcyBsZXNzIHRoYW4gcHJlY2lzaW9uXG4gKiBAcGFyYW0gZGVidWcgUHJpbnQgc29tZSBzdGF0aXN0aWNzIHRvIHRoZSBjb25zb2xlIGR1cmluZyBleGVjdXRpb25cbiAqIEByZXR1cm5zIFBvbGUgb2YgSW5hY2Nlc3NpYmlsaXkuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocG9seWdvblJpbmdzOiBBcnJheTxBcnJheTxQb2ludD4+LCBwcmVjaXNpb24/OiBudW1iZXIgPSAxLCBkZWJ1Zz86IGJvb2xlYW4gPSBmYWxzZSk6IFBvaW50IHtcbiAgICAvLyBmaW5kIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIG91dGVyIHJpbmdcbiAgICBsZXQgbWluWCA9IEluZmluaXR5LCBtaW5ZID0gSW5maW5pdHksIG1heFggPSAtSW5maW5pdHksIG1heFkgPSAtSW5maW5pdHk7XG4gICAgY29uc3Qgb3V0ZXJSaW5nID0gcG9seWdvblJpbmdzWzBdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0ZXJSaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAgPSBvdXRlclJpbmdbaV07XG4gICAgICAgIGlmICghaSB8fCBwLnggPCBtaW5YKSBtaW5YID0gcC54O1xuICAgICAgICBpZiAoIWkgfHwgcC55IDwgbWluWSkgbWluWSA9IHAueTtcbiAgICAgICAgaWYgKCFpIHx8IHAueCA+IG1heFgpIG1heFggPSBwLng7XG4gICAgICAgIGlmICghaSB8fCBwLnkgPiBtYXhZKSBtYXhZID0gcC55O1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgY29uc3QgaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG4gICAgY29uc3QgY2VsbFNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KTtcbiAgICBsZXQgaCA9IGNlbGxTaXplIC8gMjtcblxuICAgIC8vIGEgcHJpb3JpdHkgcXVldWUgb2YgY2VsbHMgaW4gb3JkZXIgb2YgdGhlaXIgXCJwb3RlbnRpYWxcIiAobWF4IGRpc3RhbmNlIHRvIHBvbHlnb24pXG4gICAgY29uc3QgY2VsbFF1ZXVlID0gbmV3IFF1ZXVlKFtdLCBjb21wYXJlTWF4KTtcblxuICAgIGlmIChjZWxsU2l6ZSA9PT0gMCkgcmV0dXJuIG5ldyBQb2ludChtaW5YLCBtaW5ZKTtcblxuICAgIC8vIGNvdmVyIHBvbHlnb24gd2l0aCBpbml0aWFsIGNlbGxzXG4gICAgZm9yIChsZXQgeCA9IG1pblg7IHggPCBtYXhYOyB4ICs9IGNlbGxTaXplKSB7XG4gICAgICAgIGZvciAobGV0IHkgPSBtaW5ZOyB5IDwgbWF4WTsgeSArPSBjZWxsU2l6ZSkge1xuICAgICAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoeCArIGgsIHkgKyBoLCBoLCBwb2x5Z29uUmluZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRha2UgY2VudHJvaWQgYXMgdGhlIGZpcnN0IGJlc3QgZ3Vlc3NcbiAgICBsZXQgYmVzdENlbGwgPSBnZXRDZW50cm9pZENlbGwocG9seWdvblJpbmdzKTtcbiAgICBsZXQgbnVtUHJvYmVzID0gY2VsbFF1ZXVlLmxlbmd0aDtcblxuICAgIHdoaWxlIChjZWxsUXVldWUubGVuZ3RoKSB7XG4gICAgICAgIC8vIHBpY2sgdGhlIG1vc3QgcHJvbWlzaW5nIGNlbGwgZnJvbSB0aGUgcXVldWVcbiAgICAgICAgY29uc3QgY2VsbCA9IGNlbGxRdWV1ZS5wb3AoKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIGJlc3QgY2VsbCBpZiB3ZSBmb3VuZCBhIGJldHRlciBvbmVcbiAgICAgICAgaWYgKGNlbGwuZCA+IGJlc3RDZWxsLmQgfHwgIWJlc3RDZWxsLmQpIHtcbiAgICAgICAgICAgIGJlc3RDZWxsID0gY2VsbDtcbiAgICAgICAgICAgIGlmIChkZWJ1ZykgY29uc29sZS5sb2coJ2ZvdW5kIGJlc3QgJWQgYWZ0ZXIgJWQgcHJvYmVzJywgTWF0aC5yb3VuZCgxZTQgKiBjZWxsLmQpIC8gMWU0LCBudW1Qcm9iZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG8gbm90IGRyaWxsIGRvd24gZnVydGhlciBpZiB0aGVyZSdzIG5vIGNoYW5jZSBvZiBhIGJldHRlciBzb2x1dGlvblxuICAgICAgICBpZiAoY2VsbC5tYXggLSBiZXN0Q2VsbC5kIDw9IHByZWNpc2lvbikgY29udGludWU7XG5cbiAgICAgICAgLy8gc3BsaXQgdGhlIGNlbGwgaW50byBmb3VyIGNlbGxzXG4gICAgICAgIGggPSBjZWxsLmggLyAyO1xuICAgICAgICBjZWxsUXVldWUucHVzaChuZXcgQ2VsbChjZWxsLnAueCAtIGgsIGNlbGwucC55IC0gaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIGNlbGxRdWV1ZS5wdXNoKG5ldyBDZWxsKGNlbGwucC54ICsgaCwgY2VsbC5wLnkgLSBoLCBoLCBwb2x5Z29uUmluZ3MpKTtcbiAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoY2VsbC5wLnggLSBoLCBjZWxsLnAueSArIGgsIGgsIHBvbHlnb25SaW5ncykpO1xuICAgICAgICBjZWxsUXVldWUucHVzaChuZXcgQ2VsbChjZWxsLnAueCArIGgsIGNlbGwucC55ICsgaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIG51bVByb2JlcyArPSA0O1xuICAgIH1cblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhgbnVtIHByb2JlczogJHtudW1Qcm9iZXN9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBiZXN0IGRpc3RhbmNlOiAke2Jlc3RDZWxsLmR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJlc3RDZWxsLnA7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNYXgoYSwgYikge1xuICAgIHJldHVybiBiLm1heCAtIGEubWF4O1xufVxuXG5mdW5jdGlvbiBDZWxsKHgsIHksIGgsIHBvbHlnb24pIHtcbiAgICB0aGlzLnAgPSBuZXcgUG9pbnQoeCwgeSk7XG4gICAgdGhpcy5oID0gaDsgLy8gaGFsZiB0aGUgY2VsbCBzaXplXG4gICAgdGhpcy5kID0gcG9pbnRUb1BvbHlnb25EaXN0KHRoaXMucCwgcG9seWdvbik7IC8vIGRpc3RhbmNlIGZyb20gY2VsbCBjZW50ZXIgdG8gcG9seWdvblxuICAgIHRoaXMubWF4ID0gdGhpcy5kICsgdGhpcy5oICogTWF0aC5TUVJUMjsgLy8gbWF4IGRpc3RhbmNlIHRvIHBvbHlnb24gd2l0aGluIGEgY2VsbFxufVxuXG4vLyBzaWduZWQgZGlzdGFuY2UgZnJvbSBwb2ludCB0byBwb2x5Z29uIG91dGxpbmUgKG5lZ2F0aXZlIGlmIHBvaW50IGlzIG91dHNpZGUpXG5mdW5jdGlvbiBwb2ludFRvUG9seWdvbkRpc3QocCwgcG9seWdvbikge1xuICAgIGxldCBpbnNpZGUgPSBmYWxzZTtcbiAgICBsZXQgbWluRGlzdFNxID0gSW5maW5pdHk7XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHBvbHlnb24ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgY29uc3QgcmluZyA9IHBvbHlnb25ba107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMTsgaSA8IGxlbjsgaiA9IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYSA9IHJpbmdbaV07XG4gICAgICAgICAgICBjb25zdCBiID0gcmluZ1tqXTtcblxuICAgICAgICAgICAgaWYgKChhLnkgPiBwLnkgIT09IGIueSA+IHAueSkgJiZcbiAgICAgICAgICAgICAgICAocC54IDwgKGIueCAtIGEueCkgKiAocC55IC0gYS55KSAvIChiLnkgLSBhLnkpICsgYS54KSkgaW5zaWRlID0gIWluc2lkZTtcblxuICAgICAgICAgICAgbWluRGlzdFNxID0gTWF0aC5taW4obWluRGlzdFNxLCBkaXN0VG9TZWdtZW50U3F1YXJlZChwLCBhLCBiKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKGluc2lkZSA/IDEgOiAtMSkgKiBNYXRoLnNxcnQobWluRGlzdFNxKTtcbn1cblxuLy8gZ2V0IHBvbHlnb24gY2VudHJvaWRcbmZ1bmN0aW9uIGdldENlbnRyb2lkQ2VsbChwb2x5Z29uKSB7XG4gICAgbGV0IGFyZWEgPSAwO1xuICAgIGxldCB4ID0gMDtcbiAgICBsZXQgeSA9IDA7XG4gICAgY29uc3QgcG9pbnRzID0gcG9seWdvblswXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgYiA9IHBvaW50c1tqXTtcbiAgICAgICAgY29uc3QgZiA9IGEueCAqIGIueSAtIGIueCAqIGEueTtcbiAgICAgICAgeCArPSAoYS54ICsgYi54KSAqIGY7XG4gICAgICAgIHkgKz0gKGEueSArIGIueSkgKiBmO1xuICAgICAgICBhcmVhICs9IGYgKiAzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IENlbGwoeCAvIGFyZWEsIHkgLyBhcmVhLCAwLCBwb2x5Z29uKTtcbn1cbiIsIi8qKlxuICogSlMgSW1wbGVtZW50YXRpb24gb2YgTXVybXVySGFzaDMgKHIxMzYpIChhcyBvZiBNYXkgMjAsIDIwMTEpXG4gKiBcbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzpnYXJ5LmNvdXJ0QGdtYWlsLmNvbVwiPkdhcnkgQ291cnQ8L2E+XG4gKiBAc2VlIGh0dHA6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86YWFwcGxlYnlAZ21haWwuY29tXCI+QXVzdGluIEFwcGxlYnk8L2E+XG4gKiBAc2VlIGh0dHA6Ly9zaXRlcy5nb29nbGUuY29tL3NpdGUvbXVybXVyaGFzaC9cbiAqIFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBBU0NJSSBvbmx5XG4gKiBAcGFyYW0ge251bWJlcn0gc2VlZCBQb3NpdGl2ZSBpbnRlZ2VyIG9ubHlcbiAqIEByZXR1cm4ge251bWJlcn0gMzItYml0IHBvc2l0aXZlIGludGVnZXIgaGFzaCBcbiAqL1xuXG5mdW5jdGlvbiBtdXJtdXJoYXNoM18zMl9nYyhrZXksIHNlZWQpIHtcblx0dmFyIHJlbWFpbmRlciwgYnl0ZXMsIGgxLCBoMWIsIGMxLCBjMWIsIGMyLCBjMmIsIGsxLCBpO1xuXHRcblx0cmVtYWluZGVyID0ga2V5Lmxlbmd0aCAmIDM7IC8vIGtleS5sZW5ndGggJSA0XG5cdGJ5dGVzID0ga2V5Lmxlbmd0aCAtIHJlbWFpbmRlcjtcblx0aDEgPSBzZWVkO1xuXHRjMSA9IDB4Y2M5ZTJkNTE7XG5cdGMyID0gMHgxYjg3MzU5Mztcblx0aSA9IDA7XG5cdFxuXHR3aGlsZSAoaSA8IGJ5dGVzKSB7XG5cdCAgXHRrMSA9IFxuXHQgIFx0ICAoKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZikpIHxcblx0ICBcdCAgKChrZXkuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCkgfFxuXHQgIFx0ICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNikgfFxuXHQgIFx0ICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNCk7XG5cdFx0KytpO1xuXHRcdFxuXHRcdGsxID0gKCgoKGsxICYgMHhmZmZmKSAqIGMxKSArICgoKChrMSA+Pj4gMTYpICogYzEpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG5cdFx0azEgPSAoazEgPDwgMTUpIHwgKGsxID4+PiAxNyk7XG5cdFx0azEgPSAoKCgoazEgJiAweGZmZmYpICogYzIpICsgKCgoKGsxID4+PiAxNikgKiBjMikgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblxuXHRcdGgxIF49IGsxO1xuICAgICAgICBoMSA9IChoMSA8PCAxMykgfCAoaDEgPj4+IDE5KTtcblx0XHRoMWIgPSAoKCgoaDEgJiAweGZmZmYpICogNSkgKyAoKCgoaDEgPj4+IDE2KSAqIDUpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG5cdFx0aDEgPSAoKChoMWIgJiAweGZmZmYpICsgMHg2YjY0KSArICgoKChoMWIgPj4+IDE2KSArIDB4ZTY1NCkgJiAweGZmZmYpIDw8IDE2KSk7XG5cdH1cblx0XG5cdGsxID0gMDtcblx0XG5cdHN3aXRjaCAocmVtYWluZGVyKSB7XG5cdFx0Y2FzZSAzOiBrMSBePSAoa2V5LmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cdFx0Y2FzZSAyOiBrMSBePSAoa2V5LmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblx0XHRjYXNlIDE6IGsxIF49IChrZXkuY2hhckNvZGVBdChpKSAmIDB4ZmYpO1xuXHRcdFxuXHRcdGsxID0gKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuXHRcdGsxID0gKGsxIDw8IDE1KSB8IChrMSA+Pj4gMTcpO1xuXHRcdGsxID0gKCgoazEgJiAweGZmZmYpICogYzIpICsgKCgoKGsxID4+PiAxNikgKiBjMikgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuXHRcdGgxIF49IGsxO1xuXHR9XG5cdFxuXHRoMSBePSBrZXkubGVuZ3RoO1xuXG5cdGgxIF49IGgxID4+PiAxNjtcblx0aDEgPSAoKChoMSAmIDB4ZmZmZikgKiAweDg1ZWJjYTZiKSArICgoKChoMSA+Pj4gMTYpICogMHg4NWViY2E2YikgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuXHRoMSBePSBoMSA+Pj4gMTM7XG5cdGgxID0gKCgoKGgxICYgMHhmZmZmKSAqIDB4YzJiMmFlMzUpICsgKCgoKGgxID4+PiAxNikgKiAweGMyYjJhZTM1KSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuXHRoMSBePSBoMSA+Pj4gMTY7XG5cblx0cmV0dXJuIGgxID4+PiAwO1xufVxuXG5pZih0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gbXVybXVyaGFzaDNfMzJfZ2Ncbn0iLCIvKipcbiAqIEpTIEltcGxlbWVudGF0aW9uIG9mIE11cm11ckhhc2gyXG4gKiBcbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzpnYXJ5LmNvdXJ0QGdtYWlsLmNvbVwiPkdhcnkgQ291cnQ8L2E+XG4gKiBAc2VlIGh0dHA6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86YWFwcGxlYnlAZ21haWwuY29tXCI+QXVzdGluIEFwcGxlYnk8L2E+XG4gKiBAc2VlIGh0dHA6Ly9zaXRlcy5nb29nbGUuY29tL3NpdGUvbXVybXVyaGFzaC9cbiAqIFxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBBU0NJSSBvbmx5XG4gKiBAcGFyYW0ge251bWJlcn0gc2VlZCBQb3NpdGl2ZSBpbnRlZ2VyIG9ubHlcbiAqIEByZXR1cm4ge251bWJlcn0gMzItYml0IHBvc2l0aXZlIGludGVnZXIgaGFzaFxuICovXG5cbmZ1bmN0aW9uIG11cm11cmhhc2gyXzMyX2djKHN0ciwgc2VlZCkge1xuICB2YXJcbiAgICBsID0gc3RyLmxlbmd0aCxcbiAgICBoID0gc2VlZCBeIGwsXG4gICAgaSA9IDAsXG4gICAgaztcbiAgXG4gIHdoaWxlIChsID49IDQpIHtcbiAgXHRrID0gXG4gIFx0ICAoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikpIHxcbiAgXHQgICgoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDgpIHxcbiAgXHQgICgoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2KSB8XG4gIFx0ICAoKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNCk7XG4gICAgXG4gICAgayA9ICgoKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoayA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSk7XG4gICAgayBePSBrID4+PiAyNDtcbiAgICBrID0gKCgoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1KSArICgoKChrID4+PiAxNikgKiAweDViZDFlOTk1KSAmIDB4ZmZmZikgPDwgMTYpKTtcblxuXHRoID0gKCgoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1KSArICgoKChoID4+PiAxNikgKiAweDViZDFlOTk1KSAmIDB4ZmZmZikgPDwgMTYpKSBeIGs7XG5cbiAgICBsIC09IDQ7XG4gICAgKytpO1xuICB9XG4gIFxuICBzd2l0Y2ggKGwpIHtcbiAgY2FzZSAzOiBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcbiAgY2FzZSAyOiBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuICBjYXNlIDE6IGggXj0gKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZik7XG4gICAgICAgICAgaCA9ICgoKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSk7XG4gIH1cblxuICBoIF49IGggPj4+IDEzO1xuICBoID0gKCgoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1KSArICgoKChoID4+PiAxNikgKiAweDViZDFlOTk1KSAmIDB4ZmZmZikgPDwgMTYpKTtcbiAgaCBePSBoID4+PiAxNTtcblxuICByZXR1cm4gaCA+Pj4gMDtcbn1cblxuaWYodHlwZW9mIG1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gbXVybXVyaGFzaDJfMzJfZ2Ncbn1cbiIsInZhciBtdXJtdXIzID0gcmVxdWlyZShcIi4vbXVybXVyaGFzaDNfZ2MuanNcIilcbnZhciBtdXJtdXIyID0gcmVxdWlyZShcIi4vbXVybXVyaGFzaDJfZ2MuanNcIilcblxubW9kdWxlLmV4cG9ydHMgPSBtdXJtdXIzXG5tb2R1bGUuZXhwb3J0cy5tdXJtdXIzID0gbXVybXVyM1xubW9kdWxlLmV4cG9ydHMubXVybXVyMiA9IG11cm11cjJcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBBbmNob3IgZnJvbSAnLi9hbmNob3InO1xuXG5pbXBvcnQge2dldEFuY2hvcnMsIGdldENlbnRlckFuY2hvcn0gZnJvbSAnLi9nZXRfYW5jaG9ycyc7XG5pbXBvcnQgY2xpcExpbmUgZnJvbSAnLi9jbGlwX2xpbmUnO1xuaW1wb3J0IHtzaGFwZVRleHQsIHNoYXBlSWNvbiwgV3JpdGluZ01vZGUsIGZpdEljb25Ub1RleHR9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQge2dldEdseXBoUXVhZHMsIGdldEljb25RdWFkc30gZnJvbSAnLi9xdWFkcyc7XG5pbXBvcnQgQ29sbGlzaW9uRmVhdHVyZSBmcm9tICcuL2NvbGxpc2lvbl9mZWF0dXJlJztcbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge1xuICAgIGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUsXG4gICAgYWxsb3dzTGV0dGVyU3BhY2luZ1xufSBmcm9tICcuLi91dGlsL3NjcmlwdF9kZXRlY3Rpb24nO1xuaW1wb3J0IGZpbmRQb2xlT2ZJbmFjY2Vzc2liaWxpdHkgZnJvbSAnLi4vdXRpbC9maW5kX3BvbGVfb2ZfaW5hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCBjbGFzc2lmeVJpbmdzIGZyb20gJy4uL3V0aWwvY2xhc3NpZnlfcmluZ3MnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQge1NJWkVfUEFDS19GQUNUT1J9IGZyb20gJy4vc3ltYm9sX3NpemUnO1xuaW1wb3J0IE9ORV9FTSBmcm9tICcuL29uZV9lbSc7XG5cbmltcG9ydCB0eXBlIHtTaGFwaW5nLCBQb3NpdGlvbmVkSWNvbiwgVGV4dEp1c3RpZnl9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQgdHlwZSB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHR5cGUge1N5bWJvbEZlYXR1cmV9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIHtHbHlwaFBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvZ2x5cGhfYXRsYXMnO1xuaW1wb3J0IHR5cGUge1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZX0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBtdXJtdXIzIGZyb20gJ211cm11cmhhc2gtanMnO1xuXG4vLyBUaGUgc3ltYm9sIGxheW91dCBwcm9jZXNzIG5lZWRzIGB0ZXh0LXNpemVgIGV2YWx1YXRlZCBhdCB1cCB0byBmaXZlIGRpZmZlcmVudCB6b29tIGxldmVscywgYW5kXG4vLyBgaWNvbi1zaXplYCBhdCB1cCB0byB0aHJlZTpcbi8vXG4vLyAgIDEuIGB0ZXh0LXNpemVgIGF0IHRoZSB6b29tIGxldmVsIG9mIHRoZSBidWNrZXQuIFVzZWQgdG8gY2FsY3VsYXRlIGEgcGVyLWZlYXR1cmUgc2l6ZSBmb3Igc291cmNlIGB0ZXh0LXNpemVgXG4vLyAgICAgICBleHByZXNzaW9ucywgYW5kIHRvIGNhbGN1bGF0ZSB0aGUgYm94IGRpbWVuc2lvbnMgZm9yIGljb24tdGV4dC1maXQuXG4vLyAgIDIuIGBpY29uLXNpemVgIGF0IHRoZSB6b29tIGxldmVsIG9mIHRoZSBidWNrZXQuIFVzZWQgdG8gY2FsY3VsYXRlIGEgcGVyLWZlYXR1cmUgc2l6ZSBmb3Igc291cmNlIGBpY29uLXNpemVgXG4vLyAgICAgICBleHByZXNzaW9ucy5cbi8vICAgMy4gYHRleHQtc2l6ZWAgYW5kIGBpY29uLXNpemVgIGF0IHRoZSB6b29tIGxldmVsIG9mIHRoZSBidWNrZXQsIHBsdXMgb25lLiBVc2VkIHRvIGNhbGN1bGF0ZSBjb2xsaXNpb24gYm94ZXMuXG4vLyAgIDQuIGB0ZXh0LXNpemVgIGF0IHpvb20gbGV2ZWwgMTguIFVzZWQgZm9yIHNvbWV0aGluZyBsaW5lLXN5bWJvbC1wbGFjZW1lbnQtcmVsYXRlZC5cbi8vICAgNS4gIEZvciBjb21wb3NpdGUgYCotc2l6ZWAgZXhwcmVzc2lvbnM6IHR3byB6b29tIGxldmVscyBvZiBjdXJ2ZSBzdG9wcyB0aGF0IFwiY292ZXJcIiB0aGUgem9vbSBsZXZlbCBvZiB0aGVcbi8vICAgICAgIGJ1Y2tldC4gVGhlc2UgZ28gaW50byBhIHZlcnRleCBidWZmZXIgYW5kIGFyZSB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gaW50ZXJwb2xhdGUgdGhlIHNpemUgYXQgcmVuZGVyIHRpbWUuXG4vL1xuLy8gKDEpIGFuZCAoMikgYXJlIHN0b3JlZCBpbiBgYnVja2V0LmxheWVyc1swXS5sYXlvdXRgLiBUaGUgcmVtYWluZGVyIGFyZSBiZWxvdy5cbi8vXG50eXBlIFNpemVzID0ge1xuICAgIGxheW91dFRleHRTaXplOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPiwgLy8gKDMpXG4gICAgbGF5b3V0SWNvblNpemU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCAvLyAoMylcbiAgICB0ZXh0TWF4U2l6ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4sICAgIC8vICg0KVxuICAgIGNvbXBvc2l0ZVRleHRTaXplczogW1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPl0sIC8vICg1KVxuICAgIGNvbXBvc2l0ZUljb25TaXplczogW1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPl0sIC8vICg1KVxufTtcblxuZXhwb3J0IHR5cGUgVGV4dEFuY2hvciA9ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbScgfCAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCc7XG5cbi8vIFRoZSByYWRpYWwgb2Zmc2V0IGlzIHRvIHRoZSBlZGdlIG9mIHRoZSB0ZXh0IGJveFxuLy8gSW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLCB0aGUgZWRnZSBvZiB0aGUgdGV4dCBib3ggaXMgd2hlcmUgZ2x5cGhzIHN0YXJ0XG4vLyBCdXQgaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbiwgdGhlIGdseXBocyBhcHBlYXIgdG8gXCJzdGFydFwiIGF0IHRoZSBiYXNlbGluZVxuLy8gV2UgZG9uJ3QgYWN0dWFsbHkgbG9hZCBiYXNlbGluZSBkYXRhLCBidXQgd2UgYXNzdW1lIGFuIG9mZnNldCBvZiBPTkVfRU0gLSAxN1xuLy8gKHNlZSBcInlPZmZzZXRcIiBpbiBzaGFwaW5nLmpzKVxuY29uc3QgYmFzZWxpbmVPZmZzZXQgPSA3O1xuY29uc3QgSU5WQUxJRF9URVhUX09GRlNFVCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlVmFyaWFibGVPZmZzZXQoYW5jaG9yOiBUZXh0QW5jaG9yLCBvZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0pIHtcblxuICAgIGZ1bmN0aW9uIGZyb21SYWRpYWxPZmZzZXQoYW5jaG9yOiBUZXh0QW5jaG9yLCByYWRpYWxPZmZzZXQ6IG51bWJlcikge1xuICAgICAgICBsZXQgeCA9IDAsIHkgPSAwO1xuICAgICAgICBpZiAocmFkaWFsT2Zmc2V0IDwgMCkgcmFkaWFsT2Zmc2V0ID0gMDsgLy8gSWdub3JlIG5lZ2F0aXZlIG9mZnNldC5cbiAgICAgICAgLy8gc29sdmUgZm9yIHIgd2hlcmUgcl4yICsgcl4yID0gcmFkaWFsT2Zmc2V0XjJcbiAgICAgICAgY29uc3QgaHlwb3RlbnVzZSA9IHJhZGlhbE9mZnNldCAvIE1hdGguc3FydCgyKTtcbiAgICAgICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICAgICAgeSA9IGh5cG90ZW51c2UgLSBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgICAgICB5ID0gLWh5cG90ZW51c2UgKyBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgeSA9IC1yYWRpYWxPZmZzZXQgKyBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgeSA9IHJhZGlhbE9mZnNldCAtIGJhc2VsaW5lT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICAgICAgeCA9IC1oeXBvdGVudXNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICAgICAgeCA9IGh5cG90ZW51c2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICB4ID0gcmFkaWFsT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHggPSAtcmFkaWFsT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3gsIHldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21UZXh0T2Zmc2V0KGFuY2hvcjogVGV4dEFuY2hvciwgb2Zmc2V0WDogbnVtYmVyLCBvZmZzZXRZOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHggPSAwLCB5ID0gMDtcbiAgICAgICAgLy8gVXNlIGFic29sdXRlIG9mZnNldCB2YWx1ZXMuXG4gICAgICAgIG9mZnNldFggPSBNYXRoLmFicyhvZmZzZXRYKTtcbiAgICAgICAgb2Zmc2V0WSA9IE1hdGguYWJzKG9mZnNldFkpO1xuXG4gICAgICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIHkgPSBvZmZzZXRZIC0gYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgeSA9IC1vZmZzZXRZICsgYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHggPSAtb2Zmc2V0WDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICB4ID0gb2Zmc2V0WDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFt4LCB5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gKG9mZnNldFsxXSAhPT0gSU5WQUxJRF9URVhUX09GRlNFVCkgPyBmcm9tVGV4dE9mZnNldChhbmNob3IsIG9mZnNldFswXSwgb2Zmc2V0WzFdKSA6IGZyb21SYWRpYWxPZmZzZXQoYW5jaG9yLCBvZmZzZXRbMF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybVN5bWJvbExheW91dChidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHtbc3RyaW5nXToge1tudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFBvc2l0aW9uczoge1tzdHJpbmddOiB7W251bWJlcl06IEdseXBoUG9zaXRpb259fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VNYXA6IHtbc3RyaW5nXTogU3R5bGVJbWFnZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4pIHtcbiAgICBidWNrZXQuY3JlYXRlQXJyYXlzKCk7XG5cbiAgICBjb25zdCB0aWxlU2l6ZSA9IDUxMiAqIGJ1Y2tldC5vdmVyc2NhbGluZztcbiAgICBidWNrZXQudGlsZVBpeGVsUmF0aW8gPSBFWFRFTlQgLyB0aWxlU2l6ZTtcbiAgICBidWNrZXQuY29tcGFyZVRleHQgPSB7fTtcbiAgICBidWNrZXQuaWNvbnNOZWVkTGluZWFyID0gZmFsc2U7XG5cbiAgICBjb25zdCBsYXlvdXQgPSBidWNrZXQubGF5ZXJzWzBdLmxheW91dDtcbiAgICBjb25zdCB1bmV2YWx1YXRlZExheW91dFZhbHVlcyA9IGJ1Y2tldC5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXM7XG5cbiAgICBjb25zdCBzaXplcyA9IHt9O1xuXG4gICAgaWYgKGJ1Y2tldC50ZXh0U2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgY29uc3Qge21pblpvb20sIG1heFpvb219ID0gYnVja2V0LnRleHRTaXplRGF0YTtcbiAgICAgICAgc2l6ZXMuY29tcG9zaXRlVGV4dFNpemVzID0gW1xuICAgICAgICAgICAgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1pblpvb20pKSxcbiAgICAgICAgICAgIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWyd0ZXh0LXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtYXhab29tKSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAoYnVja2V0Lmljb25TaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICBjb25zdCB7bWluWm9vbSwgbWF4Wm9vbX0gPSBidWNrZXQuaWNvblNpemVEYXRhO1xuICAgICAgICBzaXplcy5jb21wb3NpdGVJY29uU2l6ZXMgPSBbXG4gICAgICAgICAgICB1bmV2YWx1YXRlZExheW91dFZhbHVlc1snaWNvbi1zaXplJ10ucG9zc2libHlFdmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMobWluWm9vbSkpLFxuICAgICAgICAgICAgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1heFpvb20pKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHNpemVzLmxheW91dFRleHRTaXplID0gdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKGJ1Y2tldC56b29tICsgMSkpO1xuICAgIHNpemVzLmxheW91dEljb25TaXplID0gdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKGJ1Y2tldC56b29tICsgMSkpO1xuICAgIHNpemVzLnRleHRNYXhTaXplID0gdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKDE4KSk7XG5cbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gbGF5b3V0LmdldCgndGV4dC1saW5lLWhlaWdodCcpICogT05FX0VNO1xuICAgIGNvbnN0IHRleHRBbG9uZ0xpbmUgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJyAmJiBsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgIT09ICdwb2ludCc7XG4gICAgY29uc3Qga2VlcFVwcmlnaHQgPSBsYXlvdXQuZ2V0KCd0ZXh0LWtlZXAtdXByaWdodCcpO1xuXG4gICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGJ1Y2tldC5mZWF0dXJlcykge1xuICAgICAgICBjb25zdCBmb250c3RhY2sgPSBsYXlvdXQuZ2V0KCd0ZXh0LWZvbnQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkuam9pbignLCcpO1xuICAgICAgICBjb25zdCBnbHlwaFBvc2l0aW9uTWFwID0gZ2x5cGhQb3NpdGlvbnM7XG5cbiAgICAgICAgY29uc3Qgc2hhcGVkVGV4dE9yaWVudGF0aW9ucyA9IHtcbiAgICAgICAgICAgIGhvcml6b250YWw6IHt9LFxuICAgICAgICAgICAgdmVydGljYWw6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0ZXh0ID0gZmVhdHVyZS50ZXh0O1xuICAgICAgICBsZXQgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSA9IFswLCAwXTtcbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuZm9ybWF0dGVkVGV4dCA9IHRleHQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNpbmcgPSBsYXlvdXQuZ2V0KCd0ZXh0LWxldHRlci1zcGFjaW5nJykuZXZhbHVhdGUoZmVhdHVyZSwge30pICogT05FX0VNO1xuICAgICAgICAgICAgY29uc3Qgc3BhY2luZ0lmQWxsb3dlZCA9IGFsbG93c0xldHRlclNwYWNpbmcodW5mb3JtYXR0ZWRUZXh0KSA/IHNwYWNpbmcgOiAwO1xuXG4gICAgICAgICAgICBjb25zdCB0ZXh0QW5jaG9yID0gbGF5b3V0LmdldCgndGV4dC1hbmNob3InKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZVRleHRBbmNob3IgPSBsYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpO1xuXG4gICAgICAgICAgICBpZiAoIXZhcmlhYmxlVGV4dEFuY2hvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhZGlhbE9mZnNldCA9IGxheW91dC5nZXQoJ3RleHQtcmFkaWFsLW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICAgICAgICAgICAgICAvLyBMYXllcnMgd2l0aCB2YXJpYWJsZSBhbmNob3JzIHVzZSB0aGUgYHRleHQtcmFkaWFsLW9mZnNldGAgcHJvcGVydHkgYW5kIHRoZSBbeCwgeV0gb2Zmc2V0IHZlY3RvclxuICAgICAgICAgICAgICAgIC8vIGlzIGNhbGN1bGF0ZWQgYXQgcGxhY2VtZW50IHRpbWUgaW5zdGVhZCBvZiBsYXlvdXQgdGltZVxuICAgICAgICAgICAgICAgIGlmIChyYWRpYWxPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHN0eWxlIHNwZWMgc2F5cyBkb24ndCB1c2UgYHRleHQtb2Zmc2V0YCBhbmQgYHRleHQtcmFkaWFsLW9mZnNldGAgdG9nZXRoZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGRvZXNuJ3QgYWN0dWFsbHkgc3BlY2lmeSB3aGF0IGhhcHBlbnMgaWYgeW91IHVzZSBib3RoLiBXZSBnbyB3aXRoIHRoZSByYWRpYWwgb2Zmc2V0LlxuICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gZXZhbHVhdGVWYXJpYWJsZU9mZnNldCh0ZXh0QW5jaG9yLCBbcmFkaWFsT2Zmc2V0ICogT05FX0VNLCBJTlZBTElEX1RFWFRfT0ZGU0VUXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldCA9IChsYXlvdXQuZ2V0KCd0ZXh0LW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KS5tYXAodCA9PiB0ICogT05FX0VNKTogYW55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0ZXh0SnVzdGlmeSA9IHRleHRBbG9uZ0xpbmUgP1xuICAgICAgICAgICAgICAgIFwiY2VudGVyXCIgOlxuICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ3RleHQtanVzdGlmeScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcblxuICAgICAgICAgICAgY29uc3Qgc3ltYm9sUGxhY2VtZW50ID0gbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpO1xuICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBzeW1ib2xQbGFjZW1lbnQgPT09ICdwb2ludCcgP1xuICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ3RleHQtbWF4LXdpZHRoJykuZXZhbHVhdGUoZmVhdHVyZSwge30pICogT05FX0VNIDpcbiAgICAgICAgICAgICAgICAwO1xuXG4gICAgICAgICAgICBjb25zdCBhZGRWZXJ0aWNhbFNoYXBpbmdGb3JQb2ludExhYmVsSWZOZWVkZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUodW5mb3JtYXR0ZWRUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBWZXJ0aWNhbCBQT0kgbGFiZWwgcGxhY2VtZW50IGlzIG1lYW50IHRvIGJlIHVzZWQgZm9yIHNjcmlwdHMgdGhhdCBzdXBwb3J0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdyaXRpbmcgbW9kZSwgdGh1cywgZGVmYXVsdCBsZWZ0IGp1c3RpZmljYXRpb24gaXMgdXNlZC4gSWYgTGF0aW5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2NyaXB0cyB3b3VsZCBuZWVkIHRvIGJlIHN1cHBvcnRlZCwgdGhpcyBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQgb3RoZXIganVzdGlmaWNhdGlvbnMuXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgPSBzaGFwZVRleHQodGV4dCwgZ2x5cGhNYXAsIGZvbnRzdGFjaywgbWF4V2lkdGgsIGxpbmVIZWlnaHQsIHRleHRBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xlZnQnLCBzcGFjaW5nSWZBbGxvd2VkLCB0ZXh0T2Zmc2V0LCBXcml0aW5nTW9kZS52ZXJ0aWNhbCwgdHJ1ZSwgc3ltYm9sUGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBJZiB0aGlzIGxheWVyIHVzZXMgdGV4dC12YXJpYWJsZS1hbmNob3IsIGdlbmVyYXRlIHNoYXBpbmdzIGZvciBhbGwganVzdGlmaWNhdGlvbiBwb3NzaWJpbGl0aWVzLlxuICAgICAgICAgICAgaWYgKCF0ZXh0QWxvbmdMaW5lICYmIHZhcmlhYmxlVGV4dEFuY2hvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp1c3RpZmljYXRpb25zID0gdGV4dEp1c3RpZnkgPT09IFwiYXV0b1wiID9cbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVUZXh0QW5jaG9yLm1hcChhID0+IGdldEFuY2hvckp1c3RpZmljYXRpb24oYSkpIDpcbiAgICAgICAgICAgICAgICAgICAgW3RleHRKdXN0aWZ5XTtcblxuICAgICAgICAgICAgICAgIGxldCBzaW5nbGVMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBqdXN0aWZpY2F0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBqdXN0aWZpY2F0aW9uOiBUZXh0SnVzdGlmeSA9IGp1c3RpZmljYXRpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsW2p1c3RpZmljYXRpb25dKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZUxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzaGFwaW5nIGZvciB0aGUgZmlyc3QganVzdGlmaWNhdGlvbiB3YXMgb25seSBhIHNpbmdsZSBsaW5lLCB3ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIHJlLXVzZSBpdCBmb3IgdGhlIG90aGVyIGp1c3RpZmljYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbanVzdGlmaWNhdGlvbl0gPSBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB1c2luZyB0ZXh0LXZhcmlhYmxlLWFuY2hvciBmb3IgdGhlIGxheWVyLCB3ZSB1c2UgYSBjZW50ZXIgYW5jaG9yIGZvciBhbGwgc2hhcGluZ3MgYW5kIGFwcGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb2Zmc2V0cyBmb3IgdGhlIGFuY2hvciBpbiB0aGUgcGxhY2VtZW50IHN0ZXAuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFwaW5nID0gc2hhcGVUZXh0KHRleHQsIGdseXBoTWFwLCBmb250c3RhY2ssIG1heFdpZHRoLCBsaW5lSGVpZ2h0LCAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmaWNhdGlvbiwgc3BhY2luZ0lmQWxsb3dlZCwgdGV4dE9mZnNldCwgV3JpdGluZ01vZGUuaG9yaXpvbnRhbCwgZmFsc2UsIHN5bWJvbFBsYWNlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFtqdXN0aWZpY2F0aW9uXSA9IHNoYXBpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlTGluZSA9IHNoYXBpbmcubGluZUNvdW50ID09PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYWRkVmVydGljYWxTaGFwaW5nRm9yUG9pbnRMYWJlbElmTmVlZGVkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0SnVzdGlmeSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEp1c3RpZnkgPSBnZXRBbmNob3JKdXN0aWZpY2F0aW9uKHRleHRBbmNob3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEhvcml6b250YWwgcG9pbnQgb3IgbGluZSBsYWJlbC5cbiAgICAgICAgICAgICAgICBjb25zdCBzaGFwaW5nID0gc2hhcGVUZXh0KHRleHQsIGdseXBoTWFwLCBmb250c3RhY2ssIG1heFdpZHRoLCBsaW5lSGVpZ2h0LCB0ZXh0QW5jaG9yLCB0ZXh0SnVzdGlmeSwgc3BhY2luZ0lmQWxsb3dlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQsIFdyaXRpbmdNb2RlLmhvcml6b250YWwsIGZhbHNlLCBzeW1ib2xQbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChzaGFwaW5nKSBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbdGV4dEp1c3RpZnldID0gc2hhcGluZztcblxuICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsIHBvaW50IGxhYmVsIChpZiBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50IGlzIGVuYWJsZWQpLlxuICAgICAgICAgICAgICAgIGFkZFZlcnRpY2FsU2hhcGluZ0ZvclBvaW50TGFiZWxJZk5lZWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVmVydGljYWxpemVkIGxpbmUgbGFiZWwuXG4gICAgICAgICAgICAgICAgaWYgKGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUodW5mb3JtYXR0ZWRUZXh0KSAmJiB0ZXh0QWxvbmdMaW5lICYmIGtlZXBVcHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgPSBzaGFwZVRleHQodGV4dCwgZ2x5cGhNYXAsIGZvbnRzdGFjaywgbWF4V2lkdGgsIGxpbmVIZWlnaHQsIHRleHRBbmNob3IsIHRleHRKdXN0aWZ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNpbmdJZkFsbG93ZWQsIHRleHRPZmZzZXQsIFdyaXRpbmdNb2RlLnZlcnRpY2FsLCBmYWxzZSwgc3ltYm9sUGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzaGFwZWRJY29uO1xuICAgICAgICBpZiAoZmVhdHVyZS5pY29uICYmIGZlYXR1cmUuaWNvbi5uYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IGltYWdlTWFwW2ZlYXR1cmUuaWNvbi5uYW1lXTtcbiAgICAgICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgICAgIHNoYXBlZEljb24gPSBzaGFwZUljb24oXG4gICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zW2ZlYXR1cmUuaWNvbi5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0LmdldCgnaWNvbi1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSksXG4gICAgICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tYW5jaG9yJykuZXZhbHVhdGUoZmVhdHVyZSwge30pKTtcbiAgICAgICAgICAgICAgICBpZiAoYnVja2V0LnNkZkljb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0LnNkZkljb25zID0gaW1hZ2Uuc2RmO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVja2V0LnNkZkljb25zICE9PSBpbWFnZS5zZGYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uY2UoJ1N0eWxlIHNoZWV0IHdhcm5pbmc6IENhbm5vdCBtaXggU0RGIGFuZCBub24tU0RGIGljb25zIGluIG9uZSBidWZmZXInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlLnBpeGVsUmF0aW8gIT09IGJ1Y2tldC5waXhlbFJhdGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uc05lZWRMaW5lYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0LmdldCgnaWNvbi1yb3RhdGUnKS5jb25zdGFudE9yKDEpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uc05lZWRMaW5lYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWwpLmxlbmd0aCB8fCBzaGFwZWRJY29uKSB7XG4gICAgICAgICAgICBhZGRGZWF0dXJlKGJ1Y2tldCwgZmVhdHVyZSwgc2hhcGVkVGV4dE9yaWVudGF0aW9ucywgc2hhcGVkSWNvbiwgZ2x5cGhQb3NpdGlvbk1hcCwgc2l6ZXMsIHRleHRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3dDb2xsaXNpb25Cb3hlcykge1xuICAgICAgICBidWNrZXQuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnMoKTtcbiAgICB9XG59XG5cbi8vIENob29zZSB0aGUganVzdGlmaWNhdGlvbiB0aGF0IG1hdGNoZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgVGV4dEFuY2hvclxuZXhwb3J0IGZ1bmN0aW9uIGdldEFuY2hvckp1c3RpZmljYXRpb24oYW5jaG9yOiBUZXh0QW5jaG9yKTogVGV4dEp1c3RpZnkgIHtcbiAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfVxuICAgIHJldHVybiAnY2VudGVyJztcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGZlYXR1cmUgYW5kIGl0cyBzaGFwZWQgdGV4dCBhbmQgaWNvbiBkYXRhLCBhZGQgYSAnc3ltYm9sXG4gKiBpbnN0YW5jZScgZm9yIGVhY2ggX3Bvc3NpYmxlXyBwbGFjZW1lbnQgb2YgdGhlIHN5bWJvbCBmZWF0dXJlLlxuICogKEF0IHJlbmRlciB0aW1lUGxhY2VTeW1ib2xzI3BsYWNlKCkgc2VsZWN0cyB3aGljaCBvZiB0aGVzZSBpbnN0YW5jZXMgdG9cbiAqIHNob3cgb3IgaGlkZSBiYXNlZCBvbiBjb2xsaXNpb25zIHdpdGggc3ltYm9scyBpbiBvdGhlciBsYXllcnMuKVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkRmVhdHVyZShidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9uczogYW55LFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgICAgIGdseXBoUG9zaXRpb25NYXA6IHtbc3RyaW5nXToge1tudW1iZXJdOiBHbHlwaFBvc2l0aW9ufX0sXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBTaXplcyxcbiAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSkge1xuICAgIGNvbnN0IGxheW91dFRleHRTaXplID0gc2l6ZXMubGF5b3V0VGV4dFNpemUuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgIGNvbnN0IGxheW91dEljb25TaXplID0gc2l6ZXMubGF5b3V0SWNvblNpemUuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuXG4gICAgLy8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbGFiZWxzIHRoYXQganVtcCBhcm91bmQgd2hlbiB6b29taW5nIHdlIG5lZWRcbiAgICAvLyB0byB1c2UgYSB0ZXh0LXNpemUgdmFsdWUgdGhhdCBpcyB0aGUgc2FtZSBmb3IgYWxsIHpvb20gbGV2ZWxzLlxuICAgIC8vIGJ1Y2tldCBjYWxjdWxhdGVzIHRleHQtc2l6ZSBhdCBhIGhpZ2ggem9vbSBsZXZlbCBzbyB0aGF0IGFsbCB0aWxlcyBjYW5cbiAgICAvLyB1c2UgdGhlIHNhbWUgdmFsdWUgd2hlbiBjYWxjdWxhdGluZyBhbmNob3IgcG9zaXRpb25zLlxuICAgIGxldCB0ZXh0TWF4U2l6ZSA9IHNpemVzLnRleHRNYXhTaXplLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICBpZiAodGV4dE1heFNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0TWF4U2l6ZSA9IGxheW91dFRleHRTaXplO1xuICAgIH1cblxuICAgIGNvbnN0IGxheW91dCA9IGJ1Y2tldC5sYXllcnNbMF0ubGF5b3V0O1xuICAgIGNvbnN0IGljb25PZmZzZXQgPSBsYXlvdXQuZ2V0KCdpY29uLW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICBjb25zdCBkZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcgPSBnZXREZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcoc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsKTtcbiAgICBjb25zdCBnbHlwaFNpemUgPSAyNCxcbiAgICAgICAgZm9udFNjYWxlID0gbGF5b3V0VGV4dFNpemUgLyBnbHlwaFNpemUsXG4gICAgICAgIHRleHRCb3hTY2FsZSA9IGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyAqIGZvbnRTY2FsZSxcbiAgICAgICAgdGV4dE1heEJveFNjYWxlID0gYnVja2V0LnRpbGVQaXhlbFJhdGlvICogdGV4dE1heFNpemUgLyBnbHlwaFNpemUsXG4gICAgICAgIGljb25Cb3hTY2FsZSA9IGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyAqIGxheW91dEljb25TaXplLFxuICAgICAgICBzeW1ib2xNaW5EaXN0YW5jZSA9IGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyAqIGxheW91dC5nZXQoJ3N5bWJvbC1zcGFjaW5nJyksXG4gICAgICAgIHRleHRQYWRkaW5nID0gbGF5b3V0LmdldCgndGV4dC1wYWRkaW5nJykgKiBidWNrZXQudGlsZVBpeGVsUmF0aW8sXG4gICAgICAgIGljb25QYWRkaW5nID0gbGF5b3V0LmdldCgnaWNvbi1wYWRkaW5nJykgKiBidWNrZXQudGlsZVBpeGVsUmF0aW8sXG4gICAgICAgIHRleHRNYXhBbmdsZSA9IGxheW91dC5nZXQoJ3RleHQtbWF4LWFuZ2xlJykgLyAxODAgKiBNYXRoLlBJLFxuICAgICAgICB0ZXh0QWxvbmdMaW5lID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCcgJiYgbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnLFxuICAgICAgICBpY29uQWxvbmdMaW5lID0gbGF5b3V0LmdldCgnaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCcgJiYgbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnLFxuICAgICAgICBzeW1ib2xQbGFjZW1lbnQgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JyksXG4gICAgICAgIHRleHRSZXBlYXREaXN0YW5jZSA9IHN5bWJvbE1pbkRpc3RhbmNlIC8gMjtcblxuICAgIGNvbnN0IGljb25UZXh0Rml0ID0gbGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpO1xuICAgIGxldCB2ZXJ0aWNhbGx5U2hhcGVkSWNvbjtcbiAgICAvLyBBZGp1c3Qgc2hhcGVkIGljb24gc2l6ZSB3aGVuIGljb24tdGV4dC1maXQgaXMgdXNlZC5cbiAgICBpZiAoc2hhcGVkSWNvbiAmJiBpY29uVGV4dEZpdCAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICB2ZXJ0aWNhbGx5U2hhcGVkSWNvbiA9IGZpdEljb25Ub1RleHQoc2hhcGVkSWNvbiwgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCwgaWNvblRleHRGaXQsXG4gICAgICAgICAgICAgICAgbGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdC1wYWRkaW5nJyksIGljb25PZmZzZXQsIGZvbnRTY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZykge1xuICAgICAgICAgICAgc2hhcGVkSWNvbiA9IGZpdEljb25Ub1RleHQoc2hhcGVkSWNvbiwgZGVmYXVsdEhvcml6b250YWxTaGFwaW5nLCBpY29uVGV4dEZpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQtcGFkZGluZycpLCBpY29uT2Zmc2V0LCBmb250U2NhbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWRkU3ltYm9sQXRBbmNob3IgPSAobGluZSwgYW5jaG9yKSA9PiB7XG4gICAgICAgIGlmIChhbmNob3IueCA8IDAgfHwgYW5jaG9yLnggPj0gRVhURU5UIHx8IGFuY2hvci55IDwgMCB8fCBhbmNob3IueSA+PSBFWFRFTlQpIHtcbiAgICAgICAgICAgIC8vIFN5bWJvbCBsYXllcnMgYXJlIGRyYXduIGFjcm9zcyB0aWxlIGJvdW5kYXJpZXMsIFdlIGZpbHRlciBvdXQgc3ltYm9sc1xuICAgICAgICAgICAgLy8gb3V0c2lkZSBvdXIgdGlsZSBib3VuZGFyaWVzICh3aGljaCBtYXkgYmUgaW5jbHVkZWQgaW4gdmVjdG9yIHRpbGUgYnVmZmVycylcbiAgICAgICAgICAgIC8vIHRvIHByZXZlbnQgZG91YmxlLWRyYXdpbmcgc3ltYm9scy5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZFN5bWJvbChidWNrZXQsIGFuY2hvciwgbGluZSwgc2hhcGVkVGV4dE9yaWVudGF0aW9ucywgc2hhcGVkSWNvbiwgdmVydGljYWxseVNoYXBlZEljb24sIGJ1Y2tldC5sYXllcnNbMF0sXG4gICAgICAgICAgICBidWNrZXQuY29sbGlzaW9uQm94QXJyYXksIGZlYXR1cmUuaW5kZXgsIGZlYXR1cmUuc291cmNlTGF5ZXJJbmRleCwgYnVja2V0LmluZGV4LFxuICAgICAgICAgICAgdGV4dEJveFNjYWxlLCB0ZXh0UGFkZGluZywgdGV4dEFsb25nTGluZSwgdGV4dE9mZnNldCxcbiAgICAgICAgICAgIGljb25Cb3hTY2FsZSwgaWNvblBhZGRpbmcsIGljb25BbG9uZ0xpbmUsIGljb25PZmZzZXQsXG4gICAgICAgICAgICBmZWF0dXJlLCBnbHlwaFBvc2l0aW9uTWFwLCBzaXplcyk7XG4gICAgfTtcblxuICAgIGlmIChzeW1ib2xQbGFjZW1lbnQgPT09ICdsaW5lJykge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgY2xpcExpbmUoZmVhdHVyZS5nZW9tZXRyeSwgMCwgMCwgRVhURU5ULCBFWFRFTlQpKSB7XG4gICAgICAgICAgICBjb25zdCBhbmNob3JzID0gZ2V0QW5jaG9ycyhcbiAgICAgICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgICAgIHN5bWJvbE1pbkRpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRleHRNYXhBbmdsZSxcbiAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsIHx8IGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZyxcbiAgICAgICAgICAgICAgICBzaGFwZWRJY29uLFxuICAgICAgICAgICAgICAgIGdseXBoU2l6ZSxcbiAgICAgICAgICAgICAgICB0ZXh0TWF4Qm94U2NhbGUsXG4gICAgICAgICAgICAgICAgYnVja2V0Lm92ZXJzY2FsaW5nLFxuICAgICAgICAgICAgICAgIEVYVEVOVFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW5jaG9yIG9mIGFuY2hvcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFwZWRUZXh0ID0gZGVmYXVsdEhvcml6b250YWxTaGFwaW5nO1xuICAgICAgICAgICAgICAgIGlmICghc2hhcGVkVGV4dCB8fCAhYW5jaG9ySXNUb29DbG9zZShidWNrZXQsIHNoYXBlZFRleHQudGV4dCwgdGV4dFJlcGVhdERpc3RhbmNlLCBhbmNob3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKGxpbmUsIGFuY2hvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzeW1ib2xQbGFjZW1lbnQgPT09ICdsaW5lLWNlbnRlcicpIHtcbiAgICAgICAgLy8gTm8gY2xpcHBpbmcsIG11bHRpcGxlIGxpbmVzIHBlciBmZWF0dXJlIGFyZSBhbGxvd2VkXG4gICAgICAgIC8vIFwibGluZXNcIiB3aXRoIG9ubHkgb25lIHBvaW50IGFyZSBpZ25vcmVkIGFzIGluIGNsaXBMaW5lc1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGdldENlbnRlckFuY2hvcihcbiAgICAgICAgICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dE1heEFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsIHx8IGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbixcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhTaXplLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0TWF4Qm94U2NhbGUpO1xuICAgICAgICAgICAgICAgIGlmIChhbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IobGluZSwgYW5jaG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZlYXR1cmUudHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9seWdvbiBvZiBjbGFzc2lmeVJpbmdzKGZlYXR1cmUuZ2VvbWV0cnksIDApKSB7XG4gICAgICAgICAgICAvLyAxNiBoZXJlIHJlcHJlc2VudHMgMiBwaXhlbHNcbiAgICAgICAgICAgIGNvbnN0IHBvaSA9IGZpbmRQb2xlT2ZJbmFjY2Vzc2liaWxpdHkocG9seWdvbiwgMTYpO1xuICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IocG9seWdvblswXSwgbmV3IEFuY2hvcihwb2kueCwgcG9pLnksIDApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmVhdHVyZS50eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM4MDhcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKGxpbmUsIG5ldyBBbmNob3IobGluZVswXS54LCBsaW5lWzBdLnksIDApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmVhdHVyZS50eXBlID09PSAnUG9pbnQnKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9pbnRzIG9mIGZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IoW3BvaW50XSwgbmV3IEFuY2hvcihwb2ludC54LCBwb2ludC55LCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IE1BWF9QQUNLRURfU0laRSA9IDY1NTM1O1xuXG5mdW5jdGlvbiBhZGRUZXh0VmVydGljZXMoYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yOiBQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0OiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyOiBTeW1ib2xTdHlsZUxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbG9uZ0xpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVBcnJheToge2xpbmVTdGFydEluZGV4OiBudW1iZXIsIGxpbmVMZW5ndGg6IG51bWJlcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGluZ01vZGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnRUeXBlczogQXJyYXk8J3ZlcnRpY2FsJyB8ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0Jz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXM6IHtbc3RyaW5nXTogbnVtYmVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFBvc2l0aW9uTWFwOiB7W3N0cmluZ106IHtbbnVtYmVyXTogR2x5cGhQb3NpdGlvbn19LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZEljb25JbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzOiBTaXplcykge1xuICAgIGNvbnN0IGdseXBoUXVhZHMgPSBnZXRHbHlwaFF1YWRzKGFuY2hvciwgc2hhcGVkVGV4dCwgdGV4dE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciwgdGV4dEFsb25nTGluZSwgZmVhdHVyZSwgZ2x5cGhQb3NpdGlvbk1hcCwgYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQpO1xuXG4gICAgY29uc3Qgc2l6ZURhdGEgPSBidWNrZXQudGV4dFNpemVEYXRhO1xuICAgIGxldCB0ZXh0U2l6ZURhdGEgPSBudWxsO1xuXG4gICAgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgIHRleHRTaXplRGF0YSA9IFtcbiAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXNpemUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSlcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHRleHRTaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoYCR7YnVja2V0LmxheWVySWRzWzBdfTogVmFsdWUgZm9yIFwidGV4dC1zaXplXCIgaXMgPj0gMjU2LiBSZWR1Y2UgeW91ciBcInRleHQtc2l6ZVwiLmApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICB0ZXh0U2l6ZURhdGEgPSBbXG4gICAgICAgICAgICBTSVpFX1BBQ0tfRkFDVE9SICogc2l6ZXMuY29tcG9zaXRlVGV4dFNpemVzWzBdLmV2YWx1YXRlKGZlYXR1cmUsIHt9KSxcbiAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBzaXplcy5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUoZmVhdHVyZSwge30pXG4gICAgICAgIF07XG4gICAgICAgIGlmICh0ZXh0U2l6ZURhdGFbMF0gPiBNQVhfUEFDS0VEX1NJWkUgfHwgdGV4dFNpemVEYXRhWzFdID4gTUFYX1BBQ0tFRF9TSVpFKSB7XG4gICAgICAgICAgICB3YXJuT25jZShgJHtidWNrZXQubGF5ZXJJZHNbMF19OiBWYWx1ZSBmb3IgXCJ0ZXh0LXNpemVcIiBpcyA+PSAyNTYuIFJlZHVjZSB5b3VyIFwidGV4dC1zaXplXCIuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBidWNrZXQuYWRkU3ltYm9scyhcbiAgICAgICAgYnVja2V0LnRleHQsXG4gICAgICAgIGdseXBoUXVhZHMsXG4gICAgICAgIHRleHRTaXplRGF0YSxcbiAgICAgICAgdGV4dE9mZnNldCxcbiAgICAgICAgdGV4dEFsb25nTGluZSxcbiAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgd3JpdGluZ01vZGUsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgbGluZUFycmF5LmxpbmVTdGFydEluZGV4LFxuICAgICAgICBsaW5lQXJyYXkubGluZUxlbmd0aCxcbiAgICAgICAgcGxhY2VkSWNvbkluZGV4KTtcblxuICAgIC8vIFRoZSBwbGFjZWRTeW1ib2xBcnJheSBpcyB1c2VkIGF0IHJlbmRlciB0aW1lIGluIGRyYXdUaWxlU3ltYm9sc1xuICAgIC8vIFRoZXNlIGluZGljZXMgYWxsb3cgYWNjZXNzIHRvIHRoZSBhcnJheSBhdCBjb2xsaXNpb24gZGV0ZWN0aW9uIHRpbWVcbiAgICBmb3IgKGNvbnN0IHBsYWNlbWVudFR5cGUgb2YgcGxhY2VtZW50VHlwZXMpIHtcbiAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXNbcGxhY2VtZW50VHlwZV0gPSBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBnbHlwaFF1YWRzLmxlbmd0aCAqIDQ7XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRIb3Jpem9udGFsU2hhcGluZyhob3Jpem9udGFsU2hhcGluZzoge1tUZXh0SnVzdGlmeV06IFNoYXBpbmd9KTogU2hhcGluZyB8IG51bGwge1xuICAgIC8vIFdlIGRvbid0IGNhcmUgd2hpY2ggc2hhcGluZyB3ZSBnZXQgYmVjYXVzZSB0aGlzIGlzIHVzZWQgZm9yIGNvbGxpc2lvbiBwdXJwb3Nlc1xuICAgIC8vIGFuZCBhbGwgdGhlIGp1c3RpZmljYXRpb25zIGhhdmUgdGhlIHNhbWUgY29sbGlzaW9uIGJveFxuICAgIGZvciAoY29uc3QganVzdGlmaWNhdGlvbjogYW55IGluIGhvcml6b250YWxTaGFwaW5nKSB7XG4gICAgICAgIHJldHVybiBob3Jpem9udGFsU2hhcGluZ1tqdXN0aWZpY2F0aW9uXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQWRkIGEgc2luZ2xlIGxhYmVsICYgaWNvbiBwbGFjZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkU3ltYm9sKGJ1Y2tldDogU3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgICAgICAgIGFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgICAgIGxpbmU6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zOiBhbnksXG4gICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogUG9zaXRpb25lZEljb24gfCB2b2lkLFxuICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsbHlTaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgICAgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHRleHRCb3hTY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHRleHRQYWRkaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgdGV4dEFsb25nTGluZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgIGljb25Cb3hTY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGljb25QYWRkaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgaWNvbkFsb25nTGluZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICBpY29uT2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFN5bWJvbEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgZ2x5cGhQb3NpdGlvbk1hcDoge1tzdHJpbmddOiB7W251bWJlcl06IEdseXBoUG9zaXRpb259fSxcbiAgICAgICAgICAgICAgICAgICBzaXplczogU2l6ZXMpIHtcbiAgICBjb25zdCBsaW5lQXJyYXkgPSBidWNrZXQuYWRkVG9MaW5lVmVydGV4QXJyYXkoYW5jaG9yLCBsaW5lKTtcblxuICAgIGxldCB0ZXh0Q29sbGlzaW9uRmVhdHVyZSwgaWNvbkNvbGxpc2lvbkZlYXR1cmUsIHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUsIHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmU7XG5cbiAgICBsZXQgbnVtSWNvblZlcnRpY2VzID0gMDtcbiAgICBsZXQgbnVtVmVydGljYWxJY29uVmVydGljZXMgPSAwO1xuICAgIGxldCBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyA9IDA7XG4gICAgbGV0IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyA9IDA7XG4gICAgbGV0IHBsYWNlZEljb25TeW1ib2xJbmRleCA9IC0xO1xuICAgIGxldCB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCA9IC0xO1xuICAgIGNvbnN0IHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzID0ge307XG4gICAgbGV0IGtleSA9IG11cm11cjMoJycpO1xuXG4gICAgbGV0IHRleHRPZmZzZXQwID0gMDtcbiAgICBsZXQgdGV4dE9mZnNldDEgPSAwO1xuICAgIGlmIChsYXllci5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUoJ3RleHQtcmFkaWFsLW9mZnNldCcpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgW3RleHRPZmZzZXQwLCB0ZXh0T2Zmc2V0MV0gPSAobGF5ZXIubGF5b3V0LmdldCgndGV4dC1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkubWFwKHQgPT4gdCAqIE9ORV9FTSk6IGFueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dE9mZnNldDAgPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJhZGlhbC1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkgKiBPTkVfRU07XG4gICAgICAgIHRleHRPZmZzZXQxID0gSU5WQUxJRF9URVhUX09GRlNFVDtcbiAgICB9XG5cbiAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCkge1xuICAgICAgICBjb25zdCB0ZXh0Um90YXRpb24gPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICAgICAgY29uc3QgdmVydGljYWxUZXh0Um90YXRpb24gPSB0ZXh0Um90YXRpb24gKyA5MC4wO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbFNoYXBpbmcgPSBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsO1xuICAgICAgICB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlID0gbmV3IENvbGxpc2lvbkZlYXR1cmUoY29sbGlzaW9uQm94QXJyYXksIGxpbmUsIGFuY2hvciwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCwgdmVydGljYWxTaGFwaW5nLCB0ZXh0Qm94U2NhbGUsIHRleHRQYWRkaW5nLCB0ZXh0QWxvbmdMaW5lLCBidWNrZXQub3ZlcnNjYWxpbmcsIHZlcnRpY2FsVGV4dFJvdGF0aW9uKTtcblxuICAgICAgICBpZiAodmVydGljYWxseVNoYXBlZEljb24pIHtcbiAgICAgICAgICAgIHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmUgPSBuZXcgQ29sbGlzaW9uRmVhdHVyZShjb2xsaXNpb25Cb3hBcnJheSwgbGluZSwgYW5jaG9yLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LCB2ZXJ0aWNhbGx5U2hhcGVkSWNvbiwgaWNvbkJveFNjYWxlLCBpY29uUGFkZGluZywgdGV4dEFsb25nTGluZSwgYnVja2V0Lm92ZXJzY2FsaW5nLCB2ZXJ0aWNhbFRleHRSb3RhdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL1BsYWNlIGljb24gZmlyc3QsIHNvIHRleHQgY2FuIGhhdmUgYSByZWZlcmVuY2UgdG8gaXRzIGluZGV4IGluIHRoZSBwbGFjZWQgc3ltYm9sIGFycmF5LlxuICAgIC8vVGV4dCBzeW1ib2xzIGNhbiBsYXppbHkgc2hpZnQgYXQgcmVuZGVyLXRpbWUgYmVjYXVzZSBvZiB2YXJpYWJsZSBhbmNob3IgcGxhY2VtZW50LlxuICAgIC8vSWYgdGhlIHN0eWxlIHNwZWNpZmllcyBhbiBgaWNvbi10ZXh0LWZpdGAgdGhlbiB0aGUgaWNvbiB3b3VsZCBoYXZlIHRvIHNoaWZ0IGFsb25nIHdpdGggaXQuXG4gICAgLy8gRm9yIG1vcmUgaW5mbyBjaGVjayBgdXBkYXRlVmFyaWFibGVBbmNob3JzYCBpbiBgZHJhd19zeW1ib2wuanNgIC5cbiAgICBpZiAoc2hhcGVkSWNvbikge1xuICAgICAgICBjb25zdCBpY29uUm90YXRlID0gbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1yb3RhdGUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgICAgIGNvbnN0IGljb25RdWFkcyA9IGdldEljb25RdWFkcyhzaGFwZWRJY29uLCBpY29uUm90YXRlKTtcbiAgICAgICAgY29uc3QgdmVydGljYWxJY29uUXVhZHMgPSB2ZXJ0aWNhbGx5U2hhcGVkSWNvbiA/IGdldEljb25RdWFkcyh2ZXJ0aWNhbGx5U2hhcGVkSWNvbiwgaWNvblJvdGF0ZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGljb25Db2xsaXNpb25GZWF0dXJlID0gbmV3IENvbGxpc2lvbkZlYXR1cmUoY29sbGlzaW9uQm94QXJyYXksIGxpbmUsIGFuY2hvciwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCwgc2hhcGVkSWNvbiwgaWNvbkJveFNjYWxlLCBpY29uUGFkZGluZywgLyphbGlnbiBib3hlcyB0byBsaW5lKi9mYWxzZSwgYnVja2V0Lm92ZXJzY2FsaW5nLCBpY29uUm90YXRlKTtcblxuICAgICAgICBudW1JY29uVmVydGljZXMgPSBpY29uUXVhZHMubGVuZ3RoICogNDtcblxuICAgICAgICBjb25zdCBzaXplRGF0YSA9IGJ1Y2tldC5pY29uU2l6ZURhdGE7XG4gICAgICAgIGxldCBpY29uU2l6ZURhdGEgPSBudWxsO1xuXG4gICAgICAgIGlmIChzaXplRGF0YS5raW5kID09PSAnc291cmNlJykge1xuICAgICAgICAgICAgaWNvblNpemVEYXRhID0gW1xuICAgICAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXNpemUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSlcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaWNvblNpemVEYXRhWzBdID4gTUFYX1BBQ0tFRF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoYCR7YnVja2V0LmxheWVySWRzWzBdfTogVmFsdWUgZm9yIFwiaWNvbi1zaXplXCIgaXMgPj0gMjU2LiBSZWR1Y2UgeW91ciBcImljb24tc2l6ZVwiLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgICAgICBpY29uU2l6ZURhdGEgPSBbXG4gICAgICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIHNpemVzLmNvbXBvc2l0ZUljb25TaXplc1swXS5ldmFsdWF0ZShmZWF0dXJlLCB7fSksXG4gICAgICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIHNpemVzLmNvbXBvc2l0ZUljb25TaXplc1sxXS5ldmFsdWF0ZShmZWF0dXJlLCB7fSlcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaWNvblNpemVEYXRhWzBdID4gTUFYX1BBQ0tFRF9TSVpFIHx8IGljb25TaXplRGF0YVsxXSA+IE1BWF9QQUNLRURfU0laRSkge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGAke2J1Y2tldC5sYXllcklkc1swXX06IFZhbHVlIGZvciBcImljb24tc2l6ZVwiIGlzID49IDI1Ni4gUmVkdWNlIHlvdXIgXCJpY29uLXNpemVcIi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJ1Y2tldC5hZGRTeW1ib2xzKFxuICAgICAgICAgICAgYnVja2V0Lmljb24sXG4gICAgICAgICAgICBpY29uUXVhZHMsXG4gICAgICAgICAgICBpY29uU2l6ZURhdGEsXG4gICAgICAgICAgICBpY29uT2Zmc2V0LFxuICAgICAgICAgICAgaWNvbkFsb25nTGluZSxcbiAgICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgIGxpbmVBcnJheS5saW5lU3RhcnRJbmRleCxcbiAgICAgICAgICAgIGxpbmVBcnJheS5saW5lTGVuZ3RoLFxuICAgICAgICAgICAgLy8gVGhlIGljb24gaXRzZWxmIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBzeW1ib2wgc2luY2UgdGhlIHRleHQgaXNudCBwbGFjZWQgeWV0XG4gICAgICAgICAgICAtMSk7XG5cbiAgICAgICAgcGxhY2VkSWNvblN5bWJvbEluZGV4ID0gYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgICAgICBpZiAodmVydGljYWxJY29uUXVhZHMpIHtcbiAgICAgICAgICAgIG51bVZlcnRpY2FsSWNvblZlcnRpY2VzID0gdmVydGljYWxJY29uUXVhZHMubGVuZ3RoICogNDtcblxuICAgICAgICAgICAgYnVja2V0LmFkZFN5bWJvbHMoXG4gICAgICAgICAgICAgICAgYnVja2V0Lmljb24sXG4gICAgICAgICAgICAgICAgdmVydGljYWxJY29uUXVhZHMsXG4gICAgICAgICAgICAgICAgaWNvblNpemVEYXRhLFxuICAgICAgICAgICAgICAgIGljb25PZmZzZXQsXG4gICAgICAgICAgICAgICAgaWNvbkFsb25nTGluZSxcbiAgICAgICAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgICAgICAgIFdyaXRpbmdNb2RlLnZlcnRpY2FsLFxuICAgICAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgICAgICBsaW5lQXJyYXkubGluZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgbGluZUFycmF5LmxpbmVMZW5ndGgsXG4gICAgICAgICAgICAgICAgLy8gVGhlIGljb24gaXRzZWxmIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBzeW1ib2wgc2luY2UgdGhlIHRleHQgaXNudCBwbGFjZWQgeWV0XG4gICAgICAgICAgICAgICAgLTEpO1xuXG4gICAgICAgICAgICB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCA9IGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGp1c3RpZmljYXRpb246IGFueSBpbiBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWwpIHtcbiAgICAgICAgY29uc3Qgc2hhcGluZyA9IHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFtqdXN0aWZpY2F0aW9uXTtcblxuICAgICAgICBpZiAoIXRleHRDb2xsaXNpb25GZWF0dXJlKSB7XG4gICAgICAgICAgICBrZXkgPSBtdXJtdXIzKHNoYXBpbmcudGV4dCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Um90YXRlID0gbGF5ZXIubGF5b3V0LmdldCgndGV4dC1yb3RhdGUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgICAgICAgICAvLyBBcyBhIGNvbGxpc2lvbiBhcHByb3hpbWF0aW9uLCB3ZSBjYW4gdXNlIGVpdGhlciB0aGUgdmVydGljYWwgb3IgYW55IG9mIHRoZSBob3Jpem9udGFsIHZlcnNpb25zIG9mIHRoZSBmZWF0dXJlXG4gICAgICAgICAgICAvLyBXZSdyZSBjb3VudGluZyBvbiBhbGwgdmVyc2lvbnMgaGF2aW5nIHNpbWlsYXIgZGltZW5zaW9uc1xuICAgICAgICAgICAgdGV4dENvbGxpc2lvbkZlYXR1cmUgPSBuZXcgQ29sbGlzaW9uRmVhdHVyZShjb2xsaXNpb25Cb3hBcnJheSwgbGluZSwgYW5jaG9yLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LCBzaGFwaW5nLCB0ZXh0Qm94U2NhbGUsIHRleHRQYWRkaW5nLCB0ZXh0QWxvbmdMaW5lLCBidWNrZXQub3ZlcnNjYWxpbmcsIHRleHRSb3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2luZ2xlTGluZSA9IHNoYXBpbmcubGluZUNvdW50ID09PSAxO1xuICAgICAgICBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyArPSBhZGRUZXh0VmVydGljZXMoXG4gICAgICAgICAgICBidWNrZXQsIGFuY2hvciwgc2hhcGluZywgbGF5ZXIsIHRleHRBbG9uZ0xpbmUsIGZlYXR1cmUsIHRleHRPZmZzZXQsIGxpbmVBcnJheSxcbiAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgPyBXcml0aW5nTW9kZS5ob3Jpem9udGFsIDogV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHksXG4gICAgICAgICAgICBzaW5nbGVMaW5lID8gKE9iamVjdC5rZXlzKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbCk6IGFueSkgOiBbanVzdGlmaWNhdGlvbl0sXG4gICAgICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcywgZ2x5cGhQb3NpdGlvbk1hcCwgcGxhY2VkSWNvblN5bWJvbEluZGV4LCBzaXplcyk7XG5cbiAgICAgICAgaWYgKHNpbmdsZUxpbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwpIHtcbiAgICAgICAgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzICs9IGFkZFRleHRWZXJ0aWNlcyhcbiAgICAgICAgICAgIGJ1Y2tldCwgYW5jaG9yLCBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsLCBsYXllciwgdGV4dEFsb25nTGluZSwgZmVhdHVyZSxcbiAgICAgICAgICAgIHRleHRPZmZzZXQsIGxpbmVBcnJheSwgV3JpdGluZ01vZGUudmVydGljYWwsIFsndmVydGljYWwnXSwgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMsIGdseXBoUG9zaXRpb25NYXAsIHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4LCBzaXplcyk7XG4gICAgfVxuXG4gICAgY29uc3QgdGV4dEJveFN0YXJ0SW5kZXggPSB0ZXh0Q29sbGlzaW9uRmVhdHVyZSA/IHRleHRDb2xsaXNpb25GZWF0dXJlLmJveFN0YXJ0SW5kZXggOiBidWNrZXQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IHRleHRCb3hFbmRJbmRleCA9IHRleHRDb2xsaXNpb25GZWF0dXJlID8gdGV4dENvbGxpc2lvbkZlYXR1cmUuYm94RW5kSW5kZXggOiBidWNrZXQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuXG4gICAgY29uc3QgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCA9IHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUgPyB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlLmJveFN0YXJ0SW5kZXggOiBidWNrZXQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IHZlcnRpY2FsVGV4dEJveEVuZEluZGV4ID0gdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZSA/IHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUuYm94RW5kSW5kZXggOiBidWNrZXQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuXG4gICAgY29uc3QgaWNvbkJveFN0YXJ0SW5kZXggPSBpY29uQ29sbGlzaW9uRmVhdHVyZSA/IGljb25Db2xsaXNpb25GZWF0dXJlLmJveFN0YXJ0SW5kZXggOiBidWNrZXQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IGljb25Cb3hFbmRJbmRleCA9IGljb25Db2xsaXNpb25GZWF0dXJlID8gaWNvbkNvbGxpc2lvbkZlYXR1cmUuYm94RW5kSW5kZXggOiBidWNrZXQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuXG4gICAgY29uc3QgdmVydGljYWxJY29uQm94U3RhcnRJbmRleCA9IHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmUgPyB2ZXJ0aWNhbEljb25Db2xsaXNpb25GZWF0dXJlLmJveFN0YXJ0SW5kZXggOiBidWNrZXQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IHZlcnRpY2FsSWNvbkJveEVuZEluZGV4ID0gdmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZSA/IHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmUuYm94RW5kSW5kZXggOiBidWNrZXQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGJ1Y2tldC5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aCA+PSBTeW1ib2xCdWNrZXQuTUFYX0dMWVBIUykgd2Fybk9uY2UoXG4gICAgICAgIFwiVG9vIG1hbnkgZ2x5cGhzIGJlaW5nIHJlbmRlcmVkIGluIGEgdGlsZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yOTA3XCJcbiAgICApO1xuXG4gICAgYnVja2V0LnN5bWJvbEluc3RhbmNlcy5lbXBsYWNlQmFjayhcbiAgICAgICAgYW5jaG9yLngsXG4gICAgICAgIGFuY2hvci55LFxuICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5yaWdodCA+PSAwID8gcGxhY2VkVGV4dFN5bWJvbEluZGljZXMucmlnaHQgOiAtMSxcbiAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMuY2VudGVyID49IDAgPyBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5jZW50ZXIgOiAtMSxcbiAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMubGVmdCA+PSAwID8gcGxhY2VkVGV4dFN5bWJvbEluZGljZXMubGVmdCA6IC0xLFxuICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy52ZXJ0aWNhbCB8fCAtMSxcbiAgICAgICAgcGxhY2VkSWNvblN5bWJvbEluZGV4LFxuICAgICAgICB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCxcbiAgICAgICAga2V5LFxuICAgICAgICB0ZXh0Qm94U3RhcnRJbmRleCxcbiAgICAgICAgdGV4dEJveEVuZEluZGV4LFxuICAgICAgICB2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LFxuICAgICAgICB2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCxcbiAgICAgICAgaWNvbkJveFN0YXJ0SW5kZXgsXG4gICAgICAgIGljb25Cb3hFbmRJbmRleCxcbiAgICAgICAgdmVydGljYWxJY29uQm94U3RhcnRJbmRleCxcbiAgICAgICAgdmVydGljYWxJY29uQm94RW5kSW5kZXgsXG4gICAgICAgIGZlYXR1cmVJbmRleCxcbiAgICAgICAgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMsXG4gICAgICAgIG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxcbiAgICAgICAgbnVtSWNvblZlcnRpY2VzLFxuICAgICAgICBudW1WZXJ0aWNhbEljb25WZXJ0aWNlcyxcbiAgICAgICAgMCxcbiAgICAgICAgdGV4dEJveFNjYWxlLFxuICAgICAgICB0ZXh0T2Zmc2V0MCxcbiAgICAgICAgdGV4dE9mZnNldDEpO1xufVxuXG5mdW5jdGlvbiBhbmNob3JJc1Rvb0Nsb3NlKGJ1Y2tldDogYW55LCB0ZXh0OiBzdHJpbmcsIHJlcGVhdERpc3RhbmNlOiBudW1iZXIsIGFuY2hvcjogUG9pbnQpIHtcbiAgICBjb25zdCBjb21wYXJlVGV4dCA9IGJ1Y2tldC5jb21wYXJlVGV4dDtcbiAgICBpZiAoISh0ZXh0IGluIGNvbXBhcmVUZXh0KSkge1xuICAgICAgICBjb21wYXJlVGV4dFt0ZXh0XSA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG90aGVyQW5jaG9ycyA9IGNvbXBhcmVUZXh0W3RleHRdO1xuICAgICAgICBmb3IgKGxldCBrID0gb3RoZXJBbmNob3JzLmxlbmd0aCAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAgICAgICBpZiAoYW5jaG9yLmRpc3Qob3RoZXJBbmNob3JzW2tdKSA8IHJlcGVhdERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyB3aXRoaW4gcmVwZWF0RGlzdGFuY2Ugb2Ygb25lIGFuY2hvciwgc3RvcCBsb29raW5nXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgYW5jaG9yIGlzIG5vdCB3aXRoaW4gcmVwZWF0RGlzdGFuY2Ugb2YgYW55IG90aGVyIGFuY2hvciwgYWRkIHRvIGFycmF5XG4gICAgY29tcGFyZVRleHRbdGV4dF0ucHVzaChhbmNob3IpO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbiIsIlxuaW1wb3J0IHJlZlByb3BlcnRpZXMgZnJvbSAnLi91dGlsL3JlZl9wcm9wZXJ0aWVzJztcblxuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaikge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsKVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgbGV0IHN0ciA9ICdbJztcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2Ygb2JqKSB7XG4gICAgICAgICAgICBzdHIgKz0gYCR7c3RyaW5naWZ5KHZhbCl9LGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3N0cn1dYDtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKS5zb3J0KCk7XG5cbiAgICBsZXQgc3RyID0gJ3snO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdHIgKz0gYCR7SlNPTi5zdHJpbmdpZnkoa2V5c1tpXSl9OiR7c3RyaW5naWZ5KG9ialtrZXlzW2ldXSl9LGA7XG4gICAgfVxuICAgIHJldHVybiBgJHtzdHJ9fWA7XG59XG5cbmZ1bmN0aW9uIGdldEtleShsYXllcikge1xuICAgIGxldCBrZXkgPSAnJztcbiAgICBmb3IgKGNvbnN0IGsgb2YgcmVmUHJvcGVydGllcykge1xuICAgICAgICBrZXkgKz0gYC8ke3N0cmluZ2lmeShsYXllcltrXSl9YDtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ3JvdXBCeUxheW91dDtcblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBsYXllcnMsIHJldHVybiBhbiBhcnJheSBvZiBhcnJheXMgb2YgbGF5ZXJzIHdoZXJlIGFsbFxuICogbGF5ZXJzIGluIGVhY2ggZ3JvdXAgaGF2ZSBpZGVudGljYWwgbGF5b3V0LWFmZmVjdGluZyBwcm9wZXJ0aWVzLiBUaGVzZVxuICogYXJlIHRoZSBwcm9wZXJ0aWVzIHRoYXQgd2VyZSBmb3JtZXJseSB1c2VkIGJ5IGV4cGxpY2l0IGByZWZgIG1lY2hhbmlzbVxuICogZm9yIGxheWVyczogJ3R5cGUnLCAnc291cmNlJywgJ3NvdXJjZS1sYXllcicsICdtaW56b29tJywgJ21heHpvb20nLFxuICogJ2ZpbHRlcicsIGFuZCAnbGF5b3V0Jy5cbiAqXG4gKiBUaGUgaW5wdXQgaXMgbm90IG1vZGlmaWVkLiBUaGUgb3V0cHV0IGxheWVycyBhcmUgcmVmZXJlbmNlcyB0byB0aGVcbiAqIGlucHV0IGxheWVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheTxMYXllcj59IGxheWVyc1xuICogQHBhcmFtIHtPYmplY3R9IFtjYWNoZWRLZXlzXSAtIGFuIG9iamVjdCB0byBrZWVwIGFscmVhZHkgY2FsY3VsYXRlZCBrZXlzLlxuICogQHJldHVybnMge0FycmF5PEFycmF5PExheWVyPj59XG4gKi9cbmZ1bmN0aW9uIGdyb3VwQnlMYXlvdXQobGF5ZXJzLCBjYWNoZWRLZXlzKSB7XG4gICAgY29uc3QgZ3JvdXBzID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIGNvbnN0IGsgPSAoY2FjaGVkS2V5cyAmJiBjYWNoZWRLZXlzW2xheWVyc1tpXS5pZF0pIHx8IGdldEtleShsYXllcnNbaV0pO1xuICAgICAgICAvLyB1cGRhdGUgdGhlIGNhY2hlIGlmIHRoZXJlIGlzIG9uZVxuICAgICAgICBpZiAoY2FjaGVkS2V5cylcbiAgICAgICAgICAgIGNhY2hlZEtleXNbbGF5ZXJzW2ldLmlkXSA9IGs7XG5cbiAgICAgICAgbGV0IGdyb3VwID0gZ3JvdXBzW2tdO1xuICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgICBncm91cCA9IGdyb3Vwc1trXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGdyb3VwLnB1c2gobGF5ZXJzW2ldKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIGZvciAoY29uc3QgayBpbiBncm91cHMpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBzW2tdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi9zdHlsZV9sYXllcic7XG5pbXBvcnQgY3JlYXRlU3R5bGVMYXllciBmcm9tICcuL2NyZWF0ZV9zdHlsZV9sYXllcic7XG5cbmltcG9ydCB7dmFsdWVzfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IGZlYXR1cmVGaWx0ZXIgZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgZ3JvdXBCeUxheW91dCBmcm9tICcuLi9zdHlsZS1zcGVjL2dyb3VwX2J5X2xheW91dCc7XG5cbmltcG9ydCB0eXBlIHtUeXBlZFN0eWxlTGF5ZXJ9IGZyb20gJy4vc3R5bGVfbGF5ZXIvdHlwZWRfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIExheWVyQ29uZmlncyA9IHsgW3N0cmluZ106IExheWVyU3BlY2lmaWNhdGlvbiB9O1xuZXhwb3J0IHR5cGUgRmFtaWx5PExheWVyOiBUeXBlZFN0eWxlTGF5ZXI+ID0gQXJyYXk8TGF5ZXI+O1xuXG5jbGFzcyBTdHlsZUxheWVySW5kZXgge1xuICAgIGZhbWlsaWVzQnlTb3VyY2U6IHsgW3NvdXJjZTogc3RyaW5nXTogeyBbc291cmNlTGF5ZXI6IHN0cmluZ106IEFycmF5PEZhbWlseTwqPj4gfSB9O1xuICAgIGtleUNhY2hlOiB7IFtzb3VyY2U6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gICAgX2xheWVyQ29uZmlnczogTGF5ZXJDb25maWdzO1xuICAgIF9sYXllcnM6IHsgW3N0cmluZ106IFN0eWxlTGF5ZXIgfTtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyQ29uZmlnczogP0FycmF5PExheWVyU3BlY2lmaWNhdGlvbj4pIHtcbiAgICAgICAgdGhpcy5rZXlDYWNoZSA9IHt9O1xuICAgICAgICBpZiAobGF5ZXJDb25maWdzKSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UobGF5ZXJDb25maWdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlcGxhY2UobGF5ZXJDb25maWdzOiBBcnJheTxMYXllclNwZWNpZmljYXRpb24+KSB7XG4gICAgICAgIHRoaXMuX2xheWVyQ29uZmlncyA9IHt9O1xuICAgICAgICB0aGlzLl9sYXllcnMgPSB7fTtcbiAgICAgICAgdGhpcy51cGRhdGUobGF5ZXJDb25maWdzLCBbXSk7XG4gICAgfVxuXG4gICAgdXBkYXRlKGxheWVyQ29uZmlnczogQXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPiwgcmVtb3ZlZElkczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVyQ29uZmlnIG9mIGxheWVyQ29uZmlncykge1xuICAgICAgICAgICAgdGhpcy5fbGF5ZXJDb25maWdzW2xheWVyQ29uZmlnLmlkXSA9IGxheWVyQ29uZmlnO1xuXG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tsYXllckNvbmZpZy5pZF0gPSBjcmVhdGVTdHlsZUxheWVyKGxheWVyQ29uZmlnKTtcbiAgICAgICAgICAgIGxheWVyLl9mZWF0dXJlRmlsdGVyID0gZmVhdHVyZUZpbHRlcihsYXllci5maWx0ZXIpO1xuICAgICAgICAgICAgaWYgKHRoaXMua2V5Q2FjaGVbbGF5ZXJDb25maWcuaWRdKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmtleUNhY2hlW2xheWVyQ29uZmlnLmlkXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIHJlbW92ZWRJZHMpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmtleUNhY2hlW2lkXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sYXllckNvbmZpZ3NbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xheWVyc1tpZF07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZhbWlsaWVzQnlTb3VyY2UgPSB7fTtcblxuICAgICAgICBjb25zdCBncm91cHMgPSBncm91cEJ5TGF5b3V0KHZhbHVlcyh0aGlzLl9sYXllckNvbmZpZ3MpLCB0aGlzLmtleUNhY2hlKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxheWVyQ29uZmlncyBvZiBncm91cHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVycyA9IGxheWVyQ29uZmlncy5tYXAoKGxheWVyQ29uZmlnKSA9PiB0aGlzLl9sYXllcnNbbGF5ZXJDb25maWcuaWRdKTtcblxuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbMF07XG4gICAgICAgICAgICBpZiAobGF5ZXIudmlzaWJpbGl0eSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUlkID0gbGF5ZXIuc291cmNlIHx8ICcnO1xuICAgICAgICAgICAgbGV0IHNvdXJjZUdyb3VwID0gdGhpcy5mYW1pbGllc0J5U291cmNlW3NvdXJjZUlkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlR3JvdXApIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VHcm91cCA9IHRoaXMuZmFtaWxpZXNCeVNvdXJjZVtzb3VyY2VJZF0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJJZCA9IGxheWVyLnNvdXJjZUxheWVyIHx8ICdfZ2VvanNvblRpbGVMYXllcic7XG4gICAgICAgICAgICBsZXQgc291cmNlTGF5ZXJGYW1pbGllcyA9IHNvdXJjZUdyb3VwW3NvdXJjZUxheWVySWRdO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VMYXllckZhbWlsaWVzKSB7XG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJGYW1pbGllcyA9IHNvdXJjZUdyb3VwW3NvdXJjZUxheWVySWRdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNvdXJjZUxheWVyRmFtaWxpZXMucHVzaChsYXllcnMpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdHlsZUxheWVySW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0FscGhhSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBwb3RwYWNrIGZyb20gJ3BvdHBhY2snO1xuXG5pbXBvcnQgdHlwZSB7R2x5cGhNZXRyaWNzLCBTdHlsZUdseXBofSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5cbmNvbnN0IHBhZGRpbmcgPSAxO1xuXG50eXBlIFJlY3QgPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB3OiBudW1iZXIsXG4gICAgaDogbnVtYmVyXG59O1xuXG5leHBvcnQgdHlwZSBHbHlwaFBvc2l0aW9uID0ge1xuICAgIHJlY3Q6IFJlY3QsXG4gICAgbWV0cmljczogR2x5cGhNZXRyaWNzXG59O1xuXG5leHBvcnQgdHlwZSBHbHlwaFBvc2l0aW9ucyA9IHsgW3N0cmluZ106IHsgW251bWJlcl06IEdseXBoUG9zaXRpb24gfSB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdseXBoQXRsYXMge1xuICAgIGltYWdlOiBBbHBoYUltYWdlO1xuICAgIHBvc2l0aW9uczogR2x5cGhQb3NpdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3RvcihzdGFja3M6IHsgW3N0cmluZ106IHsgW251bWJlcl06ID9TdHlsZUdseXBoIH0gfSkge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSB7fTtcbiAgICAgICAgY29uc3QgYmlucyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2sgaW4gc3RhY2tzKSB7XG4gICAgICAgICAgICBjb25zdCBnbHlwaHMgPSBzdGFja3Nbc3RhY2tdO1xuICAgICAgICAgICAgY29uc3Qgc3RhY2tQb3NpdGlvbnMgPSBwb3NpdGlvbnNbc3RhY2tdID0ge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gZ2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3JjID0gZ2x5cGhzWytpZF07XG4gICAgICAgICAgICAgICAgaWYgKCFzcmMgfHwgc3JjLmJpdG1hcC53aWR0aCA9PT0gMCB8fCBzcmMuYml0bWFwLmhlaWdodCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBiaW4gPSB7XG4gICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgICAgIHc6IHNyYy5iaXRtYXAud2lkdGggKyAyICogcGFkZGluZyxcbiAgICAgICAgICAgICAgICAgICAgaDogc3JjLmJpdG1hcC5oZWlnaHQgKyAyICogcGFkZGluZ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYmlucy5wdXNoKGJpbik7XG4gICAgICAgICAgICAgICAgc3RhY2tQb3NpdGlvbnNbaWRdID0ge3JlY3Q6IGJpbiwgbWV0cmljczogc3JjLm1ldHJpY3N9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3csIGh9ID0gcG90cGFjayhiaW5zKTtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBuZXcgQWxwaGFJbWFnZSh7d2lkdGg6IHcgfHwgMSwgaGVpZ2h0OiBoIHx8IDF9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHN0YWNrIGluIHN0YWNrcykge1xuICAgICAgICAgICAgY29uc3QgZ2x5cGhzID0gc3RhY2tzW3N0YWNrXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiBnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcmMgPSBnbHlwaHNbK2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXNyYyB8fCBzcmMuYml0bWFwLndpZHRoID09PSAwIHx8IHNyYy5iaXRtYXAuaGVpZ2h0ID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW4gPSBwb3NpdGlvbnNbc3RhY2tdW2lkXS5yZWN0O1xuICAgICAgICAgICAgICAgIEFscGhhSW1hZ2UuY29weShzcmMuYml0bWFwLCBpbWFnZSwge3g6IDAsIHk6IDB9LCB7eDogYmluLnggKyBwYWRkaW5nLCB5OiBiaW4ueSArIHBhZGRpbmd9LCBzcmMuYml0bWFwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7XG4gICAgfVxufVxuXG5yZWdpc3RlcignR2x5cGhBdGxhcycsIEdseXBoQXRsYXMpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEZlYXR1cmVJbmRleCBmcm9tICcuLi9kYXRhL2ZlYXR1cmVfaW5kZXgnO1xuXG5pbXBvcnQge3BlcmZvcm1TeW1ib2xMYXlvdXR9IGZyb20gJy4uL3N5bWJvbC9zeW1ib2xfbGF5b3V0JztcbmltcG9ydCB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IERpY3Rpb25hcnlDb2RlciBmcm9tICcuLi91dGlsL2RpY3Rpb25hcnlfY29kZXInO1xuaW1wb3J0IFN5bWJvbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCBMaW5lQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2xpbmVfYnVja2V0JztcbmltcG9ydCBGaWxsQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0JztcbmltcG9ydCBGaWxsRXh0cnVzaW9uQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2ZpbGxfZXh0cnVzaW9uX2J1Y2tldCc7XG5pbXBvcnQge3dhcm5PbmNlLCBtYXBPYmplY3QsIHZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBJbWFnZUF0bGFzIGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgR2x5cGhBdGxhcyBmcm9tICcuLi9yZW5kZXIvZ2x5cGhfYXRsYXMnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbmltcG9ydCB0eXBlIHtCdWNrZXR9IGZyb20gJy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVySW5kZXggZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXJfaW5kZXgnO1xuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgV29ya2VyVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyVGlsZUNhbGxiYWNrLFxufSBmcm9tICcuLi9zb3VyY2Uvd29ya2VyX3NvdXJjZSc7XG5cbmNsYXNzIFdvcmtlclRpbGUge1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICB1aWQ6IHN0cmluZztcbiAgICB6b29tOiBudW1iZXI7XG4gICAgcGl4ZWxSYXRpbzogbnVtYmVyO1xuICAgIHRpbGVTaXplOiBudW1iZXI7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW47XG4gICAgY29sbGVjdFJlc291cmNlVGltaW5nOiBib29sZWFuO1xuICAgIHJldHVybkRlcGVuZGVuY2llczogYm9vbGVhbjtcblxuICAgIHN0YXR1czogJ3BhcnNpbmcnIHwgJ2RvbmUnO1xuICAgIGRhdGE6IFZlY3RvclRpbGU7XG4gICAgY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5O1xuXG4gICAgYWJvcnQ6ID8oKSA9PiB2b2lkO1xuICAgIHJlbG9hZENhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2s7XG4gICAgdmVjdG9yVGlsZTogVmVjdG9yVGlsZTtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy50aWxlSUQgPSBuZXcgT3ZlcnNjYWxlZFRpbGVJRChwYXJhbXMudGlsZUlELm92ZXJzY2FsZWRaLCBwYXJhbXMudGlsZUlELndyYXAsIHBhcmFtcy50aWxlSUQuY2Fub25pY2FsLnosIHBhcmFtcy50aWxlSUQuY2Fub25pY2FsLngsIHBhcmFtcy50aWxlSUQuY2Fub25pY2FsLnkpO1xuICAgICAgICB0aGlzLnVpZCA9IHBhcmFtcy51aWQ7XG4gICAgICAgIHRoaXMuem9vbSA9IHBhcmFtcy56b29tO1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW8gPSBwYXJhbXMucGl4ZWxSYXRpbztcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IHBhcmFtcy50aWxlU2l6ZTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBwYXJhbXMuc291cmNlO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gdGhpcy50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCk7XG4gICAgICAgIHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzID0gcGFyYW1zLnNob3dDb2xsaXNpb25Cb3hlcztcbiAgICAgICAgdGhpcy5jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSAhIXBhcmFtcy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG4gICAgICAgIHRoaXMucmV0dXJuRGVwZW5kZW5jaWVzID0gISFwYXJhbXMucmV0dXJuRGVwZW5kZW5jaWVzO1xuICAgIH1cblxuICAgIHBhcnNlKGRhdGE6IFZlY3RvclRpbGUsIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LCBhY3RvcjogQWN0b3IsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAncGFyc2luZyc7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Cb3hBcnJheSA9IG5ldyBDb2xsaXNpb25Cb3hBcnJheSgpO1xuICAgICAgICBjb25zdCBzb3VyY2VMYXllckNvZGVyID0gbmV3IERpY3Rpb25hcnlDb2RlcihPYmplY3Qua2V5cyhkYXRhLmxheWVycykuc29ydCgpKTtcblxuICAgICAgICBjb25zdCBmZWF0dXJlSW5kZXggPSBuZXcgRmVhdHVyZUluZGV4KHRoaXMudGlsZUlEKTtcbiAgICAgICAgZmVhdHVyZUluZGV4LmJ1Y2tldExheWVySURzID0gW107XG5cbiAgICAgICAgY29uc3QgYnVja2V0czoge1tzdHJpbmddOiBCdWNrZXR9ID0ge307XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgIGljb25EZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgICAgICAgcGF0dGVybkRlcGVuZGVuY2llczoge30sXG4gICAgICAgICAgICBnbHlwaERlcGVuZGVuY2llczoge30sXG4gICAgICAgICAgICBhdmFpbGFibGVJbWFnZXNcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBsYXllckZhbWlsaWVzID0gbGF5ZXJJbmRleC5mYW1pbGllc0J5U291cmNlW3RoaXMuc291cmNlXTtcbiAgICAgICAgZm9yIChjb25zdCBzb3VyY2VMYXllcklkIGluIGxheWVyRmFtaWxpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gZGF0YS5sYXllcnNbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZUxheWVyKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2VMYXllci52ZXJzaW9uID09PSAxKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoYFZlY3RvciB0aWxlIHNvdXJjZSBcIiR7dGhpcy5zb3VyY2V9XCIgbGF5ZXIgXCIke3NvdXJjZUxheWVySWR9XCIgYCArXG4gICAgICAgICAgICAgICAgICAgIGBkb2VzIG5vdCB1c2UgdmVjdG9yIHRpbGUgc3BlYyB2MiBhbmQgdGhlcmVmb3JlIG1heSBoYXZlIHNvbWUgcmVuZGVyaW5nIGVycm9ycy5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJJbmRleCA9IHNvdXJjZUxheWVyQ29kZXIuZW5jb2RlKHNvdXJjZUxheWVySWQpO1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzb3VyY2VMYXllci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gc291cmNlTGF5ZXIuZmVhdHVyZShpbmRleCk7XG4gICAgICAgICAgICAgICAgZmVhdHVyZXMucHVzaCh7ZmVhdHVyZSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBmYW1pbHkgb2YgbGF5ZXJGYW1pbGllc1tzb3VyY2VMYXllcklkXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gZmFtaWx5WzBdO1xuXG4gICAgICAgICAgICAgICAgYXNzZXJ0KGxheWVyLnNvdXJjZSA9PT0gdGhpcy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci5taW56b29tICYmIHRoaXMuem9vbSA8IE1hdGguZmxvb3IobGF5ZXIubWluem9vbSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci5tYXh6b29tICYmIHRoaXMuem9vbSA+PSBsYXllci5tYXh6b29tKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAobGF5ZXIudmlzaWJpbGl0eSA9PT0gJ25vbmUnKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlTGF5ZXJzKGZhbWlseSwgdGhpcy56b29tLCBhdmFpbGFibGVJbWFnZXMpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gYnVja2V0c1tsYXllci5pZF0gPSBsYXllci5jcmVhdGVCdWNrZXQoe1xuICAgICAgICAgICAgICAgICAgICBpbmRleDogZmVhdHVyZUluZGV4LmJ1Y2tldExheWVySURzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBmYW1pbHksXG4gICAgICAgICAgICAgICAgICAgIHpvb206IHRoaXMuem9vbSxcbiAgICAgICAgICAgICAgICAgICAgcGl4ZWxSYXRpbzogdGhpcy5waXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgICAgICBvdmVyc2NhbGluZzogdGhpcy5vdmVyc2NhbGluZyxcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXk6IHRoaXMuY29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlEOiB0aGlzLnNvdXJjZVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgYnVja2V0LnBvcHVsYXRlKGZlYXR1cmVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXguYnVja2V0TGF5ZXJJRHMucHVzaChmYW1pbHkubWFwKChsKSA9PiBsLmlkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3I6ID9FcnJvcjtcbiAgICAgICAgbGV0IGdseXBoTWFwOiA/e1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX07XG4gICAgICAgIGxldCBpY29uTWFwOiA/e1tzdHJpbmddOiBTdHlsZUltYWdlfTtcbiAgICAgICAgbGV0IHBhdHRlcm5NYXA6ID97W3N0cmluZ106IFN0eWxlSW1hZ2V9O1xuXG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IG1hcE9iamVjdChvcHRpb25zLmdseXBoRGVwZW5kZW5jaWVzLCAoZ2x5cGhzKSA9PiBPYmplY3Qua2V5cyhnbHlwaHMpLm1hcChOdW1iZXIpKTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHN0YWNrcykubGVuZ3RoKSB7XG4gICAgICAgICAgICBhY3Rvci5zZW5kKCdnZXRHbHlwaHMnLCB7dWlkOiB0aGlzLnVpZCwgc3RhY2tzfSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXAgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIG1heWJlUHJlcGFyZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2x5cGhNYXAgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGljb25zID0gT2JqZWN0LmtleXMob3B0aW9ucy5pY29uRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgaWYgKGljb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWN0b3Iuc2VuZCgnZ2V0SW1hZ2VzJywge2ljb25zfSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgaWNvbk1hcCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgbWF5YmVQcmVwYXJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpY29uTWFwID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IE9iamVjdC5rZXlzKG9wdGlvbnMucGF0dGVybkRlcGVuZGVuY2llcyk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFjdG9yLnNlbmQoJ2dldEltYWdlcycsIHtpY29uczogcGF0dGVybnN9LCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuTWFwID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBtYXliZVByZXBhcmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdHRlcm5NYXAgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1heWJlUHJlcGFyZS5jYWxsKHRoaXMpO1xuXG4gICAgICAgIGZ1bmN0aW9uIG1heWJlUHJlcGFyZSgpIHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdseXBoTWFwICYmIGljb25NYXAgJiYgcGF0dGVybk1hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdseXBoQXRsYXMgPSBuZXcgR2x5cGhBdGxhcyhnbHlwaE1hcCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VBdGxhcyA9IG5ldyBJbWFnZUF0bGFzKGljb25NYXAsIHBhdHRlcm5NYXApO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYnVja2V0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWNrZXQgPSBidWNrZXRzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQgaW5zdGFuY2VvZiBTeW1ib2xCdWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlTGF5ZXJzKGJ1Y2tldC5sYXllcnMsIHRoaXMuem9vbSwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1TeW1ib2xMYXlvdXQoYnVja2V0LCBnbHlwaE1hcCwgZ2x5cGhBdGxhcy5wb3NpdGlvbnMsIGljb25NYXAsIGltYWdlQXRsYXMuaWNvblBvc2l0aW9ucywgdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1Y2tldC5oYXNQYXR0ZXJuICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnVja2V0IGluc3RhbmNlb2YgTGluZUJ1Y2tldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldCBpbnN0YW5jZW9mIEZpbGxCdWNrZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQgaW5zdGFuY2VvZiBGaWxsRXh0cnVzaW9uQnVja2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVMYXllcnMoYnVja2V0LmxheWVycywgdGhpcy56b29tLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmFkZEZlYXR1cmVzKG9wdGlvbnMsIGltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldHM6IHZhbHVlcyhidWNrZXRzKS5maWx0ZXIoYiA9PiAhYi5pc0VtcHR5KCkpLFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5OiB0aGlzLmNvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgICAgICBnbHlwaEF0bGFzSW1hZ2U6IGdseXBoQXRsYXMuaW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgIGltYWdlQXRsYXMsXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNlZCBmb3IgYmVuY2htYXJraW5nOlxuICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDogdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXMgPyBnbHlwaE1hcCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGljb25NYXA6IHRoaXMucmV0dXJuRGVwZW5kZW5jaWVzID8gaWNvbk1hcCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGdseXBoUG9zaXRpb25zOiB0aGlzLnJldHVybkRlcGVuZGVuY2llcyA/IGdseXBoQXRsYXMucG9zaXRpb25zIDogbnVsbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWNhbGN1bGF0ZUxheWVycyhsYXllcnM6ICRSZWFkT25seUFycmF5PFN0eWxlTGF5ZXI+LCB6b29tOiBudW1iZXIsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPikge1xuICAgIC8vIExheWVycyBhcmUgc2hhcmVkIGFuZCBtYXkgaGF2ZSBiZWVuIHVzZWQgYnkgYSBXb3JrZXJUaWxlIHdpdGggYSBkaWZmZXJlbnQgem9vbS5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHpvb20pO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGxheWVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXb3JrZXJUaWxlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge1JlcXVlc3RQYXJhbWV0ZXJzfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuXG4vLyBXcmFwcyBwZXJmb3JtYW5jZSB0byBmYWNpbGl0YXRlIHRlc3Rpbmdcbi8vIE5vdCBpbmNvcnBvcmF0ZWQgaW50byBicm93c2VyLmpzIGJlY2F1c2UgdGhlIGxhdHRlciBpcyBwb2lzb25vdXMgd2hlbiB1c2VkIG91dHNpZGUgdGhlIG1haW4gdGhyZWFkXG5jb25zdCBwZXJmb3JtYW5jZUV4aXN0cyA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCc7XG5jb25zdCB3cmFwcGVyID0ge307XG5cbndyYXBwZXIuZ2V0RW50cmllc0J5TmFtZSA9ICh1cmw6IHN0cmluZykgPT4ge1xuICAgIGlmIChwZXJmb3JtYW5jZUV4aXN0cyAmJiBwZXJmb3JtYW5jZSAmJiBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKVxuICAgICAgICByZXR1cm4gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSh1cmwpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xufTtcblxud3JhcHBlci5tYXJrID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmIChwZXJmb3JtYW5jZUV4aXN0cyAmJiBwZXJmb3JtYW5jZSAmJiBwZXJmb3JtYW5jZS5tYXJrKVxuICAgICAgICByZXR1cm4gcGVyZm9ybWFuY2UubWFyayhuYW1lKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbn07XG5cbndyYXBwZXIubWVhc3VyZSA9IChuYW1lOiBzdHJpbmcsIHN0YXJ0TWFyazogc3RyaW5nLCBlbmRNYXJrOiBzdHJpbmcpID0+IHtcbiAgICBpZiAocGVyZm9ybWFuY2VFeGlzdHMgJiYgcGVyZm9ybWFuY2UgJiYgcGVyZm9ybWFuY2UubWVhc3VyZSlcbiAgICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLm1lYXN1cmUobmFtZSwgc3RhcnRNYXJrLCBlbmRNYXJrKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbn07XG5cbndyYXBwZXIuY2xlYXJNYXJrcyA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAocGVyZm9ybWFuY2VFeGlzdHMgJiYgcGVyZm9ybWFuY2UgJiYgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcylcbiAgICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLmNsZWFyTWFya3MobmFtZSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG59O1xuXG53cmFwcGVyLmNsZWFyTWVhc3VyZXMgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKHBlcmZvcm1hbmNlRXhpc3RzICYmIHBlcmZvcm1hbmNlICYmIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMpXG4gICAgICAgIHJldHVybiBwZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzKG5hbWUpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBTYWZlIHdyYXBwZXIgZm9yIHRoZSBwZXJmb3JtYW5jZSByZXNvdXJjZSB0aW1pbmcgQVBJIGluIHdlYiB3b3JrZXJzIHdpdGggZ3JhY2VmdWwgZGVncmFkYXRpb25cbiAqXG4gKiBAcGFyYW0ge1JlcXVlc3RQYXJhbWV0ZXJzfSByZXF1ZXN0XG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBQZXJmb3JtYW5jZSB7XG4gICAgX21hcmtzOiB7c3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcsIG1lYXN1cmU6IHN0cmluZ307XG5cbiAgICBjb25zdHJ1Y3RvciAocmVxdWVzdDogUmVxdWVzdFBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fbWFya3MgPSB7XG4gICAgICAgICAgICBzdGFydDogW3JlcXVlc3QudXJsLCAnc3RhcnQnXS5qb2luKCcjJyksXG4gICAgICAgICAgICBlbmQ6IFtyZXF1ZXN0LnVybCwgJ2VuZCddLmpvaW4oJyMnKSxcbiAgICAgICAgICAgIG1lYXN1cmU6IHJlcXVlc3QudXJsLnRvU3RyaW5nKClcbiAgICAgICAgfTtcblxuICAgICAgICB3cmFwcGVyLm1hcmsodGhpcy5fbWFya3Muc3RhcnQpO1xuICAgIH1cblxuICAgIGZpbmlzaCgpIHtcbiAgICAgICAgd3JhcHBlci5tYXJrKHRoaXMuX21hcmtzLmVuZCk7XG4gICAgICAgIGxldCByZXNvdXJjZVRpbWluZ0RhdGEgPSB3cmFwcGVyLmdldEVudHJpZXNCeU5hbWUodGhpcy5fbWFya3MubWVhc3VyZSk7XG5cbiAgICAgICAgLy8gZmFsbGJhY2sgaWYgd2ViIHdvcmtlciBpbXBsZW1lbnRhdGlvbiBvZiBwZXJmLmdldEVudHJpZXNCeU5hbWUgcmV0dXJucyBlbXB0eVxuICAgICAgICBpZiAocmVzb3VyY2VUaW1pbmdEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgd3JhcHBlci5tZWFzdXJlKHRoaXMuX21hcmtzLm1lYXN1cmUsIHRoaXMuX21hcmtzLnN0YXJ0LCB0aGlzLl9tYXJrcy5lbmQpO1xuICAgICAgICAgICAgcmVzb3VyY2VUaW1pbmdEYXRhID0gd3JhcHBlci5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuX21hcmtzLm1lYXN1cmUpO1xuXG4gICAgICAgICAgICAvLyBjbGVhbnVwXG4gICAgICAgICAgICB3cmFwcGVyLmNsZWFyTWFya3ModGhpcy5fbWFya3Muc3RhcnQpO1xuICAgICAgICAgICAgd3JhcHBlci5jbGVhck1hcmtzKHRoaXMuX21hcmtzLmVuZCk7XG4gICAgICAgICAgICB3cmFwcGVyLmNsZWFyTWVhc3VyZXModGhpcy5fbWFya3MubWVhc3VyZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzb3VyY2VUaW1pbmdEYXRhO1xuICAgIH1cbn1cblxud3JhcHBlci5QZXJmb3JtYW5jZSA9IFBlcmZvcm1hbmNlO1xuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtnZXRBcnJheUJ1ZmZlcn0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IHZ0IGZyb20gJ0BtYXBib3gvdmVjdG9yLXRpbGUnO1xuaW1wb3J0IFByb3RvYnVmIGZyb20gJ3BiZic7XG5pbXBvcnQgV29ya2VyVGlsZSBmcm9tICcuL3dvcmtlcl90aWxlJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHBlcmZvcm1hbmNlIGZyb20gJy4uL3V0aWwvcGVyZm9ybWFuY2UnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgV29ya2VyU291cmNlLFxuICAgIFdvcmtlclRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlclRpbGVDYWxsYmFjayxcbiAgICBUaWxlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9zb3VyY2Uvd29ya2VyX3NvdXJjZSc7XG5cbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllckluZGV4IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyX2luZGV4JztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuXG5leHBvcnQgdHlwZSBMb2FkVmVjdG9yVGlsZVJlc3VsdCA9IHtcbiAgICB2ZWN0b3JUaWxlOiBWZWN0b3JUaWxlO1xuICAgIHJhd0RhdGE6IEFycmF5QnVmZmVyO1xuICAgIGV4cGlyZXM/OiBhbnk7XG4gICAgY2FjaGVDb250cm9sPzogYW55O1xuICAgIHJlc291cmNlVGltaW5nPzogQXJyYXk8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZz47XG59O1xuXG4vKipcbiAqIEBjYWxsYmFjayBMb2FkVmVjdG9yRGF0YUNhbGxiYWNrXG4gKiBAcGFyYW0gZXJyb3JcbiAqIEBwYXJhbSB2ZWN0b3JUaWxlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgdHlwZSBMb2FkVmVjdG9yRGF0YUNhbGxiYWNrID0gQ2FsbGJhY2s8P0xvYWRWZWN0b3JUaWxlUmVzdWx0PjtcblxuZXhwb3J0IHR5cGUgQWJvcnRWZWN0b3JEYXRhID0gKCkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIExvYWRWZWN0b3JEYXRhID0gKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBMb2FkVmVjdG9yRGF0YUNhbGxiYWNrKSA9PiA/QWJvcnRWZWN0b3JEYXRhO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWRWZWN0b3JUaWxlKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBMb2FkVmVjdG9yRGF0YUNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGdldEFycmF5QnVmZmVyKHBhcmFtcy5yZXF1ZXN0LCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9BcnJheUJ1ZmZlciwgY2FjaGVDb250cm9sOiA/c3RyaW5nLCBleHBpcmVzOiA/c3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge1xuICAgICAgICAgICAgICAgIHZlY3RvclRpbGU6IG5ldyB2dC5WZWN0b3JUaWxlKG5ldyBQcm90b2J1ZihkYXRhKSksXG4gICAgICAgICAgICAgICAgcmF3RGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBjYWNoZUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgZXhwaXJlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH07XG59XG5cbi8qKlxuICogVGhlIHtAbGluayBXb3JrZXJTb3VyY2V9IGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHMge0BsaW5rIFZlY3RvclRpbGVTb3VyY2V9LlxuICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBiZSBlYXNpbHkgcmV1c2VkIHRvIHN1cHBvcnQgY3VzdG9tIHNvdXJjZSB0eXBlc1xuICogZm9yIGRhdGEgZm9ybWF0cyB0aGF0IGNhbiBiZSBwYXJzZWQvY29udmVydGVkIGludG8gYW4gaW4tbWVtb3J5IFZlY3RvclRpbGVcbiAqIHJlcHJlc2VudGF0aW9uLiAgVG8gZG8gc28sIGNyZWF0ZSBpdCB3aXRoXG4gKiBgbmV3IFZlY3RvclRpbGVXb3JrZXJTb3VyY2UoYWN0b3IsIHN0eWxlTGF5ZXJzLCBjdXN0b21Mb2FkVmVjdG9yRGF0YUZ1bmN0aW9uKWAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSBpbXBsZW1lbnRzIFdvcmtlclNvdXJjZSB7XG4gICAgYWN0b3I6IEFjdG9yO1xuICAgIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleDtcbiAgICBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz47XG4gICAgbG9hZFZlY3RvckRhdGE6IExvYWRWZWN0b3JEYXRhO1xuICAgIGxvYWRpbmc6IHsgW3N0cmluZ106IFdvcmtlclRpbGUgfTtcbiAgICBsb2FkZWQ6IHsgW3N0cmluZ106IFdvcmtlclRpbGUgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBbbG9hZFZlY3RvckRhdGFdIE9wdGlvbmFsIG1ldGhvZCBmb3IgY3VzdG9tIGxvYWRpbmcgb2YgYSBWZWN0b3JUaWxlXG4gICAgICogb2JqZWN0IGJhc2VkIG9uIHBhcmFtZXRlcnMgcGFzc2VkIGZyb20gdGhlIG1haW4tdGhyZWFkIFNvdXJjZS4gU2VlXG4gICAgICoge0BsaW5rIFZlY3RvclRpbGVXb3JrZXJTb3VyY2UjbG9hZFRpbGV9LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHlcbiAgICAgKiBsb2FkcyB0aGUgcGJmIGF0IGBwYXJhbXMudXJsYC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY3RvcjogQWN0b3IsIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LCBsb2FkVmVjdG9yRGF0YTogP0xvYWRWZWN0b3JEYXRhKSB7XG4gICAgICAgIHRoaXMuYWN0b3IgPSBhY3RvcjtcbiAgICAgICAgdGhpcy5sYXllckluZGV4ID0gbGF5ZXJJbmRleDtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJbWFnZXMgPSBhdmFpbGFibGVJbWFnZXM7XG4gICAgICAgIHRoaXMubG9hZFZlY3RvckRhdGEgPSBsb2FkVmVjdG9yRGF0YSB8fCBsb2FkVmVjdG9yVGlsZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0ge307XG4gICAgICAgIHRoaXMubG9hZGVkID0ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyB7QGxpbmsgV29ya2VyU291cmNlI2xvYWRUaWxlfS4gRGVsZWdhdGVzIHRvXG4gICAgICoge0BsaW5rIFZlY3RvclRpbGVXb3JrZXJTb3VyY2UjbG9hZFZlY3RvckRhdGF9ICh3aGljaCBieSBkZWZhdWx0IGV4cGVjdHNcbiAgICAgKiBhIGBwYXJhbXMudXJsYCBwcm9wZXJ0eSkgZm9yIGZldGNoaW5nIGFuZCBwcm9kdWNpbmcgYSBWZWN0b3JUaWxlIG9iamVjdC5cbiAgICAgKi9cbiAgICBsb2FkVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHVpZCA9IHBhcmFtcy51aWQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB7fTtcblxuICAgICAgICBjb25zdCBwZXJmID0gKHBhcmFtcyAmJiBwYXJhbXMucmVxdWVzdCAmJiBwYXJhbXMucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpID9cbiAgICAgICAgICAgIG5ldyBwZXJmb3JtYW5jZS5QZXJmb3JtYW5jZShwYXJhbXMucmVxdWVzdCkgOiBmYWxzZTtcblxuICAgICAgICBjb25zdCB3b3JrZXJUaWxlID0gdGhpcy5sb2FkaW5nW3VpZF0gPSBuZXcgV29ya2VyVGlsZShwYXJhbXMpO1xuICAgICAgICB3b3JrZXJUaWxlLmFib3J0ID0gdGhpcy5sb2FkVmVjdG9yRGF0YShwYXJhbXMsIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5sb2FkaW5nW3VpZF07XG5cbiAgICAgICAgICAgIGlmIChlcnIgfHwgIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgd29ya2VyVGlsZS5zdGF0dXMgPSAnZG9uZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRbdWlkXSA9IHdvcmtlclRpbGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJhd1RpbGVEYXRhID0gcmVzcG9uc2UucmF3RGF0YTtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlQ29udHJvbCA9IHt9O1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmV4cGlyZXMpIGNhY2hlQ29udHJvbC5leHBpcmVzID0gcmVzcG9uc2UuZXhwaXJlcztcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5jYWNoZUNvbnRyb2wpIGNhY2hlQ29udHJvbC5jYWNoZUNvbnRyb2wgPSByZXNwb25zZS5jYWNoZUNvbnRyb2w7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc291cmNlVGltaW5nID0ge307XG4gICAgICAgICAgICBpZiAocGVyZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlVGltaW5nRGF0YSA9IHBlcmYuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgLy8gaXQncyBuZWNlc3NhcnkgdG8gZXZhbCB0aGUgcmVzdWx0IG9mIGdldEVudHJpZXNCeU5hbWUoKSBoZXJlIHZpYSBwYXJzZS9zdHJpbmdpZnlcbiAgICAgICAgICAgICAgICAvLyBsYXRlIGV2YWx1YXRpb24gaW4gdGhlIG1haW4gdGhyZWFkIGNhdXNlcyBUeXBlRXJyb3I6IGlsbGVnYWwgaW52b2NhdGlvblxuICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZVRpbWluZ0RhdGEpXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlVGltaW5nLnJlc291cmNlVGltaW5nID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXNvdXJjZVRpbWluZ0RhdGEpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd29ya2VyVGlsZS52ZWN0b3JUaWxlID0gcmVzcG9uc2UudmVjdG9yVGlsZTtcbiAgICAgICAgICAgIHdvcmtlclRpbGUucGFyc2UocmVzcG9uc2UudmVjdG9yVGlsZSwgdGhpcy5sYXllckluZGV4LCB0aGlzLmF2YWlsYWJsZUltYWdlcywgdGhpcy5hY3RvciwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVyciB8fCAhcmVzdWx0KSByZXR1cm4gY2FsbGJhY2soZXJyKTtcblxuICAgICAgICAgICAgICAgIC8vIFRyYW5zZmVycmluZyBhIGNvcHkgb2YgcmF3VGlsZURhdGEgYmVjYXVzZSB0aGUgd29ya2VyIG5lZWRzIHRvIHJldGFpbiBpdHMgY29weS5cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBleHRlbmQoe3Jhd1RpbGVEYXRhOiByYXdUaWxlRGF0YS5zbGljZSgwKX0sIHJlc3VsdCwgY2FjaGVDb250cm9sLCByZXNvdXJjZVRpbWluZykpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gdGhpcy5sb2FkZWQgfHwge307XG4gICAgICAgICAgICB0aGlzLmxvYWRlZFt1aWRdID0gd29ya2VyVGlsZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyB7QGxpbmsgV29ya2VyU291cmNlI3JlbG9hZFRpbGV9LlxuICAgICAqL1xuICAgIHJlbG9hZFRpbGUocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLmxvYWRlZCxcbiAgICAgICAgICAgIHVpZCA9IHBhcmFtcy51aWQsXG4gICAgICAgICAgICB2dFNvdXJjZSA9IHRoaXM7XG4gICAgICAgIGlmIChsb2FkZWQgJiYgbG9hZGVkW3VpZF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlclRpbGUgPSBsb2FkZWRbdWlkXTtcbiAgICAgICAgICAgIHdvcmtlclRpbGUuc2hvd0NvbGxpc2lvbkJveGVzID0gcGFyYW1zLnNob3dDb2xsaXNpb25Cb3hlcztcblxuICAgICAgICAgICAgY29uc3QgZG9uZSA9IChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWxvYWRDYWxsYmFjayA9IHdvcmtlclRpbGUucmVsb2FkQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgaWYgKHJlbG9hZENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3b3JrZXJUaWxlLnJlbG9hZENhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICB3b3JrZXJUaWxlLnBhcnNlKHdvcmtlclRpbGUudmVjdG9yVGlsZSwgdnRTb3VyY2UubGF5ZXJJbmRleCwgdGhpcy5hdmFpbGFibGVJbWFnZXMsIHZ0U291cmNlLmFjdG9yLCByZWxvYWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAod29ya2VyVGlsZS5zdGF0dXMgPT09ICdwYXJzaW5nJykge1xuICAgICAgICAgICAgICAgIHdvcmtlclRpbGUucmVsb2FkQ2FsbGJhY2sgPSBkb25lO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3b3JrZXJUaWxlLnN0YXR1cyA9PT0gJ2RvbmUnKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vIHZlY3RvciB0aWxlIGRhdGEgb24gdGhlIGluaXRpYWwgbG9hZCwgZG9uJ3QgdHJ5IGFuZCByZS1wYXJzZSB0aWxlXG4gICAgICAgICAgICAgICAgaWYgKHdvcmtlclRpbGUudmVjdG9yVGlsZSkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrZXJUaWxlLnBhcnNlKHdvcmtlclRpbGUudmVjdG9yVGlsZSwgdGhpcy5sYXllckluZGV4LCB0aGlzLmF2YWlsYWJsZUltYWdlcywgdGhpcy5hY3RvciwgZG9uZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMge0BsaW5rIFdvcmtlclNvdXJjZSNhYm9ydFRpbGV9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwYXJhbSBwYXJhbXMudWlkIFRoZSBVSUQgZm9yIHRoaXMgdGlsZS5cbiAgICAgKi9cbiAgICBhYm9ydFRpbGUocGFyYW1zOiBUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy5sb2FkaW5nLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZDtcbiAgICAgICAgaWYgKGxvYWRpbmcgJiYgbG9hZGluZ1t1aWRdICYmIGxvYWRpbmdbdWlkXS5hYm9ydCkge1xuICAgICAgICAgICAgbG9hZGluZ1t1aWRdLmFib3J0KCk7XG4gICAgICAgICAgICBkZWxldGUgbG9hZGluZ1t1aWRdO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyB7QGxpbmsgV29ya2VyU291cmNlI3JlbW92ZVRpbGV9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwYXJhbSBwYXJhbXMudWlkIFRoZSBVSUQgZm9yIHRoaXMgdGlsZS5cbiAgICAgKi9cbiAgICByZW1vdmVUaWxlKHBhcmFtczogVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkO1xuICAgICAgICBpZiAobG9hZGVkICYmIGxvYWRlZFt1aWRdKSB7XG4gICAgICAgICAgICBkZWxldGUgbG9hZGVkW3VpZF07XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZlY3RvclRpbGVXb3JrZXJTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgREVNRGF0YSBmcm9tICcuLi9kYXRhL2RlbV9kYXRhJztcblxuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSB7XG4gICAgV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyREVNVGlsZUNhbGxiYWNrLFxuICAgIFRpbGVQYXJhbWV0ZXJzXG59IGZyb20gJy4vd29ya2VyX3NvdXJjZSc7XG5cbmNsYXNzIFJhc3RlckRFTVRpbGVXb3JrZXJTb3VyY2Uge1xuICAgIGFjdG9yOiBBY3RvcjtcbiAgICBsb2FkZWQ6IHtbc3RyaW5nXTogREVNRGF0YX07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB7fTtcbiAgICB9XG5cbiAgICBsb2FkVGlsZShwYXJhbXM6IFdvcmtlckRFTVRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyREVNVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHt1aWQsIGVuY29kaW5nLCByYXdJbWFnZURhdGF9ID0gcGFyYW1zO1xuICAgICAgICBjb25zdCBkZW0gPSBuZXcgREVNRGF0YSh1aWQsIHJhd0ltYWdlRGF0YSwgZW5jb2RpbmcpO1xuXG4gICAgICAgIHRoaXMubG9hZGVkID0gdGhpcy5sb2FkZWQgfHwge307XG4gICAgICAgIHRoaXMubG9hZGVkW3VpZF0gPSBkZW07XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGRlbSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGlsZShwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMubG9hZGVkLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZDtcbiAgICAgICAgaWYgKGxvYWRlZCAmJiBsb2FkZWRbdWlkXSkge1xuICAgICAgICAgICAgZGVsZXRlIGxvYWRlZFt1aWRdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSYXN0ZXJERU1UaWxlV29ya2VyU291cmNlO1xuIiwibW9kdWxlLmV4cG9ydHMuUkFESVVTID0gNjM3ODEzNztcbm1vZHVsZS5leHBvcnRzLkZMQVRURU5JTkcgPSAxLzI5OC4yNTcyMjM1NjM7XG5tb2R1bGUuZXhwb3J0cy5QT0xBUl9SQURJVVMgPSA2MzU2NzUyLjMxNDI7XG4iLCJ2YXIgd2dzODQgPSByZXF1aXJlKCd3Z3M4NCcpO1xuXG5tb2R1bGUuZXhwb3J0cy5nZW9tZXRyeSA9IGdlb21ldHJ5O1xubW9kdWxlLmV4cG9ydHMucmluZyA9IHJpbmdBcmVhO1xuXG5mdW5jdGlvbiBnZW9tZXRyeShfKSB7XG4gICAgdmFyIGFyZWEgPSAwLCBpO1xuICAgIHN3aXRjaCAoXy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgcmV0dXJuIHBvbHlnb25BcmVhKF8uY29vcmRpbmF0ZXMpO1xuICAgICAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IF8uY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcmVhICs9IHBvbHlnb25BcmVhKF8uY29vcmRpbmF0ZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZWE7XG4gICAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgXy5nZW9tZXRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJlYSArPSBnZW9tZXRyeShfLmdlb21ldHJpZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZWE7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwb2x5Z29uQXJlYShjb29yZHMpIHtcbiAgICB2YXIgYXJlYSA9IDA7XG4gICAgaWYgKGNvb3JkcyAmJiBjb29yZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBhcmVhICs9IE1hdGguYWJzKHJpbmdBcmVhKGNvb3Jkc1swXSkpO1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJlYSAtPSBNYXRoLmFicyhyaW5nQXJlYShjb29yZHNbaV0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJlYTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIGFyZWEgb2YgdGhlIHBvbHlnb24gd2VyZSBpdCBwcm9qZWN0ZWQgb250b1xuICogICAgIHRoZSBlYXJ0aC4gIE5vdGUgdGhhdCB0aGlzIGFyZWEgd2lsbCBiZSBwb3NpdGl2ZSBpZiByaW5nIGlzIG9yaWVudGVkXG4gKiAgICAgY2xvY2t3aXNlLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBuZWdhdGl2ZS5cbiAqXG4gKiBSZWZlcmVuY2U6XG4gKiBSb2JlcnQuIEcuIENoYW1iZXJsYWluIGFuZCBXaWxsaWFtIEguIER1cXVldHRlLCBcIlNvbWUgQWxnb3JpdGhtcyBmb3JcbiAqICAgICBQb2x5Z29ucyBvbiBhIFNwaGVyZVwiLCBKUEwgUHVibGljYXRpb24gMDctMDMsIEpldCBQcm9wdWxzaW9uXG4gKiAgICAgTGFib3JhdG9yeSwgUGFzYWRlbmEsIENBLCBKdW5lIDIwMDcgaHR0cDovL3Rycy1uZXcuanBsLm5hc2EuZ292L2RzcGFjZS9oYW5kbGUvMjAxNC80MDQwOVxuICpcbiAqIFJldHVybnM6XG4gKiB7ZmxvYXR9IFRoZSBhcHByb3hpbWF0ZSBzaWduZWQgZ2VvZGVzaWMgYXJlYSBvZiB0aGUgcG9seWdvbiBpbiBzcXVhcmVcbiAqICAgICBtZXRlcnMuXG4gKi9cblxuZnVuY3Rpb24gcmluZ0FyZWEoY29vcmRzKSB7XG4gICAgdmFyIHAxLCBwMiwgcDMsIGxvd2VySW5kZXgsIG1pZGRsZUluZGV4LCB1cHBlckluZGV4LCBpLFxuICAgIGFyZWEgPSAwLFxuICAgIGNvb3Jkc0xlbmd0aCA9IGNvb3Jkcy5sZW5ndGg7XG5cbiAgICBpZiAoY29vcmRzTGVuZ3RoID4gMikge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID09PSBjb29yZHNMZW5ndGggLSAyKSB7Ly8gaSA9IE4tMlxuICAgICAgICAgICAgICAgIGxvd2VySW5kZXggPSBjb29yZHNMZW5ndGggLSAyO1xuICAgICAgICAgICAgICAgIG1pZGRsZUluZGV4ID0gY29vcmRzTGVuZ3RoIC0xO1xuICAgICAgICAgICAgICAgIHVwcGVySW5kZXggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSBjb29yZHNMZW5ndGggLSAxKSB7Ly8gaSA9IE4tMVxuICAgICAgICAgICAgICAgIGxvd2VySW5kZXggPSBjb29yZHNMZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIG1pZGRsZUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB1cHBlckluZGV4ID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIGkgPSAwIHRvIE4tM1xuICAgICAgICAgICAgICAgIGxvd2VySW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIG1pZGRsZUluZGV4ID0gaSsxO1xuICAgICAgICAgICAgICAgIHVwcGVySW5kZXggPSBpKzI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwMSA9IGNvb3Jkc1tsb3dlckluZGV4XTtcbiAgICAgICAgICAgIHAyID0gY29vcmRzW21pZGRsZUluZGV4XTtcbiAgICAgICAgICAgIHAzID0gY29vcmRzW3VwcGVySW5kZXhdO1xuICAgICAgICAgICAgYXJlYSArPSAoIHJhZChwM1swXSkgLSByYWQocDFbMF0pICkgKiBNYXRoLnNpbiggcmFkKHAyWzFdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhcmVhID0gYXJlYSAqIHdnczg0LlJBRElVUyAqIHdnczg0LlJBRElVUyAvIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZWE7XG59XG5cbmZ1bmN0aW9uIHJhZChfKSB7XG4gICAgcmV0dXJuIF8gKiBNYXRoLlBJIC8gMTgwO1xufSIsInZhciBnZW9qc29uQXJlYSA9IHJlcXVpcmUoJ0BtYXBib3gvZ2VvanNvbi1hcmVhJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmV3aW5kO1xuXG5mdW5jdGlvbiByZXdpbmQoZ2osIG91dGVyKSB7XG4gICAgc3dpdGNoICgoZ2ogJiYgZ2oudHlwZSkgfHwgbnVsbCkge1xuICAgICAgICBjYXNlICdGZWF0dXJlQ29sbGVjdGlvbic6XG4gICAgICAgICAgICBnai5mZWF0dXJlcyA9IGdqLmZlYXR1cmVzLm1hcChjdXJyeU91dGVyKHJld2luZCwgb3V0ZXIpKTtcbiAgICAgICAgICAgIHJldHVybiBnajtcbiAgICAgICAgY2FzZSAnR2VvbWV0cnlDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIGdqLmdlb21ldHJpZXMgPSBnai5nZW9tZXRyaWVzLm1hcChjdXJyeU91dGVyKHJld2luZCwgb3V0ZXIpKTtcbiAgICAgICAgICAgIHJldHVybiBnajtcbiAgICAgICAgY2FzZSAnRmVhdHVyZSc6XG4gICAgICAgICAgICBnai5nZW9tZXRyeSA9IHJld2luZChnai5nZW9tZXRyeSwgb3V0ZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGdqO1xuICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgICAgIHJldHVybiBjb3JyZWN0KGdqLCBvdXRlcik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZ2o7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjdXJyeU91dGVyKGEsIGIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oXykgeyByZXR1cm4gYShfLCBiKTsgfTtcbn1cblxuZnVuY3Rpb24gY29ycmVjdChfLCBvdXRlcikge1xuICAgIGlmIChfLnR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICBfLmNvb3JkaW5hdGVzID0gY29ycmVjdFJpbmdzKF8uY29vcmRpbmF0ZXMsIG91dGVyKTtcbiAgICB9IGVsc2UgaWYgKF8udHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgXy5jb29yZGluYXRlcyA9IF8uY29vcmRpbmF0ZXMubWFwKGN1cnJ5T3V0ZXIoY29ycmVjdFJpbmdzLCBvdXRlcikpO1xuICAgIH1cbiAgICByZXR1cm4gXztcbn1cblxuZnVuY3Rpb24gY29ycmVjdFJpbmdzKF8sIG91dGVyKSB7XG4gICAgb3V0ZXIgPSAhIW91dGVyO1xuICAgIF9bMF0gPSB3aW5kKF9bMF0sIG91dGVyKTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IF8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgX1tpXSA9IHdpbmQoX1tpXSwgIW91dGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIF87XG59XG5cbmZ1bmN0aW9uIHdpbmQoXywgZGlyKSB7XG4gICAgcmV0dXJuIGN3KF8pID09PSBkaXIgPyBfIDogXy5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIGN3KF8pIHtcbiAgICByZXR1cm4gZ2VvanNvbkFyZWEucmluZyhfKSA+PSAwO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgbXZ0IGZyb20gJ0BtYXBib3gvdmVjdG9yLXRpbGUnO1xuY29uc3QgdG9HZW9KU09OID0gbXZ0LlZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT047XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuLy8gVGhlIGZlYXR1cmUgdHlwZSB1c2VkIGJ5IGdlb2pzb24tdnQgYW5kIHN1cGVyY2x1c3Rlci4gU2hvdWxkIGJlIGV4dHJhY3RlZCB0b1xuLy8gZ2xvYmFsIHR5cGUgYW5kIHVzZWQgaW4gbW9kdWxlIGRlZmluaXRpb25zIGZvciB0aG9zZSB0d28gbW9kdWxlcy5cbnR5cGUgRmVhdHVyZSA9IHtcbiAgICB0eXBlOiAxLFxuICAgIGlkOiBtaXhlZCxcbiAgICB0YWdzOiB7W3N0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW59LFxuICAgIGdlb21ldHJ5OiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbn0gfCB7XG4gICAgdHlwZTogMiB8IDMsXG4gICAgaWQ6IG1peGVkLFxuICAgIHRhZ3M6IHtbc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn0sXG4gICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFtudW1iZXIsIG51bWJlcl0+Pixcbn1cblxuY2xhc3MgRmVhdHVyZVdyYXBwZXIgaW1wbGVtZW50cyBWZWN0b3JUaWxlRmVhdHVyZSB7XG4gICAgX2ZlYXR1cmU6IEZlYXR1cmU7XG5cbiAgICBleHRlbnQ6IG51bWJlcjtcbiAgICB0eXBlOiAxIHwgMiB8IDM7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBwcm9wZXJ0aWVzOiB7W3N0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW59O1xuXG4gICAgY29uc3RydWN0b3IoZmVhdHVyZTogRmVhdHVyZSkge1xuICAgICAgICB0aGlzLl9mZWF0dXJlID0gZmVhdHVyZTtcblxuICAgICAgICB0aGlzLmV4dGVudCA9IEVYVEVOVDtcbiAgICAgICAgdGhpcy50eXBlID0gZmVhdHVyZS50eXBlO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBmZWF0dXJlLnRhZ3M7XG5cbiAgICAgICAgLy8gSWYgdGhlIGZlYXR1cmUgaGFzIGEgdG9wLWxldmVsIGBpZGAgcHJvcGVydHksIGNvcHkgaXQgb3ZlciwgYnV0IG9ubHlcbiAgICAgICAgLy8gaWYgaXQgY2FuIGJlIGNvZXJjZWQgdG8gYW4gaW50ZWdlciwgYmVjYXVzZSB0aGlzIHdyYXBwZXIgaXMgdXNlZCBmb3JcbiAgICAgICAgLy8gc2VyaWFsaXppbmcgZ2VvanNvbiBmZWF0dXJlIGRhdGEgaW50byB2ZWN0b3IgdGlsZSBQQkYgZGF0YSwgYW5kIHRoZVxuICAgICAgICAvLyB2ZWN0b3IgdGlsZSBzcGVjIG9ubHkgc3VwcG9ydHMgaW50ZWdlciB2YWx1ZXMgZm9yIGZlYXR1cmUgaWRzIC0tXG4gICAgICAgIC8vIGFsbG93aW5nIG5vbi1pbnRlZ2VyIHZhbHVlcyBoZXJlIHJlc3VsdHMgaW4gYSBub24tY29tcGxpYW50IFBCRlxuICAgICAgICAvLyB0aGF0IGNhdXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBpcyBwYXJzZWQgd2l0aCB2ZWN0b3ItdGlsZS1qc1xuICAgICAgICBpZiAoJ2lkJyBpbiBmZWF0dXJlICYmICFpc05hTihmZWF0dXJlLmlkKSkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHBhcnNlSW50KGZlYXR1cmUuaWQsIDEwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRHZW9tZXRyeSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZlYXR1cmUudHlwZSA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgdGhpcy5fZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnB1c2goW25ldyBQb2ludChwb2ludFswXSwgcG9pbnRbMV0pXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSaW5nID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiByaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1JpbmcucHVzaChuZXcgUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnB1c2gobmV3UmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b0dlb0pTT04oeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdG9HZW9KU09OLmNhbGwodGhpcywgeCwgeSwgeik7XG4gICAgfVxufVxuXG5jbGFzcyBHZW9KU09OV3JhcHBlciBpbXBsZW1lbnRzIFZlY3RvclRpbGUsIFZlY3RvclRpbGVMYXllciB7XG4gICAgbGF5ZXJzOiB7W3N0cmluZ106IFZlY3RvclRpbGVMYXllcn07XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGV4dGVudDogbnVtYmVyO1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIF9mZWF0dXJlczogQXJyYXk8RmVhdHVyZT47XG5cbiAgICBjb25zdHJ1Y3RvcihmZWF0dXJlczogQXJyYXk8RmVhdHVyZT4pIHtcbiAgICAgICAgdGhpcy5sYXllcnMgPSB7J19nZW9qc29uVGlsZUxheWVyJzogdGhpc307XG4gICAgICAgIHRoaXMubmFtZSA9ICdfZ2VvanNvblRpbGVMYXllcic7XG4gICAgICAgIHRoaXMuZXh0ZW50ID0gRVhURU5UO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IGZlYXR1cmVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5fZmVhdHVyZXMgPSBmZWF0dXJlcztcbiAgICB9XG5cbiAgICBmZWF0dXJlKGk6IG51bWJlcik6IFZlY3RvclRpbGVGZWF0dXJlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGZWF0dXJlV3JhcHBlcih0aGlzLl9mZWF0dXJlc1tpXSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHZW9KU09OV3JhcHBlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBQYmY7XG5cbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpO1xuXG5mdW5jdGlvbiBQYmYoYnVmKSB7XG4gICAgdGhpcy5idWYgPSBBcnJheUJ1ZmZlci5pc1ZpZXcgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGJ1ZikgPyBidWYgOiBuZXcgVWludDhBcnJheShidWYgfHwgMCk7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMudHlwZSA9IDA7XG4gICAgdGhpcy5sZW5ndGggPSB0aGlzLmJ1Zi5sZW5ndGg7XG59XG5cblBiZi5WYXJpbnQgID0gMDsgLy8gdmFyaW50OiBpbnQzMiwgaW50NjQsIHVpbnQzMiwgdWludDY0LCBzaW50MzIsIHNpbnQ2NCwgYm9vbCwgZW51bVxuUGJmLkZpeGVkNjQgPSAxOyAvLyA2NC1iaXQ6IGRvdWJsZSwgZml4ZWQ2NCwgc2ZpeGVkNjRcblBiZi5CeXRlcyAgID0gMjsgLy8gbGVuZ3RoLWRlbGltaXRlZDogc3RyaW5nLCBieXRlcywgZW1iZWRkZWQgbWVzc2FnZXMsIHBhY2tlZCByZXBlYXRlZCBmaWVsZHNcblBiZi5GaXhlZDMyID0gNTsgLy8gMzItYml0OiBmbG9hdCwgZml4ZWQzMiwgc2ZpeGVkMzJcblxudmFyIFNISUZUX0xFRlRfMzIgPSAoMSA8PCAxNikgKiAoMSA8PCAxNiksXG4gICAgU0hJRlRfUklHSFRfMzIgPSAxIC8gU0hJRlRfTEVGVF8zMjtcblxuUGJmLnByb3RvdHlwZSA9IHtcblxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG51bGw7XG4gICAgfSxcblxuICAgIC8vID09PSBSRUFESU5HID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICByZWFkRmllbGRzOiBmdW5jdGlvbihyZWFkRmllbGQsIHJlc3VsdCwgZW5kKSB7XG4gICAgICAgIGVuZCA9IGVuZCB8fCB0aGlzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnJlYWRWYXJpbnQoKSxcbiAgICAgICAgICAgICAgICB0YWcgPSB2YWwgPj4gMyxcbiAgICAgICAgICAgICAgICBzdGFydFBvcyA9IHRoaXMucG9zO1xuXG4gICAgICAgICAgICB0aGlzLnR5cGUgPSB2YWwgJiAweDc7XG4gICAgICAgICAgICByZWFkRmllbGQodGFnLCByZXN1bHQsIHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPT09IHN0YXJ0UG9zKSB0aGlzLnNraXAodmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICByZWFkTWVzc2FnZTogZnVuY3Rpb24ocmVhZEZpZWxkLCByZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZEZpZWxkcyhyZWFkRmllbGQsIHJlc3VsdCwgdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcyk7XG4gICAgfSxcblxuICAgIHJlYWRGaXhlZDMyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZFNGaXhlZDMyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHJlYWRJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICAvLyA2NC1iaXQgaW50IGhhbmRsaW5nIGlzIGJhc2VkIG9uIGdpdGh1Yi5jb20vZHB3L25vZGUtYnVmZmVyLW1vcmUtaW50cyAoTUlULWxpY2Vuc2VkKVxuXG4gICAgcmVhZEZpeGVkNjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gcmVhZFVJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MpICsgcmVhZFVJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MgKyA0KSAqIFNISUZUX0xFRlRfMzI7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRTRml4ZWQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkVUludDMyKHRoaXMuYnVmLCB0aGlzLnBvcykgKyByZWFkSW50MzIodGhpcy5idWYsIHRoaXMucG9zICsgNCkgKiBTSElGVF9MRUZUXzMyO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkRmxvYXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gaWVlZTc1NC5yZWFkKHRoaXMuYnVmLCB0aGlzLnBvcywgdHJ1ZSwgMjMsIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkRG91YmxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IGllZWU3NTQucmVhZCh0aGlzLmJ1ZiwgdGhpcy5wb3MsIHRydWUsIDUyLCA4KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZFZhcmludDogZnVuY3Rpb24oaXNTaWduZWQpIHtcbiAgICAgICAgdmFyIGJ1ZiA9IHRoaXMuYnVmLFxuICAgICAgICAgICAgdmFsLCBiO1xuXG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCAgPSAgYiAmIDB4N2Y7ICAgICAgICBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCB8PSAoYiAmIDB4N2YpIDw8IDc7ICBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCB8PSAoYiAmIDB4N2YpIDw8IDE0OyBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCB8PSAoYiAmIDB4N2YpIDw8IDIxOyBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3NdOyAgIHZhbCB8PSAoYiAmIDB4MGYpIDw8IDI4O1xuXG4gICAgICAgIHJldHVybiByZWFkVmFyaW50UmVtYWluZGVyKHZhbCwgaXNTaWduZWQsIHRoaXMpO1xuICAgIH0sXG5cbiAgICByZWFkVmFyaW50NjQ6IGZ1bmN0aW9uKCkgeyAvLyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHYyLjAuMVxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkVmFyaW50KHRydWUpO1xuICAgIH0sXG5cbiAgICByZWFkU1ZhcmludDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBudW0gPSB0aGlzLnJlYWRWYXJpbnQoKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDIgPT09IDEgPyAobnVtICsgMSkgLyAtMiA6IG51bSAvIDI7IC8vIHppZ3phZyBlbmNvZGluZ1xuICAgIH0sXG5cbiAgICByZWFkQm9vbGVhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKTtcbiAgICB9LFxuXG4gICAgcmVhZFN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLFxuICAgICAgICAgICAgc3RyID0gcmVhZFV0ZjgodGhpcy5idWYsIHRoaXMucG9zLCBlbmQpO1xuICAgICAgICB0aGlzLnBvcyA9IGVuZDtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9LFxuXG4gICAgcmVhZEJ5dGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MsXG4gICAgICAgICAgICBidWZmZXIgPSB0aGlzLmJ1Zi5zdWJhcnJheSh0aGlzLnBvcywgZW5kKTtcbiAgICAgICAgdGhpcy5wb3MgPSBlbmQ7XG4gICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfSxcblxuICAgIC8vIHZlcmJvc2UgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM7IGRvZXNuJ3QgYWZmZWN0IGd6aXBwZWQgc2l6ZVxuXG4gICAgcmVhZFBhY2tlZFZhcmludDogZnVuY3Rpb24oYXJyLCBpc1NpZ25lZCkge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRWYXJpbnQoaXNTaWduZWQpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRWYXJpbnQoaXNTaWduZWQpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRTVmFyaW50OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEJvb2xlYW46IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRmxvYXQ6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRGbG9hdCgpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRGbG9hdCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWREb3VibGU6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWREb3VibGUoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRG91YmxlKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEZpeGVkMzI6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkU0ZpeGVkMzI6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRTRml4ZWQzMigpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRTRml4ZWQzMigpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRGaXhlZDY0OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRml4ZWQ2NCgpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZFNGaXhlZDY0OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcblxuICAgIHNraXA6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB2YXIgdHlwZSA9IHZhbCAmIDB4NztcbiAgICAgICAgaWYgKHR5cGUgPT09IFBiZi5WYXJpbnQpIHdoaWxlICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA+IDB4N2YpIHt9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFBiZi5CeXRlcykgdGhpcy5wb3MgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09PSBQYmYuRml4ZWQzMikgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gUGJmLkZpeGVkNjQpIHRoaXMucG9zICs9IDg7XG4gICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdVbmltcGxlbWVudGVkIHR5cGU6ICcgKyB0eXBlKTtcbiAgICB9LFxuXG4gICAgLy8gPT09IFdSSVRJTkcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIHdyaXRlVGFnOiBmdW5jdGlvbih0YWcsIHR5cGUpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludCgodGFnIDw8IDMpIHwgdHlwZSk7XG4gICAgfSxcblxuICAgIHJlYWxsb2M6IGZ1bmN0aW9uKG1pbikge1xuICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMTY7XG5cbiAgICAgICAgd2hpbGUgKGxlbmd0aCA8IHRoaXMucG9zICsgbWluKSBsZW5ndGggKj0gMjtcblxuICAgICAgICBpZiAobGVuZ3RoICE9PSB0aGlzLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBidWYuc2V0KHRoaXMuYnVmKTtcbiAgICAgICAgICAgIHRoaXMuYnVmID0gYnVmO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLnBvcztcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcy5idWYuc3ViYXJyYXkoMCwgdGhpcy5sZW5ndGgpO1xuICAgIH0sXG5cbiAgICB3cml0ZUZpeGVkMzI6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgIH0sXG5cbiAgICB3cml0ZVNGaXhlZDMyOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCB2YWwsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVGaXhlZDY0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDgpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCB2YWwgJiAtMSwgdGhpcy5wb3MpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCBNYXRoLmZsb29yKHZhbCAqIFNISUZUX1JJR0hUXzMyKSwgdGhpcy5wb3MgKyA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICB9LFxuXG4gICAgd3JpdGVTRml4ZWQ2NDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg4KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsICYgLTEsIHRoaXMucG9zKTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgTWF0aC5mbG9vcih2YWwgKiBTSElGVF9SSUdIVF8zMiksIHRoaXMucG9zICsgNCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgfSxcblxuICAgIHdyaXRlVmFyaW50OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdmFsID0gK3ZhbCB8fCAwO1xuXG4gICAgICAgIGlmICh2YWwgPiAweGZmZmZmZmYgfHwgdmFsIDwgMCkge1xuICAgICAgICAgICAgd3JpdGVCaWdWYXJpbnQodmFsLCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcblxuICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICAgICAgICAgICB2YWwgJiAweDdmICB8ICh2YWwgPiAweDdmID8gMHg4MCA6IDApOyBpZiAodmFsIDw9IDB4N2YpIHJldHVybjtcbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAoKHZhbCA+Pj49IDcpICYgMHg3ZikgfCAodmFsID4gMHg3ZiA/IDB4ODAgOiAwKTsgaWYgKHZhbCA8PSAweDdmKSByZXR1cm47XG4gICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+PSA3KSAmIDB4N2YpIHwgKHZhbCA+IDB4N2YgPyAweDgwIDogMCk7IGlmICh2YWwgPD0gMHg3ZikgcmV0dXJuO1xuICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICAgKHZhbCA+Pj4gNykgJiAweDdmO1xuICAgIH0sXG5cbiAgICB3cml0ZVNWYXJpbnQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KHZhbCA8IDAgPyAtdmFsICogMiAtIDEgOiB2YWwgKiAyKTtcbiAgICB9LFxuXG4gICAgd3JpdGVCb29sZWFuOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChCb29sZWFuKHZhbCkpO1xuICAgIH0sXG5cbiAgICB3cml0ZVN0cmluZzogZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHN0ciA9IFN0cmluZyhzdHIpO1xuICAgICAgICB0aGlzLnJlYWxsb2Moc3RyLmxlbmd0aCAqIDQpO1xuXG4gICAgICAgIHRoaXMucG9zKys7IC8vIHJlc2VydmUgMSBieXRlIGZvciBzaG9ydCBzdHJpbmcgbGVuZ3RoXG5cbiAgICAgICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5wb3M7XG4gICAgICAgIC8vIHdyaXRlIHRoZSBzdHJpbmcgZGlyZWN0bHkgdG8gdGhlIGJ1ZmZlciBhbmQgc2VlIGhvdyBtdWNoIHdhcyB3cml0dGVuXG4gICAgICAgIHRoaXMucG9zID0gd3JpdGVVdGY4KHRoaXMuYnVmLCBzdHIsIHRoaXMucG9zKTtcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMucG9zIC0gc3RhcnRQb3M7XG5cbiAgICAgICAgaWYgKGxlbiA+PSAweDgwKSBtYWtlUm9vbUZvckV4dHJhTGVuZ3RoKHN0YXJ0UG9zLCBsZW4sIHRoaXMpO1xuXG4gICAgICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSBtZXNzYWdlIGxlbmd0aCBpbiB0aGUgcmVzZXJ2ZWQgcGxhY2UgYW5kIHJlc3RvcmUgdGhlIHBvc2l0aW9uXG4gICAgICAgIHRoaXMucG9zID0gc3RhcnRQb3MgLSAxO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucG9zICs9IGxlbjtcbiAgICB9LFxuXG4gICAgd3JpdGVGbG9hdDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcbiAgICAgICAgaWVlZTc1NC53cml0ZSh0aGlzLmJ1ZiwgdmFsLCB0aGlzLnBvcywgdHJ1ZSwgMjMsIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgIH0sXG5cbiAgICB3cml0ZURvdWJsZTogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg4KTtcbiAgICAgICAgaWVlZTc1NC53cml0ZSh0aGlzLmJ1ZiwgdmFsLCB0aGlzLnBvcywgdHJ1ZSwgNTIsIDgpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgIH0sXG5cbiAgICB3cml0ZUJ5dGVzOiBmdW5jdGlvbihidWZmZXIpIHtcbiAgICAgICAgdmFyIGxlbiA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQobGVuKTtcbiAgICAgICAgdGhpcy5yZWFsbG9jKGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYnVmW3RoaXMucG9zKytdID0gYnVmZmVyW2ldO1xuICAgIH0sXG5cbiAgICB3cml0ZVJhd01lc3NhZ2U6IGZ1bmN0aW9uKGZuLCBvYmopIHtcbiAgICAgICAgdGhpcy5wb3MrKzsgLy8gcmVzZXJ2ZSAxIGJ5dGUgZm9yIHNob3J0IG1lc3NhZ2UgbGVuZ3RoXG5cbiAgICAgICAgLy8gd3JpdGUgdGhlIG1lc3NhZ2UgZGlyZWN0bHkgdG8gdGhlIGJ1ZmZlciBhbmQgc2VlIGhvdyBtdWNoIHdhcyB3cml0dGVuXG4gICAgICAgIHZhciBzdGFydFBvcyA9IHRoaXMucG9zO1xuICAgICAgICBmbihvYmosIHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gdGhpcy5wb3MgLSBzdGFydFBvcztcblxuICAgICAgICBpZiAobGVuID49IDB4ODApIG1ha2VSb29tRm9yRXh0cmFMZW5ndGgoc3RhcnRQb3MsIGxlbiwgdGhpcyk7XG5cbiAgICAgICAgLy8gZmluYWxseSwgd3JpdGUgdGhlIG1lc3NhZ2UgbGVuZ3RoIGluIHRoZSByZXNlcnZlZCBwbGFjZSBhbmQgcmVzdG9yZSB0aGUgcG9zaXRpb25cbiAgICAgICAgdGhpcy5wb3MgPSBzdGFydFBvcyAtIDE7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQobGVuKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuO1xuICAgIH0sXG5cbiAgICB3cml0ZU1lc3NhZ2U6IGZ1bmN0aW9uKHRhZywgZm4sIG9iaikge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkJ5dGVzKTtcbiAgICAgICAgdGhpcy53cml0ZVJhd01lc3NhZ2UoZm4sIG9iaik7XG4gICAgfSxcblxuICAgIHdyaXRlUGFja2VkVmFyaW50OiAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkVmFyaW50LCBhcnIpOyAgIH0sXG4gICAgd3JpdGVQYWNrZWRTVmFyaW50OiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRTVmFyaW50LCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZEJvb2xlYW46ICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEJvb2xlYW4sIGFycik7ICB9LFxuICAgIHdyaXRlUGFja2VkRmxvYXQ6ICAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRmxvYXQsIGFycik7ICAgIH0sXG4gICAgd3JpdGVQYWNrZWREb3VibGU6ICAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWREb3VibGUsIGFycik7ICAgfSxcbiAgICB3cml0ZVBhY2tlZEZpeGVkMzI6ICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEZpeGVkMzIsIGFycik7ICB9LFxuICAgIHdyaXRlUGFja2VkU0ZpeGVkMzI6IGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkU0ZpeGVkMzIsIGFycik7IH0sXG4gICAgd3JpdGVQYWNrZWRGaXhlZDY0OiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRGaXhlZDY0LCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZFNGaXhlZDY0OiBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFNGaXhlZDY0LCBhcnIpOyB9LFxuXG4gICAgd3JpdGVCeXRlc0ZpZWxkOiBmdW5jdGlvbih0YWcsIGJ1ZmZlcikge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkJ5dGVzKTtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGVzKGJ1ZmZlcik7XG4gICAgfSxcbiAgICB3cml0ZUZpeGVkMzJGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDMyKTtcbiAgICAgICAgdGhpcy53cml0ZUZpeGVkMzIodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU0ZpeGVkMzJGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDMyKTtcbiAgICAgICAgdGhpcy53cml0ZVNGaXhlZDMyKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZUZpeGVkNjRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDY0KTtcbiAgICAgICAgdGhpcy53cml0ZUZpeGVkNjQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU0ZpeGVkNjRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDY0KTtcbiAgICAgICAgdGhpcy53cml0ZVNGaXhlZDY0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVZhcmludEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLlZhcmludCk7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU1ZhcmludEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLlZhcmludCk7XG4gICAgICAgIHRoaXMud3JpdGVTVmFyaW50KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVN0cmluZ0ZpZWxkOiBmdW5jdGlvbih0YWcsIHN0cikge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkJ5dGVzKTtcbiAgICAgICAgdGhpcy53cml0ZVN0cmluZyhzdHIpO1xuICAgIH0sXG4gICAgd3JpdGVGbG9hdEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkMzIpO1xuICAgICAgICB0aGlzLndyaXRlRmxvYXQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlRG91YmxlRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVEb3VibGUodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlQm9vbGVhbkZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50RmllbGQodGFnLCBCb29sZWFuKHZhbCkpO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIHJlYWRWYXJpbnRSZW1haW5kZXIobCwgcywgcCkge1xuICAgIHZhciBidWYgPSBwLmJ1ZixcbiAgICAgICAgaCwgYjtcblxuICAgIGIgPSBidWZbcC5wb3MrK107IGggID0gKGIgJiAweDcwKSA+PiA0OyAgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4N2YpIDw8IDM7ICBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcbiAgICBiID0gYnVmW3AucG9zKytdOyBoIHw9IChiICYgMHg3ZikgPDwgMTA7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAxNzsgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4N2YpIDw8IDI0OyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcbiAgICBiID0gYnVmW3AucG9zKytdOyBoIHw9IChiICYgMHgwMSkgPDwgMzE7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB2YXJpbnQgbm90IG1vcmUgdGhhbiAxMCBieXRlcycpO1xufVxuXG5mdW5jdGlvbiByZWFkUGFja2VkRW5kKHBiZikge1xuICAgIHJldHVybiBwYmYudHlwZSA9PT0gUGJmLkJ5dGVzID9cbiAgICAgICAgcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3MgOiBwYmYucG9zICsgMTtcbn1cblxuZnVuY3Rpb24gdG9OdW0obG93LCBoaWdoLCBpc1NpZ25lZCkge1xuICAgIGlmIChpc1NpZ25lZCkge1xuICAgICAgICByZXR1cm4gaGlnaCAqIDB4MTAwMDAwMDAwICsgKGxvdyA+Pj4gMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgoaGlnaCA+Pj4gMCkgKiAweDEwMDAwMDAwMCkgKyAobG93ID4+PiAwKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVCaWdWYXJpbnQodmFsLCBwYmYpIHtcbiAgICB2YXIgbG93LCBoaWdoO1xuXG4gICAgaWYgKHZhbCA+PSAwKSB7XG4gICAgICAgIGxvdyAgPSAodmFsICUgMHgxMDAwMDAwMDApIHwgMDtcbiAgICAgICAgaGlnaCA9ICh2YWwgLyAweDEwMDAwMDAwMCkgfCAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvdyAgPSB+KC12YWwgJSAweDEwMDAwMDAwMCk7XG4gICAgICAgIGhpZ2ggPSB+KC12YWwgLyAweDEwMDAwMDAwMCk7XG5cbiAgICAgICAgaWYgKGxvdyBeIDB4ZmZmZmZmZmYpIHtcbiAgICAgICAgICAgIGxvdyA9IChsb3cgKyAxKSB8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb3cgPSAwO1xuICAgICAgICAgICAgaGlnaCA9IChoaWdoICsgMSkgfCAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbCA+PSAweDEwMDAwMDAwMDAwMDAwMDAwIHx8IHZhbCA8IC0weDEwMDAwMDAwMDAwMDAwMDAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignR2l2ZW4gdmFyaW50IGRvZXNuXFwndCBmaXQgaW50byAxMCBieXRlcycpO1xuICAgIH1cblxuICAgIHBiZi5yZWFsbG9jKDEwKTtcblxuICAgIHdyaXRlQmlnVmFyaW50TG93KGxvdywgaGlnaCwgcGJmKTtcbiAgICB3cml0ZUJpZ1ZhcmludEhpZ2goaGlnaCwgcGJmKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVCaWdWYXJpbnRMb3cobG93LCBoaWdoLCBwYmYpIHtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gPSBsb3cgJiAweDdmIHwgMHg4MDsgbG93ID4+Pj0gNztcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gPSBsb3cgJiAweDdmIHwgMHg4MDsgbG93ID4+Pj0gNztcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gPSBsb3cgJiAweDdmIHwgMHg4MDsgbG93ID4+Pj0gNztcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gPSBsb3cgJiAweDdmIHwgMHg4MDsgbG93ID4+Pj0gNztcbiAgICBwYmYuYnVmW3BiZi5wb3NdICAgPSBsb3cgJiAweDdmO1xufVxuXG5mdW5jdGlvbiB3cml0ZUJpZ1ZhcmludEhpZ2goaGlnaCwgcGJmKSB7XG4gICAgdmFyIGxzYiA9IChoaWdoICYgMHgwNykgPDwgNDtcblxuICAgIHBiZi5idWZbcGJmLnBvcysrXSB8PSBsc2IgICAgICAgICB8ICgoaGlnaCA+Pj49IDMpID8gMHg4MCA6IDApOyBpZiAoIWhpZ2gpIHJldHVybjtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gID0gaGlnaCAmIDB4N2YgfCAoKGhpZ2ggPj4+PSA3KSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3ZiB8ICgoaGlnaCA+Pj49IDcpID8gMHg4MCA6IDApOyBpZiAoIWhpZ2gpIHJldHVybjtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gID0gaGlnaCAmIDB4N2YgfCAoKGhpZ2ggPj4+PSA3KSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmO1xufVxuXG5mdW5jdGlvbiBtYWtlUm9vbUZvckV4dHJhTGVuZ3RoKHN0YXJ0UG9zLCBsZW4sIHBiZikge1xuICAgIHZhciBleHRyYUxlbiA9XG4gICAgICAgIGxlbiA8PSAweDNmZmYgPyAxIDpcbiAgICAgICAgbGVuIDw9IDB4MWZmZmZmID8gMiA6XG4gICAgICAgIGxlbiA8PSAweGZmZmZmZmYgPyAzIDogTWF0aC5mbG9vcihNYXRoLmxvZyhsZW4pIC8gKE1hdGguTE4yICogNykpO1xuXG4gICAgLy8gaWYgMSBieXRlIGlzbid0IGVub3VnaCBmb3IgZW5jb2RpbmcgbWVzc2FnZSBsZW5ndGgsIHNoaWZ0IHRoZSBkYXRhIHRvIHRoZSByaWdodFxuICAgIHBiZi5yZWFsbG9jKGV4dHJhTGVuKTtcbiAgICBmb3IgKHZhciBpID0gcGJmLnBvcyAtIDE7IGkgPj0gc3RhcnRQb3M7IGktLSkgcGJmLmJ1ZltpICsgZXh0cmFMZW5dID0gcGJmLmJ1ZltpXTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQYWNrZWRWYXJpbnQoYXJyLCBwYmYpICAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlVmFyaW50KGFycltpXSk7ICAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRTVmFyaW50KGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlU1ZhcmludChhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRGbG9hdChhcnIsIHBiZikgICAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRmxvYXQoYXJyW2ldKTsgICAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWREb3VibGUoYXJyLCBwYmYpICAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRG91YmxlKGFycltpXSk7ICAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRCb29sZWFuKGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlQm9vbGVhbihhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRGaXhlZDMyKGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRml4ZWQzMihhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRTRml4ZWQzMihhcnIsIHBiZikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlU0ZpeGVkMzIoYXJyW2ldKTsgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRGaXhlZDY0KGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRml4ZWQ2NChhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRTRml4ZWQ2NChhcnIsIHBiZikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlU0ZpeGVkNjQoYXJyW2ldKTsgfVxuXG4vLyBCdWZmZXIgY29kZSBiZWxvdyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyLCBNSVQtbGljZW5zZWRcblxuZnVuY3Rpb24gcmVhZFVJbnQzMihidWYsIHBvcykge1xuICAgIHJldHVybiAoKGJ1Zltwb3NdKSB8XG4gICAgICAgIChidWZbcG9zICsgMV0gPDwgOCkgfFxuICAgICAgICAoYnVmW3BvcyArIDJdIDw8IDE2KSkgK1xuICAgICAgICAoYnVmW3BvcyArIDNdICogMHgxMDAwMDAwKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVJbnQzMihidWYsIHZhbCwgcG9zKSB7XG4gICAgYnVmW3Bvc10gPSB2YWw7XG4gICAgYnVmW3BvcyArIDFdID0gKHZhbCA+Pj4gOCk7XG4gICAgYnVmW3BvcyArIDJdID0gKHZhbCA+Pj4gMTYpO1xuICAgIGJ1Zltwb3MgKyAzXSA9ICh2YWwgPj4+IDI0KTtcbn1cblxuZnVuY3Rpb24gcmVhZEludDMyKGJ1ZiwgcG9zKSB7XG4gICAgcmV0dXJuICgoYnVmW3Bvc10pIHxcbiAgICAgICAgKGJ1Zltwb3MgKyAxXSA8PCA4KSB8XG4gICAgICAgIChidWZbcG9zICsgMl0gPDwgMTYpKSArXG4gICAgICAgIChidWZbcG9zICsgM10gPDwgMjQpO1xufVxuXG5mdW5jdGlvbiByZWFkVXRmOChidWYsIHBvcywgZW5kKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIHZhciBpID0gcG9zO1xuXG4gICAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICAgICAgdmFyIGIwID0gYnVmW2ldO1xuICAgICAgICB2YXIgYyA9IG51bGw7IC8vIGNvZGVwb2ludFxuICAgICAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9XG4gICAgICAgICAgICBiMCA+IDB4RUYgPyA0IDpcbiAgICAgICAgICAgIGIwID4gMHhERiA/IDMgOlxuICAgICAgICAgICAgYjAgPiAweEJGID8gMiA6IDE7XG5cbiAgICAgICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlID4gZW5kKSBicmVhaztcblxuICAgICAgICB2YXIgYjEsIGIyLCBiMztcblxuICAgICAgICBpZiAoYnl0ZXNQZXJTZXF1ZW5jZSA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKGIwIDwgMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSBiMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChieXRlc1BlclNlcXVlbmNlID09PSAyKSB7XG4gICAgICAgICAgICBiMSA9IGJ1ZltpICsgMV07XG4gICAgICAgICAgICBpZiAoKGIxICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgICAgICBjID0gKGIwICYgMHgxRikgPDwgMHg2IHwgKGIxICYgMHgzRik7XG4gICAgICAgICAgICAgICAgaWYgKGMgPD0gMHg3Rikge1xuICAgICAgICAgICAgICAgICAgICBjID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNQZXJTZXF1ZW5jZSA9PT0gMykge1xuICAgICAgICAgICAgYjEgPSBidWZbaSArIDFdO1xuICAgICAgICAgICAgYjIgPSBidWZbaSArIDJdO1xuICAgICAgICAgICAgaWYgKChiMSAmIDB4QzApID09PSAweDgwICYmIChiMiAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICAgICAgYyA9IChiMCAmIDB4RikgPDwgMHhDIHwgKGIxICYgMHgzRikgPDwgMHg2IHwgKGIyICYgMHgzRik7XG4gICAgICAgICAgICAgICAgaWYgKGMgPD0gMHg3RkYgfHwgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKSkge1xuICAgICAgICAgICAgICAgICAgICBjID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNQZXJTZXF1ZW5jZSA9PT0gNCkge1xuICAgICAgICAgICAgYjEgPSBidWZbaSArIDFdO1xuICAgICAgICAgICAgYjIgPSBidWZbaSArIDJdO1xuICAgICAgICAgICAgYjMgPSBidWZbaSArIDNdO1xuICAgICAgICAgICAgaWYgKChiMSAmIDB4QzApID09PSAweDgwICYmIChiMiAmIDB4QzApID09PSAweDgwICYmIChiMyAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICAgICAgYyA9IChiMCAmIDB4RikgPDwgMHgxMiB8IChiMSAmIDB4M0YpIDw8IDB4QyB8IChiMiAmIDB4M0YpIDw8IDB4NiB8IChiMyAmIDB4M0YpO1xuICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4RkZGRiB8fCBjID49IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjID09PSBudWxsKSB7XG4gICAgICAgICAgICBjID0gMHhGRkZEO1xuICAgICAgICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDE7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjID4gMHhGRkZGKSB7XG4gICAgICAgICAgICBjIC09IDB4MTAwMDA7XG4gICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcbiAgICAgICAgICAgIGMgPSAweERDMDAgfCBjICYgMHgzRkY7XG4gICAgICAgIH1cblxuICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgICAgaSArPSBieXRlc1BlclNlcXVlbmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVXRmOChidWYsIHN0ciwgcG9zKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGMsIGxlYWQ7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpOyAvLyBjb2RlIHBvaW50XG5cbiAgICAgICAgaWYgKGMgPiAweEQ3RkYgJiYgYyA8IDB4RTAwMCkge1xuICAgICAgICAgICAgaWYgKGxlYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA8IDB4REMwMCkge1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhFRjtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkY7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJEO1xuICAgICAgICAgICAgICAgICAgICBsZWFkID0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IGxlYWQgLSAweEQ4MDAgPDwgMTAgfCBjIC0gMHhEQzAwIHwgMHgxMDAwMDtcbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA+IDB4REJGRiB8fCAoaSArIDEgPT09IHN0ci5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEVGO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRjtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9IGM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGxlYWQpIHtcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEVGO1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkY7XG4gICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRDtcbiAgICAgICAgICAgIGxlYWQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICBidWZbcG9zKytdID0gYztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweDYgfCAweEMwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA8IDB4MTAwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHhDIHwgMHhFMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweDEyIHwgMHhGMDtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHhDICYgMHgzRiB8IDB4ODA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4NiAmIDB4M0YgfCAweDgwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgJiAweDNGIHwgMHg4MDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcG9zO1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknKVxudmFyIFZlY3RvclRpbGVGZWF0dXJlID0gcmVxdWlyZSgnQG1hcGJveC92ZWN0b3ItdGlsZScpLlZlY3RvclRpbGVGZWF0dXJlXG5cbm1vZHVsZS5leHBvcnRzID0gR2VvSlNPTldyYXBwZXJcblxuLy8gY29uZm9ybSB0byB2ZWN0b3J0aWxlIGFwaVxuZnVuY3Rpb24gR2VvSlNPTldyYXBwZXIgKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdGhpcy5mZWF0dXJlcyA9IGZlYXR1cmVzXG4gIHRoaXMubGVuZ3RoID0gZmVhdHVyZXMubGVuZ3RoXG59XG5cbkdlb0pTT05XcmFwcGVyLnByb3RvdHlwZS5mZWF0dXJlID0gZnVuY3Rpb24gKGkpIHtcbiAgcmV0dXJuIG5ldyBGZWF0dXJlV3JhcHBlcih0aGlzLmZlYXR1cmVzW2ldLCB0aGlzLm9wdGlvbnMuZXh0ZW50KVxufVxuXG5mdW5jdGlvbiBGZWF0dXJlV3JhcHBlciAoZmVhdHVyZSwgZXh0ZW50KSB7XG4gIHRoaXMuaWQgPSB0eXBlb2YgZmVhdHVyZS5pZCA9PT0gJ251bWJlcicgPyBmZWF0dXJlLmlkIDogdW5kZWZpbmVkXG4gIHRoaXMudHlwZSA9IGZlYXR1cmUudHlwZVxuICB0aGlzLnJhd0dlb21ldHJ5ID0gZmVhdHVyZS50eXBlID09PSAxID8gW2ZlYXR1cmUuZ2VvbWV0cnldIDogZmVhdHVyZS5nZW9tZXRyeVxuICB0aGlzLnByb3BlcnRpZXMgPSBmZWF0dXJlLnRhZ3NcbiAgdGhpcy5leHRlbnQgPSBleHRlbnQgfHwgNDA5NlxufVxuXG5GZWF0dXJlV3JhcHBlci5wcm90b3R5cGUubG9hZEdlb21ldHJ5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmluZ3MgPSB0aGlzLnJhd0dlb21ldHJ5XG4gIHRoaXMuZ2VvbWV0cnkgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcmluZyA9IHJpbmdzW2ldXG4gICAgdmFyIG5ld1JpbmcgPSBbXVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmluZy5sZW5ndGg7IGorKykge1xuICAgICAgbmV3UmluZy5wdXNoKG5ldyBQb2ludChyaW5nW2pdWzBdLCByaW5nW2pdWzFdKSlcbiAgICB9XG4gICAgdGhpcy5nZW9tZXRyeS5wdXNoKG5ld1JpbmcpXG4gIH1cbiAgcmV0dXJuIHRoaXMuZ2VvbWV0cnlcbn1cblxuRmVhdHVyZVdyYXBwZXIucHJvdG90eXBlLmJib3ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5nZW9tZXRyeSkgdGhpcy5sb2FkR2VvbWV0cnkoKVxuXG4gIHZhciByaW5ncyA9IHRoaXMuZ2VvbWV0cnlcbiAgdmFyIHgxID0gSW5maW5pdHlcbiAgdmFyIHgyID0gLUluZmluaXR5XG4gIHZhciB5MSA9IEluZmluaXR5XG4gIHZhciB5MiA9IC1JbmZpbml0eVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcmluZyA9IHJpbmdzW2ldXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBjb29yZCA9IHJpbmdbal1cblxuICAgICAgeDEgPSBNYXRoLm1pbih4MSwgY29vcmQueClcbiAgICAgIHgyID0gTWF0aC5tYXgoeDIsIGNvb3JkLngpXG4gICAgICB5MSA9IE1hdGgubWluKHkxLCBjb29yZC55KVxuICAgICAgeTIgPSBNYXRoLm1heCh5MiwgY29vcmQueSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW3gxLCB5MSwgeDIsIHkyXVxufVxuXG5GZWF0dXJlV3JhcHBlci5wcm90b3R5cGUudG9HZW9KU09OID0gVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTlxuIiwidmFyIFBiZiA9IHJlcXVpcmUoJ3BiZicpXG52YXIgR2VvSlNPTldyYXBwZXIgPSByZXF1aXJlKCcuL2xpYi9nZW9qc29uX3dyYXBwZXInKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZyb21WZWN0b3JUaWxlSnNcbm1vZHVsZS5leHBvcnRzLmZyb21WZWN0b3JUaWxlSnMgPSBmcm9tVmVjdG9yVGlsZUpzXG5tb2R1bGUuZXhwb3J0cy5mcm9tR2VvanNvblZ0ID0gZnJvbUdlb2pzb25WdFxubW9kdWxlLmV4cG9ydHMuR2VvSlNPTldyYXBwZXIgPSBHZW9KU09OV3JhcHBlclxuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHZlY3Rvci10aWxlLWpzLWNyZWF0ZWQgdGlsZSB0byBwYmZcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGlsZVxuICogQHJldHVybiB7QnVmZmVyfSB1bmNvbXByZXNzZWQsIHBiZi1zZXJpYWxpemVkIHRpbGUgZGF0YVxuICovXG5mdW5jdGlvbiBmcm9tVmVjdG9yVGlsZUpzICh0aWxlKSB7XG4gIHZhciBvdXQgPSBuZXcgUGJmKClcbiAgd3JpdGVUaWxlKHRpbGUsIG91dClcbiAgcmV0dXJuIG91dC5maW5pc2goKVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZWQgYSBnZW9qc29uLXZ0LWNyZWF0ZWQgdGlsZSB0byBwYmYuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGxheWVycyAtIEFuIG9iamVjdCBtYXBwaW5nIGxheWVyIG5hbWVzIHRvIGdlb2pzb24tdnQtY3JlYXRlZCB2ZWN0b3IgdGlsZSBvYmplY3RzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gQW4gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIHZlY3Rvci10aWxlIHNwZWNpZmljYXRpb24gdmVyc2lvbiBhbmQgZXh0ZW50IHRoYXQgd2VyZSB1c2VkIHRvIGNyZWF0ZSBgbGF5ZXJzYC5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy52ZXJzaW9uPTFdIC0gVmVyc2lvbiBvZiB2ZWN0b3ItdGlsZSBzcGVjIHVzZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5leHRlbnQ9NDA5Nl0gLSBFeHRlbnQgb2YgdGhlIHZlY3RvciB0aWxlXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHVuY29tcHJlc3NlZCwgcGJmLXNlcmlhbGl6ZWQgdGlsZSBkYXRhXG4gKi9cbmZ1bmN0aW9uIGZyb21HZW9qc29uVnQgKGxheWVycywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgbCA9IHt9XG4gIGZvciAodmFyIGsgaW4gbGF5ZXJzKSB7XG4gICAgbFtrXSA9IG5ldyBHZW9KU09OV3JhcHBlcihsYXllcnNba10uZmVhdHVyZXMsIG9wdGlvbnMpXG4gICAgbFtrXS5uYW1lID0ga1xuICAgIGxba10udmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvblxuICAgIGxba10uZXh0ZW50ID0gb3B0aW9ucy5leHRlbnRcbiAgfVxuICByZXR1cm4gZnJvbVZlY3RvclRpbGVKcyh7bGF5ZXJzOiBsfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVUaWxlICh0aWxlLCBwYmYpIHtcbiAgZm9yICh2YXIga2V5IGluIHRpbGUubGF5ZXJzKSB7XG4gICAgcGJmLndyaXRlTWVzc2FnZSgzLCB3cml0ZUxheWVyLCB0aWxlLmxheWVyc1trZXldKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlTGF5ZXIgKGxheWVyLCBwYmYpIHtcbiAgcGJmLndyaXRlVmFyaW50RmllbGQoMTUsIGxheWVyLnZlcnNpb24gfHwgMSlcbiAgcGJmLndyaXRlU3RyaW5nRmllbGQoMSwgbGF5ZXIubmFtZSB8fCAnJylcbiAgcGJmLndyaXRlVmFyaW50RmllbGQoNSwgbGF5ZXIuZXh0ZW50IHx8IDQwOTYpXG5cbiAgdmFyIGlcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAga2V5czogW10sXG4gICAgdmFsdWVzOiBbXSxcbiAgICBrZXljYWNoZToge30sXG4gICAgdmFsdWVjYWNoZToge31cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBsYXllci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnRleHQuZmVhdHVyZSA9IGxheWVyLmZlYXR1cmUoaSlcbiAgICBwYmYud3JpdGVNZXNzYWdlKDIsIHdyaXRlRmVhdHVyZSwgY29udGV4dClcbiAgfVxuXG4gIHZhciBrZXlzID0gY29udGV4dC5rZXlzXG4gIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgcGJmLndyaXRlU3RyaW5nRmllbGQoMywga2V5c1tpXSlcbiAgfVxuXG4gIHZhciB2YWx1ZXMgPSBjb250ZXh0LnZhbHVlc1xuICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgcGJmLndyaXRlTWVzc2FnZSg0LCB3cml0ZVZhbHVlLCB2YWx1ZXNbaV0pXG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVGZWF0dXJlIChjb250ZXh0LCBwYmYpIHtcbiAgdmFyIGZlYXR1cmUgPSBjb250ZXh0LmZlYXR1cmVcblxuICBpZiAoZmVhdHVyZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcGJmLndyaXRlVmFyaW50RmllbGQoMSwgZmVhdHVyZS5pZClcbiAgfVxuXG4gIHBiZi53cml0ZU1lc3NhZ2UoMiwgd3JpdGVQcm9wZXJ0aWVzLCBjb250ZXh0KVxuICBwYmYud3JpdGVWYXJpbnRGaWVsZCgzLCBmZWF0dXJlLnR5cGUpXG4gIHBiZi53cml0ZU1lc3NhZ2UoNCwgd3JpdGVHZW9tZXRyeSwgZmVhdHVyZSlcbn1cblxuZnVuY3Rpb24gd3JpdGVQcm9wZXJ0aWVzIChjb250ZXh0LCBwYmYpIHtcbiAgdmFyIGZlYXR1cmUgPSBjb250ZXh0LmZlYXR1cmVcbiAgdmFyIGtleXMgPSBjb250ZXh0LmtleXNcbiAgdmFyIHZhbHVlcyA9IGNvbnRleHQudmFsdWVzXG4gIHZhciBrZXljYWNoZSA9IGNvbnRleHQua2V5Y2FjaGVcbiAgdmFyIHZhbHVlY2FjaGUgPSBjb250ZXh0LnZhbHVlY2FjaGVcblxuICBmb3IgKHZhciBrZXkgaW4gZmVhdHVyZS5wcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGtleUluZGV4ID0ga2V5Y2FjaGVba2V5XVxuICAgIGlmICh0eXBlb2Yga2V5SW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KVxuICAgICAga2V5SW5kZXggPSBrZXlzLmxlbmd0aCAtIDFcbiAgICAgIGtleWNhY2hlW2tleV0gPSBrZXlJbmRleFxuICAgIH1cbiAgICBwYmYud3JpdGVWYXJpbnQoa2V5SW5kZXgpXG5cbiAgICB2YXIgdmFsdWUgPSBmZWF0dXJlLnByb3BlcnRpZXNba2V5XVxuICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlXG4gICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICdib29sZWFuJyAmJiB0eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICB9XG4gICAgdmFyIHZhbHVlS2V5ID0gdHlwZSArICc6JyArIHZhbHVlXG4gICAgdmFyIHZhbHVlSW5kZXggPSB2YWx1ZWNhY2hlW3ZhbHVlS2V5XVxuICAgIGlmICh0eXBlb2YgdmFsdWVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxuICAgICAgdmFsdWVJbmRleCA9IHZhbHVlcy5sZW5ndGggLSAxXG4gICAgICB2YWx1ZWNhY2hlW3ZhbHVlS2V5XSA9IHZhbHVlSW5kZXhcbiAgICB9XG4gICAgcGJmLndyaXRlVmFyaW50KHZhbHVlSW5kZXgpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWFuZCAoY21kLCBsZW5ndGgpIHtcbiAgcmV0dXJuIChsZW5ndGggPDwgMykgKyAoY21kICYgMHg3KVxufVxuXG5mdW5jdGlvbiB6aWd6YWcgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAxKSBeIChudW0gPj4gMzEpXG59XG5cbmZ1bmN0aW9uIHdyaXRlR2VvbWV0cnkgKGZlYXR1cmUsIHBiZikge1xuICB2YXIgZ2VvbWV0cnkgPSBmZWF0dXJlLmxvYWRHZW9tZXRyeSgpXG4gIHZhciB0eXBlID0gZmVhdHVyZS50eXBlXG4gIHZhciB4ID0gMFxuICB2YXIgeSA9IDBcbiAgdmFyIHJpbmdzID0gZ2VvbWV0cnkubGVuZ3RoXG4gIGZvciAodmFyIHIgPSAwOyByIDwgcmluZ3M7IHIrKykge1xuICAgIHZhciByaW5nID0gZ2VvbWV0cnlbcl1cbiAgICB2YXIgY291bnQgPSAxXG4gICAgaWYgKHR5cGUgPT09IDEpIHtcbiAgICAgIGNvdW50ID0gcmluZy5sZW5ndGhcbiAgICB9XG4gICAgcGJmLndyaXRlVmFyaW50KGNvbW1hbmQoMSwgY291bnQpKSAvLyBtb3ZldG9cbiAgICAvLyBkbyBub3Qgd3JpdGUgcG9seWdvbiBjbG9zaW5nIHBhdGggYXMgbGluZXRvXG4gICAgdmFyIGxpbmVDb3VudCA9IHR5cGUgPT09IDMgPyByaW5nLmxlbmd0aCAtIDEgOiByaW5nLmxlbmd0aFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpID09PSAxICYmIHR5cGUgIT09IDEpIHtcbiAgICAgICAgcGJmLndyaXRlVmFyaW50KGNvbW1hbmQoMiwgbGluZUNvdW50IC0gMSkpIC8vIGxpbmV0b1xuICAgICAgfVxuICAgICAgdmFyIGR4ID0gcmluZ1tpXS54IC0geFxuICAgICAgdmFyIGR5ID0gcmluZ1tpXS55IC0geVxuICAgICAgcGJmLndyaXRlVmFyaW50KHppZ3phZyhkeCkpXG4gICAgICBwYmYud3JpdGVWYXJpbnQoemlnemFnKGR5KSlcbiAgICAgIHggKz0gZHhcbiAgICAgIHkgKz0gZHlcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IDMpIHtcbiAgICAgIHBiZi53cml0ZVZhcmludChjb21tYW5kKDcsIDEpKSAvLyBjbG9zZXBhdGhcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVWYWx1ZSAodmFsdWUsIHBiZikge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYmYud3JpdGVTdHJpbmdGaWVsZCgxLCB2YWx1ZSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICBwYmYud3JpdGVCb29sZWFuRmllbGQoNywgdmFsdWUpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodmFsdWUgJSAxICE9PSAwKSB7XG4gICAgICBwYmYud3JpdGVEb3VibGVGaWVsZCgzLCB2YWx1ZSlcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgcGJmLndyaXRlU1ZhcmludEZpZWxkKDYsIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBwYmYud3JpdGVWYXJpbnRGaWVsZCg1LCB2YWx1ZSlcbiAgICB9XG4gIH1cbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbGVmdCwgcmlnaHQsIGRlcHRoKSB7XG4gICAgaWYgKHJpZ2h0IC0gbGVmdCA8PSBub2RlU2l6ZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbSA9IChsZWZ0ICsgcmlnaHQpID4+IDE7XG5cbiAgICBzZWxlY3QoaWRzLCBjb29yZHMsIG0sIGxlZnQsIHJpZ2h0LCBkZXB0aCAlIDIpO1xuXG4gICAgc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbGVmdCwgbSAtIDEsIGRlcHRoICsgMSk7XG4gICAgc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbSArIDEsIHJpZ2h0LCBkZXB0aCArIDEpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3QoaWRzLCBjb29yZHMsIGssIGxlZnQsIHJpZ2h0LCBpbmMpIHtcblxuICAgIHdoaWxlIChyaWdodCA+IGxlZnQpIHtcbiAgICAgICAgaWYgKHJpZ2h0IC0gbGVmdCA+IDYwMCkge1xuICAgICAgICAgICAgY29uc3QgbiA9IHJpZ2h0IC0gbGVmdCArIDE7XG4gICAgICAgICAgICBjb25zdCBtID0gayAtIGxlZnQgKyAxO1xuICAgICAgICAgICAgY29uc3QgeiA9IE1hdGgubG9nKG4pO1xuICAgICAgICAgICAgY29uc3QgcyA9IDAuNSAqIE1hdGguZXhwKDIgKiB6IC8gMyk7XG4gICAgICAgICAgICBjb25zdCBzZCA9IDAuNSAqIE1hdGguc3FydCh6ICogcyAqIChuIC0gcykgLyBuKSAqIChtIC0gbiAvIDIgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLm1heChsZWZ0LCBNYXRoLmZsb29yKGsgLSBtICogcyAvIG4gKyBzZCkpO1xuICAgICAgICAgICAgY29uc3QgbmV3UmlnaHQgPSBNYXRoLm1pbihyaWdodCwgTWF0aC5mbG9vcihrICsgKG4gLSBtKSAqIHMgLyBuICsgc2QpKTtcbiAgICAgICAgICAgIHNlbGVjdChpZHMsIGNvb3JkcywgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGluYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ID0gY29vcmRzWzIgKiBrICsgaW5jXTtcbiAgICAgICAgbGV0IGkgPSBsZWZ0O1xuICAgICAgICBsZXQgaiA9IHJpZ2h0O1xuXG4gICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBsZWZ0LCBrKTtcbiAgICAgICAgaWYgKGNvb3Jkc1syICogcmlnaHQgKyBpbmNdID4gdCkgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGxlZnQsIHJpZ2h0KTtcblxuICAgICAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBpLCBqKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIHdoaWxlIChjb29yZHNbMiAqIGkgKyBpbmNdIDwgdCkgaSsrO1xuICAgICAgICAgICAgd2hpbGUgKGNvb3Jkc1syICogaiArIGluY10gPiB0KSBqLS07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29vcmRzWzIgKiBsZWZ0ICsgaW5jXSA9PT0gdCkgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGxlZnQsIGopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBqLCByaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA8PSBrKSBsZWZ0ID0gaiArIDE7XG4gICAgICAgIGlmIChrIDw9IGopIHJpZ2h0ID0gaiAtIDE7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzd2FwSXRlbShpZHMsIGNvb3JkcywgaSwgaikge1xuICAgIHN3YXAoaWRzLCBpLCBqKTtcbiAgICBzd2FwKGNvb3JkcywgMiAqIGksIDIgKiBqKTtcbiAgICBzd2FwKGNvb3JkcywgMiAqIGkgKyAxLCAyICogaiArIDEpO1xufVxuXG5mdW5jdGlvbiBzd2FwKGFyciwgaSwgaikge1xuICAgIGNvbnN0IHRtcCA9IGFycltpXTtcbiAgICBhcnJbaV0gPSBhcnJbal07XG4gICAgYXJyW2pdID0gdG1wO1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByYW5nZShpZHMsIGNvb3JkcywgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgbm9kZVNpemUpIHtcbiAgICBjb25zdCBzdGFjayA9IFswLCBpZHMubGVuZ3RoIC0gMSwgMF07XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IHgsIHk7XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgIGlmIChyaWdodCAtIGxlZnQgPD0gbm9kZVNpemUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICB4ID0gY29vcmRzWzIgKiBpXTtcbiAgICAgICAgICAgICAgICB5ID0gY29vcmRzWzIgKiBpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKHggPj0gbWluWCAmJiB4IDw9IG1heFggJiYgeSA+PSBtaW5ZICYmIHkgPD0gbWF4WSkgcmVzdWx0LnB1c2goaWRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcblxuICAgICAgICB4ID0gY29vcmRzWzIgKiBtXTtcbiAgICAgICAgeSA9IGNvb3Jkc1syICogbSArIDFdO1xuXG4gICAgICAgIGlmICh4ID49IG1pblggJiYgeCA8PSBtYXhYICYmIHkgPj0gbWluWSAmJiB5IDw9IG1heFkpIHJlc3VsdC5wdXNoKGlkc1ttXSk7XG5cbiAgICAgICAgY29uc3QgbmV4dEF4aXMgPSAoYXhpcyArIDEpICUgMjtcblxuICAgICAgICBpZiAoYXhpcyA9PT0gMCA/IG1pblggPD0geCA6IG1pblkgPD0geSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChsZWZ0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSAtIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aXMgPT09IDAgPyBtYXhYID49IHggOiBtYXhZID49IHkpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSArIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChyaWdodCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5leHRBeGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdpdGhpbihpZHMsIGNvb3JkcywgcXgsIHF5LCByLCBub2RlU2l6ZSkge1xuICAgIGNvbnN0IHN0YWNrID0gWzAsIGlkcy5sZW5ndGggLSAxLCAwXTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCByMiA9IHIgKiByO1xuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBheGlzID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICBpZiAocmlnaHQgLSBsZWZ0IDw9IG5vZGVTaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbGVmdDsgaSA8PSByaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNxRGlzdChjb29yZHNbMiAqIGldLCBjb29yZHNbMiAqIGkgKyAxXSwgcXgsIHF5KSA8PSByMikgcmVzdWx0LnB1c2goaWRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcblxuICAgICAgICBjb25zdCB4ID0gY29vcmRzWzIgKiBtXTtcbiAgICAgICAgY29uc3QgeSA9IGNvb3Jkc1syICogbSArIDFdO1xuXG4gICAgICAgIGlmIChzcURpc3QoeCwgeSwgcXgsIHF5KSA8PSByMikgcmVzdWx0LnB1c2goaWRzW21dKTtcblxuICAgICAgICBjb25zdCBuZXh0QXhpcyA9IChheGlzICsgMSkgJSAyO1xuXG4gICAgICAgIGlmIChheGlzID09PSAwID8gcXggLSByIDw9IHggOiBxeSAtIHIgPD0geSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChsZWZ0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSAtIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aXMgPT09IDAgPyBxeCArIHIgPj0geCA6IHF5ICsgciA+PSB5KSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG0gKyAxKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gocmlnaHQpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBzcURpc3QoYXgsIGF5LCBieCwgYnkpIHtcbiAgICBjb25zdCBkeCA9IGF4IC0gYng7XG4gICAgY29uc3QgZHkgPSBheSAtIGJ5O1xuICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cbiIsIlxuaW1wb3J0IHNvcnQgZnJvbSAnLi9zb3J0JztcbmltcG9ydCByYW5nZSBmcm9tICcuL3JhbmdlJztcbmltcG9ydCB3aXRoaW4gZnJvbSAnLi93aXRoaW4nO1xuXG5jb25zdCBkZWZhdWx0R2V0WCA9IHAgPT4gcFswXTtcbmNvbnN0IGRlZmF1bHRHZXRZID0gcCA9PiBwWzFdO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBLREJ1c2gge1xuICAgIGNvbnN0cnVjdG9yKHBvaW50cywgZ2V0WCA9IGRlZmF1bHRHZXRYLCBnZXRZID0gZGVmYXVsdEdldFksIG5vZGVTaXplID0gNjQsIEFycmF5VHlwZSA9IEZsb2F0NjRBcnJheSkge1xuICAgICAgICB0aGlzLm5vZGVTaXplID0gbm9kZVNpemU7XG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgICAgIGNvbnN0IEluZGV4QXJyYXlUeXBlID0gcG9pbnRzLmxlbmd0aCA8IDY1NTM2ID8gVWludDE2QXJyYXkgOiBVaW50MzJBcnJheTtcblxuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLmlkcyA9IG5ldyBJbmRleEFycmF5VHlwZShwb2ludHMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHMgPSBuZXcgQXJyYXlUeXBlKHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWRzW2ldID0gaTtcbiAgICAgICAgICAgIGNvb3Jkc1syICogaV0gPSBnZXRYKHBvaW50c1tpXSk7XG4gICAgICAgICAgICBjb29yZHNbMiAqIGkgKyAxXSA9IGdldFkocG9pbnRzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvcnQoaWRzLCBjb29yZHMsIG5vZGVTaXplLCAwLCBpZHMubGVuZ3RoIC0gMSwgMCk7XG4gICAgfVxuXG4gICAgcmFuZ2UobWluWCwgbWluWSwgbWF4WCwgbWF4WSkge1xuICAgICAgICByZXR1cm4gcmFuZ2UodGhpcy5pZHMsIHRoaXMuY29vcmRzLCBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB0aGlzLm5vZGVTaXplKTtcbiAgICB9XG5cbiAgICB3aXRoaW4oeCwgeSwgcikge1xuICAgICAgICByZXR1cm4gd2l0aGluKHRoaXMuaWRzLCB0aGlzLmNvb3JkcywgeCwgeSwgciwgdGhpcy5ub2RlU2l6ZSk7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgS0RCdXNoIGZyb20gJ2tkYnVzaCc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG1pblpvb206IDAsICAgLy8gbWluIHpvb20gdG8gZ2VuZXJhdGUgY2x1c3RlcnMgb25cbiAgICBtYXhab29tOiAxNiwgIC8vIG1heCB6b29tIGxldmVsIHRvIGNsdXN0ZXIgdGhlIHBvaW50cyBvblxuICAgIHJhZGl1czogNDAsICAgLy8gY2x1c3RlciByYWRpdXMgaW4gcGl4ZWxzXG4gICAgZXh0ZW50OiA1MTIsICAvLyB0aWxlIGV4dGVudCAocmFkaXVzIGlzIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gaXQpXG4gICAgbm9kZVNpemU6IDY0LCAvLyBzaXplIG9mIHRoZSBLRC10cmVlIGxlYWYgbm9kZSwgYWZmZWN0cyBwZXJmb3JtYW5jZVxuICAgIGxvZzogZmFsc2UsICAgLy8gd2hldGhlciB0byBsb2cgdGltaW5nIGluZm9cblxuICAgIC8vIGEgcmVkdWNlIGZ1bmN0aW9uIGZvciBjYWxjdWxhdGluZyBjdXN0b20gY2x1c3RlciBwcm9wZXJ0aWVzXG4gICAgcmVkdWNlOiBudWxsLCAvLyAoYWNjdW11bGF0ZWQsIHByb3BzKSA9PiB7IGFjY3VtdWxhdGVkLnN1bSArPSBwcm9wcy5zdW07IH1cblxuICAgIC8vIHByb3BlcnRpZXMgdG8gdXNlIGZvciBpbmRpdmlkdWFsIHBvaW50cyB3aGVuIHJ1bm5pbmcgdGhlIHJlZHVjZXJcbiAgICBtYXA6IHByb3BzID0+IHByb3BzIC8vIHByb3BzID0+ICh7c3VtOiBwcm9wcy5teV92YWx1ZX0pXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXBlcmNsdXN0ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUoZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy50cmVlcyA9IG5ldyBBcnJheSh0aGlzLm9wdGlvbnMubWF4Wm9vbSArIDEpO1xuICAgIH1cblxuICAgIGxvYWQocG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IHtsb2csIG1pblpvb20sIG1heFpvb20sIG5vZGVTaXplfSA9IHRoaXMub3B0aW9ucztcblxuICAgICAgICBpZiAobG9nKSBjb25zb2xlLnRpbWUoJ3RvdGFsIHRpbWUnKTtcblxuICAgICAgICBjb25zdCB0aW1lcklkID0gYHByZXBhcmUgJHsgIHBvaW50cy5sZW5ndGggIH0gcG9pbnRzYDtcbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lKHRpbWVySWQpO1xuXG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgICAgIC8vIGdlbmVyYXRlIGEgY2x1c3RlciBvYmplY3QgZm9yIGVhY2ggcG9pbnQgYW5kIGluZGV4IGlucHV0IHBvaW50cyBpbnRvIGEgS0QtdHJlZVxuICAgICAgICBsZXQgY2x1c3RlcnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcG9pbnRzW2ldLmdlb21ldHJ5KSBjb250aW51ZTtcbiAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2goY3JlYXRlUG9pbnRDbHVzdGVyKHBvaW50c1tpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJlZXNbbWF4Wm9vbSArIDFdID0gbmV3IEtEQnVzaChjbHVzdGVycywgZ2V0WCwgZ2V0WSwgbm9kZVNpemUsIEZsb2F0MzJBcnJheSk7XG5cbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lRW5kKHRpbWVySWQpO1xuXG4gICAgICAgIC8vIGNsdXN0ZXIgcG9pbnRzIG9uIG1heCB6b29tLCB0aGVuIGNsdXN0ZXIgdGhlIHJlc3VsdHMgb24gcHJldmlvdXMgem9vbSwgZXRjLjtcbiAgICAgICAgLy8gcmVzdWx0cyBpbiBhIGNsdXN0ZXIgaGllcmFyY2h5IGFjcm9zcyB6b29tIGxldmVsc1xuICAgICAgICBmb3IgKGxldCB6ID0gbWF4Wm9vbTsgeiA+PSBtaW5ab29tOyB6LS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9ICtEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgc2V0IG9mIGNsdXN0ZXJzIGZvciB0aGUgem9vbSBhbmQgaW5kZXggdGhlbSB3aXRoIGEgS0QtdHJlZVxuICAgICAgICAgICAgY2x1c3RlcnMgPSB0aGlzLl9jbHVzdGVyKGNsdXN0ZXJzLCB6KTtcbiAgICAgICAgICAgIHRoaXMudHJlZXNbel0gPSBuZXcgS0RCdXNoKGNsdXN0ZXJzLCBnZXRYLCBnZXRZLCBub2RlU2l6ZSwgRmxvYXQzMkFycmF5KTtcblxuICAgICAgICAgICAgaWYgKGxvZykgY29uc29sZS5sb2coJ3olZDogJWQgY2x1c3RlcnMgaW4gJWRtcycsIHosIGNsdXN0ZXJzLmxlbmd0aCwgK0RhdGUubm93KCkgLSBub3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lRW5kKCd0b3RhbCB0aW1lJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZ2V0Q2x1c3RlcnMoYmJveCwgem9vbSkge1xuICAgICAgICBsZXQgbWluTG5nID0gKChiYm94WzBdICsgMTgwKSAlIDM2MCArIDM2MCkgJSAzNjAgLSAxODA7XG4gICAgICAgIGNvbnN0IG1pbkxhdCA9IE1hdGgubWF4KC05MCwgTWF0aC5taW4oOTAsIGJib3hbMV0pKTtcbiAgICAgICAgbGV0IG1heExuZyA9IGJib3hbMl0gPT09IDE4MCA/IDE4MCA6ICgoYmJveFsyXSArIDE4MCkgJSAzNjAgKyAzNjApICUgMzYwIC0gMTgwO1xuICAgICAgICBjb25zdCBtYXhMYXQgPSBNYXRoLm1heCgtOTAsIE1hdGgubWluKDkwLCBiYm94WzNdKSk7XG5cbiAgICAgICAgaWYgKGJib3hbMl0gLSBiYm94WzBdID49IDM2MCkge1xuICAgICAgICAgICAgbWluTG5nID0gLTE4MDtcbiAgICAgICAgICAgIG1heExuZyA9IDE4MDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5MbmcgPiBtYXhMbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGVhc3Rlcm5IZW0gPSB0aGlzLmdldENsdXN0ZXJzKFttaW5MbmcsIG1pbkxhdCwgMTgwLCBtYXhMYXRdLCB6b29tKTtcbiAgICAgICAgICAgIGNvbnN0IHdlc3Rlcm5IZW0gPSB0aGlzLmdldENsdXN0ZXJzKFstMTgwLCBtaW5MYXQsIG1heExuZywgbWF4TGF0XSwgem9vbSk7XG4gICAgICAgICAgICByZXR1cm4gZWFzdGVybkhlbS5jb25jYXQod2VzdGVybkhlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20oem9vbSldO1xuICAgICAgICBjb25zdCBpZHMgPSB0cmVlLnJhbmdlKGxuZ1gobWluTG5nKSwgbGF0WShtYXhMYXQpLCBsbmdYKG1heExuZyksIGxhdFkobWluTGF0KSk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gdHJlZS5wb2ludHNbaWRdO1xuICAgICAgICAgICAgY2x1c3RlcnMucHVzaChjLm51bVBvaW50cyA/IGdldENsdXN0ZXJKU09OKGMpIDogdGhpcy5wb2ludHNbYy5pbmRleF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbHVzdGVycztcbiAgICB9XG5cbiAgICBnZXRDaGlsZHJlbihjbHVzdGVySWQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luSWQgPSBjbHVzdGVySWQgPj4gNTtcbiAgICAgICAgY29uc3Qgb3JpZ2luWm9vbSA9IGNsdXN0ZXJJZCAlIDMyO1xuICAgICAgICBjb25zdCBlcnJvck1zZyA9ICdObyBjbHVzdGVyIHdpdGggdGhlIHNwZWNpZmllZCBpZC4nO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlc1tvcmlnaW5ab29tXTtcbiAgICAgICAgaWYgKCFpbmRleCkgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcblxuICAgICAgICBjb25zdCBvcmlnaW4gPSBpbmRleC5wb2ludHNbb3JpZ2luSWRdO1xuICAgICAgICBpZiAoIW9yaWdpbikgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcblxuICAgICAgICBjb25zdCByID0gdGhpcy5vcHRpb25zLnJhZGl1cyAvICh0aGlzLm9wdGlvbnMuZXh0ZW50ICogTWF0aC5wb3coMiwgb3JpZ2luWm9vbSAtIDEpKTtcbiAgICAgICAgY29uc3QgaWRzID0gaW5kZXgud2l0aGluKG9yaWdpbi54LCBvcmlnaW4ueSwgcik7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gaW5kZXgucG9pbnRzW2lkXTtcbiAgICAgICAgICAgIGlmIChjLnBhcmVudElkID09PSBjbHVzdGVySWQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGMubnVtUG9pbnRzID8gZ2V0Q2x1c3RlckpTT04oYykgOiB0aGlzLnBvaW50c1tjLmluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG5cbiAgICBnZXRMZWF2ZXMoY2x1c3RlcklkLCBsaW1pdCwgb2Zmc2V0KSB7XG4gICAgICAgIGxpbWl0ID0gbGltaXQgfHwgMTA7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgICAgIGNvbnN0IGxlYXZlcyA9IFtdO1xuICAgICAgICB0aGlzLl9hcHBlbmRMZWF2ZXMobGVhdmVzLCBjbHVzdGVySWQsIGxpbWl0LCBvZmZzZXQsIDApO1xuXG4gICAgICAgIHJldHVybiBsZWF2ZXM7XG4gICAgfVxuXG4gICAgZ2V0VGlsZSh6LCB4LCB5KSB7XG4gICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbSh6KV07XG4gICAgICAgIGNvbnN0IHoyID0gTWF0aC5wb3coMiwgeik7XG4gICAgICAgIGNvbnN0IHtleHRlbnQsIHJhZGl1c30gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHAgPSByYWRpdXMgLyBleHRlbnQ7XG4gICAgICAgIGNvbnN0IHRvcCA9ICh5IC0gcCkgLyB6MjtcbiAgICAgICAgY29uc3QgYm90dG9tID0gKHkgKyAxICsgcCkgLyB6MjtcblxuICAgICAgICBjb25zdCB0aWxlID0ge1xuICAgICAgICAgICAgZmVhdHVyZXM6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fYWRkVGlsZUZlYXR1cmVzKFxuICAgICAgICAgICAgdHJlZS5yYW5nZSgoeCAtIHApIC8gejIsIHRvcCwgKHggKyAxICsgcCkgLyB6MiwgYm90dG9tKSxcbiAgICAgICAgICAgIHRyZWUucG9pbnRzLCB4LCB5LCB6MiwgdGlsZSk7XG5cbiAgICAgICAgaWYgKHggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhcbiAgICAgICAgICAgICAgICB0cmVlLnJhbmdlKDEgLSBwIC8gejIsIHRvcCwgMSwgYm90dG9tKSxcbiAgICAgICAgICAgICAgICB0cmVlLnBvaW50cywgejIsIHksIHoyLCB0aWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCA9PT0gejIgLSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRUaWxlRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgdHJlZS5yYW5nZSgwLCB0b3AsIHAgLyB6MiwgYm90dG9tKSxcbiAgICAgICAgICAgICAgICB0cmVlLnBvaW50cywgLTEsIHksIHoyLCB0aWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aWxlLmZlYXR1cmVzLmxlbmd0aCA/IHRpbGUgOiBudWxsO1xuICAgIH1cblxuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKGNsdXN0ZXJJZCkge1xuICAgICAgICBsZXQgY2x1c3Rlclpvb20gPSAoY2x1c3RlcklkICUgMzIpIC0gMTtcbiAgICAgICAgd2hpbGUgKGNsdXN0ZXJab29tIDw9IHRoaXMub3B0aW9ucy5tYXhab29tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oY2x1c3RlcklkKTtcbiAgICAgICAgICAgIGNsdXN0ZXJab29tKys7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9PSAxKSBicmVhaztcbiAgICAgICAgICAgIGNsdXN0ZXJJZCA9IGNoaWxkcmVuWzBdLnByb3BlcnRpZXMuY2x1c3Rlcl9pZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2x1c3Rlclpvb207XG4gICAgfVxuXG4gICAgX2FwcGVuZExlYXZlcyhyZXN1bHQsIGNsdXN0ZXJJZCwgbGltaXQsIG9mZnNldCwgc2tpcHBlZCkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oY2x1c3RlcklkKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGNoaWxkLnByb3BlcnRpZXM7XG5cbiAgICAgICAgICAgIGlmIChwcm9wcyAmJiBwcm9wcy5jbHVzdGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQgKyBwcm9wcy5wb2ludF9jb3VudCA8PSBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUgd2hvbGUgY2x1c3RlclxuICAgICAgICAgICAgICAgICAgICBza2lwcGVkICs9IHByb3BzLnBvaW50X2NvdW50O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVudGVyIHRoZSBjbHVzdGVyXG4gICAgICAgICAgICAgICAgICAgIHNraXBwZWQgPSB0aGlzLl9hcHBlbmRMZWF2ZXMocmVzdWx0LCBwcm9wcy5jbHVzdGVyX2lkLCBsaW1pdCwgb2Zmc2V0LCBza2lwcGVkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhpdCB0aGUgY2x1c3RlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2tpcHBlZCA8IG9mZnNldCkge1xuICAgICAgICAgICAgICAgIC8vIHNraXAgYSBzaW5nbGUgcG9pbnRcbiAgICAgICAgICAgICAgICBza2lwcGVkKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBhIHNpbmdsZSBwb2ludFxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSBsaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2tpcHBlZDtcbiAgICB9XG5cbiAgICBfYWRkVGlsZUZlYXR1cmVzKGlkcywgcG9pbnRzLCB4LCB5LCB6MiwgdGlsZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgZiA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAxLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBbW1xuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQgKiAoYy54ICogejIgLSB4KSksXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCAqIChjLnkgKiB6MiAtIHkpKVxuICAgICAgICAgICAgICAgIF1dLFxuICAgICAgICAgICAgICAgIHRhZ3M6IGMubnVtUG9pbnRzID8gZ2V0Q2x1c3RlclByb3BlcnRpZXMoYykgOiB0aGlzLnBvaW50c1tjLmluZGV4XS5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaWQgPSBjLm51bVBvaW50cyA/IGMuaWQgOiB0aGlzLnBvaW50c1tjLmluZGV4XS5pZDtcbiAgICAgICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZi5pZCA9IGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGlsZS5mZWF0dXJlcy5wdXNoKGYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2xpbWl0Wm9vbSh6KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMubWluWm9vbSwgTWF0aC5taW4oeiwgdGhpcy5vcHRpb25zLm1heFpvb20gKyAxKSk7XG4gICAgfVxuXG4gICAgX2NsdXN0ZXIocG9pbnRzLCB6b29tKSB7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJzID0gW107XG4gICAgICAgIGNvbnN0IHtyYWRpdXMsIGV4dGVudCwgcmVkdWNlfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgciA9IHJhZGl1cyAvIChleHRlbnQgKiBNYXRoLnBvdygyLCB6b29tKSk7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggcG9pbnRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwb2ludHNbaV07XG4gICAgICAgICAgICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlIHBvaW50IGF0IHRoaXMgem9vbSBsZXZlbCwgc2tpcCBpdFxuICAgICAgICAgICAgaWYgKHAuem9vbSA8PSB6b29tKSBjb250aW51ZTtcbiAgICAgICAgICAgIHAuem9vbSA9IHpvb207XG5cbiAgICAgICAgICAgIC8vIGZpbmQgYWxsIG5lYXJieSBwb2ludHNcbiAgICAgICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVzW3pvb20gKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5laWdoYm9ySWRzID0gdHJlZS53aXRoaW4ocC54LCBwLnksIHIpO1xuXG4gICAgICAgICAgICBsZXQgbnVtUG9pbnRzID0gcC5udW1Qb2ludHMgfHwgMTtcbiAgICAgICAgICAgIGxldCB3eCA9IHAueCAqIG51bVBvaW50cztcbiAgICAgICAgICAgIGxldCB3eSA9IHAueSAqIG51bVBvaW50cztcblxuICAgICAgICAgICAgbGV0IGNsdXN0ZXJQcm9wZXJ0aWVzID0gcmVkdWNlICYmIG51bVBvaW50cyA+IDEgPyB0aGlzLl9tYXAocCwgdHJ1ZSkgOiBudWxsO1xuXG4gICAgICAgICAgICAvLyBlbmNvZGUgYm90aCB6b29tIGFuZCBwb2ludCBpbmRleCBvbiB3aGljaCB0aGUgY2x1c3RlciBvcmlnaW5hdGVkXG4gICAgICAgICAgICBjb25zdCBpZCA9IChpIDw8IDUpICsgKHpvb20gKyAxKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBuZWlnaGJvcklkIG9mIG5laWdoYm9ySWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IHRyZWUucG9pbnRzW25laWdoYm9ySWRdO1xuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgbmVpZ2hib3JzIHRoYXQgYXJlIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgICAgICAgICAgICAgaWYgKGIuem9vbSA8PSB6b29tKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBiLnpvb20gPSB6b29tOyAvLyBzYXZlIHRoZSB6b29tIChzbyBpdCBkb2Vzbid0IGdldCBwcm9jZXNzZWQgdHdpY2UpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBudW1Qb2ludHMyID0gYi5udW1Qb2ludHMgfHwgMTtcbiAgICAgICAgICAgICAgICB3eCArPSBiLnggKiBudW1Qb2ludHMyOyAvLyBhY2N1bXVsYXRlIGNvb3JkaW5hdGVzIGZvciBjYWxjdWxhdGluZyB3ZWlnaHRlZCBjZW50ZXJcbiAgICAgICAgICAgICAgICB3eSArPSBiLnkgKiBudW1Qb2ludHMyO1xuXG4gICAgICAgICAgICAgICAgbnVtUG9pbnRzICs9IG51bVBvaW50czI7XG4gICAgICAgICAgICAgICAgYi5wYXJlbnRJZCA9IGlkO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlZHVjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNsdXN0ZXJQcm9wZXJ0aWVzKSBjbHVzdGVyUHJvcGVydGllcyA9IHRoaXMuX21hcChwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVkdWNlKGNsdXN0ZXJQcm9wZXJ0aWVzLCB0aGlzLl9tYXAoYikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG51bVBvaW50cyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2gocCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHAucGFyZW50SWQgPSBpZDtcbiAgICAgICAgICAgICAgICBjbHVzdGVycy5wdXNoKGNyZWF0ZUNsdXN0ZXIod3ggLyBudW1Qb2ludHMsIHd5IC8gbnVtUG9pbnRzLCBpZCwgbnVtUG9pbnRzLCBjbHVzdGVyUHJvcGVydGllcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsdXN0ZXJzO1xuICAgIH1cblxuICAgIF9tYXAocG9pbnQsIGNsb25lKSB7XG4gICAgICAgIGlmIChwb2ludC5udW1Qb2ludHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZSA/IGV4dGVuZCh7fSwgcG9pbnQucHJvcGVydGllcykgOiBwb2ludC5wcm9wZXJ0aWVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsID0gdGhpcy5wb2ludHNbcG9pbnQuaW5kZXhdLnByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMub3B0aW9ucy5tYXAob3JpZ2luYWwpO1xuICAgICAgICByZXR1cm4gY2xvbmUgJiYgcmVzdWx0ID09PSBvcmlnaW5hbCA/IGV4dGVuZCh7fSwgcmVzdWx0KSA6IHJlc3VsdDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsdXN0ZXIoeCwgeSwgaWQsIG51bVBvaW50cywgcHJvcGVydGllcykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHgsIC8vIHdlaWdodGVkIGNsdXN0ZXIgY2VudGVyXG4gICAgICAgIHksXG4gICAgICAgIHpvb206IEluZmluaXR5LCAvLyB0aGUgbGFzdCB6b29tIHRoZSBjbHVzdGVyIHdhcyBwcm9jZXNzZWQgYXRcbiAgICAgICAgaWQsIC8vIGVuY29kZXMgaW5kZXggb2YgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBjbHVzdGVyIGFuZCBpdHMgem9vbSBsZXZlbFxuICAgICAgICBwYXJlbnRJZDogLTEsIC8vIHBhcmVudCBjbHVzdGVyIGlkXG4gICAgICAgIG51bVBvaW50cyxcbiAgICAgICAgcHJvcGVydGllc1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvaW50Q2x1c3RlcihwLCBpZCkge1xuICAgIGNvbnN0IFt4LCB5XSA9IHAuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogbG5nWCh4KSwgLy8gcHJvamVjdGVkIHBvaW50IGNvb3JkaW5hdGVzXG4gICAgICAgIHk6IGxhdFkoeSksXG4gICAgICAgIHpvb206IEluZmluaXR5LCAvLyB0aGUgbGFzdCB6b29tIHRoZSBwb2ludCB3YXMgcHJvY2Vzc2VkIGF0XG4gICAgICAgIGluZGV4OiBpZCwgLy8gaW5kZXggb2YgdGhlIHNvdXJjZSBmZWF0dXJlIGluIHRoZSBvcmlnaW5hbCBpbnB1dCBhcnJheSxcbiAgICAgICAgcGFyZW50SWQ6IC0xIC8vIHBhcmVudCBjbHVzdGVyIGlkXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2x1c3RlckpTT04oY2x1c3Rlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgICAgaWQ6IGNsdXN0ZXIuaWQsXG4gICAgICAgIHByb3BlcnRpZXM6IGdldENsdXN0ZXJQcm9wZXJ0aWVzKGNsdXN0ZXIpLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbeExuZyhjbHVzdGVyLngpLCB5TGF0KGNsdXN0ZXIueSldXG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbHVzdGVyUHJvcGVydGllcyhjbHVzdGVyKSB7XG4gICAgY29uc3QgY291bnQgPSBjbHVzdGVyLm51bVBvaW50cztcbiAgICBjb25zdCBhYmJyZXYgPVxuICAgICAgICBjb3VudCA+PSAxMDAwMCA/IGAke01hdGgucm91bmQoY291bnQgLyAxMDAwKSAgfWtgIDpcbiAgICAgICAgY291bnQgPj0gMTAwMCA/IGAke01hdGgucm91bmQoY291bnQgLyAxMDApIC8gMTAgIH1rYCA6IGNvdW50O1xuICAgIHJldHVybiBleHRlbmQoZXh0ZW5kKHt9LCBjbHVzdGVyLnByb3BlcnRpZXMpLCB7XG4gICAgICAgIGNsdXN0ZXI6IHRydWUsXG4gICAgICAgIGNsdXN0ZXJfaWQ6IGNsdXN0ZXIuaWQsXG4gICAgICAgIHBvaW50X2NvdW50OiBjb3VudCxcbiAgICAgICAgcG9pbnRfY291bnRfYWJicmV2aWF0ZWQ6IGFiYnJldlxuICAgIH0pO1xufVxuXG4vLyBsb25naXR1ZGUvbGF0aXR1ZGUgdG8gc3BoZXJpY2FsIG1lcmNhdG9yIGluIFswLi4xXSByYW5nZVxuZnVuY3Rpb24gbG5nWChsbmcpIHtcbiAgICByZXR1cm4gbG5nIC8gMzYwICsgMC41O1xufVxuZnVuY3Rpb24gbGF0WShsYXQpIHtcbiAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihsYXQgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICBjb25zdCB5ID0gKDAuNSAtIDAuMjUgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gTWF0aC5QSSk7XG4gICAgcmV0dXJuIHkgPCAwID8gMCA6IHkgPiAxID8gMSA6IHk7XG59XG5cbi8vIHNwaGVyaWNhbCBtZXJjYXRvciB0byBsb25naXR1ZGUvbGF0aXR1ZGVcbmZ1bmN0aW9uIHhMbmcoeCkge1xuICAgIHJldHVybiAoeCAtIDAuNSkgKiAzNjA7XG59XG5mdW5jdGlvbiB5TGF0KHkpIHtcbiAgICBjb25zdCB5MiA9ICgxODAgLSB5ICogMzYwKSAqIE1hdGguUEkgLyAxODA7XG4gICAgcmV0dXJuIDM2MCAqIE1hdGguYXRhbihNYXRoLmV4cCh5MikpIC8gTWF0aC5QSSAtIDkwO1xufVxuXG5mdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjKSB7XG4gICAgZm9yIChjb25zdCBpZCBpbiBzcmMpIGRlc3RbaWRdID0gc3JjW2lkXTtcbiAgICByZXR1cm4gZGVzdDtcbn1cblxuZnVuY3Rpb24gZ2V0WChwKSB7XG4gICAgcmV0dXJuIHAueDtcbn1cbmZ1bmN0aW9uIGdldFkocCkge1xuICAgIHJldHVybiBwLnk7XG59XG4iLCJcbi8vIGNhbGN1bGF0ZSBzaW1wbGlmaWNhdGlvbiBkYXRhIHVzaW5nIG9wdGltaXplZCBEb3VnbGFzLVBldWNrZXIgYWxnb3JpdGhtXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNpbXBsaWZ5KGNvb3JkcywgZmlyc3QsIGxhc3QsIHNxVG9sZXJhbmNlKSB7XG4gICAgdmFyIG1heFNxRGlzdCA9IHNxVG9sZXJhbmNlO1xuICAgIHZhciBtaWQgPSAobGFzdCAtIGZpcnN0KSA+PiAxO1xuICAgIHZhciBtaW5Qb3NUb01pZCA9IGxhc3QgLSBmaXJzdDtcbiAgICB2YXIgaW5kZXg7XG5cbiAgICB2YXIgYXggPSBjb29yZHNbZmlyc3RdO1xuICAgIHZhciBheSA9IGNvb3Jkc1tmaXJzdCArIDFdO1xuICAgIHZhciBieCA9IGNvb3Jkc1tsYXN0XTtcbiAgICB2YXIgYnkgPSBjb29yZHNbbGFzdCArIDFdO1xuXG4gICAgZm9yICh2YXIgaSA9IGZpcnN0ICsgMzsgaSA8IGxhc3Q7IGkgKz0gMykge1xuICAgICAgICB2YXIgZCA9IGdldFNxU2VnRGlzdChjb29yZHNbaV0sIGNvb3Jkc1tpICsgMV0sIGF4LCBheSwgYngsIGJ5KTtcblxuICAgICAgICBpZiAoZCA+IG1heFNxRGlzdCkge1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgbWF4U3FEaXN0ID0gZDtcblxuICAgICAgICB9IGVsc2UgaWYgKGQgPT09IG1heFNxRGlzdCkge1xuICAgICAgICAgICAgLy8gYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB3ZSBjaG9vc2UgYSBwaXZvdCBjbG9zZSB0byB0aGUgbWlkZGxlIG9mIHRoZSBsaXN0LFxuICAgICAgICAgICAgLy8gcmVkdWNpbmcgcmVjdXJzaW9uIGRlcHRoLCBmb3IgY2VydGFpbiBkZWdlbmVyYXRlIGlucHV0c1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9nZW9qc29uLXZ0L2lzc3Vlcy8xMDRcbiAgICAgICAgICAgIHZhciBwb3NUb01pZCA9IE1hdGguYWJzKGkgLSBtaWQpO1xuICAgICAgICAgICAgaWYgKHBvc1RvTWlkIDwgbWluUG9zVG9NaWQpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgbWluUG9zVG9NaWQgPSBwb3NUb01pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXhTcURpc3QgPiBzcVRvbGVyYW5jZSkge1xuICAgICAgICBpZiAoaW5kZXggLSBmaXJzdCA+IDMpIHNpbXBsaWZ5KGNvb3JkcywgZmlyc3QsIGluZGV4LCBzcVRvbGVyYW5jZSk7XG4gICAgICAgIGNvb3Jkc1tpbmRleCArIDJdID0gbWF4U3FEaXN0O1xuICAgICAgICBpZiAobGFzdCAtIGluZGV4ID4gMykgc2ltcGxpZnkoY29vcmRzLCBpbmRleCwgbGFzdCwgc3FUb2xlcmFuY2UpO1xuICAgIH1cbn1cblxuLy8gc3F1YXJlIGRpc3RhbmNlIGZyb20gYSBwb2ludCB0byBhIHNlZ21lbnRcbmZ1bmN0aW9uIGdldFNxU2VnRGlzdChweCwgcHksIHgsIHksIGJ4LCBieSkge1xuXG4gICAgdmFyIGR4ID0gYnggLSB4O1xuICAgIHZhciBkeSA9IGJ5IC0geTtcblxuICAgIGlmIChkeCAhPT0gMCB8fCBkeSAhPT0gMCkge1xuXG4gICAgICAgIHZhciB0ID0gKChweCAtIHgpICogZHggKyAocHkgLSB5KSAqIGR5KSAvIChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICAgICAgaWYgKHQgPiAxKSB7XG4gICAgICAgICAgICB4ID0gYng7XG4gICAgICAgICAgICB5ID0gYnk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0ID4gMCkge1xuICAgICAgICAgICAgeCArPSBkeCAqIHQ7XG4gICAgICAgICAgICB5ICs9IGR5ICogdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGR4ID0gcHggLSB4O1xuICAgIGR5ID0gcHkgLSB5O1xuXG4gICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVGZWF0dXJlKGlkLCB0eXBlLCBnZW9tLCB0YWdzKSB7XG4gICAgdmFyIGZlYXR1cmUgPSB7XG4gICAgICAgIGlkOiB0eXBlb2YgaWQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IGlkLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBnZW9tZXRyeTogZ2VvbSxcbiAgICAgICAgdGFnczogdGFncyxcbiAgICAgICAgbWluWDogSW5maW5pdHksXG4gICAgICAgIG1pblk6IEluZmluaXR5LFxuICAgICAgICBtYXhYOiAtSW5maW5pdHksXG4gICAgICAgIG1heFk6IC1JbmZpbml0eVxuICAgIH07XG4gICAgY2FsY0JCb3goZmVhdHVyZSk7XG4gICAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbmZ1bmN0aW9uIGNhbGNCQm94KGZlYXR1cmUpIHtcbiAgICB2YXIgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnk7XG4gICAgdmFyIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcgfHwgdHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIGNhbGNMaW5lQkJveChmZWF0dXJlLCBnZW9tKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvbHlnb24nIHx8IHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2FsY0xpbmVCQm94KGZlYXR1cmUsIGdlb21baV0pO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdlb21baV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjYWxjTGluZUJCb3goZmVhdHVyZSwgZ2VvbVtpXVtqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGNMaW5lQkJveChmZWF0dXJlLCBnZW9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGZlYXR1cmUubWluWCA9IE1hdGgubWluKGZlYXR1cmUubWluWCwgZ2VvbVtpXSk7XG4gICAgICAgIGZlYXR1cmUubWluWSA9IE1hdGgubWluKGZlYXR1cmUubWluWSwgZ2VvbVtpICsgMV0pO1xuICAgICAgICBmZWF0dXJlLm1heFggPSBNYXRoLm1heChmZWF0dXJlLm1heFgsIGdlb21baV0pO1xuICAgICAgICBmZWF0dXJlLm1heFkgPSBNYXRoLm1heChmZWF0dXJlLm1heFksIGdlb21baSArIDFdKTtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBzaW1wbGlmeSBmcm9tICcuL3NpbXBsaWZ5JztcbmltcG9ydCBjcmVhdGVGZWF0dXJlIGZyb20gJy4vZmVhdHVyZSc7XG5cbi8vIGNvbnZlcnRzIEdlb0pTT04gZmVhdHVyZSBpbnRvIGFuIGludGVybWVkaWF0ZSBwcm9qZWN0ZWQgSlNPTiB2ZWN0b3IgZm9ybWF0IHdpdGggc2ltcGxpZmljYXRpb24gZGF0YVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb252ZXJ0KGRhdGEsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBbXTtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGRhdGEuZmVhdHVyZXNbaV0sIG9wdGlvbnMsIGkpO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmUnKSB7XG4gICAgICAgIGNvbnZlcnRGZWF0dXJlKGZlYXR1cmVzLCBkYXRhLCBvcHRpb25zKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNpbmdsZSBnZW9tZXRyeSBvciBhIGdlb21ldHJ5IGNvbGxlY3Rpb25cbiAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIHtnZW9tZXRyeTogZGF0YX0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlcztcbn1cblxuZnVuY3Rpb24gY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGdlb2pzb24sIG9wdGlvbnMsIGluZGV4KSB7XG4gICAgaWYgKCFnZW9qc29uLmdlb21ldHJ5KSByZXR1cm47XG5cbiAgICB2YXIgY29vcmRzID0gZ2VvanNvbi5nZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICB2YXIgdHlwZSA9IGdlb2pzb24uZ2VvbWV0cnkudHlwZTtcbiAgICB2YXIgdG9sZXJhbmNlID0gTWF0aC5wb3cob3B0aW9ucy50b2xlcmFuY2UgLyAoKDEgPDwgb3B0aW9ucy5tYXhab29tKSAqIG9wdGlvbnMuZXh0ZW50KSwgMik7XG4gICAgdmFyIGdlb21ldHJ5ID0gW107XG4gICAgdmFyIGlkID0gZ2VvanNvbi5pZDtcbiAgICBpZiAob3B0aW9ucy5wcm9tb3RlSWQpIHtcbiAgICAgICAgaWQgPSBnZW9qc29uLnByb3BlcnRpZXNbb3B0aW9ucy5wcm9tb3RlSWRdO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5nZW5lcmF0ZUlkKSB7XG4gICAgICAgIGlkID0gaW5kZXggfHwgMDtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdQb2ludCcpIHtcbiAgICAgICAgY29udmVydFBvaW50KGNvb3JkcywgZ2VvbWV0cnkpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnZlcnRQb2ludChjb29yZHNbaV0sIGdlb21ldHJ5KTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgY29udmVydExpbmUoY29vcmRzLCBnZW9tZXRyeSwgdG9sZXJhbmNlLCBmYWxzZSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmxpbmVNZXRyaWNzKSB7XG4gICAgICAgICAgICAvLyBleHBsb2RlIGludG8gbGluZXN0cmluZ3MgdG8gYmUgYWJsZSB0byB0cmFjayBtZXRyaWNzXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgICAgICBjb252ZXJ0TGluZShjb29yZHNbaV0sIGdlb21ldHJ5LCB0b2xlcmFuY2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKGNyZWF0ZUZlYXR1cmUoaWQsICdMaW5lU3RyaW5nJywgZ2VvbWV0cnksIGdlb2pzb24ucHJvcGVydGllcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udmVydExpbmVzKGNvb3JkcywgZ2VvbWV0cnksIHRvbGVyYW5jZSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICBjb252ZXJ0TGluZXMoY29vcmRzLCBnZW9tZXRyeSwgdG9sZXJhbmNlLCB0cnVlKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHBvbHlnb24gPSBbXTtcbiAgICAgICAgICAgIGNvbnZlcnRMaW5lcyhjb29yZHNbaV0sIHBvbHlnb24sIHRvbGVyYW5jZSwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW9tZXRyeS5wdXNoKHBvbHlnb24pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvanNvbi5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogZ2VvanNvbi5nZW9tZXRyeS5nZW9tZXRyaWVzW2ldLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGdlb2pzb24ucHJvcGVydGllc1xuICAgICAgICAgICAgfSwgb3B0aW9ucywgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgZmVhdHVyZXMucHVzaChjcmVhdGVGZWF0dXJlKGlkLCB0eXBlLCBnZW9tZXRyeSwgZ2VvanNvbi5wcm9wZXJ0aWVzKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQb2ludChjb29yZHMsIG91dCkge1xuICAgIG91dC5wdXNoKHByb2plY3RYKGNvb3Jkc1swXSkpO1xuICAgIG91dC5wdXNoKHByb2plY3RZKGNvb3Jkc1sxXSkpO1xuICAgIG91dC5wdXNoKDApO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0TGluZShyaW5nLCBvdXQsIHRvbGVyYW5jZSwgaXNQb2x5Z29uKSB7XG4gICAgdmFyIHgwLCB5MDtcbiAgICB2YXIgc2l6ZSA9IDA7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHggPSBwcm9qZWN0WChyaW5nW2pdWzBdKTtcbiAgICAgICAgdmFyIHkgPSBwcm9qZWN0WShyaW5nW2pdWzFdKTtcblxuICAgICAgICBvdXQucHVzaCh4KTtcbiAgICAgICAgb3V0LnB1c2goeSk7XG4gICAgICAgIG91dC5wdXNoKDApO1xuXG4gICAgICAgIGlmIChqID4gMCkge1xuICAgICAgICAgICAgaWYgKGlzUG9seWdvbikge1xuICAgICAgICAgICAgICAgIHNpemUgKz0gKHgwICogeSAtIHggKiB5MCkgLyAyOyAvLyBhcmVhXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpemUgKz0gTWF0aC5zcXJ0KE1hdGgucG93KHggLSB4MCwgMikgKyBNYXRoLnBvdyh5IC0geTAsIDIpKTsgLy8gbGVuZ3RoXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeDAgPSB4O1xuICAgICAgICB5MCA9IHk7XG4gICAgfVxuXG4gICAgdmFyIGxhc3QgPSBvdXQubGVuZ3RoIC0gMztcbiAgICBvdXRbMl0gPSAxO1xuICAgIHNpbXBsaWZ5KG91dCwgMCwgbGFzdCwgdG9sZXJhbmNlKTtcbiAgICBvdXRbbGFzdCArIDJdID0gMTtcblxuICAgIG91dC5zaXplID0gTWF0aC5hYnMoc2l6ZSk7XG4gICAgb3V0LnN0YXJ0ID0gMDtcbiAgICBvdXQuZW5kID0gb3V0LnNpemU7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRMaW5lcyhyaW5ncywgb3V0LCB0b2xlcmFuY2UsIGlzUG9seWdvbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGdlb20gPSBbXTtcbiAgICAgICAgY29udmVydExpbmUocmluZ3NbaV0sIGdlb20sIHRvbGVyYW5jZSwgaXNQb2x5Z29uKTtcbiAgICAgICAgb3V0LnB1c2goZ2VvbSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcm9qZWN0WCh4KSB7XG4gICAgcmV0dXJuIHggLyAzNjAgKyAwLjU7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RZKHkpIHtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oeSAqIE1hdGguUEkgLyAxODApO1xuICAgIHZhciB5MiA9IDAuNSAtIDAuMjUgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gTWF0aC5QSTtcbiAgICByZXR1cm4geTIgPCAwID8gMCA6IHkyID4gMSA/IDEgOiB5Mjtcbn1cbiIsIlxuaW1wb3J0IGNyZWF0ZUZlYXR1cmUgZnJvbSAnLi9mZWF0dXJlJztcblxuLyogY2xpcCBmZWF0dXJlcyBiZXR3ZWVuIHR3byBheGlzLXBhcmFsbGVsIGxpbmVzOlxuICogICAgIHwgICAgICAgIHxcbiAqICBfX198X19fICAgICB8ICAgICAvXG4gKiAvICAgfCAgIFxcX19fX3xfX19fL1xuICogICAgIHwgICAgICAgIHxcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjbGlwKGZlYXR1cmVzLCBzY2FsZSwgazEsIGsyLCBheGlzLCBtaW5BbGwsIG1heEFsbCwgb3B0aW9ucykge1xuXG4gICAgazEgLz0gc2NhbGU7XG4gICAgazIgLz0gc2NhbGU7XG5cbiAgICBpZiAobWluQWxsID49IGsxICYmIG1heEFsbCA8IGsyKSByZXR1cm4gZmVhdHVyZXM7IC8vIHRyaXZpYWwgYWNjZXB0XG4gICAgZWxzZSBpZiAobWF4QWxsIDwgazEgfHwgbWluQWxsID49IGsyKSByZXR1cm4gbnVsbDsgLy8gdHJpdmlhbCByZWplY3RcblxuICAgIHZhciBjbGlwcGVkID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlc1tpXTtcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gZmVhdHVyZS5nZW9tZXRyeTtcbiAgICAgICAgdmFyIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgdmFyIG1pbiA9IGF4aXMgPT09IDAgPyBmZWF0dXJlLm1pblggOiBmZWF0dXJlLm1pblk7XG4gICAgICAgIHZhciBtYXggPSBheGlzID09PSAwID8gZmVhdHVyZS5tYXhYIDogZmVhdHVyZS5tYXhZO1xuXG4gICAgICAgIGlmIChtaW4gPj0gazEgJiYgbWF4IDwgazIpIHsgLy8gdHJpdmlhbCBhY2NlcHRcbiAgICAgICAgICAgIGNsaXBwZWQucHVzaChmZWF0dXJlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG1heCA8IGsxIHx8IG1pbiA+PSBrMikgeyAvLyB0cml2aWFsIHJlamVjdFxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV3R2VvbWV0cnkgPSBbXTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgICAgIGNsaXBQb2ludHMoZ2VvbWV0cnksIG5ld0dlb21ldHJ5LCBrMSwgazIsIGF4aXMpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICBjbGlwTGluZShnZW9tZXRyeSwgbmV3R2VvbWV0cnksIGsxLCBrMiwgYXhpcywgZmFsc2UsIG9wdGlvbnMubGluZU1ldHJpY3MpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgIGNsaXBMaW5lcyhnZW9tZXRyeSwgbmV3R2VvbWV0cnksIGsxLCBrMiwgYXhpcywgZmFsc2UpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgICAgICBjbGlwTGluZXMoZ2VvbWV0cnksIG5ld0dlb21ldHJ5LCBrMSwgazIsIGF4aXMsIHRydWUpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9seWdvbiA9IFtdO1xuICAgICAgICAgICAgICAgIGNsaXBMaW5lcyhnZW9tZXRyeVtqXSwgcG9seWdvbiwgazEsIGsyLCBheGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seWdvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3R2VvbWV0cnkubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW5lTWV0cmljcyAmJiB0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbmV3R2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpcHBlZC5wdXNoKGNyZWF0ZUZlYXR1cmUoZmVhdHVyZS5pZCwgdHlwZSwgbmV3R2VvbWV0cnlbal0sIGZlYXR1cmUudGFncykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChuZXdHZW9tZXRyeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdMaW5lU3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBuZXdHZW9tZXRyeVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gJ011bHRpTGluZVN0cmluZyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgdHlwZSA9IG5ld0dlb21ldHJ5Lmxlbmd0aCA9PT0gMyA/ICdQb2ludCcgOiAnTXVsdGlQb2ludCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsaXBwZWQucHVzaChjcmVhdGVGZWF0dXJlKGZlYXR1cmUuaWQsIHR5cGUsIG5ld0dlb21ldHJ5LCBmZWF0dXJlLnRhZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGlwcGVkLmxlbmd0aCA/IGNsaXBwZWQgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBjbGlwUG9pbnRzKGdlb20sIG5ld0dlb20sIGsxLCBrMiwgYXhpcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB2YXIgYSA9IGdlb21baSArIGF4aXNdO1xuXG4gICAgICAgIGlmIChhID49IGsxICYmIGEgPD0gazIpIHtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChnZW9tW2ldKTtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChnZW9tW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXdHZW9tLnB1c2goZ2VvbVtpICsgMl0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjbGlwTGluZShnZW9tLCBuZXdHZW9tLCBrMSwgazIsIGF4aXMsIGlzUG9seWdvbiwgdHJhY2tNZXRyaWNzKSB7XG5cbiAgICB2YXIgc2xpY2UgPSBuZXdTbGljZShnZW9tKTtcbiAgICB2YXIgaW50ZXJzZWN0ID0gYXhpcyA9PT0gMCA/IGludGVyc2VjdFggOiBpbnRlcnNlY3RZO1xuICAgIHZhciBsZW4gPSBnZW9tLnN0YXJ0O1xuICAgIHZhciBzZWdMZW4sIHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoIC0gMzsgaSArPSAzKSB7XG4gICAgICAgIHZhciBheCA9IGdlb21baV07XG4gICAgICAgIHZhciBheSA9IGdlb21baSArIDFdO1xuICAgICAgICB2YXIgYXogPSBnZW9tW2kgKyAyXTtcbiAgICAgICAgdmFyIGJ4ID0gZ2VvbVtpICsgM107XG4gICAgICAgIHZhciBieSA9IGdlb21baSArIDRdO1xuICAgICAgICB2YXIgYSA9IGF4aXMgPT09IDAgPyBheCA6IGF5O1xuICAgICAgICB2YXIgYiA9IGF4aXMgPT09IDAgPyBieCA6IGJ5O1xuICAgICAgICB2YXIgZXhpdGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2VnTGVuID0gTWF0aC5zcXJ0KE1hdGgucG93KGF4IC0gYngsIDIpICsgTWF0aC5wb3coYXkgLSBieSwgMikpO1xuXG4gICAgICAgIGlmIChhIDwgazEpIHtcbiAgICAgICAgICAgIC8vIC0tLXwtLT4gIHwgKGxpbmUgZW50ZXJzIHRoZSBjbGlwIHJlZ2lvbiBmcm9tIHRoZSBsZWZ0KVxuICAgICAgICAgICAgaWYgKGIgPiBrMSkge1xuICAgICAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMSk7XG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2Uuc3RhcnQgPSBsZW4gKyBzZWdMZW4gKiB0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGEgPiBrMikge1xuICAgICAgICAgICAgLy8gfCAgPC0tfC0tLSAobGluZSBlbnRlcnMgdGhlIGNsaXAgcmVnaW9uIGZyb20gdGhlIHJpZ2h0KVxuICAgICAgICAgICAgaWYgKGIgPCBrMikge1xuICAgICAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMik7XG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2Uuc3RhcnQgPSBsZW4gKyBzZWdMZW4gKiB0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWRkUG9pbnQoc2xpY2UsIGF4LCBheSwgYXopO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiIDwgazEgJiYgYSA+PSBrMSkge1xuICAgICAgICAgICAgLy8gPC0tfC0tLSAgfCBvciA8LS18LS0tLS18LS0tIChsaW5lIGV4aXRzIHRoZSBjbGlwIHJlZ2lvbiBvbiB0aGUgbGVmdClcbiAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMSk7XG4gICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiID4gazIgJiYgYSA8PSBrMikge1xuICAgICAgICAgICAgLy8gfCAgLS0tfC0tPiBvciAtLS18LS0tLS18LS0+IChsaW5lIGV4aXRzIHRoZSBjbGlwIHJlZ2lvbiBvbiB0aGUgcmlnaHQpXG4gICAgICAgICAgICB0ID0gaW50ZXJzZWN0KHNsaWNlLCBheCwgYXksIGJ4LCBieSwgazIpO1xuICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNQb2x5Z29uICYmIGV4aXRlZCkge1xuICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2UuZW5kID0gbGVuICsgc2VnTGVuICogdDtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChzbGljZSk7XG4gICAgICAgICAgICBzbGljZSA9IG5ld1NsaWNlKGdlb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgbGVuICs9IHNlZ0xlbjtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGxhc3QgcG9pbnRcbiAgICB2YXIgbGFzdCA9IGdlb20ubGVuZ3RoIC0gMztcbiAgICBheCA9IGdlb21bbGFzdF07XG4gICAgYXkgPSBnZW9tW2xhc3QgKyAxXTtcbiAgICBheiA9IGdlb21bbGFzdCArIDJdO1xuICAgIGEgPSBheGlzID09PSAwID8gYXggOiBheTtcbiAgICBpZiAoYSA+PSBrMSAmJiBhIDw9IGsyKSBhZGRQb2ludChzbGljZSwgYXgsIGF5LCBheik7XG5cbiAgICAvLyBjbG9zZSB0aGUgcG9seWdvbiBpZiBpdHMgZW5kcG9pbnRzIGFyZSBub3QgdGhlIHNhbWUgYWZ0ZXIgY2xpcHBpbmdcbiAgICBsYXN0ID0gc2xpY2UubGVuZ3RoIC0gMztcbiAgICBpZiAoaXNQb2x5Z29uICYmIGxhc3QgPj0gMyAmJiAoc2xpY2VbbGFzdF0gIT09IHNsaWNlWzBdIHx8IHNsaWNlW2xhc3QgKyAxXSAhPT0gc2xpY2VbMV0pKSB7XG4gICAgICAgIGFkZFBvaW50KHNsaWNlLCBzbGljZVswXSwgc2xpY2VbMV0sIHNsaWNlWzJdKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGZpbmFsIHNsaWNlXG4gICAgaWYgKHNsaWNlLmxlbmd0aCkge1xuICAgICAgICBuZXdHZW9tLnB1c2goc2xpY2UpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbmV3U2xpY2UobGluZSkge1xuICAgIHZhciBzbGljZSA9IFtdO1xuICAgIHNsaWNlLnNpemUgPSBsaW5lLnNpemU7XG4gICAgc2xpY2Uuc3RhcnQgPSBsaW5lLnN0YXJ0O1xuICAgIHNsaWNlLmVuZCA9IGxpbmUuZW5kO1xuICAgIHJldHVybiBzbGljZTtcbn1cblxuZnVuY3Rpb24gY2xpcExpbmVzKGdlb20sIG5ld0dlb20sIGsxLCBrMiwgYXhpcywgaXNQb2x5Z29uKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNsaXBMaW5lKGdlb21baV0sIG5ld0dlb20sIGsxLCBrMiwgYXhpcywgaXNQb2x5Z29uLCBmYWxzZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRQb2ludChvdXQsIHgsIHksIHopIHtcbiAgICBvdXQucHVzaCh4KTtcbiAgICBvdXQucHVzaCh5KTtcbiAgICBvdXQucHVzaCh6KTtcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0WChvdXQsIGF4LCBheSwgYngsIGJ5LCB4KSB7XG4gICAgdmFyIHQgPSAoeCAtIGF4KSAvIChieCAtIGF4KTtcbiAgICBvdXQucHVzaCh4KTtcbiAgICBvdXQucHVzaChheSArIChieSAtIGF5KSAqIHQpO1xuICAgIG91dC5wdXNoKDEpO1xuICAgIHJldHVybiB0O1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3RZKG91dCwgYXgsIGF5LCBieCwgYnksIHkpIHtcbiAgICB2YXIgdCA9ICh5IC0gYXkpIC8gKGJ5IC0gYXkpO1xuICAgIG91dC5wdXNoKGF4ICsgKGJ4IC0gYXgpICogdCk7XG4gICAgb3V0LnB1c2goeSk7XG4gICAgb3V0LnB1c2goMSk7XG4gICAgcmV0dXJuIHQ7XG59XG4iLCJcbmltcG9ydCBjbGlwIGZyb20gJy4vY2xpcCc7XG5pbXBvcnQgY3JlYXRlRmVhdHVyZSBmcm9tICcuL2ZlYXR1cmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3cmFwKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG9wdGlvbnMuYnVmZmVyIC8gb3B0aW9ucy5leHRlbnQ7XG4gICAgdmFyIG1lcmdlZCA9IGZlYXR1cmVzO1xuICAgIHZhciBsZWZ0ICA9IGNsaXAoZmVhdHVyZXMsIDEsIC0xIC0gYnVmZmVyLCBidWZmZXIsICAgICAwLCAtMSwgMiwgb3B0aW9ucyk7IC8vIGxlZnQgd29ybGQgY29weVxuICAgIHZhciByaWdodCA9IGNsaXAoZmVhdHVyZXMsIDEsICAxIC0gYnVmZmVyLCAyICsgYnVmZmVyLCAwLCAtMSwgMiwgb3B0aW9ucyk7IC8vIHJpZ2h0IHdvcmxkIGNvcHlcblxuICAgIGlmIChsZWZ0IHx8IHJpZ2h0KSB7XG4gICAgICAgIG1lcmdlZCA9IGNsaXAoZmVhdHVyZXMsIDEsIC1idWZmZXIsIDEgKyBidWZmZXIsIDAsIC0xLCAyLCBvcHRpb25zKSB8fCBbXTsgLy8gY2VudGVyIHdvcmxkIGNvcHlcblxuICAgICAgICBpZiAobGVmdCkgbWVyZ2VkID0gc2hpZnRGZWF0dXJlQ29vcmRzKGxlZnQsIDEpLmNvbmNhdChtZXJnZWQpOyAvLyBtZXJnZSBsZWZ0IGludG8gY2VudGVyXG4gICAgICAgIGlmIChyaWdodCkgbWVyZ2VkID0gbWVyZ2VkLmNvbmNhdChzaGlmdEZlYXR1cmVDb29yZHMocmlnaHQsIC0xKSk7IC8vIG1lcmdlIHJpZ2h0IGludG8gY2VudGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZnVuY3Rpb24gc2hpZnRGZWF0dXJlQ29vcmRzKGZlYXR1cmVzLCBvZmZzZXQpIHtcbiAgICB2YXIgbmV3RmVhdHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlc1tpXSxcbiAgICAgICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgdmFyIG5ld0dlb21ldHJ5O1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50JyB8fCB0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeSwgb2Zmc2V0KTtcblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmVhdHVyZS5nZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5ld0dlb21ldHJ5LnB1c2goc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeVtqXSwgb2Zmc2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gW107XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZmVhdHVyZS5nZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBuZXdQb2x5Z29uID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmZWF0dXJlLmdlb21ldHJ5W2pdLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BvbHlnb24ucHVzaChzaGlmdENvb3JkcyhmZWF0dXJlLmdlb21ldHJ5W2pdW2tdLCBvZmZzZXQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkucHVzaChuZXdQb2x5Z29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5ld0ZlYXR1cmVzLnB1c2goY3JlYXRlRmVhdHVyZShmZWF0dXJlLmlkLCB0eXBlLCBuZXdHZW9tZXRyeSwgZmVhdHVyZS50YWdzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZlYXR1cmVzO1xufVxuXG5mdW5jdGlvbiBzaGlmdENvb3Jkcyhwb2ludHMsIG9mZnNldCkge1xuICAgIHZhciBuZXdQb2ludHMgPSBbXTtcbiAgICBuZXdQb2ludHMuc2l6ZSA9IHBvaW50cy5zaXplO1xuXG4gICAgaWYgKHBvaW50cy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1BvaW50cy5zdGFydCA9IHBvaW50cy5zdGFydDtcbiAgICAgICAgbmV3UG9pbnRzLmVuZCA9IHBvaW50cy5lbmQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgbmV3UG9pbnRzLnB1c2gocG9pbnRzW2ldICsgb2Zmc2V0LCBwb2ludHNbaSArIDFdLCBwb2ludHNbaSArIDJdKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1BvaW50cztcbn1cbiIsIlxuLy8gVHJhbnNmb3JtcyB0aGUgY29vcmRpbmF0ZXMgb2YgZWFjaCBmZWF0dXJlIGluIHRoZSBnaXZlbiB0aWxlIGZyb21cbi8vIG1lcmNhdG9yLXByb2plY3RlZCBzcGFjZSBpbnRvIChleHRlbnQgeCBleHRlbnQpIHRpbGUgc3BhY2UuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1UaWxlKHRpbGUsIGV4dGVudCkge1xuICAgIGlmICh0aWxlLnRyYW5zZm9ybWVkKSByZXR1cm4gdGlsZTtcblxuICAgIHZhciB6MiA9IDEgPDwgdGlsZS56LFxuICAgICAgICB0eCA9IHRpbGUueCxcbiAgICAgICAgdHkgPSB0aWxlLnksXG4gICAgICAgIGksIGosIGs7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGlsZS5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmVhdHVyZSA9IHRpbGUuZmVhdHVyZXNbaV0sXG4gICAgICAgICAgICBnZW9tID0gZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeSA9IFtdO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAxKSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbS5sZW5ndGg7IGogKz0gMikge1xuICAgICAgICAgICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkucHVzaCh0cmFuc2Zvcm1Qb2ludChnZW9tW2pdLCBnZW9tW2ogKyAxXSwgZXh0ZW50LCB6MiwgdHgsIHR5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciByaW5nID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGdlb21bal0ubGVuZ3RoOyBrICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmluZy5wdXNoKHRyYW5zZm9ybVBvaW50KGdlb21bal1ba10sIGdlb21bal1bayArIDFdLCBleHRlbnQsIHoyLCB0eCwgdHkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmVhdHVyZS5nZW9tZXRyeS5wdXNoKHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGlsZS50cmFuc2Zvcm1lZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGlsZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUG9pbnQoeCwgeSwgZXh0ZW50LCB6MiwgdHgsIHR5KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5yb3VuZChleHRlbnQgKiAoeCAqIHoyIC0gdHgpKSxcbiAgICAgICAgTWF0aC5yb3VuZChleHRlbnQgKiAoeSAqIHoyIC0gdHkpKV07XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVRpbGUoZmVhdHVyZXMsIHosIHR4LCB0eSwgb3B0aW9ucykge1xuICAgIHZhciB0b2xlcmFuY2UgPSB6ID09PSBvcHRpb25zLm1heFpvb20gPyAwIDogb3B0aW9ucy50b2xlcmFuY2UgLyAoKDEgPDwgeikgKiBvcHRpb25zLmV4dGVudCk7XG4gICAgdmFyIHRpbGUgPSB7XG4gICAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgICAgbnVtUG9pbnRzOiAwLFxuICAgICAgICBudW1TaW1wbGlmaWVkOiAwLFxuICAgICAgICBudW1GZWF0dXJlczogMCxcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICB4OiB0eCxcbiAgICAgICAgeTogdHksXG4gICAgICAgIHo6IHosXG4gICAgICAgIHRyYW5zZm9ybWVkOiBmYWxzZSxcbiAgICAgICAgbWluWDogMixcbiAgICAgICAgbWluWTogMSxcbiAgICAgICAgbWF4WDogLTEsXG4gICAgICAgIG1heFk6IDBcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGlsZS5udW1GZWF0dXJlcysrO1xuICAgICAgICBhZGRGZWF0dXJlKHRpbGUsIGZlYXR1cmVzW2ldLCB0b2xlcmFuY2UsIG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBtaW5YID0gZmVhdHVyZXNbaV0ubWluWDtcbiAgICAgICAgdmFyIG1pblkgPSBmZWF0dXJlc1tpXS5taW5ZO1xuICAgICAgICB2YXIgbWF4WCA9IGZlYXR1cmVzW2ldLm1heFg7XG4gICAgICAgIHZhciBtYXhZID0gZmVhdHVyZXNbaV0ubWF4WTtcblxuICAgICAgICBpZiAobWluWCA8IHRpbGUubWluWCkgdGlsZS5taW5YID0gbWluWDtcbiAgICAgICAgaWYgKG1pblkgPCB0aWxlLm1pblkpIHRpbGUubWluWSA9IG1pblk7XG4gICAgICAgIGlmIChtYXhYID4gdGlsZS5tYXhYKSB0aWxlLm1heFggPSBtYXhYO1xuICAgICAgICBpZiAobWF4WSA+IHRpbGUubWF4WSkgdGlsZS5tYXhZID0gbWF4WTtcbiAgICB9XG4gICAgcmV0dXJuIHRpbGU7XG59XG5cbmZ1bmN0aW9uIGFkZEZlYXR1cmUodGlsZSwgZmVhdHVyZSwgdG9sZXJhbmNlLCBvcHRpb25zKSB7XG5cbiAgICB2YXIgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGUsXG4gICAgICAgIHNpbXBsaWZpZWQgPSBbXTtcblxuICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50Jykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgIHNpbXBsaWZpZWQucHVzaChnZW9tW2ldKTtcbiAgICAgICAgICAgIHNpbXBsaWZpZWQucHVzaChnZW9tW2kgKyAxXSk7XG4gICAgICAgICAgICB0aWxlLm51bVBvaW50cysrO1xuICAgICAgICAgICAgdGlsZS5udW1TaW1wbGlmaWVkKys7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgZ2VvbSwgdGlsZSwgdG9sZXJhbmNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgZ2VvbVtpXSwgdGlsZSwgdG9sZXJhbmNlLCB0eXBlID09PSAnUG9seWdvbicsIGkgPT09IDApO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG5cbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBnZW9tLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgcG9seWdvbiA9IGdlb21ba107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG9seWdvbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgcG9seWdvbltpXSwgdGlsZSwgdG9sZXJhbmNlLCB0cnVlLCBpID09PSAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaW1wbGlmaWVkLmxlbmd0aCkge1xuICAgICAgICB2YXIgdGFncyA9IGZlYXR1cmUudGFncyB8fCBudWxsO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnICYmIG9wdGlvbnMubGluZU1ldHJpY3MpIHtcbiAgICAgICAgICAgIHRhZ3MgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBmZWF0dXJlLnRhZ3MpIHRhZ3Nba2V5XSA9IGZlYXR1cmUudGFnc1trZXldO1xuICAgICAgICAgICAgdGFnc1snbWFwYm94X2NsaXBfc3RhcnQnXSA9IGdlb20uc3RhcnQgLyBnZW9tLnNpemU7XG4gICAgICAgICAgICB0YWdzWydtYXBib3hfY2xpcF9lbmQnXSA9IGdlb20uZW5kIC8gZ2VvbS5zaXplO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aWxlRmVhdHVyZSA9IHtcbiAgICAgICAgICAgIGdlb21ldHJ5OiBzaW1wbGlmaWVkLFxuICAgICAgICAgICAgdHlwZTogdHlwZSA9PT0gJ1BvbHlnb24nIHx8IHR5cGUgPT09ICdNdWx0aVBvbHlnb24nID8gMyA6XG4gICAgICAgICAgICAgICAgdHlwZSA9PT0gJ0xpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnID8gMiA6IDEsXG4gICAgICAgICAgICB0YWdzOiB0YWdzXG4gICAgICAgIH07XG4gICAgICAgIGlmIChmZWF0dXJlLmlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aWxlRmVhdHVyZS5pZCA9IGZlYXR1cmUuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGlsZS5mZWF0dXJlcy5wdXNoKHRpbGVGZWF0dXJlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZExpbmUocmVzdWx0LCBnZW9tLCB0aWxlLCB0b2xlcmFuY2UsIGlzUG9seWdvbiwgaXNPdXRlcikge1xuICAgIHZhciBzcVRvbGVyYW5jZSA9IHRvbGVyYW5jZSAqIHRvbGVyYW5jZTtcblxuICAgIGlmICh0b2xlcmFuY2UgPiAwICYmIChnZW9tLnNpemUgPCAoaXNQb2x5Z29uID8gc3FUb2xlcmFuY2UgOiB0b2xlcmFuY2UpKSkge1xuICAgICAgICB0aWxlLm51bVBvaW50cyArPSBnZW9tLmxlbmd0aCAvIDM7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmluZyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGlmICh0b2xlcmFuY2UgPT09IDAgfHwgZ2VvbVtpICsgMl0gPiBzcVRvbGVyYW5jZSkge1xuICAgICAgICAgICAgdGlsZS5udW1TaW1wbGlmaWVkKys7XG4gICAgICAgICAgICByaW5nLnB1c2goZ2VvbVtpXSk7XG4gICAgICAgICAgICByaW5nLnB1c2goZ2VvbVtpICsgMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRpbGUubnVtUG9pbnRzKys7XG4gICAgfVxuXG4gICAgaWYgKGlzUG9seWdvbikgcmV3aW5kKHJpbmcsIGlzT3V0ZXIpO1xuXG4gICAgcmVzdWx0LnB1c2gocmluZyk7XG59XG5cbmZ1bmN0aW9uIHJld2luZChyaW5nLCBjbG9ja3dpc2UpIHtcbiAgICB2YXIgYXJlYSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMjsgaSA8IGxlbjsgaiA9IGksIGkgKz0gMikge1xuICAgICAgICBhcmVhICs9IChyaW5nW2ldIC0gcmluZ1tqXSkgKiAocmluZ1tpICsgMV0gKyByaW5nW2ogKyAxXSk7XG4gICAgfVxuICAgIGlmIChhcmVhID4gMCA9PT0gY2xvY2t3aXNlKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoOyBpIDwgbGVuIC8gMjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgeCA9IHJpbmdbaV07XG4gICAgICAgICAgICB2YXIgeSA9IHJpbmdbaSArIDFdO1xuICAgICAgICAgICAgcmluZ1tpXSA9IHJpbmdbbGVuIC0gMiAtIGldO1xuICAgICAgICAgICAgcmluZ1tpICsgMV0gPSByaW5nW2xlbiAtIDEgLSBpXTtcbiAgICAgICAgICAgIHJpbmdbbGVuIC0gMiAtIGldID0geDtcbiAgICAgICAgICAgIHJpbmdbbGVuIC0gMSAtIGldID0geTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuaW1wb3J0IGNvbnZlcnQgZnJvbSAnLi9jb252ZXJ0JzsgICAgIC8vIEdlb0pTT04gY29udmVyc2lvbiBhbmQgcHJlcHJvY2Vzc2luZ1xuaW1wb3J0IGNsaXAgZnJvbSAnLi9jbGlwJzsgICAgICAgICAgIC8vIHN0cmlwZSBjbGlwcGluZyBhbGdvcml0aG1cbmltcG9ydCB3cmFwIGZyb20gJy4vd3JhcCc7ICAgICAgICAgICAvLyBkYXRlIGxpbmUgcHJvY2Vzc2luZ1xuaW1wb3J0IHRyYW5zZm9ybSBmcm9tICcuL3RyYW5zZm9ybSc7IC8vIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb25cbmltcG9ydCBjcmVhdGVUaWxlIGZyb20gJy4vdGlsZSc7ICAgICAvLyBmaW5hbCBzaW1wbGlmaWVkIHRpbGUgZ2VuZXJhdGlvblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW9qc29udnQoZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgR2VvSlNPTlZUKGRhdGEsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBHZW9KU09OVlQoZGF0YSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLCBvcHRpb25zKTtcblxuICAgIHZhciBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICBpZiAoZGVidWcpIGNvbnNvbGUudGltZSgncHJlcHJvY2VzcyBkYXRhJyk7XG5cbiAgICBpZiAob3B0aW9ucy5tYXhab29tIDwgMCB8fCBvcHRpb25zLm1heFpvb20gPiAyNCkgdGhyb3cgbmV3IEVycm9yKCdtYXhab29tIHNob3VsZCBiZSBpbiB0aGUgMC0yNCByYW5nZScpO1xuICAgIGlmIChvcHRpb25zLnByb21vdGVJZCAmJiBvcHRpb25zLmdlbmVyYXRlSWQpIHRocm93IG5ldyBFcnJvcigncHJvbW90ZUlkIGFuZCBnZW5lcmF0ZUlkIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLicpO1xuXG4gICAgdmFyIGZlYXR1cmVzID0gY29udmVydChkYXRhLCBvcHRpb25zKTtcblxuICAgIHRoaXMudGlsZXMgPSB7fTtcbiAgICB0aGlzLnRpbGVDb29yZHMgPSBbXTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ3ByZXByb2Nlc3MgZGF0YScpO1xuICAgICAgICBjb25zb2xlLmxvZygnaW5kZXg6IG1heFpvb206ICVkLCBtYXhQb2ludHM6ICVkJywgb3B0aW9ucy5pbmRleE1heFpvb20sIG9wdGlvbnMuaW5kZXhNYXhQb2ludHMpO1xuICAgICAgICBjb25zb2xlLnRpbWUoJ2dlbmVyYXRlIHRpbGVzJyk7XG4gICAgICAgIHRoaXMuc3RhdHMgPSB7fTtcbiAgICAgICAgdGhpcy50b3RhbCA9IDA7XG4gICAgfVxuXG4gICAgZmVhdHVyZXMgPSB3cmFwKGZlYXR1cmVzLCBvcHRpb25zKTtcblxuICAgIC8vIHN0YXJ0IHNsaWNpbmcgZnJvbSB0aGUgdG9wIHRpbGUgZG93blxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHRoaXMuc3BsaXRUaWxlKGZlYXR1cmVzLCAwLCAwLCAwKTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoKSBjb25zb2xlLmxvZygnZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkJywgdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcywgdGhpcy50aWxlc1swXS5udW1Qb2ludHMpO1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ2dlbmVyYXRlIHRpbGVzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0aWxlcyBnZW5lcmF0ZWQ6JywgdGhpcy50b3RhbCwgSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0cykpO1xuICAgIH1cbn1cblxuR2VvSlNPTlZULnByb3RvdHlwZS5vcHRpb25zID0ge1xuICAgIG1heFpvb206IDE0LCAgICAgICAgICAgIC8vIG1heCB6b29tIHRvIHByZXNlcnZlIGRldGFpbCBvblxuICAgIGluZGV4TWF4Wm9vbTogNSwgICAgICAgIC8vIG1heCB6b29tIGluIHRoZSB0aWxlIGluZGV4XG4gICAgaW5kZXhNYXhQb2ludHM6IDEwMDAwMCwgLy8gbWF4IG51bWJlciBvZiBwb2ludHMgcGVyIHRpbGUgaW4gdGhlIHRpbGUgaW5kZXhcbiAgICB0b2xlcmFuY2U6IDMsICAgICAgICAgICAvLyBzaW1wbGlmaWNhdGlvbiB0b2xlcmFuY2UgKGhpZ2hlciBtZWFucyBzaW1wbGVyKVxuICAgIGV4dGVudDogNDA5NiwgICAgICAgICAgIC8vIHRpbGUgZXh0ZW50XG4gICAgYnVmZmVyOiA2NCwgICAgICAgICAgICAgLy8gdGlsZSBidWZmZXIgb24gZWFjaCBzaWRlXG4gICAgbGluZU1ldHJpY3M6IGZhbHNlLCAgICAgLy8gd2hldGhlciB0byBjYWxjdWxhdGUgbGluZSBtZXRyaWNzXG4gICAgcHJvbW90ZUlkOiBudWxsLCAgICAgICAgLy8gbmFtZSBvZiBhIGZlYXR1cmUgcHJvcGVydHkgdG8gYmUgcHJvbW90ZWQgdG8gZmVhdHVyZS5pZFxuICAgIGdlbmVyYXRlSWQ6IGZhbHNlLCAgICAgIC8vIHdoZXRoZXIgdG8gZ2VuZXJhdGUgZmVhdHVyZSBpZHMuIENhbm5vdCBiZSB1c2VkIHdpdGggcHJvbW90ZUlkXG4gICAgZGVidWc6IDAgICAgICAgICAgICAgICAgLy8gbG9nZ2luZyBsZXZlbCAoMCwgMSBvciAyKVxufTtcblxuR2VvSlNPTlZULnByb3RvdHlwZS5zcGxpdFRpbGUgPSBmdW5jdGlvbiAoZmVhdHVyZXMsIHosIHgsIHksIGN6LCBjeCwgY3kpIHtcblxuICAgIHZhciBzdGFjayA9IFtmZWF0dXJlcywgeiwgeCwgeV0sXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcblxuICAgIC8vIGF2b2lkIHJlY3Vyc2lvbiBieSB1c2luZyBhIHByb2Nlc3NpbmcgcXVldWVcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIHkgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgeCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICB6ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGZlYXR1cmVzID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgdmFyIHoyID0gMSA8PCB6LFxuICAgICAgICAgICAgaWQgPSB0b0lEKHosIHgsIHkpLFxuICAgICAgICAgICAgdGlsZSA9IHRoaXMudGlsZXNbaWRdO1xuXG4gICAgICAgIGlmICghdGlsZSkge1xuICAgICAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdjcmVhdGlvbicpO1xuXG4gICAgICAgICAgICB0aWxlID0gdGhpcy50aWxlc1tpZF0gPSBjcmVhdGVUaWxlKGZlYXR1cmVzLCB6LCB4LCB5LCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OiB6LCB4OiB4LCB5OiB5fSk7XG5cbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgICAgIGlmIChkZWJ1ZyA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKScsXG4gICAgICAgICAgICAgICAgICAgICAgICB6LCB4LCB5LCB0aWxlLm51bUZlYXR1cmVzLCB0aWxlLm51bVBvaW50cywgdGlsZS5udW1TaW1wbGlmaWVkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS50aW1lRW5kKCdjcmVhdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gJ3onICsgejtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRzW2tleV0gPSAodGhpcy5zdGF0c1trZXldIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzYXZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBnZW9tZXRyeSBpbiB0aWxlIHNvIHRoYXQgd2UgY2FuIGRyaWxsIGRvd24gbGF0ZXIgaWYgd2Ugc3RvcCBub3dcbiAgICAgICAgdGlsZS5zb3VyY2UgPSBmZWF0dXJlcztcblxuICAgICAgICAvLyBpZiBpdCdzIHRoZSBmaXJzdC1wYXNzIHRpbGluZ1xuICAgICAgICBpZiAoIWN6KSB7XG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB3ZSByZWFjaGVkIG1heCB6b29tLCBvciBpZiB0aGUgdGlsZSBpcyB0b28gc2ltcGxlXG4gICAgICAgICAgICBpZiAoeiA9PT0gb3B0aW9ucy5pbmRleE1heFpvb20gfHwgdGlsZS5udW1Qb2ludHMgPD0gb3B0aW9ucy5pbmRleE1heFBvaW50cykgY29udGludWU7XG5cbiAgICAgICAgLy8gaWYgYSBkcmlsbGRvd24gdG8gYSBzcGVjaWZpYyB0aWxlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB3ZSByZWFjaGVkIGJhc2Ugem9vbSBvciBvdXIgdGFyZ2V0IHRpbGUgem9vbVxuICAgICAgICAgICAgaWYgKHogPT09IG9wdGlvbnMubWF4Wm9vbSB8fCB6ID09PSBjeikgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIHN0b3AgdGlsaW5nIGlmIGl0J3Mgbm90IGFuIGFuY2VzdG9yIG9mIHRoZSB0YXJnZXQgdGlsZVxuICAgICAgICAgICAgdmFyIG0gPSAxIDw8IChjeiAtIHopO1xuICAgICAgICAgICAgaWYgKHggIT09IE1hdGguZmxvb3IoY3ggLyBtKSB8fCB5ICE9PSBNYXRoLmZsb29yKGN5IC8gbSkpIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgd2Ugc2xpY2UgZnVydGhlciBkb3duLCBubyBuZWVkIHRvIGtlZXAgc291cmNlIGdlb21ldHJ5XG4gICAgICAgIHRpbGUuc291cmNlID0gbnVsbDtcblxuICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWUoJ2NsaXBwaW5nJyk7XG5cbiAgICAgICAgLy8gdmFsdWVzIHdlJ2xsIHVzZSBmb3IgY2xpcHBpbmdcbiAgICAgICAgdmFyIGsxID0gMC41ICogb3B0aW9ucy5idWZmZXIgLyBvcHRpb25zLmV4dGVudCxcbiAgICAgICAgICAgIGsyID0gMC41IC0gazEsXG4gICAgICAgICAgICBrMyA9IDAuNSArIGsxLFxuICAgICAgICAgICAgazQgPSAxICsgazEsXG4gICAgICAgICAgICB0bCwgYmwsIHRyLCBiciwgbGVmdCwgcmlnaHQ7XG5cbiAgICAgICAgdGwgPSBibCA9IHRyID0gYnIgPSBudWxsO1xuXG4gICAgICAgIGxlZnQgID0gY2xpcChmZWF0dXJlcywgejIsIHggLSBrMSwgeCArIGszLCAwLCB0aWxlLm1pblgsIHRpbGUubWF4WCwgb3B0aW9ucyk7XG4gICAgICAgIHJpZ2h0ID0gY2xpcChmZWF0dXJlcywgejIsIHggKyBrMiwgeCArIGs0LCAwLCB0aWxlLm1pblgsIHRpbGUubWF4WCwgb3B0aW9ucyk7XG4gICAgICAgIGZlYXR1cmVzID0gbnVsbDtcblxuICAgICAgICBpZiAobGVmdCkge1xuICAgICAgICAgICAgdGwgPSBjbGlwKGxlZnQsIHoyLCB5IC0gazEsIHkgKyBrMywgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgYmwgPSBjbGlwKGxlZnQsIHoyLCB5ICsgazIsIHkgKyBrNCwgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgbGVmdCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICAgIHRyID0gY2xpcChyaWdodCwgejIsIHkgLSBrMSwgeSArIGszLCAxLCB0aWxlLm1pblksIHRpbGUubWF4WSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBiciA9IGNsaXAocmlnaHQsIHoyLCB5ICsgazIsIHkgKyBrNCwgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmlnaHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lRW5kKCdjbGlwcGluZycpO1xuXG4gICAgICAgIHN0YWNrLnB1c2godGwgfHwgW10sIHogKyAxLCB4ICogMiwgICAgIHkgKiAyKTtcbiAgICAgICAgc3RhY2sucHVzaChibCB8fCBbXSwgeiArIDEsIHggKiAyLCAgICAgeSAqIDIgKyAxKTtcbiAgICAgICAgc3RhY2sucHVzaCh0ciB8fCBbXSwgeiArIDEsIHggKiAyICsgMSwgeSAqIDIpO1xuICAgICAgICBzdGFjay5wdXNoKGJyIHx8IFtdLCB6ICsgMSwgeCAqIDIgKyAxLCB5ICogMiArIDEpO1xuICAgIH1cbn07XG5cbkdlb0pTT05WVC5wcm90b3R5cGUuZ2V0VGlsZSA9IGZ1bmN0aW9uICh6LCB4LCB5KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGV4dGVudCA9IG9wdGlvbnMuZXh0ZW50LFxuICAgICAgICBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICBpZiAoeiA8IDAgfHwgeiA+IDI0KSByZXR1cm4gbnVsbDtcblxuICAgIHZhciB6MiA9IDEgPDwgejtcbiAgICB4ID0gKCh4ICUgejIpICsgejIpICUgejI7IC8vIHdyYXAgdGlsZSB4IGNvb3JkaW5hdGVcblxuICAgIHZhciBpZCA9IHRvSUQoeiwgeCwgeSk7XG4gICAgaWYgKHRoaXMudGlsZXNbaWRdKSByZXR1cm4gdHJhbnNmb3JtKHRoaXMudGlsZXNbaWRdLCBleHRlbnQpO1xuXG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS5sb2coJ2RyaWxsaW5nIGRvd24gdG8geiVkLSVkLSVkJywgeiwgeCwgeSk7XG5cbiAgICB2YXIgejAgPSB6LFxuICAgICAgICB4MCA9IHgsXG4gICAgICAgIHkwID0geSxcbiAgICAgICAgcGFyZW50O1xuXG4gICAgd2hpbGUgKCFwYXJlbnQgJiYgejAgPiAwKSB7XG4gICAgICAgIHowLS07XG4gICAgICAgIHgwID0gTWF0aC5mbG9vcih4MCAvIDIpO1xuICAgICAgICB5MCA9IE1hdGguZmxvb3IoeTAgLyAyKTtcbiAgICAgICAgcGFyZW50ID0gdGhpcy50aWxlc1t0b0lEKHowLCB4MCwgeTApXTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LnNvdXJjZSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBpZiB3ZSBmb3VuZCBhIHBhcmVudCB0aWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGdlb21ldHJ5LCB3ZSBjYW4gZHJpbGwgZG93biBmcm9tIGl0XG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS5sb2coJ2ZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZCcsIHowLCB4MCwgeTApO1xuXG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdkcmlsbGluZyBkb3duJyk7XG4gICAgdGhpcy5zcGxpdFRpbGUocGFyZW50LnNvdXJjZSwgejAsIHgwLCB5MCwgeiwgeCwgeSk7XG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lRW5kKCdkcmlsbGluZyBkb3duJyk7XG5cbiAgICByZXR1cm4gdGhpcy50aWxlc1tpZF0gPyB0cmFuc2Zvcm0odGhpcy50aWxlc1tpZF0sIGV4dGVudCkgOiBudWxsO1xufTtcblxuZnVuY3Rpb24gdG9JRCh6LCB4LCB5KSB7XG4gICAgcmV0dXJuICgoKDEgPDwgeikgKiB5ICsgeCkgKiAzMikgKyB6O1xufVxuXG5mdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjKSB7XG4gICAgZm9yICh2YXIgaSBpbiBzcmMpIGRlc3RbaV0gPSBzcmNbaV07XG4gICAgcmV0dXJuIGRlc3Q7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEpTT059IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCBwZXJmb3JtYW5jZSBmcm9tICcuLi91dGlsL3BlcmZvcm1hbmNlJztcbmltcG9ydCByZXdpbmQgZnJvbSAnQG1hcGJveC9nZW9qc29uLXJld2luZCc7XG5pbXBvcnQgR2VvSlNPTldyYXBwZXIgZnJvbSAnLi9nZW9qc29uX3dyYXBwZXInO1xuaW1wb3J0IHZ0cGJmIGZyb20gJ3Z0LXBiZic7XG5pbXBvcnQgU3VwZXJjbHVzdGVyIGZyb20gJ3N1cGVyY2x1c3Rlcic7XG5pbXBvcnQgZ2VvanNvbnZ0IGZyb20gJ2dlb2pzb24tdnQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IFZlY3RvclRpbGVXb3JrZXJTb3VyY2UgZnJvbSAnLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlJztcbmltcG9ydCB7Y3JlYXRlRXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcblxuaW1wb3J0IHR5cGUge1xuICAgIFdvcmtlclRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlclRpbGVDYWxsYmFjayxcbn0gZnJvbSAnLi4vc291cmNlL3dvcmtlcl9zb3VyY2UnO1xuXG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXJJbmRleCBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcl9pbmRleCc7XG5cbmltcG9ydCB0eXBlIHtMb2FkVmVjdG9yRGF0YUNhbGxiYWNrfSBmcm9tICcuL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RQYXJhbWV0ZXJzLCBSZXNwb25zZUNhbGxiYWNrfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTkZlYXR1cmV9IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5cbmV4cG9ydCB0eXBlIExvYWRHZW9KU09OUGFyYW1ldGVycyA9IHtcbiAgICByZXF1ZXN0PzogUmVxdWVzdFBhcmFtZXRlcnMsXG4gICAgZGF0YT86IHN0cmluZyxcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICBjbHVzdGVyOiBib29sZWFuLFxuICAgIHN1cGVyY2x1c3Rlck9wdGlvbnM/OiBPYmplY3QsXG4gICAgZ2VvanNvblZ0T3B0aW9ucz86IE9iamVjdCxcbiAgICBjbHVzdGVyUHJvcGVydGllcz86IE9iamVjdFxufTtcblxuZXhwb3J0IHR5cGUgTG9hZEdlb0pTT04gPSAocGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPE9iamVjdD4pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvSlNPTkluZGV4IHtcbiAgICBnZXRUaWxlKHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiBPYmplY3Q7XG5cbiAgICAvLyBzdXBlcmNsdXN0ZXIgbWV0aG9kc1xuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKGNsdXN0ZXJJZDogbnVtYmVyKTogbnVtYmVyO1xuICAgIGdldENoaWxkcmVuKGNsdXN0ZXJJZDogbnVtYmVyKTogQXJyYXk8R2VvSlNPTkZlYXR1cmU+O1xuICAgIGdldExlYXZlcyhjbHVzdGVySWQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIpOiBBcnJheTxHZW9KU09ORmVhdHVyZT47XG59XG5cbmZ1bmN0aW9uIGxvYWRHZW9KU09OVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogTG9hZFZlY3RvckRhdGFDYWxsYmFjaykge1xuICAgIGNvbnN0IGNhbm9uaWNhbCA9IHBhcmFtcy50aWxlSUQuY2Fub25pY2FsO1xuXG4gICAgaWYgKCF0aGlzLl9nZW9KU09OSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG51bGwpOyAgLy8gd2UgY291bGRuJ3QgbG9hZCB0aGUgZmlsZVxuICAgIH1cblxuICAgIGNvbnN0IGdlb0pTT05UaWxlID0gdGhpcy5fZ2VvSlNPTkluZGV4LmdldFRpbGUoY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSk7XG4gICAgaWYgKCFnZW9KU09OVGlsZSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgbnVsbCk7IC8vIG5vdGhpbmcgaW4gdGhlIGdpdmVuIHRpbGVcbiAgICB9XG5cbiAgICBjb25zdCBnZW9qc29uV3JhcHBlciA9IG5ldyBHZW9KU09OV3JhcHBlcihnZW9KU09OVGlsZS5mZWF0dXJlcyk7XG5cbiAgICAvLyBFbmNvZGUgdGhlIGdlb2pzb24tdnQgdGlsZSBpbnRvIGJpbmFyeSB2ZWN0b3IgdGlsZSBmb3JtLiAgVGhpc1xuICAgIC8vIGlzIGEgY29udmVuaWVuY2UgdGhhdCBhbGxvd3MgYEZlYXR1cmVJbmRleGAgdG8gb3BlcmF0ZSB0aGUgc2FtZSB3YXlcbiAgICAvLyBhY3Jvc3MgYFZlY3RvclRpbGVTb3VyY2VgIGFuZCBgR2VvSlNPTlNvdXJjZWAgZGF0YS5cbiAgICBsZXQgcGJmID0gdnRwYmYoZ2VvanNvbldyYXBwZXIpO1xuICAgIGlmIChwYmYuYnl0ZU9mZnNldCAhPT0gMCB8fCBwYmYuYnl0ZUxlbmd0aCAhPT0gcGJmLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIC8vIENvbXBhdGliaWxpdHkgd2l0aCBub2RlIEJ1ZmZlciAoaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9wYmYvaXNzdWVzLzM1KVxuICAgICAgICBwYmYgPSBuZXcgVWludDhBcnJheShwYmYpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgdmVjdG9yVGlsZTogZ2VvanNvbldyYXBwZXIsXG4gICAgICAgIHJhd0RhdGE6IHBiZi5idWZmZXJcbiAgICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlU3RhdGUgPVxuICAgIHwgJ0lkbGUnICAgICAgICAgICAgLy8gU291cmNlIGVtcHR5IG9yIGRhdGEgbG9hZGVkXG4gICAgfCAnQ29hbGVzY2luZycgICAgICAvLyBEYXRhIGZpbmlzaGVkIGxvYWRpbmcsIGJ1dCBkaXNjYXJkICdsb2FkRGF0YScgbWVzc2FnZXMgdW50aWwgcmVjZWl2aW5nICdjb2FsZXNjZWQnXG4gICAgfCAnTmVlZHNMb2FkRGF0YSc7ICAvLyAnbG9hZERhdGEnIHJlY2VpdmVkIHdoaWxlIGNvYWxlc2NpbmcsIHRyaWdnZXIgb25lIG1vcmUgJ2xvYWREYXRhJyBvbiByZWNlaXZpbmcgJ2NvYWxlc2NlZCdcblxuLyoqXG4gKiBUaGUge0BsaW5rIFdvcmtlclNvdXJjZX0gaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB7QGxpbmsgR2VvSlNPTlNvdXJjZX0uXG4gKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIGJlIGVhc2lseSByZXVzZWQgdG8gc3VwcG9ydCBjdXN0b20gc291cmNlIHR5cGVzXG4gKiBmb3IgZGF0YSBmb3JtYXRzIHRoYXQgY2FuIGJlIHBhcnNlZC9jb252ZXJ0ZWQgaW50byBhbiBpbi1tZW1vcnkgR2VvSlNPTlxuICogcmVwcmVzZW50YXRpb24uICBUbyBkbyBzbywgY3JlYXRlIGl0IHdpdGhcbiAqIGBuZXcgR2VvSlNPTldvcmtlclNvdXJjZShhY3RvciwgbGF5ZXJJbmRleCwgY3VzdG9tTG9hZEdlb0pTT05GdW5jdGlvbilgLlxuICogRm9yIGEgZnVsbCBleGFtcGxlLCBzZWUgW21hcGJveC1nbC10b3BvanNvbl0oaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BtZW50c2VlZC9tYXBib3gtZ2wtdG9wb2pzb24pLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEdlb0pTT05Xb3JrZXJTb3VyY2UgZXh0ZW5kcyBWZWN0b3JUaWxlV29ya2VyU291cmNlIHtcbiAgICBsb2FkR2VvSlNPTjogTG9hZEdlb0pTT047XG4gICAgX3N0YXRlOiBTb3VyY2VTdGF0ZTtcbiAgICBfcGVuZGluZ0NhbGxiYWNrOiBDYWxsYmFjazx7XG4gICAgICAgIHJlc291cmNlVGltaW5nPzoge1tzdHJpbmddOiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPn0sXG4gICAgICAgIGFiYW5kb25lZD86IGJvb2xlYW4gfT47XG4gICAgX3BlbmRpbmdMb2FkRGF0YVBhcmFtczogTG9hZEdlb0pTT05QYXJhbWV0ZXJzO1xuICAgIF9nZW9KU09OSW5kZXg6IEdlb0pTT05JbmRleFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIFtsb2FkR2VvSlNPTl0gT3B0aW9uYWwgbWV0aG9kIGZvciBjdXN0b20gbG9hZGluZy9wYXJzaW5nIG9mXG4gICAgICogR2VvSlNPTiBiYXNlZCBvbiBwYXJhbWV0ZXJzIHBhc3NlZCBmcm9tIHRoZSBtYWluLXRocmVhZCBTb3VyY2UuXG4gICAgICogU2VlIHtAbGluayBHZW9KU09OV29ya2VyU291cmNlI2xvYWRHZW9KU09OfS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY3RvcjogQWN0b3IsIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LCBsb2FkR2VvSlNPTjogP0xvYWRHZW9KU09OKSB7XG4gICAgICAgIHN1cGVyKGFjdG9yLCBsYXllckluZGV4LCBhdmFpbGFibGVJbWFnZXMsIGxvYWRHZW9KU09OVGlsZSk7XG4gICAgICAgIGlmIChsb2FkR2VvSlNPTikge1xuICAgICAgICAgICAgdGhpcy5sb2FkR2VvSlNPTiA9IGxvYWRHZW9KU09OO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyAoaWYgYXBwcm9wcmlhdGUpLCBwYXJzZXMsIGFuZCBpbmRleCBnZW9qc29uIGRhdGEgaW50byB0aWxlcy4gVGhpc1xuICAgICAqIHByZXBhcmF0b3J5IG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUge0BsaW5rIEdlb0pTT05Xb3JrZXJTb3VyY2UjbG9hZFRpbGV9XG4gICAgICogY2FuIGNvcnJlY3RseSBzZXJ2ZSB1cCB0aWxlcy5cbiAgICAgKlxuICAgICAqIERlZmVycyB0byB7QGxpbmsgR2VvSlNPTldvcmtlclNvdXJjZSNsb2FkR2VvSlNPTn0gZm9yIHRoZSBmZXRjaGluZy9wYXJzaW5nLFxuICAgICAqIGV4cGVjdGluZyBgY2FsbGJhY2soZXJyb3IsIGRhdGEpYCB0byBiZSBjYWxsZWQgd2l0aCBlaXRoZXIgYW4gZXJyb3Igb3IgYVxuICAgICAqIHBhcnNlZCBHZW9KU09OIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFdoZW4gYGxvYWREYXRhYCByZXF1ZXN0cyBjb21lIGluIGZhc3RlciB0aGFuIHRoZXkgY2FuIGJlIHByb2Nlc3NlZCxcbiAgICAgKiB0aGV5IGFyZSBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSByZXF1ZXN0IHVzaW5nIHRoZSBsYXRlc3QgZGF0YS5cbiAgICAgKiBTZWUge0BsaW5rIEdlb0pTT05Xb3JrZXJTb3VyY2UjY29hbGVzY2V9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAgICovXG4gICAgbG9hZERhdGEocGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnMsIGNhbGxiYWNrOiBDYWxsYmFjazx7XG4gICAgICAgIHJlc291cmNlVGltaW5nPzoge1tzdHJpbmddOiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPn0sXG4gICAgICAgIGFiYW5kb25lZD86IGJvb2xlYW4gfT4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdDYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gVGVsbCB0aGUgZm9yZWdyb3VuZCB0aGUgcHJldmlvdXMgY2FsbCBoYXMgYmVlbiBhYmFuZG9uZWRcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLCB7YWJhbmRvbmVkOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcyA9IHBhcmFtcztcblxuICAgICAgICBpZiAodGhpcy5fc3RhdGUgJiZcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlICE9PSAnSWRsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ05lZWRzTG9hZERhdGEnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnQ29hbGVzY2luZyc7XG4gICAgICAgICAgICB0aGlzLl9sb2FkRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb246IGNhbGxlZCBkaXJlY3RseSBieSBgbG9hZERhdGFgXG4gICAgICogb3IgYnkgYGNvYWxlc2NlYCB1c2luZyBzdG9yZWQgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBfbG9hZERhdGEoKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGVuZGluZ0NhbGxiYWNrIHx8ICF0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMpIHtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLl9wZW5kaW5nQ2FsbGJhY2s7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdDYWxsYmFjaztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztcblxuICAgICAgICBjb25zdCBwZXJmID0gKHBhcmFtcyAmJiBwYXJhbXMucmVxdWVzdCAmJiBwYXJhbXMucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpID9cbiAgICAgICAgICAgIG5ldyBwZXJmb3JtYW5jZS5QZXJmb3JtYW5jZShwYXJhbXMucmVxdWVzdCkgOiBmYWxzZTtcblxuICAgICAgICB0aGlzLmxvYWRHZW9KU09OKHBhcmFtcywgKGVycjogP0Vycm9yLCBkYXRhOiA/T2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyIHx8ICFkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYElucHV0IGRhdGEgZ2l2ZW4gdG8gJyR7cGFyYW1zLnNvdXJjZX0nIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LmApKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV3aW5kKGRhdGEsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvSlNPTkluZGV4ID0gcGFyYW1zLmNsdXN0ZXIgP1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN1cGVyY2x1c3RlcihnZXRTdXBlcmNsdXN0ZXJPcHRpb25zKHBhcmFtcykpLmxvYWQoZGF0YS5mZWF0dXJlcykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvanNvbnZ0KGRhdGEsIHBhcmFtcy5nZW9qc29uVnRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB7fTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChwZXJmKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlVGltaW5nRGF0YSA9IHBlcmYuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGl0J3MgbmVjZXNzYXJ5IHRvIGV2YWwgdGhlIHJlc3VsdCBvZiBnZXRFbnRyaWVzQnlOYW1lKCkgaGVyZSB2aWEgcGFyc2Uvc3RyaW5naWZ5XG4gICAgICAgICAgICAgICAgICAgIC8vIGxhdGUgZXZhbHVhdGlvbiBpbiB0aGUgbWFpbiB0aHJlYWQgY2F1c2VzIFR5cGVFcnJvcjogaWxsZWdhbCBpbnZvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZVRpbWluZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvdXJjZVRpbWluZyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc291cmNlVGltaW5nW3BhcmFtcy5zb3VyY2VdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXNvdXJjZVRpbWluZ0RhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGlsZSBwcm9jZXNzaW5nIGBsb2FkRGF0YWAsIHdlIGNvYWxlc2NlIGFsbCBmdXJ0aGVyXG4gICAgICogYGxvYWREYXRhYCBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIGNhbGwgdG8gX2xvYWREYXRhXG4gICAgICogdGhhdCB3aWxsIGhhcHBlbiBvbmNlIHdlJ3ZlIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlXG4gICAgICogZmlyc3QgbWVzc2FnZS4ge0BsaW5rIEdlb0pTT05Tb3VyY2UjX3VwZGF0ZVdvcmtlckRhdGF9XG4gICAgICogaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgdXMgdGhlIGBjb2FsZXNjZWAgbWVzc2FnZVxuICAgICAqIGF0IHRoZSB0aW1lIGl0IHJlY2VpdmVzIGEgcmVzcG9uc2UgZnJvbSBgbG9hZERhdGFgXG4gICAgICpcbiAgICAgKiAgICAgICAgICBTdGF0ZTogSWRsZVxuICAgICAqICAgICAgICAgIMOiwobCkSAgICAgICAgICB8XG4gICAgICogICAgICdjb2FsZXNjZScgICAnbG9hZERhdGEnXG4gICAgICogICAgICAgICAgfCAgICAgKHRyaWdnZXJzIGxvYWQpXG4gICAgICogICAgICAgICAgfCAgICAgICAgICDDosKGwpNcbiAgICAgKiAgICAgICAgU3RhdGU6IENvYWxlc2NpbmdcbiAgICAgKiAgICAgICAgICDDosKGwpEgICAgICAgICAgfFxuICAgICAqICAgKHRyaWdnZXJzIGxvYWQpICAgfFxuICAgICAqICAgICAnY29hbGVzY2UnICAgJ2xvYWREYXRhJ1xuICAgICAqICAgICAgICAgIHwgICAgICAgICAgw6LChsKTXG4gICAgICogICAgICAgIFN0YXRlOiBOZWVkc0xvYWREYXRhXG4gICAgICovXG4gICAgY29hbGVzY2UoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ0NvYWxlc2NpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdJZGxlJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ05lZWRzTG9hZERhdGEnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdDb2FsZXNjaW5nJztcbiAgICAgICAgICAgIHRoaXMuX2xvYWREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEltcGxlbWVudHMge0BsaW5rIFdvcmtlclNvdXJjZSNyZWxvYWRUaWxlfS5cbiAgICAqXG4gICAgKiBJZiB0aGUgdGlsZSBpcyBsb2FkZWQsIHVzZXMgdGhlIGltcGxlbWVudGF0aW9uIGluIFZlY3RvclRpbGVXb3JrZXJTb3VyY2UuXG4gICAgKiBPdGhlcndpc2UsIHN1Y2ggYXMgYWZ0ZXIgYSBzZXREYXRhKCkgY2FsbCwgd2UgbG9hZCB0aGUgdGlsZSBmcmVzaC5cbiAgICAqXG4gICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgKiBAcGFyYW0gcGFyYW1zLnVpZCBUaGUgVUlEIGZvciB0aGlzIHRpbGUuXG4gICAgKi9cbiAgICByZWxvYWRUaWxlKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkO1xuXG4gICAgICAgIGlmIChsb2FkZWQgJiYgbG9hZGVkW3VpZF0pIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5yZWxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaCBhbmQgcGFyc2UgR2VvSlNPTiBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHBhcmFtcy4gIENhbGxzIGBjYWxsYmFja2BcbiAgICAgKiB3aXRoIGAoZXJyLCBkYXRhKWAsIHdoZXJlIGBkYXRhYCBpcyBhIHBhcnNlZCBHZW9KU09OIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEdlb0pTT04gaXMgbG9hZGVkIGFuZCBwYXJzZWQgZnJvbSBgcGFyYW1zLnVybGAgaWYgaXQgZXhpc3RzLCBvciBlbHNlXG4gICAgICogZXhwZWN0ZWQgYXMgYSBsaXRlcmFsIChzdHJpbmcgb3Igb2JqZWN0KSBgcGFyYW1zLmRhdGFgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwYXJhbSBbcGFyYW1zLnVybF0gQSBVUkwgdG8gdGhlIHJlbW90ZSBHZW9KU09OIGRhdGEuXG4gICAgICogQHBhcmFtIFtwYXJhbXMuZGF0YV0gTGl0ZXJhbCBHZW9KU09OIGRhdGEuIE11c3QgYmUgcHJvdmlkZWQgaWYgYHBhcmFtcy51cmxgIGlzIG5vdC5cbiAgICAgKi9cbiAgICBsb2FkR2VvSlNPTihwYXJhbXM6IExvYWRHZW9KU09OUGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8T2JqZWN0Pikge1xuICAgICAgICAvLyBCZWNhdXNlIG9mIHNhbWUgb3JpZ2luIGlzc3VlcywgdXJscyBtdXN0IGVpdGhlciBpbmNsdWRlIGFuIGV4cGxpY2l0XG4gICAgICAgIC8vIG9yaWdpbiBvciBhYnNvbHV0ZSBwYXRoLlxuICAgICAgICAvLyBpZTogL2Zvby9iYXIuanNvbiBvciBodHRwOi8vZXhhbXBsZS5jb20vYmFyLmpzb25cbiAgICAgICAgLy8gYnV0IG5vdCAuLi9mb28vYmFyLmpzb25cbiAgICAgICAgaWYgKHBhcmFtcy5yZXF1ZXN0KSB7XG4gICAgICAgICAgICBnZXRKU09OKHBhcmFtcy5yZXF1ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgSlNPTi5wYXJzZShwYXJhbXMuZGF0YSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYElucHV0IGRhdGEgZ2l2ZW4gdG8gJyR7cGFyYW1zLnNvdXJjZX0nIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LmApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYElucHV0IGRhdGEgZ2l2ZW4gdG8gJyR7cGFyYW1zLnNvdXJjZX0nIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LmApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZVNvdXJjZShwYXJhbXM6IHtzb3VyY2U6IHN0cmluZ30sIGNhbGxiYWNrOiBDYWxsYmFjazxtaXhlZD4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdDYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gRG9uJ3QgbGVhayBjYWxsYmFja3NcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLCB7YWJhbmRvbmVkOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyRXhwYW5zaW9uWm9vbShwYXJhbXM6IHtjbHVzdGVySWQ6IG51bWJlcn0sIGNhbGxiYWNrOiBDYWxsYmFjazxudW1iZXI+KSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHRoaXMuX2dlb0pTT05JbmRleC5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbShwYXJhbXMuY2x1c3RlcklkKSk7XG4gICAgfVxuXG4gICAgZ2V0Q2x1c3RlckNoaWxkcmVuKHBhcmFtczoge2NsdXN0ZXJJZDogbnVtYmVyfSwgY2FsbGJhY2s6IENhbGxiYWNrPEFycmF5PEdlb0pTT05GZWF0dXJlPj4pIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhpcy5fZ2VvSlNPTkluZGV4LmdldENoaWxkcmVuKHBhcmFtcy5jbHVzdGVySWQpKTtcbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyTGVhdmVzKHBhcmFtczoge2NsdXN0ZXJJZDogbnVtYmVyLCBsaW1pdDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlcn0sIGNhbGxiYWNrOiBDYWxsYmFjazxBcnJheTxHZW9KU09ORmVhdHVyZT4+KSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHRoaXMuX2dlb0pTT05JbmRleC5nZXRMZWF2ZXMocGFyYW1zLmNsdXN0ZXJJZCwgcGFyYW1zLmxpbWl0LCBwYXJhbXMub2Zmc2V0KSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdXBlcmNsdXN0ZXJPcHRpb25zKHtzdXBlcmNsdXN0ZXJPcHRpb25zLCBjbHVzdGVyUHJvcGVydGllc30pIHtcbiAgICBpZiAoIWNsdXN0ZXJQcm9wZXJ0aWVzIHx8ICFzdXBlcmNsdXN0ZXJPcHRpb25zKSByZXR1cm4gc3VwZXJjbHVzdGVyT3B0aW9ucztcblxuICAgIGNvbnN0IG1hcEV4cHJlc3Npb25zID0ge307XG4gICAgY29uc3QgcmVkdWNlRXhwcmVzc2lvbnMgPSB7fTtcbiAgICBjb25zdCBnbG9iYWxzID0ge2FjY3VtdWxhdGVkOiBudWxsLCB6b29tOiAwfTtcbiAgICBjb25zdCBmZWF0dXJlID0ge3Byb3BlcnRpZXM6IG51bGx9O1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhjbHVzdGVyUHJvcGVydGllcyk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IFtvcGVyYXRvciwgbWFwRXhwcmVzc2lvbl0gPSBjbHVzdGVyUHJvcGVydGllc1trZXldO1xuXG4gICAgICAgIGNvbnN0IG1hcEV4cHJlc3Npb25QYXJzZWQgPSBjcmVhdGVFeHByZXNzaW9uKG1hcEV4cHJlc3Npb24pO1xuICAgICAgICBjb25zdCByZWR1Y2VFeHByZXNzaW9uUGFyc2VkID0gY3JlYXRlRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHR5cGVvZiBvcGVyYXRvciA9PT0gJ3N0cmluZycgPyBbb3BlcmF0b3IsIFsnYWNjdW11bGF0ZWQnXSwgWydnZXQnLCBrZXldXSA6IG9wZXJhdG9yKTtcblxuICAgICAgICBhc3NlcnQobWFwRXhwcmVzc2lvblBhcnNlZC5yZXN1bHQgPT09ICdzdWNjZXNzJyk7XG4gICAgICAgIGFzc2VydChyZWR1Y2VFeHByZXNzaW9uUGFyc2VkLnJlc3VsdCA9PT0gJ3N1Y2Nlc3MnKTtcblxuICAgICAgICBtYXBFeHByZXNzaW9uc1trZXldID0gbWFwRXhwcmVzc2lvblBhcnNlZC52YWx1ZTtcbiAgICAgICAgcmVkdWNlRXhwcmVzc2lvbnNba2V5XSA9IHJlZHVjZUV4cHJlc3Npb25QYXJzZWQudmFsdWU7XG4gICAgfVxuXG4gICAgc3VwZXJjbHVzdGVyT3B0aW9ucy5tYXAgPSAocG9pbnRQcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IHBvaW50UHJvcGVydGllcztcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSBtYXBFeHByZXNzaW9uc1trZXldLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH07XG4gICAgc3VwZXJjbHVzdGVyT3B0aW9ucy5yZWR1Y2UgPSAoYWNjdW11bGF0ZWQsIGNsdXN0ZXJQcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IGNsdXN0ZXJQcm9wZXJ0aWVzO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICBnbG9iYWxzLmFjY3VtdWxhdGVkID0gYWNjdW11bGF0ZWRba2V5XTtcbiAgICAgICAgICAgIGFjY3VtdWxhdGVkW2tleV0gPSByZWR1Y2VFeHByZXNzaW9uc1trZXldLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBzdXBlcmNsdXN0ZXJPcHRpb25zO1xufVxuXG5leHBvcnQgZGVmYXVsdCBHZW9KU09OV29ya2VyU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuXG5pbXBvcnQgU3R5bGVMYXllckluZGV4IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyX2luZGV4JztcbmltcG9ydCBWZWN0b3JUaWxlV29ya2VyU291cmNlIGZyb20gJy4vdmVjdG9yX3RpbGVfd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSBmcm9tICcuL3Jhc3Rlcl9kZW1fdGlsZV93b3JrZXJfc291cmNlJztcbmltcG9ydCBHZW9KU09OV29ya2VyU291cmNlIGZyb20gJy4vZ2VvanNvbl93b3JrZXJfc291cmNlJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7cGx1Z2luIGFzIGdsb2JhbFJUTFRleHRQbHVnaW59IGZyb20gJy4vcnRsX3RleHRfcGx1Z2luJztcbmltcG9ydCB7ZW5mb3JjZUNhY2hlU2l6ZUxpbWl0fSBmcm9tICcuLi91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZSc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJTb3VyY2UsXG4gICAgV29ya2VyVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyVGlsZUNhbGxiYWNrLFxuICAgIFdvcmtlckRFTVRpbGVDYWxsYmFjayxcbiAgICBUaWxlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9zb3VyY2Uvd29ya2VyX3NvdXJjZSc7XG5cbmltcG9ydCB0eXBlIHtXb3JrZXJHbG9iYWxTY29wZUludGVyZmFjZX0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29ya2VyIHtcbiAgICBzZWxmOiBXb3JrZXJHbG9iYWxTY29wZUludGVyZmFjZTtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgbGF5ZXJJbmRleGVzOiB7IFtzdHJpbmddOiBTdHlsZUxheWVySW5kZXggfTtcbiAgICBhdmFpbGFibGVJbWFnZXM6IHsgW3N0cmluZ106IEFycmF5PHN0cmluZz4gfTtcbiAgICB3b3JrZXJTb3VyY2VUeXBlczogeyBbc3RyaW5nXTogQ2xhc3M8V29ya2VyU291cmNlPiB9O1xuICAgIHdvcmtlclNvdXJjZXM6IHsgW3N0cmluZ106IHsgW3N0cmluZ106IHsgW3N0cmluZ106IFdvcmtlclNvdXJjZSB9IH0gfTtcbiAgICBkZW1Xb3JrZXJTb3VyY2VzOiB7IFtzdHJpbmddOiB7IFtzdHJpbmddOiBSYXN0ZXJERU1UaWxlV29ya2VyU291cmNlIH0gfTtcbiAgICByZWZlcnJlcjogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHNlbGY6IFdvcmtlckdsb2JhbFNjb3BlSW50ZXJmYWNlKSB7XG4gICAgICAgIHRoaXMuc2VsZiA9IHNlbGY7XG4gICAgICAgIHRoaXMuYWN0b3IgPSBuZXcgQWN0b3Ioc2VsZiwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5sYXllckluZGV4ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJbWFnZXMgPSB7fTtcblxuICAgICAgICB0aGlzLndvcmtlclNvdXJjZVR5cGVzID0ge1xuICAgICAgICAgICAgdmVjdG9yOiBWZWN0b3JUaWxlV29ya2VyU291cmNlLFxuICAgICAgICAgICAgZ2VvanNvbjogR2VvSlNPTldvcmtlclNvdXJjZVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFttYXBJZF1bc291cmNlVHlwZV1bc291cmNlTmFtZV0gPT4gd29ya2VyIHNvdXJjZSBpbnN0YW5jZVxuICAgICAgICB0aGlzLndvcmtlclNvdXJjZXMgPSB7fTtcbiAgICAgICAgdGhpcy5kZW1Xb3JrZXJTb3VyY2VzID0ge307XG5cbiAgICAgICAgdGhpcy5zZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlID0gKG5hbWU6IHN0cmluZywgV29ya2VyU291cmNlOiBDbGFzczxXb3JrZXJTb3VyY2U+KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy53b3JrZXJTb3VyY2VUeXBlc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgXCIke25hbWV9XCIgYWxyZWFkeSByZWdpc3RlcmVkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VUeXBlc1tuYW1lXSA9IFdvcmtlclNvdXJjZTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnNlbGYucmVnaXN0ZXJSVExUZXh0UGx1Z2luID0gKHJ0bFRleHRQbHVnaW46IHthcHBseUFyYWJpY1NoYXBpbmc6IEZ1bmN0aW9uLCBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ6IEZ1bmN0aW9uLCBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ/OiBGdW5jdGlvbn0pID0+IHtcbiAgICAgICAgICAgIGlmIChnbG9iYWxSVExUZXh0UGx1Z2luLmlzTG9hZGVkKCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JUTCB0ZXh0IHBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnbG9iYWxSVExUZXh0UGx1Z2luWydhcHBseUFyYWJpY1NoYXBpbmcnXSA9IHJ0bFRleHRQbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nO1xuICAgICAgICAgICAgZ2xvYmFsUlRMVGV4dFBsdWdpblsncHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0J10gPSBydGxUZXh0UGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDtcbiAgICAgICAgICAgIGdsb2JhbFJUTFRleHRQbHVnaW5bJ3Byb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dCddID0gcnRsVGV4dFBsdWdpbi5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc2V0UmVmZXJyZXIobWFwSUQ6IHN0cmluZywgcmVmZXJyZXI6IHN0cmluZykge1xuICAgICAgICB0aGlzLnJlZmVycmVyID0gcmVmZXJyZXI7XG4gICAgfVxuXG4gICAgc2V0SW1hZ2VzKG1hcElkOiBzdHJpbmcsIGltYWdlczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmF2YWlsYWJsZUltYWdlc1ttYXBJZF0gPSBpbWFnZXM7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgc2V0TGF5ZXJzKG1hcElkOiBzdHJpbmcsIGxheWVyczogQXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPiwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLnJlcGxhY2UobGF5ZXJzKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB1cGRhdGVMYXllcnMobWFwSWQ6IHN0cmluZywgcGFyYW1zOiB7bGF5ZXJzOiBBcnJheTxMYXllclNwZWNpZmljYXRpb24+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+fSwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLnVwZGF0ZShwYXJhbXMubGF5ZXJzLCBwYXJhbXMucmVtb3ZlZElkcyk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgbG9hZFRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycyAmIHt0eXBlOiBzdHJpbmd9LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGFzc2VydChwYXJhbXMudHlwZSk7XG4gICAgICAgIHRoaXMuZ2V0V29ya2VyU291cmNlKG1hcElkLCBwYXJhbXMudHlwZSwgcGFyYW1zLnNvdXJjZSkubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgbG9hZERFTVRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBXb3JrZXJERU1UaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlckRFTVRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldERFTVdvcmtlclNvdXJjZShtYXBJZCwgcGFyYW1zLnNvdXJjZSkubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVsb2FkVGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5yZWxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGFib3J0VGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5hYm9ydFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5yZW1vdmVUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbW92ZURFTVRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBUaWxlUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLmdldERFTVdvcmtlclNvdXJjZShtYXBJZCwgcGFyYW1zLnNvdXJjZSkucmVtb3ZlVGlsZShwYXJhbXMpO1xuICAgIH1cblxuICAgIHJlbW92ZVNvdXJjZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtzb3VyY2U6IHN0cmluZ30gJiB7dHlwZTogc3RyaW5nfSwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBhc3NlcnQocGFyYW1zLnR5cGUpO1xuICAgICAgICBhc3NlcnQocGFyYW1zLnNvdXJjZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdIHx8XG4gICAgICAgICAgICAhdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV0gfHxcbiAgICAgICAgICAgICF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3BhcmFtcy50eXBlXVtwYXJhbXMuc291cmNlXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV1bcGFyYW1zLnNvdXJjZV07XG4gICAgICAgIGRlbGV0ZSB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3BhcmFtcy50eXBlXVtwYXJhbXMuc291cmNlXTtcblxuICAgICAgICBpZiAod29ya2VyLnJlbW92ZVNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3b3JrZXIucmVtb3ZlU291cmNlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgYSB7QGxpbmsgV29ya2VyU291cmNlfSBzY3JpcHQgYXQgcGFyYW1zLnVybC4gIFRoZSBzY3JpcHQgaXMgcnVuXG4gICAgICogKHVzaW5nIGltcG9ydFNjcmlwdHMpIHdpdGggYHJlZ2lzdGVyV29ya2VyU291cmNlYCBpbiBzY29wZSwgd2hpY2ggaXMgYVxuICAgICAqIGZ1bmN0aW9uIHRha2luZyBgKG5hbWUsIHdvcmtlclNvdXJjZU9iamVjdClgLlxuICAgICAqICBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvYWRXb3JrZXJTb3VyY2UobWFwOiBzdHJpbmcsIHBhcmFtczogeyB1cmw6IHN0cmluZyB9LCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHBhcmFtcy51cmwpO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRSVExUZXh0UGx1Z2luKG1hcDogc3RyaW5nLCBwbHVnaW5VUkw6IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWdsb2JhbFJUTFRleHRQbHVnaW4uaXNMb2FkZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHBsdWdpblVSTCk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZ2xvYmFsUlRMVGV4dFBsdWdpbi5pc0xvYWRlZCgpID9cbiAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihgUlRMIFRleHQgUGx1Z2luIGZhaWxlZCB0byBpbXBvcnQgc2NyaXB0cyBmcm9tICR7cGx1Z2luVVJMfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEF2YWlsYWJsZUltYWdlcyhtYXBJZDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBhdmFpbGFibGVJbWFnZXMgPSB0aGlzLmF2YWlsYWJsZUltYWdlc1ttYXBJZF07XG5cbiAgICAgICAgaWYgKCFhdmFpbGFibGVJbWFnZXMpIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZUltYWdlcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUltYWdlcztcbiAgICB9XG5cbiAgICBnZXRMYXllckluZGV4KG1hcElkOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGxheWVySW5kZXhlcyA9IHRoaXMubGF5ZXJJbmRleGVzW21hcElkXTtcbiAgICAgICAgaWYgKCFsYXllckluZGV4ZXMpIHtcbiAgICAgICAgICAgIGxheWVySW5kZXhlcyA9IHRoaXMubGF5ZXJJbmRleGVzW21hcElkXSA9IG5ldyBTdHlsZUxheWVySW5kZXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGF5ZXJJbmRleGVzO1xuICAgIH1cblxuICAgIGdldFdvcmtlclNvdXJjZShtYXBJZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXSlcbiAgICAgICAgICAgIHRoaXMud29ya2VyU291cmNlc1ttYXBJZF0gPSB7fTtcbiAgICAgICAgaWYgKCF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3R5cGVdKVxuICAgICAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXSA9IHt9O1xuXG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXVtzb3VyY2VdKSB7XG4gICAgICAgICAgICAvLyB1c2UgYSB3cmFwcGVkIGFjdG9yIHNvIHRoYXQgd2UgY2FuIGF0dGFjaCBhIHRhcmdldCBtYXBJZCBwYXJhbVxuICAgICAgICAgICAgLy8gdG8gYW55IG1lc3NhZ2VzIGludm9rZWQgYnkgdGhlIFdvcmtlclNvdXJjZVxuICAgICAgICAgICAgY29uc3QgYWN0b3IgPSB7XG4gICAgICAgICAgICAgICAgc2VuZDogKHR5cGUsIGRhdGEsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0b3Iuc2VuZCh0eXBlLCBkYXRhLCBjYWxsYmFjaywgbWFwSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3R5cGVdW3NvdXJjZV0gPSBuZXcgKHRoaXMud29ya2VyU291cmNlVHlwZXNbdHlwZV06IGFueSkoKGFjdG9yOiBhbnkpLCB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLCB0aGlzLmdldEF2YWlsYWJsZUltYWdlcyhtYXBJZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bdHlwZV1bc291cmNlXTtcbiAgICB9XG5cbiAgICBnZXRERU1Xb3JrZXJTb3VyY2UobWFwSWQ6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlbVdvcmtlclNvdXJjZXNbbWFwSWRdKVxuICAgICAgICAgICAgdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXSA9IHt9O1xuXG4gICAgICAgIGlmICghdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXVtzb3VyY2VdKSB7XG4gICAgICAgICAgICB0aGlzLmRlbVdvcmtlclNvdXJjZXNbbWFwSWRdW3NvdXJjZV0gPSBuZXcgUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtV29ya2VyU291cmNlc1ttYXBJZF1bc291cmNlXTtcbiAgICB9XG5cbiAgICBlbmZvcmNlQ2FjaGVTaXplTGltaXQobWFwSWQ6IHN0cmluZywgbGltaXQ6IG51bWJlcikge1xuICAgICAgICBlbmZvcmNlQ2FjaGVTaXplTGltaXQobGltaXQpO1xuICAgIH1cbn1cblxuLyogZ2xvYmFsIHNlbGYsIFdvcmtlckdsb2JhbFNjb3BlICovXG5pZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSkge1xuICAgIHNlbGYud29ya2VyID0gbmV3IFdvcmtlcihzZWxmKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBpc1N1cHBvcnRlZDtcbn0gZWxzZSBpZiAod2luZG93KSB7XG4gICAgd2luZG93Lm1hcGJveGdsID0gd2luZG93Lm1hcGJveGdsIHx8IHt9O1xuICAgIHdpbmRvdy5tYXBib3hnbC5zdXBwb3J0ZWQgPSBpc1N1cHBvcnRlZDtcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0cyBNYXBib3ggR0wgSlNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZmFsc2VdIFJldHVybiBgZmFsc2VgXG4gKiAgIGlmIHRoZSBwZXJmb3JtYW5jZSBvZiBNYXBib3ggR0wgSlMgd291bGQgYmUgZHJhbWF0aWNhbGx5IHdvcnNlIHRoYW5cbiAqICAgZXhwZWN0ZWQgKGkuZS4gYSBzb2Z0d2FyZSByZW5kZXJlciBpcyB3b3VsZCBiZSB1c2VkKVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTdXBwb3J0ZWQob3B0aW9ucykge1xuICAgIHJldHVybiAhIShcbiAgICAgICAgaXNCcm93c2VyKCkgJiZcbiAgICAgICAgaXNBcnJheVN1cHBvcnRlZCgpICYmXG4gICAgICAgIGlzRnVuY3Rpb25TdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc09iamVjdFN1cHBvcnRlZCgpICYmXG4gICAgICAgIGlzSlNPTlN1cHBvcnRlZCgpICYmXG4gICAgICAgIGlzV29ya2VyU3VwcG9ydGVkKCkgJiZcbiAgICAgICAgaXNVaW50OENsYW1wZWRBcnJheVN1cHBvcnRlZCgpICYmXG4gICAgICAgIGlzQXJyYXlCdWZmZXJTdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVkKG9wdGlvbnMgJiYgb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGlzQnJvd3NlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbn1cblxuZnVuY3Rpb24gaXNBcnJheVN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBBcnJheS5wcm90b3R5cGUgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmV2ZXJ5ICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5tYXAgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNvbWUgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb25TdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZSAmJiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgT2JqZWN0LmtleXMgJiZcbiAgICAgICAgT2JqZWN0LmNyZWF0ZSAmJlxuICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiZcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgJiZcbiAgICAgICAgT2JqZWN0LmlzU2VhbGVkICYmXG4gICAgICAgIE9iamVjdC5pc0Zyb3plbiAmJlxuICAgICAgICBPYmplY3QuaXNFeHRlbnNpYmxlICYmXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiZcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICYmXG4gICAgICAgIE9iamVjdC5zZWFsICYmXG4gICAgICAgIE9iamVjdC5mcmVlemUgJiZcbiAgICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gaXNKU09OU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiAnSlNPTicgaW4gd2luZG93ICYmICdwYXJzZScgaW4gSlNPTiAmJiAnc3RyaW5naWZ5JyBpbiBKU09OO1xufVxuXG5mdW5jdGlvbiBpc1dvcmtlclN1cHBvcnRlZCgpIHtcbiAgICBpZiAoISgnV29ya2VyJyBpbiB3aW5kb3cgJiYgJ0Jsb2InIGluIHdpbmRvdyAmJiAnVVJMJyBpbiB3aW5kb3cpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFsnJ10sIHsgdHlwZTogJ3RleHQvamF2YXNjcmlwdCcgfSk7XG4gICAgdmFyIHdvcmtlclVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgdmFyIHN1cHBvcnRlZDtcbiAgICB2YXIgd29ya2VyO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVUkwpO1xuICAgICAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHdvcmtlcikge1xuICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgfVxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwod29ya2VyVVJMKTtcblxuICAgIHJldHVybiBzdXBwb3J0ZWQ7XG59XG5cbi8vIElFMTEgb25seSBzdXBwb3J0cyBgVWludDhDbGFtcGVkQXJyYXlgIGFzIG9mIHZlcnNpb25cbi8vIFtLQjI5Mjk0MzddKGh0dHBzOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2VuLXVzL2tiLzI5Mjk0MzcpXG5mdW5jdGlvbiBpc1VpbnQ4Q2xhbXBlZEFycmF5U3VwcG9ydGVkKCkge1xuICAgIHJldHVybiAnVWludDhDbGFtcGVkQXJyYXknIGluIHdpbmRvdztcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtc3VwcG9ydGVkL2lzc3Vlcy8xOVxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3O1xufVxuXG52YXIgaXNXZWJHTFN1cHBvcnRlZENhY2hlID0ge307XG5mdW5jdGlvbiBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVkKGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpIHtcblxuICAgIGlmIChpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF0gPSBpc1dlYkdMU3VwcG9ydGVkKGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF07XG59XG5cbmlzU3VwcG9ydGVkLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMgPSB7XG4gICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICBhbHBoYTogdHJ1ZSxcbiAgICBzdGVuY2lsOiB0cnVlLFxuICAgIGRlcHRoOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc1dlYkdMU3VwcG9ydGVkKGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpIHtcblxuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIHZhciBhdHRyaWJ1dGVzID0gT2JqZWN0LmNyZWF0ZShpc1N1cHBvcnRlZC53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtcbiAgICBhdHRyaWJ1dGVzLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgPSBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O1xuXG4gICAgaWYgKGNhbnZhcy5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2FudmFzLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCd3ZWJnbCcsIGF0dHJpYnV0ZXMpIHx8XG4gICAgICAgICAgICBjYW52YXMucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGF0dHJpYnV0ZXMpXG4gICAgICAgICk7XG5cbiAgICB9IGVsc2UgaWYgKGNhbnZhcy5zdXBwb3J0c0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNhbnZhcy5zdXBwb3J0c0NvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIGNhbnZhcy5zdXBwb3J0c0NvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGF0dHJpYnV0ZXMpXG4gICAgICAgICk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93IHN0cmljdFxuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5jb25zdCBET00gPSB7fTtcbmV4cG9ydCBkZWZhdWx0IERPTTtcblxuRE9NLmNyZWF0ZSA9IGZ1bmN0aW9uICh0YWdOYW1lOiBzdHJpbmcsIGNsYXNzTmFtZTogP3N0cmluZywgY29udGFpbmVyPzogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBlbCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICAgIGlmIChjbGFzc05hbWUgIT09IHVuZGVmaW5lZCkgZWwuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgIGlmIChjb250YWluZXIpIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbCk7XG4gICAgcmV0dXJuIGVsO1xufTtcblxuRE9NLmNyZWF0ZU5TID0gZnVuY3Rpb24gKG5hbWVzcGFjZVVSSTogc3RyaW5nLCB0YWdOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCB0YWdOYW1lKTtcbiAgICByZXR1cm4gZWw7XG59O1xuXG5jb25zdCBkb2NTdHlsZSA9IHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XG5cbmZ1bmN0aW9uIHRlc3RQcm9wKHByb3BzKSB7XG4gICAgaWYgKCFkb2NTdHlsZSkgcmV0dXJuIHByb3BzWzBdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHByb3BzW2ldIGluIGRvY1N0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BzWzBdO1xufVxuXG5jb25zdCBzZWxlY3RQcm9wID0gdGVzdFByb3AoWyd1c2VyU2VsZWN0JywgJ01velVzZXJTZWxlY3QnLCAnV2Via2l0VXNlclNlbGVjdCcsICdtc1VzZXJTZWxlY3QnXSk7XG5sZXQgdXNlclNlbGVjdDtcblxuRE9NLmRpc2FibGVEcmFnID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChkb2NTdHlsZSAmJiBzZWxlY3RQcm9wKSB7XG4gICAgICAgIHVzZXJTZWxlY3QgPSBkb2NTdHlsZVtzZWxlY3RQcm9wXTtcbiAgICAgICAgZG9jU3R5bGVbc2VsZWN0UHJvcF0gPSAnbm9uZSc7XG4gICAgfVxufTtcblxuRE9NLmVuYWJsZURyYWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGRvY1N0eWxlICYmIHNlbGVjdFByb3ApIHtcbiAgICAgICAgZG9jU3R5bGVbc2VsZWN0UHJvcF0gPSB1c2VyU2VsZWN0O1xuICAgIH1cbn07XG5cbmNvbnN0IHRyYW5zZm9ybVByb3AgPSB0ZXN0UHJvcChbJ3RyYW5zZm9ybScsICdXZWJraXRUcmFuc2Zvcm0nXSk7XG5cbkRPTS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbihlbDogSFRNTEVsZW1lbnQsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNzc1NFxuICAgIC8vICRGbG93Rml4TWVcbiAgICBlbC5zdHlsZVt0cmFuc2Zvcm1Qcm9wXSA9IHZhbHVlO1xufTtcblxuLy8gRmVhdHVyZSBkZXRlY3Rpb24gZm9yIHtwYXNzaXZlOiBmYWxzZX0gc3VwcG9ydCBpbiBhZGQvcmVtb3ZlRXZlbnRMaXN0ZW5lci5cbmxldCBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG5cbnRyeSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgIC8vICRGbG93Rml4TWVcbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCBcInBhc3NpdmVcIiwge1xuICAgICAgICBnZXQoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLCBvcHRpb25zLCBvcHRpb25zKTtcbn0gY2F0Y2ggKGVycikge1xuICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZTtcbn1cblxuRE9NLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbih0YXJnZXQ6ICosIHR5cGU6ICosIGNhbGxiYWNrOiAqLCBvcHRpb25zOiB7cGFzc2l2ZT86IGJvb2xlYW4sIGNhcHR1cmU/OiBib29sZWFufSA9IHt9KSB7XG4gICAgaWYgKCdwYXNzaXZlJyBpbiBvcHRpb25zICYmIHBhc3NpdmVTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zLmNhcHR1cmUpO1xuICAgIH1cbn07XG5cbkRPTS5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24odGFyZ2V0OiAqLCB0eXBlOiAqLCBjYWxsYmFjazogKiwgb3B0aW9uczoge3Bhc3NpdmU/OiBib29sZWFuLCBjYXB0dXJlPzogYm9vbGVhbn0gPSB7fSkge1xuICAgIGlmICgncGFzc2l2ZScgaW4gb3B0aW9ucyAmJiBwYXNzaXZlU3VwcG9ydGVkKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucy5jYXB0dXJlKTtcbiAgICB9XG59O1xuXG4vLyBTdXBwcmVzcyB0aGUgbmV4dCBjbGljaywgYnV0IG9ubHkgaWYgaXQncyBpbW1lZGlhdGUuXG5jb25zdCBzdXBwcmVzc0NsaWNrOiBNb3VzZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHN1cHByZXNzQ2xpY2ssIHRydWUpO1xufTtcblxuRE9NLnN1cHByZXNzQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdXBwcmVzc0NsaWNrLCB0cnVlKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHN1cHByZXNzQ2xpY2ssIHRydWUpO1xuICAgIH0sIDApO1xufTtcblxuRE9NLm1vdXNlUG9zID0gZnVuY3Rpb24gKGVsOiBIVE1MRWxlbWVudCwgZTogTW91c2VFdmVudCB8IHdpbmRvdy5Ub3VjaEV2ZW50IHwgVG91Y2gpIHtcbiAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgdCA9IHdpbmRvdy5Ub3VjaEV2ZW50ICYmIChlIGluc3RhbmNlb2Ygd2luZG93LlRvdWNoRXZlbnQpID8gZS50b3VjaGVzWzBdIDogZTtcbiAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICB0LmNsaWVudFggLSByZWN0LmxlZnQgLSBlbC5jbGllbnRMZWZ0LFxuICAgICAgICB0LmNsaWVudFkgLSByZWN0LnRvcCAtIGVsLmNsaWVudFRvcFxuICAgICk7XG59O1xuXG5ET00udG91Y2hQb3MgPSBmdW5jdGlvbiAoZWw6IEhUTUxFbGVtZW50LCBlOiBUb3VjaEV2ZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICBwb2ludHMgPSBbXTtcbiAgICBjb25zdCB0b3VjaGVzID0gKGUudHlwZSA9PT0gJ3RvdWNoZW5kJykgPyBlLmNoYW5nZWRUb3VjaGVzIDogZS50b3VjaGVzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwb2ludHMucHVzaChuZXcgUG9pbnQoXG4gICAgICAgICAgICB0b3VjaGVzW2ldLmNsaWVudFggLSByZWN0LmxlZnQgLSBlbC5jbGllbnRMZWZ0LFxuICAgICAgICAgICAgdG91Y2hlc1tpXS5jbGllbnRZIC0gcmVjdC50b3AgLSBlbC5jbGllbnRUb3BcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5ET00ubW91c2VCdXR0b24gPSBmdW5jdGlvbiAoZTogTW91c2VFdmVudCkge1xuICAgIGFzc2VydChlLnR5cGUgPT09ICdtb3VzZWRvd24nIHx8IGUudHlwZSA9PT0gJ21vdXNldXAnKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdy5JbnN0YWxsVHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCcgJiYgZS5idXR0b24gPT09IDIgJiYgZS5jdHJsS2V5ICYmXG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0udG9VcHBlckNhc2UoKS5pbmRleE9mKCdNQUMnKSA+PSAwKSB7XG4gICAgICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzMxMzE6XG4gICAgICAgIC8vIEZpcmVmb3ggKGRldGVjdGVkIGJ5IEluc3RhbGxUcmlnZ2VyKSBvbiBNYWMgZGV0ZXJtaW5lcyBlLmJ1dHRvbiA9IDIgd2hlblxuICAgICAgICAvLyB1c2luZyBDb250cm9sICsgbGVmdCBjbGlja1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGUuYnV0dG9uO1xufTtcblxuRE9NLnJlbW92ZSA9IGZ1bmN0aW9uKG5vZGU6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgfVxufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0SlNPTiwgZ2V0SW1hZ2UsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4vc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYmFzZVVSTDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFuYWdlcjogUmVxdWVzdE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0cmluZ106IFN0eWxlSW1hZ2V9Pik6IENhbmNlbGFibGUge1xuICAgIGxldCBqc29uOiBhbnksIGltYWdlLCBlcnJvcjtcbiAgICBjb25zdCBmb3JtYXQgPSBicm93c2VyLmRldmljZVBpeGVsUmF0aW8gPiAxID8gJ0AyeCcgOiAnJztcblxuICAgIGxldCBqc29uUmVxdWVzdCA9IGdldEpTT04ocmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChyZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTcHJpdGVVUkwoYmFzZVVSTCwgZm9ybWF0LCAnLmpzb24nKSwgUmVzb3VyY2VUeXBlLlNwcml0ZUpTT04pLCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9PYmplY3QpID0+IHtcbiAgICAgICAganNvblJlcXVlc3QgPSBudWxsO1xuICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIGpzb24gPSBkYXRhO1xuICAgICAgICAgICAgbWF5YmVDb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgaW1hZ2VSZXF1ZXN0ID0gZ2V0SW1hZ2UocmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChyZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTcHJpdGVVUkwoYmFzZVVSTCwgZm9ybWF0LCAnLnBuZycpLCBSZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLCAoZXJyLCBpbWcpID0+IHtcbiAgICAgICAgaW1hZ2VSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICBpbWFnZSA9IGltZztcbiAgICAgICAgICAgIG1heWJlQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWF5YmVDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoanNvbiAmJiBpbWFnZSkge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1hZ2UpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4ganNvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCB4LCB5LCBzZGYsIHBpeGVsUmF0aW99ID0ganNvbltpZF07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBSR0JBSW1hZ2Uoe3dpZHRoLCBoZWlnaHR9KTtcbiAgICAgICAgICAgICAgICBSR0JBSW1hZ2UuY29weShpbWFnZURhdGEsIGRhdGEsIHt4LCB5fSwge3g6IDAsIHk6IDB9LCB7d2lkdGgsIGhlaWdodH0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpZF0gPSB7ZGF0YSwgcGl4ZWxSYXRpbywgc2RmfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGNhbmNlbCgpIHtcbiAgICAgICAgICAgIGlmIChqc29uUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIGpzb25SZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIGpzb25SZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbWFnZVJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBpbWFnZVJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgaW1hZ2VSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuXG5leHBvcnQgdHlwZSBTdHlsZUltYWdlID0ge1xuICAgIGRhdGE6IFJHQkFJbWFnZSxcbiAgICBwaXhlbFJhdGlvOiBudW1iZXIsXG4gICAgc2RmOiBib29sZWFuLFxuICAgIHZlcnNpb246IG51bWJlcixcbiAgICBoYXNSZW5kZXJDYWxsYmFjaz86IGJvb2xlYW4sXG4gICAgdXNlckltYWdlPzogU3R5bGVJbWFnZUludGVyZmFjZVxufTtcblxuZXhwb3J0IHR5cGUgU3R5bGVJbWFnZUludGVyZmFjZSA9IHtcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGRhdGE6IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheSxcbiAgICByZW5kZXI/OiAoKSA9PiB2b2lkLFxuICAgIG9uQWRkPzogKG1hcDogTWFwLCBpZDogc3RyaW5nKSA9PiB2b2lkLFxuICAgIG9uUmVtb3ZlPzogKCkgPT4gdm9pZFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclN0eWxlSW1hZ2UoaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICBjb25zdCB7dXNlckltYWdlfSA9IGltYWdlO1xuICAgIGlmICh1c2VySW1hZ2UgJiYgdXNlckltYWdlLnJlbmRlcikge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gdXNlckltYWdlLnJlbmRlcigpO1xuICAgICAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICAgICAgaW1hZ2UuZGF0YS5yZXBsYWNlKG5ldyBVaW50OEFycmF5KHVzZXJJbWFnZS5kYXRhLmJ1ZmZlcikpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHN0eWxlIGltYWdlcy4gVGhpcyBpcyBhIHNwZWNpZmljYXRpb24gZm9yXG4gKiBpbXBsZW1lbnRlcnMgdG8gbW9kZWw6IGl0IGlzIG5vdCBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogSW1hZ2VzIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBjYW4gYmUgcmVkcmF3biBmb3IgZXZlcnkgZnJhbWUuIFRoZXkgY2FuIGJlIHVzZWQgdG8gYW5pbWF0ZVxuICogaWNvbnMgYW5kIHBhdHRlcm5zIG9yIG1ha2UgdGhlbSByZXNwb25kIHRvIHVzZXIgaW5wdXQuIFN0eWxlIGltYWdlcyBjYW4gaW1wbGVtZW50IGFcbiAqIHtAbGluayBTdHlsZUltYWdlSW50ZXJmYWNlI3JlbmRlcn0gbWV0aG9kLiBUaGUgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSBmcmFtZSBhbmRcbiAqIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgaW1hZ2UuXG4gKlxuICogQGludGVyZmFjZSBTdHlsZUltYWdlSW50ZXJmYWNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7VWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5fSBkYXRhXG4gKlxuICogQHNlZSBbQWRkIGFuIGFuaW1hdGVkIGljb24gdG8gdGhlIG1hcC5dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS1hbmltYXRlZC8pXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBmbGFzaGluZ1NxdWFyZSA9IHtcbiAqICAgICB3aWR0aDogNjQsXG4gKiAgICAgaGVpZ2h0OiA2NCxcbiAqICAgICBkYXRhOiBuZXcgVWludDhBcnJheSg2NCAqIDY0ICogNCksXG4gKlxuICogICAgIG9uQWRkOiBmdW5jdGlvbihtYXApIHtcbiAqICAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gKiAgICAgfSxcbiAqXG4gKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICAgICAgLy8ga2VlcCByZXBhaW50aW5nIHdoaWxlIHRoZSBpY29uIGlzIG9uIHRoZSBtYXBcbiAqICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAqXG4gKiAgICAgICAgIC8vIGFsdGVybmF0ZSBiZXR3ZWVuIGJsYWNrIGFuZCB3aGl0ZSBiYXNlZCBvbiB0aGUgdGltZVxuICogICAgICAgICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKSAlIDIgPT09IDAgID8gMjU1IDogMDtcbiAqXG4gKiAgICAgICAgIC8vIGNoZWNrIGlmIGltYWdlIG5lZWRzIHRvIGJlIGNoYW5nZWRcbiAqICAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnByZXZpb3VzVmFsdWUpIHtcbiAqICAgICAgICAgICAgIHRoaXMucHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICpcbiAqICAgICAgICAgICAgIHZhciBieXRlc1BlclBpeGVsID0gNDtcbiAqICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG4gKiAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCB0aGlzLmhlaWdodDsgeSsrKSB7XG4gKiAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAoeSAqIHRoaXMud2lkdGggKyB4KSAqIGJ5dGVzUGVyUGl4ZWw7XG4gKiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtvZmZzZXQgKyAwXSA9IHZhbHVlO1xuICogICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbb2Zmc2V0ICsgMV0gPSB2YWx1ZTtcbiAqICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW29mZnNldCArIDJdID0gdmFsdWU7XG4gKiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtvZmZzZXQgKyAzXSA9IDI1NTtcbiAqICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICB9XG4gKlxuICogICAgICAgICAgICAgLy8gcmV0dXJuIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaW1hZ2UgY2hhbmdlZFxuICogICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gKiAgICAgICAgIH1cbiAqICAgICB9XG4gKiAgfVxuICpcbiAqICBtYXAuYWRkSW1hZ2UoJ2ZsYXNoaW5nX3NxdWFyZScsIGZsYXNoaW5nU3F1YXJlKTtcbiAqL1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIGJlZm9yZSBldmVyeSBmcmFtZSB3aGVyZSB0aGUgaWNvbiB3aWxsIGJlIHVzZWQuXG4gKiBUaGUgbWV0aG9kIGNhbiBvcHRpb25hbGx5IHVwZGF0ZSB0aGUgaW1hZ2UncyBgZGF0YWAgbWVtYmVyIHdpdGggYSBuZXcgaW1hZ2UuXG4gKlxuICogSWYgdGhlIG1ldGhvZCB1cGRhdGVzIHRoZSBpbWFnZSBpdCBtdXN0IHJldHVybiBgdHJ1ZWAgdG8gY29tbWl0IHRoZSBjaGFuZ2UuXG4gKiBJZiB0aGUgbWV0aG9kIHJldHVybnMgYGZhbHNlYCBvciBub3RoaW5nIHRoZSBpbWFnZSBpcyBhc3N1bWVkIHRvIG5vdCBoYXZlIGNoYW5nZWQuXG4gKlxuICogSWYgdXBkYXRlcyBhcmUgaW5mcmVxdWVudCBpdCBtYXliZSBlYXNpZXIgdG8gdXNlIHtAbGluayBNYXAjdXBkYXRlSW1hZ2V9IHRvIHVwZGF0ZVxuICogdGhlIGltYWdlIGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIFN0eWxlSW1hZ2VJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgcmVuZGVyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhpcyBtZXRob2QgdXBkYXRlZCB0aGUgaW1hZ2UuIGBmYWxzZWAgaWYgdGhlIGltYWdlIHdhcyBub3QgY2hhbmdlZC5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgbGF5ZXIgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIE1hcCB3aXRoIHtAbGluayBNYXAjYWRkSW1hZ2V9LlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIFN0eWxlSW1hZ2VJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgb25BZGRcbiAqIEBwYXJhbSB7TWFwfSBtYXAgVGhlIE1hcCB0aGlzIGN1c3RvbSBsYXllciB3YXMganVzdCBhZGRlZCB0by5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgaWNvbiBpcyByZW1vdmVkIGZyb20gdGhlIG1hcCB3aXRoIHtAbGluayBNYXAjcmVtb3ZlSW1hZ2V9LlxuICogVGhpcyBnaXZlcyB0aGUgaW1hZ2UgYSBjaGFuY2UgdG8gY2xlYW4gdXAgcmVzb3VyY2VzIGFuZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgU3R5bGVJbWFnZUludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICovXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgcG90cGFjayBmcm9tICdwb3RwYWNrJztcblxuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcbmltcG9ydCB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtyZW5kZXJTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtCaW59IGZyb20gJ3BvdHBhY2snO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbnR5cGUgUGF0dGVybiA9IHtcbiAgICBiaW46IEJpbixcbiAgICBwb3NpdGlvbjogSW1hZ2VQb3NpdGlvblxufTtcblxuLy8gV2hlbiBjb3BpZWQgaW50byB0aGUgYXRsYXMgdGV4dHVyZSwgaW1hZ2UgZGF0YSBpcyBwYWRkZWQgYnkgb25lIHBpeGVsIG9uIGVhY2ggc2lkZS4gSWNvblxuLy8gaW1hZ2VzIGFyZSBwYWRkZWQgd2l0aCBmdWxseSB0cmFuc3BhcmVudCBwaXhlbHMsIHdoaWxlIHBhdHRlcm4gaW1hZ2VzIGFyZSBwYWRkZWQgd2l0aCBhXG4vLyBjb3B5IG9mIHRoZSBpbWFnZSBkYXRhIHdyYXBwZWQgZnJvbSB0aGUgb3Bwb3NpdGUgc2lkZS4gSW4gYm90aCBjYXNlcywgdGhpcyBlbnN1cmVzIHRoZVxuLy8gY29ycmVjdCBiZWhhdmlvciBvZiBHTF9MSU5FQVIgdGV4dHVyZSBzYW1wbGluZyBtb2RlLlxuY29uc3QgcGFkZGluZyA9IDE7XG5cbi8qXG4gICAgSW1hZ2VNYW5hZ2VyIGRvZXMgdGhyZWUgdGhpbmdzOlxuXG4gICAgICAgIDEuIFRyYWNrcyByZXF1ZXN0cyBmb3IgaWNvbiBpbWFnZXMgZnJvbSB0aWxlIHdvcmtlcnMgYW5kIHNlbmRzIHJlc3BvbnNlcyB3aGVuIHRoZSByZXF1ZXN0cyBhcmUgZnVsZmlsbGVkLlxuICAgICAgICAyLiBCdWlsZHMgYSB0ZXh0dXJlIGF0bGFzIGZvciBwYXR0ZXJuIGltYWdlcy5cbiAgICAgICAgMy4gUmVyZW5kZXJzIHJlbmRlcmFibGUgaW1hZ2VzIG9uY2UgcGVyIGZyYW1lXG5cbiAgICBUaGVzZSBhcmUgZGlzcGFyYXRlIHJlc3BvbnNpYmlsaXRpZXMgYW5kIHNob3VsZCBldmVudHVhbGx5IGJlIGhhbmRsZWQgYnkgZGlmZmVyZW50IGNsYXNzZXMuIFdoZW4gd2UgaW1wbGVtZW50XG4gICAgZGF0YS1kcml2ZW4gc3VwcG9ydCBmb3IgYCotcGF0dGVybmAsIHdlJ2xsIGxpa2VseSB1c2UgcGVyLWJ1Y2tldCBwYXR0ZXJuIGF0bGFzZXMsIGFuZCB0aGF0IHdvdWxkIGJlIGEgZ29vZCB0aW1lXG4gICAgdG8gcmVmYWN0b3IgdGhpcy5cbiovXG5jbGFzcyBJbWFnZU1hbmFnZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBpbWFnZXM6IHtbc3RyaW5nXTogU3R5bGVJbWFnZX07XG4gICAgdXBkYXRlZEltYWdlczoge1tzdHJpbmddOiBib29sZWFufTtcbiAgICBjYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWU6IHtbc3RyaW5nXTogYm9vbGVhbn07XG4gICAgbG9hZGVkOiBib29sZWFuO1xuICAgIHJlcXVlc3RvcnM6IEFycmF5PHtpZHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0cmluZ106IFN0eWxlSW1hZ2V9Pn0+O1xuXG4gICAgcGF0dGVybnM6IHtbc3RyaW5nXTogUGF0dGVybn07XG4gICAgYXRsYXNJbWFnZTogUkdCQUltYWdlO1xuICAgIGF0bGFzVGV4dHVyZTogP1RleHR1cmU7XG4gICAgZGlydHk6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZXMgPSB7fTtcbiAgICAgICAgdGhpcy51cGRhdGVkSW1hZ2VzID0ge307XG4gICAgICAgIHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lID0ge307XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVxdWVzdG9ycyA9IFtdO1xuXG4gICAgICAgIHRoaXMucGF0dGVybnMgPSB7fTtcbiAgICAgICAgdGhpcy5hdGxhc0ltYWdlID0gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IDEsIGhlaWdodDogMX0pO1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0xvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVkO1xuICAgIH1cblxuICAgIHNldExvYWRlZChsb2FkZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkID09PSBsb2FkZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGVkID0gbG9hZGVkO1xuXG4gICAgICAgIGlmIChsb2FkZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qge2lkcywgY2FsbGJhY2t9IG9mIHRoaXMucmVxdWVzdG9ycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmeShpZHMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVxdWVzdG9ycyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2UoaWQ6IHN0cmluZyk6ID9TdHlsZUltYWdlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzW2lkXTtcbiAgICB9XG5cbiAgICBhZGRJbWFnZShpZDogc3RyaW5nLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaW1hZ2VzW2lkXSk7XG4gICAgICAgIHRoaXMuaW1hZ2VzW2lkXSA9IGltYWdlO1xuICAgIH1cblxuICAgIHVwZGF0ZUltYWdlKGlkOiBzdHJpbmcsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGNvbnN0IG9sZEltYWdlID0gdGhpcy5pbWFnZXNbaWRdO1xuICAgICAgICBhc3NlcnQob2xkSW1hZ2UpO1xuICAgICAgICBhc3NlcnQob2xkSW1hZ2UuZGF0YS53aWR0aCA9PT0gaW1hZ2UuZGF0YS53aWR0aCk7XG4gICAgICAgIGFzc2VydChvbGRJbWFnZS5kYXRhLmhlaWdodCA9PT0gaW1hZ2UuZGF0YS5oZWlnaHQpO1xuICAgICAgICBpbWFnZS52ZXJzaW9uID0gb2xkSW1hZ2UudmVyc2lvbiArIDE7XG4gICAgICAgIHRoaXMuaW1hZ2VzW2lkXSA9IGltYWdlO1xuICAgICAgICB0aGlzLnVwZGF0ZWRJbWFnZXNbaWRdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW1vdmVJbWFnZShpZDogc3RyaW5nKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLmltYWdlc1tpZF0pO1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMucGF0dGVybnNbaWRdO1xuXG4gICAgICAgIGlmIChpbWFnZS51c2VySW1hZ2UgJiYgaW1hZ2UudXNlckltYWdlLm9uUmVtb3ZlKSB7XG4gICAgICAgICAgICBpbWFnZS51c2VySW1hZ2Uub25SZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxpc3RJbWFnZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmltYWdlcyk7XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2VzKGlkczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IENhbGxiYWNrPHtbc3RyaW5nXTogU3R5bGVJbWFnZX0+KSB7XG4gICAgICAgIC8vIElmIHRoZSBzcHJpdGUgaGFzIGJlZW4gbG9hZGVkLCBvciBpZiBhbGwgdGhlIGljb24gZGVwZW5kZW5jaWVzIGFyZSBhbHJlYWR5IHByZXNlbnRcbiAgICAgICAgLy8gKGkuZS4gaWYgdGhleSd2ZSBiZWVuIGFkZGVkIHZpYSBydW50aW1lIHN0eWxpbmcpLCB0aGVuIG5vdGlmeSB0aGUgcmVxdWVzdG9yIGltbWVkaWF0ZWx5LlxuICAgICAgICAvLyBPdGhlcndpc2UsIGRlbGF5IG5vdGlmaWNhdGlvbiB1bnRpbCB0aGUgc3ByaXRlIGlzIGxvYWRlZC4gQXQgdGhhdCBwb2ludCwgaWYgYW55IG9mIHRoZVxuICAgICAgICAvLyBkZXBlbmRlbmNpZXMgYXJlIHN0aWxsIHVuYXZhaWxhYmxlLCB3ZSdsbCBqdXN0IGFzc3VtZSB0aGV5IGFyZSBwZXJtYW5lbnRseSBtaXNzaW5nLlxuICAgICAgICBsZXQgaGFzQWxsRGVwZW5kZW5jaWVzID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGVkKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmltYWdlc1tpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQWxsRGVwZW5kZW5jaWVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGVkKCkgfHwgaGFzQWxsRGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoaWRzLCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RvcnMucHVzaCh7aWRzLCBjYWxsYmFja30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX25vdGlmeShpZHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0cmluZ106IFN0eWxlSW1hZ2V9Pikge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW1hZ2VzW2lkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3N0eWxlaW1hZ2VtaXNzaW5nJywge2lkfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlc1tpZF07XG4gICAgICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAvLyBDbG9uZSB0aGUgaW1hZ2Ugc28gdGhhdCBvdXIgb3duIGNvcHkgb2YgaXRzIEFycmF5QnVmZmVyIGRvZXNuJ3QgZ2V0IHRyYW5zZmVycmVkLlxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW2lkXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW1hZ2UuZGF0YS5jbG9uZSgpLFxuICAgICAgICAgICAgICAgICAgICBwaXhlbFJhdGlvOiBpbWFnZS5waXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgICAgICBzZGY6IGltYWdlLnNkZixcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogaW1hZ2UudmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgaGFzUmVuZGVyQ2FsbGJhY2s6IEJvb2xlYW4oaW1hZ2UudXNlckltYWdlICYmIGltYWdlLnVzZXJJbWFnZS5yZW5kZXIpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoYEltYWdlIFwiJHtpZH1cIiBjb3VsZCBub3QgYmUgbG9hZGVkLiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIGFkZGVkIHRoZSBpbWFnZSB3aXRoIG1hcC5hZGRJbWFnZSgpIG9yIGEgXCJzcHJpdGVcIiBwcm9wZXJ0eSBpbiB5b3VyIHN0eWxlLiBZb3UgY2FuIHByb3ZpZGUgbWlzc2luZyBpbWFnZXMgYnkgbGlzdGVuaW5nIGZvciB0aGUgXCJzdHlsZWltYWdlbWlzc2luZ1wiIG1hcCBldmVudC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICAvLyBQYXR0ZXJuIHN0dWZmXG5cbiAgICBnZXRQaXhlbFNpemUoKSB7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHRoaXMuYXRsYXNJbWFnZTtcbiAgICAgICAgcmV0dXJuIHt3aWR0aCwgaGVpZ2h0fTtcbiAgICB9XG5cbiAgICBnZXRQYXR0ZXJuKGlkOiBzdHJpbmcpOiA/SW1hZ2VQb3NpdGlvbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnBhdHRlcm5zW2lkXTtcblxuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuZ2V0SW1hZ2UoaWQpO1xuICAgICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXR0ZXJuICYmIHBhdHRlcm4ucG9zaXRpb24udmVyc2lvbiA9PT0gaW1hZ2UudmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4ucG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNvbnN0IHcgPSBpbWFnZS5kYXRhLndpZHRoICsgcGFkZGluZyAqIDI7XG4gICAgICAgICAgICBjb25zdCBoID0gaW1hZ2UuZGF0YS5oZWlnaHQgKyBwYWRkaW5nICogMjtcbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IHt3LCBoLCB4OiAwLCB5OiAwfTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gbmV3IEltYWdlUG9zaXRpb24oYmluLCBpbWFnZSk7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm5zW2lkXSA9IHtiaW4sIHBvc2l0aW9ufTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdHRlcm4ucG9zaXRpb24udmVyc2lvbiA9IGltYWdlLnZlcnNpb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVQYXR0ZXJuQXRsYXMoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5wYXR0ZXJuc1tpZF0ucG9zaXRpb247XG4gICAgfVxuXG4gICAgYmluZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAgICAgaWYgKCF0aGlzLmF0bGFzVGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy5hdGxhc1RleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLmF0bGFzSW1hZ2UsIGdsLlJHQkEpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuYXRsYXNUZXh0dXJlLnVwZGF0ZSh0aGlzLmF0bGFzSW1hZ2UpO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hdGxhc1RleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIH1cblxuICAgIF91cGRhdGVQYXR0ZXJuQXRsYXMoKSB7XG4gICAgICAgIGNvbnN0IGJpbnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnBhdHRlcm5zKSB7XG4gICAgICAgICAgICBiaW5zLnB1c2godGhpcy5wYXR0ZXJuc1tpZF0uYmluKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHt3LCBofSA9IHBvdHBhY2soYmlucyk7XG5cbiAgICAgICAgY29uc3QgZHN0ID0gdGhpcy5hdGxhc0ltYWdlO1xuICAgICAgICBkc3QucmVzaXplKHt3aWR0aDogdyB8fCAxLCBoZWlnaHQ6IGggfHwgMX0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5wYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3Qge2Jpbn0gPSB0aGlzLnBhdHRlcm5zW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBiaW4ueCArIHBhZGRpbmc7XG4gICAgICAgICAgICBjb25zdCB5ID0gYmluLnkgKyBwYWRkaW5nO1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gdGhpcy5pbWFnZXNbaWRdLmRhdGE7XG4gICAgICAgICAgICBjb25zdCB3ID0gc3JjLndpZHRoO1xuICAgICAgICAgICAgY29uc3QgaCA9IHNyYy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYywgZHN0LCB7eDogMCwgeTogMH0sIHt4LCB5fSwge3dpZHRoOiB3LCBoZWlnaHQ6IGh9KTtcblxuICAgICAgICAgICAgLy8gQWRkIDEgcGl4ZWwgd3JhcHBlZCBwYWRkaW5nIG9uIGVhY2ggc2lkZSBvZiB0aGUgaW1hZ2UuXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMsIGRzdCwge3g6IDAsIHk6IGggLSAxfSwge3gsIHk6IHkgLSAxfSwge3dpZHRoOiB3LCBoZWlnaHQ6IDF9KTsgLy8gVFxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLCBkc3QsIHt4OiAwLCB5OiAgICAgMH0sIHt4LCB5OiB5ICsgaH0sIHt3aWR0aDogdywgaGVpZ2h0OiAxfSk7IC8vIEJcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYywgZHN0LCB7eDogdyAtIDEsIHk6IDB9LCB7eDogeCAtIDEsIHl9LCB7d2lkdGg6IDEsIGhlaWdodDogaH0pOyAvLyBMXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMsIGRzdCwge3g6IDAsICAgICB5OiAwfSwge3g6IHggKyB3LCB5fSwge3dpZHRoOiAxLCBoZWlnaHQ6IGh9KTsgLy8gUlxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgYmVnaW5GcmFtZSgpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWUgPSB7fTtcbiAgICB9XG5cbiAgICBkaXNwYXRjaFJlbmRlckNhbGxiYWNrcyhpZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcblxuICAgICAgICAgICAgLy8gdGhlIGNhbGxiYWNrIGZvciB0aGUgaW1hZ2Ugd2FzIGFscmVhZHkgZGlzcGF0Y2hlZCBmb3IgYSBkaWZmZXJlbnQgZnJhbWVcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZVtpZF0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWVbaWRdID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlc1tpZF07XG4gICAgICAgICAgICBhc3NlcnQoaW1hZ2UpO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gcmVuZGVyU3R5bGVJbWFnZShpbWFnZSk7XG4gICAgICAgICAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSW1hZ2UoaWQsIGltYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VNYW5hZ2VyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtnZXRBcnJheUJ1ZmZlciwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuXG5pbXBvcnQgcGFyc2VHbHlwaFBCRiBmcm9tICcuL3BhcnNlX2dseXBoX3BiZic7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtSZXF1ZXN0TWFuYWdlcn0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChmb250c3RhY2s6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxUZW1wbGF0ZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrPHtbbnVtYmVyXTogU3R5bGVHbHlwaCB8IG51bGx9Pikge1xuICAgIGNvbnN0IGJlZ2luID0gcmFuZ2UgKiAyNTY7XG4gICAgY29uc3QgZW5kID0gYmVnaW4gKyAyNTU7XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChcbiAgICAgICAgcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplR2x5cGhzVVJMKHVybFRlbXBsYXRlKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3tmb250c3RhY2t9JywgZm9udHN0YWNrKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3tyYW5nZX0nLCBgJHtiZWdpbn0tJHtlbmR9YCksXG4gICAgICAgIFJlc291cmNlVHlwZS5HbHlwaHMpO1xuXG4gICAgZ2V0QXJyYXlCdWZmZXIocmVxdWVzdCwgKGVycjogP0Vycm9yLCBkYXRhOiA/QXJyYXlCdWZmZXIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBnbHlwaHMgPSB7fTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBnbHlwaCBvZiBwYXJzZUdseXBoUEJGKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZ2x5cGhzW2dseXBoLmlkXSA9IGdseXBoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBnbHlwaHMpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gVGlueVNERjtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBUaW55U0RGO1xuXG52YXIgSU5GID0gMWUyMDtcblxuZnVuY3Rpb24gVGlueVNERihmb250U2l6ZSwgYnVmZmVyLCByYWRpdXMsIGN1dG9mZiwgZm9udEZhbWlseSwgZm9udFdlaWdodCkge1xuICAgIHRoaXMuZm9udFNpemUgPSBmb250U2l6ZSB8fCAyNDtcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlciA9PT0gdW5kZWZpbmVkID8gMyA6IGJ1ZmZlcjtcbiAgICB0aGlzLmN1dG9mZiA9IGN1dG9mZiB8fCAwLjI1O1xuICAgIHRoaXMuZm9udEZhbWlseSA9IGZvbnRGYW1pbHkgfHwgJ3NhbnMtc2VyaWYnO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IGZvbnRXZWlnaHQgfHwgJ25vcm1hbCc7XG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgODtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZSA9IHRoaXMuZm9udFNpemUgKyB0aGlzLmJ1ZmZlciAqIDI7XG5cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5jYW52YXMuaGVpZ2h0ID0gc2l6ZTtcblxuICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB0aGlzLmN0eC5mb250ID0gdGhpcy5mb250V2VpZ2h0ICsgJyAnICsgdGhpcy5mb250U2l6ZSArICdweCAnICsgdGhpcy5mb250RmFtaWx5O1xuICAgIHRoaXMuY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9ICdibGFjayc7XG5cbiAgICAvLyB0ZW1wb3JhcnkgYXJyYXlzIGZvciB0aGUgZGlzdGFuY2UgdHJhbnNmb3JtXG4gICAgdGhpcy5ncmlkT3V0ZXIgPSBuZXcgRmxvYXQ2NEFycmF5KHNpemUgKiBzaXplKTtcbiAgICB0aGlzLmdyaWRJbm5lciA9IG5ldyBGbG9hdDY0QXJyYXkoc2l6ZSAqIHNpemUpO1xuICAgIHRoaXMuZiA9IG5ldyBGbG9hdDY0QXJyYXkoc2l6ZSk7XG4gICAgdGhpcy5kID0gbmV3IEZsb2F0NjRBcnJheShzaXplKTtcbiAgICB0aGlzLnogPSBuZXcgRmxvYXQ2NEFycmF5KHNpemUgKyAxKTtcbiAgICB0aGlzLnYgPSBuZXcgSW50MTZBcnJheShzaXplKTtcblxuICAgIC8vIGhhY2sgYXJvdW5kIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzg1MlxuICAgIHRoaXMubWlkZGxlID0gTWF0aC5yb3VuZCgoc2l6ZSAvIDIpICogKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignR2Vja28vJykgPj0gMCA/IDEuMiA6IDEpKTtcbn1cblxuVGlueVNERi5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChjaGFyKSB7XG4gICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuc2l6ZSwgdGhpcy5zaXplKTtcbiAgICB0aGlzLmN0eC5maWxsVGV4dChjaGFyLCB0aGlzLmJ1ZmZlciwgdGhpcy5taWRkbGUpO1xuXG4gICAgdmFyIGltZ0RhdGEgPSB0aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdGhpcy5zaXplLCB0aGlzLnNpemUpO1xuICAgIHZhciBhbHBoYUNoYW5uZWwgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkodGhpcy5zaXplICogdGhpcy5zaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplICogdGhpcy5zaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGEgPSBpbWdEYXRhLmRhdGFbaSAqIDQgKyAzXSAvIDI1NTsgLy8gYWxwaGEgdmFsdWVcbiAgICAgICAgdGhpcy5ncmlkT3V0ZXJbaV0gPSBhID09PSAxID8gMCA6IGEgPT09IDAgPyBJTkYgOiBNYXRoLnBvdyhNYXRoLm1heCgwLCAwLjUgLSBhKSwgMik7XG4gICAgICAgIHRoaXMuZ3JpZElubmVyW2ldID0gYSA9PT0gMSA/IElORiA6IGEgPT09IDAgPyAwIDogTWF0aC5wb3coTWF0aC5tYXgoMCwgYSAtIDAuNSksIDIpO1xuICAgIH1cblxuICAgIGVkdCh0aGlzLmdyaWRPdXRlciwgdGhpcy5zaXplLCB0aGlzLnNpemUsIHRoaXMuZiwgdGhpcy5kLCB0aGlzLnYsIHRoaXMueik7XG4gICAgZWR0KHRoaXMuZ3JpZElubmVyLCB0aGlzLnNpemUsIHRoaXMuc2l6ZSwgdGhpcy5mLCB0aGlzLmQsIHRoaXMudiwgdGhpcy56KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnNpemUgKiB0aGlzLnNpemU7IGkrKykge1xuICAgICAgICB2YXIgZCA9IHRoaXMuZ3JpZE91dGVyW2ldIC0gdGhpcy5ncmlkSW5uZXJbaV07XG4gICAgICAgIGFscGhhQ2hhbm5lbFtpXSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCgyNTUgLSAyNTUgKiAoZCAvIHRoaXMucmFkaXVzICsgdGhpcy5jdXRvZmYpKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBhbHBoYUNoYW5uZWw7XG59O1xuXG4vLyAyRCBFdWNsaWRlYW4gZGlzdGFuY2UgdHJhbnNmb3JtIGJ5IEZlbHplbnN6d2FsYiAmIEh1dHRlbmxvY2hlciBodHRwczovL2NzLmJyb3duLmVkdS9+cGZmL3BhcGVycy9kdC1maW5hbC5wZGZcbmZ1bmN0aW9uIGVkdChkYXRhLCB3aWR0aCwgaGVpZ2h0LCBmLCBkLCB2LCB6KSB7XG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgICAgIGZbeV0gPSBkYXRhW3kgKiB3aWR0aCArIHhdO1xuICAgICAgICB9XG4gICAgICAgIGVkdDFkKGYsIGQsIHYsIHosIGhlaWdodCk7XG4gICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgZGF0YVt5ICogd2lkdGggKyB4XSA9IGRbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICBmW3hdID0gZGF0YVt5ICogd2lkdGggKyB4XTtcbiAgICAgICAgfVxuICAgICAgICBlZHQxZChmLCBkLCB2LCB6LCB3aWR0aCk7XG4gICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICBkYXRhW3kgKiB3aWR0aCArIHhdID0gTWF0aC5zcXJ0KGRbeF0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyAxRCBzcXVhcmVkIGRpc3RhbmNlIHRyYW5zZm9ybVxuZnVuY3Rpb24gZWR0MWQoZiwgZCwgdiwgeiwgbikge1xuICAgIHZbMF0gPSAwO1xuICAgIHpbMF0gPSAtSU5GO1xuICAgIHpbMV0gPSArSU5GO1xuXG4gICAgZm9yICh2YXIgcSA9IDEsIGsgPSAwOyBxIDwgbjsgcSsrKSB7XG4gICAgICAgIHZhciBzID0gKChmW3FdICsgcSAqIHEpIC0gKGZbdltrXV0gKyB2W2tdICogdltrXSkpIC8gKDIgKiBxIC0gMiAqIHZba10pO1xuICAgICAgICB3aGlsZSAocyA8PSB6W2tdKSB7XG4gICAgICAgICAgICBrLS07XG4gICAgICAgICAgICBzID0gKChmW3FdICsgcSAqIHEpIC0gKGZbdltrXV0gKyB2W2tdICogdltrXSkpIC8gKDIgKiBxIC0gMiAqIHZba10pO1xuICAgICAgICB9XG4gICAgICAgIGsrKztcbiAgICAgICAgdltrXSA9IHE7XG4gICAgICAgIHpba10gPSBzO1xuICAgICAgICB6W2sgKyAxXSA9ICtJTkY7XG4gICAgfVxuXG4gICAgZm9yIChxID0gMCwgayA9IDA7IHEgPCBuOyBxKyspIHtcbiAgICAgICAgd2hpbGUgKHpbayArIDFdIDwgcSkgaysrO1xuICAgICAgICBkW3FdID0gKHEgLSB2W2tdKSAqIChxIC0gdltrXSkgKyBmW3Zba11dO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBsb2FkR2x5cGhSYW5nZSBmcm9tICcuLi9zdHlsZS9sb2FkX2dseXBoX3JhbmdlJztcblxuaW1wb3J0IFRpbnlTREYgZnJvbSAnQG1hcGJveC90aW55LXNkZic7XG5pbXBvcnQgaXNDaGFyIGZyb20gJy4uL3V0aWwvaXNfY2hhcl9pbl91bmljb2RlX2Jsb2NrJztcbmltcG9ydCB7YXN5bmNBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge0FscGhhSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaH0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfZ2x5cGgnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcblxudHlwZSBFbnRyeSA9IHtcbiAgICAvLyBudWxsIG1lYW5zIHdlJ3ZlIHJlcXVlc3RlZCB0aGUgcmFuZ2UsIGJ1dCB0aGUgZ2x5cGggd2Fzbid0IGluY2x1ZGVkIGluIHRoZSByZXN1bHQuXG4gICAgZ2x5cGhzOiB7W2lkOiBudW1iZXJdOiBTdHlsZUdseXBoIHwgbnVsbH0sXG4gICAgcmVxdWVzdHM6IHtbcmFuZ2U6IG51bWJlcl06IEFycmF5PENhbGxiYWNrPHtbbnVtYmVyXTogU3R5bGVHbHlwaCB8IG51bGx9Pj59LFxuICAgIHRpbnlTREY/OiBUaW55U0RGXG59O1xuXG5jbGFzcyBHbHlwaE1hbmFnZXIge1xuICAgIHJlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlcjtcbiAgICBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6ID9zdHJpbmc7XG4gICAgZW50cmllczoge1tzdHJpbmddOiBFbnRyeX07XG4gICAgdXJsOiA/c3RyaW5nO1xuXG4gICAgLy8gZXhwb3NlZCBhcyBzdGF0aWNzIHRvIGVuYWJsZSBzdHViYmluZyBpbiB1bml0IHRlc3RzXG4gICAgc3RhdGljIGxvYWRHbHlwaFJhbmdlOiB0eXBlb2YgbG9hZEdseXBoUmFuZ2U7XG4gICAgc3RhdGljIFRpbnlTREY6IENsYXNzPFRpbnlTREY+O1xuXG4gICAgY29uc3RydWN0b3IocmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyLCBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0TWFuYWdlciA9IHJlcXVlc3RNYW5hZ2VyO1xuICAgICAgICB0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSA9IGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0ge307XG4gICAgfVxuXG4gICAgc2V0VVJMKHVybDogP3N0cmluZykge1xuICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICB9XG5cbiAgICBnZXRHbHlwaHMoZ2x5cGhzOiB7W3N0YWNrOiBzdHJpbmddOiBBcnJheTxudW1iZXI+fSwgY2FsbGJhY2s6IENhbGxiYWNrPHtbc3RhY2s6IHN0cmluZ106IHtbaWQ6IG51bWJlcl06ID9TdHlsZUdseXBofX0+KSB7XG4gICAgICAgIGNvbnN0IGFsbCA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2sgaW4gZ2x5cGhzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGdseXBoc1tzdGFja10pIHtcbiAgICAgICAgICAgICAgICBhbGwucHVzaCh7c3RhY2ssIGlkfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhc3luY0FsbChhbGwsICh7c3RhY2ssIGlkfSwgY2FsbGJhY2s6IENhbGxiYWNrPHtzdGFjazogc3RyaW5nLCBpZDogbnVtYmVyLCBnbHlwaDogP1N0eWxlR2x5cGh9PikgPT4ge1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5lbnRyaWVzW3N0YWNrXTtcbiAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IHRoaXMuZW50cmllc1tzdGFja10gPSB7XG4gICAgICAgICAgICAgICAgICAgIGdseXBoczoge30sXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzOiB7fVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBnbHlwaCA9IGVudHJ5LmdseXBoc1tpZF07XG4gICAgICAgICAgICBpZiAoZ2x5cGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtzdGFjaywgaWQsIGdseXBofSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbHlwaCA9IHRoaXMuX3RpbnlTREYoZW50cnksIHN0YWNrLCBpZCk7XG4gICAgICAgICAgICBpZiAoZ2x5cGgpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS5nbHlwaHNbaWRdID0gZ2x5cGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3N0YWNrLCBpZCwgZ2x5cGh9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gTWF0aC5mbG9vcihpZCAvIDI1Nik7XG4gICAgICAgICAgICBpZiAocmFuZ2UgKiAyNTYgPiA2NTUzNSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignZ2x5cGhzID4gNjU1MzUgbm90IHN1cHBvcnRlZCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByZXF1ZXN0cyA9IGVudHJ5LnJlcXVlc3RzW3JhbmdlXTtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0cyA9IGVudHJ5LnJlcXVlc3RzW3JhbmdlXSA9IFtdO1xuICAgICAgICAgICAgICAgIEdseXBoTWFuYWdlci5sb2FkR2x5cGhSYW5nZShzdGFjaywgcmFuZ2UsICh0aGlzLnVybDogYW55KSwgdGhpcy5yZXF1ZXN0TWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgKGVyciwgcmVzcG9uc2U6ID97W251bWJlcl06IFN0eWxlR2x5cGggfCBudWxsfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGgoK2lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZ2x5cGhzWytpZF0gPSByZXNwb25zZVsraWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjYiBvZiByZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiKGVyciwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVudHJ5LnJlcXVlc3RzW3JhbmdlXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcXVlc3RzLnB1c2goKGVyciwgcmVzdWx0OiA/e1tudW1iZXJdOiBTdHlsZUdseXBoIHwgbnVsbH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3N0YWNrLCBpZCwgZ2x5cGg6IHJlc3VsdFtpZF0gfHwgbnVsbH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAoZXJyLCBnbHlwaHM6ID9BcnJheTx7c3RhY2s6IHN0cmluZywgaWQ6IG51bWJlciwgZ2x5cGg6ID9TdHlsZUdseXBofT4pID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qge3N0YWNrLCBpZCwgZ2x5cGh9IG9mIGdseXBocykge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9uZSB0aGUgZ2x5cGggc28gdGhhdCBvdXIgb3duIGNvcHkgb2YgaXRzIEFycmF5QnVmZmVyIGRvZXNuJ3QgZ2V0IHRyYW5zZmVycmVkLlxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0W3N0YWNrXSB8fCAocmVzdWx0W3N0YWNrXSA9IHt9KSlbaWRdID0gZ2x5cGggJiYge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdseXBoLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwOiBnbHlwaC5iaXRtYXAuY2xvbmUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3M6IGdseXBoLm1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaChpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5ldy1jYXAgKi9cbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkgJiZcbiAgICAgICAgICAgIChpc0NoYXJbJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnXShpZCkgfHxcbiAgICAgICAgICAgICAgICBpc0NoYXJbJ0hhbmd1bCBTeWxsYWJsZXMnXShpZCkgfHxcbiAgICAgICAgICAgICAgICBpc0NoYXJbJ0hpcmFnYW5hJ10oaWQpIHx8XG4gICAgICAgICAgICAgICAgaXNDaGFyWydLYXRha2FuYSddKGlkKSk7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgbmV3LWNhcCAqL1xuICAgIH1cblxuICAgIF90aW55U0RGKGVudHJ5OiBFbnRyeSwgc3RhY2s6IHN0cmluZywgaWQ6IG51bWJlcik6ID9TdHlsZUdseXBoIHtcbiAgICAgICAgY29uc3QgZmFtaWx5ID0gdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7XG4gICAgICAgIGlmICghZmFtaWx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGgoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGlueVNERiA9IGVudHJ5LnRpbnlTREY7XG4gICAgICAgIGlmICghdGlueVNERikge1xuICAgICAgICAgICAgbGV0IGZvbnRXZWlnaHQgPSAnNDAwJztcbiAgICAgICAgICAgIGlmICgvYm9sZC9pLnRlc3Qoc3RhY2spKSB7XG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCA9ICc5MDAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvbWVkaXVtL2kudGVzdChzdGFjaykpIHtcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0ID0gJzUwMCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9saWdodC9pLnRlc3Qoc3RhY2spKSB7XG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCA9ICcyMDAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGlueVNERiA9IGVudHJ5LnRpbnlTREYgPSBuZXcgR2x5cGhNYW5hZ2VyLlRpbnlTREYoMjQsIDMsIDgsIC4yNSwgZmFtaWx5LCBmb250V2VpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGJpdG1hcDogbmV3IEFscGhhSW1hZ2Uoe3dpZHRoOiAzMCwgaGVpZ2h0OiAzMH0sIHRpbnlTREYuZHJhdyhTdHJpbmcuZnJvbUNoYXJDb2RlKGlkKSkpLFxuICAgICAgICAgICAgbWV0cmljczoge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyNCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDI0LFxuICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgdG9wOiAtOCxcbiAgICAgICAgICAgICAgICBhZHZhbmNlOiAyNFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuR2x5cGhNYW5hZ2VyLmxvYWRHbHlwaFJhbmdlID0gbG9hZEdseXBoUmFuZ2U7XG5HbHlwaE1hbmFnZXIuVGlueVNERiA9IFRpbnlTREY7XG5cbmV4cG9ydCBkZWZhdWx0IEdseXBoTWFuYWdlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtlbmRzV2l0aCwgZXh0ZW5kLCBzcGhlcmljYWxUb0NhcnRlc2lhbn0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7XG4gICAgdmFsaWRhdGVTdHlsZSxcbiAgICB2YWxpZGF0ZUxpZ2h0LFxuICAgIGVtaXRWYWxpZGF0aW9uRXJyb3JzXG59IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcblxuaW1wb3J0IHR5cGUge1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3N0eWxlLXNwZWMnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1N0eWxlU2V0dGVyT3B0aW9uc30gZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHtQcm9wZXJ0aWVzLCBUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWQsIERhdGFDb25zdGFudFByb3BlcnR5fSBmcm9tICcuL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgUHJvcGVydHksXG4gICAgUHJvcGVydHlWYWx1ZSxcbiAgICBUcmFuc2l0aW9uUGFyYW1ldGVyc1xufSBmcm9tICcuL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7TGlnaHRTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxudHlwZSBMaWdodFBvc2l0aW9uID0ge1xuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgejogbnVtYmVyXG59O1xuXG5jbGFzcyBMaWdodFBvc2l0aW9uUHJvcGVydHkgaW1wbGVtZW50cyBQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIExpZ2h0UG9zaXRpb24+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNwZWNpZmljYXRpb24gPSBzdHlsZVNwZWMubGlnaHQucG9zaXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIExpZ2h0UG9zaXRpb24+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycyk6IExpZ2h0UG9zaXRpb24ge1xuICAgICAgICByZXR1cm4gc3BoZXJpY2FsVG9DYXJ0ZXNpYW4odmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzKSk7XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogTGlnaHRQb3NpdGlvbiwgYjogTGlnaHRQb3NpdGlvbiwgdDogbnVtYmVyKTogTGlnaHRQb3NpdGlvbiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBpbnRlcnBvbGF0ZShhLngsIGIueCwgdCksXG4gICAgICAgICAgICB5OiBpbnRlcnBvbGF0ZShhLnksIGIueSwgdCksXG4gICAgICAgICAgICB6OiBpbnRlcnBvbGF0ZShhLnosIGIueiwgdCksXG4gICAgICAgIH07XG4gICAgfVxufVxuXG50eXBlIFByb3BzID0ge3xcbiAgICBcImFuY2hvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcInBvc2l0aW9uXCI6IExpZ2h0UG9zaXRpb25Qcm9wZXJ0eSxcbiAgICBcImNvbG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PENvbG9yPixcbiAgICBcImludGVuc2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWMubGlnaHQuYW5jaG9yKSxcbiAgICBcInBvc2l0aW9uXCI6IG5ldyBMaWdodFBvc2l0aW9uUHJvcGVydHkoKSxcbiAgICBcImNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWMubGlnaHQuY29sb3IpLFxuICAgIFwiaW50ZW5zaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWMubGlnaHQuaW50ZW5zaXR5KSxcbn0pO1xuXG5jb25zdCBUUkFOU0lUSU9OX1NVRkZJWCA9ICctdHJhbnNpdGlvbic7XG5cbi8qXG4gKiBSZXByZXNlbnRzIHRoZSBsaWdodCB1c2VkIHRvIGxpZ2h0IGV4dHJ1ZGVkIGZlYXR1cmVzLlxuICovXG5jbGFzcyBMaWdodCBleHRlbmRzIEV2ZW50ZWQge1xuICAgIF90cmFuc2l0aW9uYWJsZTogVHJhbnNpdGlvbmFibGU8UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nOiBUcmFuc2l0aW9uaW5nPFByb3BzPjtcbiAgICBwcm9wZXJ0aWVzOiBQb3NzaWJseUV2YWx1YXRlZDxQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsaWdodE9wdGlvbnM/OiBMaWdodFNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGUgPSBuZXcgVHJhbnNpdGlvbmFibGUocHJvcGVydGllcyk7XG4gICAgICAgIHRoaXMuc2V0TGlnaHQobGlnaHRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmluZyA9IHRoaXMuX3RyYW5zaXRpb25hYmxlLnVudHJhbnNpdGlvbmVkKCk7XG4gICAgfVxuXG4gICAgZ2V0TGlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXJpYWxpemUoKTtcbiAgICB9XG5cbiAgICBzZXRMaWdodChsaWdodD86IExpZ2h0U3BlY2lmaWNhdGlvbiwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlTGlnaHQsIGxpZ2h0LCBvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGxpZ2h0KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGxpZ2h0W25hbWVdO1xuICAgICAgICAgICAgaWYgKGVuZHNXaXRoKG5hbWUsIFRSQU5TSVRJT05fU1VGRklYKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNldFRyYW5zaXRpb24obmFtZS5zbGljZSgwLCAtVFJBTlNJVElPTl9TVUZGSVgubGVuZ3RoKSwgdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2l0aW9ucyhwYXJhbWV0ZXJzOiBUcmFuc2l0aW9uUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uaW5nID0gdGhpcy5fdHJhbnNpdGlvbmFibGUudHJhbnNpdGlvbmVkKHBhcmFtZXRlcnMsIHRoaXMuX3RyYW5zaXRpb25pbmcpO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uaW5nLmhhc1RyYW5zaXRpb24oKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSB0aGlzLl90cmFuc2l0aW9uaW5nLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKHZhbGlkYXRlOiBGdW5jdGlvbiwgdmFsdWU6IG1peGVkLCBvcHRpb25zPzoge3ZhbGlkYXRlPzogYm9vbGVhbn0pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy52YWxpZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZS5jYWxsKHZhbGlkYXRlU3R5bGUsIGV4dGVuZCh7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yNDA3XG4gICAgICAgICAgICBzdHlsZToge2dseXBoczogdHJ1ZSwgc3ByaXRlOiB0cnVlfSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlnaHQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG4vKipcbiAqIEEgTGluZUF0bGFzIGxldHMgdXMgcmV1c2UgcmVuZGVyZWQgZGFzaGVkIGxpbmVzXG4gKiBieSB3cml0aW5nIG1hbnkgb2YgdGhlbSB0byBhIHRleHR1cmUgYW5kIHRoZW4gZmV0Y2hpbmcgdGhlaXIgcG9zaXRpb25zXG4gKiB1c2luZyAuZ2V0RGFzaC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIExpbmVBdGxhcyB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBuZXh0Um93OiBudW1iZXI7XG4gICAgYnl0ZXM6IG51bWJlcjtcbiAgICBkYXRhOiBVaW50OEFycmF5O1xuICAgIHBvc2l0aW9uczoge1tzdHJpbmddOiBhbnl9O1xuICAgIGRpcnR5OiBib29sZWFuO1xuICAgIHRleHR1cmU6IFdlYkdMVGV4dHVyZTtcblxuICAgIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMubmV4dFJvdyA9IDA7XG5cbiAgICAgICAgdGhpcy5ieXRlcyA9IDQ7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMud2lkdGggKiB0aGlzLmhlaWdodCAqIHRoaXMuYnl0ZXMpO1xuXG4gICAgICAgIHRoaXMucG9zaXRpb25zID0ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IG9yIGNyZWF0ZSBhIGRhc2ggbGluZSBwYXR0ZXJuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBkYXNoYXJyYXlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJvdW5kIHdoZXRoZXIgdG8gYWRkIGNpcmNsZSBjYXBzIGluIGJldHdlZW4gZGFzaCBzZWdtZW50c1xuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHBvc2l0aW9uIG9mIGRhc2ggdGV4dHVyZSBpbiB7IHksIGhlaWdodCwgd2lkdGggfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0RGFzaChkYXNoYXJyYXk6IEFycmF5PG51bWJlcj4sIHJvdW5kOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGRhc2hhcnJheS5qb2luKFwiLFwiKSArIFN0cmluZyhyb3VuZCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvc2l0aW9uc1trZXldKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uc1trZXldID0gdGhpcy5hZGREYXNoKGRhc2hhcnJheSwgcm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGFkZERhc2goZGFzaGFycmF5OiBBcnJheTxudW1iZXI+LCByb3VuZDogYm9vbGVhbikge1xuXG4gICAgICAgIGNvbnN0IG4gPSByb3VuZCA/IDcgOiAwO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSAyICogbiArIDE7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDEyODtcblxuICAgICAgICBpZiAodGhpcy5uZXh0Um93ICsgaGVpZ2h0ID4gdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdMaW5lQXRsYXMgb3V0IG9mIHNwYWNlJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhc2hhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGVuZ3RoICs9IGRhc2hhcnJheVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0cmV0Y2ggPSB0aGlzLndpZHRoIC8gbGVuZ3RoO1xuICAgICAgICBjb25zdCBoYWxmV2lkdGggPSBzdHJldGNoIC8gMjtcblxuICAgICAgICAvLyBJZiBkYXNoYXJyYXkgaGFzIGFuIG9kZCBsZW5ndGgsIGJvdGggdGhlIGZpcnN0IGFuZCBsYXN0IHBhcnRzXG4gICAgICAgIC8vIGFyZSBkYXNoZXMgYW5kIHNob3VsZCBiZSBqb2luZWQgc2VhbWxlc3NseS5cbiAgICAgICAgY29uc3Qgb2RkTGVuZ3RoID0gZGFzaGFycmF5Lmxlbmd0aCAlIDIgPT09IDE7XG5cbiAgICAgICAgZm9yIChsZXQgeSA9IC1uOyB5IDw9IG47IHkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5uZXh0Um93ICsgbiArIHk7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMud2lkdGggKiByb3c7XG5cbiAgICAgICAgICAgIGxldCBsZWZ0ID0gb2RkTGVuZ3RoID8gLWRhc2hhcnJheVtkYXNoYXJyYXkubGVuZ3RoIC0gMV0gOiAwO1xuICAgICAgICAgICAgbGV0IHJpZ2h0ID0gZGFzaGFycmF5WzBdO1xuICAgICAgICAgICAgbGV0IHBhcnRJbmRleCA9IDE7XG5cbiAgICAgICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocmlnaHQgPCB4IC8gc3RyZXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQgKyBkYXNoYXJyYXlbcGFydEluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob2RkTGVuZ3RoICYmIHBhcnRJbmRleCA9PT0gZGFzaGFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ICs9IGRhc2hhcnJheVswXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBhcnRJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RMZWZ0ID0gTWF0aC5hYnMoeCAtIGxlZnQgKiBzdHJldGNoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0UmlnaHQgPSBNYXRoLmFicyh4IC0gcmlnaHQgKiBzdHJldGNoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0ID0gTWF0aC5taW4oZGlzdExlZnQsIGRpc3RSaWdodCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zaWRlID0gKHBhcnRJbmRleCAlIDIpID09PSAxO1xuICAgICAgICAgICAgICAgIGxldCBzaWduZWREaXN0YW5jZTtcblxuICAgICAgICAgICAgICAgIGlmIChyb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgY2lyY2xlIGNhcHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdE1pZGRsZSA9IG4gPyB5IC8gbiAqIChoYWxmV2lkdGggKyAxKSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnNpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RFZGdlID0gaGFsZldpZHRoIC0gTWF0aC5hYnMoZGlzdE1pZGRsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduZWREaXN0YW5jZSA9IE1hdGguc3FydChkaXN0ICogZGlzdCArIGRpc3RFZGdlICogZGlzdEVkZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkRGlzdGFuY2UgPSBoYWxmV2lkdGggLSBNYXRoLnNxcnQoZGlzdCAqIGRpc3QgKyBkaXN0TWlkZGxlICogZGlzdE1pZGRsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzaWduZWREaXN0YW5jZSA9IChpbnNpZGUgPyAxIDogLTEpICogZGlzdDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbMyArIChpbmRleCArIHgpICogNF0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIHNpZ25lZERpc3RhbmNlICsgb2Zmc2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3MgPSB7XG4gICAgICAgICAgICB5OiAodGhpcy5uZXh0Um93ICsgbiArIDAuNSkgLyB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogMiAqIG4gLyB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiBsZW5ndGhcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm5leHRSb3cgKz0gaGVpZ2h0O1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gcG9zO1xuICAgIH1cblxuICAgIGJpbmQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTElORUFSKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgdGhpcy5kYXRhKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgdGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluZUF0bGFzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt1bmlxdWVJZCwgYXN5bmNBbGx9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgQWN0b3IgZnJvbSAnLi9hY3Rvcic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIFdvcmtlclBvb2wgZnJvbSAnLi93b3JrZXJfcG9vbCc7XG5cbi8qKlxuICogUmVzcG9uc2libGUgZm9yIHNlbmRpbmcgbWVzc2FnZXMgZnJvbSBhIHtAbGluayBTb3VyY2V9IHRvIGFuIGFzc29jaWF0ZWRcbiAqIHtAbGluayBXb3JrZXJTb3VyY2V9LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIERpc3BhdGNoZXIge1xuICAgIHdvcmtlclBvb2w6IFdvcmtlclBvb2w7XG4gICAgYWN0b3JzOiBBcnJheTxBY3Rvcj47XG4gICAgY3VycmVudEFjdG9yOiBudW1iZXI7XG4gICAgaWQ6IG51bWJlcjtcblxuICAgIC8vIGV4cG9zZWQgdG8gYWxsb3cgc3R1YmJpbmcgaW4gdW5pdCB0ZXN0c1xuICAgIHN0YXRpYyBBY3RvcjogQ2xhc3M8QWN0b3I+O1xuXG4gICAgY29uc3RydWN0b3Iod29ya2VyUG9vbDogV29ya2VyUG9vbCwgcGFyZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy53b3JrZXJQb29sID0gd29ya2VyUG9vbDtcbiAgICAgICAgdGhpcy5hY3RvcnMgPSBbXTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0b3IgPSAwO1xuICAgICAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICAgICAgY29uc3Qgd29ya2VycyA9IHRoaXMud29ya2VyUG9vbC5hY3F1aXJlKHRoaXMuaWQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IHdvcmtlcnNbaV07XG4gICAgICAgICAgICBjb25zdCBhY3RvciA9IG5ldyBEaXNwYXRjaGVyLkFjdG9yKHdvcmtlciwgcGFyZW50LCB0aGlzLmlkKTtcbiAgICAgICAgICAgIGFjdG9yLm5hbWUgPSBgV29ya2VyICR7aX1gO1xuICAgICAgICAgICAgdGhpcy5hY3RvcnMucHVzaChhY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KHRoaXMuYWN0b3JzLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnJvYWRjYXN0IGEgbWVzc2FnZSB0byBhbGwgV29ya2Vycy5cbiAgICAgKi9cbiAgICBicm9hZGNhc3QodHlwZTogc3RyaW5nLCBkYXRhOiBtaXhlZCwgY2I/OiBGdW5jdGlvbikge1xuICAgICAgICBhc3NlcnQodGhpcy5hY3RvcnMubGVuZ3RoKTtcbiAgICAgICAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgYXN5bmNBbGwodGhpcy5hY3RvcnMsIChhY3RvciwgZG9uZSkgPT4ge1xuICAgICAgICAgICAgYWN0b3Iuc2VuZCh0eXBlLCBkYXRhLCBkb25lKTtcbiAgICAgICAgfSwgY2IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFjcXVpcmVzIGFuIGFjdG9yIHRvIGRpc3BhdGNoIG1lc3NhZ2VzIHRvLiBUaGUgYWN0b3JzIGFyZSBkaXN0cmlidXRlZCBpbiByb3VuZC1yb2JpbiBmYXNoaW9uLlxuICAgICAqIEByZXR1cm5zIEFuIGFjdG9yIG9iamVjdCBiYWNrZWQgYnkgYSB3ZWIgd29ya2VyIGZvciBwcm9jZXNzaW5nIG1lc3NhZ2VzLlxuICAgICAqL1xuICAgIGdldEFjdG9yKCk6IEFjdG9yIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuYWN0b3JzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuY3VycmVudEFjdG9yID0gKHRoaXMuY3VycmVudEFjdG9yICsgMSkgJSB0aGlzLmFjdG9ycy5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdG9yc1t0aGlzLmN1cnJlbnRBY3Rvcl07XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB0aGlzLmFjdG9ycy5mb3JFYWNoKChhY3RvcikgPT4geyBhY3Rvci5yZW1vdmUoKTsgfSk7XG4gICAgICAgIHRoaXMuYWN0b3JzID0gW107XG4gICAgICAgIHRoaXMud29ya2VyUG9vbC5yZWxlYXNlKHRoaXMuaWQpO1xuICAgIH1cbn1cblxuRGlzcGF0Y2hlci5BY3RvciA9IEFjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBEaXNwYXRjaGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwaWNrLCBleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB7Z2V0SlNPTiwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtUaWxlSlNPTn0gZnJvbSAnLi4vdHlwZXMvdGlsZWpzb24nO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvcHRpb25zOiBhbnksIHJlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlciwgY2FsbGJhY2s6IENhbGxiYWNrPFRpbGVKU09OPik6IENhbmNlbGFibGUge1xuICAgIGNvbnN0IGxvYWRlZCA9IGZ1bmN0aW9uKGVycjogP0Vycm9yLCB0aWxlSlNPTjogP09iamVjdCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aWxlSlNPTikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBwaWNrKFxuICAgICAgICAgICAgICAgIC8vIGV4cGxpY2l0IHNvdXJjZSBvcHRpb25zIHRha2UgcHJlY2VkZW5jZSBvdmVyIFRpbGVKU09OXG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRpbGVKU09OLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBbJ3RpbGVzJywgJ21pbnpvb20nLCAnbWF4em9vbScsICdhdHRyaWJ1dGlvbicsICdtYXBib3hfbG9nbycsICdib3VuZHMnLCAnc2NoZW1lJywgJ3RpbGVTaXplJywgJ2VuY29kaW5nJ11cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICh0aWxlSlNPTi52ZWN0b3JfbGF5ZXJzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnZlY3RvckxheWVycyA9IHRpbGVKU09OLnZlY3Rvcl9sYXllcnM7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnZlY3RvckxheWVySWRzID0gcmVzdWx0LnZlY3RvckxheWVycy5tYXAoKGxheWVyKSA9PiB7IHJldHVybiBsYXllci5pZDsgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG9ubHkgY2Fub25pY2FsaXplIHRpbGUgdGlsZXNldCBpZiBzb3VyY2UgaXMgZGVjbGFyZWQgdXNpbmcgYSB0aWxlanNvbiB1cmxcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnVybCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aWxlcyA9IHJlcXVlc3RNYW5hZ2VyLmNhbm9uaWNhbGl6ZVRpbGVzZXQocmVzdWx0LCBvcHRpb25zLnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLnVybCkge1xuICAgICAgICByZXR1cm4gZ2V0SlNPTihyZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHJlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVNvdXJjZVVSTChvcHRpb25zLnVybCksIFJlc291cmNlVHlwZS5Tb3VyY2UpLCBsb2FkZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBicm93c2VyLmZyYW1lKCgpID0+IGxvYWRlZChudWxsLCBvcHRpb25zKSk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IHttZXJjYXRvclhmcm9tTG5nLCBtZXJjYXRvcllmcm9tTGF0fSBmcm9tICcuLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbmNsYXNzIFRpbGVCb3VuZHMge1xuICAgIGJvdW5kczogTG5nTGF0Qm91bmRzO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihib3VuZHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBtaW56b29tOiA/bnVtYmVyLCBtYXh6b29tOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMuYm91bmRzID0gTG5nTGF0Qm91bmRzLmNvbnZlcnQodGhpcy52YWxpZGF0ZUJvdW5kcyhib3VuZHMpKTtcbiAgICAgICAgdGhpcy5taW56b29tID0gbWluem9vbSB8fCAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSBtYXh6b29tIHx8IDI0O1xuICAgIH1cblxuICAgIHZhbGlkYXRlQm91bmRzKGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBib3VuZHMgcHJvcGVydHkgY29udGFpbnMgdmFsaWQgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZXNcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGJvdW5kcykgfHwgYm91bmRzLmxlbmd0aCAhPT0gNCkgcmV0dXJuIFstMTgwLCAtOTAsIDE4MCwgOTBdO1xuICAgICAgICByZXR1cm4gW01hdGgubWF4KC0xODAsIGJvdW5kc1swXSksIE1hdGgubWF4KC05MCwgYm91bmRzWzFdKSwgTWF0aC5taW4oMTgwLCBib3VuZHNbMl0pLCBNYXRoLm1pbig5MCwgYm91bmRzWzNdKV07XG4gICAgfVxuXG4gICAgY29udGFpbnModGlsZUlEOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgY29uc3Qgd29ybGRTaXplID0gTWF0aC5wb3coMiwgdGlsZUlELnopO1xuICAgICAgICBjb25zdCBsZXZlbCA9IHtcbiAgICAgICAgICAgIG1pblg6IE1hdGguZmxvb3IobWVyY2F0b3JYZnJvbUxuZyh0aGlzLmJvdW5kcy5nZXRXZXN0KCkpICogd29ybGRTaXplKSxcbiAgICAgICAgICAgIG1pblk6IE1hdGguZmxvb3IobWVyY2F0b3JZZnJvbUxhdCh0aGlzLmJvdW5kcy5nZXROb3J0aCgpKSAqIHdvcmxkU2l6ZSksXG4gICAgICAgICAgICBtYXhYOiBNYXRoLmNlaWwobWVyY2F0b3JYZnJvbUxuZyh0aGlzLmJvdW5kcy5nZXRFYXN0KCkpICogd29ybGRTaXplKSxcbiAgICAgICAgICAgIG1heFk6IE1hdGguY2VpbChtZXJjYXRvcllmcm9tTGF0KHRoaXMuYm91bmRzLmdldFNvdXRoKCkpICogd29ybGRTaXplKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoaXQgPSB0aWxlSUQueCA+PSBsZXZlbC5taW5YICYmIHRpbGVJRC54IDwgbGV2ZWwubWF4WCAmJiB0aWxlSUQueSA+PSBsZXZlbC5taW5ZICYmIHRpbGVJRC55IDwgbGV2ZWwubWF4WTtcbiAgICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpbGVCb3VuZHM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQge2V4dGVuZCwgcGlja30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBsb2FkVGlsZUpTT04gZnJvbSAnLi9sb2FkX3RpbGVqc29uJztcbmltcG9ydCB7cG9zdFR1cm5zdGlsZUV2ZW50LCBwb3N0TWFwTG9hZEV2ZW50fSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgVGlsZUJvdW5kcyBmcm9tICcuL3RpbGVfYm91bmRzJztcbmltcG9ydCB7UmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7Y2FjaGVFbnRyeVBvc3NpYmx5QWRkZWR9IGZyb20gJy4uL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge1ZlY3RvclNvdXJjZVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBWZWN0b3JUaWxlU291cmNlIGV4dGVuZHMgRXZlbnRlZCBpbXBsZW1lbnRzIFNvdXJjZSB7XG4gICAgdHlwZTogJ3ZlY3Rvcic7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtaW56b29tOiBudW1iZXI7XG4gICAgbWF4em9vbTogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHNjaGVtZTogc3RyaW5nO1xuICAgIHRpbGVTaXplOiBudW1iZXI7XG5cbiAgICBfb3B0aW9uczogVmVjdG9yU291cmNlU3BlY2lmaWNhdGlvbjtcbiAgICBfY29sbGVjdFJlc291cmNlVGltaW5nOiBib29sZWFuO1xuICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXI7XG4gICAgbWFwOiBNYXA7XG4gICAgYm91bmRzOiA/W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgdGlsZXM6IEFycmF5PHN0cmluZz47XG4gICAgdGlsZUJvdW5kczogVGlsZUJvdW5kcztcbiAgICByZXBhcnNlT3ZlcnNjYWxlZDogYm9vbGVhbjtcbiAgICBpc1RpbGVDbGlwcGVkOiBib29sZWFuO1xuICAgIF90aWxlSlNPTlJlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBWZWN0b3JTb3VyY2VTcGVjaWZpY2F0aW9uICYge2NvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbn0sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyO1xuXG4gICAgICAgIHRoaXMudHlwZSA9ICd2ZWN0b3InO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAyMjtcbiAgICAgICAgdGhpcy5zY2hlbWUgPSAneHl6JztcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjtcbiAgICAgICAgdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNUaWxlQ2xpcHBlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgICAgIGV4dGVuZCh0aGlzLCBwaWNrKG9wdGlvbnMsIFsndXJsJywgJ3NjaGVtZScsICd0aWxlU2l6ZSddKSk7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBleHRlbmQoe3R5cGU6ICd2ZWN0b3InfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nID0gb3B0aW9ucy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG5cbiAgICAgICAgaWYgKHRoaXMudGlsZVNpemUgIT09IDUxMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2ZWN0b3IgdGlsZSBzb3VyY2VzIG11c3QgaGF2ZSBhIHRpbGVTaXplIG9mIDUxMicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG4gICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IGxvYWRUaWxlSlNPTih0aGlzLl9vcHRpb25zLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsIChlcnIsIHRpbGVKU09OKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbGVKU09OKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRoaXMsIHRpbGVKU09OKTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZUpTT04uYm91bmRzKSB0aGlzLnRpbGVCb3VuZHMgPSBuZXcgVGlsZUJvdW5kcyh0aWxlSlNPTi5ib3VuZHMsIHRoaXMubWluem9vbSwgdGhpcy5tYXh6b29tKTtcbiAgICAgICAgICAgICAgICBwb3N0VHVybnN0aWxlRXZlbnQodGlsZUpTT04udGlsZXMsIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgICAgIHBvc3RNYXBMb2FkRXZlbnQodGlsZUpTT04udGlsZXMsIHRoaXMubWFwLl9nZXRNYXBJZCgpLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuKTtcblxuICAgICAgICAgICAgICAgIC8vIGBjb250ZW50YCBpcyBpbmNsdWRlZCBoZXJlIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBgU3R5bGUjX3VwZGF0ZVNvdXJjZXNgIGlzIGNhbGxlZFxuICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGUgVGlsZUpTT04gYXJyaXZlcy4gdGhpcyBtYWtlcyBzdXJlIHRoZSB0aWxlcyBuZWVkZWQgYXJlIGxvYWRlZCBvbmNlIFRpbGVKU09OIGFycml2ZXNcbiAgICAgICAgICAgICAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNDM0NyNkaXNjdXNzaW9uX3IxMDQ0MTgwODhcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YSd9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnY29udGVudCd9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZDtcbiAgICB9XG5cbiAgICBoYXNUaWxlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGlsZUJvdW5kcyB8fCB0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModGlsZUlELmNhbm9uaWNhbCk7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fdGlsZUpTT05SZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCB0aGlzLl9vcHRpb25zKTtcbiAgICB9XG5cbiAgICBsb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwodGlsZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLCB0aGlzLnNjaGVtZSksIHRoaXMudXJsLCBudWxsKTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuVGlsZSksXG4gICAgICAgICAgICB1aWQ6IHRpbGUudWlkLFxuICAgICAgICAgICAgdGlsZUlEOiB0aWxlLnRpbGVJRCxcbiAgICAgICAgICAgIHpvb206IHRpbGUudGlsZUlELm92ZXJzY2FsZWRaLFxuICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMudGlsZVNpemUgKiB0aWxlLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKSxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5pZCxcbiAgICAgICAgICAgIHBpeGVsUmF0aW86IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxcbiAgICAgICAgICAgIHNob3dDb2xsaXNpb25Cb3hlczogdGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzLFxuICAgICAgICB9O1xuICAgICAgICBwYXJhbXMucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSB0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG5cbiAgICAgICAgaWYgKCF0aWxlLmFjdG9yIHx8IHRpbGUuc3RhdGUgPT09ICdleHBpcmVkJykge1xuICAgICAgICAgICAgdGlsZS5hY3RvciA9IHRoaXMuZGlzcGF0Y2hlci5nZXRBY3RvcigpO1xuICAgICAgICAgICAgdGlsZS5yZXF1ZXN0ID0gdGlsZS5hY3Rvci5zZW5kKCdsb2FkVGlsZScsIHBhcmFtcywgZG9uZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aWxlLnN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIC8vIHNjaGVkdWxlIHRpbGUgcmVsb2FkaW5nIGFmdGVyIGl0IGhhcyBiZWVuIGxvYWRlZFxuICAgICAgICAgICAgdGlsZS5yZWxvYWRDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS5yZXF1ZXN0ID0gdGlsZS5hY3Rvci5zZW5kKCdyZWxvYWRUaWxlJywgcGFyYW1zLCBkb25lLmJpbmQodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIsIGRhdGEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgICBpZiAoZXJyICYmIGVyci5zdGF0dXMgIT09IDQwNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnJlc291cmNlVGltaW5nKVxuICAgICAgICAgICAgICAgIHRpbGUucmVzb3VyY2VUaW1pbmcgPSBkYXRhLnJlc291cmNlVGltaW5nO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMgJiYgZGF0YSkgdGlsZS5zZXRFeHBpcnlEYXRhKGRhdGEpO1xuICAgICAgICAgICAgdGlsZS5sb2FkVmVjdG9yRGF0YShkYXRhLCB0aGlzLm1hcC5wYWludGVyKTtcblxuICAgICAgICAgICAgY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQodGhpcy5kaXNwYXRjaGVyKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLnJlbG9hZENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVGlsZSh0aWxlLCB0aWxlLnJlbG9hZENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aWxlLnJlbG9hZENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFib3J0VGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmICh0aWxlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbGUuYWN0b3IpIHtcbiAgICAgICAgICAgIHRpbGUuYWN0b3Iuc2VuZCgnYWJvcnRUaWxlJywge3VpZDogdGlsZS51aWQsIHR5cGU6IHRoaXMudHlwZSwgc291cmNlOiB0aGlzLmlkfSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVubG9hZFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICB0aWxlLnVubG9hZFZlY3RvckRhdGEoKTtcbiAgICAgICAgdGlsZS5jbGVhck1hc2soKTtcbiAgICAgICAgaWYgKHRpbGUuYWN0b3IpIHtcbiAgICAgICAgICAgIHRpbGUuYWN0b3Iuc2VuZCgncmVtb3ZlVGlsZScsIHt1aWQ6IHRpbGUudWlkLCB0eXBlOiB0aGlzLnR5cGUsIHNvdXJjZTogdGhpcy5pZH0sIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWZWN0b3JUaWxlU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtleHRlbmQsIHBpY2t9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB7Z2V0SW1hZ2UsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgbG9hZFRpbGVKU09OIGZyb20gJy4vbG9hZF90aWxlanNvbic7XG5pbXBvcnQge3Bvc3RUdXJuc3RpbGVFdmVudCwgcG9zdE1hcExvYWRFdmVudH0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IFRpbGVCb3VuZHMgZnJvbSAnLi90aWxlX2JvdW5kcyc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5cbmltcG9ydCB7Y2FjaGVFbnRyeVBvc3NpYmx5QWRkZWR9IGZyb20gJy4uL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge1xuICAgIFJhc3RlclNvdXJjZVNwZWNpZmljYXRpb24sXG4gICAgUmFzdGVyREVNU291cmNlU3BlY2lmaWNhdGlvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgUmFzdGVyVGlsZVNvdXJjZSBleHRlbmRzIEV2ZW50ZWQgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIHR5cGU6ICdyYXN0ZXInIHwgJ3Jhc3Rlci1kZW0nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcbiAgICB1cmw6IHN0cmluZztcbiAgICBzY2hlbWU6IHN0cmluZztcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuXG4gICAgYm91bmRzOiA/W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgdGlsZUJvdW5kczogVGlsZUJvdW5kcztcbiAgICByb3VuZFpvb206IGJvb2xlYW47XG4gICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcjtcbiAgICBtYXA6IE1hcDtcbiAgICB0aWxlczogQXJyYXk8c3RyaW5nPjtcblxuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgX29wdGlvbnM6IFJhc3RlclNvdXJjZVNwZWNpZmljYXRpb24gfCBSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9uO1xuICAgIF90aWxlSlNPTlJlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogUmFzdGVyU291cmNlU3BlY2lmaWNhdGlvbiB8IFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyO1xuICAgICAgICB0aGlzLnNldEV2ZW50ZWRQYXJlbnQoZXZlbnRlZFBhcmVudCk7XG5cbiAgICAgICAgdGhpcy50eXBlID0gJ3Jhc3Rlcic7XG4gICAgICAgIHRoaXMubWluem9vbSA9IDA7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IDIyO1xuICAgICAgICB0aGlzLnJvdW5kWm9vbSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NoZW1lID0gJ3h5eic7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBleHRlbmQoe3R5cGU6ICdyYXN0ZXInfSwgb3B0aW9ucyk7XG4gICAgICAgIGV4dGVuZCh0aGlzLCBwaWNrKG9wdGlvbnMsIFsndXJsJywgJ3NjaGVtZScsICd0aWxlU2l6ZSddKSk7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcbiAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0ID0gbG9hZFRpbGVKU09OKHRoaXMuX29wdGlvbnMsIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwgKGVyciwgdGlsZUpTT04pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGlsZUpTT04pIHtcbiAgICAgICAgICAgICAgICBleHRlbmQodGhpcywgdGlsZUpTT04pO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlSlNPTi5ib3VuZHMpIHRoaXMudGlsZUJvdW5kcyA9IG5ldyBUaWxlQm91bmRzKHRpbGVKU09OLmJvdW5kcywgdGhpcy5taW56b29tLCB0aGlzLm1heHpvb20pO1xuXG4gICAgICAgICAgICAgICAgcG9zdFR1cm5zdGlsZUV2ZW50KHRpbGVKU09OLnRpbGVzKTtcbiAgICAgICAgICAgICAgICBwb3N0TWFwTG9hZEV2ZW50KHRpbGVKU09OLnRpbGVzLCB0aGlzLm1hcC5fZ2V0TWFwSWQoKSwgdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9za3VUb2tlbik7XG5cbiAgICAgICAgICAgICAgICAvLyBgY29udGVudGAgaXMgaW5jbHVkZWQgaGVyZSB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYFN0eWxlI191cGRhdGVTb3VyY2VzYCBpcyBjYWxsZWRcbiAgICAgICAgICAgICAgICAvLyBiZWZvcmUgdGhlIFRpbGVKU09OIGFycml2ZXMuIHRoaXMgbWFrZXMgc3VyZSB0aGUgdGlsZXMgbmVlZGVkIGFyZSBsb2FkZWQgb25jZSBUaWxlSlNPTiBhcnJpdmVzXG4gICAgICAgICAgICAgICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9wdWxsLzQzNDcjZGlzY3Vzc2lvbl9yMTA0NDE4MDg4XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnbWV0YWRhdGEnfSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWQ7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fdGlsZUpTT05SZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCB0aGlzLl9vcHRpb25zKTtcbiAgICB9XG5cbiAgICBoYXNUaWxlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGlsZUJvdW5kcyB8fCB0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModGlsZUlELmNhbm9uaWNhbCk7XG4gICAgfVxuXG4gICAgbG9hZFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVUaWxlVVJMKHRpbGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcywgdGhpcy5zY2hlbWUpLCB0aGlzLnVybCwgdGhpcy50aWxlU2l6ZSk7XG4gICAgICAgIHRpbGUucmVxdWVzdCA9IGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLCAoZXJyLCBpbWcpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ3VubG9hZGVkJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpbWcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMpIHRpbGUuc2V0RXhwaXJ5RGF0YShpbWcpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSAoaW1nOiBhbnkpLmNhY2hlQ29udHJvbDtcbiAgICAgICAgICAgICAgICBkZWxldGUgKGltZzogYW55KS5leHBpcmVzO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMubWFwLnBhaW50ZXIuY29udGV4dDtcbiAgICAgICAgICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShpbWcud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlLnRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlLnVwZGF0ZShpbWcsIHt1c2VNaXBtYXA6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCBpbWcsIGdsLlJHQkEsIHt1c2VNaXBtYXA6IHRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFLCBnbC5MSU5FQVJfTUlQTUFQX05FQVJFU1QpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyZihnbC5URVhUVVJFXzJELCBjb250ZXh0LmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgY29udGV4dC5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdsb2FkZWQnO1xuXG4gICAgICAgICAgICAgICAgY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQodGhpcy5kaXNwYXRjaGVyKTtcblxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIGlmICh0aWxlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBpZiAodGlsZS50ZXh0dXJlKSB0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0aWxlLnRleHR1cmUpO1xuICAgICAgICB0aWxlLmNsZWFyTWFzaygpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclRpbGVTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgUmFzdGVyVGlsZVNvdXJjZSBmcm9tICcuL3Jhc3Rlcl90aWxlX3NvdXJjZSc7XG4vLyBlbnN1cmUgREVNRGF0YSBpcyByZWdpc3RlcmVkIGZvciB3b3JrZXIgdHJhbnNmZXIgb24gbWFpbiB0aHJlYWQ6XG5pbXBvcnQgJy4uL2RhdGEvZGVtX2RhdGEnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgUmFzdGVyREVNVGlsZVNvdXJjZSBleHRlbmRzIFJhc3RlclRpbGVTb3VyY2UgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIGVuY29kaW5nOiBcIm1hcGJveFwiIHwgXCJ0ZXJyYXJpdW1cIjtcblxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncmFzdGVyLWRlbSc7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IDIyO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gZXh0ZW5kKHt0eXBlOiAncmFzdGVyLWRlbSd9LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2RpbmcgfHwgXCJtYXBib3hcIjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAncmFzdGVyLWRlbScsXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMudGlsZVNpemUsXG4gICAgICAgICAgICB0aWxlczogdGhpcy50aWxlcyxcbiAgICAgICAgICAgIGJvdW5kczogdGhpcy5ib3VuZHMsXG4gICAgICAgICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSwgdGhpcy51cmwsIHRoaXMudGlsZVNpemUpO1xuICAgICAgICB0aWxlLnJlcXVlc3QgPSBnZXRJbWFnZSh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5UaWxlKSwgaW1hZ2VMb2FkZWQuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdGlsZS5uZWlnaGJvcmluZ1RpbGVzID0gdGhpcy5fZ2V0TmVpZ2hib3JpbmdUaWxlcyh0aWxlLnRpbGVJRCk7XG4gICAgICAgIGZ1bmN0aW9uIGltYWdlTG9hZGVkKGVyciwgaW1nKSB7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICAgICAgaWYgKHRpbGUuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAndW5sb2FkZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGltZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcykgdGlsZS5zZXRFeHBpcnlEYXRhKGltZyk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIChpbWc6IGFueSkuY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSAoaW1nOiBhbnkpLmV4cGlyZXM7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3SW1hZ2VEYXRhID0gYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1nLCAxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHVpZDogdGlsZS51aWQsXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkOiB0aWxlLnRpbGVJRCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgICAgICByYXdJbWFnZURhdGEsXG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiB0aGlzLmVuY29kaW5nXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghdGlsZS5hY3RvciB8fCB0aWxlLnN0YXRlID09PSAnZXhwaXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS5hY3RvciA9IHRoaXMuZGlzcGF0Y2hlci5nZXRBY3RvcigpO1xuICAgICAgICAgICAgICAgICAgICB0aWxlLmFjdG9yLnNlbmQoJ2xvYWRERU1UaWxlJywgcGFyYW1zLCBkb25lLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyLCBkZW0pIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkZW0pIHtcbiAgICAgICAgICAgICAgICB0aWxlLmRlbSA9IGRlbTtcbiAgICAgICAgICAgICAgICB0aWxlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdsb2FkZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldE5laWdoYm9yaW5nVGlsZXModGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbCA9IHRpbGVJRC5jYW5vbmljYWw7XG4gICAgICAgIGNvbnN0IGRpbSA9IE1hdGgucG93KDIsIGNhbm9uaWNhbC56KTtcblxuICAgICAgICBjb25zdCBweCA9IChjYW5vbmljYWwueCAtIDEgKyBkaW0pICUgZGltO1xuICAgICAgICBjb25zdCBweHcgPSBjYW5vbmljYWwueCA9PT0gMCA/IHRpbGVJRC53cmFwIC0gMSA6IHRpbGVJRC53cmFwO1xuICAgICAgICBjb25zdCBueCA9IChjYW5vbmljYWwueCArIDEgKyBkaW0pICUgZGltO1xuICAgICAgICBjb25zdCBueHcgPSBjYW5vbmljYWwueCArIDEgPT09IGRpbSA/IHRpbGVJRC53cmFwICsgMSA6IHRpbGVJRC53cmFwO1xuXG4gICAgICAgIGNvbnN0IG5laWdoYm9yaW5nVGlsZXMgPSB7fTtcbiAgICAgICAgLy8gYWRkIGFkamFjZW50IHRpbGVzXG4gICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBweHcsIGNhbm9uaWNhbC56LCBweCwgY2Fub25pY2FsLnkpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgbnh3LCBjYW5vbmljYWwueiwgbngsIGNhbm9uaWNhbC55KS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcblxuICAgICAgICAvLyBBZGQgdXBwZXIgbmVpZ2hib3JpbmdUaWxlc1xuICAgICAgICBpZiAoY2Fub25pY2FsLnkgPiAwKSB7XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgcHh3LCBjYW5vbmljYWwueiwgcHgsIGNhbm9uaWNhbC55IC0gMSkua2V5XSA9IHtiYWNrZmlsbGVkOiBmYWxzZX07XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgdGlsZUlELndyYXAsIGNhbm9uaWNhbC56LCBjYW5vbmljYWwueCwgY2Fub25pY2FsLnkgLSAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBueHcsIGNhbm9uaWNhbC56LCBueCwgY2Fub25pY2FsLnkgLSAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgbG93ZXIgbmVpZ2hib3JpbmdUaWxlc1xuICAgICAgICBpZiAoY2Fub25pY2FsLnkgKyAxIDwgZGltKSB7XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgcHh3LCBjYW5vbmljYWwueiwgcHgsIGNhbm9uaWNhbC55ICsgMSkua2V5XSA9IHtiYWNrZmlsbGVkOiBmYWxzZX07XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgdGlsZUlELndyYXAsIGNhbm9uaWNhbC56LCBjYW5vbmljYWwueCwgY2Fub25pY2FsLnkgKyAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBueHcsIGNhbm9uaWNhbC56LCBueCwgY2Fub25pY2FsLnkgKyAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZWlnaGJvcmluZ1RpbGVzO1xuICAgIH1cblxuICAgIHVubG9hZFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGlsZS5kZW1UZXh0dXJlKSB0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0aWxlLmRlbVRleHR1cmUpO1xuICAgICAgICBpZiAodGlsZS5mYm8pIHtcbiAgICAgICAgICAgIHRpbGUuZmJvLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLmZibztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGlsZS5kZW0pIGRlbGV0ZSB0aWxlLmRlbTtcbiAgICAgICAgZGVsZXRlIHRpbGUubmVpZ2hib3JpbmdUaWxlcztcbiAgICAgICAgdGlsZS5jbGVhck1hc2soKTtcblxuICAgICAgICB0aWxlLnN0YXRlID0gJ3VubG9hZGVkJztcbiAgICAgICAgaWYgKHRpbGUuYWN0b3IpIHtcbiAgICAgICAgICAgIHRpbGUuYWN0b3Iuc2VuZCgncmVtb3ZlREVNVGlsZScsIHt1aWQ6IHRpbGUudWlkLCBzb3VyY2U6IHRoaXMuaWR9KTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBSYXN0ZXJERU1UaWxlU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCB7UmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0dlb0pTT04sIEdlb0pTT05GZWF0dXJlfSBmcm9tICdAbWFwYm94L2dlb2pzb24tdHlwZXMnO1xuaW1wb3J0IHR5cGUge0dlb0pTT05Tb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuLyoqXG4gKiBBIHNvdXJjZSBjb250YWluaW5nIEdlb0pTT04uXG4gKiAoU2VlIHRoZSBbU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcy1nZW9qc29uKSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvZiBvcHRpb25zLilcbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZFNvdXJjZSgnc29tZSBpZCcsIHtcbiAqICAgICB0eXBlOiAnZ2VvanNvbicsXG4gKiAgICAgZGF0YTogJ2h0dHBzOi8vZDJhZDZiNHVyN3l2cHEuY2xvdWRmcm9udC5uZXQvbmF0dXJhbGVhcnRoLTMuMy4wL25lXzEwbV9wb3J0cy5nZW9qc29uJ1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAnZ2VvanNvbicsXG4gKiAgICBkYXRhOiB7XG4gKiAgICAgICAgXCJ0eXBlXCI6IFwiRmVhdHVyZUNvbGxlY3Rpb25cIixcbiAqICAgICAgICBcImZlYXR1cmVzXCI6IFt7XG4gKiAgICAgICAgICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAqICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHt9LFxuICogICAgICAgICAgICBcImdlb21ldHJ5XCI6IHtcbiAqICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgICAgICAgICAgICAgICBcImNvb3JkaW5hdGVzXCI6IFtcbiAqICAgICAgICAgICAgICAgICAgICAtNzYuNTMwNjMyOTcyNzE3MjksXG4gKiAgICAgICAgICAgICAgICAgICAgMzkuMTgxNzQwNzc5OTQxMDhcbiAqICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgfVxuICogICAgICAgIH1dXG4gKiAgICB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpLnNldERhdGEoe1xuICogICBcInR5cGVcIjogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICogICBcImZlYXR1cmVzXCI6IFt7XG4gKiAgICAgICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXG4gKiAgICAgICBcInByb3BlcnRpZXNcIjogeyBcIm5hbWVcIjogXCJOdWxsIElzbGFuZFwiIH0sXG4gKiAgICAgICBcImdlb21ldHJ5XCI6IHtcbiAqICAgICAgICAgICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICAgICAgICAgIFwiY29vcmRpbmF0ZXNcIjogWyAwLCAwIF1cbiAqICAgICAgIH1cbiAqICAgfV1cbiAqIH0pO1xuICogQHNlZSBbRHJhdyBHZW9KU09OIHBvaW50c10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9nZW9qc29uLW1hcmtlcnMvKVxuICogQHNlZSBbQWRkIGEgR2VvSlNPTiBsaW5lXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dlb2pzb24tbGluZS8pXG4gKiBAc2VlIFtDcmVhdGUgYSBoZWF0bWFwIGZyb20gcG9pbnRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hlYXRtYXAvKVxuICogQHNlZSBbQ3JlYXRlIGFuZCBzdHlsZSBjbHVzdGVyc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jbHVzdGVyLylcbiAqL1xuY2xhc3MgR2VvSlNPTlNvdXJjZSBleHRlbmRzIEV2ZW50ZWQgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIHR5cGU6ICdnZW9qc29uJztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBhdHRyaWJ1dGlvbjogc3RyaW5nO1xuXG4gICAgaXNUaWxlQ2xpcHBlZDogYm9vbGVhbjtcbiAgICByZXBhcnNlT3ZlcnNjYWxlZDogYm9vbGVhbjtcbiAgICBfZGF0YTogR2VvSlNPTiB8IHN0cmluZztcbiAgICBfb3B0aW9uczogYW55O1xuICAgIHdvcmtlck9wdGlvbnM6IGFueTtcbiAgICBtYXA6IE1hcDtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgX2xvYWRlZDogYm9vbGVhbjtcbiAgICBfY29sbGVjdFJlc291cmNlVGltaW5nOiBib29sZWFuO1xuICAgIF9yZXNvdXJjZVRpbWluZzogQXJyYXk8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZz47XG4gICAgX3JlbW92ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IEdlb0pTT05Tb3VyY2VTcGVjaWZpY2F0aW9uICYge3dvcmtlck9wdGlvbnM/OiBhbnksIGNvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbn0sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICAgICAgLy8gYHR5cGVgIGlzIGEgcHJvcGVydHkgcmF0aGVyIHRoYW4gYSBjb25zdGFudCB0byBtYWtlIGl0IGVhc3kgZm9yIDNyZFxuICAgICAgICAvLyBwYXJ0aWVzIHRvIHVzZSBHZW9KU09OU291cmNlIHRvIGJ1aWxkIHRoZWlyIG93biBzb3VyY2UgdHlwZXMuXG4gICAgICAgIHRoaXMudHlwZSA9ICdnZW9qc29uJztcblxuICAgICAgICB0aGlzLm1pbnpvb20gPSAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAxODtcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjtcbiAgICAgICAgdGhpcy5pc1RpbGVDbGlwcGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5hY3RvciA9IGRpc3BhdGNoZXIuZ2V0QWN0b3IoKTtcbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSAob3B0aW9ucy5kYXRhOiBhbnkpO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gZXh0ZW5kKHt9LCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSBvcHRpb25zLmNvbGxlY3RSZXNvdXJjZVRpbWluZztcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VUaW1pbmcgPSBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5tYXh6b29tICE9PSB1bmRlZmluZWQpIHRoaXMubWF4em9vbSA9IG9wdGlvbnMubWF4em9vbTtcbiAgICAgICAgaWYgKG9wdGlvbnMudHlwZSkgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuICAgICAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGlvbikgdGhpcy5hdHRyaWJ1dGlvbiA9IG9wdGlvbnMuYXR0cmlidXRpb247XG5cbiAgICAgICAgY29uc3Qgc2NhbGUgPSBFWFRFTlQgLyB0aGlzLnRpbGVTaXplO1xuXG4gICAgICAgIC8vIHNlbnQgdG8gdGhlIHdvcmtlciwgYWxvbmcgd2l0aCBgdXJsOiAuLi5gIG9yIGBkYXRhOiBsaXRlcmFsIGdlb2pzb25gLFxuICAgICAgICAvLyBzbyB0aGF0IGl0IGNhbiBsb2FkL3BhcnNlL2luZGV4IHRoZSBnZW9qc29uIGRhdGFcbiAgICAgICAgLy8gZXh0ZW5kaW5nIHdpdGggYG9wdGlvbnMud29ya2VyT3B0aW9uc2AgaGVscHMgdG8gbWFrZSBpdCBlYXN5IGZvclxuICAgICAgICAvLyB0aGlyZC1wYXJ0eSBzb3VyY2VzIHRvIGhhY2svcmV1c2UgR2VvSlNPTlNvdXJjZS5cbiAgICAgICAgdGhpcy53b3JrZXJPcHRpb25zID0gZXh0ZW5kKHtcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5pZCxcbiAgICAgICAgICAgIGNsdXN0ZXI6IG9wdGlvbnMuY2x1c3RlciB8fCBmYWxzZSxcbiAgICAgICAgICAgIGdlb2pzb25WdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBidWZmZXI6IChvcHRpb25zLmJ1ZmZlciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5idWZmZXIgOiAxMjgpICogc2NhbGUsXG4gICAgICAgICAgICAgICAgdG9sZXJhbmNlOiAob3B0aW9ucy50b2xlcmFuY2UgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudG9sZXJhbmNlIDogMC4zNzUpICogc2NhbGUsXG4gICAgICAgICAgICAgICAgZXh0ZW50OiBFWFRFTlQsXG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogdGhpcy5tYXh6b29tLFxuICAgICAgICAgICAgICAgIGxpbmVNZXRyaWNzOiBvcHRpb25zLmxpbmVNZXRyaWNzIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlSWQ6IG9wdGlvbnMuZ2VuZXJhdGVJZCB8fCBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1cGVyY2x1c3Rlck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBtYXhab29tOiBvcHRpb25zLmNsdXN0ZXJNYXhab29tICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihvcHRpb25zLmNsdXN0ZXJNYXhab29tLCB0aGlzLm1heHpvb20gLSAxKSA6XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm1heHpvb20gLSAxKSxcbiAgICAgICAgICAgICAgICBleHRlbnQ6IEVYVEVOVCxcbiAgICAgICAgICAgICAgICByYWRpdXM6IChvcHRpb25zLmNsdXN0ZXJSYWRpdXMgfHwgNTApICogc2NhbGUsXG4gICAgICAgICAgICAgICAgbG9nOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsdXN0ZXJQcm9wZXJ0aWVzOiBvcHRpb25zLmNsdXN0ZXJQcm9wZXJ0aWVzXG4gICAgICAgIH0sIG9wdGlvbnMud29ya2VyT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnfSkpO1xuICAgICAgICB0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkYXRhOiBPYmplY3QgPSB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ307XG4gICAgICAgICAgICBpZiAodGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nICYmIHRoaXMuX3Jlc291cmNlVGltaW5nICYmICh0aGlzLl9yZXNvdXJjZVRpbWluZy5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgIGRhdGEucmVzb3VyY2VUaW1pbmcgPSB0aGlzLl9yZXNvdXJjZVRpbWluZztcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhbHRob3VnaCBHZW9KU09OIHNvdXJjZXMgY29udGFpbiBubyBtZXRhZGF0YSwgd2UgZmlyZSB0aGlzIGV2ZW50IHRvIGxldCB0aGUgU291cmNlQ2FjaGVcbiAgICAgICAgICAgIC8vIGtub3cgaXRzIG9rIHRvIHN0YXJ0IHJlcXVlc3RpbmcgdGlsZXMuXG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywgZGF0YSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgR2VvSlNPTiBkYXRhIGFuZCByZS1yZW5kZXJzIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdHxzdHJpbmd9IGRhdGEgQSBHZW9KU09OIGRhdGEgb2JqZWN0IG9yIGEgVVJMIHRvIG9uZS4gVGhlIGxhdHRlciBpcyBwcmVmZXJhYmxlIGluIHRoZSBjYXNlIG9mIGxhcmdlIEdlb0pTT04gZmlsZXMuXG4gICAgICogQHJldHVybnMge0dlb0pTT05Tb3VyY2V9IHRoaXNcbiAgICAgKi9cbiAgICBzZXREYXRhKGRhdGE6IEdlb0pTT04gfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlV29ya2VyRGF0YSgoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycikpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGF0YTogT2JqZWN0ID0ge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdjb250ZW50J307XG4gICAgICAgICAgICBpZiAodGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nICYmIHRoaXMuX3Jlc291cmNlVGltaW5nICYmICh0aGlzLl9yZXNvdXJjZVRpbWluZy5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgIGRhdGEucmVzb3VyY2VUaW1pbmcgPSB0aGlzLl9yZXNvdXJjZVRpbWluZztcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIGRhdGEpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGNsdXN0ZXJlZCBzb3VyY2VzLCBmZXRjaGVzIHRoZSB6b29tIGF0IHdoaWNoIHRoZSBnaXZlbiBjbHVzdGVyIGV4cGFuZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlcklkIFRoZSB2YWx1ZSBvZiB0aGUgY2x1c3RlcidzIGBjbHVzdGVyX2lkYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgem9vbSB2YWx1ZSBpcyByZXRyaWV2ZWQgKGAoZXJyb3IsIHpvb20pID0+IHsgLi4uIH1gKS5cbiAgICAgKiBAcmV0dXJucyB7R2VvSlNPTlNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKGNsdXN0ZXJJZDogbnVtYmVyLCBjYWxsYmFjazogQ2FsbGJhY2s8bnVtYmVyPikge1xuICAgICAgICB0aGlzLmFjdG9yLnNlbmQoJ2dlb2pzb24uZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20nLCB7Y2x1c3RlcklkLCBzb3VyY2U6IHRoaXMuaWR9LCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvciBjbHVzdGVyZWQgc291cmNlcywgZmV0Y2hlcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIGNsdXN0ZXIgb24gdGhlIG5leHQgem9vbSBsZXZlbCAoYXMgYW4gYXJyYXkgb2YgR2VvSlNPTiBmZWF0dXJlcykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlcklkIFRoZSB2YWx1ZSBvZiB0aGUgY2x1c3RlcidzIGBjbHVzdGVyX2lkYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZmVhdHVyZXMgYXJlIHJldHJpZXZlZCAoYChlcnJvciwgZmVhdHVyZXMpID0+IHsgLi4uIH1gKS5cbiAgICAgKiBAcmV0dXJucyB7R2VvSlNPTlNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIGdldENsdXN0ZXJDaGlsZHJlbihjbHVzdGVySWQ6IG51bWJlciwgY2FsbGJhY2s6IENhbGxiYWNrPEFycmF5PEdlb0pTT05GZWF0dXJlPj4pIHtcbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKCdnZW9qc29uLmdldENsdXN0ZXJDaGlsZHJlbicsIHtjbHVzdGVySWQsIHNvdXJjZTogdGhpcy5pZH0sIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGNsdXN0ZXJlZCBzb3VyY2VzLCBmZXRjaGVzIHRoZSBvcmlnaW5hbCBwb2ludHMgdGhhdCBiZWxvbmcgdG8gdGhlIGNsdXN0ZXIgKGFzIGFuIGFycmF5IG9mIEdlb0pTT04gZmVhdHVyZXMpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNsdXN0ZXJJZCBUaGUgdmFsdWUgb2YgdGhlIGNsdXN0ZXIncyBgY2x1c3Rlcl9pZGAgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIGxpbWl0IFRoZSBtYXhpbXVtIG51bWJlciBvZiBmZWF0dXJlcyB0byByZXR1cm4uXG4gICAgICogQHBhcmFtIG9mZnNldCBUaGUgbnVtYmVyIG9mIGZlYXR1cmVzIHRvIHNraXAgKGUuZy4gZm9yIHBhZ2luYXRpb24pLlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmZWF0dXJlcyBhcmUgcmV0cmlldmVkIChgKGVycm9yLCBmZWF0dXJlcykgPT4geyAuLi4gfWApLlxuICAgICAqIEByZXR1cm5zIHtHZW9KU09OU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckxlYXZlcyhjbHVzdGVySWQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIsIGNhbGxiYWNrOiBDYWxsYmFjazxBcnJheTxHZW9KU09ORmVhdHVyZT4+KSB7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgnZ2VvanNvbi5nZXRDbHVzdGVyTGVhdmVzJywge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgY2x1c3RlcklkLFxuICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICBvZmZzZXRcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlc3BvbnNpYmxlIGZvciBpbnZva2luZyBXb3JrZXJTb3VyY2UncyBnZW9qc29uLmxvYWREYXRhIHRhcmdldCwgd2hpY2hcbiAgICAgKiBoYW5kbGVzIGxvYWRpbmcgdGhlIGdlb2pzb24gZGF0YSBhbmQgcHJlcGFyaW5nIHRvIHNlcnZlIGl0IHVwIGFzIHRpbGVzLFxuICAgICAqIHVzaW5nIGdlb2pzb24tdnQgb3Igc3VwZXJjbHVzdGVyIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqL1xuICAgIF91cGRhdGVXb3JrZXJEYXRhKGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgdGhpcy53b3JrZXJPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdWVzdCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGJyb3dzZXIucmVzb2x2ZVVSTChkYXRhKSwgUmVzb3VyY2VUeXBlLlNvdXJjZSk7XG4gICAgICAgICAgICBvcHRpb25zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nID0gdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0YXJnZXQge3RoaXMudHlwZX0ubG9hZERhdGEgcmF0aGVyIHRoYW4gbGl0ZXJhbGx5IGdlb2pzb24ubG9hZERhdGEsXG4gICAgICAgIC8vIHNvIHRoYXQgb3RoZXIgZ2VvanNvbi1saWtlIHNvdXJjZSB0eXBlcyBjYW4gZWFzaWx5IHJldXNlIHRoaXNcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb25cbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKGAke3RoaXMudHlwZX0ubG9hZERhdGFgLCBvcHRpb25zLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZW1vdmVkIHx8IChyZXN1bHQgJiYgcmVzdWx0LmFiYW5kb25lZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnJlc291cmNlVGltaW5nICYmIHJlc3VsdC5yZXNvdXJjZVRpbWluZ1t0aGlzLmlkXSlcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IHJlc3VsdC5yZXNvdXJjZVRpbWluZ1t0aGlzLmlkXS5zbGljZSgwKTtcbiAgICAgICAgICAgIC8vIEFueSBgbG9hZERhdGFgIGNhbGxzIHRoYXQgcGlsZWQgdXAgd2hpbGUgd2Ugd2VyZSBwcm9jZXNzaW5nXG4gICAgICAgICAgICAvLyB0aGlzIG9uZSB3aWxsIGdldCBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSBjYWxsIHdoZW4gdGhpc1xuICAgICAgICAgICAgLy8gJ2NvYWxlc2NlJyBtZXNzYWdlIGlzIHByb2Nlc3NlZC5cbiAgICAgICAgICAgIC8vIFdlIHdvdWxkIHNlbGYtc2VuZCBmcm9tIHRoZSB3b3JrZXIgaWYgd2UgaGFkIGFjY2VzcyB0byBpdHNcbiAgICAgICAgICAgIC8vIG1lc3NhZ2UgcXVldWUuIFdhaXRpbmcgaW5zdGVhZCBmb3IgdGhlICdjb2FsZXNjZScgdG8gcm91bmQtdHJpcFxuICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgZm9yZWdyb3VuZCBqdXN0IG1lYW5zIHdlJ3JlIHRocm90dGxpbmcgdGhlIHdvcmtlclxuICAgICAgICAgICAgLy8gdG8gcnVuIGF0IGEgbGl0dGxlIGxlc3MgdGhhbiBmdWxsLXRocm90dGxlLlxuICAgICAgICAgICAgdGhpcy5hY3Rvci5zZW5kKGAke3RoaXMudHlwZX0uY29hbGVzY2VgLCB7c291cmNlOiBvcHRpb25zLnNvdXJjZX0sIG51bGwpO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gIXRpbGUuYWN0b3IgPyAnbG9hZFRpbGUnIDogJ3JlbG9hZFRpbGUnO1xuICAgICAgICB0aWxlLmFjdG9yID0gdGhpcy5hY3RvcjtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgIHRpbGVJRDogdGlsZS50aWxlSUQsXG4gICAgICAgICAgICB6b29tOiB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgIG1heFpvb206IHRoaXMubWF4em9vbSxcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplLFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgcGl4ZWxSYXRpbzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzOiB0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXNcbiAgICAgICAgfTtcblxuICAgICAgICB0aWxlLnJlcXVlc3QgPSB0aGlzLmFjdG9yLnNlbmQobWVzc2FnZSwgcGFyYW1zLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICAgICAgdGlsZS51bmxvYWRWZWN0b3JEYXRhKCk7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGlsZS5sb2FkVmVjdG9yRGF0YShkYXRhLCB0aGlzLm1hcC5wYWludGVyLCBtZXNzYWdlID09PSAncmVsb2FkVGlsZScpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFib3J0VGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmICh0aWxlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGlsZS5hYm9ydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUpIHtcbiAgICAgICAgdGlsZS51bmxvYWRWZWN0b3JEYXRhKCk7XG4gICAgICAgIHRpbGUuY2xlYXJNYXNrKCk7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgncmVtb3ZlVGlsZScsIHt1aWQ6IHRpbGUudWlkLCB0eXBlOiB0aGlzLnR5cGUsIHNvdXJjZTogdGhpcy5pZH0pO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICB0aGlzLl9yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKCdyZW1vdmVTb3VyY2UnLCB7dHlwZTogdGhpcy50eXBlLCBzb3VyY2U6IHRoaXMuaWR9KTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIHRoaXMuX29wdGlvbnMsIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuX2RhdGFcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2VvSlNPTlNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7Z2V0SW1hZ2UsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHtSYXN0ZXJCb3VuZHNBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgcmFzdGVyQm91bmRzQXR0cmlidXRlcyBmcm9tICcuLi9kYXRhL3Jhc3Rlcl9ib3VuZHNfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2V9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB0eXBlIHtDYW52YXNTb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuL2NhbnZhc19zb3VyY2UnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtcbiAgICBJbWFnZVNvdXJjZVNwZWNpZmljYXRpb24sXG4gICAgVmlkZW9Tb3VyY2VTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG50eXBlIENvb3JkaW5hdGVzID0gW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dO1xuXG4vKipcbiAqIEEgZGF0YSBzb3VyY2UgY29udGFpbmluZyBhbiBpbWFnZS5cbiAqIChTZWUgdGhlIFtTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzLWltYWdlKSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvZiBvcHRpb25zLilcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gYWRkIHRvIG1hcFxuICogbWFwLmFkZFNvdXJjZSgnc29tZSBpZCcsIHtcbiAqICAgIHR5cGU6ICdpbWFnZScsXG4gKiAgICB1cmw6ICdodHRwczovL3d3dy5tYXBib3guY29tL2ltYWdlcy9mb28ucG5nJyxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE4XSxcbiAqICAgICAgICBbLTc2LjUyLCAzOS4xN10sXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMTddXG4gKiAgICBdXG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGUgY29vcmRpbmF0ZXNcbiAqIHZhciBteVNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKTtcbiAqIG15U291cmNlLnNldENvb3JkaW5hdGVzKFtcbiAqICAgICBbLTc2LjU0MzM1NzM3MjI4Mzk0LCAzOS4xODU3OTkwNzIyOTc0OF0sXG4gKiAgICAgWy03Ni41MjgwMzY1OTQzOTA4NywgMzkuMTgzODM2NDg0NzU4N10sXG4gKiAgICAgWy03Ni41Mjk1Mzg2MzE0MzkyLCAzOS4xNzY4MzM5MjUwNzYwNl0sXG4gKiAgICAgWy03Ni41NDUyMDI3MzIwODYxOCwgMzkuMTc4NzYzNDQxMDY2NDJdXG4gKiBdKTtcbiAqXG4gKiAvLyB1cGRhdGUgdXJsIGFuZCBjb29yZGluYXRlcyBzaW11bHRhbmVvdXNseVxuICogbXlTb3VyY2UudXBkYXRlSW1hZ2Uoe1xuICogICAgdXJsOiAnaHR0cHM6Ly93d3cubWFwYm94LmNvbS9pbWFnZXMvYmFyLnBuZycsXG4gKiAgICBjb29yZGluYXRlczogW1xuICogICAgICAgIFstNzYuNTQzMzU3MzcyMjgzOTQsIDM5LjE4NTc5OTA3MjI5NzQ4XSxcbiAqICAgICAgICBbLTc2LjUyODAzNjU5NDM5MDg3LCAzOS4xODM4MzY0ODQ3NTg3XSxcbiAqICAgICAgICBbLTc2LjUyOTUzODYzMTQzOTIsIDM5LjE3NjgzMzkyNTA3NjA2XSxcbiAqICAgICAgICBbLTc2LjU0NTIwMjczMjA4NjE4LCAzOS4xNzg3NjM0NDEwNjY0Ml1cbiAqICAgIF1cbiAqIH0pXG4gKlxuICogbWFwLnJlbW92ZVNvdXJjZSgnc29tZSBpZCcpOyAgLy8gcmVtb3ZlXG4gKiBAc2VlIFtBZGQgYW4gaW1hZ2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaW1hZ2Utb24tYS1tYXAvKVxuICovXG5jbGFzcyBJbWFnZVNvdXJjZSBleHRlbmRzIEV2ZW50ZWQgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICB1cmw6IHN0cmluZztcblxuICAgIGNvb3JkaW5hdGVzOiBDb29yZGluYXRlcztcbiAgICB0aWxlczoge1tzdHJpbmddOiBUaWxlfTtcbiAgICBvcHRpb25zOiBhbnk7XG4gICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcjtcbiAgICBtYXA6IE1hcDtcbiAgICB0ZXh0dXJlOiBUZXh0dXJlIHwgbnVsbDtcbiAgICBpbWFnZTogSFRNTEltYWdlRWxlbWVudDtcbiAgICB0aWxlSUQ6IENhbm9uaWNhbFRpbGVJRDtcbiAgICBfYm91bmRzQXJyYXk6IFJhc3RlckJvdW5kc0FycmF5O1xuICAgIGJvdW5kc0J1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIGJvdW5kc1NlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IEltYWdlU291cmNlU3BlY2lmaWNhdGlvbiB8IFZpZGVvU291cmNlU3BlY2lmaWNhdGlvbiB8IENhbnZhc1NvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyO1xuICAgICAgICB0aGlzLmNvb3JkaW5hdGVzID0gb3B0aW9ucy5jb29yZGluYXRlcztcblxuICAgICAgICB0aGlzLnR5cGUgPSAnaW1hZ2UnO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAyMjtcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjtcbiAgICAgICAgdGhpcy50aWxlcyA9IHt9O1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnNldEV2ZW50ZWRQYXJlbnQoZXZlbnRlZFBhcmVudCk7XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBsb2FkKG5ld0Nvb3JkaW5hdGVzPzogQ29vcmRpbmF0ZXMsIHN1Y2Nlc3NDYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcblxuICAgICAgICB0aGlzLnVybCA9IHRoaXMub3B0aW9ucy51cmw7XG5cbiAgICAgICAgZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodGhpcy51cmwsIFJlc291cmNlVHlwZS5JbWFnZSksIChlcnIsIGltYWdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0Nvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29vcmRpbmF0ZXMgPSBuZXdDb29yZGluYXRlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluaXNoTG9hZGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgaW1hZ2UgVVJMIGFuZCwgb3B0aW9uYWxseSwgdGhlIGNvb3JkaW5hdGVzLiBUbyBhdm9pZCBoYXZpbmcgdGhlIGltYWdlIGZsYXNoIGFmdGVyIGNoYW5naW5nLFxuICAgICAqIHNldCB0aGUgYHJhc3Rlci1mYWRlLWR1cmF0aW9uYCBwYWludCBwcm9wZXJ0eSBvbiB0aGUgcmFzdGVyIGxheWVyIHRvIDAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy51cmxdIFJlcXVpcmVkIGltYWdlIFVSTC5cbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBbb3B0aW9ucy5jb29yZGluYXRlc10gRm91ciBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMsXG4gICAgICogICByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBudW1iZXJzLCB3aGljaCBkZWZpbmUgdGhlIGNvcm5lcnMgb2YgdGhlIGltYWdlLlxuICAgICAqICAgVGhlIGNvb3JkaW5hdGVzIHN0YXJ0IGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGltYWdlIGFuZCBwcm9jZWVkIGluIGNsb2Nrd2lzZSBvcmRlci5cbiAgICAgKiAgIFRoZXkgZG8gbm90IGhhdmUgdG8gcmVwcmVzZW50IGEgcmVjdGFuZ2xlLlxuICAgICAqIEByZXR1cm5zIHtJbWFnZVNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIHVwZGF0ZUltYWdlKG9wdGlvbnM6IHt1cmw6IHN0cmluZywgY29vcmRpbmF0ZXM/OiBDb29yZGluYXRlc30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmltYWdlIHx8ICFvcHRpb25zLnVybCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zLnVybCA9IG9wdGlvbnMudXJsO1xuICAgICAgICB0aGlzLmxvYWQob3B0aW9ucy5jb29yZGluYXRlcywgKCkgPT4geyB0aGlzLnRleHR1cmUgPSBudWxsOyB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2ZpbmlzaExvYWRpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ30pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBpbWFnZSdzIGNvb3JkaW5hdGVzIGFuZCByZS1yZW5kZXJzIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBGb3VyIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyxcbiAgICAgKiAgIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG51bWJlcnMsIHdoaWNoIGRlZmluZSB0aGUgY29ybmVycyBvZiB0aGUgaW1hZ2UuXG4gICAgICogICBUaGUgY29vcmRpbmF0ZXMgc3RhcnQgYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgaW1hZ2UgYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge0ltYWdlU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgc2V0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IENvb3JkaW5hdGVzKSB7XG4gICAgICAgIHRoaXMuY29vcmRpbmF0ZXMgPSBjb29yZGluYXRlcztcblxuICAgICAgICAvLyBDYWxjdWxhdGUgd2hpY2ggbWVyY2F0b3IgdGlsZSBpcyBzdWl0YWJsZSBmb3IgcmVuZGVyaW5nIHRoZSB2aWRlbyBpblxuICAgICAgICAvLyBhbmQgY3JlYXRlIGEgYnVmZmVyIHdpdGggdGhlIGNvcm5lciBjb29yZGluYXRlcy4gVGhlc2UgY29vcmRpbmF0ZXNcbiAgICAgICAgLy8gbWF5IGJlIG91dHNpZGUgdGhlIHRpbGUsIGJlY2F1c2UgcmFzdGVyIHRpbGVzIGFyZW4ndCBjbGlwcGVkIHdoZW4gcmVuZGVyaW5nLlxuXG4gICAgICAgIC8vIHRyYW5zZm9ybSB0aGUgZ2VvIGNvb3JkaW5hdGVzIGludG8gKHpvb20gMCkgdGlsZSBzcGFjZSBjb29yZGluYXRlc1xuICAgICAgICBjb25zdCBjb3JuZXJDb29yZHMgPSBjb29yZGluYXRlcy5tYXAoTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB0aWxlIHdlJ2xsIHVzZSB0byBob2xkIHRoaXMgaW1hZ2Unc1xuICAgICAgICAvLyByZW5kZXIgZGF0YVxuICAgICAgICB0aGlzLnRpbGVJRCA9IGdldENvb3JkaW5hdGVzQ2VudGVyVGlsZUlEKGNvcm5lckNvb3Jkcyk7XG5cbiAgICAgICAgLy8gQ29uc3RyYWluIG1pbi9tYXggem9vbSB0byBvdXIgdGlsZSdzIHpvb20gbGV2ZWwgaW4gb3JkZXIgdG8gZm9yY2VcbiAgICAgICAgLy8gU291cmNlQ2FjaGUgdG8gcmVxdWVzdCB0aGlzIHRpbGUgKG5vIG1hdHRlciB3aGF0IHRoZSBtYXAncyB6b29tXG4gICAgICAgIC8vIGxldmVsKVxuICAgICAgICB0aGlzLm1pbnpvb20gPSB0aGlzLm1heHpvb20gPSB0aGlzLnRpbGVJRC56O1xuXG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgY29ybmVyIGNvb3JkaW5hdGVzIGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2Ygb3VyXG4gICAgICAgIC8vIHRpbGUuXG4gICAgICAgIGNvbnN0IHRpbGVDb29yZHMgPSBjb3JuZXJDb29yZHMubWFwKChjb29yZCkgPT4gdGhpcy50aWxlSUQuZ2V0VGlsZVBvaW50KGNvb3JkKS5fcm91bmQoKSk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkgPSBuZXcgUmFzdGVyQm91bmRzQXJyYXkoKTtcbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGlsZUNvb3Jkc1swXS54LCB0aWxlQ29vcmRzWzBdLnksIDAsIDApO1xuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayh0aWxlQ29vcmRzWzFdLngsIHRpbGVDb29yZHNbMV0ueSwgRVhURU5ULCAwKTtcbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGlsZUNvb3Jkc1szXS54LCB0aWxlQ29vcmRzWzNdLnksIDAsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKHRpbGVDb29yZHNbMl0ueCwgdGlsZUNvb3Jkc1syXS55LCBFWFRFTlQsIEVYVEVOVCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5ib3VuZHNCdWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOidzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwIHx8ICF0aGlzLmltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5tYXAucGFpbnRlci5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc0J1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSwgcmFzdGVyQm91bmRzQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5ib3VuZHNTZWdtZW50cykge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLmltYWdlLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHcgaW4gdGhpcy50aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMudGlsZXNbd107XG4gICAgICAgICAgICBpZiAodGlsZS5zdGF0ZSAhPT0gJ2xvYWRlZCcpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2xvYWRlZCc7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIC8vIFdlIGhhdmUgYSBzaW5nbGUgdGlsZSAtLSB3aG9vc2UgY29vcmRpbmF0ZXMgYXJlIHRoaXMudGlsZUlEIC0tIHRoYXRcbiAgICAgICAgLy8gY292ZXJzIHRoZSBpbWFnZSB3ZSB3YW50IHRvIHJlbmRlci4gIElmIHRoYXQncyB0aGUgb25lIGJlaW5nXG4gICAgICAgIC8vIHJlcXVlc3RlZCwgc2V0IGl0IHVwIHdpdGggdGhlIGltYWdlOyBvdGhlcndpc2UsIG1hcmsgdGhlIHRpbGUgYXNcbiAgICAgICAgLy8gYGVycm9yZWRgIHRvIGluZGljYXRlIHRoYXQgd2UgaGF2ZSBubyBkYXRhIGZvciBpdC5cbiAgICAgICAgLy8gSWYgdGhlIHdvcmxkIHdyYXBzLCB3ZSBtYXkgaGF2ZSBtdWx0aXBsZSBcIndyYXBwZWRcIiBjb3BpZXMgb2YgdGhlXG4gICAgICAgIC8vIHNpbmdsZSB0aWxlLlxuICAgICAgICBpZiAodGhpcy50aWxlSUQgJiYgdGhpcy50aWxlSUQuZXF1YWxzKHRpbGUudGlsZUlELmNhbm9uaWNhbCkpIHtcbiAgICAgICAgICAgIHRoaXMudGlsZXNbU3RyaW5nKHRpbGUudGlsZUlELndyYXApXSA9IHRpbGU7XG4gICAgICAgICAgICB0aWxlLmJ1Y2tldHMgPSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICAgICAgdXJsOiB0aGlzLm9wdGlvbnMudXJsLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY29vcmRpbmF0ZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGEgbGlzdCBvZiBjb29yZGluYXRlcywgZ2V0IHRoZWlyIGNlbnRlciBhcyBhIGNvb3JkaW5hdGUuXG4gKlxuICogQHJldHVybnMgY2VudGVycG9pbnRcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb29yZGluYXRlc0NlbnRlclRpbGVJRChjb29yZHM6IEFycmF5PE1lcmNhdG9yQ29vcmRpbmF0ZT4pIHtcbiAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgbGV0IG1heFggPSAtSW5maW5pdHk7XG4gICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgY29vcmQueCk7XG4gICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBjb29yZC55KTtcbiAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGNvb3JkLngpO1xuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgY29vcmQueSk7XG4gICAgfVxuXG4gICAgY29uc3QgZHggPSBtYXhYIC0gbWluWDtcbiAgICBjb25zdCBkeSA9IG1heFkgLSBtaW5ZO1xuICAgIGNvbnN0IGRNYXggPSBNYXRoLm1heChkeCwgZHkpO1xuICAgIGNvbnN0IHpvb20gPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKC1NYXRoLmxvZyhkTWF4KSAvIE1hdGguTE4yKSk7XG4gICAgY29uc3QgdGlsZXNBdFpvb20gPSBNYXRoLnBvdygyLCB6b29tKTtcblxuICAgIHJldHVybiBuZXcgQ2Fub25pY2FsVGlsZUlEKFxuICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgIE1hdGguZmxvb3IoKG1pblggKyBtYXhYKSAvIDIgKiB0aWxlc0F0Wm9vbSksXG4gICAgICAgICAgICBNYXRoLmZsb29yKChtaW5ZICsgbWF4WSkgLyAyICogdGlsZXNBdFpvb20pKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldFZpZGVvLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCBJbWFnZVNvdXJjZSBmcm9tICcuL2ltYWdlX3NvdXJjZSc7XG5pbXBvcnQgcmFzdGVyQm91bmRzQXR0cmlidXRlcyBmcm9tICcuLi9kYXRhL3Jhc3Rlcl9ib3VuZHNfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHtFcnJvckV2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9zdHlsZS1zcGVjL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHR5cGUge1ZpZGVvU291cmNlU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbi8qKlxuICogQSBkYXRhIHNvdXJjZSBjb250YWluaW5nIHZpZGVvLlxuICogKFNlZSB0aGUgW1N0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMtdmlkZW8pIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBhZGQgdG8gbWFwXG4gKiBtYXAuYWRkU291cmNlKCdzb21lIGlkJywge1xuICogICAgdHlwZTogJ3ZpZGVvJyxcbiAqICAgIHVybDogW1xuICogICAgICAgICdodHRwczovL3d3dy5tYXBib3guY29tL2Jsb2cvYXNzZXRzL2JhbHRpbW9yZS1zbW9rZS5tcDQnLFxuICogICAgICAgICdodHRwczovL3d3dy5tYXBib3guY29tL2Jsb2cvYXNzZXRzL2JhbHRpbW9yZS1zbW9rZS53ZWJtJ1xuICogICAgXSxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE4XSxcbiAqICAgICAgICBbLTc2LjUyLCAzOS4xN10sXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMTddXG4gKiAgICBdXG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGVcbiAqIHZhciBteVNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKTtcbiAqIG15U291cmNlLnNldENvb3JkaW5hdGVzKFtcbiAqICAgICBbLTc2LjU0MzM1NzM3MjI4Mzk0LCAzOS4xODU3OTkwNzIyOTc0OF0sXG4gKiAgICAgWy03Ni41MjgwMzY1OTQzOTA4NywgMzkuMTgzODM2NDg0NzU4N10sXG4gKiAgICAgWy03Ni41Mjk1Mzg2MzE0MzkyLCAzOS4xNzY4MzM5MjUwNzYwNl0sXG4gKiAgICAgWy03Ni41NDUyMDI3MzIwODYxOCwgMzkuMTc4NzYzNDQxMDY2NDJdXG4gKiBdKTtcbiAqXG4gKiBtYXAucmVtb3ZlU291cmNlKCdzb21lIGlkJyk7ICAvLyByZW1vdmVcbiAqIEBzZWUgW0FkZCBhIHZpZGVvXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3ZpZGVvLW9uLWEtbWFwLylcbiAqL1xuY2xhc3MgVmlkZW9Tb3VyY2UgZXh0ZW5kcyBJbWFnZVNvdXJjZSB7XG4gICAgb3B0aW9uczogVmlkZW9Tb3VyY2VTcGVjaWZpY2F0aW9uO1xuICAgIHVybHM6IEFycmF5PHN0cmluZz47XG4gICAgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQ7XG4gICAgcm91bmRab29tOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQpO1xuICAgICAgICB0aGlzLnJvdW5kWm9vbSA9IHRydWU7XG4gICAgICAgIHRoaXMudHlwZSA9ICd2aWRlbyc7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy51cmxzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdXJsIG9mIG9wdGlvbnMudXJscykge1xuICAgICAgICAgICAgdGhpcy51cmxzLnB1c2godGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuU291cmNlKS51cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0VmlkZW8odGhpcy51cmxzLCAoZXJyLCB2aWRlbykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZpZGVvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWRlbyA9IHZpZGVvO1xuICAgICAgICAgICAgICAgIHRoaXMudmlkZW8ubG9vcCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBTdGFydCByZXBhaW50aW5nIHdoZW4gdmlkZW8gc3RhcnRzIHBsYXlpbmcuIGhhc1RyYW5zaXRpb24oKSB3aWxsIHRoZW4gcmV0dXJuXG4gICAgICAgICAgICAgICAgLy8gdHJ1ZSB0byB0cmlnZ2VyIGFkZGl0aW9uYWwgZnJhbWVzIGFzIGxvbmcgYXMgdGhlIHZpZGVvcyBjb250aW51ZXMgcGxheWluZy5cbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnRyaWdnZXJSZXBhaW50KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWRlby5wbGF5KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZmluaXNoTG9hZGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXVzZXMgdGhlIHZpZGVvLlxuICAgICAqL1xuICAgIHBhdXNlKCkge1xuICAgICAgICBpZiAodGhpcy52aWRlbykge1xuICAgICAgICAgICAgdGhpcy52aWRlby5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGxheXMgdGhlIHZpZGVvLlxuICAgICAqL1xuICAgIHBsYXkoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvKSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgcGxheWJhY2sgdG8gYSB0aW1lc3RhbXAsIGluIHNlY29uZHMuXG4gICAgICovXG4gICAgc2VlayhzZWNvbmRzOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZWthYmxlUmFuZ2UgPSB0aGlzLnZpZGVvLnNlZWthYmxlO1xuICAgICAgICAgICAgaWYgKHNlY29uZHMgPCBzZWVrYWJsZVJhbmdlLnN0YXJ0KDApIHx8IHNlY29uZHMgPiBzZWVrYWJsZVJhbmdlLmVuZCgwKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBQbGF5YmFjayBmb3IgdGhpcyB2aWRlbyBjYW4gYmUgc2V0IG9ubHkgYmV0d2VlbiB0aGUgJHtzZWVrYWJsZVJhbmdlLnN0YXJ0KDApfSBhbmQgJHtzZWVrYWJsZVJhbmdlLmVuZCgwKX0tc2Vjb25kIG1hcmsuYCkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB0aGlzLnZpZGVvLmN1cnJlbnRUaW1lID0gc2Vjb25kcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIEhUTUwgYHZpZGVvYCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxWaWRlb0VsZW1lbnR9IFRoZSBIVE1MIGB2aWRlb2AgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXRWaWRlbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlkZW87XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgaWYgKHRoaXMubWFwKSByZXR1cm47XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW8ucGxheSgpO1xuICAgICAgICAgICAgdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZpZGVvJ3MgY29vcmRpbmF0ZXMgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBtZXRob2Qgc2V0Q29vcmRpbmF0ZXNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgVmlkZW9Tb3VyY2VcbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBGb3VyIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyxcbiAgICAgKiAgIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG51bWJlcnMsIHdoaWNoIGRlZmluZSB0aGUgY29ybmVycyBvZiB0aGUgdmlkZW8uXG4gICAgICogICBUaGUgY29vcmRpbmF0ZXMgc3RhcnQgYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgdmlkZW8gYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge1ZpZGVvU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgLy8gc2V0Q29vcmRpbmF0ZXMgaW5oZXJpdGVkIGZyb20gSW1hZ2VTb3VyY2VcblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGggPT09IDAgfHwgdGhpcy52aWRlby5yZWFkeVN0YXRlIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBub3QgZW5vdWdoIGRhdGEgZm9yIGN1cnJlbnQgcG9zaXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLm1hcC5wYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc1NlZ21lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMudmlkZW8sIGdsLlJHQkEpO1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy52aWRlby5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRoaXMudmlkZW8pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB3IGluIHRoaXMudGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLnRpbGVzW3ddO1xuICAgICAgICAgICAgaWYgKHRpbGUuc3RhdGUgIT09ICdsb2FkZWQnKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdsb2FkZWQnO1xuICAgICAgICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICd2aWRlbycsXG4gICAgICAgICAgICB1cmxzOiB0aGlzLnVybHMsXG4gICAgICAgICAgICBjb29yZGluYXRlczogdGhpcy5jb29yZGluYXRlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZGVvICYmICF0aGlzLnZpZGVvLnBhdXNlZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEltYWdlU291cmNlIGZyb20gJy4vaW1hZ2Vfc291cmNlJztcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgcmFzdGVyQm91bmRzQXR0cmlidXRlcyBmcm9tICcuLi9kYXRhL3Jhc3Rlcl9ib3VuZHNfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHtFcnJvckV2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9zdHlsZS1zcGVjL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5leHBvcnQgdHlwZSBDYW52YXNTb3VyY2VTcGVjaWZpY2F0aW9uID0ge3xcbiAgICBcInR5cGVcIjogXCJjYW52YXNcIixcbiAgICBcImNvb3JkaW5hdGVzXCI6IFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXSxcbiAgICBcImFuaW1hdGVcIj86IGJvb2xlYW4sXG4gICAgXCJjYW52YXNcIjogc3RyaW5nIHwgSFRNTENhbnZhc0VsZW1lbnRcbnx9O1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gYWRkIGEgY2FudmFzIHNvdXJjZSB0eXBlIHRvIHRoZSBtYXAuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2FudmFzU291cmNlT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgU291cmNlIHR5cGUuIE11c3QgYmUgYFwiY2FudmFzXCJgLlxuICogQHByb3BlcnR5IHtzdHJpbmd8SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhcyBDYW52YXMgc291cmNlIGZyb20gd2hpY2ggdG8gcmVhZCBwaXhlbHMuIENhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoZSBjYW52YXMgZWxlbWVudCwgb3IgdGhlIGBIVE1MQ2FudmFzRWxlbWVudGAgaXRzZWxmLlxuICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgRm91ciBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMgZGVub3Rpbmcgd2hlcmUgdG8gcGxhY2UgdGhlIGNvcm5lcnMgb2YgdGhlIGNhbnZhcywgc3BlY2lmaWVkIGluIGBbbG9uZ2l0dWRlLCBsYXRpdHVkZV1gIHBhaXJzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbYW5pbWF0ZT10cnVlXSBXaGV0aGVyIHRoZSBjYW52YXMgc291cmNlIGlzIGFuaW1hdGVkLiBJZiB0aGUgY2FudmFzIGlzIHN0YXRpYyAoaS5lLiBwaXhlbHMgZG8gbm90IG5lZWQgdG8gYmUgcmUtcmVhZCBvbiBldmVyeSBmcmFtZSksIGBhbmltYXRlYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS5cbiAqL1xuXG4vKipcbiAqIEEgZGF0YSBzb3VyY2UgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgYW4gSFRNTCBjYW52YXMuIFNlZSB7QGxpbmsgQ2FudmFzU291cmNlT3B0aW9uc30gZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gb2Ygb3B0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gYWRkIHRvIG1hcFxuICogbWFwLmFkZFNvdXJjZSgnc29tZSBpZCcsIHtcbiAqICAgIHR5cGU6ICdjYW52YXMnLFxuICogICAgY2FudmFzOiAnaWRPZk15SFRNTENhbnZhcycsXG4gKiAgICBhbmltYXRlOiB0cnVlLFxuICogICAgY29vcmRpbmF0ZXM6IFtcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xOF0sXG4gKiAgICAgICAgWy03Ni41MiwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE3XSxcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xN11cbiAqICAgIF1cbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZVxuICogdmFyIG15U291cmNlID0gbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpO1xuICogbXlTb3VyY2Uuc2V0Q29vcmRpbmF0ZXMoW1xuICogICAgIFstNzYuNTQzMzU3MzcyMjgzOTQsIDM5LjE4NTc5OTA3MjI5NzQ4XSxcbiAqICAgICBbLTc2LjUyODAzNjU5NDM5MDg3LCAzOS4xODM4MzY0ODQ3NTg3XSxcbiAqICAgICBbLTc2LjUyOTUzODYzMTQzOTIsIDM5LjE3NjgzMzkyNTA3NjA2XSxcbiAqICAgICBbLTc2LjU0NTIwMjczMjA4NjE4LCAzOS4xNzg3NjM0NDEwNjY0Ml1cbiAqIF0pO1xuICpcbiAqIG1hcC5yZW1vdmVTb3VyY2UoJ3NvbWUgaWQnKTsgIC8vIHJlbW92ZVxuICovXG5jbGFzcyBDYW52YXNTb3VyY2UgZXh0ZW5kcyBJbWFnZVNvdXJjZSB7XG4gICAgb3B0aW9uczogQ2FudmFzU291cmNlU3BlY2lmaWNhdGlvbjtcbiAgICBhbmltYXRlOiBib29sZWFuO1xuICAgIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBwbGF5OiAoKSA9PiB2b2lkO1xuICAgIHBhdXNlOiAoKSA9PiB2b2lkO1xuICAgIF9wbGF5aW5nOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBDYW52YXNTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKGlkLCBvcHRpb25zLCBkaXNwYXRjaGVyLCBldmVudGVkUGFyZW50KTtcblxuICAgICAgICAvLyBXZSBidWlsZCBpbiBzb21lIHZhbGlkYXRpb24gaGVyZSwgc2luY2UgY2FudmFzIHNvdXJjZXMgYXJlbid0IGluY2x1ZGVkIGluIHRoZSBzdHlsZSBzcGVjOlxuICAgICAgICBpZiAoIW9wdGlvbnMuY29vcmRpbmF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7aWR9YCwgbnVsbCwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJjb29yZGluYXRlc1wiJykpKTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zLmNvb3JkaW5hdGVzKSB8fCBvcHRpb25zLmNvb3JkaW5hdGVzLmxlbmd0aCAhPT0gNCB8fFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXMuc29tZShjID0+ICFBcnJheS5pc0FycmF5KGMpIHx8IGMubGVuZ3RoICE9PSAyIHx8IGMuc29tZShsID0+IHR5cGVvZiBsICE9PSAnbnVtYmVyJykpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke2lkfWAsIG51bGwsICdcImNvb3JkaW5hdGVzXCIgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheSBvZiA0IGxvbmdpdHVkZS9sYXRpdHVkZSBhcnJheSBwYWlycycpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5hbmltYXRlICYmIHR5cGVvZiBvcHRpb25zLmFuaW1hdGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnb3B0aW9uYWwgXCJhbmltYXRlXCIgcHJvcGVydHkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmNhbnZhcykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcImNhbnZhc1wiJykpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5jYW52YXMgIT09ICdzdHJpbmcnICYmICEob3B0aW9ucy5jYW52YXMgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke2lkfWAsIG51bGwsICdcImNhbnZhc1wiIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhlIGNhbnZhcyBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmVhZCwgb3IgYW4gSFRNTENhbnZhc0VsZW1lbnQgaW5zdGFuY2UnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5hbmltYXRlID0gb3B0aW9ucy5hbmltYXRlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmFuaW1hdGUgOiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgYW5pbWF0aW9uLiBUaGUgaW1hZ2Ugd2lsbCBiZSBjb3BpZWQgZnJvbSB0aGUgY2FudmFzIHRvIHRoZSBtYXAgb24gZWFjaCBmcmFtZS5cbiAgICAgKiBAbWV0aG9kIHBsYXlcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgQ2FudmFzU291cmNlXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyBhbmltYXRpb24uIFRoZSBtYXAgd2lsbCBkaXNwbGF5IGEgc3RhdGljIGNvcHkgb2YgdGhlIGNhbnZhcyBpbWFnZS5cbiAgICAgKiBAbWV0aG9kIHBhdXNlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIENhbnZhc1NvdXJjZVxuICAgICAqL1xuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmNhbnZhcykge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSAodGhpcy5vcHRpb25zLmNhbnZhcyBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudCkgP1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jYW52YXMgOlxuICAgICAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuY2FudmFzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIGlmICh0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdDYW52YXMgZGltZW5zaW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8uJykpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGxheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5fcGxheWluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1hcC50cmlnZ2VyUmVwYWludCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2ZpbmlzaExvYWRpbmcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBIVE1MIGBjYW52YXNgIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSBIVE1MIGBjYW52YXNgIGVsZW1lbnQuXG4gICAgICovXG4gICAgZ2V0Q2FudmFzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW52YXM7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgICAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGUpIHRoaXMucGxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjYW52YXMncyBjb29yZGluYXRlcyBhbmQgcmUtcmVuZGVycyB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQG1ldGhvZCBzZXRDb29yZGluYXRlc1xuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBDYW52YXNTb3VyY2VcbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBGb3VyIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyxcbiAgICAgKiAgIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG51bWJlcnMsIHdoaWNoIGRlZmluZSB0aGUgY29ybmVycyBvZiB0aGUgY2FudmFzLlxuICAgICAqICAgVGhlIGNvb3JkaW5hdGVzIHN0YXJ0IGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGNhbnZhcyBhbmQgcHJvY2VlZCBpbiBjbG9ja3dpc2Ugb3JkZXIuXG4gICAgICogICBUaGV5IGRvIG5vdCBoYXZlIHRvIHJlcHJlc2VudCBhIHJlY3RhbmdsZS5cbiAgICAgKiBAcmV0dXJucyB7Q2FudmFzU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgLy8gc2V0Q29vcmRpbmF0ZXMgaW5oZXJpdGVkIGZyb20gSW1hZ2VTb3VyY2VcblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGxldCByZXNpemUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY2FudmFzLndpZHRoICE9PSB0aGlzLndpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgICAgICByZXNpemUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNhbnZhcy5oZWlnaHQgIT09IHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgICAgIHJlc2l6ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGggPT09IDApIHJldHVybjsgLy8gbm90IGVub3VnaCBkYXRhIGZvciBjdXJyZW50IHBvc2l0aW9uXG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMubWFwLnBhaW50ZXIuY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGlmICghdGhpcy5ib3VuZHNCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzQnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksIHJhc3RlckJvdW5kc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzU2VnbWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzU2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgMik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMudGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgdGhpcy5jYW52YXMsIGdsLlJHQkEsIHtwcmVtdWx0aXBseTogdHJ1ZX0pO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc2l6ZSB8fCB0aGlzLl9wbGF5aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUudXBkYXRlKHRoaXMuY2FudmFzLCB7cHJlbXVsdGlwbHk6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdyBpbiB0aGlzLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy50aWxlc1t3XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnbG9hZGVkJztcbiAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdjYW52YXMnLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY29vcmRpbmF0ZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGxheWluZztcbiAgICB9XG5cbiAgICBfaGFzSW52YWxpZERpbWVuc2lvbnMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgeCBvZiBbdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodF0pIHtcbiAgICAgICAgICAgIGlmIChpc05hTih4KSB8fCB4IDw9IDApIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbnZhc1NvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbi8qKlxuICogVGhlIGBTb3VyY2VgIGludGVyZmFjZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggc291cmNlIHR5cGUsIGluY2x1ZGluZyBcImNvcmVcIiB0eXBlcyAoYHZlY3RvcmAsIGByYXN0ZXJgLFxuICogYHZpZGVvYCwgZXRjLikgYW5kIGFsbCBjdXN0b20sIHRoaXJkLXBhcnR5IHR5cGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBpZCBmb3IgdGhlIHNvdXJjZS4gTXVzdCBub3QgYmUgdXNlZCBieSBhbnkgZXhpc3Rpbmcgc291cmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgU291cmNlIG9wdGlvbnMsIHNwZWNpZmljIHRvIHRoZSBzb3VyY2UgdHlwZSAoZXhjZXB0IGZvciBgb3B0aW9ucy50eXBlYCwgd2hpY2ggaXMgYWx3YXlzXG4gKiByZXF1aXJlZCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIFRoZSBzb3VyY2UgdHlwZSwgbWF0Y2hpbmcgdGhlIHZhbHVlIG9mIGBuYW1lYCB1c2VkIGluIHtAbGluayBTdHlsZSNhZGRTb3VyY2VUeXBlfS5cbiAqIEBwYXJhbSB7RGlzcGF0Y2hlcn0gZGlzcGF0Y2hlciBBIHtAbGluayBEaXNwYXRjaGVyfSBpbnN0YW5jZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc2VuZCBtZXNzYWdlcyB0byB0aGUgd29ya2Vycy5cbiAqXG4gKiBAZmlyZXMgZGF0YSB3aXRoIGB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ31gIHRvIGluZGljYXRlIHRoYXQgYW55IG5lY2Vzc2FyeSBtZXRhZGF0YVxuICogaGFzIGJlZW4gbG9hZGVkIHNvIHRoYXQgaXQncyBva2F5IHRvIGNhbGwgYGxvYWRUaWxlYDsgYW5kIHdpdGggYHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnY29udGVudCd9YFxuICogdG8gaW5kaWNhdGUgdGhhdCB0aGUgc291cmNlIGRhdGEgaGFzIGNoYW5nZWQsIHNvIHRoYXQgYW55IGN1cnJlbnQgY2FjaGVzIHNob3VsZCBiZSBmbHVzaGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIFRoZSBpZCBmb3IgdGhlIHNvdXJjZS4gIE11c3QgbWF0Y2ggdGhlIGlkIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWluem9vbVxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1heHpvb21cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNUaWxlQ2xpcHBlZCBgZmFsc2VgIGlmIHRpbGVzIGNhbiBiZSBkcmF3biBvdXRzaWRlIHRoZWlyIGJvdW5kYXJpZXMsIGB0cnVlYCBpZiB0aGV5IGNhbm5vdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwYXJzZU92ZXJzY2FsZWQgYHRydWVgIGlmIHRpbGVzIHNob3VsZCBiZSBzZW50IGJhY2sgdG8gdGhlIHdvcmtlciBmb3IgZWFjaCBvdmVyem9vbWVkIHpvb21cbiAqIGxldmVsLCBgZmFsc2VgIGlmIG5vdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcm91bmRab29tIGB0cnVlYCBpZiB6b29tIGxldmVscyBhcmUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIGluIHRoZSBzb3VyY2UgZGF0YSwgYGZhbHNlYFxuICogaWYgdGhleSBhcmUgZmxvb3ItZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2Uge1xuICAgICt0eXBlOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtaW56b29tOiBudW1iZXIsXG4gICAgbWF4em9vbTogbnVtYmVyLFxuICAgIHRpbGVTaXplOiBudW1iZXIsXG4gICAgYXR0cmlidXRpb24/OiBzdHJpbmcsXG5cbiAgICByb3VuZFpvb20/OiBib29sZWFuLFxuICAgIGlzVGlsZUNsaXBwZWQ/OiBib29sZWFuLFxuICAgIG1hcGJveF9sb2dvPzogYm9vbGVhbixcbiAgICB0aWxlSUQ/OiBDYW5vbmljYWxUaWxlSUQ7XG4gICAgcmVwYXJzZU92ZXJzY2FsZWQ/OiBib29sZWFuLFxuICAgIHZlY3RvckxheWVySWRzPzogQXJyYXk8c3RyaW5nPixcblxuICAgIGhhc1RyYW5zaXRpb24oKTogYm9vbGVhbjtcbiAgICBsb2FkZWQoKTogYm9vbGVhbjtcblxuICAgIGZpcmUoZXZlbnQ6IEV2ZW50KTogbWl4ZWQ7XG5cbiAgICArb25BZGQ/OiAobWFwOiBNYXApID0+IHZvaWQ7XG4gICAgK29uUmVtb3ZlPzogKG1hcDogTWFwKSA9PiB2b2lkO1xuXG4gICAgbG9hZFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KTogdm9pZDtcbiAgICAraGFzVGlsZT86ICh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpID0+IGJvb2xlYW47XG4gICAgK2Fib3J0VGlsZT86ICh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pID0+IHZvaWQ7XG4gICAgK3VubG9hZFRpbGU/OiAodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgQSBwbGFpbiAoc3RyaW5naWZpYWJsZSkgSlMgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc291cmNlLlxuICAgICAqIENyZWF0aW5nIGEgc291cmNlIHVzaW5nIHRoZSByZXR1cm5lZCBvYmplY3QgYXMgdGhlIGBvcHRpb25zYCBzaG91bGQgcmVzdWx0IGluIGEgU291cmNlIHRoYXQgaXNcbiAgICAgKiBlcXVpdmFsZW50IHRvIHRoaXMgb25lLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2VyaWFsaXplKCk6IE9iamVjdDtcblxuICAgICtwcmVwYXJlPzogKCkgPT4gdm9pZDtcbn1cblxudHlwZSBTb3VyY2VTdGF0aWNzID0ge1xuICAgIC8qXG4gICAgICogQW4gb3B0aW9uYWwgVVJMIHRvIGEgc2NyaXB0IHdoaWNoLCB3aGVuIHJ1biBieSBhIFdvcmtlciwgcmVnaXN0ZXJzIGEge0BsaW5rIFdvcmtlclNvdXJjZX1cbiAgICAgKiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBTb3VyY2UgdHlwZSBieSBjYWxsaW5nIGBzZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlKHdvcmtlclNvdXJjZTogV29ya2VyU291cmNlKWAuXG4gICAgICovXG4gICAgd29ya2VyU291cmNlVVJMPzogVVJMO1xufTtcblxuZXhwb3J0IHR5cGUgU291cmNlQ2xhc3MgPSBDbGFzczxTb3VyY2U+ICYgU291cmNlU3RhdGljcztcblxuaW1wb3J0IHZlY3RvciBmcm9tICcuLi9zb3VyY2UvdmVjdG9yX3RpbGVfc291cmNlJztcbmltcG9ydCByYXN0ZXIgZnJvbSAnLi4vc291cmNlL3Jhc3Rlcl90aWxlX3NvdXJjZSc7XG5pbXBvcnQgcmFzdGVyRGVtIGZyb20gJy4uL3NvdXJjZS9yYXN0ZXJfZGVtX3RpbGVfc291cmNlJztcbmltcG9ydCBnZW9qc29uIGZyb20gJy4uL3NvdXJjZS9nZW9qc29uX3NvdXJjZSc7XG5pbXBvcnQgdmlkZW8gZnJvbSAnLi4vc291cmNlL3ZpZGVvX3NvdXJjZSc7XG5pbXBvcnQgaW1hZ2UgZnJvbSAnLi4vc291cmNlL2ltYWdlX3NvdXJjZSc7XG5pbXBvcnQgY2FudmFzIGZyb20gJy4uL3NvdXJjZS9jYW52YXNfc291cmNlJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jb25zdCBzb3VyY2VUeXBlcyA9IHtcbiAgICB2ZWN0b3IsXG4gICAgcmFzdGVyLFxuICAgICdyYXN0ZXItZGVtJzogcmFzdGVyRGVtLFxuICAgIGdlb2pzb24sXG4gICAgdmlkZW8sXG4gICAgaW1hZ2UsXG4gICAgY2FudmFzXG59O1xuXG4vKlxuICogQ3JlYXRlcyBhIHRpbGVkIGRhdGEgc291cmNlIGluc3RhbmNlIGdpdmVuIGFuIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBpZFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBBIHNvdXJjZSBkZWZpbml0aW9uIG9iamVjdCBjb21wbGlhbnQgd2l0aFxuICogW2BtYXBib3gtZ2wtc3R5bGUtc3BlY2BdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMpIG9yLCBmb3IgYSB0aGlyZC1wYXJ0eSBzb3VyY2UgdHlwZSxcbiAgKiB3aXRoIHRoYXQgdHlwZSdzIHJlcXVpcmVtZW50cy5cbiAqIEBwYXJhbSB7RGlzcGF0Y2hlcn0gZGlzcGF0Y2hlclxuICogQHJldHVybnMge1NvdXJjZX1cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZSA9IGZ1bmN0aW9uKGlkOiBzdHJpbmcsIHNwZWNpZmljYXRpb246IFNvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgc291cmNlVHlwZXNbc3BlY2lmaWNhdGlvbi50eXBlXShpZCwgKHNwZWNpZmljYXRpb246IGFueSksIGRpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQpO1xuXG4gICAgaWYgKHNvdXJjZS5pZCAhPT0gaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBTb3VyY2UgaWQgdG8gYmUgJHtpZH0gaW5zdGVhZCBvZiAke3NvdXJjZS5pZH1gKTtcbiAgICB9XG5cbiAgICBiaW5kQWxsKFsnbG9hZCcsICdhYm9ydCcsICd1bmxvYWQnLCAnc2VyaWFsaXplJywgJ3ByZXBhcmUnXSwgc291cmNlKTtcbiAgICByZXR1cm4gc291cmNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGUgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHNvdXJjZVR5cGVzW25hbWVdO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFR5cGUgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCB0eXBlOiBDbGFzczxTb3VyY2U+KSB7XG4gICAgc291cmNlVHlwZXNbbmFtZV0gPSB0eXBlO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBY3RvciB7XG4gICAgc2VuZCh0eXBlOiBzdHJpbmcsIGRhdGE6IE9iamVjdCwgY2FsbGJhY2s6IENhbGxiYWNrPGFueT4pOiB2b2lkO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb2xsaXNpb25JbmRleCBmcm9tICcuLi9zeW1ib2wvY29sbGlzaW9uX2luZGV4JztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtSZXRhaW5lZFF1ZXJ5RGF0YX0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbi8qXG4gKiBSZXR1cm5zIGEgbWF0cml4IHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udmVydCBmcm9tIHRpbGUgY29vcmRpbmF0ZXMgdG8gdmlld3BvcnQgcGl4ZWwgY29vcmRpbmF0ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFBpeGVsUG9zTWF0cml4KHRyYW5zZm9ybSwgdGlsZUlEKSB7XG4gICAgY29uc3QgdCA9IG1hdDQuaWRlbnRpdHkoW10pO1xuICAgIG1hdDQudHJhbnNsYXRlKHQsIHQsIFsxLCAxLCAwXSk7XG4gICAgbWF0NC5zY2FsZSh0LCB0LCBbdHJhbnNmb3JtLndpZHRoICogMC41LCB0cmFuc2Zvcm0uaGVpZ2h0ICogMC41LCAxXSk7XG4gICAgcmV0dXJuIG1hdDQubXVsdGlwbHkodCwgdCwgdHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh0aWxlSUQudG9VbndyYXBwZWQoKSkpO1xufVxuXG5mdW5jdGlvbiBxdWVyeUluY2x1ZGVzM0RMYXllcihsYXllcnM/OiBBcnJheTxzdHJpbmc+LCBzdHlsZUxheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfSwgc291cmNlSUQ6IHN0cmluZykge1xuICAgIGlmIChsYXllcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklEIG9mIGxheWVycykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBzdHlsZUxheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgIGlmIChsYXllciAmJiBsYXllci5zb3VyY2UgPT09IHNvdXJjZUlEICYmIGxheWVyLnR5cGUgPT09ICdmaWxsLWV4dHJ1c2lvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHN0eWxlTGF5ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHN0eWxlTGF5ZXJzW2tleV07XG4gICAgICAgICAgICBpZiAobGF5ZXIuc291cmNlID09PSBzb3VyY2VJRCAmJiBsYXllci50eXBlID09PSAnZmlsbC1leHRydXNpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlSZW5kZXJlZEZlYXR1cmVzKHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUxheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IGZpbHRlcjogRmlsdGVyU3BlY2lmaWNhdGlvbiwgbGF5ZXJzOiBBcnJheTxzdHJpbmc+IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcblxuICAgIGNvbnN0IGhhczNETGF5ZXIgPSBxdWVyeUluY2x1ZGVzM0RMYXllcihwYXJhbXMgJiYgcGFyYW1zLmxheWVycywgc3R5bGVMYXllcnMsIHNvdXJjZUNhY2hlLmlkKTtcblxuICAgIGNvbnN0IG1heFBpdGNoU2NhbGVGYWN0b3IgPSB0cmFuc2Zvcm0ubWF4UGl0Y2hTY2FsZUZhY3RvcigpO1xuICAgIGNvbnN0IHRpbGVzSW4gPSBzb3VyY2VDYWNoZS50aWxlc0luKHF1ZXJ5R2VvbWV0cnksIG1heFBpdGNoU2NhbGVGYWN0b3IsIGhhczNETGF5ZXIpO1xuXG4gICAgdGlsZXNJbi5zb3J0KHNvcnRUaWxlc0luKTtcblxuICAgIGNvbnN0IHJlbmRlcmVkRmVhdHVyZUxheWVycyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGlsZUluIG9mIHRpbGVzSW4pIHtcbiAgICAgICAgcmVuZGVyZWRGZWF0dXJlTGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgd3JhcHBlZFRpbGVJRDogdGlsZUluLnRpbGVJRC53cmFwcGVkKCkua2V5LFxuICAgICAgICAgICAgcXVlcnlSZXN1bHRzOiB0aWxlSW4udGlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMsXG4gICAgICAgICAgICAgICAgc291cmNlQ2FjaGUuX3N0YXRlLFxuICAgICAgICAgICAgICAgIHRpbGVJbi5xdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIHRpbGVJbi5jYW1lcmFRdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIHRpbGVJbi5zY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIG1heFBpdGNoU2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgZ2V0UGl4ZWxQb3NNYXRyaXgoc291cmNlQ2FjaGUudHJhbnNmb3JtLCB0aWxlSW4udGlsZUlEKSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gbWVyZ2VSZW5kZXJlZEZlYXR1cmVMYXllcnMocmVuZGVyZWRGZWF0dXJlTGF5ZXJzKTtcblxuICAgIC8vIE1lcmdlIHN0YXRlIGZyb20gU291cmNlQ2FjaGUgaW50byB0aGUgcmVzdWx0c1xuICAgIGZvciAoY29uc3QgbGF5ZXJJRCBpbiByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0W2xheWVySURdLmZvckVhY2goKGZlYXR1cmVXcmFwcGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZVdyYXBwZXIuZmVhdHVyZTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gc291cmNlQ2FjaGUuZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUubGF5ZXJbJ3NvdXJjZS1sYXllciddLCBmZWF0dXJlLmlkKTtcbiAgICAgICAgICAgIGZlYXR1cmUuc291cmNlID0gZmVhdHVyZS5sYXllci5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10pIHtcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnNvdXJjZUxheWVyID0gZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWF0dXJlLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlSZW5kZXJlZFN5bWJvbHMoc3R5bGVMYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVzOiB7W3N0cmluZ106IFNvdXJjZUNhY2hlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IGZpbHRlcjogRmlsdGVyU3BlY2lmaWNhdGlvbiwgbGF5ZXJzOiBBcnJheTxzdHJpbmc+IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uSW5kZXg6IENvbGxpc2lvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVkUXVlcnlEYXRhOiB7W251bWJlcl06IFJldGFpbmVkUXVlcnlEYXRhfSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IHJlbmRlcmVkU3ltYm9scyA9IGNvbGxpc2lvbkluZGV4LnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKHF1ZXJ5R2VvbWV0cnkpO1xuICAgIGNvbnN0IGJ1Y2tldFF1ZXJ5RGF0YSA9IFtdO1xuICAgIGZvciAoY29uc3QgYnVja2V0SW5zdGFuY2VJZCBvZiBPYmplY3Qua2V5cyhyZW5kZXJlZFN5bWJvbHMpLm1hcChOdW1iZXIpKSB7XG4gICAgICAgIGJ1Y2tldFF1ZXJ5RGF0YS5wdXNoKHJldGFpbmVkUXVlcnlEYXRhW2J1Y2tldEluc3RhbmNlSWRdKTtcbiAgICB9XG4gICAgYnVja2V0UXVlcnlEYXRhLnNvcnQoc29ydFRpbGVzSW4pO1xuXG4gICAgZm9yIChjb25zdCBxdWVyeURhdGEgb2YgYnVja2V0UXVlcnlEYXRhKSB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldFN5bWJvbHMgPSBxdWVyeURhdGEuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKFxuICAgICAgICAgICAgICAgIHJlbmRlcmVkU3ltYm9sc1txdWVyeURhdGEuYnVja2V0SW5zdGFuY2VJZF0sXG4gICAgICAgICAgICAgICAgcXVlcnlEYXRhLmJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIHF1ZXJ5RGF0YS5zb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIsXG4gICAgICAgICAgICAgICAgcGFyYW1zLmxheWVycyxcbiAgICAgICAgICAgICAgICBzdHlsZUxheWVycyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBsYXllcklEIGluIGJ1Y2tldFN5bWJvbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdEZlYXR1cmVzID0gcmVzdWx0W2xheWVySURdID0gcmVzdWx0W2xheWVySURdIHx8IFtdO1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJTeW1ib2xzID0gYnVja2V0U3ltYm9sc1tsYXllcklEXTtcbiAgICAgICAgICAgIGxheWVyU3ltYm9scy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTWF0Y2ggdG9wRG93bkZlYXR1cmVDb21wYXJhdG9yIGZyb20gRmVhdHVyZUluZGV4LCBidXQgdXNpbmdcbiAgICAgICAgICAgICAgICAvLyBtb3N0IHJlY2VudCBzb3J0aW5nIG9mIGZlYXR1cmVzIGZyb20gYnVja2V0LnNvcnRGZWF0dXJlc1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVTb3J0T3JkZXIgPSBxdWVyeURhdGEuZmVhdHVyZVNvcnRPcmRlcjtcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZVNvcnRPcmRlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBxdWVyeVJlbmRlcmVkU3ltYm9scyBkb2N1bWVudGF0aW9uIHNheXMgd2UnbGwgcmV0dXJuIGZlYXR1cmVzIGluXG4gICAgICAgICAgICAgICAgICAgIC8vIFwidG9wLXRvLWJvdHRvbVwiIHJlbmRlcmluZyBvcmRlciAoYWthIGxhc3QtdG8tZmlyc3QpLlxuICAgICAgICAgICAgICAgICAgICAvLyBBY3R1YWxseSB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgc3ltYm9sIGluc3RhbmNlcyBwZXIgZmVhdHVyZSwgc29cbiAgICAgICAgICAgICAgICAgICAgLy8gd2Ugc29ydCBlYWNoIGZlYXR1cmUgYmFzZWQgb24gdGhlIGZpcnN0IG1hdGNoaW5nIHN5bWJvbCBpbnN0YW5jZS5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ydGVkQSA9IGZlYXR1cmVTb3J0T3JkZXIuaW5kZXhPZihhLmZlYXR1cmVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRlZEIgPSBmZWF0dXJlU29ydE9yZGVyLmluZGV4T2YoYi5mZWF0dXJlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc29ydGVkQSA+PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHNvcnRlZEIgPj0gMCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3J0ZWRCIC0gc29ydGVkQTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBCdWNrZXQgaGFzbid0IGJlZW4gcmUtc29ydGVkIGJhc2VkIG9uIGFuZ2xlLCBzbyB1c2UgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldmVyc2Ugb2YgdGhlIG9yZGVyIHRoZSBmZWF0dXJlcyBhcHBlYXJlZCBpbiB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuZmVhdHVyZUluZGV4IC0gYS5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbEZlYXR1cmUgb2YgbGF5ZXJTeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0RmVhdHVyZXMucHVzaChzeW1ib2xGZWF0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1lcmdlIHN0YXRlIGZyb20gU291cmNlQ2FjaGUgaW50byB0aGUgcmVzdWx0c1xuICAgIGZvciAoY29uc3QgbGF5ZXJOYW1lIGluIHJlc3VsdCkge1xuICAgICAgICByZXN1bHRbbGF5ZXJOYW1lXS5mb3JFYWNoKChmZWF0dXJlV3JhcHBlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVXcmFwcGVyLmZlYXR1cmU7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHN0eWxlTGF5ZXJzW2xheWVyTmFtZV07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBzb3VyY2VDYWNoZS5nZXRGZWF0dXJlU3RhdGUoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10sIGZlYXR1cmUuaWQpO1xuICAgICAgICAgICAgZmVhdHVyZS5zb3VyY2UgPSBmZWF0dXJlLmxheWVyLnNvdXJjZTtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXSkge1xuICAgICAgICAgICAgICAgIGZlYXR1cmUuc291cmNlTGF5ZXIgPSBmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlYXR1cmUuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgcGFyYW1zOiBhbnkpIHtcbiAgICBjb25zdCB0aWxlcyA9IHNvdXJjZUNhY2hlLmdldFJlbmRlcmFibGVJZHMoKS5tYXAoKGlkKSA9PiB7XG4gICAgICAgIHJldHVybiBzb3VyY2VDYWNoZS5nZXRUaWxlQnlJRChpZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIGNvbnN0IGRhdGFUaWxlcyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHRpbGVzW2ldO1xuICAgICAgICBjb25zdCBkYXRhSUQgPSB0aWxlLnRpbGVJRC5jYW5vbmljYWwua2V5O1xuICAgICAgICBpZiAoIWRhdGFUaWxlc1tkYXRhSURdKSB7XG4gICAgICAgICAgICBkYXRhVGlsZXNbZGF0YUlEXSA9IHRydWU7XG4gICAgICAgICAgICB0aWxlLnF1ZXJ5U291cmNlRmVhdHVyZXMocmVzdWx0LCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gc29ydFRpbGVzSW4oYSwgYikge1xuICAgIGNvbnN0IGlkQSA9IGEudGlsZUlEO1xuICAgIGNvbnN0IGlkQiA9IGIudGlsZUlEO1xuICAgIHJldHVybiAoaWRBLm92ZXJzY2FsZWRaIC0gaWRCLm92ZXJzY2FsZWRaKSB8fCAoaWRBLmNhbm9uaWNhbC55IC0gaWRCLmNhbm9uaWNhbC55KSB8fCAoaWRBLndyYXAgLSBpZEIud3JhcCkgfHwgKGlkQS5jYW5vbmljYWwueCAtIGlkQi5jYW5vbmljYWwueCk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlUmVuZGVyZWRGZWF0dXJlTGF5ZXJzKHRpbGVzKSB7XG4gICAgLy8gTWVyZ2UgcmVzdWx0cyBmcm9tIGFsbCB0aWxlcywgYnV0IGlmIHR3byB0aWxlcyBzaGFyZSB0aGUgc2FtZVxuICAgIC8vIHdyYXBwZWQgSUQsIGRvbid0IGR1cGxpY2F0ZSBmZWF0dXJlcyBiZXR3ZWVuIHRoZSB0d28gdGlsZXNcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCB3cmFwcGVkSURMYXllck1hcCA9IHt9O1xuICAgIGZvciAoY29uc3QgdGlsZSBvZiB0aWxlcykge1xuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdHMgPSB0aWxlLnF1ZXJ5UmVzdWx0cztcbiAgICAgICAgY29uc3Qgd3JhcHBlZElEID0gdGlsZS53cmFwcGVkVGlsZUlEO1xuICAgICAgICBjb25zdCB3cmFwcGVkSURMYXllcnMgPSB3cmFwcGVkSURMYXllck1hcFt3cmFwcGVkSURdID0gd3JhcHBlZElETGF5ZXJNYXBbd3JhcHBlZElEXSB8fCB7fTtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklEIGluIHF1ZXJ5UmVzdWx0cykge1xuICAgICAgICAgICAgY29uc3QgdGlsZUZlYXR1cmVzID0gcXVlcnlSZXN1bHRzW2xheWVySURdO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZElERmVhdHVyZXMgPSB3cmFwcGVkSURMYXllcnNbbGF5ZXJJRF0gPSB3cmFwcGVkSURMYXllcnNbbGF5ZXJJRF0gfHwge307XG4gICAgICAgICAgICBjb25zdCByZXN1bHRGZWF0dXJlcyA9IHJlc3VsdFtsYXllcklEXSA9IHJlc3VsdFtsYXllcklEXSB8fCBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGlsZUZlYXR1cmUgb2YgdGlsZUZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVkSURGZWF0dXJlc1t0aWxlRmVhdHVyZS5mZWF0dXJlSW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZWRJREZlYXR1cmVzW3RpbGVGZWF0dXJlLmZlYXR1cmVJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRGZWF0dXJlcy5wdXNoKHRpbGVGZWF0dXJlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcblxuLyoqXG4gKiBBIFtsZWFzdC1yZWNlbnRseS11c2VkIGNhY2hlXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NhY2hlX2FsZ29yaXRobXMpXG4gKiB3aXRoIGhhc2ggbG9va3VwIG1hZGUgcG9zc2libGUgYnkga2VlcGluZyBhIGxpc3Qgb2Yga2V5cyBpbiBwYXJhbGxlbCB0b1xuICogYW4gYXJyYXkgb2YgZGljdGlvbmFyeSBvZiB2YWx1ZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBUaWxlQ2FjaGUge1xuICAgIG1heDogbnVtYmVyO1xuICAgIGRhdGE6IHtba2V5OiBudW1iZXIgfCBzdHJpbmddOiBBcnJheTx7IHZhbHVlOiBUaWxlLCB0aW1lb3V0OiA/VGltZW91dElEfT59O1xuICAgIG9yZGVyOiBBcnJheTxudW1iZXI+O1xuICAgIG9uUmVtb3ZlOiAoZWxlbWVudDogVGlsZSkgPT4gdm9pZDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IG51bWJlciBvZiBwZXJtaXR0ZWQgdmFsdWVzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25SZW1vdmUgY2FsbGJhY2sgY2FsbGVkIHdpdGggaXRlbXMgd2hlbiB0aGV5IGV4cGlyZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1heDogbnVtYmVyLCBvblJlbW92ZTogKGVsZW1lbnQ6IFRpbGUpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgIHRoaXMub25SZW1vdmUgPSBvblJlbW92ZTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHRoZSBjYWNoZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1RpbGVDYWNoZX0gdGhpcyBjYWNoZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZW1vdmVkRGF0YSBvZiB0aGlzLmRhdGFba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVkRGF0YS50aW1lb3V0KSBjbGVhclRpbWVvdXQocmVtb3ZlZERhdGEudGltZW91dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJlbW92ZShyZW1vdmVkRGF0YS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5vcmRlciA9IFtdO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGtleSwgdmFsdWUgY29tYmluYXRpb24gdG8gdGhlIGNhY2hlLCB0cmltbWluZyBpdHMgc2l6ZSBpZiB0aGlzIHB1c2hlc1xuICAgICAqIGl0IG92ZXIgbWF4IGxlbmd0aC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T3ZlcnNjYWxlZFRpbGVJRH0gdGlsZUlEIGxvb2t1cCBrZXkgZm9yIHRoZSBpdGVtXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIGFueSB2YWx1ZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1RpbGVDYWNoZX0gdGhpcyBjYWNoZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgYWRkKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgZGF0YTogVGlsZSwgZXhwaXJ5VGltZW91dDogbnVtYmVyIHwgdm9pZCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aWxlSUQud3JhcHBlZCgpLmtleTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhV3JhcHBlciA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhLFxuICAgICAgICAgICAgdGltZW91dDogdW5kZWZpbmVkXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV4cGlyeVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0YVdyYXBwZXIudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKHRpbGVJRCwgZGF0YVdyYXBwZXIpO1xuICAgICAgICAgICAgfSwgZXhwaXJ5VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGFba2V5XS5wdXNoKGRhdGFXcmFwcGVyKTtcbiAgICAgICAgdGhpcy5vcmRlci5wdXNoKGtleSk7XG5cbiAgICAgICAgaWYgKHRoaXMub3JkZXIubGVuZ3RoID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWREYXRhID0gdGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7XG4gICAgICAgICAgICBpZiAocmVtb3ZlZERhdGEpIHRoaXMub25SZW1vdmUocmVtb3ZlZERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHZhbHVlIGF0dGFjaGVkIHRvIGBrZXlgIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T3ZlcnNjYWxlZFRpbGVJRH0gdGlsZUlEIHRoZSBrZXkgdG8gYmUgbG9va2VkLXVwXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgdGhlIGNhY2hlIGhhcyB0aGlzIHZhbHVlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBoYXModGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aWxlSUQud3JhcHBlZCgpLmtleSBpbiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBhdHRhY2hlZCB0byBhIHNwZWNpZmljIGtleSBhbmQgcmVtb3ZlIGRhdGEgZnJvbSBjYWNoZS5cbiAgICAgKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgcmV0dXJucyBgbnVsbGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T3ZlcnNjYWxlZFRpbGVJRH0gdGlsZUlEIHRoZSBrZXkgdG8gbG9vayB1cFxuICAgICAqIEByZXR1cm5zIHsqfSB0aGUgZGF0YSwgb3IgbnVsbCBpZiBpdCBpc24ndCBmb3VuZFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0QW5kUmVtb3ZlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6ID9UaWxlIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhcyh0aWxlSUQpKSB7IHJldHVybiBudWxsOyB9XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0aWxlSUQud3JhcHBlZCgpLmtleSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBHZXQgYW5kIHJlbW92ZSB0aGUgdmFsdWUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAgICAgKi9cbiAgICBfZ2V0QW5kUmVtb3ZlQnlLZXkoa2V5OiBudW1iZXIpOiA/VGlsZSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFba2V5XS5zaGlmdCgpO1xuICAgICAgICBpZiAoZGF0YS50aW1lb3V0KSBjbGVhclRpbWVvdXQoZGF0YS50aW1lb3V0KTtcblxuICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGtleSksIDEpO1xuXG4gICAgICAgIHJldHVybiBkYXRhLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBrZXkgd2l0aG91dCByZW1vdmluZyBkYXRhXG4gICAgICogZnJvbSB0aGUgY2FjaGUuIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCByZXR1cm5zIGBudWxsYFxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSB0byBsb29rIHVwXG4gICAgICogQHJldHVybnMgeyp9IHRoZSBkYXRhLCBvciBudWxsIGlmIGl0IGlzbid0IGZvdW5kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogP1RpbGUge1xuICAgICAgICBpZiAoIXRoaXMuaGFzKHRpbGVJRCkpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW3RpbGVJRC53cmFwcGVkKCkua2V5XVswXTtcbiAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEga2V5L3ZhbHVlIGNvbWJpbmF0aW9uIGZyb20gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSBmb3IgdGhlIHBhaXIgdG8gZGVsZXRlXG4gICAgICogQHBhcmFtIHtUaWxlfSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHByb3ZpZGVkLCByZW1vdmUgdGhhdCBleGFjdCB2ZXJzaW9uIG9mIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7VGlsZUNhY2hlfSB0aGlzIGNhY2hlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICByZW1vdmUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCB2YWx1ZTogP3sgdmFsdWU6IFRpbGUsIHRpbWVvdXQ6ID9UaW1lb3V0SUR9KSB7XG4gICAgICAgIGlmICghdGhpcy5oYXModGlsZUlEKSkgeyByZXR1cm4gdGhpczsgfVxuICAgICAgICBjb25zdCBrZXkgPSB0aWxlSUQud3JhcHBlZCgpLmtleTtcblxuICAgICAgICBjb25zdCBkYXRhSW5kZXggPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuZGF0YVtrZXldLmluZGV4T2YodmFsdWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW2tleV1bZGF0YUluZGV4XTtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0uc3BsaWNlKGRhdGFJbmRleCwgMSk7XG4gICAgICAgIGlmIChkYXRhLnRpbWVvdXQpIGNsZWFyVGltZW91dChkYXRhLnRpbWVvdXQpO1xuICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblJlbW92ZShkYXRhLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGtleSksIDEpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlXG4gICAgICogQHJldHVybnMge1RpbGVDYWNoZX0gdGhpcyBjYWNoZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0TWF4U2l6ZShtYXg6IG51bWJlcik6IFRpbGVDYWNoZSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLm9yZGVyLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWREYXRhKSB0aGlzLm9uUmVtb3ZlKHJlbW92ZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlsZUNhY2hlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSB7VHJpYW5nbGVJbmRleEFycmF5LCBMaW5lSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbmNsYXNzIEluZGV4QnVmZmVyIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXI7XG4gICAgZHluYW1pY0RyYXc6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBhcnJheTogVHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXkgfCBMaW5lU3RyaXBJbmRleEFycmF5LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmR5bmFtaWNEcmF3ID0gQm9vbGVhbihkeW5hbWljRHJhdyk7XG5cbiAgICAgICAgLy8gVGhlIGJvdW5kIGluZGV4IGJ1ZmZlciBpcyBwYXJ0IG9mIHZlcnRleCBhcnJheSBvYmplY3Qgc3RhdGUuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gbW9kaWZ5IHdoYXRldmVyIFZBTyBoYXBwZW5zIHRvIGJlIGN1cnJlbnRseSBib3VuZCwgc28gbWFrZSBzdXJlIHRoZSBkZWZhdWx0XG4gICAgICAgIC8vIHZlcnRleCBhcnJheSBwcm92aWRlZCBieSB0aGUgY29udGV4dCBpcyBib3VuZCBpbnN0ZWFkLlxuICAgICAgICB0aGlzLmNvbnRleHQudW5iaW5kVkFPKCk7XG5cbiAgICAgICAgY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBhcnJheS5hcnJheUJ1ZmZlciwgdGhpcy5keW5hbWljRHJhdyA/IGdsLkRZTkFNSUNfRFJBVyA6IGdsLlNUQVRJQ19EUkFXKTtcblxuICAgICAgICBpZiAoIXRoaXMuZHluYW1pY0RyYXcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcnJheS5hcnJheUJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJpbmQoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGEoYXJyYXk6IFN0cnVjdEFycmF5KSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBhc3NlcnQodGhpcy5keW5hbWljRHJhdyk7XG4gICAgICAgIC8vIFRoZSByaWdodCBWQU8gd2lsbCBnZXQgdGhpcyBidWZmZXIgcmUtYm91bmQgbGF0ZXIgaW4gVmVydGV4QXJyYXlPYmplY3QjYmluZFxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzU2MjBcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuYmluZFZBTygpO1xuICAgICAgICB0aGlzLmJpbmQoKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgYXJyYXkuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEluZGV4QnVmZmVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgU3RydWN0QXJyYXksXG4gICAgU3RydWN0QXJyYXlNZW1iZXJcbn0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5pbXBvcnQgdHlwZSBQcm9ncmFtIGZyb20gJy4uL3JlbmRlci9wcm9ncmFtJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ30gQXR0cmlidXRlVHlwZVxuICogQHByaXZhdGVcbiAqIEByZWFkb25seVxuICovXG5jb25zdCBBdHRyaWJ1dGVUeXBlID0ge1xuICAgIEludDg6ICAgJ0JZVEUnLFxuICAgIFVpbnQ4OiAgJ1VOU0lHTkVEX0JZVEUnLFxuICAgIEludDE2OiAgJ1NIT1JUJyxcbiAgICBVaW50MTY6ICdVTlNJR05FRF9TSE9SVCcsXG4gICAgSW50MzI6ICAnSU5UJyxcbiAgICBVaW50MzI6ICdVTlNJR05FRF9JTlQnLFxuICAgIEZsb2F0MzI6ICdGTE9BVCdcbn07XG5cbi8qKlxuICogVGhlIGBWZXJ0ZXhCdWZmZXJgIGNsYXNzIHR1cm5zIGEgYFN0cnVjdEFycmF5YCBpbnRvIGEgV2ViR0wgYnVmZmVyLiBFYWNoIG1lbWJlciBvZiB0aGUgU3RydWN0QXJyYXknc1xuICogU3RydWN0IHR5cGUgaXMgY29udmVydGVkIHRvIGEgV2ViR0wgYXRyaWJ1dGUuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZXJ0ZXhCdWZmZXIge1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xuICAgIGR5bmFtaWNEcmF3OiA/Ym9vbGVhbjtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZHluYW1pY0RyYXcgV2hldGhlciB0aGlzIGJ1ZmZlciB3aWxsIGJlIHJlcGVhdGVkbHkgdXBkYXRlZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBhcnJheTogU3RydWN0QXJyYXksIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPiwgZHluYW1pY0RyYXc/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuICAgICAgICB0aGlzLml0ZW1TaXplID0gYXJyYXkuYnl0ZXNQZXJFbGVtZW50O1xuICAgICAgICB0aGlzLmR5bmFtaWNEcmF3ID0gZHluYW1pY0RyYXc7XG5cbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICBjb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGFycmF5LmFycmF5QnVmZmVyLCB0aGlzLmR5bmFtaWNEcmF3ID8gZ2wuRFlOQU1JQ19EUkFXIDogZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgICAgIGlmICghdGhpcy5keW5hbWljRHJhdykge1xuICAgICAgICAgICAgZGVsZXRlIGFycmF5LmFycmF5QnVmZmVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmluZCgpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKTtcbiAgICB9XG5cbiAgICB1cGRhdGVEYXRhKGFycmF5OiBTdHJ1Y3RBcnJheSkge1xuICAgICAgICBhc3NlcnQoYXJyYXkubGVuZ3RoID09PSB0aGlzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmJpbmQoKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIGFycmF5LmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbmFibGVBdHRyaWJ1dGVzKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHByb2dyYW06IFByb2dyYW08Kj4pIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlciA9IHRoaXMuYXR0cmlidXRlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYkluZGV4OiBudW1iZXIgfCB2b2lkID0gcHJvZ3JhbS5hdHRyaWJ1dGVzW21lbWJlci5uYW1lXTtcbiAgICAgICAgICAgIGlmIChhdHRyaWJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmliSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBhdHRyaWJ1dGUgcG9pbnRlcnMgaW4gYSBXZWJHTCBjb250ZXh0XG4gICAgICogQHBhcmFtIGdsIFRoZSBXZWJHTCBjb250ZXh0XG4gICAgICogQHBhcmFtIHByb2dyYW0gVGhlIGFjdGl2ZSBXZWJHTCBwcm9ncmFtXG4gICAgICogQHBhcmFtIHZlcnRleE9mZnNldCBJbmRleCBvZiB0aGUgc3RhcnRpbmcgdmVydGV4IG9mIHRoZSBzZWdtZW50XG4gICAgICovXG4gICAgc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgcHJvZ3JhbTogUHJvZ3JhbTwqPiwgdmVydGV4T2Zmc2V0OiA/bnVtYmVyKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1iZXIgPSB0aGlzLmF0dHJpYnV0ZXNbal07XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJJbmRleDogbnVtYmVyIHwgdm9pZCA9IHByb2dyYW0uYXR0cmlidXRlc1ttZW1iZXIubmFtZV07XG5cbiAgICAgICAgICAgIGlmIChhdHRyaWJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihcbiAgICAgICAgICAgICAgICAgICAgYXR0cmliSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIG1lbWJlci5jb21wb25lbnRzLFxuICAgICAgICAgICAgICAgICAgICAoZ2w6IGFueSlbQXR0cmlidXRlVHlwZVttZW1iZXIudHlwZV1dLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyLm9mZnNldCArICh0aGlzLml0ZW1TaXplICogKHZlcnRleE9mZnNldCB8fCAwKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSB0aGUgR0wgYnVmZmVyIGJvdW5kIHRvIHRoZSBnaXZlbiBXZWJHTCBjb250ZXh0XG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlcikge1xuICAgICAgICAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVydGV4QnVmZmVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtcbiAgICBCbGVuZEZ1bmNUeXBlLFxuICAgIEJsZW5kRXF1YXRpb25UeXBlLFxuICAgIENvbG9yTWFza1R5cGUsXG4gICAgRGVwdGhSYW5nZVR5cGUsXG4gICAgRGVwdGhNYXNrVHlwZSxcbiAgICBTdGVuY2lsRnVuY1R5cGUsXG4gICAgU3RlbmNpbE9wVHlwZSxcbiAgICBEZXB0aEZ1bmNUeXBlLFxuICAgIFRleHR1cmVVbml0VHlwZSxcbiAgICBWaWV3cG9ydFR5cGUsXG4gICAgQ3VsbEZhY2VNb2RlVHlwZSxcbiAgICBGcm9udEZhY2VUeXBlLFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBWYWx1ZTxUPiB7XG4gICAgY3VycmVudDogVDtcbiAgICBkZWZhdWx0OiBUO1xuICAgIGRpcnR5OiBib29sZWFuO1xuICAgIGdldCgpOiBUO1xuICAgIHNldERlZmF1bHQoKTogdm9pZDtcbiAgICBzZXQodmFsdWU6IFQpOiB2b2lkO1xufVxuXG5jbGFzcyBCYXNlVmFsdWU8VD4gaW1wbGVtZW50cyBWYWx1ZTxUPiB7XG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dDtcbiAgICBjdXJyZW50OiBUO1xuICAgIGRlZmF1bHQ6IFQ7XG4gICAgZGlydHk6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmRlZmF1bHQgPSB0aGlzLmdldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5kZWZhdWx0O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0KCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50O1xuICAgIH1cbiAgICBzZXQodmFsdWU6IFQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGluIGNoaWxkIGNsYXNzZXM7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdCgpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdDsgLy8gb3ZlcnJpZGVuIGluIGNoaWxkIGNsYXNzZXNcbiAgICB9XG4gICAgc2V0RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5zZXQodGhpcy5kZWZhdWx0KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGVhckNvbG9yIGV4dGVuZHMgQmFzZVZhbHVlPENvbG9yPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBDb2xvciB7XG4gICAgICAgIHJldHVybiBDb2xvci50cmFuc3BhcmVudDtcbiAgICB9XG4gICAgc2V0KHY6IENvbG9yKSB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2LnIgPT09IGMuciAmJiB2LmcgPT09IGMuZyAmJiB2LmIgPT09IGMuYiAmJiB2LmEgPT09IGMuYSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmNsZWFyQ29sb3Iodi5yLCB2LmcsIHYuYiwgdi5hKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyRGVwdGggZXh0ZW5kcyBCYXNlVmFsdWU8bnVtYmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgc2V0KHY6IG51bWJlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuY2xlYXJEZXB0aCh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyU3RlbmNpbCBleHRlbmRzIEJhc2VWYWx1ZTxudW1iZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBzZXQodjogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jbGVhclN0ZW5jaWwodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xvck1hc2sgZXh0ZW5kcyBCYXNlVmFsdWU8Q29sb3JNYXNrVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogQ29sb3JNYXNrVHlwZSB7XG4gICAgICAgIHJldHVybiBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV07XG4gICAgfVxuICAgIHNldCh2OiBDb2xvck1hc2tUeXBlKSB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2WzBdID09PSBjWzBdICYmIHZbMV0gPT09IGNbMV0gJiYgdlsyXSA9PT0gY1syXSAmJiB2WzNdID09PSBjWzNdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuY29sb3JNYXNrKHZbMF0sIHZbMV0sIHZbMl0sIHZbM10pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVwdGhNYXNrIGV4dGVuZHMgQmFzZVZhbHVlPERlcHRoTWFza1R5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IERlcHRoTWFza1R5cGUge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2V0KHY6IERlcHRoTWFza1R5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmRlcHRoTWFzayh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0ZW5jaWxNYXNrIGV4dGVuZHMgQmFzZVZhbHVlPG51bWJlcj4ge1xuICAgIGdldERlZmF1bHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDB4RkY7XG4gICAgfVxuICAgIHNldCh2OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnN0ZW5jaWxNYXNrKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RlbmNpbEZ1bmMgZXh0ZW5kcyBCYXNlVmFsdWU8U3RlbmNpbEZ1bmNUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBTdGVuY2lsRnVuY1R5cGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZnVuYzogdGhpcy5nbC5BTFdBWVMsXG4gICAgICAgICAgICByZWY6IDAsXG4gICAgICAgICAgICBtYXNrOiAweEZGXG4gICAgICAgIH07XG4gICAgfVxuICAgIHNldCh2OiBTdGVuY2lsRnVuY1R5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHYuZnVuYyA9PT0gYy5mdW5jICYmIHYucmVmID09PSBjLnJlZiAmJiB2Lm1hc2sgPT09IGMubWFzayAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnN0ZW5jaWxGdW5jKHYuZnVuYywgdi5yZWYsIHYubWFzayk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGVuY2lsT3AgZXh0ZW5kcyBCYXNlVmFsdWU8U3RlbmNpbE9wVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogU3RlbmNpbE9wVHlwZSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgcmV0dXJuIFtnbC5LRUVQLCBnbC5LRUVQLCBnbC5LRUVQXTtcbiAgICB9XG4gICAgc2V0KHY6IFN0ZW5jaWxPcFR5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiB2WzJdID09PSBjWzJdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuc3RlbmNpbE9wKHZbMF0sIHZbMV0sIHZbMl0pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RlbmNpbFRlc3QgZXh0ZW5kcyBCYXNlVmFsdWU8Ym9vbGVhbj4ge1xuICAgIGdldERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0KHY6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVwdGhSYW5nZSBleHRlbmRzIEJhc2VWYWx1ZTxEZXB0aFJhbmdlVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogRGVwdGhSYW5nZVR5cGUge1xuICAgICAgICByZXR1cm4gWzAsIDFdO1xuICAgIH1cbiAgICBzZXQodjogRGVwdGhSYW5nZVR5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmRlcHRoUmFuZ2UodlswXSwgdlsxXSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aFRlc3QgZXh0ZW5kcyBCYXNlVmFsdWU8Ym9vbGVhbj4ge1xuICAgIGdldERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0KHY6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbC5kaXNhYmxlKGdsLkRFUFRIX1RFU1QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aEZ1bmMgZXh0ZW5kcyBCYXNlVmFsdWU8RGVwdGhGdW5jVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogRGVwdGhGdW5jVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLkxFU1M7XG4gICAgfVxuICAgIHNldCh2OiBEZXB0aEZ1bmNUeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5kZXB0aEZ1bmModik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbGVuZCBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxlbmRGdW5jIGV4dGVuZHMgQmFzZVZhbHVlPEJsZW5kRnVuY1R5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IEJsZW5kRnVuY1R5cGUge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIHJldHVybiBbZ2wuT05FLCBnbC5aRVJPXTtcbiAgICB9XG4gICAgc2V0KHY6IEJsZW5kRnVuY1R5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmJsZW5kRnVuYyh2WzBdLCB2WzFdKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsZW5kQ29sb3IgZXh0ZW5kcyBCYXNlVmFsdWU8Q29sb3I+IHtcbiAgICBnZXREZWZhdWx0KCk6IENvbG9yIHtcbiAgICAgICAgcmV0dXJuIENvbG9yLnRyYW5zcGFyZW50O1xuICAgIH1cbiAgICBzZXQodjogQ29sb3IpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHYuciA9PT0gYy5yICYmIHYuZyA9PT0gYy5nICYmIHYuYiA9PT0gYy5iICYmIHYuYSA9PT0gYy5hICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuYmxlbmRDb2xvcih2LnIsIHYuZywgdi5iLCB2LmEpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxlbmRFcXVhdGlvbiBleHRlbmRzIEJhc2VWYWx1ZTxCbGVuZEVxdWF0aW9uVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogQmxlbmRFcXVhdGlvblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nbC5GVU5DX0FERDtcbiAgICB9XG4gICAgc2V0KHY6IEJsZW5kRXF1YXRpb25UeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5ibGVuZEVxdWF0aW9uKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3VsbEZhY2UgZXh0ZW5kcyBCYXNlVmFsdWU8Ym9vbGVhbj4ge1xuICAgIGdldERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0KHY6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuQ1VMTF9GQUNFKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQ1VMTF9GQUNFKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3VsbEZhY2VTaWRlIGV4dGVuZHMgQmFzZVZhbHVlPEN1bGxGYWNlTW9kZVR5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IEN1bGxGYWNlTW9kZVR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nbC5CQUNLO1xuICAgIH1cbiAgICBzZXQodjogQ3VsbEZhY2VNb2RlVHlwZSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuY3VsbEZhY2Uodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGcm9udEZhY2UgZXh0ZW5kcyBCYXNlVmFsdWU8RnJvbnRGYWNlVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogRnJvbnRGYWNlVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLkNDVztcbiAgICB9XG4gICAgc2V0KHY6IEZyb250RmFjZVR5cGUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmZyb250RmFjZSh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW0gZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMUHJvZ3JhbT4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xQcm9ncmFtIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xQcm9ncmFtKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC51c2VQcm9ncmFtKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aXZlVGV4dHVyZVVuaXQgZXh0ZW5kcyBCYXNlVmFsdWU8VGV4dHVyZVVuaXRUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBUZXh0dXJlVW5pdFR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nbC5URVhUVVJFMDtcbiAgICB9XG4gICAgc2V0KHY6IFRleHR1cmVVbml0VHlwZSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuYWN0aXZlVGV4dHVyZSh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZpZXdwb3J0IGV4dGVuZHMgQmFzZVZhbHVlPFZpZXdwb3J0VHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogVmlld3BvcnRUeXBlIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICByZXR1cm4gWzAsIDAsIGdsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF07XG4gICAgfVxuICAgIHNldCh2OiBWaWV3cG9ydFR5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiB2WzJdID09PSBjWzJdICYmIHZbM10gPT09IGNbM10gJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC52aWV3cG9ydCh2WzBdLCB2WzFdLCB2WzJdLCB2WzNdKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRGcmFtZWJ1ZmZlciBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xGcmFtZWJ1ZmZlcj4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xGcmFtZWJ1ZmZlciB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMRnJhbWVidWZmZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kUmVuZGVyYnVmZmVyIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTFJlbmRlcmJ1ZmZlcj4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xSZW5kZXJidWZmZXIge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTFJlbmRlcmJ1ZmZlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZFRleHR1cmUgZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMVGV4dHVyZT4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xUZXh0dXJlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xUZXh0dXJlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRWZXJ0ZXhCdWZmZXIgZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMQnVmZmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTEJ1ZmZlciB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMQnVmZmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kRWxlbWVudEJ1ZmZlciBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xCdWZmZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IFdlYkdMQnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xCdWZmZXIpIHtcbiAgICAgICAgLy8gQWx3YXlzIHJlYmluZFxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZFZlcnRleEFycmF5T0VTIGV4dGVuZHMgQmFzZVZhbHVlPGFueT4ge1xuICAgIHZhbzogYW55O1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBzdXBlcihjb250ZXh0KTtcbiAgICAgICAgdGhpcy52YW8gPSBjb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0O1xuICAgIH1cbiAgICBnZXREZWZhdWx0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy52YW8gfHwgdiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMudmFvLmJpbmRWZXJ0ZXhBcnJheU9FUyh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpeGVsU3RvcmVVbnBhY2sgZXh0ZW5kcyBCYXNlVmFsdWU8bnVtYmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gNDtcbiAgICB9XG4gICAgc2V0KHY6IG51bWJlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX0FMSUdOTUVOVCwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYSBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCAodjogYW55KSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaXhlbFN0b3JlVW5wYWNrRmxpcFkgZXh0ZW5kcyBCYXNlVmFsdWU8Ym9vbGVhbj4ge1xuICAgIGdldERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0KHY6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19GTElQX1lfV0VCR0wsICh2OiBhbnkpKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuY2xhc3MgRnJhbWVidWZmZXJBdHRhY2htZW50PFQ+IGV4dGVuZHMgQmFzZVZhbHVlPD9UPiB7XG4gICAgcGFyZW50OiBXZWJHTEZyYW1lYnVmZmVyO1xuICAgIGNvbnRleHQ6IENvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IFdlYkdMRnJhbWVidWZmZXIpIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCk7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICBnZXREZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xvckF0dGFjaG1lbnQgZXh0ZW5kcyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ8V2ViR0xUZXh0dXJlPiB7XG4gICAgc2V0RGlydHkoKSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMVGV4dHVyZSk6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KHRoaXMucGFyZW50KTtcbiAgICAgICAgLy8gbm90ZTogaXQncyBwb3NzaWJsZSB0byBhdHRhY2ggYSByZW5kZXJidWZmZXIgdG8gdGhlIGNvbG9yXG4gICAgICAgIC8vIGF0dGFjaG1lbnQgcG9pbnQsIGJ1dCB0aHVzIGZhciBNQkdMIG9ubHkgdXNlcyB0ZXh0dXJlcyBmb3IgY29sb3JcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHYsIDApO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVwdGhBdHRhY2htZW50IGV4dGVuZHMgRnJhbWVidWZmZXJBdHRhY2htZW50PFdlYkdMUmVuZGVyYnVmZmVyPiB7XG4gICAgc2V0KHY6ID9XZWJHTFJlbmRlcmJ1ZmZlcik6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KHRoaXMucGFyZW50KTtcbiAgICAgICAgLy8gbm90ZTogaXQncyBwb3NzaWJsZSB0byBhdHRhY2ggYSB0ZXh0dXJlIHRvIHRoZSBkZXB0aCBhdHRhY2htZW50XG4gICAgICAgIC8vIHBvaW50LCBidXQgdGh1cyBmYXIgTUJHTCBvbmx5IHVzZXMgcmVuZGVyYnVmZmVycyBmb3IgZGVwdGhcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfQVRUQUNITUVOVCwgZ2wuUkVOREVSQlVGRkVSLCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQge0NvbG9yQXR0YWNobWVudCwgRGVwdGhBdHRhY2htZW50fSBmcm9tICcuL3ZhbHVlJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuL2NvbnRleHQnO1xuXG5jbGFzcyBGcmFtZWJ1ZmZlciB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIGZyYW1lYnVmZmVyOiBXZWJHTEZyYW1lYnVmZmVyO1xuICAgIGNvbG9yQXR0YWNobWVudDogQ29sb3JBdHRhY2htZW50O1xuICAgIGRlcHRoQXR0YWNobWVudDogRGVwdGhBdHRhY2htZW50O1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICBjb25zdCBmYm8gPSB0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblxuICAgICAgICB0aGlzLmNvbG9yQXR0YWNobWVudCA9IG5ldyBDb2xvckF0dGFjaG1lbnQoY29udGV4dCwgZmJvKTtcbiAgICAgICAgdGhpcy5kZXB0aEF0dGFjaG1lbnQgPSBuZXcgRGVwdGhBdHRhY2htZW50KGNvbnRleHQsIGZibyk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG5cbiAgICAgICAgY29uc3QgdGV4dHVyZSA9IHRoaXMuY29sb3JBdHRhY2htZW50LmdldCgpO1xuICAgICAgICBpZiAodGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICBjb25zdCByZW5kZXJidWZmZXIgPSB0aGlzLmRlcHRoQXR0YWNobWVudC5nZXQoKTtcbiAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlcikgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGcmFtZWJ1ZmZlcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7RGVwdGhGdW5jVHlwZSwgRGVwdGhNYXNrVHlwZSwgRGVwdGhSYW5nZVR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBBTFdBWVMgPSAweDAyMDc7XG5cbmNsYXNzIERlcHRoTW9kZSB7XG4gICAgZnVuYzogRGVwdGhGdW5jVHlwZTtcbiAgICBtYXNrOiBEZXB0aE1hc2tUeXBlO1xuICAgIHJhbmdlOiBEZXB0aFJhbmdlVHlwZTtcblxuICAgIC8vIERlcHRoTWFzayBlbnVtc1xuICAgIHN0YXRpYyBSZWFkT25seTogYm9vbGVhbjtcbiAgICBzdGF0aWMgUmVhZFdyaXRlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZGVwdGhGdW5jOiBEZXB0aEZ1bmNUeXBlLCBkZXB0aE1hc2s6IERlcHRoTWFza1R5cGUsIGRlcHRoUmFuZ2U6IERlcHRoUmFuZ2VUeXBlKSB7XG4gICAgICAgIHRoaXMuZnVuYyA9IGRlcHRoRnVuYztcbiAgICAgICAgdGhpcy5tYXNrID0gZGVwdGhNYXNrO1xuICAgICAgICB0aGlzLnJhbmdlID0gZGVwdGhSYW5nZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZWQ6ICRSZWFkT25seTxEZXB0aE1vZGU+O1xufVxuXG5EZXB0aE1vZGUuUmVhZE9ubHkgPSBmYWxzZTtcbkRlcHRoTW9kZS5SZWFkV3JpdGUgPSB0cnVlO1xuXG5EZXB0aE1vZGUuZGlzYWJsZWQgPSBuZXcgRGVwdGhNb2RlKEFMV0FZUywgRGVwdGhNb2RlLlJlYWRPbmx5LCBbMCwgMV0pO1xuXG5leHBvcnQgZGVmYXVsdCBEZXB0aE1vZGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUge1N0ZW5jaWxPcENvbnN0YW50LCBTdGVuY2lsVGVzdH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IEFMV0FZUyA9IDB4MDIwNztcbmNvbnN0IEtFRVAgPSAweDFFMDA7XG5cbmNsYXNzIFN0ZW5jaWxNb2RlIHtcbiAgICB0ZXN0OiBTdGVuY2lsVGVzdDtcbiAgICByZWY6IG51bWJlcjtcbiAgICBtYXNrOiBudW1iZXI7XG4gICAgZmFpbDogU3RlbmNpbE9wQ29uc3RhbnQ7XG4gICAgZGVwdGhGYWlsOiBTdGVuY2lsT3BDb25zdGFudDtcbiAgICBwYXNzOiBTdGVuY2lsT3BDb25zdGFudDtcblxuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IFN0ZW5jaWxUZXN0LCByZWY6IG51bWJlciwgbWFzazogbnVtYmVyLCBmYWlsOiBTdGVuY2lsT3BDb25zdGFudCxcbiAgICAgICAgZGVwdGhGYWlsOiBTdGVuY2lsT3BDb25zdGFudCwgcGFzczogU3RlbmNpbE9wQ29uc3RhbnQpIHtcbiAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgICAgICAgdGhpcy5yZWYgPSByZWY7XG4gICAgICAgIHRoaXMubWFzayA9IG1hc2s7XG4gICAgICAgIHRoaXMuZmFpbCA9IGZhaWw7XG4gICAgICAgIHRoaXMuZGVwdGhGYWlsID0gZGVwdGhGYWlsO1xuICAgICAgICB0aGlzLnBhc3MgPSBwYXNzO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaXNhYmxlZDogJFJlYWRPbmx5PFN0ZW5jaWxNb2RlPjtcbn1cblxuU3RlbmNpbE1vZGUuZGlzYWJsZWQgPSBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IEFMV0FZUywgbWFzazogMH0sIDAsIDAsIEtFRVAsIEtFRVAsIEtFRVApO1xuXG5leHBvcnQgZGVmYXVsdCBTdGVuY2lsTW9kZTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUge0JsZW5kRnVuY1R5cGUsIENvbG9yTWFza1R5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBaRVJPID0gMHgwMDAwO1xuY29uc3QgT05FID0gMHgwMDAxO1xuY29uc3QgT05FX01JTlVTX1NSQ19BTFBIQSA9IDB4MDMwMztcblxuY2xhc3MgQ29sb3JNb2RlIHtcbiAgICBibGVuZEZ1bmN0aW9uOiBCbGVuZEZ1bmNUeXBlO1xuICAgIGJsZW5kQ29sb3I6IENvbG9yO1xuICAgIG1hc2s6IENvbG9yTWFza1R5cGU7XG5cbiAgICBjb25zdHJ1Y3RvcihibGVuZEZ1bmN0aW9uOiBCbGVuZEZ1bmNUeXBlLCBibGVuZENvbG9yOiBDb2xvciwgbWFzazogQ29sb3JNYXNrVHlwZSkge1xuICAgICAgICB0aGlzLmJsZW5kRnVuY3Rpb24gPSBibGVuZEZ1bmN0aW9uO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3IgPSBibGVuZENvbG9yO1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgIH1cblxuICAgIHN0YXRpYyBSZXBsYWNlOiBCbGVuZEZ1bmNUeXBlO1xuXG4gICAgc3RhdGljIGRpc2FibGVkOiAkUmVhZE9ubHk8Q29sb3JNb2RlPjtcbiAgICBzdGF0aWMgdW5ibGVuZGVkOiAkUmVhZE9ubHk8Q29sb3JNb2RlPjtcbiAgICBzdGF0aWMgYWxwaGFCbGVuZGVkOiAkUmVhZE9ubHk8Q29sb3JNb2RlPjtcbn1cblxuQ29sb3JNb2RlLlJlcGxhY2UgPSBbT05FLCBaRVJPXTtcblxuQ29sb3JNb2RlLmRpc2FibGVkID0gbmV3IENvbG9yTW9kZShDb2xvck1vZGUuUmVwbGFjZSwgQ29sb3IudHJhbnNwYXJlbnQsIFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0pO1xuQ29sb3JNb2RlLnVuYmxlbmRlZCA9IG5ldyBDb2xvck1vZGUoQ29sb3JNb2RlLlJlcGxhY2UsIENvbG9yLnRyYW5zcGFyZW50LCBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0pO1xuQ29sb3JNb2RlLmFscGhhQmxlbmRlZCA9IG5ldyBDb2xvck1vZGUoW09ORSwgT05FX01JTlVTX1NSQ19BTFBIQV0sIENvbG9yLnRyYW5zcGFyZW50LCBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0pO1xuXG5leHBvcnQgZGVmYXVsdCBDb2xvck1vZGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7Q3VsbEZhY2VNb2RlVHlwZSwgRnJvbnRGYWNlVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IEJBQ0sgPSAweDA0MDU7XG5jb25zdCBDQ1cgPSAweDA5MDE7XG5cbmNsYXNzIEN1bGxGYWNlTW9kZSB7XG4gICAgZW5hYmxlOiBib29sZWFuO1xuICAgIG1vZGU6IEN1bGxGYWNlTW9kZVR5cGU7XG4gICAgZnJvbnRGYWNlOiBGcm9udEZhY2VUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoZW5hYmxlOiBib29sZWFuLCBtb2RlOiBDdWxsRmFjZU1vZGVUeXBlLCBmcm9udEZhY2U6IEZyb250RmFjZVR5cGUpIHtcbiAgICAgICAgdGhpcy5lbmFibGUgPSBlbmFibGU7XG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgICAgIHRoaXMuZnJvbnRGYWNlID0gZnJvbnRGYWNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaXNhYmxlZDogJFJlYWRPbmx5PEN1bGxGYWNlTW9kZT47XG4gICAgc3RhdGljIGJhY2tDQ1c6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+O1xufVxuXG5DdWxsRmFjZU1vZGUuZGlzYWJsZWQgPSBuZXcgQ3VsbEZhY2VNb2RlKGZhbHNlLCBCQUNLLCBDQ1cpO1xuQ3VsbEZhY2VNb2RlLmJhY2tDQ1cgPSBuZXcgQ3VsbEZhY2VNb2RlKHRydWUsIEJBQ0ssIENDVyk7XG5cbmV4cG9ydCBkZWZhdWx0IEN1bGxGYWNlTW9kZTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgSW5kZXhCdWZmZXIgZnJvbSAnLi9pbmRleF9idWZmZXInO1xuXG5pbXBvcnQgVmVydGV4QnVmZmVyIGZyb20gJy4vdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgRnJhbWVidWZmZXIgZnJvbSAnLi9mcmFtZWJ1ZmZlcic7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4vZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IENvbG9yTW9kZSBmcm9tICcuL2NvbG9yX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7ZGVlcEVxdWFsfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtDbGVhckNvbG9yLCBDbGVhckRlcHRoLCBDbGVhclN0ZW5jaWwsIENvbG9yTWFzaywgRGVwdGhNYXNrLCBTdGVuY2lsTWFzaywgU3RlbmNpbEZ1bmMsIFN0ZW5jaWxPcCwgU3RlbmNpbFRlc3QsIERlcHRoUmFuZ2UsIERlcHRoVGVzdCwgRGVwdGhGdW5jLCBCbGVuZCwgQmxlbmRGdW5jLCBCbGVuZENvbG9yLCBCbGVuZEVxdWF0aW9uLCBDdWxsRmFjZSwgQ3VsbEZhY2VTaWRlLCBGcm9udEZhY2UsIFByb2dyYW0sIEFjdGl2ZVRleHR1cmVVbml0LCBWaWV3cG9ydCwgQmluZEZyYW1lYnVmZmVyLCBCaW5kUmVuZGVyYnVmZmVyLCBCaW5kVGV4dHVyZSwgQmluZFZlcnRleEJ1ZmZlciwgQmluZEVsZW1lbnRCdWZmZXIsIEJpbmRWZXJ0ZXhBcnJheU9FUywgUGl4ZWxTdG9yZVVucGFjaywgUGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEsIFBpeGVsU3RvcmVVbnBhY2tGbGlwWX0gZnJvbSAnLi92YWx1ZSc7XG5cbmltcG9ydCB0eXBlIHtUcmlhbmdsZUluZGV4QXJyYXksIExpbmVJbmRleEFycmF5LCBMaW5lU3RyaXBJbmRleEFycmF5fSBmcm9tICcuLi9kYXRhL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IHR5cGUge1xuICAgIFN0cnVjdEFycmF5LFxuICAgIFN0cnVjdEFycmF5TWVtYmVyXG59IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbnR5cGUgQ2xlYXJBcmdzID0ge1xuICAgIGNvbG9yPzogQ29sb3IsXG4gICAgZGVwdGg/OiBudW1iZXIsXG4gICAgc3RlbmNpbD86IG51bWJlclxufTtcblxuY2xhc3MgQ29udGV4dCB7XG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dDtcbiAgICBleHRWZXJ0ZXhBcnJheU9iamVjdDogYW55O1xuICAgIGN1cnJlbnROdW1BdHRyaWJ1dGVzOiA/bnVtYmVyO1xuXG4gICAgY2xlYXJDb2xvcjogQ2xlYXJDb2xvcjtcbiAgICBjbGVhckRlcHRoOiBDbGVhckRlcHRoO1xuICAgIGNsZWFyU3RlbmNpbDogQ2xlYXJTdGVuY2lsO1xuICAgIGNvbG9yTWFzazogQ29sb3JNYXNrO1xuICAgIGRlcHRoTWFzazogRGVwdGhNYXNrO1xuICAgIHN0ZW5jaWxNYXNrOiBTdGVuY2lsTWFzaztcbiAgICBzdGVuY2lsRnVuYzogU3RlbmNpbEZ1bmM7XG4gICAgc3RlbmNpbE9wOiBTdGVuY2lsT3A7XG4gICAgc3RlbmNpbFRlc3Q6IFN0ZW5jaWxUZXN0O1xuICAgIGRlcHRoUmFuZ2U6IERlcHRoUmFuZ2U7XG4gICAgZGVwdGhUZXN0OiBEZXB0aFRlc3Q7XG4gICAgZGVwdGhGdW5jOiBEZXB0aEZ1bmM7XG4gICAgYmxlbmQ6IEJsZW5kO1xuICAgIGJsZW5kRnVuYzogQmxlbmRGdW5jO1xuICAgIGJsZW5kQ29sb3I6IEJsZW5kQ29sb3I7XG4gICAgYmxlbmRFcXVhdGlvbjogQmxlbmRFcXVhdGlvbjtcbiAgICBjdWxsRmFjZTogQ3VsbEZhY2U7XG4gICAgY3VsbEZhY2VTaWRlOiBDdWxsRmFjZVNpZGU7XG4gICAgZnJvbnRGYWNlOiBGcm9udEZhY2U7XG4gICAgcHJvZ3JhbTogUHJvZ3JhbTtcbiAgICBhY3RpdmVUZXh0dXJlOiBBY3RpdmVUZXh0dXJlVW5pdDtcbiAgICB2aWV3cG9ydDogVmlld3BvcnQ7XG4gICAgYmluZEZyYW1lYnVmZmVyOiBCaW5kRnJhbWVidWZmZXI7XG4gICAgYmluZFJlbmRlcmJ1ZmZlcjogQmluZFJlbmRlcmJ1ZmZlcjtcbiAgICBiaW5kVGV4dHVyZTogQmluZFRleHR1cmU7XG4gICAgYmluZFZlcnRleEJ1ZmZlcjogQmluZFZlcnRleEJ1ZmZlcjtcbiAgICBiaW5kRWxlbWVudEJ1ZmZlcjogQmluZEVsZW1lbnRCdWZmZXI7XG4gICAgYmluZFZlcnRleEFycmF5T0VTOiBCaW5kVmVydGV4QXJyYXlPRVM7XG4gICAgcGl4ZWxTdG9yZVVucGFjazogUGl4ZWxTdG9yZVVucGFjaztcbiAgICBwaXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYTogUGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGE7XG4gICAgcGl4ZWxTdG9yZVVucGFja0ZsaXBZOiBQaXhlbFN0b3JlVW5wYWNrRmxpcFk7XG5cbiAgICBleHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6IGFueTtcbiAgICBleHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXg6IGFueTtcbiAgICBleHRUZXh0dXJlSGFsZkZsb2F0OiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuZ2wgPSBnbDtcbiAgICAgICAgdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCA9IHRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xuXG4gICAgICAgIHRoaXMuY2xlYXJDb2xvciA9IG5ldyBDbGVhckNvbG9yKHRoaXMpO1xuICAgICAgICB0aGlzLmNsZWFyRGVwdGggPSBuZXcgQ2xlYXJEZXB0aCh0aGlzKTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwgPSBuZXcgQ2xlYXJTdGVuY2lsKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbG9yTWFzayA9IG5ldyBDb2xvck1hc2sodGhpcyk7XG4gICAgICAgIHRoaXMuZGVwdGhNYXNrID0gbmV3IERlcHRoTWFzayh0aGlzKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsTWFzayA9IG5ldyBTdGVuY2lsTWFzayh0aGlzKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsRnVuYyA9IG5ldyBTdGVuY2lsRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsT3AgPSBuZXcgU3RlbmNpbE9wKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0ID0gbmV3IFN0ZW5jaWxUZXN0KHRoaXMpO1xuICAgICAgICB0aGlzLmRlcHRoUmFuZ2UgPSBuZXcgRGVwdGhSYW5nZSh0aGlzKTtcbiAgICAgICAgdGhpcy5kZXB0aFRlc3QgPSBuZXcgRGVwdGhUZXN0KHRoaXMpO1xuICAgICAgICB0aGlzLmRlcHRoRnVuYyA9IG5ldyBEZXB0aEZ1bmModGhpcyk7XG4gICAgICAgIHRoaXMuYmxlbmQgPSBuZXcgQmxlbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYmxlbmRGdW5jID0gbmV3IEJsZW5kRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZENvbG9yID0gbmV3IEJsZW5kQ29sb3IodGhpcyk7XG4gICAgICAgIHRoaXMuYmxlbmRFcXVhdGlvbiA9IG5ldyBCbGVuZEVxdWF0aW9uKHRoaXMpO1xuICAgICAgICB0aGlzLmN1bGxGYWNlID0gbmV3IEN1bGxGYWNlKHRoaXMpO1xuICAgICAgICB0aGlzLmN1bGxGYWNlU2lkZSA9IG5ldyBDdWxsRmFjZVNpZGUodGhpcyk7XG4gICAgICAgIHRoaXMuZnJvbnRGYWNlID0gbmV3IEZyb250RmFjZSh0aGlzKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtID0gbmV3IFByb2dyYW0odGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aXZlVGV4dHVyZSA9IG5ldyBBY3RpdmVUZXh0dXJlVW5pdCh0aGlzKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydCA9IG5ldyBWaWV3cG9ydCh0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kRnJhbWVidWZmZXIgPSBuZXcgQmluZEZyYW1lYnVmZmVyKHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIgPSBuZXcgQmluZFJlbmRlcmJ1ZmZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kVGV4dHVyZSA9IG5ldyBCaW5kVGV4dHVyZSh0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kVmVydGV4QnVmZmVyID0gbmV3IEJpbmRWZXJ0ZXhCdWZmZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZEVsZW1lbnRCdWZmZXIgPSBuZXcgQmluZEVsZW1lbnRCdWZmZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZFZlcnRleEFycmF5T0VTID0gdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCAmJiBuZXcgQmluZFZlcnRleEFycmF5T0VTKHRoaXMpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2sgPSBuZXcgUGl4ZWxTdG9yZVVucGFjayh0aGlzKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IG5ldyBQaXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYSh0aGlzKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrRmxpcFkgPSBuZXcgUGl4ZWxTdG9yZVVucGFja0ZsaXBZKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljID0gKFxuICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKSB8fFxuICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJykgfHxcbiAgICAgICAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykge1xuICAgICAgICAgICAgdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXggPSBnbC5nZXRQYXJhbWV0ZXIodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXh0VGV4dHVyZUhhbGZGbG9hdCA9IGdsLmdldEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xuICAgICAgICBpZiAodGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0KSB7XG4gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLnVuYmluZFZBTygpO1xuXG4gICAgICAgIHRoaXMuY2xlYXJDb2xvci5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2xlYXJEZXB0aC5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2xlYXJTdGVuY2lsLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jb2xvck1hc2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmRlcHRoTWFzay5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc3RlbmNpbE1hc2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxGdW5jLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsT3Auc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aFJhbmdlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aFRlc3Quc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmRlcHRoRnVuYy5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmxlbmQuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kRnVuYy5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmxlbmRDb2xvci5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmxlbmRFcXVhdGlvbi5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY3VsbEZhY2Uuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmN1bGxGYWNlU2lkZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZnJvbnRGYWNlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVUZXh0dXJlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5iaW5kRnJhbWVidWZmZXIuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHNldERpcnR5KCkge1xuICAgICAgICB0aGlzLmNsZWFyQ29sb3IuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsZWFyRGVwdGguZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuY29sb3JNYXNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZXB0aE1hc2suZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGVuY2lsRnVuYy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlbmNpbE9wLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGVuY2lsVGVzdC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhSYW5nZS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhUZXN0LmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZXB0aEZ1bmMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJsZW5kLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3IuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJsZW5kRXF1YXRpb24uZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmN1bGxGYWNlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jdWxsRmFjZVNpZGUuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmZyb250RmFjZS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvZ3JhbS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuYWN0aXZlVGV4dHVyZS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMudmlld3BvcnQuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRGcmFtZWJ1ZmZlci5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuYmluZFRleHR1cmUuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhCdWZmZXIuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRFbGVtZW50QnVmZmVyLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZFZlcnRleEFycmF5T0VTLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2suZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrRmxpcFkuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZUluZGV4QnVmZmVyKGFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXkgfCBMaW5lSW5kZXhBcnJheSB8IExpbmVTdHJpcEluZGV4QXJyYXksIGR5bmFtaWNEcmF3PzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gbmV3IEluZGV4QnVmZmVyKHRoaXMsIGFycmF5LCBkeW5hbWljRHJhdyk7XG4gICAgfVxuXG4gICAgY3JlYXRlVmVydGV4QnVmZmVyKGFycmF5OiBTdHJ1Y3RBcnJheSwgYXR0cmlidXRlczogJFJlYWRPbmx5QXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIodGhpcywgYXJyYXksIGF0dHJpYnV0ZXMsIGR5bmFtaWNEcmF3KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJidWZmZXIoc3RvcmFnZUZvcm1hdDogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG5cbiAgICAgICAgY29uc3QgcmJvID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7XG4gICAgICAgIHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5zZXQocmJvKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIHN0b3JhZ2VGb3JtYXQsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KG51bGwpO1xuXG4gICAgICAgIHJldHVybiByYm87XG4gICAgfVxuXG4gICAgY3JlYXRlRnJhbWVidWZmZXIod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFtZWJ1ZmZlcih0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBjbGVhcih7Y29sb3IsIGRlcHRofTogQ2xlYXJBcmdzKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgbGV0IG1hc2sgPSAwO1xuXG4gICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgbWFzayB8PSBnbC5DT0xPUl9CVUZGRVJfQklUO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNvbG9yLnNldChjb2xvcik7XG4gICAgICAgICAgICB0aGlzLmNvbG9yTWFzay5zZXQoW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVwdGggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBtYXNrIHw9IGdsLkRFUFRIX0JVRkZFUl9CSVQ7XG5cbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aGVyZSBjbGVhckRlcHRoIGRvZXNuJ3Qgc2VlbSB0byB3b3JrXG4gICAgICAgICAgICAvLyB3aXRob3V0IHJlc2V0aW5nIHRoZSBkZXB0aFJhbmdlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM0MzdcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXQoWzAsIDFdKTtcblxuICAgICAgICAgICAgdGhpcy5jbGVhckRlcHRoLnNldChkZXB0aCk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoTWFzay5zZXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWUgbm90ZSBpbiBQYWludGVyI2NsZWFyU3RlbmNpbDogaW1wbGVtZW50IHRoaXMgdGhlIGVhc3kgd2F5IG9uY2UgR1BVIGJ1Zy93b3JrYXJvdW5kIGlzIGZpeGVkIHVwc3RyZWFtXG4gICAgICAgIC8vIGlmICh0eXBlb2Ygc3RlbmNpbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gICAgIG1hc2sgfD0gZ2wuU1RFTkNJTF9CVUZGRVJfQklUO1xuICAgICAgICAvLyAgICAgdGhpcy5jbGVhclN0ZW5jaWwuc2V0KHN0ZW5jaWwpO1xuICAgICAgICAvLyAgICAgdGhpcy5zdGVuY2lsTWFzay5zZXQoMHhGRik7XG4gICAgICAgIC8vIH1cblxuICAgICAgICBnbC5jbGVhcihtYXNrKTtcbiAgICB9XG5cbiAgICBzZXRDdWxsRmFjZShjdWxsRmFjZU1vZGU6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+KSB7XG4gICAgICAgIGlmIChjdWxsRmFjZU1vZGUuZW5hYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZS5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmN1bGxGYWNlU2lkZS5zZXQoY3VsbEZhY2VNb2RlLm1vZGUpO1xuICAgICAgICAgICAgdGhpcy5mcm9udEZhY2Uuc2V0KGN1bGxGYWNlTW9kZS5mcm9udEZhY2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGVwdGhNb2RlKGRlcHRoTW9kZTogJFJlYWRPbmx5PERlcHRoTW9kZT4pIHtcbiAgICAgICAgaWYgKGRlcHRoTW9kZS5mdW5jID09PSB0aGlzLmdsLkFMV0FZUyAmJiAhZGVwdGhNb2RlLm1hc2spIHtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhUZXN0LnNldChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlcHRoVGVzdC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoRnVuYy5zZXQoZGVwdGhNb2RlLmZ1bmMpO1xuICAgICAgICAgICAgdGhpcy5kZXB0aE1hc2suc2V0KGRlcHRoTW9kZS5tYXNrKTtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXQoZGVwdGhNb2RlLnJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFN0ZW5jaWxNb2RlKHN0ZW5jaWxNb2RlOiAkUmVhZE9ubHk8U3RlbmNpbE1vZGU+KSB7XG4gICAgICAgIGlmIChzdGVuY2lsTW9kZS50ZXN0LmZ1bmMgPT09IHRoaXMuZ2wuQUxXQVlTICYmICFzdGVuY2lsTW9kZS5tYXNrKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbE1hc2suc2V0KHN0ZW5jaWxNb2RlLm1hc2spO1xuICAgICAgICAgICAgdGhpcy5zdGVuY2lsT3Auc2V0KFtzdGVuY2lsTW9kZS5mYWlsLCBzdGVuY2lsTW9kZS5kZXB0aEZhaWwsIHN0ZW5jaWxNb2RlLnBhc3NdKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbEZ1bmMuc2V0KHtcbiAgICAgICAgICAgICAgICBmdW5jOiBzdGVuY2lsTW9kZS50ZXN0LmZ1bmMsXG4gICAgICAgICAgICAgICAgcmVmOiBzdGVuY2lsTW9kZS5yZWYsXG4gICAgICAgICAgICAgICAgbWFzazogc3RlbmNpbE1vZGUudGVzdC5tYXNrXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENvbG9yTW9kZShjb2xvck1vZGU6ICRSZWFkT25seTxDb2xvck1vZGU+KSB7XG4gICAgICAgIGlmIChkZWVwRXF1YWwoY29sb3JNb2RlLmJsZW5kRnVuY3Rpb24sIENvbG9yTW9kZS5SZXBsYWNlKSkge1xuICAgICAgICAgICAgdGhpcy5ibGVuZC5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ibGVuZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmJsZW5kRnVuYy5zZXQoY29sb3JNb2RlLmJsZW5kRnVuY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5ibGVuZENvbG9yLnNldChjb2xvck1vZGUuYmxlbmRDb2xvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbG9yTWFzay5zZXQoY29sb3JNb2RlLm1hc2spO1xuICAgIH1cblxuICAgIHVuYmluZFZBTygpIHtcbiAgICAgICAgLy8gVW5iaW5kaW5nIHRoZSBWQU8gcHJldmVudHMgb3RoZXIgdGhpbmdzIChjdXN0b20gbGF5ZXJzLCBuZXcgYnVmZmVyIGNyZWF0aW9uKSBmcm9tXG4gICAgICAgIC8vIHVuaW50ZW50aW9uYWxseSBjaGFuZ2luZyB0aGUgc3RhdGUgb2YgdGhlIGxhc3QgVkFPIHVzZWQuXG4gICAgICAgIGlmICh0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbnRleHQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NyZWF0ZSBhcyBjcmVhdGVTb3VyY2V9IGZyb20gJy4vc291cmNlJztcblxuaW1wb3J0IFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgVGlsZUNhY2hlIGZyb20gJy4vdGlsZV9jYWNoZSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCB7a2V5c0RpZmZlcmVuY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBTb3VyY2VGZWF0dXJlU3RhdGUgZnJvbSAnLi9zb3VyY2Vfc3RhdGUnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIFN0eWxlIGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtUaWxlU3RhdGV9IGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtTb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuLyoqXG4gKiBgU291cmNlQ2FjaGVgIGlzIHJlc3BvbnNpYmxlIGZvclxuICpcbiAqICAtIGNyZWF0aW5nIGFuIGluc3RhbmNlIG9mIGBTb3VyY2VgXG4gKiAgLSBmb3J3YXJkaW5nIGV2ZW50cyBmcm9tIGBTb3VyY2VgXG4gKiAgLSBjYWNoaW5nIHRpbGVzIGxvYWRlZCBmcm9tIGFuIGluc3RhbmNlIG9mIGBTb3VyY2VgXG4gKiAgLSBsb2FkaW5nIHRoZSB0aWxlcyBuZWVkZWQgdG8gcmVuZGVyIGEgZ2l2ZW4gdmlld3BvcnRcbiAqICAtIHVubG9hZGluZyB0aGUgY2FjaGVkIHRpbGVzIG5vdCBuZWVkZWQgdG8gcmVuZGVyIGEgZ2l2ZW4gdmlld3BvcnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTb3VyY2VDYWNoZSBleHRlbmRzIEV2ZW50ZWQge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcjtcbiAgICBtYXA6IE1hcDtcbiAgICBzdHlsZTogU3R5bGU7XG5cbiAgICBfc291cmNlOiBTb3VyY2U7XG4gICAgX3NvdXJjZUxvYWRlZDogYm9vbGVhbjtcbiAgICBfc291cmNlRXJyb3JlZDogYm9vbGVhbjtcbiAgICBfdGlsZXM6IHtbYW55XTogVGlsZX07XG4gICAgX3ByZXZMbmc6IG51bWJlciB8IHZvaWQ7XG4gICAgX2NhY2hlOiBUaWxlQ2FjaGU7XG4gICAgX3RpbWVyczoge1thbnldOiBUaW1lb3V0SUR9O1xuICAgIF9jYWNoZVRpbWVyczoge1thbnldOiBUaW1lb3V0SUR9O1xuICAgIF9tYXhUaWxlQ2FjaGVTaXplOiA/bnVtYmVyO1xuICAgIF9wYXVzZWQ6IGJvb2xlYW47XG4gICAgX3Nob3VsZFJlbG9hZE9uUmVzdW1lOiBib29sZWFuO1xuICAgIF9jb3ZlcmVkVGlsZXM6IHtbYW55XTogYm9vbGVhbn07XG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm07XG4gICAgX2lzSWRSZW5kZXJhYmxlOiAoaWQ6IG51bWJlciwgc3ltYm9sTGF5ZXI/OiBib29sZWFuKSA9PiBib29sZWFuO1xuICAgIHVzZWQ6IGJvb2xlYW47XG4gICAgX3N0YXRlOiBTb3VyY2VGZWF0dXJlU3RhdGU7XG5cbiAgICBzdGF0aWMgbWF4VW5kZXJ6b29taW5nOiBudW1iZXI7XG4gICAgc3RhdGljIG1heE92ZXJ6b29taW5nOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcblxuICAgICAgICB0aGlzLm9uKCdkYXRhJywgKGUpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuX3NvdXJjZUxvYWRlZCBzaWduaWZpZXMgdGhhdCB0aGUgVGlsZUpTT04gaXMgbG9hZGVkIGlmIGFwcGxpY2FibGUuXG4gICAgICAgICAgICAvLyBpZiB0aGUgc291cmNlIHR5cGUgZG9lcyBub3QgY29tZSB3aXRoIGEgVGlsZUpTT04sIHRoZSBmbGFnIHNpZ25pZmllcyB0aGVcbiAgICAgICAgICAgIC8vIHNvdXJjZSBkYXRhIGhhcyBsb2FkZWQgKGkuZSBnZW9qc29uIGhhcyBiZWVuIHRpbGVkIG9uIHRoZSB3b3JrZXIgYW5kIGlzIHJlYWR5KVxuICAgICAgICAgICAgaWYgKGUuZGF0YVR5cGUgPT09ICdzb3VyY2UnICYmIGUuc291cmNlRGF0YVR5cGUgPT09ICdtZXRhZGF0YScpIHRoaXMuX3NvdXJjZUxvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIGZvciBzb3VyY2VzIHdpdGggbXV0YWJsZSBkYXRhLCB0aGlzIGV2ZW50IGZpcmVzIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YVxuICAgICAgICAgICAgLy8gdG8gYSBzb3VyY2UgaXMgY2hhbmdlZC4gKGkuZS4gR2VvSlNPTlNvdXJjZSNzZXREYXRhIGFuZCBJbWFnZVNvdXJjZSNzZXJDb29yZGluYXRlcylcbiAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VMb2FkZWQgJiYgIXRoaXMuX3BhdXNlZCAmJiBlLmRhdGFUeXBlID09PSBcInNvdXJjZVwiICYmIGUuc291cmNlRGF0YVR5cGUgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub24oJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc291cmNlRXJyb3JlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IGNyZWF0ZVNvdXJjZShpZCwgb3B0aW9ucywgZGlzcGF0Y2hlciwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5fdGlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSBuZXcgVGlsZUNhY2hlKDAsIHRoaXMuX3VubG9hZFRpbGUuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuX3RpbWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9jYWNoZVRpbWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9jb3ZlcmVkVGlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgU291cmNlRmVhdHVyZVN0YXRlKCk7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX21heFRpbGVDYWNoZVNpemUgPSBtYXAgPyBtYXAuX21heFRpbGVDYWNoZVNpemUgOiBudWxsO1xuICAgICAgICBpZiAodGhpcy5fc291cmNlICYmIHRoaXMuX3NvdXJjZS5vbkFkZCkge1xuICAgICAgICAgICAgdGhpcy5fc291cmNlLm9uQWRkKG1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlbW92ZShtYXA6IE1hcCkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlICYmIHRoaXMuX3NvdXJjZS5vblJlbW92ZSkge1xuICAgICAgICAgICAgdGhpcy5fc291cmNlLm9uUmVtb3ZlKG1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBubyB0aWxlIGRhdGEgaXMgcGVuZGluZywgdGlsZXMgd2lsbCBub3QgY2hhbmdlIHVubGVzc1xuICAgICAqIGFuIGFkZGl0aW9uYWwgQVBJIGNhbGwgaXMgcmVjZWl2ZWQuXG4gICAgICovXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlRXJyb3JlZCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZUxvYWRlZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2UubG9hZGVkKCkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIGZvciAoY29uc3QgdCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW3RdO1xuICAgICAgICAgICAgaWYgKHRpbGUuc3RhdGUgIT09ICdsb2FkZWQnICYmIHRpbGUuc3RhdGUgIT09ICdlcnJvcmVkJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0U291cmNlKCk6IFNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gICAgfVxuXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmVzdW1lKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzaG91bGRSZWxvYWQgPSB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gZmFsc2U7XG4gICAgICAgIGlmIChzaG91bGRSZWxvYWQpIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybSkgdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIF9sb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0aWxlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgX3VubG9hZFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLnVubG9hZFRpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodGlsZSwgKCkgPT4ge30pO1xuICAgIH1cblxuICAgIF9hYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLmFib3J0VGlsZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKHRpbGUsICgpID0+IHt9KTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCk7XG4gICAgfVxuXG4gICAgcHJlcGFyZShjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICAodGhpcy5fc291cmNlLnByZXBhcmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5wcmVwYXJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZS5jb2FsZXNjZUNoYW5nZXModGhpcy5fdGlsZXMsIHRoaXMubWFwID8gdGhpcy5tYXAucGFpbnRlciA6IG51bGwpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpXTtcbiAgICAgICAgICAgIHRpbGUudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgdGlsZS5wcmVwYXJlKHRoaXMubWFwLnN0eWxlLmltYWdlTWFuYWdlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWxsIHRpbGUgaWRzIG9yZGVyZWQgd2l0aCB6LW9yZGVyLCBhbmQgY2FzdCB0byBudW1iZXJzXG4gICAgICovXG4gICAgZ2V0SWRzKCk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fdGlsZXMpLm1hcChOdW1iZXIpLnNvcnQoY29tcGFyZUtleVpvb20pO1xuICAgIH1cblxuICAgIGdldFJlbmRlcmFibGVJZHMoc3ltYm9sTGF5ZXI/OiBib29sZWFuKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IGlkcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNJZFJlbmRlcmFibGUoK2lkLCBzeW1ib2xMYXllcikpIGlkcy5wdXNoKCtpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5bWJvbExheWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gaWRzLnNvcnQoKGFfLCBiXykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSB0aGlzLl90aWxlc1thX10udGlsZUlEO1xuICAgICAgICAgICAgICAgIGNvbnN0IGIgPSB0aGlzLl90aWxlc1tiX10udGlsZUlEO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZWRBID0gKG5ldyBQb2ludChhLmNhbm9uaWNhbC54LCBhLmNhbm9uaWNhbC55KSkuX3JvdGF0ZSh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm90YXRlZEIgPSAobmV3IFBvaW50KGIuY2Fub25pY2FsLngsIGIuY2Fub25pY2FsLnkpKS5fcm90YXRlKHRoaXMudHJhbnNmb3JtLmFuZ2xlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5vdmVyc2NhbGVkWiAtIGIub3ZlcnNjYWxlZFogfHwgcm90YXRlZEIueSAtIHJvdGF0ZWRBLnkgfHwgcm90YXRlZEIueCAtIHJvdGF0ZWRBLng7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWRzLnNvcnQoY29tcGFyZUtleVpvb20pO1xuICAgIH1cblxuICAgIGhhc1JlbmRlcmFibGVQYXJlbnQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFRpbGUgPSB0aGlzLmZpbmRMb2FkZWRQYXJlbnQodGlsZUlELCAwKTtcbiAgICAgICAgaWYgKHBhcmVudFRpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0lkUmVuZGVyYWJsZShwYXJlbnRUaWxlLnRpbGVJRC5rZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBfaXNJZFJlbmRlcmFibGUoaWQ6IG51bWJlciwgc3ltYm9sTGF5ZXI/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aWxlc1tpZF0gJiYgdGhpcy5fdGlsZXNbaWRdLmhhc0RhdGEoKSAmJlxuICAgICAgICAgICAgIXRoaXMuX2NvdmVyZWRUaWxlc1tpZF0gJiYgKHN5bWJvbExheWVyIHx8ICF0aGlzLl90aWxlc1tpZF0uaG9sZGluZ0ZvckZhZGUoKSk7XG4gICAgfVxuXG4gICAgcmVsb2FkKCkge1xuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZS5yZXNldCgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaSBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RpbGVzW2ldLnN0YXRlICE9PSBcImVycm9yZWRcIikgdGhpcy5fcmVsb2FkVGlsZShpLCAncmVsb2FkaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcmVsb2FkVGlsZShpZDogc3RyaW5nIHwgbnVtYmVyLCBzdGF0ZTogVGlsZVN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG5cbiAgICAgICAgLy8gdGhpcyBwb3RlbnRpYWxseSBkb2VzIG5vdCBhZGRyZXNzIGFsbCB1bmRlcmx5aW5nXG4gICAgICAgIC8vIGlzc3VlcyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNDI1MlxuICAgICAgICAvLyAtIGhhcmQgdG8gdGVsbCB3aXRob3V0IHJlcHJvIHN0ZXBzXG4gICAgICAgIGlmICghdGlsZSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gXCJsb2FkaW5nXCIgdGlsZXMgYW5kIFwicmVsb2FkaW5nXCIgb3IgXCJleHBpcmVkXCJcbiAgICAgICAgLy8gdGlsZXMgaXMgdGhhdCBcInJlbG9hZGluZ1wiL1wiZXhwaXJlZFwiIHRpbGVzIGFyZSBcInJlbmRlcmFibGVcIi5cbiAgICAgICAgLy8gVGhlcmVmb3JlLCBhIFwibG9hZGluZ1wiIHRpbGUgY2Fubm90IGJlY29tZSBhIFwicmVsb2FkaW5nXCIgdGlsZSB3aXRob3V0XG4gICAgICAgIC8vIGZpcnN0IGJlY29taW5nIGEgXCJsb2FkZWRcIiB0aWxlLlxuICAgICAgICBpZiAodGlsZS5zdGF0ZSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICB0aWxlLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2FkVGlsZSh0aWxlLCB0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcywgdGlsZSwgaWQsIHN0YXRlKSk7XG4gICAgfVxuXG4gICAgX3RpbGVMb2FkZWQodGlsZTogVGlsZSwgaWQ6IHN0cmluZyB8IG51bWJlciwgcHJldmlvdXNTdGF0ZTogVGlsZVN0YXRlLCBlcnI6ID9FcnJvcikge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgaWYgKChlcnI6IGFueSkuc3RhdHVzICE9PSA0MDQpIHRoaXMuX3NvdXJjZS5maXJlKG5ldyBFcnJvckV2ZW50KGVyciwge3RpbGV9KSk7XG4gICAgICAgICAgICAvLyBjb250aW51ZSB0byB0cnkgbG9hZGluZyBwYXJlbnQvY2hpbGRyZW4gdGlsZXMgaWYgYSB0aWxlIGRvZXNuJ3QgZXhpc3QgKDQwNClcbiAgICAgICAgICAgIGVsc2UgdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGlsZS50aW1lQWRkZWQgPSBicm93c2VyLm5vdygpO1xuICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gJ2V4cGlyZWQnKSB0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGlkLCB0aWxlKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0U291cmNlKCkudHlwZSA9PT0gJ3Jhc3Rlci1kZW0nICYmIHRpbGUuZGVtKSB0aGlzLl9iYWNrZmlsbERFTSh0aWxlKTtcbiAgICAgICAgdGhpcy5fc3RhdGUuaW5pdGlhbGl6ZVRpbGVTdGF0ZSh0aWxlLCB0aGlzLm1hcCA/IHRoaXMubWFwLnBhaW50ZXIgOiBudWxsKTtcblxuICAgICAgICB0aGlzLl9zb3VyY2UuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCB0aWxlLCBjb29yZDogdGlsZS50aWxlSUR9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBGb3IgcmFzdGVyIHRlcnJhaW4gc291cmNlLCBiYWNrZmlsbCBERU0gdG8gZWxpbWluYXRlIHZpc2libGUgdGlsZSBib3VuZGFyaWVzXG4gICAgKiBAcHJpdmF0ZVxuICAgICovXG4gICAgX2JhY2tmaWxsREVNKHRpbGU6IFRpbGUpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyYWJsZXMgPSB0aGlzLmdldFJlbmRlcmFibGVJZHMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYm9yZGVySWQgPSByZW5kZXJhYmxlc1tpXTtcbiAgICAgICAgICAgIGlmICh0aWxlLm5laWdoYm9yaW5nVGlsZXMgJiYgdGlsZS5uZWlnaGJvcmluZ1RpbGVzW2JvcmRlcklkXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvcmRlclRpbGUgPSB0aGlzLmdldFRpbGVCeUlEKGJvcmRlcklkKTtcbiAgICAgICAgICAgICAgICBmaWxsQm9yZGVyKHRpbGUsIGJvcmRlclRpbGUpO1xuICAgICAgICAgICAgICAgIGZpbGxCb3JkZXIoYm9yZGVyVGlsZSwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaWxsQm9yZGVyKHRpbGUsIGJvcmRlclRpbGUpIHtcbiAgICAgICAgICAgIHRpbGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBkeCA9IGJvcmRlclRpbGUudGlsZUlELmNhbm9uaWNhbC54IC0gdGlsZS50aWxlSUQuY2Fub25pY2FsLng7XG4gICAgICAgICAgICBjb25zdCBkeSA9IGJvcmRlclRpbGUudGlsZUlELmNhbm9uaWNhbC55IC0gdGlsZS50aWxlSUQuY2Fub25pY2FsLnk7XG4gICAgICAgICAgICBjb25zdCBkaW0gPSBNYXRoLnBvdygyLCB0aWxlLnRpbGVJRC5jYW5vbmljYWwueik7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJJZCA9IGJvcmRlclRpbGUudGlsZUlELmtleTtcbiAgICAgICAgICAgIGlmIChkeCA9PT0gMCAmJiBkeSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZHkpID4gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhkeCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBkZWx0YSBjb29yZGluYXRlIGZvciB3b3JsZCB3cmFwYXJvdW5kLlxuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhkeCArIGRpbSkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZHggKz0gZGltO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZHggLSBkaW0pID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGR4IC09IGRpbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWJvcmRlclRpbGUuZGVtIHx8ICF0aWxlLmRlbSkgcmV0dXJuO1xuICAgICAgICAgICAgdGlsZS5kZW0uYmFja2ZpbGxCb3JkZXIoYm9yZGVyVGlsZS5kZW0sIGR4LCBkeSk7XG4gICAgICAgICAgICBpZiAodGlsZS5uZWlnaGJvcmluZ1RpbGVzICYmIHRpbGUubmVpZ2hib3JpbmdUaWxlc1tib3JkZXJJZF0pXG4gICAgICAgICAgICAgICAgdGlsZS5uZWlnaGJvcmluZ1RpbGVzW2JvcmRlcklkXS5iYWNrZmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBzcGVjaWZpYyB0aWxlIGJ5IFRpbGVJRFxuICAgICAqL1xuICAgIGdldFRpbGUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogVGlsZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRpbGVCeUlEKHRpbGVJRC5rZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIHNwZWNpZmljIHRpbGUgYnkgaWRcbiAgICAgKi9cbiAgICBnZXRUaWxlQnlJRChpZDogc3RyaW5nIHwgbnVtYmVyKTogVGlsZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aWxlc1tpZF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSB6b29tIGxldmVsIGFkanVzdGVkIGZvciB0aGUgZGlmZmVyZW5jZSBpbiBtYXAgYW5kIHNvdXJjZSB0aWxlc2l6ZXNcbiAgICAgKi9cbiAgICBnZXRab29tKHRyYW5zZm9ybTogVHJhbnNmb3JtKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS56b29tICsgdHJhbnNmb3JtLnNjYWxlWm9vbSh0cmFuc2Zvcm0udGlsZVNpemUgLyB0aGlzLl9zb3VyY2UudGlsZVNpemUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvciBhIGdpdmVuIHNldCBvZiB0aWxlcywgcmV0YWluIGNoaWxkcmVuIHRoYXQgYXJlIGxvYWRlZCBhbmQgaGF2ZSBhIHpvb21cbiAgICAgKiBiZXR3ZWVuIGB6b29tYCAoZXhjbHVzaXZlKSBhbmQgYG1heENvdmVyaW5nWm9vbWAgKGluY2x1c2l2ZSlcbiAgICAgKi9cbiAgICBfcmV0YWluTG9hZGVkQ2hpbGRyZW4oXG4gICAgICAgIGlkZWFsVGlsZXM6IHtbYW55XTogT3ZlcnNjYWxlZFRpbGVJRH0sXG4gICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgbWF4Q292ZXJpbmdab29tOiBudW1iZXIsXG4gICAgICAgIHJldGFpbjoge1thbnldOiBPdmVyc2NhbGVkVGlsZUlEfVxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBsZXQgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcblxuICAgICAgICAgICAgLy8gb25seSBjb25zaWRlciByZW5kZXJhYmxlIHRpbGVzIHVwIHRvIG1heENvdmVyaW5nWm9vbVxuICAgICAgICAgICAgaWYgKHJldGFpbltpZF0gfHxcbiAgICAgICAgICAgICAgICAhdGlsZS5oYXNEYXRhKCkgfHxcbiAgICAgICAgICAgICAgICB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWiA8PSB6b29tIHx8XG4gICAgICAgICAgICAgICAgdGlsZS50aWxlSUQub3ZlcnNjYWxlZFogPiBtYXhDb3ZlcmluZ1pvb21cbiAgICAgICAgICAgICkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBwYXJlbnRzIGFuZCByZXRhaW4gdGhlIHRvcG1vc3QgbG9hZGVkIG9uZSBpZiBmb3VuZFxuICAgICAgICAgICAgbGV0IHRvcG1vc3RMb2FkZWRJRCA9IHRpbGUudGlsZUlEO1xuICAgICAgICAgICAgd2hpbGUgKHRpbGUgJiYgdGlsZS50aWxlSUQub3ZlcnNjYWxlZFogPiB6b29tICsgMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElEID0gdGlsZS50aWxlSUQuc2NhbGVkVG8odGlsZS50aWxlSUQub3ZlcnNjYWxlZFogLSAxKTtcblxuICAgICAgICAgICAgICAgIHRpbGUgPSB0aGlzLl90aWxlc1twYXJlbnRJRC5rZXldO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRpbGUgJiYgdGlsZS5oYXNEYXRhKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wbW9zdExvYWRlZElEID0gcGFyZW50SUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggYW5jZXN0b3JzIG9mIHRoZSB0b3Btb3N0IGxvYWRlZCBjaGlsZCB0byBzZWUgaWYgdGhlcmUncyBvbmUgdGhhdCBuZWVkZWQgaXRcbiAgICAgICAgICAgIGxldCB0aWxlSUQgPSB0b3Btb3N0TG9hZGVkSUQ7XG4gICAgICAgICAgICB3aGlsZSAodGlsZUlELm92ZXJzY2FsZWRaID4gem9vbSkge1xuICAgICAgICAgICAgICAgIHRpbGVJRCA9IHRpbGVJRC5zY2FsZWRUbyh0aWxlSUQub3ZlcnNjYWxlZFogLSAxKTtcblxuICAgICAgICAgICAgICAgIGlmIChpZGVhbFRpbGVzW3RpbGVJRC5rZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgcGFyZW50IHRoYXQgbmVlZGVkIGEgbG9hZGVkIGNoaWxkOyByZXRhaW4gdGhhdCBjaGlsZFxuICAgICAgICAgICAgICAgICAgICByZXRhaW5bdG9wbW9zdExvYWRlZElELmtleV0gPSB0b3Btb3N0TG9hZGVkSUQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBsb2FkZWQgcGFyZW50IG9mIHRoZSBnaXZlbiB0aWxlICh1cCB0byBtaW5Db3ZlcmluZ1pvb20pXG4gICAgICovXG4gICAgZmluZExvYWRlZFBhcmVudCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIG1pbkNvdmVyaW5nWm9vbTogbnVtYmVyKTogP1RpbGUge1xuICAgICAgICBmb3IgKGxldCB6ID0gdGlsZUlELm92ZXJzY2FsZWRaIC0gMTsgeiA+PSBtaW5Db3ZlcmluZ1pvb207IHotLSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGlsZUlELnNjYWxlZFRvKHopO1xuICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHBhcmVudC5rZXkpO1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGUuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZ2V0KHBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNpemVzIHRoZSB0aWxlIGNhY2hlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdwb3J0J3Mgc2l6ZVxuICAgICAqIG9yIHRoZSBtYXhUaWxlQ2FjaGVTaXplIG9wdGlvbiBwYXNzZWQgZHVyaW5nIG1hcCBjcmVhdGlvblxuICAgICAqXG4gICAgICogTGFyZ2VyIHZpZXdwb3J0cyB1c2UgbW9yZSB0aWxlcyBhbmQgbmVlZCBsYXJnZXIgY2FjaGVzLiBMYXJnZXIgdmlld3BvcnRzXG4gICAgICogYXJlIG1vcmUgbGlrZWx5IHRvIGJlIGZvdW5kIG9uIGRldmljZXMgd2l0aCBtb3JlIG1lbW9yeSBhbmQgb24gcGFnZXMgd2hlcmVcbiAgICAgKiB0aGUgbWFwIGlzIG1vcmUgaW1wb3J0YW50LlxuICAgICAqL1xuICAgIHVwZGF0ZUNhY2hlU2l6ZSh0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICBjb25zdCB3aWR0aEluVGlsZXMgPSBNYXRoLmNlaWwodHJhbnNmb3JtLndpZHRoIC8gdGhpcy5fc291cmNlLnRpbGVTaXplKSArIDE7XG4gICAgICAgIGNvbnN0IGhlaWdodEluVGlsZXMgPSBNYXRoLmNlaWwodHJhbnNmb3JtLmhlaWdodCAvIHRoaXMuX3NvdXJjZS50aWxlU2l6ZSkgKyAxO1xuICAgICAgICBjb25zdCBhcHByb3hUaWxlc0luVmlldyA9IHdpZHRoSW5UaWxlcyAqIGhlaWdodEluVGlsZXM7XG4gICAgICAgIGNvbnN0IGNvbW1vblpvb21SYW5nZSA9IDU7XG5cbiAgICAgICAgY29uc3Qgdmlld0RlcGVuZGVudE1heFNpemUgPSBNYXRoLmZsb29yKGFwcHJveFRpbGVzSW5WaWV3ICogY29tbW9uWm9vbVJhbmdlKTtcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IHR5cGVvZiB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID09PSAnbnVtYmVyJyA/IE1hdGgubWluKHRoaXMuX21heFRpbGVDYWNoZVNpemUsIHZpZXdEZXBlbmRlbnRNYXhTaXplKSA6IHZpZXdEZXBlbmRlbnRNYXhTaXplO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlLnNldE1heFNpemUobWF4U2l6ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlV3JhcEp1bXAobG5nOiBudW1iZXIpIHtcbiAgICAgICAgLy8gT24gdG9wIG9mIHRoZSByZWd1bGFyIHoveC95IHZhbHVlcywgVGlsZUlEcyBoYXZlIGEgYHdyYXBgIHZhbHVlIHRoYXQgc3BlY2lmeVxuICAgICAgICAvLyB3aGljaCBjcHB5IG9mIHRoZSB3b3JsZCB0aGUgdGlsZSBiZWxvbmdzIHRvLiBGb3IgZXhhbXBsZSwgYXQgYGxuZzogMTBgIHlvdVxuICAgICAgICAvLyBtaWdodCByZW5kZXIgei94L3kvMCB3aGlsZSBhdCBgbG5nOiAzNzBgIHlvdSB3b3VsZCByZW5kZXIgei94L3kvMS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlbiBsbmcgdmFsdWVzIGdldCB3cmFwcGVkIChnb2luZyBmcm9tIGBsbmc6IDM3MGAgdG8gYGxvbmc6IDEwYCkgeW91IGV4cGVjdFxuICAgICAgICAvLyB0byBzZWUgdGhlIHNhbWUgdGhpbmcgb24gdGhlIHNjcmVlbiAoMzcwIGRlZ3JlZXMgYW5kIDEwIGRlZ3JlZXMgaXMgdGhlIHNhbWVcbiAgICAgICAgLy8gcGxhY2UgaW4gdGhlIHdvcmxkKSBidXQgYWxsIHRoZSBUaWxlSURzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgd3JhcCB2YWx1ZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIG1ha2UgdGhpcyB0cmFuc2l0aW9uIHNlYW1sZXNzLCB3ZSBjYWxjdWxhdGUgdGhlIHJvdW5kZWQgZGlmZmVyZW5jZSBvZlxuICAgICAgICAvLyBcIndvcmxkc1wiIGJldHdlZW4gdGhlIGxhc3QgZnJhbWUgYW5kIHRoZSBjdXJyZW50IGZyYW1lLiBJZiB0aGUgbWFwIHBhbm5lZCBieVxuICAgICAgICAvLyBhIHdvcmxkLCB0aGVuIHdlIGNhbiBhc3NpZ24gYWxsIHRoZSB0aWxlcyBuZXcgVGlsZUlEcyB3aXRoIHVwZGF0ZWQgd3JhcCB2YWx1ZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBhc3NpZ24gei94L3kvMSBhIG5ldyBpZDogei94L3kvMC4gSXQgaXMgdGhlIHNhbWUgdGlsZSwganVzdCByZW5kZXJlZFxuICAgICAgICAvLyBpbiBhIGRpZmZlcmVudCBwb3NpdGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHJldXNlIHRoZSB0aWxlcyBhdCBtb3JlIGlkZWFsIGxvY2F0aW9ucyBhbmQgcHJldmVudCBmbGlja2VyaW5nLlxuICAgICAgICBjb25zdCBwcmV2TG5nID0gdGhpcy5fcHJldkxuZyA9PT0gdW5kZWZpbmVkID8gbG5nIDogdGhpcy5fcHJldkxuZztcbiAgICAgICAgY29uc3QgbG5nRGlmZmVyZW5jZSA9IGxuZyAtIHByZXZMbmc7XG4gICAgICAgIGNvbnN0IHdvcmxkRGlmZmVyZW5jZSA9IGxuZ0RpZmZlcmVuY2UgLyAzNjA7XG4gICAgICAgIGNvbnN0IHdyYXBEZWx0YSA9IE1hdGgucm91bmQod29ybGREaWZmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5fcHJldkxuZyA9IGxuZztcblxuICAgICAgICBpZiAod3JhcERlbHRhKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlcyA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcbiAgICAgICAgICAgICAgICB0aWxlLnRpbGVJRCA9IHRpbGUudGlsZUlELnVud3JhcFRvKHRpbGUudGlsZUlELndyYXAgKyB3cmFwRGVsdGEpO1xuICAgICAgICAgICAgICAgIHRpbGVzW3RpbGUudGlsZUlELmtleV0gPSB0aWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGlsZXMgPSB0aWxlcztcblxuICAgICAgICAgICAgLy8gUmVzZXQgdGlsZSByZWxvYWQgdGltZXJzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbWVycykge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRdO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihpZCwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRpbGVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHZpZXdwb3J0IGFuZCBhZGRzIG5ldyB0aWxlcyB0aGF0XG4gICAgICogYXJlIGluc2lkZSB0aGUgdmlld3BvcnQuXG4gICAgICovXG4gICAgdXBkYXRlKHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZUxvYWRlZCB8fCB0aGlzLl9wYXVzZWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVDYWNoZVNpemUodHJhbnNmb3JtKTtcbiAgICAgICAgdGhpcy5oYW5kbGVXcmFwSnVtcCh0aGlzLnRyYW5zZm9ybS5jZW50ZXIubG5nKTtcblxuICAgICAgICAvLyBDb3ZlcmVkIGlzIGEgbGlzdCBvZiByZXRhaW5lZCB0aWxlcyB3aG8ncyBhcmVhcyBhcmUgZnVsbHkgY292ZXJlZCBieSBvdGhlcixcbiAgICAgICAgLy8gYmV0dGVyLCByZXRhaW5lZCB0aWxlcy4gVGhleSBhcmUgbm90IGRyYXduIHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX2NvdmVyZWRUaWxlcyA9IHt9O1xuXG4gICAgICAgIGxldCBpZGVhbFRpbGVJRHM7XG4gICAgICAgIGlmICghdGhpcy51c2VkKSB7XG4gICAgICAgICAgICBpZGVhbFRpbGVJRHMgPSBbXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2UudGlsZUlEKSB7XG4gICAgICAgICAgICBpZGVhbFRpbGVJRHMgPSB0cmFuc2Zvcm0uZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzKHRoaXMuX3NvdXJjZS50aWxlSUQpXG4gICAgICAgICAgICAgICAgLm1hcCgodW53cmFwcGVkKSA9PiBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh1bndyYXBwZWQuY2Fub25pY2FsLnosIHVud3JhcHBlZC53cmFwLCB1bndyYXBwZWQuY2Fub25pY2FsLnosIHVud3JhcHBlZC5jYW5vbmljYWwueCwgdW53cmFwcGVkLmNhbm9uaWNhbC55KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZGVhbFRpbGVJRHMgPSB0cmFuc2Zvcm0uY292ZXJpbmdUaWxlcyh7XG4gICAgICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMuX3NvdXJjZS50aWxlU2l6ZSxcbiAgICAgICAgICAgICAgICBtaW56b29tOiB0aGlzLl9zb3VyY2UubWluem9vbSxcbiAgICAgICAgICAgICAgICBtYXh6b29tOiB0aGlzLl9zb3VyY2UubWF4em9vbSxcbiAgICAgICAgICAgICAgICByb3VuZFpvb206IHRoaXMuX3NvdXJjZS5yb3VuZFpvb20sXG4gICAgICAgICAgICAgICAgcmVwYXJzZU92ZXJzY2FsZWQ6IHRoaXMuX3NvdXJjZS5yZXBhcnNlT3ZlcnNjYWxlZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2UuaGFzVGlsZSkge1xuICAgICAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IGlkZWFsVGlsZUlEcy5maWx0ZXIoKGNvb3JkKSA9PiAodGhpcy5fc291cmNlLmhhc1RpbGU6IGFueSkoY29vcmQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSB0aGUgb3Zlcnpvb21pbmcvdW5kZXJ6b29taW5nIGFtb3VudHMuXG4gICAgICAgIGNvbnN0IHpvb20gPSAodGhpcy5fc291cmNlLnJvdW5kWm9vbSA/IE1hdGgucm91bmQgOiBNYXRoLmZsb29yKSh0aGlzLmdldFpvb20odHJhbnNmb3JtKSk7XG4gICAgICAgIGNvbnN0IG1pbkNvdmVyaW5nWm9vbSA9IE1hdGgubWF4KHpvb20gLSBTb3VyY2VDYWNoZS5tYXhPdmVyem9vbWluZywgdGhpcy5fc291cmNlLm1pbnpvb20pO1xuICAgICAgICBjb25zdCBtYXhDb3ZlcmluZ1pvb20gPSBNYXRoLm1heCh6b29tICsgU291cmNlQ2FjaGUubWF4VW5kZXJ6b29taW5nLCAgdGhpcy5fc291cmNlLm1pbnpvb20pO1xuXG4gICAgICAgIC8vIFJldGFpbiBpcyBhIGxpc3Qgb2YgdGlsZXMgdGhhdCB3ZSBzaG91bGRuJ3QgZGVsZXRlLCBldmVuIGlmIHRoZXkgYXJlIG5vdFxuICAgICAgICAvLyB0aGUgbW9zdCBpZGVhbCB0aWxlIGZvciB0aGUgY3VycmVudCB2aWV3cG9ydC4gVGhpcyBtYXkgaW5jbHVkZSB0aWxlcyBsaWtlXG4gICAgICAgIC8vIHBhcmVudCBvciBjaGlsZCB0aWxlcyB0aGF0IGFyZSAqYWxyZWFkeSogbG9hZGVkLlxuICAgICAgICBjb25zdCByZXRhaW4gPSB0aGlzLl91cGRhdGVSZXRhaW5lZFRpbGVzKGlkZWFsVGlsZUlEcywgem9vbSk7XG5cbiAgICAgICAgaWYgKGlzUmFzdGVyVHlwZSh0aGlzLl9zb3VyY2UudHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudHNGb3JGYWRpbmcgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IGZhZGluZ1RpbGVzID0ge307XG4gICAgICAgICAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyhyZXRhaW4pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlSUQgPSByZXRhaW5baWRdO1xuICAgICAgICAgICAgICAgIGFzc2VydCh0aWxlSUQua2V5ID09PSAraWQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbGUgfHwgdGlsZS5mYWRlRW5kVGltZSAmJiB0aWxlLmZhZGVFbmRUaW1lIDw9IGJyb3dzZXIubm93KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRpbGUgaXMgbG9hZGVkIGJ1dCBzdGlsbCBmYWRpbmcgaW4sIGZpbmQgcGFyZW50cyB0byBjcm9zcy1mYWRlIHdpdGggaXRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gdGhpcy5maW5kTG9hZGVkUGFyZW50KHRpbGVJRCwgbWluQ292ZXJpbmdab29tKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRUaWxlKHBhcmVudFRpbGUudGlsZUlEKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c0ZvckZhZGluZ1twYXJlbnRUaWxlLnRpbGVJRC5rZXldID0gcGFyZW50VGlsZS50aWxlSUQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmFkaW5nVGlsZXNbaWRdID0gdGlsZUlEO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmb3IgdGlsZXMgdGhhdCBhcmUgc3RpbGwgZmFkaW5nIGluLCBhbHNvIGZpbmQgY2hpbGRyZW4gdG8gY3Jvc3MtZmFkZSB3aXRoXG4gICAgICAgICAgICB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihmYWRpbmdUaWxlcywgem9vbSwgbWF4Q292ZXJpbmdab29tLCByZXRhaW4pO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHBhcmVudHNGb3JGYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJldGFpbltpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSB0aWxlIGlzIG9ubHkgbmVlZGVkIGZvciBmYWRpbmcsIG1hcmsgaXQgYXMgY292ZXJlZCBzbyB0aGF0IGl0IGlzbid0IHJlbmRlcmVkIG9uIGl0J3Mgb3duLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkVGlsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2lkXSA9IHBhcmVudHNGb3JGYWRpbmdbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmV0YWluZWRJZCBpbiByZXRhaW4pIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSByZXRhaW5lZCB0aWxlcyBhbHdheXMgY2xlYXIgYW55IGV4aXN0aW5nIGZhZGUgaG9sZHNcbiAgICAgICAgICAgIC8vIHNvIHRoYXQgaWYgdGhleSdyZSByZW1vdmVkIGFnYWluIHRoZWlyIGZhZGUgdGltZXIgc3RhcnRzIGZyZXNoLlxuICAgICAgICAgICAgdGhpcy5fdGlsZXNbcmV0YWluZWRJZF0uY2xlYXJGYWRlSG9sZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0aWxlcyB3ZSBkb24ndCBuZWVkIGFueW1vcmUuXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IGtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLCByZXRhaW4pO1xuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiByZW1vdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSURdO1xuICAgICAgICAgICAgaWYgKHRpbGUuaGFzU3ltYm9sQnVja2V0cyAmJiAhdGlsZS5ob2xkaW5nRm9yRmFkZSgpKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zZXRIb2xkRHVyYXRpb24odGhpcy5tYXAuX2ZhZGVEdXJhdGlvbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aWxlLmhhc1N5bWJvbEJ1Y2tldHMgfHwgdGlsZS5zeW1ib2xGYWRlRmluaXNoZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUodGlsZUlEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90aWxlc1tpZF0uaG9sZGluZ0ZvckZhZGUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVJldGFpbmVkVGlsZXMoaWRlYWxUaWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgem9vbTogbnVtYmVyKTogeyBbc3RyaW5nXTogT3ZlcnNjYWxlZFRpbGVJRH0ge1xuICAgICAgICBjb25zdCByZXRhaW4gPSB7fTtcbiAgICAgICAgY29uc3QgY2hlY2tlZDoge1tudW1iZXJdOiBib29sZWFuIH0gPSB7fTtcbiAgICAgICAgY29uc3QgbWluQ292ZXJpbmdab29tID0gTWF0aC5tYXgoem9vbSAtIFNvdXJjZUNhY2hlLm1heE92ZXJ6b29taW5nLCB0aGlzLl9zb3VyY2UubWluem9vbSk7XG4gICAgICAgIGNvbnN0IG1heENvdmVyaW5nWm9vbSA9IE1hdGgubWF4KHpvb20gKyBTb3VyY2VDYWNoZS5tYXhVbmRlcnpvb21pbmcsICB0aGlzLl9zb3VyY2UubWluem9vbSk7XG5cbiAgICAgICAgY29uc3QgbWlzc2luZ1RpbGVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdGlsZUlEIG9mIGlkZWFsVGlsZUlEcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX2FkZFRpbGUodGlsZUlEKTtcblxuICAgICAgICAgICAgLy8gcmV0YWluIHRoZSB0aWxlIGV2ZW4gaWYgaXQncyBub3QgbG9hZGVkIGJlY2F1c2UgaXQncyBhbiBpZGVhbCB0aWxlLlxuICAgICAgICAgICAgcmV0YWluW3RpbGVJRC5rZXldID0gdGlsZUlEO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5oYXNEYXRhKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoem9vbSA8IHRoaXMuX3NvdXJjZS5tYXh6b29tKSB7XG4gICAgICAgICAgICAgICAgLy8gc2F2ZSBtaXNzaW5nIHRpbGVzIHRoYXQgcG90ZW50aWFsbHkgaGF2ZSBsb2FkZWQgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBtaXNzaW5nVGlsZXNbdGlsZUlELmtleV0gPSB0aWxlSUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXRhaW4gYW55IGxvYWRlZCBjaGlsZHJlbiBvZiBpZGVhbCB0aWxlcyB1cCB0byBtYXhDb3ZlcmluZ1pvb21cbiAgICAgICAgdGhpcy5fcmV0YWluTG9hZGVkQ2hpbGRyZW4obWlzc2luZ1RpbGVzLCB6b29tLCBtYXhDb3ZlcmluZ1pvb20sIHJldGFpbik7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlSUQgb2YgaWRlYWxUaWxlSURzKSB7XG4gICAgICAgICAgICBsZXQgdGlsZSA9IHRoaXMuX3RpbGVzW3RpbGVJRC5rZXldO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5oYXNEYXRhKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBUaGUgdGlsZSB3ZSByZXF1aXJlIGlzIG5vdCB5ZXQgbG9hZGVkIG9yIGRvZXMgbm90IGV4aXN0O1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGNoaWxkcmVuIHRoYXQgZnVsbHkgY292ZXIgaXQuXG5cbiAgICAgICAgICAgIGlmICh6b29tICsgMSA+IHRoaXMuX3NvdXJjZS5tYXh6b29tKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UncmUgbG9va2luZyBmb3IgYW4gb3Zlcnpvb21lZCBjaGlsZCB0aWxlLlxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ29vcmQgPSB0aWxlSUQuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVGlsZSA9IHRoaXMuZ2V0VGlsZShjaGlsZENvb3JkKTtcbiAgICAgICAgICAgICAgICBpZiAoISFjaGlsZFRpbGUgJiYgY2hpbGRUaWxlLmhhc0RhdGEoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXRhaW5bY2hpbGRDb29yZC5rZXldID0gY2hpbGRDb29yZDtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHRpbGUgaXMgY292ZXJlZCBieSBvdmVyem9vbWVkIGNoaWxkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBhbGwgNCBpbW1lZGlhdGUgY2hpbGRyZW4gYXJlIGxvYWRlZCAoaS5lLiB0aGUgbWlzc2luZyBpZGVhbCB0aWxlIGlzIGNvdmVyZWQpXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aWxlSUQuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJldGFpbltjaGlsZHJlblswXS5rZXldICYmXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZHJlblsxXS5rZXldICYmXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZHJlblsyXS5rZXldICYmXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZHJlblszXS5rZXldKSBjb250aW51ZTsgLy8gdGlsZSBpcyBjb3ZlcmVkIGJ5IGNoaWxkcmVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFdlIGNvdWxkbid0IGZpbmQgY2hpbGQgdGlsZXMgdGhhdCBlbnRpcmVseSBjb3ZlciB0aGUgaWRlYWwgdGlsZTsgbG9vayBmb3IgcGFyZW50cyBub3cuXG5cbiAgICAgICAgICAgIC8vIEFzIHdlIGFzY2VuZCB1cCB0aGUgdGlsZSBweXJhbWlkIG9mIHRoZSBpZGVhbCB0aWxlLCB3ZSBjaGVjayB3aGV0aGVyIHRoZSBwYXJlbnRcbiAgICAgICAgICAgIC8vIHRpbGUgaGFzIGJlZW4gcHJldmlvdXNseSByZXF1ZXN0ZWQgKGFuZCBlcnJvcmVkIGJlY2F1c2Ugd2Ugb25seSBsb29wIG92ZXIgdGlsZXMgd2l0aCBubyBkYXRhKVxuICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gcmVxdWVzdCBpdHMgcGFyZW50LlxuICAgICAgICAgICAgbGV0IHBhcmVudFdhc1JlcXVlc3RlZCA9IHRpbGUud2FzUmVxdWVzdGVkKCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IG92ZXJzY2FsZWRaID0gdGlsZUlELm92ZXJzY2FsZWRaIC0gMTsgb3ZlcnNjYWxlZFogPj0gbWluQ292ZXJpbmdab29tOyAtLW92ZXJzY2FsZWRaKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aWxlSUQuc2NhbGVkVG8ob3ZlcnNjYWxlZFopO1xuXG4gICAgICAgICAgICAgICAgLy8gQnJlYWsgcGFyZW50IHRpbGUgYXNjZW50IGlmIHRoaXMgcm91dGUgaGFzIGJlZW4gcHJldmlvdXNseSBjaGVja2VkIGJ5IGFub3RoZXIgY2hpbGQuXG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrZWRbcGFyZW50SWQua2V5XSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2hlY2tlZFtwYXJlbnRJZC5rZXldID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRpbGUgPSB0aGlzLmdldFRpbGUocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgIGlmICghdGlsZSAmJiBwYXJlbnRXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZSA9IHRoaXMuX2FkZFRpbGUocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGlsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXRhaW5bcGFyZW50SWQua2V5XSA9IHBhcmVudElkO1xuICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHZhbHVlcywgc2luY2UgdGhleSdyZSB0aGUgcGFyZW50IG9mIHRoZSBuZXh0IGl0ZXJhdGlvblxuICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgcGFyZW50IHRpbGUgYXNjZW50IGxvb3AuXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFdhc1JlcXVlc3RlZCA9IHRpbGUud2FzUmVxdWVzdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aWxlLmhhc0RhdGEoKSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldGFpbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSB0aWxlLCBnaXZlbiBpdHMgY29vcmRpbmF0ZSwgdG8gdGhlIHB5cmFtaWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYWRkVGlsZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiBUaWxlIHtcbiAgICAgICAgbGV0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSUQua2V5XTtcbiAgICAgICAgaWYgKHRpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGlsZTtcblxuICAgICAgICB0aWxlID0gdGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKHRpbGVJRCk7XG4gICAgICAgIGlmICh0aWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIodGlsZUlELmtleSwgdGlsZSk7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHRpbGVJRCBiZWNhdXNlIHRoZSBjYWNoZWQgdGlsZSBjb3VsZCBoYXZlIGhhZCBhIGRpZmZlcmVudCB3cmFwIHZhbHVlXG4gICAgICAgICAgICB0aWxlLnRpbGVJRCA9IHRpbGVJRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlLmluaXRpYWxpemVUaWxlU3RhdGUodGlsZSwgdGhpcy5tYXAgPyB0aGlzLm1hcC5wYWludGVyIDogbnVsbCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV0pIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWNoZVRpbWVyc1t0aWxlSUQua2V5XTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIodGlsZUlELmtleSwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYWNoZWQgPSBCb29sZWFuKHRpbGUpO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgdGlsZSA9IG5ldyBUaWxlKHRpbGVJRCwgdGhpcy5fc291cmNlLnRpbGVTaXplICogdGlsZUlELm92ZXJzY2FsZUZhY3RvcigpKTtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRUaWxlKHRpbGUsIHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLCB0aWxlLCB0aWxlSUQua2V5LCB0aWxlLnN0YXRlKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbXBvc3NpYmxlLCBidXQgc2lsZW5jZSBmbG93LlxuICAgICAgICBpZiAoIXRpbGUpIHJldHVybiAobnVsbDogYW55KTtcblxuICAgICAgICB0aWxlLnVzZXMrKztcbiAgICAgICAgdGhpcy5fdGlsZXNbdGlsZUlELmtleV0gPSB0aWxlO1xuICAgICAgICBpZiAoIWNhY2hlZCkgdGhpcy5fc291cmNlLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHt0aWxlLCBjb29yZDogdGlsZS50aWxlSUQsIGRhdGFUeXBlOiAnc291cmNlJ30pKTtcblxuICAgICAgICByZXR1cm4gdGlsZTtcbiAgICB9XG5cbiAgICBfc2V0VGlsZVJlbG9hZFRpbWVyKGlkOiBzdHJpbmcgfCBudW1iZXIsIHRpbGU6IFRpbGUpIHtcbiAgICAgICAgaWYgKGlkIGluIHRoaXMuX3RpbWVycykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tpZF0pO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RpbWVyc1tpZF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBpcnlUaW1lb3V0ID0gdGlsZS5nZXRFeHBpcnlUaW1lb3V0KCk7XG4gICAgICAgIGlmIChleHBpcnlUaW1lb3V0KSB7XG4gICAgICAgICAgICB0aGlzLl90aW1lcnNbaWRdID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVsb2FkVGlsZShpZCwgJ2V4cGlyZWQnKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgICAgIH0sIGV4cGlyeVRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgdGlsZSwgZ2l2ZW4gaXRzIGlkLCBmcm9tIHRoZSBweXJhbWlkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVtb3ZlVGlsZShpZDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG4gICAgICAgIGlmICghdGlsZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aWxlLnVzZXMtLTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyc1tpZF0pIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90aW1lcnNbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbGUudXNlcyA+IDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRpbGUuaGFzRGF0YSgpICYmIHRpbGUuc3RhdGUgIT09ICdyZWxvYWRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5hZGQodGlsZS50aWxlSUQsIHRpbGUsIHRpbGUuZ2V0RXhwaXJ5VGltZW91dCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hYm9ydFRpbGUodGlsZSk7XG4gICAgICAgICAgICB0aGlzLl91bmxvYWRUaWxlKHRpbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCB0aWxlcyBmcm9tIHRoaXMgcHlyYW1pZFxuICAgICAqL1xuICAgIGNsZWFyVGlsZXMoKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpXG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVUaWxlKGlkKTtcblxuICAgICAgICB0aGlzLl9jYWNoZS5yZXNldCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCB0aHJvdWdoIG91ciBjdXJyZW50IHRpbGVzIGFuZCBhdHRlbXB0IHRvIGZpbmQgdGhlIHRpbGVzIHRoYXRcbiAgICAgKiBjb3ZlciB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSBwb2ludFF1ZXJ5R2VvbWV0cnkgY29vcmRpbmF0ZXMgb2YgdGhlIGNvcm5lcnMgb2YgYm91bmRpbmcgcmVjdGFuZ2xlXG4gICAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IHJlc3VsdCBpdGVtcyBoYXZlIHt0aWxlLCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZfSwgd2hlcmUgbWluL21heCBib3VuZGluZyB2YWx1ZXMgYXJlIHRoZSBnaXZlbiBib3VuZHMgdHJhbnNmb3JtZWQgaW4gaW50byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGlzIHRpbGUuXG4gICAgICovXG4gICAgdGlsZXNJbihwb2ludFF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiwgbWF4UGl0Y2hTY2FsZUZhY3RvcjogbnVtYmVyLCBoYXMzRExheWVyOiBib29sZWFuKSB7XG5cbiAgICAgICAgY29uc3QgdGlsZVJlc3VsdHMgPSBbXTtcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybTtcbiAgICAgICAgaWYgKCF0cmFuc2Zvcm0pIHJldHVybiB0aWxlUmVzdWx0cztcblxuICAgICAgICBjb25zdCBjYW1lcmFQb2ludFF1ZXJ5R2VvbWV0cnkgPSBoYXMzRExheWVyID9cbiAgICAgICAgICAgIHRyYW5zZm9ybS5nZXRDYW1lcmFRdWVyeUdlb21ldHJ5KHBvaW50UXVlcnlHZW9tZXRyeSkgOlxuICAgICAgICAgICAgcG9pbnRRdWVyeUdlb21ldHJ5O1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5R2VvbWV0cnkgPSBwb2ludFF1ZXJ5R2VvbWV0cnkubWFwKChwKSA9PiB0cmFuc2Zvcm0ucG9pbnRDb29yZGluYXRlKHApKTtcbiAgICAgICAgY29uc3QgY2FtZXJhUXVlcnlHZW9tZXRyeSA9IGNhbWVyYVBvaW50UXVlcnlHZW9tZXRyeS5tYXAoKHApID0+IHRyYW5zZm9ybS5wb2ludENvb3JkaW5hdGUocCkpO1xuXG4gICAgICAgIGNvbnN0IGlkcyA9IHRoaXMuZ2V0SWRzKCk7XG5cbiAgICAgICAgbGV0IG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgbGV0IG1pblkgPSBJbmZpbml0eTtcbiAgICAgICAgbGV0IG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIGxldCBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBjYW1lcmFRdWVyeUdlb21ldHJ5KSB7XG4gICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcC54KTtcbiAgICAgICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBwLnkpO1xuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHAueCk7XG4gICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcC55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRzW2ldXTtcbiAgICAgICAgICAgIGlmICh0aWxlLmhvbGRpbmdGb3JGYWRlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaWxlcyBoZWxkIGZvciBmYWRpbmcgYXJlIGNvdmVyZWQgYnkgdGlsZXMgdGhhdCBhcmUgY2xvc2VyIHRvIGlkZWFsXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0aWxlSUQgPSB0aWxlLnRpbGVJRDtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5wb3coMiwgdHJhbnNmb3JtLnpvb20gLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhZGRpbmcgPSBtYXhQaXRjaFNjYWxlRmFjdG9yICogdGlsZS5xdWVyeVBhZGRpbmcgKiBFWFRFTlQgLyB0aWxlLnRpbGVTaXplIC8gc2NhbGU7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbGVTcGFjZUJvdW5kcyA9IFtcbiAgICAgICAgICAgICAgICB0aWxlSUQuZ2V0VGlsZVBvaW50KG5ldyBNZXJjYXRvckNvb3JkaW5hdGUobWluWCwgbWluWSkpLFxuICAgICAgICAgICAgICAgIHRpbGVJRC5nZXRUaWxlUG9pbnQobmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShtYXhYLCBtYXhZKSlcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGlmICh0aWxlU3BhY2VCb3VuZHNbMF0ueCAtIHF1ZXJ5UGFkZGluZyA8IEVYVEVOVCAmJiB0aWxlU3BhY2VCb3VuZHNbMF0ueSAtIHF1ZXJ5UGFkZGluZyA8IEVYVEVOVCAmJlxuICAgICAgICAgICAgICAgIHRpbGVTcGFjZUJvdW5kc1sxXS54ICsgcXVlcnlQYWRkaW5nID49IDAgJiYgdGlsZVNwYWNlQm91bmRzWzFdLnkgKyBxdWVyeVBhZGRpbmcgPj0gMCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZVNwYWNlUXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+ID0gcXVlcnlHZW9tZXRyeS5tYXAoKGMpID0+IHRpbGVJRC5nZXRUaWxlUG9pbnQoYykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGVTcGFjZUNhbWVyYVF1ZXJ5R2VvbWV0cnkgPSBjYW1lcmFRdWVyeUdlb21ldHJ5Lm1hcCgoYykgPT4gdGlsZUlELmdldFRpbGVQb2ludChjKSk7XG5cbiAgICAgICAgICAgICAgICB0aWxlUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZSxcbiAgICAgICAgICAgICAgICAgICAgdGlsZUlELFxuICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5OiB0aWxlU3BhY2VRdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBjYW1lcmFRdWVyeUdlb21ldHJ5OiB0aWxlU3BhY2VDYW1lcmFRdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRpbGVSZXN1bHRzO1xuICAgIH1cblxuICAgIGdldFZpc2libGVDb29yZGluYXRlcyhzeW1ib2xMYXllcj86IGJvb2xlYW4pOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiB7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuZ2V0UmVuZGVyYWJsZUlkcyhzeW1ib2xMYXllcikubWFwKChpZCkgPT4gdGhpcy5fdGlsZXNbaWRdLnRpbGVJRCk7XG4gICAgICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgICAgICBjb29yZC5wb3NNYXRyaXggPSB0aGlzLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoY29vcmQudG9VbndyYXBwZWQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvb3JkcztcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLmhhc1RyYW5zaXRpb24oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNSYXN0ZXJUeXBlKHRoaXMuX3NvdXJjZS50eXBlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbGUuZmFkZUVuZFRpbWUgIT09IHVuZGVmaW5lZCAmJiB0aWxlLmZhZGVFbmRUaW1lID49IGJyb3dzZXIubm93KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYSBwYXJ0aWN1bGFyIHN0YXRlIGZvciBhIGZlYXR1cmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllcj86IHN0cmluZywgZmVhdHVyZTogbnVtYmVyLCBzdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIHNvdXJjZUxheWVyID0gc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgdGhpcy5fc3RhdGUudXBkYXRlU3RhdGUoc291cmNlTGF5ZXIsIGZlYXR1cmUsIHN0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBzdGF0ZSBrZXkgZm9yIGEgZmVhdHVyZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyPzogc3RyaW5nLCBmZWF0dXJlPzogbnVtYmVyLCBrZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgc291cmNlTGF5ZXIgPSBzb3VyY2VMYXllciB8fCAnX2dlb2pzb25UaWxlTGF5ZXInO1xuICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmVGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXIsIGZlYXR1cmUsIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBlbnRpcmUgc3RhdGUgb2JqZWN0IGZvciBhIGZlYXR1cmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllcj86IHN0cmluZywgZmVhdHVyZTogbnVtYmVyKSB7XG4gICAgICAgIHNvdXJjZUxheWVyID0gc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlKTtcbiAgICB9XG59XG5cblNvdXJjZUNhY2hlLm1heE92ZXJ6b29taW5nID0gMTA7XG5Tb3VyY2VDYWNoZS5tYXhVbmRlcnpvb21pbmcgPSAzO1xuXG5mdW5jdGlvbiBjb21wYXJlS2V5Wm9vbShhLCBiKSB7XG4gICAgcmV0dXJuICgoYSAlIDMyKSAtIChiICUgMzIpKSB8fCAoYiAtIGEpO1xufVxuXG5mdW5jdGlvbiBpc1Jhc3RlclR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAncmFzdGVyJyB8fCB0eXBlID09PSAnaW1hZ2UnIHx8IHR5cGUgPT09ICd2aWRlbyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNvdXJjZUNhY2hlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi93aW5kb3cnO1xuaW1wb3J0IG1hcGJveGdsIGZyb20gJy4uLy4uLyc7XG5cbmltcG9ydCB0eXBlIHtXb3JrZXJJbnRlcmZhY2V9IGZyb20gJy4uL3dlYl93b3JrZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKTogV29ya2VySW50ZXJmYWNlIHtcbiAgICByZXR1cm4gKG5ldyB3aW5kb3cuV29ya2VyKG1hcGJveGdsLndvcmtlclVybCk6IGFueSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgV2ViV29ya2VyIGZyb20gJy4vd2ViX3dvcmtlcic7XG5pbXBvcnQgdHlwZSB7V29ya2VySW50ZXJmYWNlfSBmcm9tICcuL3dlYl93b3JrZXInO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi9icm93c2VyJztcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgd29ya2VyIHBvb2wuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXb3JrZXJQb29sIHtcbiAgICBzdGF0aWMgd29ya2VyQ291bnQ6IG51bWJlcjtcblxuICAgIGFjdGl2ZToge1tudW1iZXJdOiBib29sZWFufTtcbiAgICB3b3JrZXJzOiBBcnJheTxXb3JrZXJJbnRlcmZhY2U+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0ge307XG4gICAgfVxuXG4gICAgYWNxdWlyZShtYXBJZDogbnVtYmVyKTogQXJyYXk8V29ya2VySW50ZXJmYWNlPiB7XG4gICAgICAgIGlmICghdGhpcy53b3JrZXJzKSB7XG4gICAgICAgICAgICAvLyBMYXppbHkgbG9vayB1cCB0aGUgdmFsdWUgb2YgbWFwYm94Z2wud29ya2VyQ291bnQgc28gdGhhdFxuICAgICAgICAgICAgLy8gY2xpZW50IGNvZGUgaGFzIGhhZCBhIGNoYW5jZSB0byBzZXQgaXQuXG4gICAgICAgICAgICB0aGlzLndvcmtlcnMgPSBbXTtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLndvcmtlcnMubGVuZ3RoIDwgV29ya2VyUG9vbC53b3JrZXJDb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMud29ya2Vycy5wdXNoKG5ldyBXZWJXb3JrZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVttYXBJZF0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy53b3JrZXJzLnNsaWNlKCk7XG4gICAgfVxuXG4gICAgcmVsZWFzZShtYXBJZDogbnVtYmVyKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVttYXBJZF07XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnMuZm9yRWFjaCgodykgPT4ge1xuICAgICAgICAgICAgICAgIHcudGVybWluYXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMud29ya2VycyA9IChudWxsOiBhbnkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCBhdmFpbGFibGVMb2dpY2FsUHJvY2Vzc29ycyA9IE1hdGguZmxvb3IoYnJvd3Nlci5oYXJkd2FyZUNvbmN1cnJlbmN5IC8gMik7XG5Xb3JrZXJQb29sLndvcmtlckNvdW50ID0gTWF0aC5tYXgoTWF0aC5taW4oYXZhaWxhYmxlTG9naWNhbFByb2Nlc3NvcnMsIDYpLCAxKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBXb3JrZXJQb29sIGZyb20gJy4vd29ya2VyX3Bvb2wnO1xuXG5sZXQgZ2xvYmFsV29ya2VyUG9vbDtcblxuLyoqXG4gKiBDcmVhdGVzIChpZiBuZWNlc3NhcnkpIGFuZCByZXR1cm5zIHRoZSBzaW5nbGUsIGdsb2JhbCBXb3JrZXJQb29sIGluc3RhbmNlXG4gKiB0byBiZSBzaGFyZWQgYWNyb3NzIGVhY2ggTWFwXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHbG9iYWxXb3JrZXJQb29sICgpIHtcbiAgICBpZiAoIWdsb2JhbFdvcmtlclBvb2wpIHtcbiAgICAgICAgZ2xvYmFsV29ya2VyUG9vbCA9IG5ldyBXb3JrZXJQb29sKCk7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxXb3JrZXJQb29sO1xufVxuIiwiXG5pbXBvcnQgcmVmUHJvcGVydGllcyBmcm9tICcuL3V0aWwvcmVmX3Byb3BlcnRpZXMnO1xuXG5mdW5jdGlvbiBkZXJlZihsYXllciwgcGFyZW50KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGsgaW4gbGF5ZXIpIHtcbiAgICAgICAgaWYgKGsgIT09ICdyZWYnKSB7XG4gICAgICAgICAgICByZXN1bHRba10gPSBsYXllcltrXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZlByb3BlcnRpZXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICBpZiAoayBpbiBwYXJlbnQpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IHBhcmVudFtrXTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVyZWZMYXllcnM7XG5cbi8qKlxuICogR2l2ZW4gYW4gYXJyYXkgb2YgbGF5ZXJzLCBzb21lIG9mIHdoaWNoIG1heSBjb250YWluIGByZWZgIHByb3BlcnRpZXNcbiAqIHdob3NlIHZhbHVlIGlzIHRoZSBgaWRgIG9mIGFub3RoZXIgcHJvcGVydHksIHJldHVybiBhIG5ldyBhcnJheSB3aGVyZVxuICogc3VjaCBsYXllcnMgaGF2ZSBiZWVuIGF1Z21lbnRlZCB3aXRoIHRoZSAndHlwZScsICdzb3VyY2UnLCBldGMuIHByb3BlcnRpZXNcbiAqIGZyb20gdGhlIHBhcmVudCBsYXllciwgYW5kIHRoZSBgcmVmYCBwcm9wZXJ0eSBoYXMgYmVlbiByZW1vdmVkLlxuICpcbiAqIFRoZSBpbnB1dCBpcyBub3QgbW9kaWZpZWQuIFRoZSBvdXRwdXQgbWF5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byBwb3J0aW9uc1xuICogb2YgdGhlIGlucHV0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5PExheWVyPn0gbGF5ZXJzXG4gKiBAcmV0dXJucyB7QXJyYXk8TGF5ZXI+fVxuICovXG5mdW5jdGlvbiBkZXJlZkxheWVycyhsYXllcnMpIHtcbiAgICBsYXllcnMgPSBsYXllcnMuc2xpY2UoKTtcblxuICAgIGNvbnN0IG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFwW2xheWVyc1tpXS5pZF0gPSBsYXllcnNbaV07XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCdyZWYnIGluIGxheWVyc1tpXSkge1xuICAgICAgICAgICAgbGF5ZXJzW2ldID0gZGVyZWYobGF5ZXJzW2ldLCBtYXBbbGF5ZXJzW2ldLnJlZl0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheWVycztcbn1cbiIsIlxuaW1wb3J0IGlzRXF1YWwgZnJvbSAnLi91dGlsL2RlZXBfZXF1YWwnO1xuXG5jb25zdCBvcGVyYXRpb25zID0ge1xuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRTdHlsZScsIGFyZ3M6IFtzdHlsZXNoZWV0XSB9XG4gICAgICovXG4gICAgc2V0U3R5bGU6ICdzZXRTdHlsZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ2FkZExheWVyJywgYXJnczogW2xheWVyLCAnYmVmb3JlTGF5ZXJJZCddIH1cbiAgICAgKi9cbiAgICBhZGRMYXllcjogJ2FkZExheWVyJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAncmVtb3ZlTGF5ZXInLCBhcmdzOiBbJ2xheWVySWQnXSB9XG4gICAgICovXG4gICAgcmVtb3ZlTGF5ZXI6ICdyZW1vdmVMYXllcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldFBhaW50UHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0UGFpbnRQcm9wZXJ0eTogJ3NldFBhaW50UHJvcGVydHknLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXlvdXRQcm9wZXJ0eScsIGFyZ3M6IFsnbGF5ZXJJZCcsICdwcm9wJywgdmFsdWVdIH1cbiAgICAgKi9cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eTogJ3NldExheW91dFByb3BlcnR5JyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0RmlsdGVyJywgYXJnczogWydsYXllcklkJywgZmlsdGVyXSB9XG4gICAgICovXG4gICAgc2V0RmlsdGVyOiAnc2V0RmlsdGVyJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnYWRkU291cmNlJywgYXJnczogWydzb3VyY2VJZCcsIHNvdXJjZV0gfVxuICAgICAqL1xuICAgIGFkZFNvdXJjZTogJ2FkZFNvdXJjZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3JlbW92ZVNvdXJjZScsIGFyZ3M6IFsnc291cmNlSWQnXSB9XG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlOiAncmVtb3ZlU291cmNlJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0R2VvSlNPTlNvdXJjZURhdGEnLCBhcmdzOiBbJ3NvdXJjZUlkJywgZGF0YV0gfVxuICAgICAqL1xuICAgIHNldEdlb0pTT05Tb3VyY2VEYXRhOiAnc2V0R2VvSlNPTlNvdXJjZURhdGEnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXllclpvb21SYW5nZScsIGFyZ3M6IFsnbGF5ZXJJZCcsIDAsIDIyXSB9XG4gICAgICovXG4gICAgc2V0TGF5ZXJab29tUmFuZ2U6ICdzZXRMYXllclpvb21SYW5nZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldExheWVyUHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0TGF5ZXJQcm9wZXJ0eTogJ3NldExheWVyUHJvcGVydHknLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRDZW50ZXInLCBhcmdzOiBbW2xvbiwgbGF0XV0gfVxuICAgICAqL1xuICAgIHNldENlbnRlcjogJ3NldENlbnRlcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldFpvb20nLCBhcmdzOiBbem9vbV0gfVxuICAgICAqL1xuICAgIHNldFpvb206ICdzZXRab29tJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0QmVhcmluZycsIGFyZ3M6IFtiZWFyaW5nXSB9XG4gICAgICovXG4gICAgc2V0QmVhcmluZzogJ3NldEJlYXJpbmcnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRQaXRjaCcsIGFyZ3M6IFtwaXRjaF0gfVxuICAgICAqL1xuICAgIHNldFBpdGNoOiAnc2V0UGl0Y2gnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRTcHJpdGUnLCBhcmdzOiBbJ3Nwcml0ZVVybCddIH1cbiAgICAgKi9cbiAgICBzZXRTcHJpdGU6ICdzZXRTcHJpdGUnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRHbHlwaHMnLCBhcmdzOiBbJ2dseXBoc1VybCddIH1cbiAgICAgKi9cbiAgICBzZXRHbHlwaHM6ICdzZXRHbHlwaHMnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRUcmFuc2l0aW9uJywgYXJnczogW3RyYW5zaXRpb25dIH1cbiAgICAgKi9cbiAgICBzZXRUcmFuc2l0aW9uOiAnc2V0VHJhbnNpdGlvbicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldExpZ2h0aW5nJywgYXJnczogW2xpZ2h0UHJvcGVydGllc10gfVxuICAgICAqL1xuICAgIHNldExpZ2h0OiAnc2V0TGlnaHQnXG5cbn07XG5cbmZ1bmN0aW9uIGFkZFNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzKSB7XG4gICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5hZGRTb3VyY2UsIGFyZ3M6IFtzb3VyY2VJZCwgYWZ0ZXJbc291cmNlSWRdXX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTb3VyY2Uoc291cmNlSWQsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCkge1xuICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlU291cmNlLCBhcmdzOiBbc291cmNlSWRdfSk7XG4gICAgc291cmNlc1JlbW92ZWRbc291cmNlSWRdID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU291cmNlKHNvdXJjZUlkLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKSB7XG4gICAgcmVtb3ZlU291cmNlKHNvdXJjZUlkLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgIGFkZFNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzKTtcbn1cblxuZnVuY3Rpb24gY2FuVXBkYXRlR2VvSlNPTihiZWZvcmUsIGFmdGVyLCBzb3VyY2VJZCkge1xuICAgIGxldCBwcm9wO1xuICAgIGZvciAocHJvcCBpbiBiZWZvcmVbc291cmNlSWRdKSB7XG4gICAgICAgIGlmICghYmVmb3JlW3NvdXJjZUlkXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgIGlmIChwcm9wICE9PSAnZGF0YScgJiYgIWlzRXF1YWwoYmVmb3JlW3NvdXJjZUlkXVtwcm9wXSwgYWZ0ZXJbc291cmNlSWRdW3Byb3BdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAocHJvcCBpbiBhZnRlcltzb3VyY2VJZF0pIHtcbiAgICAgICAgaWYgKCFhZnRlcltzb3VyY2VJZF0uaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAocHJvcCAhPT0gJ2RhdGEnICYmICFpc0VxdWFsKGJlZm9yZVtzb3VyY2VJZF1bcHJvcF0sIGFmdGVyW3NvdXJjZUlkXVtwcm9wXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGlmZlNvdXJjZXMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlIHx8IHt9O1xuICAgIGFmdGVyID0gYWZ0ZXIgfHwge307XG5cbiAgICBsZXQgc291cmNlSWQ7XG5cbiAgICAvLyBsb29rIGZvciBzb3VyY2VzIHRvIHJlbW92ZVxuICAgIGZvciAoc291cmNlSWQgaW4gYmVmb3JlKSB7XG4gICAgICAgIGlmICghYmVmb3JlLmhhc093blByb3BlcnR5KHNvdXJjZUlkKSkgY29udGludWU7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSB7XG4gICAgICAgICAgICByZW1vdmVTb3VyY2Uoc291cmNlSWQsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciBzb3VyY2VzIHRvIGFkZC91cGRhdGVcbiAgICBmb3IgKHNvdXJjZUlkIGluIGFmdGVyKSB7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFiZWZvcmUuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSB7XG4gICAgICAgICAgICBhZGRTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRXF1YWwoYmVmb3JlW3NvdXJjZUlkXSwgYWZ0ZXJbc291cmNlSWRdKSkge1xuICAgICAgICAgICAgaWYgKGJlZm9yZVtzb3VyY2VJZF0udHlwZSA9PT0gJ2dlb2pzb24nICYmIGFmdGVyW3NvdXJjZUlkXS50eXBlID09PSAnZ2VvanNvbicgJiYgY2FuVXBkYXRlR2VvSlNPTihiZWZvcmUsIGFmdGVyLCBzb3VyY2VJZCkpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEdlb0pTT05Tb3VyY2VEYXRhLCBhcmdzOiBbc291cmNlSWQsIGFmdGVyW3NvdXJjZUlkXS5kYXRhXX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBubyB1cGRhdGUgY29tbWFuZCwgbXVzdCByZW1vdmUgdGhlbiBhZGRcbiAgICAgICAgICAgICAgICB1cGRhdGVTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkaWZmTGF5ZXJQcm9wZXJ0eUNoYW5nZXMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMsIGxheWVySWQsIGtsYXNzLCBjb21tYW5kKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlIHx8IHt9O1xuICAgIGFmdGVyID0gYWZ0ZXIgfHwge307XG5cbiAgICBsZXQgcHJvcDtcblxuICAgIGZvciAocHJvcCBpbiBiZWZvcmUpIHtcbiAgICAgICAgaWYgKCFiZWZvcmUuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlW3Byb3BdLCBhZnRlcltwcm9wXSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQsIGFyZ3M6IFtsYXllcklkLCBwcm9wLCBhZnRlcltwcm9wXSwga2xhc3NdfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChwcm9wIGluIGFmdGVyKSB7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkocHJvcCkgfHwgYmVmb3JlLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZVtwcm9wXSwgYWZ0ZXJbcHJvcF0pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kLCBhcmdzOiBbbGF5ZXJJZCwgcHJvcCwgYWZ0ZXJbcHJvcF0sIGtsYXNzXX0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwbHVja0lkKGxheWVyKSB7XG4gICAgcmV0dXJuIGxheWVyLmlkO1xufVxuZnVuY3Rpb24gaW5kZXhCeUlkKGdyb3VwLCBsYXllcikge1xuICAgIGdyb3VwW2xheWVyLmlkXSA9IGxheWVyO1xuICAgIHJldHVybiBncm91cDtcbn1cblxuZnVuY3Rpb24gZGlmZkxheWVycyhiZWZvcmUsIGFmdGVyLCBjb21tYW5kcykge1xuICAgIGJlZm9yZSA9IGJlZm9yZSB8fCBbXTtcbiAgICBhZnRlciA9IGFmdGVyIHx8IFtdO1xuXG4gICAgLy8gb3JkZXIgb2YgbGF5ZXJzIGJ5IGlkXG4gICAgY29uc3QgYmVmb3JlT3JkZXIgPSBiZWZvcmUubWFwKHBsdWNrSWQpO1xuICAgIGNvbnN0IGFmdGVyT3JkZXIgPSBhZnRlci5tYXAocGx1Y2tJZCk7XG5cbiAgICAvLyBpbmRleCBvZiBsYXllciBieSBpZFxuICAgIGNvbnN0IGJlZm9yZUluZGV4ID0gYmVmb3JlLnJlZHVjZShpbmRleEJ5SWQsIHt9KTtcbiAgICBjb25zdCBhZnRlckluZGV4ID0gYWZ0ZXIucmVkdWNlKGluZGV4QnlJZCwge30pO1xuXG4gICAgLy8gdHJhY2sgb3JkZXIgb2YgbGF5ZXJzIGFzIGlmIHRoZXkgaGF2ZSBiZWVuIG11dGF0ZWRcbiAgICBjb25zdCB0cmFja2VyID0gYmVmb3JlT3JkZXIuc2xpY2UoKTtcblxuICAgIC8vIGxheWVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBkbyBub3QgbmVlZCB0byBiZSBkaWZmZWRcbiAgICBjb25zdCBjbGVhbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBsZXQgaSwgZCwgbGF5ZXJJZCwgYmVmb3JlTGF5ZXIsIGFmdGVyTGF5ZXIsIGluc2VydEJlZm9yZUxheWVySWQsIHByb3A7XG5cbiAgICAvLyByZW1vdmUgbGF5ZXJzXG4gICAgZm9yIChpID0gMCwgZCA9IDA7IGkgPCBiZWZvcmVPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBsYXllcklkID0gYmVmb3JlT3JkZXJbaV07XG4gICAgICAgIGlmICghYWZ0ZXJJbmRleC5oYXNPd25Qcm9wZXJ0eShsYXllcklkKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmluZGV4T2YobGF5ZXJJZCwgZCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbGltaXQgd2hlcmUgaW4gdHJhY2tlciB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbWF0Y2hcbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZC9yZW9yZGVyIGxheWVyc1xuICAgIGZvciAoaSA9IDAsIGQgPSAwOyBpIDwgYWZ0ZXJPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyB3b3JrIGJhY2t3YXJkcyBhcyBpbnNlcnQgaXMgYmVmb3JlIGFuIGV4aXN0aW5nIGxheWVyXG4gICAgICAgIGxheWVySWQgPSBhZnRlck9yZGVyW2FmdGVyT3JkZXIubGVuZ3RoIC0gMSAtIGldO1xuXG4gICAgICAgIGlmICh0cmFja2VyW3RyYWNrZXIubGVuZ3RoIC0gMSAtIGldID09PSBsYXllcklkKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoYmVmb3JlSW5kZXguaGFzT3duUHJvcGVydHkobGF5ZXJJZCkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgbGF5ZXIgYmVmb3JlIHdlIGluc2VydCBhdCB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmxhc3RJbmRleE9mKGxheWVySWQsIHRyYWNrZXIubGVuZ3RoIC0gZCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbGltaXQgd2hlcmUgaW4gdHJhY2tlciB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbWF0Y2hcbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBsYXllciBhdCBjb3JyZWN0IHBvc2l0aW9uXG4gICAgICAgIGluc2VydEJlZm9yZUxheWVySWQgPSB0cmFja2VyW3RyYWNrZXIubGVuZ3RoIC0gaV07XG4gICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkTGF5ZXIsIGFyZ3M6IFthZnRlckluZGV4W2xheWVySWRdLCBpbnNlcnRCZWZvcmVMYXllcklkXX0pO1xuICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmxlbmd0aCAtIGksIDAsIGxheWVySWQpO1xuICAgICAgICBjbGVhbltsYXllcklkXSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGxheWVyc1xuICAgIGZvciAoaSA9IDA7IGkgPCBhZnRlck9yZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxheWVySWQgPSBhZnRlck9yZGVyW2ldO1xuICAgICAgICBiZWZvcmVMYXllciA9IGJlZm9yZUluZGV4W2xheWVySWRdO1xuICAgICAgICBhZnRlckxheWVyID0gYWZ0ZXJJbmRleFtsYXllcklkXTtcblxuICAgICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBpZiBwcmV2aW91c2x5IGFkZGVkIChuZXcgb3IgbW92ZWQpXG4gICAgICAgIGlmIChjbGVhbltsYXllcklkXSB8fCBpc0VxdWFsKGJlZm9yZUxheWVyLCBhZnRlckxheWVyKSkgY29udGludWU7XG5cbiAgICAgICAgLy8gSWYgc291cmNlLCBzb3VyY2UtbGF5ZXIsIG9yIHR5cGUgaGF2ZSBjaGFuZ2VzLCB0aGVuIHJlbW92ZSB0aGUgbGF5ZXJcbiAgICAgICAgLy8gYW5kIGFkZCBpdCBiYWNrICdmcm9tIHNjcmF0Y2gnLlxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlTGF5ZXIuc291cmNlLCBhZnRlckxheWVyLnNvdXJjZSkgfHwgIWlzRXF1YWwoYmVmb3JlTGF5ZXJbJ3NvdXJjZS1sYXllciddLCBhZnRlckxheWVyWydzb3VyY2UtbGF5ZXInXSkgfHwgIWlzRXF1YWwoYmVmb3JlTGF5ZXIudHlwZSwgYWZ0ZXJMYXllci50eXBlKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICAvLyB3ZSBhZGQgdGhlIGxheWVyIGJhY2sgYXQgdGhlIHNhbWUgcG9zaXRpb24gaXQgd2FzIGFscmVhZHkgaW4sIHNvXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBgdHJhY2tlcmBcbiAgICAgICAgICAgIGluc2VydEJlZm9yZUxheWVySWQgPSB0cmFja2VyW3RyYWNrZXIubGFzdEluZGV4T2YobGF5ZXJJZCkgKyAxXTtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkTGF5ZXIsIGFyZ3M6IFthZnRlckxheWVyLCBpbnNlcnRCZWZvcmVMYXllcklkXX0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsYXlvdXQsIHBhaW50LCBmaWx0ZXIsIG1pbnpvb20sIG1heHpvb21cbiAgICAgICAgZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZUxheWVyLmxheW91dCwgYWZ0ZXJMYXllci5sYXlvdXQsIGNvbW1hbmRzLCBsYXllcklkLCBudWxsLCBvcGVyYXRpb25zLnNldExheW91dFByb3BlcnR5KTtcbiAgICAgICAgZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZUxheWVyLnBhaW50LCBhZnRlckxheWVyLnBhaW50LCBjb21tYW5kcywgbGF5ZXJJZCwgbnVsbCwgb3BlcmF0aW9ucy5zZXRQYWludFByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyLmZpbHRlciwgYWZ0ZXJMYXllci5maWx0ZXIpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEZpbHRlciwgYXJnczogW2xheWVySWQsIGFmdGVyTGF5ZXIuZmlsdGVyXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmVMYXllci5taW56b29tLCBhZnRlckxheWVyLm1pbnpvb20pIHx8ICFpc0VxdWFsKGJlZm9yZUxheWVyLm1heHpvb20sIGFmdGVyTGF5ZXIubWF4em9vbSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJab29tUmFuZ2UsIGFyZ3M6IFtsYXllcklkLCBhZnRlckxheWVyLm1pbnpvb20sIGFmdGVyTGF5ZXIubWF4em9vbV19KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBhbGwgb3RoZXIgbGF5ZXIgcHJvcHMsIGluY2x1ZGluZyBwYWludC4qXG4gICAgICAgIGZvciAocHJvcCBpbiBiZWZvcmVMYXllcikge1xuICAgICAgICAgICAgaWYgKCFiZWZvcmVMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2xheW91dCcgfHwgcHJvcCA9PT0gJ3BhaW50JyB8fCBwcm9wID09PSAnZmlsdGVyJyB8fFxuICAgICAgICAgICAgICAgIHByb3AgPT09ICdtZXRhZGF0YScgfHwgcHJvcCA9PT0gJ21pbnpvb20nIHx8IHByb3AgPT09ICdtYXh6b29tJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKCdwYWludC4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSwgY29tbWFuZHMsIGxheWVySWQsIHByb3Auc2xpY2UoNiksIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyW3Byb3BdLCBhZnRlckxheWVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJQcm9wZXJ0eSwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyTGF5ZXJbcHJvcF1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChwcm9wIGluIGFmdGVyTGF5ZXIpIHtcbiAgICAgICAgICAgIGlmICghYWZ0ZXJMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSB8fCBiZWZvcmVMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2xheW91dCcgfHwgcHJvcCA9PT0gJ3BhaW50JyB8fCBwcm9wID09PSAnZmlsdGVyJyB8fFxuICAgICAgICAgICAgICAgIHByb3AgPT09ICdtZXRhZGF0YScgfHwgcHJvcCA9PT0gJ21pbnpvb20nIHx8IHByb3AgPT09ICdtYXh6b29tJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKCdwYWludC4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSwgY29tbWFuZHMsIGxheWVySWQsIHByb3Auc2xpY2UoNiksIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyW3Byb3BdLCBhZnRlckxheWVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJQcm9wZXJ0eSwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyTGF5ZXJbcHJvcF1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogRGlmZiB0d28gc3R5bGVzaGVldFxuICpcbiAqIENyZWF0ZXMgc2VtYW50aWNseSBhd2FyZSBkaWZmcyB0aGF0IGNhbiBlYXNpbHkgYmUgYXBwbGllZCBhdCBydW50aW1lLlxuICogT3BlcmF0aW9ucyBwcm9kdWNlZCBieSB0aGUgZGlmZiBjbG9zZWx5IHJlc2VtYmxlIHRoZSBtYXBib3gtZ2wtanMgQVBJLiBBbnlcbiAqIGVycm9yIGNyZWF0aW5nIHRoZSBkaWZmIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSAnc2V0U3R5bGUnIG9wZXJhdGlvbi5cbiAqXG4gKiBFeGFtcGxlIGRpZmY6XG4gKiBbXG4gKiAgICAgeyBjb21tYW5kOiAnc2V0Q29uc3RhbnQnLCBhcmdzOiBbJ0B3YXRlcicsICcjMDAwMEZGJ10gfSxcbiAqICAgICB7IGNvbW1hbmQ6ICdzZXRQYWludFByb3BlcnR5JywgYXJnczogWydiYWNrZ3JvdW5kJywgJ2JhY2tncm91bmQtY29sb3InLCAnYmxhY2snXSB9XG4gKiBdXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW2JlZm9yZV0gc3R5bGVzaGVldCB0byBjb21wYXJlIGZyb21cbiAqIEBwYXJhbSB7Kn0gYWZ0ZXIgc3R5bGVzaGVldCB0byBjb21wYXJlIHRvXG4gKiBAcmV0dXJucyBBcnJheSBsaXN0IG9mIGNoYW5nZXNcbiAqL1xuZnVuY3Rpb24gZGlmZlN0eWxlcyhiZWZvcmUsIGFmdGVyKSB7XG4gICAgaWYgKCFiZWZvcmUpIHJldHVybiBbe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3R5bGUsIGFyZ3M6IFthZnRlcl19XTtcblxuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gdG9wLWxldmVsIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS52ZXJzaW9uLCBhZnRlci52ZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIFt7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRTdHlsZSwgYXJnczogW2FmdGVyXX1dO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuY2VudGVyLCBhZnRlci5jZW50ZXIpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldENlbnRlciwgYXJnczogW2FmdGVyLmNlbnRlcl19KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLnpvb20sIGFmdGVyLnpvb20pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFpvb20sIGFyZ3M6IFthZnRlci56b29tXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuYmVhcmluZywgYWZ0ZXIuYmVhcmluZykpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0QmVhcmluZywgYXJnczogW2FmdGVyLmJlYXJpbmddfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS5waXRjaCwgYWZ0ZXIucGl0Y2gpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFBpdGNoLCBhcmdzOiBbYWZ0ZXIucGl0Y2hdfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS5zcHJpdGUsIGFmdGVyLnNwcml0ZSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3ByaXRlLCBhcmdzOiBbYWZ0ZXIuc3ByaXRlXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuZ2x5cGhzLCBhZnRlci5nbHlwaHMpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEdseXBocywgYXJnczogW2FmdGVyLmdseXBoc119KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLnRyYW5zaXRpb24sIGFmdGVyLnRyYW5zaXRpb24pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFRyYW5zaXRpb24sIGFyZ3M6IFthZnRlci50cmFuc2l0aW9uXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUubGlnaHQsIGFmdGVyLmxpZ2h0KSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRMaWdodCwgYXJnczogW2FmdGVyLmxpZ2h0XX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gYHNvdXJjZXNgXG4gICAgICAgIC8vIElmIGEgc291cmNlIGlzIHRvIGJlIHJlbW92ZWQsIHdlIGFsc28tLWJlZm9yZSB0aGUgcmVtb3ZlU291cmNlXG4gICAgICAgIC8vIGNvbW1hbmQtLW5lZWQgdG8gcmVtb3ZlIGFsbCB0aGUgc3R5bGUgbGF5ZXJzIHRoYXQgZGVwZW5kIG9uIGl0LlxuICAgICAgICBjb25zdCBzb3VyY2VzUmVtb3ZlZCA9IHt9O1xuXG4gICAgICAgIC8vIEZpcnN0IGNvbGxlY3QgdGhlIHthZGQscmVtb3ZlfVNvdXJjZSBjb21tYW5kc1xuICAgICAgICBjb25zdCByZW1vdmVPckFkZFNvdXJjZUNvbW1hbmRzID0gW107XG4gICAgICAgIGRpZmZTb3VyY2VzKGJlZm9yZS5zb3VyY2VzLCBhZnRlci5zb3VyY2VzLCByZW1vdmVPckFkZFNvdXJjZUNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCk7XG5cbiAgICAgICAgLy8gUHVzaCBhIHJlbW92ZUxheWVyIGNvbW1hbmQgZm9yIGVhY2ggc3R5bGUgbGF5ZXIgdGhhdCBkZXBlbmRzIG9uIGFcbiAgICAgICAgLy8gc291cmNlIHRoYXQncyBiZWluZyByZW1vdmVkLlxuICAgICAgICAvLyBBbHNvLCBleGNsdWRlIGFueSBzdWNoIGxheWVycyB0aGVtIGZyb20gdGhlIGlucHV0IHRvIGBkaWZmTGF5ZXJzYFxuICAgICAgICAvLyBiZWxvdywgc28gdGhhdCBkaWZmTGF5ZXJzIHByb2R1Y2VzIHRoZSBhcHByb3ByaWF0ZSBgYWRkTGF5ZXJzYFxuICAgICAgICAvLyBjb21tYW5kXG4gICAgICAgIGNvbnN0IGJlZm9yZUxheWVycyA9IFtdO1xuICAgICAgICBpZiAoYmVmb3JlLmxheWVycykge1xuICAgICAgICAgICAgYmVmb3JlLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VzUmVtb3ZlZFtsYXllci5zb3VyY2VdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlTGF5ZXIsIGFyZ3M6IFtsYXllci5pZF19KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmVMYXllcnMucHVzaChsYXllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5jb25jYXQocmVtb3ZlT3JBZGRTb3VyY2VDb21tYW5kcyk7XG5cbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gYGxheWVyc2BcbiAgICAgICAgZGlmZkxheWVycyhiZWZvcmVMYXllcnMsIGFmdGVyLmxheWVycywgY29tbWFuZHMpO1xuXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gc2V0U3R5bGVcbiAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOicsIGUpO1xuICAgICAgICBjb21tYW5kcyA9IFt7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRTdHlsZSwgYXJnczogW2FmdGVyXX1dO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlmZlN0eWxlcztcbmV4cG9ydCB7b3BlcmF0aW9uc307XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEdyaWRJbmRleCBpcyBhIGRhdGEgc3RydWN0dXJlIGZvciB0ZXN0aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2ZcbiAqIGNpcmNsZXMgYW5kIHJlY3RhbmdsZXMgaW4gYSAyZCBwbGFuZS5cbiAqIEl0IGlzIG9wdGltaXplZCBmb3IgcmFwaWQgaW5zZXJ0aW9uIGFuZCBxdWVyeWluZy5cbiAqIEdyaWRJbmRleCBzcGxpdHMgdGhlIHBsYW5lIGludG8gYSBzZXQgb2YgXCJjZWxsc1wiIGFuZCBrZWVwcyB0cmFja1xuICogb2Ygd2hpY2ggZ2VvbWV0cmllcyBpbnRlcnNlY3Qgd2l0aCBlYWNoIGNlbGwuIEF0IHF1ZXJ5IHRpbWUsXG4gKiBmdWxsIGdlb21ldHJ5IGNvbXBhcmlzb25zIGFyZSBvbmx5IGRvbmUgZm9yIGl0ZW1zIHRoYXQgc2hhcmVcbiAqIGF0IGxlYXN0IG9uZSBjZWxsLiBBcyBsb25nIGFzIHRoZSBnZW9tZXRyaWVzIGFyZSByZWxhdGl2ZWx5XG4gKiB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBwbGFuZSwgdGhpcyBncmVhdGx5IHJlZHVjZXNcbiAqIHRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgbmVjZXNzYXJ5LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEdyaWRJbmRleCB7XG4gICAgY2lyY2xlS2V5czogQXJyYXk8YW55PjtcbiAgICBib3hLZXlzOiBBcnJheTxhbnk+O1xuICAgIGJveENlbGxzOiBBcnJheTxBcnJheTxudW1iZXI+PjtcbiAgICBjaXJjbGVDZWxsczogQXJyYXk8QXJyYXk8bnVtYmVyPj47XG4gICAgYmJveGVzOiBBcnJheTxudW1iZXI+O1xuICAgIGNpcmNsZXM6IEFycmF5PG51bWJlcj47XG4gICAgeENlbGxDb3VudDogbnVtYmVyO1xuICAgIHlDZWxsQ291bnQ6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHhTY2FsZTogbnVtYmVyO1xuICAgIHlTY2FsZTogbnVtYmVyO1xuICAgIGJveFVpZDogbnVtYmVyO1xuICAgIGNpcmNsZVVpZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IgKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBjZWxsU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGJveENlbGxzID0gdGhpcy5ib3hDZWxscyA9IFtdO1xuICAgICAgICBjb25zdCBjaXJjbGVDZWxscyA9IHRoaXMuY2lyY2xlQ2VsbHMgPSBbXTtcblxuICAgICAgICAvLyBNb3JlIGNlbGxzIC0+IGZld2VyIGdlb21ldHJpZXMgdG8gY2hlY2sgcGVyIGNlbGwsIGJ1dCBpdGVtcyB0ZW5kXG4gICAgICAgIC8vIHRvIGJlIHNwbGl0IGFjcm9zcyBtb3JlIGNlbGxzLlxuICAgICAgICAvLyBTd2VldCBzcG90IGFsbG93cyBtb3N0IHNtYWxsIGl0ZW1zIHRvIGZpdCBpbiBvbmUgY2VsbFxuICAgICAgICB0aGlzLnhDZWxsQ291bnQgPSBNYXRoLmNlaWwod2lkdGggLyBjZWxsU2l6ZSk7XG4gICAgICAgIHRoaXMueUNlbGxDb3VudCA9IE1hdGguY2VpbChoZWlnaHQgLyBjZWxsU2l6ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnhDZWxsQ291bnQgKiB0aGlzLnlDZWxsQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgYm94Q2VsbHMucHVzaChbXSk7XG4gICAgICAgICAgICBjaXJjbGVDZWxscy5wdXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNpcmNsZUtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5ib3hLZXlzID0gW107XG4gICAgICAgIHRoaXMuYmJveGVzID0gW107XG4gICAgICAgIHRoaXMuY2lyY2xlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMueFNjYWxlID0gdGhpcy54Q2VsbENvdW50IC8gd2lkdGg7XG4gICAgICAgIHRoaXMueVNjYWxlID0gdGhpcy55Q2VsbENvdW50IC8gaGVpZ2h0O1xuICAgICAgICB0aGlzLmJveFVpZCA9IDA7XG4gICAgICAgIHRoaXMuY2lyY2xlVWlkID0gMDtcbiAgICB9XG5cbiAgICBrZXlzTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCArIHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7XG4gICAgfVxuXG4gICAgaW5zZXJ0KGtleTogYW55LCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2ZvckVhY2hDZWxsKHgxLCB5MSwgeDIsIHkyLCB0aGlzLl9pbnNlcnRCb3hDZWxsLCB0aGlzLmJveFVpZCsrKTtcbiAgICAgICAgdGhpcy5ib3hLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh4MSk7XG4gICAgICAgIHRoaXMuYmJveGVzLnB1c2goeTEpO1xuICAgICAgICB0aGlzLmJib3hlcy5wdXNoKHgyKTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh5Mik7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2lyY2xlKGtleTogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICAgICAgLy8gSW5zZXJ0IGNpcmNsZSBpbnRvIGdyaWQgZm9yIGFsbCBjZWxscyBpbiB0aGUgY2lyY3Vtc2NyaWJpbmcgc3F1YXJlXG4gICAgICAgIC8vIEl0J3MgbW9yZSB0aGFuIG5lY2Vzc2FyeSAoYnkgYSBmYWN0b3Igb2YgNC9QSSksIGJ1dCBmYXN0IHRvIGluc2VydFxuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4IC0gcmFkaXVzLCB5IC0gcmFkaXVzLCB4ICsgcmFkaXVzLCB5ICsgcmFkaXVzLCB0aGlzLl9pbnNlcnRDaXJjbGVDZWxsLCB0aGlzLmNpcmNsZVVpZCsrKTtcbiAgICAgICAgdGhpcy5jaXJjbGVLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgdGhpcy5jaXJjbGVzLnB1c2goeCk7XG4gICAgICAgIHRoaXMuY2lyY2xlcy5wdXNoKHkpO1xuICAgICAgICB0aGlzLmNpcmNsZXMucHVzaChyYWRpdXMpO1xuICAgIH1cblxuICAgIF9pbnNlcnRCb3hDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCB1aWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLmJveENlbGxzW2NlbGxJbmRleF0ucHVzaCh1aWQpO1xuICAgIH1cblxuICAgIF9pbnNlcnRDaXJjbGVDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCB1aWQ6IG51bWJlcikgIHtcbiAgICAgICAgdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdLnB1c2godWlkKTtcbiAgICB9XG5cbiAgICBfcXVlcnkoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgaGl0VGVzdDogYm9vbGVhbiwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGlmICh4MiA8IDAgfHwgeDEgPiB0aGlzLndpZHRoIHx8IHkyIDwgMCB8fCB5MSA+IHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGl0VGVzdCA/IGZhbHNlIDogW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGlmICh4MSA8PSAwICYmIHkxIDw9IDAgJiYgdGhpcy53aWR0aCA8PSB4MiAmJiB0aGlzLmhlaWdodCA8PSB5Mikge1xuICAgICAgICAgICAgaWYgKGhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGJveFVpZCA9IDA7IGJveFVpZCA8IHRoaXMuYm94S2V5cy5sZW5ndGg7IGJveFVpZCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuYm94S2V5c1tib3hVaWRdLFxuICAgICAgICAgICAgICAgICAgICB4MTogdGhpcy5iYm94ZXNbYm94VWlkICogNF0sXG4gICAgICAgICAgICAgICAgICAgIHkxOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgIHgyOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgIHkyOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgM11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGNpcmNsZVVpZCA9IDA7IGNpcmNsZVVpZCA8IHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7IGNpcmNsZVVpZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuY2lyY2xlc1tjaXJjbGVVaWQgKiAzXTtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gdGhpcy5jaXJjbGVzW2NpcmNsZVVpZCAqIDMgKyAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSB0aGlzLmNpcmNsZXNbY2lyY2xlVWlkICogMyArIDJdO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSxcbiAgICAgICAgICAgICAgICAgICAgeDE6IHggLSByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgIHkxOiB5IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICB4MjogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgeTI6IHkgKyByYWRpdXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUgPyByZXN1bHQuZmlsdGVyKHByZWRpY2F0ZSkgOiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgaGl0VGVzdCxcbiAgICAgICAgICAgICAgICBzZWVuVWlkczoge2JveDoge30sIGNpcmNsZToge319XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fZm9yRWFjaENlbGwoeDEsIHkxLCB4MiwgeTIsIHRoaXMuX3F1ZXJ5Q2VsbCwgcmVzdWx0LCBxdWVyeUFyZ3MsIHByZWRpY2F0ZSk7XG4gICAgICAgICAgICByZXR1cm4gaGl0VGVzdCA/IHJlc3VsdC5sZW5ndGggPiAwIDogcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3F1ZXJ5Q2lyY2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgaGl0VGVzdDogYm9vbGVhbiwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIC8vIEluc2VydCBjaXJjbGUgaW50byBncmlkIGZvciBhbGwgY2VsbHMgaW4gdGhlIGNpcmN1bXNjcmliaW5nIHNxdWFyZVxuICAgICAgICAvLyBJdCdzIG1vcmUgdGhhbiBuZWNlc3NhcnkgKGJ5IGEgZmFjdG9yIG9mIDQvUEkpLCBidXQgZmFzdCB0byBpbnNlcnRcbiAgICAgICAgY29uc3QgeDEgPSB4IC0gcmFkaXVzO1xuICAgICAgICBjb25zdCB4MiA9IHggKyByYWRpdXM7XG4gICAgICAgIGNvbnN0IHkxID0geSAtIHJhZGl1cztcbiAgICAgICAgY29uc3QgeTIgPSB5ICsgcmFkaXVzO1xuICAgICAgICBpZiAoeDIgPCAwIHx8IHgxID4gdGhpcy53aWR0aCB8fCB5MiA8IDAgfHwgeTEgPiB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyBmYWxzZSA6IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm94IHF1ZXJ5IGVhcmx5IGV4aXRzIGlmIHRoZSBib3VuZGluZyBib3ggaXMgbGFyZ2VyIHRoYW4gdGhlIGdyaWQsIGJ1dCB3ZSBkb24ndCBkb1xuICAgICAgICAvLyB0aGUgZXF1aXZhbGVudCBjYWxjdWxhdGlvbiBmb3IgY2lyY2xlIHF1ZXJpZXMgYmVjYXVzZSBlYXJseSBleGl0IGlzIGxlc3MgbGlrZWx5XG4gICAgICAgIC8vIGFuZCB0aGUgY2FsY3VsYXRpb24gaXMgbW9yZSBleHBlbnNpdmVcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHF1ZXJ5QXJncyA9IHtcbiAgICAgICAgICAgIGhpdFRlc3QsXG4gICAgICAgICAgICBjaXJjbGU6IHt4LCB5LCByYWRpdXN9LFxuICAgICAgICAgICAgc2VlblVpZHM6IHtib3g6IHt9LCBjaXJjbGU6IHt9fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4MSwgeTEsIHgyLCB5MiwgdGhpcy5fcXVlcnlDZWxsQ2lyY2xlLCByZXN1bHQsIHF1ZXJ5QXJncywgcHJlZGljYXRlKTtcbiAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyByZXN1bHQubGVuZ3RoID4gMCA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICBxdWVyeSh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9xdWVyeSh4MSwgeTEsIHgyLCB5MiwgZmFsc2UsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgaGl0VGVzdCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBib29sZWFuICB7XG4gICAgICAgIHJldHVybiAodGhpcy5fcXVlcnkoeDEsIHkxLCB4MiwgeTIsIHRydWUsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgaGl0VGVzdENpcmNsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIHByZWRpY2F0ZT86IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX3F1ZXJ5Q2lyY2xlKHgsIHksIHJhZGl1cywgdHJ1ZSwgcHJlZGljYXRlKTogYW55KTtcbiAgICB9XG5cbiAgICBfcXVlcnlDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCByZXN1bHQ6IGFueSwgcXVlcnlBcmdzOiBhbnksIHByZWRpY2F0ZT86IGFueSkge1xuICAgICAgICBjb25zdCBzZWVuVWlkcyA9IHF1ZXJ5QXJncy5zZWVuVWlkcztcbiAgICAgICAgY29uc3QgYm94Q2VsbCA9IHRoaXMuYm94Q2VsbHNbY2VsbEluZGV4XTtcbiAgICAgICAgaWYgKGJveENlbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGJib3hlcyA9IHRoaXMuYmJveGVzO1xuICAgICAgICAgICAgZm9yIChjb25zdCBib3hVaWQgb2YgYm94Q2VsbCkge1xuICAgICAgICAgICAgICAgIGlmICghc2VlblVpZHMuYm94W2JveFVpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblVpZHMuYm94W2JveFVpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBib3hVaWQgKiA0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHgxIDw9IGJib3hlc1tvZmZzZXQgKyAyXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh5MSA8PSBiYm94ZXNbb2Zmc2V0ICsgM10pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoeDIgPj0gYmJveGVzW29mZnNldCArIDBdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHkyID49IGJib3hlc1tvZmZzZXQgKyAxXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmJveEtleXNbYm94VWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlBcmdzLmhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuYm94S2V5c1tib3hVaWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogYmJveGVzW29mZnNldF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBiYm94ZXNbb2Zmc2V0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBiYm94ZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBiYm94ZXNbb2Zmc2V0ICsgM11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaXJjbGVDZWxsID0gdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoY2lyY2xlQ2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuY2lyY2xlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2lyY2xlVWlkIG9mIGNpcmNsZUNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2lyY2xlVWlkICogMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICB4MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlBcmdzLmhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IGNpcmNsZXNbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gY2lyY2xlc1tvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSBjaXJjbGVzW29mZnNldCArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IHggLSByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiB5IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTI6IHkgKyByYWRpdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9xdWVyeUNlbGxDaXJjbGUoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIHJlc3VsdDogYW55LCBxdWVyeUFyZ3M6IGFueSwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGNpcmNsZSA9IHF1ZXJ5QXJncy5jaXJjbGU7XG4gICAgICAgIGNvbnN0IHNlZW5VaWRzID0gcXVlcnlBcmdzLnNlZW5VaWRzO1xuICAgICAgICBjb25zdCBib3hDZWxsID0gdGhpcy5ib3hDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoYm94Q2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYmJveGVzID0gdGhpcy5iYm94ZXM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJveFVpZCBvZiBib3hDZWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWVuVWlkcy5ib3hbYm94VWlkXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkcy5ib3hbYm94VWlkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGJveFVpZCAqIDQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS54LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUucmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDNdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKHRoaXMuYm94S2V5c1tib3hVaWRdKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaXJjbGVDZWxsID0gdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoY2lyY2xlQ2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuY2lyY2xlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2lyY2xlVWlkIG9mIGNpcmNsZUNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2lyY2xlVWlkICogMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NpcmNsZXNDb2xsaWRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS55LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnJhZGl1cykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2ZvckVhY2hDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGZuOiBhbnksIGFyZzE6IGFueSwgYXJnMj86IGFueSwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGN4MSA9IHRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQoeDEpO1xuICAgICAgICBjb25zdCBjeTEgPSB0aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKHkxKTtcbiAgICAgICAgY29uc3QgY3gyID0gdGhpcy5fY29udmVydFRvWENlbGxDb29yZCh4Mik7XG4gICAgICAgIGNvbnN0IGN5MiA9IHRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoeTIpO1xuXG4gICAgICAgIGZvciAobGV0IHggPSBjeDE7IHggPD0gY3gyOyB4KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSBjeTE7IHkgPD0gY3kyOyB5KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSB0aGlzLnhDZWxsQ291bnQgKiB5ICsgeDtcbiAgICAgICAgICAgICAgICBpZiAoZm4uY2FsbCh0aGlzLCB4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCBhcmcxLCBhcmcyLCBwcmVkaWNhdGUpKSByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29udmVydFRvWENlbGxDb29yZCh4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMueENlbGxDb3VudCAtIDEsIE1hdGguZmxvb3IoeCAqIHRoaXMueFNjYWxlKSkpO1xuICAgIH1cblxuICAgIF9jb252ZXJ0VG9ZQ2VsbENvb3JkKHk6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy55Q2VsbENvdW50IC0gMSwgTWF0aC5mbG9vcih5ICogdGhpcy55U2NhbGUpKSk7XG4gICAgfVxuXG4gICAgX2NpcmNsZXNDb2xsaWRlKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHIxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIHIyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZHggPSB4MiAtIHgxO1xuICAgICAgICBjb25zdCBkeSA9IHkyIC0geTE7XG4gICAgICAgIGNvbnN0IGJvdGhSYWRpaSA9IHIxICsgcjI7XG4gICAgICAgIHJldHVybiAoYm90aFJhZGlpICogYm90aFJhZGlpKSA+IChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgfVxuXG4gICAgX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGNpcmNsZVg6IG51bWJlciwgY2lyY2xlWTogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoYWxmUmVjdFdpZHRoID0gKHgyIC0geDEpIC8gMjtcbiAgICAgICAgY29uc3QgZGlzdFggPSBNYXRoLmFicyhjaXJjbGVYIC0gKHgxICsgaGFsZlJlY3RXaWR0aCkpO1xuICAgICAgICBpZiAoZGlzdFggPiAoaGFsZlJlY3RXaWR0aCArIHJhZGl1cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbGZSZWN0SGVpZ2h0ID0gKHkyIC0geTEpIC8gMjtcbiAgICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyhjaXJjbGVZIC0gKHkxICsgaGFsZlJlY3RIZWlnaHQpKTtcbiAgICAgICAgaWYgKGRpc3RZID4gKGhhbGZSZWN0SGVpZ2h0ICsgcmFkaXVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3RYIDw9IGhhbGZSZWN0V2lkdGggfHwgZGlzdFkgPD0gaGFsZlJlY3RIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHggPSBkaXN0WCAtIGhhbGZSZWN0V2lkdGg7XG4gICAgICAgIGNvbnN0IGR5ID0gZGlzdFkgLSBoYWxmUmVjdEhlaWdodDtcbiAgICAgICAgcmV0dXJuIChkeCAqIGR4ICsgZHkgKiBkeSA8PSAocmFkaXVzICogcmFkaXVzKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmlkSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB7bWF0NCwgdmVjNH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQge2FkZER5bmFtaWNBdHRyaWJ1dGVzfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9yZW5kZXIvcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgR2x5cGhPZmZzZXRBcnJheSxcbiAgICBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgU3ltYm9sRHluYW1pY0xheW91dEFycmF5XG59IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHtXcml0aW5nTW9kZX0gZnJvbSAnLi4vc3ltYm9sL3NoYXBpbmcnO1xuXG5leHBvcnQge3VwZGF0ZUxpbmVMYWJlbHMsIGhpZGVHbHlwaHMsIGdldExhYmVsUGxhbmVNYXRyaXgsIGdldEdsQ29vcmRNYXRyaXgsIHByb2plY3QsIHBsYWNlRmlyc3RBbmRMYXN0R2x5cGgsIHh5VHJhbnNmb3JtTWF0NH07XG5cbi8qXG4gKiAjIE92ZXJ2aWV3IG9mIGNvb3JkaW5hdGUgc3BhY2VzXG4gKlxuICogIyMgVGlsZSBjb29yZGluYXRlIHNwYWNlc1xuICogRWFjaCBsYWJlbCBoYXMgYW4gYW5jaG9yLiBTb21lIGxhYmVscyBoYXZlIGNvcnJlc3BvbmRpbmcgbGluZSBnZW9tZXRyaWVzLlxuICogVGhlIHBvaW50cyBmb3IgYm90aCBhbmNob3JzIGFuZCBsaW5lcyBhcmUgc3RvcmVkIGluIHRpbGUgdW5pdHMuIEVhY2ggdGlsZSBoYXMgaXQncyBvd25cbiAqIGNvb3JkaW5hdGUgc3BhY2UgZ29pbmcgZnJvbSAoMCwgMCkgYXQgdGhlIHRvcCBsZWZ0IHRvIChFWFRFTlQsIEVYVEVOVCkgYXQgdGhlIGJvdHRvbSByaWdodC5cbiAqXG4gKiAjIyBHTCBjb29yZGluYXRlIHNwYWNlXG4gKiBBdCB0aGUgZW5kIG9mIGV2ZXJ5dGhpbmcsIHRoZSB2ZXJ0ZXggc2hhZGVyIG5lZWRzIHRvIHByb2R1Y2UgYSBwb3NpdGlvbiBpbiBHTCBjb29yZGluYXRlIHNwYWNlLFxuICogd2hpY2ggaXMgKC0xLCAxKSBhdCB0aGUgdG9wIGxlZnQgYW5kICgxLCAtMSkgaW4gdGhlIGJvdHRvbSByaWdodC5cbiAqXG4gKiAjIyBNYXAgcGl4ZWwgY29vcmRpbmF0ZSBzcGFjZXNcbiAqIEVhY2ggdGlsZSBoYXMgYSBwaXhlbCBjb29yZGluYXRlIHNwYWNlLiBJdCdzIGp1c3QgdGhlIHRpbGUgdW5pdHMgc2NhbGVkIHNvIHRoYXQgb25lIHVuaXQgaXNcbiAqIHdoYXRldmVyIGNvdW50cyBhcyAxIHBpeGVsIGF0IHRoZSBjdXJyZW50IHpvb20uXG4gKiBUaGlzIHNwYWNlIGlzIHVzZWQgZm9yIHBpdGNoLWFsaWdubWVudD1tYXAsIHJvdGF0aW9uLWFsaWdubWVudD1tYXBcbiAqXG4gKiAjIyBSb3RhdGVkIG1hcCBwaXhlbCBjb29yZGluYXRlIHNwYWNlc1xuICogTGlrZSB0aGUgYWJvdmUsIGJ1dCByb3RhdGVkIHNvIGF4aXMgb2YgdGhlIHNwYWNlIGFyZSBhbGlnbmVkIHdpdGggdGhlIHZpZXdwb3J0IGluc3RlYWQgb2YgdGhlIHRpbGUuXG4gKiBUaGlzIHNwYWNlIGlzIHVzZWQgZm9yIHBpdGNoLWFsaWdubWVudD1tYXAsIHJvdGF0aW9uLWFsaWdubWVudD12aWV3cG9ydFxuICpcbiAqICMjIFZpZXdwb3J0IHBpeGVsIGNvb3JkaW5hdGUgc3BhY2VcbiAqICgwLCAwKSBpcyBhdCB0aGUgdG9wIGxlZnQgb2YgdGhlIGNhbnZhcyBhbmQgKHBpeGVsV2lkdGgsIHBpeGVsSGVpZ2h0KSBpcyBhdCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICogb2YgdGhlIGNhbnZhcy4gVGhpcyBzcGFjZSBpcyB1c2VkIGZvciBwaXRjaC1hbGlnbm1lbnQ9dmlld3BvcnRcbiAqXG4gKlxuICogIyBWZXJ0ZXggcHJvamVjdGlvblxuICogSXQgZ29lcyByb3VnaGx5IGxpa2UgdGhpczpcbiAqIDEuIHByb2plY3QgdGhlIGFuY2hvciBhbmQgbGluZSBmcm9tIHRpbGUgdW5pdHMgaW50byB0aGUgY29ycmVjdCBsYWJlbCBjb29yZGluYXRlIHNwYWNlXG4gKiAgICAgIC0gbWFwIHBpeGVsIHNwYWNlICAgICAgICAgICBwaXRjaC1hbGlnbm1lbnQ9bWFwICAgICAgICAgcm90YXRpb24tYWxpZ25tZW50PW1hcFxuICogICAgICAtIHJvdGF0ZWQgbWFwIHBpeGVsIHNwYWNlICAgcGl0Y2gtYWxpZ25tZW50PW1hcCAgICAgICAgIHJvdGF0aW9uLWFsaWdubWVudD12aWV3cG9ydFxuICogICAgICAtIHZpZXdwb3J0IHBpeGVsIHNwYWNlICAgICAgcGl0Y2gtYWxpZ25tZW50PXZpZXdwb3J0ICAgIHJvdGF0aW9uLWFsaWdubWVudD0qXG4gKiAyLiBpZiB0aGUgbGFiZWwgZm9sbG93cyBhIGxpbmUsIGZpbmQgdGhlIHBvaW50IGFsb25nIHRoZSBsaW5lIHRoYXQgaXMgdGhlIGNvcnJlY3QgZGlzdGFuY2UgZnJvbSB0aGUgYW5jaG9yLlxuICogMy4gYWRkIHRoZSBnbHlwaCdzIGNvcm5lciBvZmZzZXQgdG8gdGhlIHBvaW50IGZyb20gc3RlcCAzXG4gKiA0LiBjb252ZXJ0IGZyb20gdGhlIGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UgdG8gZ2wgY29vcmRpbmF0ZXNcbiAqXG4gKiBGb3IgaG9yaXpvbnRhbCBsYWJlbHMgd2Ugd2FudCB0byBkbyBzdGVwIDEgaW4gdGhlIHNoYWRlciBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAobm8gY3B1IHdvcmspLlxuICogICAgICBUaGlzIGlzIHdoYXQgYHVfbGFiZWxfcGxhbmVfbWF0cml4YCBpcyB1c2VkIGZvci5cbiAqIEZvciBsYWJlbHMgYWxpZ25lZCB3aXRoIGxpbmVzIHdlIGhhdmUgdG8gc3RlcHMgMSBhbmQgMiBvbiB0aGUgY3B1IHNpbmNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBsaW5lIGdlb21ldHJ5LlxuICogICAgICBUaGlzIGlzIHdoYXQgYHVwZGF0ZUxpbmVMYWJlbHMoLi4uKWAgZG9lcy5cbiAqICAgICAgU2luY2UgdGhlIGNvbnZlcnNpb24gaXMgaGFuZGxlZCBvbiB0aGUgY3B1IHdlIGp1c3Qgc2V0IGB1X2xhYmVsX3BsYW5lX21hdHJpeGAgdG8gYW4gaWRlbnRpdHkgbWF0cml4LlxuICpcbiAqIFN0ZXBzIDMgYW5kIDQgYXJlIGRvbmUgaW4gdGhlIHNoYWRlcnMgZm9yIGFsbCBsYWJlbHMuXG4gKi9cblxuLypcbiAqIFJldHVybnMgYSBtYXRyaXggZm9yIGNvbnZlcnRpbmcgZnJvbSB0aWxlIHVuaXRzIHRvIHRoZSBjb3JyZWN0IGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIGdldExhYmVsUGxhbmVNYXRyaXgocG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgY29uc3QgbSA9IG1hdDQuY3JlYXRlKCk7XG4gICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxIC8gcGl4ZWxzVG9UaWxlVW5pdHMsIDEgLyBwaXhlbHNUb1RpbGVVbml0cywgMV0pO1xuICAgICAgICBpZiAoIXJvdGF0ZVdpdGhNYXApIHtcbiAgICAgICAgICAgIG1hdDQucm90YXRlWihtLCBtLCB0cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbWF0NC5tdWx0aXBseShtLCB0cmFuc2Zvcm0ubGFiZWxQbGFuZU1hdHJpeCwgcG9zTWF0cml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG07XG59XG5cbi8qXG4gKiBSZXR1cm5zIGEgbWF0cml4IGZvciBjb252ZXJ0aW5nIGZyb20gdGhlIGNvcnJlY3QgbGFiZWwgY29vcmRpbmF0ZSBzcGFjZSB0byBnbCBjb29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldEdsQ29vcmRNYXRyaXgocG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICBjb25zdCBtID0gbWF0NC5jbG9uZShwb3NNYXRyaXgpO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFtwaXhlbHNUb1RpbGVVbml0cywgcGl4ZWxzVG9UaWxlVW5pdHMsIDFdKTtcbiAgICAgICAgaWYgKCFyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgICAgICBtYXQ0LnJvdGF0ZVoobSwgbSwgLXRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS5nbENvb3JkTWF0cml4O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcHJvamVjdChwb2ludDogUG9pbnQsIG1hdHJpeDogbWF0NCkge1xuICAgIGNvbnN0IHBvcyA9IFtwb2ludC54LCBwb2ludC55LCAwLCAxXTtcbiAgICB4eVRyYW5zZm9ybU1hdDQocG9zLCBwb3MsIG1hdHJpeCk7XG4gICAgY29uc3QgdyA9IHBvc1szXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogbmV3IFBvaW50KHBvc1swXSAvIHcsIHBvc1sxXSAvIHcpLFxuICAgICAgICBzaWduZWREaXN0YW5jZUZyb21DYW1lcmE6IHdcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpc1Zpc2libGUoYW5jaG9yUG9zOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICBjbGlwcGluZ0J1ZmZlcjogW251bWJlciwgbnVtYmVyXSkge1xuICAgIGNvbnN0IHggPSBhbmNob3JQb3NbMF0gLyBhbmNob3JQb3NbM107XG4gICAgY29uc3QgeSA9IGFuY2hvclBvc1sxXSAvIGFuY2hvclBvc1szXTtcbiAgICBjb25zdCBpblBhZGRlZFZpZXdwb3J0ID0gKFxuICAgICAgICB4ID49IC1jbGlwcGluZ0J1ZmZlclswXSAmJlxuICAgICAgICB4IDw9IGNsaXBwaW5nQnVmZmVyWzBdICYmXG4gICAgICAgIHkgPj0gLWNsaXBwaW5nQnVmZmVyWzFdICYmXG4gICAgICAgIHkgPD0gY2xpcHBpbmdCdWZmZXJbMV0pO1xuICAgIHJldHVybiBpblBhZGRlZFZpZXdwb3J0O1xufVxuXG4vKlxuICogIFVwZGF0ZSB0aGUgYGR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXJgIGZvciB0aGUgYnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgZ2x5cGggcG9zaXRpb25zIGZvciB0aGUgY3VycmVudCBtYXAgdmlldy5cbiAqICBUaGlzIGlzIG9ubHkgcnVuIG9uIGxhYmVscyB0aGF0IGFyZSBhbGlnbmVkIHdpdGggbGluZXMuIEhvcml6b250YWwgbGFiZWxzIGFyZSBoYW5kbGVkIGVudGlyZWx5IGluIHRoZSBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUxpbmVMYWJlbHMoYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvc01hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUZXh0OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFBsYW5lTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnbENvb3JkTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBVcHJpZ2h0OiBib29sZWFuKSB7XG5cbiAgICBjb25zdCBzaXplRGF0YSA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0U2l6ZURhdGEgOiBidWNrZXQuaWNvblNpemVEYXRhO1xuICAgIGNvbnN0IHBhcnRpYWxseUV2YWx1YXRlZFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20oc2l6ZURhdGEsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pO1xuXG4gICAgY29uc3QgY2xpcHBpbmdCdWZmZXIgPSBbMjU2IC8gcGFpbnRlci53aWR0aCAqIDIgKyAxLCAyNTYgLyBwYWludGVyLmhlaWdodCAqIDIgKyAxXTtcblxuICAgIGNvbnN0IGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSA9IGlzVGV4dCA/XG4gICAgICAgIGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSA6XG4gICAgICAgIGJ1Y2tldC5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuY2xlYXIoKTtcblxuICAgIGNvbnN0IGxpbmVWZXJ0ZXhBcnJheSA9IGJ1Y2tldC5saW5lVmVydGV4QXJyYXk7XG4gICAgY29uc3QgcGxhY2VkU3ltYm9scyA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5IDogYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXk7XG5cbiAgICBjb25zdCBhc3BlY3RSYXRpbyA9IHBhaW50ZXIudHJhbnNmb3JtLndpZHRoIC8gcGFpbnRlci50cmFuc2Zvcm0uaGVpZ2h0O1xuXG4gICAgbGV0IHVzZVZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IHBsYWNlZFN5bWJvbHMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgY29uc3Qgc3ltYm9sOiBhbnkgPSBwbGFjZWRTeW1ib2xzLmdldChzKTtcbiAgICAgICAgLy8gRG9uJ3QgZG8gY2FsY3VsYXRpb25zIGZvciB2ZXJ0aWNhbCBnbHlwaHMgdW5sZXNzIHRoZSBwcmV2aW91cyBzeW1ib2wgd2FzIGhvcml6b250YWxcbiAgICAgICAgLy8gYW5kIHdlIGRldGVybWluZWQgdGhhdCB2ZXJ0aWNhbCBnbHlwaHMgd2VyZSBuZWNlc3NhcnkuXG4gICAgICAgIC8vIEFsc28gZG9uJ3QgZG8gY2FsY3VsYXRpb25zIGZvciBzeW1ib2xzIHRoYXQgYXJlIGNvbGxpZGVkIGFuZCBmdWxseSBmYWRlZCBvdXRcbiAgICAgICAgaWYgKHN5bWJvbC5oaWRkZW4gfHwgc3ltYm9sLndyaXRpbmdNb2RlID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCAmJiAhdXNlVmVydGljYWwpIHtcbiAgICAgICAgICAgIGhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEF3a3dhcmQuLi4gYnV0IHdlJ3JlIGNvdW50aW5nIG9uIHRoZSBwYWlyZWQgXCJ2ZXJ0aWNhbFwiIHN5bWJvbCBjb21pbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgaXRzIGhvcml6b250YWwgY291bnRlcnBhcnRcbiAgICAgICAgdXNlVmVydGljYWwgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBhbmNob3JQb3MgPSBbc3ltYm9sLmFuY2hvclgsIHN5bWJvbC5hbmNob3JZLCAwLCAxXTtcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KGFuY2hvclBvcywgYW5jaG9yUG9zLCBwb3NNYXRyaXgpO1xuXG4gICAgICAgIC8vIERvbid0IGJvdGhlciBjYWxjdWxhdGluZyB0aGUgY29ycmVjdCBwb2ludCBmb3IgaW52aXNpYmxlIGxhYmVscy5cbiAgICAgICAgaWYgKCFpc1Zpc2libGUoYW5jaG9yUG9zLCBjbGlwcGluZ0J1ZmZlcikpIHtcbiAgICAgICAgICAgIGhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2FtZXJhVG9BbmNob3JEaXN0YW5jZSA9IGFuY2hvclBvc1szXTtcbiAgICAgICAgY29uc3QgcGVyc3BlY3RpdmVSYXRpbyA9IDAuNSArIDAuNSAqIChjYW1lcmFUb0FuY2hvckRpc3RhbmNlIC8gcGFpbnRlci50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSk7XG5cbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoc2l6ZURhdGEsIHBhcnRpYWxseUV2YWx1YXRlZFNpemUsIHN5bWJvbCk7XG4gICAgICAgIGNvbnN0IHBpdGNoU2NhbGVkRm9udFNpemUgPSBwaXRjaFdpdGhNYXAgP1xuICAgICAgICAgICAgZm9udFNpemUgKiBwZXJzcGVjdGl2ZVJhdGlvIDpcbiAgICAgICAgICAgIGZvbnRTaXplIC8gcGVyc3BlY3RpdmVSYXRpbztcblxuICAgICAgICBjb25zdCB0aWxlQW5jaG9yUG9pbnQgPSBuZXcgUG9pbnQoc3ltYm9sLmFuY2hvclgsIHN5bWJvbC5hbmNob3JZKTtcbiAgICAgICAgY29uc3QgYW5jaG9yUG9pbnQgPSBwcm9qZWN0KHRpbGVBbmNob3JQb2ludCwgbGFiZWxQbGFuZU1hdHJpeCkucG9pbnQ7XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb25DYWNoZSA9IHt9O1xuXG4gICAgICAgIGNvbnN0IHBsYWNlVW5mbGlwcGVkOiBhbnkgPSBwbGFjZUdseXBoc0Fsb25nTGluZShzeW1ib2wsIHBpdGNoU2NhbGVkRm9udFNpemUsIGZhbHNlIC8qdW5mbGlwcGVkKi8sIGtlZXBVcHJpZ2h0LCBwb3NNYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsIGdsQ29vcmRNYXRyaXgsXG4gICAgICAgICAgICBidWNrZXQuZ2x5cGhPZmZzZXRBcnJheSwgbGluZVZlcnRleEFycmF5LCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHByb2plY3Rpb25DYWNoZSwgYXNwZWN0UmF0aW8pO1xuXG4gICAgICAgIHVzZVZlcnRpY2FsID0gcGxhY2VVbmZsaXBwZWQudXNlVmVydGljYWw7XG5cbiAgICAgICAgaWYgKHBsYWNlVW5mbGlwcGVkLm5vdEVub3VnaFJvb20gfHwgdXNlVmVydGljYWwgfHxcbiAgICAgICAgICAgIChwbGFjZVVuZmxpcHBlZC5uZWVkc0ZsaXBwaW5nICYmXG4gICAgICAgICAgICAgcGxhY2VHbHlwaHNBbG9uZ0xpbmUoc3ltYm9sLCBwaXRjaFNjYWxlZEZvbnRTaXplLCB0cnVlIC8qZmxpcHBlZCovLCBrZWVwVXByaWdodCwgcG9zTWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LCBnbENvb3JkTWF0cml4LFxuICAgICAgICAgICAgICAgICBidWNrZXQuZ2x5cGhPZmZzZXRBcnJheSwgbGluZVZlcnRleEFycmF5LCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHByb2plY3Rpb25DYWNoZSwgYXNwZWN0UmF0aW8pLm5vdEVub3VnaFJvb20pKSB7XG4gICAgICAgICAgICBoaWRlR2x5cGhzKHN5bWJvbC5udW1HbHlwaHMsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICAgIGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1Y2tldC5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGxhY2VGaXJzdEFuZExhc3RHbHlwaChmb250U2NhbGU6IG51bWJlciwgZ2x5cGhPZmZzZXRBcnJheTogR2x5cGhPZmZzZXRBcnJheSwgbGluZU9mZnNldFg6IG51bWJlciwgbGluZU9mZnNldFk6IG51bWJlciwgZmxpcDogYm9vbGVhbiwgYW5jaG9yUG9pbnQ6IFBvaW50LCB0aWxlQW5jaG9yUG9pbnQ6IFBvaW50LCBzeW1ib2w6IGFueSwgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsIHByb2plY3Rpb25DYWNoZTogYW55LCByZXR1cm5UaWxlRGlzdGFuY2U6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBnbHlwaEVuZEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIHN5bWJvbC5udW1HbHlwaHM7XG4gICAgY29uc3QgbGluZVN0YXJ0SW5kZXggPSBzeW1ib2wubGluZVN0YXJ0SW5kZXg7XG4gICAgY29uc3QgbGluZUVuZEluZGV4ID0gc3ltYm9sLmxpbmVTdGFydEluZGV4ICsgc3ltYm9sLmxpbmVMZW5ndGg7XG5cbiAgICBjb25zdCBmaXJzdEdseXBoT2Zmc2V0ID0gZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXgpO1xuICAgIGNvbnN0IGxhc3RHbHlwaE9mZnNldCA9IGdseXBoT2Zmc2V0QXJyYXkuZ2V0b2Zmc2V0WChnbHlwaEVuZEluZGV4IC0gMSk7XG5cbiAgICBjb25zdCBmaXJzdFBsYWNlZEdseXBoID0gcGxhY2VHbHlwaEFsb25nTGluZShmb250U2NhbGUgKiBmaXJzdEdseXBoT2Zmc2V0LCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSwgcmV0dXJuVGlsZURpc3RhbmNlKTtcbiAgICBpZiAoIWZpcnN0UGxhY2VkR2x5cGgpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbGFzdFBsYWNlZEdseXBoID0gcGxhY2VHbHlwaEFsb25nTGluZShmb250U2NhbGUgKiBsYXN0R2x5cGhPZmZzZXQsIGxpbmVPZmZzZXRYLCBsaW5lT2Zmc2V0WSwgZmxpcCwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgc3ltYm9sLnNlZ21lbnQsXG4gICAgICAgIGxpbmVTdGFydEluZGV4LCBsaW5lRW5kSW5kZXgsIGxpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeCwgcHJvamVjdGlvbkNhY2hlLCByZXR1cm5UaWxlRGlzdGFuY2UpO1xuICAgIGlmICghbGFzdFBsYWNlZEdseXBoKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB7Zmlyc3Q6IGZpcnN0UGxhY2VkR2x5cGgsIGxhc3Q6IGxhc3RQbGFjZWRHbHlwaH07XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVzT3JpZW50YXRpb25DaGFuZ2Uod3JpdGluZ01vZGUsIGZpcnN0UG9pbnQsIGxhc3RQb2ludCwgYXNwZWN0UmF0aW8pIHtcbiAgICBpZiAod3JpdGluZ01vZGUgPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwpIHtcbiAgICAgICAgLy8gT24gdG9wIG9mIGNob29zaW5nIHdoZXRoZXIgdG8gZmxpcCwgY2hvb3NlIHdoZXRoZXIgdG8gcmVuZGVyIHRoaXMgdmVyc2lvbiBvZiB0aGUgZ2x5cGhzIG9yIHRoZSBhbHRlcm5hdGVcbiAgICAgICAgLy8gdmVydGljYWwgZ2x5cGhzLiBXZSBjYW4ndCBqdXN0IGZpbHRlciBvdXQgdmVydGljYWwgZ2x5cGhzIGluIHRoZSBob3Jpem9udGFsIHJhbmdlIGJlY2F1c2UgdGhlIGhvcml6b250YWxcbiAgICAgICAgLy8gYW5kIHZlcnRpY2FsIHZlcnNpb25zIGNhbiBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCBwcm9qZWN0aW9ucyB3aGljaCBjb3VsZCBsZWFkIHRvIGFuZ2xlcyB3aGVyZSBib3RoIG9yXG4gICAgICAgIC8vIG5laXRoZXIgc2hvd2VkLlxuICAgICAgICBjb25zdCByaXNlID0gTWF0aC5hYnMobGFzdFBvaW50LnkgLSBmaXJzdFBvaW50LnkpO1xuICAgICAgICBjb25zdCBydW4gPSBNYXRoLmFicyhsYXN0UG9pbnQueCAtIGZpcnN0UG9pbnQueCkgKiBhc3BlY3RSYXRpbztcbiAgICAgICAgaWYgKHJpc2UgPiBydW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7dXNlVmVydGljYWw6IHRydWV9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdyaXRpbmdNb2RlID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCA/IGZpcnN0UG9pbnQueSA8IGxhc3RQb2ludC55IDogZmlyc3RQb2ludC54ID4gbGFzdFBvaW50LngpIHtcbiAgICAgICAgLy8gSW5jbHVkZXMgXCJob3Jpem9udGFsT25seVwiIGNhc2UgZm9yIGxhYmVscyB3aXRob3V0IHZlcnRpY2FsIGdseXBoc1xuICAgICAgICByZXR1cm4ge25lZWRzRmxpcHBpbmc6IHRydWV9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwbGFjZUdseXBoc0Fsb25nTGluZShzeW1ib2wsIGZvbnRTaXplLCBmbGlwLCBrZWVwVXByaWdodCwgcG9zTWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LCBnbENvb3JkTWF0cml4LCBnbHlwaE9mZnNldEFycmF5LCBsaW5lVmVydGV4QXJyYXksIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgcHJvamVjdGlvbkNhY2hlLCBhc3BlY3RSYXRpbykge1xuICAgIGNvbnN0IGZvbnRTY2FsZSA9IGZvbnRTaXplIC8gMjQ7XG4gICAgY29uc3QgbGluZU9mZnNldFggPSBzeW1ib2wubGluZU9mZnNldFggKiBmb250U2NhbGU7XG4gICAgY29uc3QgbGluZU9mZnNldFkgPSBzeW1ib2wubGluZU9mZnNldFkgKiBmb250U2NhbGU7XG5cbiAgICBsZXQgcGxhY2VkR2x5cGhzO1xuICAgIGlmIChzeW1ib2wubnVtR2x5cGhzID4gMSkge1xuICAgICAgICBjb25zdCBnbHlwaEVuZEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIHN5bWJvbC5udW1HbHlwaHM7XG4gICAgICAgIGNvbnN0IGxpbmVTdGFydEluZGV4ID0gc3ltYm9sLmxpbmVTdGFydEluZGV4O1xuICAgICAgICBjb25zdCBsaW5lRW5kSW5kZXggPSBzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wubGluZUxlbmd0aDtcblxuICAgICAgICAvLyBQbGFjZSB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGdseXBoIGluIHRoZSBsYWJlbCBmaXJzdCwgc28gd2UgY2FuIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gdGhlIG92ZXJhbGwgb3JpZW50YXRpb24gb2YgdGhlIGxhYmVsIGFuZCBkZXRlcm1pbmUgd2hldGhlciBpdCBuZWVkcyB0byBiZSBmbGlwcGVkIGluIGtlZXBVcHJpZ2h0IG1vZGVcbiAgICAgICAgY29uc3QgZmlyc3RBbmRMYXN0R2x5cGggPSBwbGFjZUZpcnN0QW5kTGFzdEdseXBoKGZvbnRTY2FsZSwgZ2x5cGhPZmZzZXRBcnJheSwgbGluZU9mZnNldFgsIGxpbmVPZmZzZXRZLCBmbGlwLCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBzeW1ib2wsIGxpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeCwgcHJvamVjdGlvbkNhY2hlLCBmYWxzZSk7XG4gICAgICAgIGlmICghZmlyc3RBbmRMYXN0R2x5cGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7bm90RW5vdWdoUm9vbTogdHJ1ZX07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RQb2ludCA9IHByb2plY3QoZmlyc3RBbmRMYXN0R2x5cGguZmlyc3QucG9pbnQsIGdsQ29vcmRNYXRyaXgpLnBvaW50O1xuICAgICAgICBjb25zdCBsYXN0UG9pbnQgPSBwcm9qZWN0KGZpcnN0QW5kTGFzdEdseXBoLmxhc3QucG9pbnQsIGdsQ29vcmRNYXRyaXgpLnBvaW50O1xuXG4gICAgICAgIGlmIChrZWVwVXByaWdodCAmJiAhZmxpcCkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZW50YXRpb25DaGFuZ2UgPSByZXF1aXJlc09yaWVudGF0aW9uQ2hhbmdlKHN5bWJvbC53cml0aW5nTW9kZSwgZmlyc3RQb2ludCwgbGFzdFBvaW50LCBhc3BlY3RSYXRpbyk7XG4gICAgICAgICAgICBpZiAob3JpZW50YXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZW50YXRpb25DaGFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwbGFjZWRHbHlwaHMgPSBbZmlyc3RBbmRMYXN0R2x5cGguZmlyc3RdO1xuICAgICAgICBmb3IgKGxldCBnbHlwaEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIDE7IGdseXBoSW5kZXggPCBnbHlwaEVuZEluZGV4IC0gMTsgZ2x5cGhJbmRleCsrKSB7XG4gICAgICAgICAgICAvLyBTaW5jZSBmaXJzdCBhbmQgbGFzdCBnbHlwaCBmaXQgb24gdGhlIGxpbmUsIHdlJ3JlIHN1cmUgdGhhdCB0aGUgcmVzdCBvZiB0aGUgZ2x5cGhzIGNhbiBiZSBwbGFjZWRcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICAgIHBsYWNlZEdseXBocy5wdXNoKHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKGdseXBoSW5kZXgpLCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydEluZGV4LCBsaW5lRW5kSW5kZXgsIGxpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeCwgcHJvamVjdGlvbkNhY2hlLCBmYWxzZSkpO1xuICAgICAgICB9XG4gICAgICAgIHBsYWNlZEdseXBocy5wdXNoKGZpcnN0QW5kTGFzdEdseXBoLmxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9ubHkgYSBzaW5nbGUgZ2x5cGggdG8gcGxhY2VcbiAgICAgICAgLy8gU28sIGRldGVybWluZSB3aGV0aGVyIHRvIGZsaXAgYmFzZWQgb24gcHJvamVjdGVkIGFuZ2xlIG9mIHRoZSBsaW5lIHNlZ21lbnQgaXQncyBvblxuICAgICAgICBpZiAoa2VlcFVwcmlnaHQgJiYgIWZsaXApIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBwcm9qZWN0KHRpbGVBbmNob3JQb2ludCwgcG9zTWF0cml4KS5wb2ludDtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVWZXJ0ZXhJbmRleCA9IChzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wuc2VnbWVudCArIDEpO1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgICAgY29uc3QgdGlsZVNlZ21lbnRFbmQgPSBuZXcgUG9pbnQobGluZVZlcnRleEFycmF5LmdldHgodGlsZVZlcnRleEluZGV4KSwgbGluZVZlcnRleEFycmF5LmdldHkodGlsZVZlcnRleEluZGV4KSk7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRWZXJ0ZXggPSBwcm9qZWN0KHRpbGVTZWdtZW50RW5kLCBwb3NNYXRyaXgpO1xuICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgYW5jaG9yIHdpbGwgYmUgaW4gdGhlIHZpZXdwb3J0LCBidXQgdGhlIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG1heSBiZVxuICAgICAgICAgICAgLy8gYmVoaW5kIHRoZSBwbGFuZSBvZiB0aGUgY2FtZXJhLCBpbiB3aGljaCBjYXNlIHdlIGNhbiB1c2UgYSBwb2ludCBhdCBhbnkgYXJiaXRyYXJ5IChjbG9zZXIpXG4gICAgICAgICAgICAvLyBwb2ludCBvbiB0aGUgc2VnbWVudC5cbiAgICAgICAgICAgIGNvbnN0IGIgPSAocHJvamVjdGVkVmVydGV4LnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSA+IDApID9cbiAgICAgICAgICAgICAgICBwcm9qZWN0ZWRWZXJ0ZXgucG9pbnQgOlxuICAgICAgICAgICAgICAgIHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudCh0aWxlQW5jaG9yUG9pbnQsIHRpbGVTZWdtZW50RW5kLCBhLCAxLCBwb3NNYXRyaXgpO1xuXG4gICAgICAgICAgICBjb25zdCBvcmllbnRhdGlvbkNoYW5nZSA9IHJlcXVpcmVzT3JpZW50YXRpb25DaGFuZ2Uoc3ltYm9sLndyaXRpbmdNb2RlLCBhLCBiLCBhc3BlY3RSYXRpbyk7XG4gICAgICAgICAgICBpZiAob3JpZW50YXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZW50YXRpb25DaGFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBjb25zdCBzaW5nbGVHbHlwaCA9IHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXgpLCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICAgICAgc3ltYm9sLmxpbmVTdGFydEluZGV4LCBzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wubGluZUxlbmd0aCwgbGluZVZlcnRleEFycmF5LCBsYWJlbFBsYW5lTWF0cml4LCBwcm9qZWN0aW9uQ2FjaGUsIGZhbHNlKTtcbiAgICAgICAgaWYgKCFzaW5nbGVHbHlwaClcbiAgICAgICAgICAgIHJldHVybiB7bm90RW5vdWdoUm9vbTogdHJ1ZX07XG5cbiAgICAgICAgcGxhY2VkR2x5cGhzID0gW3NpbmdsZUdseXBoXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGdseXBoOiBhbnkgb2YgcGxhY2VkR2x5cGhzKSB7XG4gICAgICAgIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgZ2x5cGgucG9pbnQsIGdseXBoLmFuZ2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0VHJ1bmNhdGVkTGluZVNlZ21lbnQocHJldmlvdXNUaWxlUG9pbnQ6IFBvaW50LCBjdXJyZW50VGlsZVBvaW50OiBQb2ludCwgcHJldmlvdXNQcm9qZWN0ZWRQb2ludDogUG9pbnQsIG1pbmltdW1MZW5ndGg6IG51bWJlciwgcHJvamVjdGlvbk1hdHJpeDogbWF0NCkge1xuICAgIC8vIFdlIGFyZSBhc3N1bWluZyBcInByZXZpb3VzVGlsZVBvaW50XCIgd29uJ3QgcHJvamVjdCB0byBhIHBvaW50IHdpdGhpbiBvbmUgdW5pdCBvZiB0aGUgY2FtZXJhIHBsYW5lXG4gICAgLy8gSWYgaXQgZGlkLCB0aGF0IHdvdWxkIG1lYW4gb3VyIGxhYmVsIGV4dGVuZGVkIGFsbCB0aGUgd2F5IG91dCBmcm9tIHdpdGhpbiB0aGUgdmlld3BvcnQgdG8gYSAodmVyeSBkaXN0YW50KVxuICAgIC8vIHBvaW50IG5lYXIgdGhlIHBsYW5lIG9mIHRoZSBjYW1lcmEuIFdlIHdvdWxkbid0IGJlIGFibGUgdG8gcmVuZGVyIHRoZSBsYWJlbCBhbnl3YXkgb25jZSBpdCBjcm9zc2VkIHRoZVxuICAgIC8vIHBsYW5lIG9mIHRoZSBjYW1lcmEuXG4gICAgY29uc3QgcHJvamVjdGVkVW5pdFZlcnRleCA9IHByb2plY3QocHJldmlvdXNUaWxlUG9pbnQuYWRkKHByZXZpb3VzVGlsZVBvaW50LnN1YihjdXJyZW50VGlsZVBvaW50KS5fdW5pdCgpKSwgcHJvamVjdGlvbk1hdHJpeCkucG9pbnQ7XG4gICAgY29uc3QgcHJvamVjdGVkVW5pdFNlZ21lbnQgPSBwcmV2aW91c1Byb2plY3RlZFBvaW50LnN1Yihwcm9qZWN0ZWRVbml0VmVydGV4KTtcblxuICAgIHJldHVybiBwcmV2aW91c1Byb2plY3RlZFBvaW50LmFkZChwcm9qZWN0ZWRVbml0U2VnbWVudC5fbXVsdChtaW5pbXVtTGVuZ3RoIC8gcHJvamVjdGVkVW5pdFNlZ21lbnQubWFnKCkpKTtcbn1cblxuZnVuY3Rpb24gcGxhY2VHbHlwaEFsb25nTGluZShvZmZzZXRYOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRYOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRZOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsaXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclBvaW50OiBQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUFuY2hvclBvaW50OiBQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yU2VnbWVudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lRW5kSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25DYWNoZToge1tudW1iZXJdOiBQb2ludH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblRpbGVEaXN0YW5jZTogYm9vbGVhbikge1xuXG4gICAgY29uc3QgY29tYmluZWRPZmZzZXRYID0gZmxpcCA/XG4gICAgICAgIG9mZnNldFggLSBsaW5lT2Zmc2V0WCA6XG4gICAgICAgIG9mZnNldFggKyBsaW5lT2Zmc2V0WDtcblxuICAgIGxldCBkaXIgPSBjb21iaW5lZE9mZnNldFggPiAwID8gMSA6IC0xO1xuXG4gICAgbGV0IGFuZ2xlID0gMDtcbiAgICBpZiAoZmxpcCkge1xuICAgICAgICAvLyBUaGUgbGFiZWwgbmVlZHMgdG8gYmUgZmxpcHBlZCB0byBrZWVwIHRleHQgdXByaWdodC5cbiAgICAgICAgLy8gSXRlcmF0ZSBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24uXG4gICAgICAgIGRpciAqPSAtMTtcbiAgICAgICAgYW5nbGUgPSBNYXRoLlBJO1xuICAgIH1cblxuICAgIGlmIChkaXIgPCAwKSBhbmdsZSArPSBNYXRoLlBJO1xuXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IGRpciA+IDAgP1xuICAgICAgICBsaW5lU3RhcnRJbmRleCArIGFuY2hvclNlZ21lbnQgOlxuICAgICAgICBsaW5lU3RhcnRJbmRleCArIGFuY2hvclNlZ21lbnQgKyAxO1xuXG4gICAgY29uc3QgaW5pdGlhbEluZGV4ID0gY3VycmVudEluZGV4O1xuICAgIGxldCBjdXJyZW50ID0gYW5jaG9yUG9pbnQ7XG4gICAgbGV0IHByZXYgPSBhbmNob3JQb2ludDtcbiAgICBsZXQgZGlzdGFuY2VUb1ByZXYgPSAwO1xuICAgIGxldCBjdXJyZW50U2VnbWVudERpc3RhbmNlID0gMDtcbiAgICBjb25zdCBhYnNPZmZzZXRYID0gTWF0aC5hYnMoY29tYmluZWRPZmZzZXRYKTtcblxuICAgIHdoaWxlIChkaXN0YW5jZVRvUHJldiArIGN1cnJlbnRTZWdtZW50RGlzdGFuY2UgPD0gYWJzT2Zmc2V0WCkge1xuICAgICAgICBjdXJyZW50SW5kZXggKz0gZGlyO1xuXG4gICAgICAgIC8vIG9mZnNldCBkb2VzIG5vdCBmaXQgb24gdGhlIHByb2plY3RlZCBsaW5lXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPCBsaW5lU3RhcnRJbmRleCB8fCBjdXJyZW50SW5kZXggPj0gbGluZUVuZEluZGV4KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcHJldiA9IGN1cnJlbnQ7XG5cbiAgICAgICAgY3VycmVudCA9IHByb2plY3Rpb25DYWNoZVtjdXJyZW50SW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmVydGV4ID0gbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KGN1cnJlbnRJbmRleCksIGxpbmVWZXJ0ZXhBcnJheS5nZXR5KGN1cnJlbnRJbmRleCkpO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHByb2plY3QoY3VycmVudFZlcnRleCwgbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICBpZiAocHJvamVjdGlvbi5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEgPiAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHByb2plY3Rpb25DYWNoZVtjdXJyZW50SW5kZXhdID0gcHJvamVjdGlvbi5wb2ludDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHZlcnRleCBpcyBiZWhpbmQgdGhlIHBsYW5lIG9mIHRoZSBjYW1lcmEsIHNvIHdlIGNhbid0IHByb2plY3QgaXRcbiAgICAgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSdsbCBjcmVhdGUgYSB2ZXJ0ZXggYWxvbmcgdGhlIGxpbmUgdGhhdCdzIGZhciBlbm91Z2ggdG8gaW5jbHVkZSB0aGUgZ2x5cGhcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0xpbmVWZXJ0ZXhJbmRleCA9IGN1cnJlbnRJbmRleCAtIGRpcjtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1RpbGVQb2ludCA9IGRpc3RhbmNlVG9QcmV2ID09PSAwID9cbiAgICAgICAgICAgICAgICAgICAgdGlsZUFuY2hvclBvaW50IDpcbiAgICAgICAgICAgICAgICAgICAgbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KHByZXZpb3VzTGluZVZlcnRleEluZGV4KSwgbGluZVZlcnRleEFycmF5LmdldHkocHJldmlvdXNMaW5lVmVydGV4SW5kZXgpKTtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBjYWNoZSBiZWNhdXNlIHRoZSBuZXcgdmVydGV4IG1pZ2h0IG5vdCBiZSBmYXIgZW5vdWdoIG91dCBmb3IgZnV0dXJlIGdseXBocyBvbiB0aGUgc2FtZSBzZWdtZW50XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudChwcmV2aW91c1RpbGVQb2ludCwgY3VycmVudFZlcnRleCwgcHJldiwgYWJzT2Zmc2V0WCAtIGRpc3RhbmNlVG9QcmV2ICsgMSwgbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkaXN0YW5jZVRvUHJldiArPSBjdXJyZW50U2VnbWVudERpc3RhbmNlO1xuICAgICAgICBjdXJyZW50U2VnbWVudERpc3RhbmNlID0gcHJldi5kaXN0KGN1cnJlbnQpO1xuICAgIH1cblxuICAgIC8vIFRoZSBwb2ludCBpcyBvbiB0aGUgY3VycmVudCBzZWdtZW50LiBJbnRlcnBvbGF0ZSB0byBmaW5kIGl0LlxuICAgIGNvbnN0IHNlZ21lbnRJbnRlcnBvbGF0aW9uVCA9IChhYnNPZmZzZXRYIC0gZGlzdGFuY2VUb1ByZXYpIC8gY3VycmVudFNlZ21lbnREaXN0YW5jZTtcbiAgICBjb25zdCBwcmV2VG9DdXJyZW50ID0gY3VycmVudC5zdWIocHJldik7XG4gICAgY29uc3QgcCA9IHByZXZUb0N1cnJlbnQubXVsdChzZWdtZW50SW50ZXJwb2xhdGlvblQpLl9hZGQocHJldik7XG5cbiAgICAvLyBvZmZzZXQgdGhlIHBvaW50IGZyb20gdGhlIGxpbmUgdG8gdGV4dC1vZmZzZXQgYW5kIGljb24tb2Zmc2V0XG4gICAgcC5fYWRkKHByZXZUb0N1cnJlbnQuX3VuaXQoKS5fcGVycCgpLl9tdWx0KGxpbmVPZmZzZXRZICogZGlyKSk7XG5cbiAgICBjb25zdCBzZWdtZW50QW5nbGUgPSBhbmdsZSArIE1hdGguYXRhbjIoY3VycmVudC55IC0gcHJldi55LCBjdXJyZW50LnggLSBwcmV2LngpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcG9pbnQ6IHAsXG4gICAgICAgIGFuZ2xlOiBzZWdtZW50QW5nbGUsXG4gICAgICAgIHRpbGVEaXN0YW5jZTogcmV0dXJuVGlsZURpc3RhbmNlID9cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmV2VGlsZURpc3RhbmNlOiAoY3VycmVudEluZGV4IC0gZGlyKSA9PT0gaW5pdGlhbEluZGV4ID8gMCA6IGxpbmVWZXJ0ZXhBcnJheS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcihjdXJyZW50SW5kZXggLSBkaXIpLFxuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50Vmlld3BvcnREaXN0YW5jZTogYWJzT2Zmc2V0WCAtIGRpc3RhbmNlVG9QcmV2XG4gICAgICAgICAgICB9IDogbnVsbFxuICAgIH07XG59XG5cbmNvbnN0IGhpZGRlbkdseXBoQXR0cmlidXRlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWy1JbmZpbml0eSwgLUluZmluaXR5LCAwLCAtSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLUluZmluaXR5LCAtSW5maW5pdHksIDAsIC1JbmZpbml0eSwgLUluZmluaXR5LCAwXSk7XG5cbi8vIEhpZGUgdGhlbSBieSBtb3ZpbmcgdGhlbSBvZmZzY3JlZW4uIFdlIHN0aWxsIG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhlIGJ1ZmZlclxuLy8gYmVjYXVzZSB0aGUgZHluYW1pYyBidWZmZXIgaXMgcGFpcmVkIHdpdGggYSBzdGF0aWMgYnVmZmVyIHRoYXQgZG9lc24ndCBnZXQgdXBkYXRlZC5cbmZ1bmN0aW9uIGhpZGVHbHlwaHMobnVtOiBudW1iZXIsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTogU3ltYm9sRHluYW1pY0xheW91dEFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkucmVzaXplKG9mZnNldCArIDQpO1xuICAgICAgICAvLyBTaW5jZSBhbGwgaGlkZGVuIGdseXBocyBoYXZlIHRoZSBzYW1lIGF0dHJpYnV0ZXMsIHdlIGNhbiBidWlsZCB1cCB0aGUgYXJyYXkgZmFzdGVyIHdpdGggYSBzaW5nbGUgY2FsbCB0byBGbG9hdDMyQXJyYXkuc2V0XG4gICAgICAgIC8vIGZvciBlYWNoIHNldCBvZiBmb3VyIHZlcnRpY2VzLCBpbnN0ZWFkIG9mIGNhbGxpbmcgYWRkRHluYW1pY0F0dHJpYnV0ZXMgZm9yIGVhY2ggdmVydGV4LlxuICAgICAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZmxvYXQzMi5zZXQoaGlkZGVuR2x5cGhBdHRyaWJ1dGVzLCBvZmZzZXQgKiAzKTtcbiAgICB9XG59XG5cbi8vIEZvciBsaW5lIGxhYmVsIGxheW91dCwgd2UncmUgbm90IHVzaW5nIHogb3V0cHV0IGFuZCBvdXIgdyBpbnB1dCBpcyBhbHdheXMgMVxuLy8gVGhpcyBjdXN0b20gbWF0cml4IHRyYW5zZm9ybWF0aW9uIGlnbm9yZXMgdGhvc2UgY29tcG9uZW50cyB0byBtYWtlIHByb2plY3Rpb24gZmFzdGVyXG5mdW5jdGlvbiB4eVRyYW5zZm9ybU1hdDQob3V0OiB2ZWM0LCBhOiB2ZWM0LCBtOiBtYXQ0KSB7XG4gICAgY29uc3QgeCA9IGFbMF0sIHkgPSBhWzFdO1xuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNV0gKiB5ICsgbVsxM107XG4gICAgb3V0WzNdID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTVdO1xuICAgIHJldHVybiBvdXQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCAqIGFzIGludGVyc2VjdGlvblRlc3RzIGZyb20gJy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCBHcmlkIGZyb20gJy4vZ3JpZF9pbmRleCc7XG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbmltcG9ydCAqIGFzIHByb2plY3Rpb24gZnJvbSAnLi4vc3ltYm9sL3Byb2plY3Rpb24nO1xuXG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7U2luZ2xlQ29sbGlzaW9uQm94fSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHtcbiAgICBHbHlwaE9mZnNldEFycmF5LFxuICAgIFN5bWJvbExpbmVWZXJ0ZXhBcnJheVxufSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcblxuLy8gV2hlbiBhIHN5bWJvbCBjcm9zc2VzIHRoZSBlZGdlIHRoYXQgY2F1c2VzIGl0IHRvIGJlIGluY2x1ZGVkIGluXG4vLyBjb2xsaXNpb24gZGV0ZWN0aW9uLCBpdCB3aWxsIGNhdXNlIGNoYW5nZXMgaW4gdGhlIHN5bWJvbHMgYXJvdW5kXG4vLyBpdC4gVGhpcyBjb25zdGFudCBzcGVjaWZpZXMgaG93IG1hbnkgcGl4ZWxzIHRvIHBhZCB0aGUgZWRnZSBvZlxuLy8gdGhlIHZpZXdwb3J0IGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uIHNvIHRoYXQgdGhlIGJ1bGsgb2YgdGhlIGNoYW5nZXNcbi8vIG9jY3VyIG9mZnNjcmVlbi4gTWFraW5nIHRoaXMgY29uc3RhbnQgZ3JlYXRlciBpbmNyZWFzZXMgbGFiZWxcbi8vIHN0YWJpbGl0eSwgYnV0IGl0J3MgZXhwZW5zaXZlLlxuY29uc3Qgdmlld3BvcnRQYWRkaW5nID0gMTAwO1xuXG4vKipcbiAqIEEgY29sbGlzaW9uIGluZGV4IHVzZWQgdG8gcHJldmVudCBzeW1ib2xzIGZyb20gb3ZlcmxhcHBpbmcuIEl0IGtlZXAgdHJhY2tzIG9mXG4gKiB3aGVyZSBwcmV2aW91cyBzeW1ib2xzIGhhdmUgYmVlbiBwbGFjZWQgYW5kIGlzIHVzZWQgdG8gY2hlY2sgaWYgYSBuZXdcbiAqIHN5bWJvbCBvdmVybGFwcyB3aXRoIGFueSBwcmV2aW91c2x5IGFkZGVkIHN5bWJvbHMuXG4gKlxuICogVGhlcmUgYXJlIHR3byBzdGVwcyB0byBpbnNlcnRpb246IGZpcnN0IHBsYWNlQ29sbGlzaW9uQm94L0NpcmNsZXMgY2hlY2tzIGlmXG4gKiB0aGVyZSdzIHJvb20gZm9yIGEgc3ltYm9sLCB0aGVuIGluc2VydENvbGxpc2lvbkJveC9DaXJjbGVzIGFjdHVhbGx5IHB1dHMgdGhlXG4gKiBzeW1ib2wgaW4gdGhlIGluZGV4LiBUaGUgdHdvIHN0ZXAgcHJvY2VzcyBhbGxvd3MgcGFpcmVkIHN5bWJvbHMgdG8gYmUgaW5zZXJ0ZWRcbiAqIHRvZ2V0aGVyIGV2ZW4gaWYgdGhleSBvdmVybGFwLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbGxpc2lvbkluZGV4IHtcbiAgICBncmlkOiBHcmlkO1xuICAgIGlnbm9yZWRHcmlkOiBHcmlkO1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIHBpdGNoZmFjdG9yOiBudW1iZXI7XG4gICAgc2NyZWVuUmlnaHRCb3VuZGFyeTogbnVtYmVyO1xuICAgIHNjcmVlbkJvdHRvbUJvdW5kYXJ5OiBudW1iZXI7XG4gICAgZ3JpZFJpZ2h0Qm91bmRhcnk6IG51bWJlcjtcbiAgICBncmlkQm90dG9tQm91bmRhcnk6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgZ3JpZDogR3JpZCA9IG5ldyBHcmlkKHRyYW5zZm9ybS53aWR0aCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nLCAyNSksXG4gICAgICAgIGlnbm9yZWRHcmlkOiBHcmlkID0gbmV3IEdyaWQodHJhbnNmb3JtLndpZHRoICsgMiAqIHZpZXdwb3J0UGFkZGluZywgdHJhbnNmb3JtLmhlaWdodCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIDI1KVxuICAgICkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcblxuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmlnbm9yZWRHcmlkID0gaWdub3JlZEdyaWQ7XG4gICAgICAgIHRoaXMucGl0Y2hmYWN0b3IgPSBNYXRoLmNvcyh0cmFuc2Zvcm0uX3BpdGNoKSAqIHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeSA9IHRyYW5zZm9ybS53aWR0aCArIHZpZXdwb3J0UGFkZGluZztcbiAgICAgICAgdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeSA9IHRyYW5zZm9ybS5oZWlnaHQgKyB2aWV3cG9ydFBhZGRpbmc7XG4gICAgICAgIHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnkgPSB0cmFuc2Zvcm0ud2lkdGggKyAyICogdmlld3BvcnRQYWRkaW5nO1xuICAgICAgICB0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeSA9IHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nO1xuICAgIH1cblxuICAgIHBsYWNlQ29sbGlzaW9uQm94KGNvbGxpc2lvbkJveDogU2luZ2xlQ29sbGlzaW9uQm94LCBhbGxvd092ZXJsYXA6IGJvb2xlYW4sIHRleHRQaXhlbFJhdGlvOiBudW1iZXIsIHBvc01hdHJpeDogbWF0NCwgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGU/OiBhbnkpOiB7IGJveDogQXJyYXk8bnVtYmVyPiwgb2Zmc2NyZWVuOiBib29sZWFuIH0ge1xuICAgICAgICBjb25zdCBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8ocG9zTWF0cml4LCBjb2xsaXNpb25Cb3guYW5jaG9yUG9pbnRYLCBjb2xsaXNpb25Cb3guYW5jaG9yUG9pbnRZKTtcbiAgICAgICAgY29uc3QgdGlsZVRvVmlld3BvcnQgPSB0ZXh0UGl4ZWxSYXRpbyAqIHByb2plY3RlZFBvaW50LnBlcnNwZWN0aXZlUmF0aW87XG4gICAgICAgIGNvbnN0IHRsWCA9IGNvbGxpc2lvbkJveC54MSAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueDtcbiAgICAgICAgY29uc3QgdGxZID0gY29sbGlzaW9uQm94LnkxICogdGlsZVRvVmlld3BvcnQgKyBwcm9qZWN0ZWRQb2ludC5wb2ludC55O1xuICAgICAgICBjb25zdCBiclggPSBjb2xsaXNpb25Cb3gueDIgKiB0aWxlVG9WaWV3cG9ydCArIHByb2plY3RlZFBvaW50LnBvaW50Lng7XG4gICAgICAgIGNvbnN0IGJyWSA9IGNvbGxpc2lvbkJveC55MiAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNJbnNpZGVHcmlkKHRsWCwgdGxZLCBiclgsIGJyWSkgfHxcbiAgICAgICAgICAgICghYWxsb3dPdmVybGFwICYmIHRoaXMuZ3JpZC5oaXRUZXN0KHRsWCwgdGxZLCBiclgsIGJyWSwgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3g6IFtdLFxuICAgICAgICAgICAgICAgIG9mZnNjcmVlbjogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYm94OiBbdGxYLCB0bFksIGJyWCwgYnJZXSxcbiAgICAgICAgICAgIG9mZnNjcmVlbjogdGhpcy5pc09mZnNjcmVlbih0bFgsIHRsWSwgYnJYLCBiclkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXBwcm94aW1hdGVUaWxlRGlzdGFuY2UodGlsZURpc3RhbmNlOiBhbnksIGxhc3RTZWdtZW50QW5nbGU6IG51bWJlciwgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlciwgY2FtZXJhVG9BbmNob3JEaXN0YW5jZTogbnVtYmVyLCBwaXRjaFdpdGhNYXA6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcXVpY2sgYW5kIGRpcnR5IHNvbHV0aW9uIGZvciBjaG9zaW5nIHdoaWNoIGNvbGxpc2lvbiBjaXJjbGVzIHRvIHVzZSAoc2luY2UgY29sbGlzaW9uIGNpcmNsZXMgYXJlXG4gICAgICAgIC8vIGxhaWQgb3V0IGluIHRpbGUgdW5pdHMpLiBJZGVhbGx5LCBJIHRoaW5rIHdlIHNob3VsZCBnZW5lcmF0ZSBjb2xsaXNpb24gY2lyY2xlcyBvbiB0aGUgZmx5IGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzXG4gICAgICAgIC8vIGF0IHRoZSB0aW1lIHdlIGRvIGNvbGxpc2lvbiBkZXRlY3Rpb24uXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNTQ3NFxuXG4gICAgICAgIC8vIGluY2lkZW5jZVN0cmV0Y2ggaXMgdGhlIHJhdGlvIG9mIGhvdyBtdWNoIHkgc3BhY2UgYSBsYWJlbCB0YWtlcyB1cCBvbiBhIHRpbGUgd2hpbGUgZHJhd24gcGVycGVuZGljdWxhciB0byB0aGUgdmlld3BvcnQgdnNcbiAgICAgICAgLy8gIGhvdyBtdWNoIHNwYWNlIGl0IHdvdWxkIHRha2UgdXAgaWYgaXQgd2VyZSBkcmF3biBmbGF0IG9uIHRoZSB0aWxlXG4gICAgICAgIC8vIFVzaW5nIGxhdyBvZiBzaW5lcywgY2FtZXJhX3RvX2FuY2hvci9zaW4oZ3JvdW5kX2FuZ2xlKSA9IGNhbWVyYV90b19jZW50ZXIvc2luKGluY2lkZW5jZV9hbmdsZSlcbiAgICAgICAgLy8gSW5jaWRlbmNlIGFuZ2xlIDkwIC0+IGhlYWQgb24sIHNpbihpbmNpZGVuY2VfYW5nbGUpID0gMSwgbm8gc3RyZXRjaFxuICAgICAgICAvLyBJbmNpZGVuY2UgYW5nbGUgMSAtPiB2ZXJ5IG9ibGlxdWUsIHNpbihpbmNpZGVuY2VfYW5nbGUpID1+IDAsIGxvdHMgb2Ygc3RyZXRjaFxuICAgICAgICAvLyBncm91bmRfYW5nbGUgPSB1X3BpdGNoICsgUEkvMiAtPiBzaW4oZ3JvdW5kX2FuZ2xlKSA9IGNvcyh1X3BpdGNoKVxuICAgICAgICAvLyBpbmNpZGVuY2VTdHJldGNoID0gMSAvIHNpbihpbmNpZGVuY2VBbmdsZSlcblxuICAgICAgICBjb25zdCBpbmNpZGVuY2VTdHJldGNoID0gcGl0Y2hXaXRoTWFwID8gMSA6IGNhbWVyYVRvQW5jaG9yRGlzdGFuY2UgLyB0aGlzLnBpdGNoZmFjdG9yO1xuICAgICAgICBjb25zdCBsYXN0U2VnbWVudFRpbGUgPSB0aWxlRGlzdGFuY2UubGFzdFNlZ21lbnRWaWV3cG9ydERpc3RhbmNlICogcGl4ZWxzVG9UaWxlVW5pdHM7XG4gICAgICAgIHJldHVybiB0aWxlRGlzdGFuY2UucHJldlRpbGVEaXN0YW5jZSArXG4gICAgICAgICAgICBsYXN0U2VnbWVudFRpbGUgK1xuICAgICAgICAgICAgKGluY2lkZW5jZVN0cmV0Y2ggLSAxKSAqIGxhc3RTZWdtZW50VGlsZSAqIE1hdGguYWJzKE1hdGguc2luKGxhc3RTZWdtZW50QW5nbGUpKTtcbiAgICB9XG5cbiAgICBwbGFjZUNvbGxpc2lvbkNpcmNsZXMoY29sbGlzaW9uQ2lyY2xlczogQXJyYXk8bnVtYmVyPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dPdmVybGFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UGl4ZWxSYXRpbzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoT2Zmc2V0QXJyYXk6IEdseXBoT2Zmc2V0QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvc01hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxQbGFuZU1hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkNpcmNsZXM6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGU/OiBhbnkpOiB7IGNpcmNsZXM6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiB9IHtcbiAgICAgICAgY29uc3QgcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RlZEFuY2hvciA9IHRoaXMucHJvamVjdEFuY2hvcihwb3NNYXRyaXgsIHN5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdGlvbkNhY2hlID0ge307XG4gICAgICAgIGNvbnN0IGZvbnRTY2FsZSA9IGZvbnRTaXplIC8gMjQ7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXRYID0gc3ltYm9sLmxpbmVPZmZzZXRYICogZm9udFNpemU7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXRZID0gc3ltYm9sLmxpbmVPZmZzZXRZICogZm9udFNpemU7XG5cbiAgICAgICAgY29uc3QgdGlsZVVuaXRBbmNob3JQb2ludCA9IG5ldyBQb2ludChzeW1ib2wuYW5jaG9yWCwgc3ltYm9sLmFuY2hvclkpO1xuICAgICAgICAvLyBwcm9qZWN0aW9uLnByb2plY3QgZ2VuZXJhdGVzIE5EQyBjb29yZGluYXRlcywgYXMgb3Bwb3NlZCB0byB0aGVcbiAgICAgICAgLy8gcGl4ZWwtYmFzZWQgZ3JpZCBjb29yZGluYXRlcyBnZW5lcmF0ZWQgYnkgdGhpcy5wcm9qZWN0UG9pbnRcbiAgICAgICAgY29uc3QgbGFiZWxQbGFuZUFuY2hvclBvaW50ID1cbiAgICAgICAgICAgIHByb2plY3Rpb24ucHJvamVjdCh0aWxlVW5pdEFuY2hvclBvaW50LCBsYWJlbFBsYW5lTWF0cml4KS5wb2ludDtcbiAgICAgICAgY29uc3QgZmlyc3RBbmRMYXN0R2x5cGggPSBwcm9qZWN0aW9uLnBsYWNlRmlyc3RBbmRMYXN0R2x5cGgoXG4gICAgICAgICAgICBmb250U2NhbGUsXG4gICAgICAgICAgICBnbHlwaE9mZnNldEFycmF5LFxuICAgICAgICAgICAgbGluZU9mZnNldFgsXG4gICAgICAgICAgICBsaW5lT2Zmc2V0WSxcbiAgICAgICAgICAgIC8qZmxpcCovIGZhbHNlLFxuICAgICAgICAgICAgbGFiZWxQbGFuZUFuY2hvclBvaW50LFxuICAgICAgICAgICAgdGlsZVVuaXRBbmNob3JQb2ludCxcbiAgICAgICAgICAgIHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmVWZXJ0ZXhBcnJheSxcbiAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICBwcm9qZWN0aW9uQ2FjaGUsXG4gICAgICAgICAgICAvKnJldHVybiB0aWxlIGRpc3RhbmNlKi8gdHJ1ZSk7XG5cbiAgICAgICAgbGV0IGNvbGxpc2lvbkRldGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBpbkdyaWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGVudGlyZWx5T2Zmc2NyZWVuID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCB0aWxlVG9WaWV3cG9ydCA9IHByb2plY3RlZEFuY2hvci5wZXJzcGVjdGl2ZVJhdGlvICogdGV4dFBpeGVsUmF0aW87XG4gICAgICAgIC8vIHBpeGVsc1RvVGlsZVVuaXRzIGlzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIGxpbmUgZ2VvbWV0cnkgdG8gdGlsZSB1bml0c1xuICAgICAgICAvLyAuLi4gc28gd2UgY2FyZSBhYm91dCAnc2NhbGUnIGJ1dCBub3QgJ3BlcnNwZWN0aXZlUmF0aW8nXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gcGl4ZWxfdG9fdGlsZV91bml0c1xuICAgICAgICBjb25zdCBwaXhlbHNUb1RpbGVVbml0cyA9IDEgLyAodGV4dFBpeGVsUmF0aW8gKiBzY2FsZSk7XG5cbiAgICAgICAgbGV0IGZpcnN0VGlsZURpc3RhbmNlID0gMCwgbGFzdFRpbGVEaXN0YW5jZSA9IDA7XG4gICAgICAgIGlmIChmaXJzdEFuZExhc3RHbHlwaCkge1xuICAgICAgICAgICAgZmlyc3RUaWxlRGlzdGFuY2UgPSB0aGlzLmFwcHJveGltYXRlVGlsZURpc3RhbmNlKGZpcnN0QW5kTGFzdEdseXBoLmZpcnN0LnRpbGVEaXN0YW5jZSwgZmlyc3RBbmRMYXN0R2x5cGguZmlyc3QuYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzLCBwcm9qZWN0ZWRBbmNob3IuY2FtZXJhRGlzdGFuY2UsIHBpdGNoV2l0aE1hcCk7XG4gICAgICAgICAgICBsYXN0VGlsZURpc3RhbmNlID0gdGhpcy5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZShmaXJzdEFuZExhc3RHbHlwaC5sYXN0LnRpbGVEaXN0YW5jZSwgZmlyc3RBbmRMYXN0R2x5cGgubGFzdC5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMsIHByb2plY3RlZEFuY2hvci5jYW1lcmFEaXN0YW5jZSwgcGl0Y2hXaXRoTWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY29sbGlzaW9uQ2lyY2xlcy5sZW5ndGg7IGsgKz0gNSkge1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yUG9pbnRYID0gY29sbGlzaW9uQ2lyY2xlc1trXTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvclBvaW50WSA9IGNvbGxpc2lvbkNpcmNsZXNbayArIDFdO1xuICAgICAgICAgICAgY29uc3QgdGlsZVVuaXRSYWRpdXMgPSBjb2xsaXNpb25DaXJjbGVzW2sgKyAyXTtcbiAgICAgICAgICAgIGNvbnN0IGJveFNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciA9IGNvbGxpc2lvbkNpcmNsZXNbayArIDNdO1xuICAgICAgICAgICAgaWYgKCFmaXJzdEFuZExhc3RHbHlwaCB8fFxuICAgICAgICAgICAgICAgIChib3hTaWduZWREaXN0YW5jZUZyb21BbmNob3IgPCAtZmlyc3RUaWxlRGlzdGFuY2UpIHx8XG4gICAgICAgICAgICAgICAgKGJveFNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciA+IGxhc3RUaWxlRGlzdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGxhYmVsIGVpdGhlciBkb2Vzbid0IGZpdCBvbiBpdHMgbGluZSBvciB3ZVxuICAgICAgICAgICAgICAgIC8vIGRvbid0IG5lZWQgdG8gdXNlIHRoaXMgY2lyY2xlIGJlY2F1c2UgdGhlIGxhYmVsXG4gICAgICAgICAgICAgICAgLy8gZG9lc24ndCBleHRlbmQgdGhpcyBmYXIuIEVpdGhlciB3YXksIG1hcmsgdGhlIGNpcmNsZSB1bnVzZWQuXG4gICAgICAgICAgICAgICAgbWFya0NvbGxpc2lvbkNpcmNsZVVzZWQoY29sbGlzaW9uQ2lyY2xlcywgaywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdFBvaW50KHBvc01hdHJpeCwgYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFkpO1xuICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gdGlsZVVuaXRSYWRpdXMgKiB0aWxlVG9WaWV3cG9ydDtcblxuICAgICAgICAgICAgY29uc3QgYXRMZWFzdE9uZUNpcmNsZVBsYWNlZCA9IHBsYWNlZENvbGxpc2lvbkNpcmNsZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGlmIChhdExlYXN0T25lQ2lyY2xlUGxhY2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHggPSBwcm9qZWN0ZWRQb2ludC54IC0gcGxhY2VkQ29sbGlzaW9uQ2lyY2xlc1twbGFjZWRDb2xsaXNpb25DaXJjbGVzLmxlbmd0aCAtIDRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGR5ID0gcHJvamVjdGVkUG9pbnQueSAtIHBsYWNlZENvbGxpc2lvbkNpcmNsZXNbcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcy5sZW5ndGggLSAzXTtcbiAgICAgICAgICAgICAgICAvLyBUaGUgY2lyY2xlIGVkZ2VzIHRvdWNoIHdoZW4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlaXIgY2VudGVycyBpcyAyeCB0aGUgcmFkaXVzXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgZGlzdGFuY2UgaXMgMXggdGhlIHJhZGl1cywgdGhleSdyZSBkb3VibGVkIHVwLCBhbmQgd2UgY291bGQgcmVtb3ZlXG4gICAgICAgICAgICAgICAgLy8gZXZlcnkgb3RoZXIgY2lyY2xlIHdoaWxlIGtlZXBpbmcgdGhlbSBhbGwgaW4gdG91Y2guXG4gICAgICAgICAgICAgICAgLy8gV2UgYWN0dWFsbHkgc3RhcnQgcmVtb3ZpbmcgY2lyY2xlcyB3aGVuIHRoZSBkaXN0YW5jZSBpcyDDosKIwpoyeCB0aGUgcmFkaXVzOlxuICAgICAgICAgICAgICAgIC8vICB0aGlubmluZyB0aGUgbnVtYmVyIG9mIGNpcmNsZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBpcyBhIG1ham9yIHBlcmZvcm1hbmNlIHdpbixcbiAgICAgICAgICAgICAgICAvLyAgYW5kIHRoZSBzbWFsbCBnYXBzIGludHJvZHVjZWQgZG9uJ3QgbWFrZSBhIHZlcnkgbm90aWNlYWJsZSBkaWZmZXJlbmNlLlxuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlZFRvb0RlbnNlbHkgPSByYWRpdXMgKiByYWRpdXMgKiAyID4gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlZFRvb0RlbnNlbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXRMZWFzdE9uZU1vcmVDaXJjbGUgPSAoayArIDgpIDwgY29sbGlzaW9uQ2lyY2xlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdExlYXN0T25lTW9yZUNpcmNsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEJveERpc3RhbmNlVG9BbmNob3IgPSBjb2xsaXNpb25DaXJjbGVzW2sgKyA4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobmV4dEJveERpc3RhbmNlVG9BbmNob3IgPiAtZmlyc3RUaWxlRGlzdGFuY2UpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobmV4dEJveERpc3RhbmNlVG9BbmNob3IgPCBsYXN0VGlsZURpc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhpZGUgc2lnbmlmaWNhbnRseSBvdmVybGFwcGluZyBjaXJjbGVzLCB1bmxlc3MgdGhpcyBpcyB0aGUgbGFzdCBvbmUgd2UgY2FuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8ga2VlcCBpdCBpbiBwbGFjZSBldmVuIGlmIGl0J3MgdGlnaHRseSBwYWNrZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBvbmUgYmVmb3JlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtDb2xsaXNpb25DaXJjbGVVc2VkKGNvbGxpc2lvbkNpcmNsZXMsIGssIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbGxpc2lvbkJveEFycmF5SW5kZXggPSBrIC8gNTtcbiAgICAgICAgICAgIHBsYWNlZENvbGxpc2lvbkNpcmNsZXMucHVzaChwcm9qZWN0ZWRQb2ludC54LCBwcm9qZWN0ZWRQb2ludC55LCByYWRpdXMsIGNvbGxpc2lvbkJveEFycmF5SW5kZXgpO1xuICAgICAgICAgICAgbWFya0NvbGxpc2lvbkNpcmNsZVVzZWQoY29sbGlzaW9uQ2lyY2xlcywgaywgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHgxID0gcHJvamVjdGVkUG9pbnQueCAtIHJhZGl1cztcbiAgICAgICAgICAgIGNvbnN0IHkxID0gcHJvamVjdGVkUG9pbnQueSAtIHJhZGl1cztcbiAgICAgICAgICAgIGNvbnN0IHgyID0gcHJvamVjdGVkUG9pbnQueCArIHJhZGl1cztcbiAgICAgICAgICAgIGNvbnN0IHkyID0gcHJvamVjdGVkUG9pbnQueSArIHJhZGl1cztcbiAgICAgICAgICAgIGVudGlyZWx5T2Zmc2NyZWVuID0gZW50aXJlbHlPZmZzY3JlZW4gJiYgdGhpcy5pc09mZnNjcmVlbih4MSwgeTEsIHgyLCB5Mik7XG4gICAgICAgICAgICBpbkdyaWQgPSBpbkdyaWQgfHwgdGhpcy5pc0luc2lkZUdyaWQoeDEsIHkxLCB4MiwgeTIpO1xuXG4gICAgICAgICAgICBpZiAoIWFsbG93T3ZlcmxhcCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaGl0VGVzdENpcmNsZShwcm9qZWN0ZWRQb2ludC54LCBwcm9qZWN0ZWRQb2ludC55LCByYWRpdXMsIGNvbGxpc2lvbkdyb3VwUHJlZGljYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3dDb2xsaXNpb25DaXJjbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlbjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBlYXJseSBleGl0IGlmIHdlJ3JlIHNob3dpbmcgdGhlIGRlYnVnIGNpcmNsZXMgYmVjYXVzZSB3ZSBzdGlsbCB3YW50IHRvIGNhbGN1bGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggY2lyY2xlcyBhcmUgaW4gdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25EZXRlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2lyY2xlczogKGNvbGxpc2lvbkRldGVjdGVkIHx8ICFpbkdyaWQpID8gW10gOiBwbGFjZWRDb2xsaXNpb25DaXJjbGVzLFxuICAgICAgICAgICAgb2Zmc2NyZWVuOiBlbnRpcmVseU9mZnNjcmVlblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJlY2F1c2UgdGhlIGdlb21ldHJpZXMgaW4gdGhlIENvbGxpc2lvbkluZGV4IGFyZSBhbiBhcHByb3hpbWF0aW9uIG9mIHRoZSBzaGFwZSBvZlxuICAgICAqIHN5bWJvbHMgb24gdGhlIG1hcCwgd2UgdXNlIHRoZSBDb2xsaXNpb25JbmRleCB0byBsb29rIHVwIHRoZSBzeW1ib2wgcGFydCBvZlxuICAgICAqIGBxdWVyeVJlbmRlcmVkRmVhdHVyZXNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBxdWVyeVJlbmRlcmVkU3ltYm9scyh2aWV3cG9ydFF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50Pikge1xuICAgICAgICBpZiAodmlld3BvcnRRdWVyeUdlb21ldHJ5Lmxlbmd0aCA9PT0gMCB8fCAodGhpcy5ncmlkLmtleXNMZW5ndGgoKSA9PT0gMCAmJiB0aGlzLmlnbm9yZWRHcmlkLmtleXNMZW5ndGgoKSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gW107XG4gICAgICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcbiAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB2aWV3cG9ydFF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRQb2ludCA9IG5ldyBQb2ludChwb2ludC54ICsgdmlld3BvcnRQYWRkaW5nLCBwb2ludC55ICsgdmlld3BvcnRQYWRkaW5nKTtcbiAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBncmlkUG9pbnQueCk7XG4gICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgZ3JpZFBvaW50LnkpO1xuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGdyaWRQb2ludC54KTtcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBncmlkUG9pbnQueSk7XG4gICAgICAgICAgICBxdWVyeS5wdXNoKGdyaWRQb2ludCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ3JpZC5xdWVyeShtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLmlnbm9yZWRHcmlkLnF1ZXJ5KG1pblgsIG1pblksIG1heFgsIG1heFkpKTtcblxuICAgICAgICBjb25zdCBzZWVuRmVhdHVyZXMgPSB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlS2V5ID0gZmVhdHVyZS5rZXk7XG4gICAgICAgICAgICAvLyBTa2lwIGFscmVhZHkgc2VlbiBmZWF0dXJlcy5cbiAgICAgICAgICAgIGlmIChzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VlbkZlYXR1cmVzW2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXVtmZWF0dXJlS2V5LmZlYXR1cmVJbmRleF0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcXVlcnkgaW50ZXJzZWN0cyB3aXRoIHRoZSBmZWF0dXJlIGJveFxuICAgICAgICAgICAgLy8gXCJDb2xsaXNpb24gQ2lyY2xlc1wiIGZvciBsaW5lIGxhYmVscyBhcmUgdHJlYXRlZCBhcyBib3hlcyBoZXJlXG4gICAgICAgICAgICAvLyBTaW5jZSB0aGVyZSdzIG5vIGFjdHVhbCBjb2xsaXNpb24gdGFraW5nIHBsYWNlLCB0aGUgY2lyY2xlIHZzLiBzcXVhcmVcbiAgICAgICAgICAgIC8vIGRpc3RpbmN0aW9uIGRvZXNuJ3QgbWF0dGVyIGFzIG11Y2gsIGFuZCBib3ggZ2VvbWV0cnkgaXMgZWFzaWVyXG4gICAgICAgICAgICAvLyB0byB3b3JrIHdpdGguXG4gICAgICAgICAgICBjb25zdCBiYm94ID0gW1xuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngxLCBmZWF0dXJlLnkxKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQoZmVhdHVyZS54MiwgZmVhdHVyZS55MSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KGZlYXR1cmUueDIsIGZlYXR1cmUueTIpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngxLCBmZWF0dXJlLnkyKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uVGVzdHMucG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHF1ZXJ5LCBiYm94KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXVtmZWF0dXJlS2V5LmZlYXR1cmVJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHJlc3VsdFtmZWF0dXJlS2V5LmJ1Y2tldEluc3RhbmNlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0ucHVzaChmZWF0dXJlS2V5LmZlYXR1cmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGluc2VydENvbGxpc2lvbkJveChjb2xsaXNpb25Cb3g6IEFycmF5PG51bWJlcj4sIGlnbm9yZVBsYWNlbWVudDogYm9vbGVhbiwgYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyLCBmZWF0dXJlSW5kZXg6IG51bWJlciwgY29sbGlzaW9uR3JvdXBJRDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSBpZ25vcmVQbGFjZW1lbnQgPyB0aGlzLmlnbm9yZWRHcmlkIDogdGhpcy5ncmlkO1xuXG4gICAgICAgIGNvbnN0IGtleSA9IHtidWNrZXRJbnN0YW5jZUlkLCBmZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwSUR9O1xuICAgICAgICBncmlkLmluc2VydChrZXksIGNvbGxpc2lvbkJveFswXSwgY29sbGlzaW9uQm94WzFdLCBjb2xsaXNpb25Cb3hbMl0sIGNvbGxpc2lvbkJveFszXSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhjb2xsaXNpb25DaXJjbGVzOiBBcnJheTxudW1iZXI+LCBpZ25vcmVQbGFjZW1lbnQ6IGJvb2xlYW4sIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlciwgZmVhdHVyZUluZGV4OiBudW1iZXIsIGNvbGxpc2lvbkdyb3VwSUQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkID0gaWdub3JlUGxhY2VtZW50ID8gdGhpcy5pZ25vcmVkR3JpZCA6IHRoaXMuZ3JpZDtcblxuICAgICAgICBjb25zdCBrZXkgPSB7YnVja2V0SW5zdGFuY2VJZCwgZmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cElEfTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjb2xsaXNpb25DaXJjbGVzLmxlbmd0aDsgayArPSA0KSB7XG4gICAgICAgICAgICBncmlkLmluc2VydENpcmNsZShrZXksIGNvbGxpc2lvbkNpcmNsZXNba10sIGNvbGxpc2lvbkNpcmNsZXNbayArIDFdLCBjb2xsaXNpb25DaXJjbGVzW2sgKyAyXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9qZWN0QW5jaG9yKHBvc01hdHJpeDogbWF0NCwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcCA9IFt4LCB5LCAwLCAxXTtcbiAgICAgICAgcHJvamVjdGlvbi54eVRyYW5zZm9ybU1hdDQocCwgcCwgcG9zTWF0cml4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBlcnNwZWN0aXZlUmF0aW86IDAuNSArIDAuNSAqICh0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIC8gcFszXSksXG4gICAgICAgICAgICBjYW1lcmFEaXN0YW5jZTogcFszXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByb2plY3RQb2ludChwb3NNYXRyaXg6IG1hdDQsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBbeCwgeSwgMCwgMV07XG4gICAgICAgIHByb2plY3Rpb24ueHlUcmFuc2Zvcm1NYXQ0KHAsIHAsIHBvc01hdHJpeCk7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQoXG4gICAgICAgICAgICAoKChwWzBdIC8gcFszXSArIDEpIC8gMikgKiB0aGlzLnRyYW5zZm9ybS53aWR0aCkgKyB2aWV3cG9ydFBhZGRpbmcsXG4gICAgICAgICAgICAoKCgtcFsxXSAvIHBbM10gKyAxKSAvIDIpICogdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KSArIHZpZXdwb3J0UGFkZGluZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvKHBvc01hdHJpeDogbWF0NCwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcCA9IFt4LCB5LCAwLCAxXTtcbiAgICAgICAgcHJvamVjdGlvbi54eVRyYW5zZm9ybU1hdDQocCwgcCwgcG9zTWF0cml4KTtcbiAgICAgICAgY29uc3QgYSA9IG5ldyBQb2ludChcbiAgICAgICAgICAgICgoKHBbMF0gLyBwWzNdICsgMSkgLyAyKSAqIHRoaXMudHJhbnNmb3JtLndpZHRoKSArIHZpZXdwb3J0UGFkZGluZyxcbiAgICAgICAgICAgICgoKC1wWzFdIC8gcFszXSArIDEpIC8gMikgKiB0aGlzLnRyYW5zZm9ybS5oZWlnaHQpICsgdmlld3BvcnRQYWRkaW5nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb2ludDogYSxcbiAgICAgICAgICAgIC8vIFNlZSBwZXJzcGVjdGl2ZSByYXRpbyBjb21tZW50IGluIHN5bWJvbF9zZGYudmVydGV4XG4gICAgICAgICAgICAvLyBXZSdyZSBkb2luZyBjb2xsaXNpb24gZGV0ZWN0aW9uIGluIHZpZXdwb3J0IHNwYWNlIHNvIHdlIG5lZWRcbiAgICAgICAgICAgIC8vIHRvIHNjYWxlIGRvd24gYm94ZXMgaW4gdGhlIGRpc3RhbmNlXG4gICAgICAgICAgICBwZXJzcGVjdGl2ZVJhdGlvOiAwLjUgKyAwLjUgKiAodGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHBbM10pXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaXNPZmZzY3JlZW4oeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgICAgICByZXR1cm4geDIgPCB2aWV3cG9ydFBhZGRpbmcgfHwgeDEgPj0gdGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5IHx8IHkyIDwgdmlld3BvcnRQYWRkaW5nIHx8IHkxID4gdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeTtcbiAgICB9XG5cbiAgICBpc0luc2lkZUdyaWQoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgICAgICByZXR1cm4geDIgPj0gMCAmJiB4MSA8IHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnkgJiYgeTIgPj0gMCAmJiB5MSA8IHRoaXMuZ3JpZEJvdHRvbUJvdW5kYXJ5O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbWFya0NvbGxpc2lvbkNpcmNsZVVzZWQoY29sbGlzaW9uQ2lyY2xlczogQXJyYXk8bnVtYmVyPiwgaW5kZXg6IG51bWJlciwgdXNlZDogYm9vbGVhbikge1xuICAgIGNvbGxpc2lvbkNpcmNsZXNbaW5kZXggKyA0XSA9IHVzZWQgPyAxIDogMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sbGlzaW9uSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBwaXhlbCB2YWx1ZSBhdCBhIHRoZSBnaXZlbiB6b29tIGxldmVsIHRvIHRpbGUgdW5pdHMuXG4gKlxuICogVGhlIHNoYWRlcnMgbW9zdGx5IGNhbGN1bGF0ZSBldmVyeXRoaW5nIGluIHRpbGUgdW5pdHMgc28gc3R5bGVcbiAqIHByb3BlcnRpZXMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgZnJvbSBwaXhlbHMgdG8gdGlsZSB1bml0cyB1c2luZyB0aGlzLlxuICpcbiAqIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGJ5IDMwIHBpeGVscyBhdCB6b29tIDYuNSB3aWxsIGJlIGFcbiAqIHRyYW5zbGF0aW9uIGJ5IHBpeGVsc1RvVGlsZVVuaXRzKDMwLCA2LjUpIHRpbGUgdW5pdHMuXG4gKlxuICogQHJldHVybnMgdmFsdWUgaW4gdGlsZSB1bml0c1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn0sIHBpeGVsVmFsdWU6IG51bWJlciwgejogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGl4ZWxWYWx1ZSAqIChFWFRFTlQgLyAodGlsZS50aWxlU2l6ZSAqIE1hdGgucG93KDIsIHogLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWikpKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xsaXNpb25JbmRleCBmcm9tICcuL2NvbGxpc2lvbl9pbmRleCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQgKiBhcyBwcm9qZWN0aW9uIGZyb20gJy4vcHJvamVjdGlvbic7XG5pbXBvcnQge2dldEFuY2hvckp1c3RpZmljYXRpb24sIGV2YWx1YXRlVmFyaWFibGVPZmZzZXR9IGZyb20gJy4vc3ltYm9sX2xheW91dCc7XG5pbXBvcnQge2dldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGV9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCwge0NvbGxpc2lvbkFycmF5cywgU2luZ2xlQ29sbGlzaW9uQm94fSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5LCBDb2xsaXNpb25WZXJ0ZXhBcnJheSwgU3ltYm9sSW5zdGFuY2V9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHR5cGUgRmVhdHVyZUluZGV4IGZyb20gJy4uL2RhdGEvZmVhdHVyZV9pbmRleCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1RleHRBbmNob3J9IGZyb20gJy4vc3ltYm9sX2xheW91dCc7XG5cbmNsYXNzIE9wYWNpdHlTdGF0ZSB7XG4gICAgb3BhY2l0eTogbnVtYmVyO1xuICAgIHBsYWNlZDogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihwcmV2U3RhdGU6ID9PcGFjaXR5U3RhdGUsIGluY3JlbWVudDogbnVtYmVyLCBwbGFjZWQ6IGJvb2xlYW4sIHNraXBGYWRlOiA/Ym9vbGVhbikge1xuICAgICAgICBpZiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLm9wYWNpdHkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBwcmV2U3RhdGUub3BhY2l0eSArIChwcmV2U3RhdGUucGxhY2VkID8gaW5jcmVtZW50IDogLWluY3JlbWVudCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BhY2l0eSA9IChza2lwRmFkZSAmJiBwbGFjZWQpID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wbGFjZWQgPSBwbGFjZWQ7XG4gICAgfVxuICAgIGlzSGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGFjaXR5ID09PSAwICYmICF0aGlzLnBsYWNlZDtcbiAgICB9XG59XG5cbmNsYXNzIEpvaW50T3BhY2l0eVN0YXRlIHtcbiAgICB0ZXh0OiBPcGFjaXR5U3RhdGU7XG4gICAgaWNvbjogT3BhY2l0eVN0YXRlO1xuICAgIGNvbnN0cnVjdG9yKHByZXZTdGF0ZTogP0pvaW50T3BhY2l0eVN0YXRlLCBpbmNyZW1lbnQ6IG51bWJlciwgcGxhY2VkVGV4dDogYm9vbGVhbiwgcGxhY2VkSWNvbjogYm9vbGVhbiwgc2tpcEZhZGU6ID9ib29sZWFuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IG5ldyBPcGFjaXR5U3RhdGUocHJldlN0YXRlID8gcHJldlN0YXRlLnRleHQgOiBudWxsLCBpbmNyZW1lbnQsIHBsYWNlZFRleHQsIHNraXBGYWRlKTtcbiAgICAgICAgdGhpcy5pY29uID0gbmV3IE9wYWNpdHlTdGF0ZShwcmV2U3RhdGUgPyBwcmV2U3RhdGUuaWNvbiA6IG51bGwsIGluY3JlbWVudCwgcGxhY2VkSWNvbiwgc2tpcEZhZGUpO1xuICAgIH1cbiAgICBpc0hpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5pc0hpZGRlbigpICYmIHRoaXMuaWNvbi5pc0hpZGRlbigpO1xuICAgIH1cbn1cblxuY2xhc3MgSm9pbnRQbGFjZW1lbnQge1xuICAgIHRleHQ6IGJvb2xlYW47XG4gICAgaWNvbjogYm9vbGVhbjtcbiAgICAvLyBza2lwRmFkZSA9IG91dHNpZGUgdmlld3BvcnQsIGJ1dCB3aXRoaW4gQ29sbGlzaW9uSW5kZXg6OnZpZXdwb3J0UGFkZGluZyBweCBvZiB0aGUgZWRnZVxuICAgIC8vIEJlY2F1c2UgdGhlc2Ugc3ltYm9scyBhcmVuJ3Qgb25zY3JlZW4geWV0LCB3ZSBjYW4gc2tpcCB0aGUgXCJmYWRlIGluXCIgYW5pbWF0aW9uLFxuICAgIC8vIGFuZCBpZiBhIHN1YnNlcXVlbnQgdmlld3BvcnQgY2hhbmdlIGJyaW5ncyB0aGVtIGludG8gdmlldywgdGhleSdsbCBiZSBmdWxseVxuICAgIC8vIHZpc2libGUgcmlnaHQgYXdheS5cbiAgICBza2lwRmFkZTogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0OiBib29sZWFuLCBpY29uOiBib29sZWFuLCBza2lwRmFkZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLmljb24gPSBpY29uO1xuICAgICAgICB0aGlzLnNraXBGYWRlID0gc2tpcEZhZGU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmV0YWluZWRRdWVyeURhdGEge1xuICAgIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcjtcbiAgICBmZWF0dXJlSW5kZXg6IEZlYXR1cmVJbmRleDtcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXI7XG4gICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQ7XG4gICAgZmVhdHVyZVNvcnRPcmRlcjogP0FycmF5PG51bWJlcj5cbiAgICBjb25zdHJ1Y3RvcihidWNrZXRJbnN0YW5jZUlkOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4OiBGZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIHRoaXMuYnVja2V0SW5zdGFuY2VJZCA9IGJ1Y2tldEluc3RhbmNlSWQ7XG4gICAgICAgIHRoaXMuZmVhdHVyZUluZGV4ID0gZmVhdHVyZUluZGV4O1xuICAgICAgICB0aGlzLnNvdXJjZUxheWVySW5kZXggPSBzb3VyY2VMYXllckluZGV4O1xuICAgICAgICB0aGlzLmJ1Y2tldEluZGV4ID0gYnVja2V0SW5kZXg7XG4gICAgICAgIHRoaXMudGlsZUlEID0gdGlsZUlEO1xuICAgIH1cbn1cblxudHlwZSBDb2xsaXNpb25Hcm91cCA9IHsgSUQ6IG51bWJlciwgcHJlZGljYXRlPzogYW55IH07XG5cbmNsYXNzIENvbGxpc2lvbkdyb3VwcyB7XG4gICAgY29sbGlzaW9uR3JvdXBzOiB7W2dyb3VwTmFtZTogc3RyaW5nXTogQ29sbGlzaW9uR3JvdXB9O1xuICAgIG1heEdyb3VwSUQ6IG51bWJlcjtcbiAgICBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jcm9zc1NvdXJjZUNvbGxpc2lvbnMgPSBjcm9zc1NvdXJjZUNvbGxpc2lvbnM7XG4gICAgICAgIHRoaXMubWF4R3JvdXBJRCA9IDA7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uR3JvdXBzID0ge307XG4gICAgfVxuXG4gICAgZ2V0KHNvdXJjZUlEOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gVGhlIHByZWRpY2F0ZS9ncm91cElEIG1lY2hhbmlzbSBhbGxvd3MgZm9yIGFyYml0cmFyeSBncm91cGluZyxcbiAgICAgICAgLy8gYnV0IHRoZSBjdXJyZW50IGludGVyZmFjZSBkZWZpbmVzIG9uZSBzb3VyY2UgPT0gb25lIGdyb3VwIHdoZW5cbiAgICAgICAgLy8gY3Jvc3NTb3VyY2VDb2xsaXNpb25zID09IHRydWUuXG4gICAgICAgIGlmICghdGhpcy5jcm9zc1NvdXJjZUNvbGxpc2lvbnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb2xsaXNpb25Hcm91cHNbc291cmNlSURdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEdyb3VwSUQgPSArK3RoaXMubWF4R3JvdXBJRDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkdyb3Vwc1tzb3VyY2VJRF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIElEOiBuZXh0R3JvdXBJRCxcbiAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmNvbGxpc2lvbkdyb3VwSUQgPT09IG5leHRHcm91cElEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxpc2lvbkdyb3Vwc1tzb3VyY2VJRF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge0lEOiAwLCBwcmVkaWNhdGU6IG51bGx9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVWYXJpYWJsZUxheW91dFNoaWZ0KGFuY2hvcjogVGV4dEFuY2hvciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sIHRleHRCb3hTY2FsZTogbnVtYmVyKTogUG9pbnQge1xuICAgIGNvbnN0IHtob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ259ID0gZ2V0QW5jaG9yQWxpZ25tZW50KGFuY2hvcik7XG4gICAgY29uc3Qgc2hpZnRYID0gLShob3Jpem9udGFsQWxpZ24gLSAwLjUpICogd2lkdGg7XG4gICAgY29uc3Qgc2hpZnRZID0gLSh2ZXJ0aWNhbEFsaWduIC0gMC41KSAqIGhlaWdodDtcbiAgICBjb25zdCBvZmZzZXQgPSBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGFuY2hvciwgdGV4dE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgc2hpZnRYICsgb2Zmc2V0WzBdICogdGV4dEJveFNjYWxlLFxuICAgICAgICBzaGlmdFkgKyBvZmZzZXRbMV0gKiB0ZXh0Qm94U2NhbGVcbiAgICApO1xufVxuXG5mdW5jdGlvbiBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KGNvbGxpc2lvbkJveDogU2luZ2xlQ29sbGlzaW9uQm94LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0WDogbnVtYmVyLCBzaGlmdFk6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVXaXRoTWFwOiBib29sZWFuLCBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGU6IG51bWJlcikge1xuICAgIGNvbnN0IHt4MSwgeDIsIHkxLCB5MiwgYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFl9ID0gY29sbGlzaW9uQm94O1xuICAgIGNvbnN0IHJvdGF0ZWRPZmZzZXQgPSBuZXcgUG9pbnQoc2hpZnRYLCBzaGlmdFkpO1xuICAgIGlmIChyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgIHJvdGF0ZWRPZmZzZXQuX3JvdGF0ZShwaXRjaFdpdGhNYXAgPyBhbmdsZSA6IC1hbmdsZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHgxOiB4MSArIHJvdGF0ZWRPZmZzZXQueCxcbiAgICAgICAgeTE6IHkxICsgcm90YXRlZE9mZnNldC55LFxuICAgICAgICB4MjogeDIgKyByb3RhdGVkT2Zmc2V0LngsXG4gICAgICAgIHkyOiB5MiArIHJvdGF0ZWRPZmZzZXQueSxcbiAgICAgICAgLy8gc3ltYm9sIGFuY2hvciBwb2ludCBzdGF5cyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHRleHQtYW5jaG9yXG4gICAgICAgIGFuY2hvclBvaW50WCxcbiAgICAgICAgYW5jaG9yUG9pbnRZXG4gICAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVmFyaWFibGVPZmZzZXQgPSB7XG4gICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGFuY2hvcjogVGV4dEFuY2hvcixcbiAgICB0ZXh0Qm94U2NhbGU6IG51bWJlcixcbiAgICBwcmV2QW5jaG9yPzogVGV4dEFuY2hvclxufTtcblxuZXhwb3J0IHR5cGUgQ3Jvc3NUaWxlSUQgPSBzdHJpbmcgfCBudW1iZXI7XG5cbmV4cG9ydCBjbGFzcyBQbGFjZW1lbnQge1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIGNvbGxpc2lvbkluZGV4OiBDb2xsaXNpb25JbmRleDtcbiAgICBwbGFjZW1lbnRzOiB7IFtDcm9zc1RpbGVJRF06IEpvaW50UGxhY2VtZW50IH07XG4gICAgb3BhY2l0aWVzOiB7IFtDcm9zc1RpbGVJRF06IEpvaW50T3BhY2l0eVN0YXRlIH07XG4gICAgdmFyaWFibGVPZmZzZXRzOiB7W0Nyb3NzVGlsZUlEXTogVmFyaWFibGVPZmZzZXQgfTtcbiAgICBwbGFjZWRPcmllbnRhdGlvbnM6IHtbQ3Jvc3NUaWxlSURdOiBudW1iZXIgfTtcbiAgICBjb21taXRUaW1lOiBudW1iZXI7XG4gICAgcHJldlpvb21BZGp1c3RtZW50OiBudW1iZXI7XG4gICAgbGFzdFBsYWNlbWVudENoYW5nZVRpbWU6IG51bWJlcjtcbiAgICBzdGFsZTogYm9vbGVhbjtcbiAgICBmYWRlRHVyYXRpb246IG51bWJlcjtcbiAgICByZXRhaW5lZFF1ZXJ5RGF0YToge1tudW1iZXJdOiBSZXRhaW5lZFF1ZXJ5RGF0YX07XG4gICAgY29sbGlzaW9uR3JvdXBzOiBDb2xsaXNpb25Hcm91cHM7XG4gICAgcHJldlBsYWNlbWVudDogP1BsYWNlbWVudDtcbiAgICB6b29tQXRMYXN0UmVjZW5jeUNoZWNrOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2Zvcm06IFRyYW5zZm9ybSwgZmFkZUR1cmF0aW9uOiBudW1iZXIsIGNyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbiwgcHJldlBsYWNlbWVudD86IFBsYWNlbWVudCkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybS5jbG9uZSgpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvbkluZGV4ID0gbmV3IENvbGxpc2lvbkluZGV4KHRoaXMudHJhbnNmb3JtKTtcbiAgICAgICAgdGhpcy5wbGFjZW1lbnRzID0ge307XG4gICAgICAgIHRoaXMub3BhY2l0aWVzID0ge307XG4gICAgICAgIHRoaXMudmFyaWFibGVPZmZzZXRzID0ge307XG4gICAgICAgIHRoaXMuc3RhbGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21taXRUaW1lID0gMDtcbiAgICAgICAgdGhpcy5mYWRlRHVyYXRpb24gPSBmYWRlRHVyYXRpb247XG4gICAgICAgIHRoaXMucmV0YWluZWRRdWVyeURhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25Hcm91cHMgPSBuZXcgQ29sbGlzaW9uR3JvdXBzKGNyb3NzU291cmNlQ29sbGlzaW9ucyk7XG5cbiAgICAgICAgdGhpcy5wcmV2UGxhY2VtZW50ID0gcHJldlBsYWNlbWVudDtcbiAgICAgICAgaWYgKHByZXZQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIHByZXZQbGFjZW1lbnQucHJldlBsYWNlbWVudCA9IHVuZGVmaW5lZDsgLy8gT25seSBob2xkIG9uIHRvIG9uZSBwbGFjZW1lbnQgYmFja1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBwbGFjZUxheWVyVGlsZShzdHlsZUxheWVyOiBTdHlsZUxheWVyLCB0aWxlOiBUaWxlLCBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sIHNlZW5Dcm9zc1RpbGVJRHM6IHsgW3N0cmluZyB8IG51bWJlcl06IGJvb2xlYW4gfSkge1xuICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlSW5kZXggPSB0aWxlLmxhdGVzdEZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKCFzeW1ib2xCdWNrZXQgfHwgIWJ1Y2tldEZlYXR1cmVJbmRleCB8fCBzdHlsZUxheWVyLmlkICE9PSBzeW1ib2xCdWNrZXQubGF5ZXJJZHNbMF0pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY29sbGlzaW9uQm94QXJyYXkgPSB0aWxlLmNvbGxpc2lvbkJveEFycmF5O1xuXG4gICAgICAgIGNvbnN0IGxheW91dCA9IHN5bWJvbEJ1Y2tldC5sYXllcnNbMF0ubGF5b3V0O1xuXG4gICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5wb3coMiwgdGhpcy50cmFuc2Zvcm0uem9vbSAtIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICAgICAgY29uc3QgdGV4dFBpeGVsUmF0aW8gPSB0aWxlLnRpbGVTaXplIC8gRVhURU5UO1xuXG4gICAgICAgIGNvbnN0IHBvc01hdHJpeCA9IHRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh0aWxlLnRpbGVJRC50b1Vud3JhcHBlZCgpKTtcblxuICAgICAgICBjb25zdCB0ZXh0TGFiZWxQbGFuZU1hdHJpeCA9IHByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeChwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCcsXG4gICAgICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCcsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgdGhpcy50cmFuc2Zvcm0uem9vbSkpO1xuXG4gICAgICAgIGNvbnN0IGljb25MYWJlbFBsYW5lTWF0cml4ID0gcHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4KHBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCdpY29uLXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJyxcbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCdpY29uLXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJyxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0aGlzLnRyYW5zZm9ybS56b29tKSk7XG5cbiAgICAgICAgLy8gQXMgbG9uZyBhcyB0aGlzIHBsYWNlbWVudCBsaXZlcywgd2UgaGF2ZSB0byBob2xkIG9udG8gdGhpcyBidWNrZXQnc1xuICAgICAgICAvLyBtYXRjaGluZyBGZWF0dXJlSW5kZXgvZGF0YSBmb3IgcXVlcnlpbmcgcHVycG9zZXNcbiAgICAgICAgdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtzeW1ib2xCdWNrZXQuYnVja2V0SW5zdGFuY2VJZF0gPSBuZXcgUmV0YWluZWRRdWVyeURhdGEoXG4gICAgICAgICAgICBzeW1ib2xCdWNrZXQuYnVja2V0SW5zdGFuY2VJZCxcbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEJ1Y2tldC5zb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgc3ltYm9sQnVja2V0LmluZGV4LFxuICAgICAgICAgICAgdGlsZS50aWxlSURcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wbGFjZUxheWVyQnVja2V0KHN5bWJvbEJ1Y2tldCwgcG9zTWF0cml4LCB0ZXh0TGFiZWxQbGFuZU1hdHJpeCwgaWNvbkxhYmVsUGxhbmVNYXRyaXgsIHNjYWxlLCB0ZXh0UGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXMsIHRpbGUuaG9sZGluZ0ZvckZhZGUoKSwgc2VlbkNyb3NzVGlsZUlEcywgY29sbGlzaW9uQm94QXJyYXkpO1xuICAgIH1cblxuICAgIGF0dGVtcHRBbmNob3JQbGFjZW1lbnQoYW5jaG9yOiBUZXh0QW5jaG9yLCB0ZXh0Qm94OiBTaW5nbGVDb2xsaXNpb25Cb3gsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJveFNjYWxlOiBudW1iZXIsIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sIHRleHRQaXhlbFJhdGlvOiBudW1iZXIsIHBvc01hdHJpeDogbWF0NCwgY29sbGlzaW9uR3JvdXA6IENvbGxpc2lvbkdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsbG93T3ZlcmxhcDogYm9vbGVhbiwgc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlLCBidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgb3JpZW50YXRpb246IG51bWJlciwgaWNvbkJveDogP1NpbmdsZUNvbGxpc2lvbkJveCk6ID97IHNoaWZ0OiBQb2ludCwgcGxhY2VkR2x5cGhCb3hlczogeyBib3g6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiB9IH0gIHtcblxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gW3N5bWJvbEluc3RhbmNlLnRleHRPZmZzZXQwLCBzeW1ib2xJbnN0YW5jZS50ZXh0T2Zmc2V0MV07XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gY2FsY3VsYXRlVmFyaWFibGVMYXlvdXRTaGlmdChhbmNob3IsIHdpZHRoLCBoZWlnaHQsIHRleHRPZmZzZXQsIHRleHRCb3hTY2FsZSk7XG5cbiAgICAgICAgY29uc3QgcGxhY2VkR2x5cGhCb3hlcyA9IHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goXG4gICAgICAgICAgICBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgIHRleHRCb3gsIHNoaWZ0LngsIHNoaWZ0LnksXG4gICAgICAgICAgICAgICAgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB0aGlzLnRyYW5zZm9ybS5hbmdsZSksXG4gICAgICAgICAgICB0ZXh0QWxsb3dPdmVybGFwLCB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LCBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuXG4gICAgICAgIGlmIChpY29uQm94KSB7XG4gICAgICAgICAgICBjb25zdCBwbGFjZWRJY29uQm94ZXMgPSB0aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgIHNoaWZ0VmFyaWFibGVDb2xsaXNpb25Cb3goXG4gICAgICAgICAgICAgICAgICAgIGljb25Cb3gsIHNoaWZ0LngsIHNoaWZ0LnksXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXAsIHBpdGNoV2l0aE1hcCwgdGhpcy50cmFuc2Zvcm0uYW5nbGUpLFxuICAgICAgICAgICAgICAgIHRleHRBbGxvd092ZXJsYXAsIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsIGNvbGxpc2lvbkdyb3VwLnByZWRpY2F0ZSk7XG4gICAgICAgICAgICBpZiAocGxhY2VkSWNvbkJveGVzLmJveC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwbGFjZWRHbHlwaEJveGVzLmJveC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgcHJldkFuY2hvcjtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgbGFiZWwgd2FzIHBsYWNlZCBpbiB0aGUgcHJldmlvdXMgcGxhY2VtZW50LCByZWNvcmQgdGhlIGFuY2hvciBwb3NpdGlvblxuICAgICAgICAgICAgLy8gdG8gYWxsb3cgdXMgdG8gYW5pbWF0ZSB0aGUgdHJhbnNpdGlvblxuICAgICAgICAgICAgaWYgKHRoaXMucHJldlBsYWNlbWVudCAmJlxuICAgICAgICAgICAgICAgIHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlbWVudHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlbWVudHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdLnRleHQpIHtcbiAgICAgICAgICAgICAgICBwcmV2QW5jaG9yID0gdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0uYW5jaG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzZXJ0KHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEICE9PSAwKTtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVPZmZzZXRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0LFxuICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICAgICAgdGV4dEJveFNjYWxlLFxuICAgICAgICAgICAgICAgIHByZXZBbmNob3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihidWNrZXQsIGFuY2hvciwgc3ltYm9sSW5zdGFuY2UsIG9yaWVudGF0aW9uKTtcblxuICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldCwgb3JpZW50YXRpb24sIHN5bWJvbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBvcmllbnRhdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtzaGlmdCwgcGxhY2VkR2x5cGhCb3hlc307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwbGFjZUxheWVyQnVja2V0KGJ1Y2tldDogU3ltYm9sQnVja2V0LCBwb3NNYXRyaXg6IG1hdDQsIHRleHRMYWJlbFBsYW5lTWF0cml4OiBtYXQ0LCBpY29uTGFiZWxQbGFuZU1hdHJpeDogbWF0NCxcbiAgICAgICAgICAgIHNjYWxlOiBudW1iZXIsIHRleHRQaXhlbFJhdGlvOiBudW1iZXIsIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbiwgaG9sZGluZ0ZvckZhZGU6IGJvb2xlYW4sIHNlZW5Dcm9zc1RpbGVJRHM6IHsgW3N0cmluZyB8IG51bWJlcl06IGJvb2xlYW4gfSxcbiAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5OiA/Q29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0ID0gYnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIGNvbnN0IHBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3Jab29tKGJ1Y2tldC50ZXh0U2l6ZURhdGEsIHRoaXMudHJhbnNmb3JtLnpvb20pO1xuICAgICAgICBjb25zdCB0ZXh0T3B0aW9uYWwgPSBsYXlvdXQuZ2V0KCd0ZXh0LW9wdGlvbmFsJyk7XG4gICAgICAgIGNvbnN0IGljb25PcHRpb25hbCA9IGxheW91dC5nZXQoJ2ljb24tb3B0aW9uYWwnKTtcbiAgICAgICAgY29uc3QgdGV4dEFsbG93T3ZlcmxhcCA9IGxheW91dC5nZXQoJ3RleHQtYWxsb3ctb3ZlcmxhcCcpO1xuICAgICAgICBjb25zdCBpY29uQWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgnaWNvbi1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIC8vIFRoaXMgbG9naWMgaXMgc2ltaWxhciB0byB0aGUgXCJkZWZhdWx0T3BhY2l0eVN0YXRlXCIgbG9naWMgYmVsb3cgaW4gdXBkYXRlQnVja2V0T3BhY2l0aWVzXG4gICAgICAgIC8vIElmIHdlIGtub3cgYSBzeW1ib2wgaXMgYWx3YXlzIHN1cHBvc2VkIHRvIHNob3csIGZvcmNlIGl0IHRvIGJlIG1hcmtlZCB2aXNpYmxlIGV2ZW4gaWZcbiAgICAgICAgLy8gaXQgd2Fzbid0IHBsYWNlZCBpbnRvIHRoZSBjb2xsaXNpb24gaW5kZXggKGJlY2F1c2Ugc29tZSBvciBhbGwgb2YgaXQgd2FzIG91dHNpZGUgdGhlIHJhbmdlXG4gICAgICAgIC8vIG9mIHRoZSBjb2xsaXNpb24gZ3JpZCkuXG4gICAgICAgIC8vIFRoZXJlIGlzIGEgc3VidGxlIGVkZ2UgY2FzZSBoZXJlIHdlJ3JlIGFjY2VwdGluZzpcbiAgICAgICAgLy8gIFN5bWJvbCBBIGhhcyB0ZXh0LWFsbG93LW92ZXJsYXA6IHRydWUsIGljb24tYWxsb3ctb3ZlcmxhcDogdHJ1ZSwgaWNvbi1vcHRpb25hbDogZmFsc2VcbiAgICAgICAgLy8gIEEncyBpY29uIGlzIG91dHNpZGUgdGhlIGdyaWQsIHNvIGRvZXNuJ3QgZ2V0IHBsYWNlZFxuICAgICAgICAvLyAgQSdzIHRleHQgd291bGQgYmUgaW5zaWRlIGdyaWQsIGJ1dCBkb2Vzbid0IGdldCBwbGFjZWQgYmVjYXVzZSBvZiBpY29uLW9wdGlvbmFsOiBmYWxzZVxuICAgICAgICAvLyAgV2Ugc3RpbGwgc2hvdyBBIGJlY2F1c2Ugb2YgdGhlIGFsbG93LW92ZXJsYXAgc2V0dGluZ3MuXG4gICAgICAgIC8vICBTeW1ib2wgQiBoYXMgYWxsb3ctb3ZlcmxhcDogZmFsc2UsIGFuZCBnZXRzIHBsYWNlZCB3aGVyZSBBJ3MgdGV4dCB3b3VsZCBiZVxuICAgICAgICAvLyAgT24gcGFubmluZyBpbiwgdGhlcmUgaXMgYSBzaG9ydCBwZXJpb2Qgd2hlbiBTeW1ib2wgQiBhbmQgU3ltYm9sIEEgd2lsbCBvdmVybGFwXG4gICAgICAgIC8vICBUaGlzIGlzIHRoZSByZXZlcnNlIG9mIG91ciBub3JtYWwgcG9saWN5IG9mIFwiZmFkZSBpbiBvbiBwYW5cIiwgYnV0IHNob3VsZCBsb29rIGxpa2UgYW55IG90aGVyXG4gICAgICAgIC8vICBjb2xsaXNpb24gYW5kIGhvcGVmdWxseSBub3QgYmUgdG9vIG5vdGljZWFibGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzE3MlxuICAgICAgICBjb25zdCBhbHdheXNTaG93VGV4dCA9IHRleHRBbGxvd092ZXJsYXAgJiYgKGljb25BbGxvd092ZXJsYXAgfHwgIWJ1Y2tldC5oYXNJY29uRGF0YSgpIHx8IGljb25PcHRpb25hbCk7XG4gICAgICAgIGNvbnN0IGFsd2F5c1Nob3dJY29uID0gaWNvbkFsbG93T3ZlcmxhcCAmJiAodGV4dEFsbG93T3ZlcmxhcCB8fCAhYnVja2V0Lmhhc1RleHREYXRhKCkgfHwgdGV4dE9wdGlvbmFsKTtcblxuICAgICAgICBjb25zdCBjb2xsaXNpb25Hcm91cCA9IHRoaXMuY29sbGlzaW9uR3JvdXBzLmdldChidWNrZXQuc291cmNlSUQpO1xuXG4gICAgICAgIGNvbnN0IHJvdGF0ZVdpdGhNYXAgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJztcbiAgICAgICAgY29uc3QgcGl0Y2hXaXRoTWFwID0gbGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IGhhc0ljb25UZXh0Rml0ID0gbGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpICE9PSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IHpPcmRlckJ5Vmlld3BvcnRZID0gbGF5b3V0LmdldCgnc3ltYm9sLXotb3JkZXInKSA9PT0gJ3ZpZXdwb3J0LXknO1xuXG4gICAgICAgIGlmICghYnVja2V0LmNvbGxpc2lvbkFycmF5cyAmJiBjb2xsaXNpb25Cb3hBcnJheSkge1xuICAgICAgICAgICAgYnVja2V0LmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMoY29sbGlzaW9uQm94QXJyYXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGxhY2VTeW1ib2wgPSAoc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlLCBjb2xsaXNpb25BcnJheXM6IENvbGxpc2lvbkFycmF5cykgPT4ge1xuICAgICAgICAgICAgaWYgKHNlZW5Dcm9zc1RpbGVJRHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoaG9sZGluZ0ZvckZhZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBNYXJrIGFsbCBzeW1ib2xzIGZyb20gdGhpcyB0aWxlIGFzIFwibm90IHBsYWNlZFwiLCBidXQgZG9uJ3QgYWRkIHRvIHNlZW5Dcm9zc1RpbGVJRHMsIGJlY2F1c2Ugd2UgZG9uJ3RcbiAgICAgICAgICAgICAgICAvLyBrbm93IHlldCBpZiB3ZSBoYXZlIGEgZHVwbGljYXRlIGluIGEgcGFyZW50IHRpbGUgdGhhdCBfc2hvdWxkXyBiZSBwbGFjZWQuXG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG5ldyBKb2ludFBsYWNlbWVudChmYWxzZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwbGFjZVRleHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBwbGFjZUljb24gPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBvZmZzY3JlZW4gPSB0cnVlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gbnVsbDtcblxuICAgICAgICAgICAgbGV0IHBsYWNlZCA9IHtib3g6IG51bGwsIG9mZnNjcmVlbjogbnVsbH07XG4gICAgICAgICAgICBsZXQgcGxhY2VkVmVydGljYWxUZXh0ID0ge2JveDogbnVsbCwgb2Zmc2NyZWVuOiBudWxsfTtcblxuICAgICAgICAgICAgbGV0IHBsYWNlZEdseXBoQm94ZXMgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHBsYWNlZEdseXBoQ2lyY2xlcyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcGxhY2VkSWNvbkJveGVzID0gbnVsbDtcbiAgICAgICAgICAgIGxldCB0ZXh0RmVhdHVyZUluZGV4ID0gMDtcbiAgICAgICAgICAgIGxldCB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXggPSAwO1xuICAgICAgICAgICAgbGV0IGljb25GZWF0dXJlSW5kZXggPSAwO1xuXG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnRleHRGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0ZXh0RmVhdHVyZUluZGV4ID0gY29sbGlzaW9uQXJyYXlzLnRleHRGZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCkge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHRCb3ggPSBjb2xsaXNpb25BcnJheXMudGV4dEJveDtcbiAgICAgICAgICAgIGlmICh0ZXh0Qm94KSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVQcmV2aW91c09yaWVudGF0aW9uSWZOb3RQbGFjZWQgPSAoaXNQbGFjZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzT3JpZW50YXRpb24gPSBXcml0aW5nTW9kZS5ob3Jpem9udGFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIWlzUGxhY2VkICYmIHRoaXMucHJldlBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldlBsYWNlZE9yaWVudGF0aW9uID0gdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldlBsYWNlZE9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gcHJldlBsYWNlZE9yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzT3JpZW50YXRpb24gPSBwcmV2UGxhY2VkT3JpZW50YXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldCwgcHJldmlvdXNPcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c09yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVRleHRGb3JQbGFjZW1lbnRNb2RlcyA9IChwbGFjZUhvcml6b250YWxGbiwgcGxhY2VWZXJ0aWNhbEZuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwICYmIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGxhY2VtZW50TW9kZSBvZiBidWNrZXQud3JpdGluZ01vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudE1vZGUgPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCA9IHBsYWNlVmVydGljYWxGbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWRWZXJ0aWNhbFRleHQgPSBwbGFjZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkID0gcGxhY2VIb3Jpem9udGFsRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCA9IHBsYWNlSG9yaXpvbnRhbEZuKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFsYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlQm94ID0gKGNvbGxpc2lvblRleHRCb3gsIG9yaWVudGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWRGZWF0dXJlID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChjb2xsaXNpb25UZXh0Qm94LCBsYXlvdXQuZ2V0KCd0ZXh0LWFsbG93LW92ZXJsYXAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LCBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZEZlYXR1cmUgJiYgcGxhY2VkRmVhdHVyZS5ib3ggJiYgcGxhY2VkRmVhdHVyZS5ib3gubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldCwgb3JpZW50YXRpb24sIHN5bWJvbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBvcmllbnRhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZWRGZWF0dXJlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlSG9yaXpvbnRhbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZUJveCh0ZXh0Qm94LCBXcml0aW5nTW9kZS5ob3Jpem9udGFsKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVZlcnRpY2FsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxUZXh0Qm94ID0gY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwICYmIHZlcnRpY2FsVGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZUJveCh2ZXJ0aWNhbFRleHRCb3gsIFdyaXRpbmdNb2RlLnZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ym94OiBudWxsLCBvZmZzY3JlZW46IG51bGx9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlVGV4dEZvclBsYWNlbWVudE1vZGVzKHBsYWNlSG9yaXpvbnRhbCwgcGxhY2VWZXJ0aWNhbCk7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByZXZpb3VzT3JpZW50YXRpb25JZk5vdFBsYWNlZChwbGFjZWQgJiYgcGxhY2VkLmJveCAmJiBwbGFjZWQuYm94Lmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYW5jaG9ycyA9IGxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBzeW1ib2wgd2FzIGluIHRoZSBsYXN0IHBsYWNlbWVudCwgc2hpZnQgdGhlIHByZXZpb3VzbHkgdXNlZFxuICAgICAgICAgICAgICAgICAgICAvLyBhbmNob3IgdG8gdGhlIGZyb250IG9mIHRoZSBhbmNob3IgbGlzdCwgb25seSBpZiB0aGUgcHJldmlvdXMgYW5jaG9yXG4gICAgICAgICAgICAgICAgICAgIC8vIGlzIHN0aWxsIGluIHRoZSBhbmNob3IgbGlzdFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2UGxhY2VtZW50ICYmIHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2T2Zmc2V0cyA9IHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvcnMuaW5kZXhPZihwcmV2T2Zmc2V0cy5hbmNob3IpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMgPSBhbmNob3JzLmZpbHRlcihhbmNob3IgPT4gYW5jaG9yICE9PSBwcmV2T2Zmc2V0cy5hbmNob3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMudW5zaGlmdChwcmV2T2Zmc2V0cy5hbmNob3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2VCb3hGb3JWYXJpYWJsZUFuY2hvcnMgPSAoY29sbGlzaW9uVGV4dEJveCwgY29sbGlzaW9uSWNvbkJveCwgb3JpZW50YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gY29sbGlzaW9uVGV4dEJveC54MiAtIGNvbGxpc2lvblRleHRCb3gueDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjb2xsaXNpb25UZXh0Qm94LnkyIC0gY29sbGlzaW9uVGV4dEJveC55MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRCb3hTY2FsZSA9IHN5bWJvbEluc3RhbmNlLnRleHRCb3hTY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFibGVJY29uQm94ID0gaGFzSWNvblRleHRGaXQgJiYgIWljb25BbGxvd092ZXJsYXAgPyBjb2xsaXNpb25JY29uQm94IDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBsYWNlZEJveDogP3sgYm94OiBBcnJheTxudW1iZXI+LCBvZmZzY3JlZW46IGJvb2xlYW4gfSAgPSB7Ym94OiBbXSwgb2Zmc2NyZWVuOiBmYWxzZX07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnRBdHRlbXB0cyA9IHRleHRBbGxvd092ZXJsYXAgPyBhbmNob3JzLmxlbmd0aCAqIDIgOiBhbmNob3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGxhY2VtZW50QXR0ZW1wdHM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGFuY2hvcnNbaSAlIGFuY2hvcnMubGVuZ3RoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxvd092ZXJsYXAgPSAoaSA+PSBhbmNob3JzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5hdHRlbXB0QW5jaG9yUGxhY2VtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IsIGNvbGxpc2lvblRleHRCb3gsIHdpZHRoLCBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCb3hTY2FsZSwgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Hcm91cCwgYWxsb3dPdmVybGFwLCBzeW1ib2xJbnN0YW5jZSwgYnVja2V0LCBvcmllbnRhdGlvbiwgdmFyaWFibGVJY29uQm94KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkQm94ID0gcmVzdWx0LnBsYWNlZEdseXBoQm94ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWRCb3ggJiYgcGxhY2VkQm94LmJveCAmJiBwbGFjZWRCb3guYm94Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gcmVzdWx0LnNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZWRCb3g7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2VIb3Jpem9udGFsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlQm94Rm9yVmFyaWFibGVBbmNob3JzKHRleHRCb3gsIGNvbGxpc2lvbkFycmF5cy5pY29uQm94LCBXcml0aW5nTW9kZS5ob3Jpem9udGFsKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVZlcnRpY2FsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxUZXh0Qm94ID0gY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc1BsYWNlZCA9IHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICF3YXNQbGFjZWQgJiYgc3ltYm9sSW5zdGFuY2UubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID4gMCAmJiB2ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2VCb3hGb3JWYXJpYWJsZUFuY2hvcnModmVydGljYWxUZXh0Qm94LCBjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94LCBXcml0aW5nTW9kZS52ZXJ0aWNhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2JveDogbnVsbCwgb2Zmc2NyZWVuOiBudWxsfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBwbGFjZVRleHRGb3JQbGFjZW1lbnRNb2RlcyhwbGFjZUhvcml6b250YWwsIHBsYWNlVmVydGljYWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlVGV4dCA9IHBsYWNlZC5ib3g7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzY3JlZW4gPSBwbGFjZWQub2Zmc2NyZWVuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldk9yaWVudGF0aW9uID0gdXBkYXRlUHJldmlvdXNPcmllbnRhdGlvbklmTm90UGxhY2VkKHBsYWNlZCAmJiBwbGFjZWQuYm94KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IHBsYWNlZCwgd2Ugc3RpbGwgbmVlZCB0byBjb3B5IG91ciBwb3NpdGlvbiBmcm9tIHRoZSBsYXN0IHBsYWNlbWVudCBmb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gZmFkZSBhbmltYXRpb25zXG4gICAgICAgICAgICAgICAgICAgIGlmICghcGxhY2VUZXh0ICYmIHRoaXMucHJldlBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldk9mZnNldCA9IHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBwcmV2T2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGJ1Y2tldCwgcHJldk9mZnNldC5hbmNob3IsIHN5bWJvbEluc3RhbmNlLCBwcmV2T3JpZW50YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBsYWNlZEdseXBoQm94ZXMgPSBwbGFjZWQ7XG4gICAgICAgICAgICBwbGFjZVRleHQgPSBwbGFjZWRHbHlwaEJveGVzICYmIHBsYWNlZEdseXBoQm94ZXMuYm94ICYmIHBsYWNlZEdseXBoQm94ZXMuYm94Lmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgIG9mZnNjcmVlbiA9IHBsYWNlZEdseXBoQm94ZXMgJiYgcGxhY2VkR2x5cGhCb3hlcy5vZmZzY3JlZW47XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q2lyY2xlcyA9IGNvbGxpc2lvbkFycmF5cy50ZXh0Q2lyY2xlcztcbiAgICAgICAgICAgIGlmICh0ZXh0Q2lyY2xlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlZFN5bWJvbCA9IGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChzeW1ib2xJbnN0YW5jZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGJ1Y2tldC50ZXh0U2l6ZURhdGEsIHBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplLCBwbGFjZWRTeW1ib2wpO1xuICAgICAgICAgICAgICAgIHBsYWNlZEdseXBoQ2lyY2xlcyA9IHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25DaXJjbGVzKHRleHRDaXJjbGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1hbGxvdy1vdmVybGFwJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRQaXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkU3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmxpbmVWZXJ0ZXhBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5nbHlwaE9mZnNldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGFiZWxQbGFuZU1hdHJpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDb2xsaXNpb25Cb3hlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoV2l0aE1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkdyb3VwLnByZWRpY2F0ZSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGV4dC1hbGxvdy1vdmVybGFwIGlzIHNldCwgZm9yY2UgXCJwbGFjZWRDaXJjbGVzXCIgdG8gdHJ1ZVxuICAgICAgICAgICAgICAgIC8vIEluIHRoZW9yeSB0aGVyZSBzaG91bGQgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBjaXJjbGUgcGxhY2VkXG4gICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlLCBidXQgZm9yIG5vdyBxdWlya3MgaW4gdGV4dC1hbmNob3JcbiAgICAgICAgICAgICAgICAvLyBhbmQgdGV4dC1vZmZzZXQgbWF5IHByZXZlbnQgdGhhdCBmcm9tIGJlaW5nIHRydWUuXG4gICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gbGF5b3V0LmdldCgndGV4dC1hbGxvdy1vdmVybGFwJykgfHwgcGxhY2VkR2x5cGhDaXJjbGVzLmNpcmNsZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICBvZmZzY3JlZW4gPSBvZmZzY3JlZW4gJiYgcGxhY2VkR2x5cGhDaXJjbGVzLm9mZnNjcmVlbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWNvbkZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLmljb25Cb3gpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlSWNvbkZlYXR1cmUgPSBpY29uQm94ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRlZEljb25Cb3ggPSBoYXNJY29uVGV4dEZpdCAmJiBzaGlmdCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25Cb3gsIHNoaWZ0LngsIHNoaWZ0LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB0aGlzLnRyYW5zZm9ybS5hbmdsZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkJveDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goc2hpZnRlZEljb25Cb3gsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCdpY29uLWFsbG93LW92ZXJsYXAnKSwgdGV4dFBpeGVsUmF0aW8sIHBvc01hdHJpeCwgY29sbGlzaW9uR3JvdXAucHJlZGljYXRlKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlZFZlcnRpY2FsVGV4dCAmJiBwbGFjZWRWZXJ0aWNhbFRleHQuYm94ICYmIHBsYWNlZFZlcnRpY2FsVGV4dC5ib3gubGVuZ3RoICYmIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25Cb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VkSWNvbkJveGVzID0gcGxhY2VJY29uRmVhdHVyZShjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94KTtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VJY29uID0gcGxhY2VkSWNvbkJveGVzLmJveC5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlZEljb25Cb3hlcyA9IHBsYWNlSWNvbkZlYXR1cmUoY29sbGlzaW9uQXJyYXlzLmljb25Cb3gpO1xuICAgICAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZWRJY29uQm94ZXMuYm94Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNjcmVlbiA9IG9mZnNjcmVlbiAmJiBwbGFjZWRJY29uQm94ZXMub2Zmc2NyZWVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpY29uV2l0aG91dFRleHQgPSB0ZXh0T3B0aW9uYWwgfHxcbiAgICAgICAgICAgICAgICAoc3ltYm9sSW5zdGFuY2UubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMgPT09IDAgJiYgc3ltYm9sSW5zdGFuY2UubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID09PSAwKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaXRob3V0SWNvbiA9IGljb25PcHRpb25hbCB8fCBzeW1ib2xJbnN0YW5jZS5udW1JY29uVmVydGljZXMgPT09IDA7XG5cbiAgICAgICAgICAgIC8vIENvbWJpbmUgdGhlIHNjYWxlcyBmb3IgaWNvbnMgYW5kIHRleHQuXG4gICAgICAgICAgICBpZiAoIWljb25XaXRob3V0VGV4dCAmJiAhdGV4dFdpdGhvdXRJY29uKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VJY29uID0gcGxhY2VUZXh0ID0gcGxhY2VJY29uICYmIHBsYWNlVGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRleHRXaXRob3V0SWNvbikge1xuICAgICAgICAgICAgICAgIHBsYWNlVGV4dCA9IHBsYWNlSWNvbiAmJiBwbGFjZVRleHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpY29uV2l0aG91dFRleHQpIHtcbiAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZUljb24gJiYgcGxhY2VUZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGxhY2VUZXh0ICYmIHBsYWNlZEdseXBoQm94ZXMgJiYgcGxhY2VkR2x5cGhCb3hlcy5ib3gpIHtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VkVmVydGljYWxUZXh0ICYmIHBsYWNlZFZlcnRpY2FsVGV4dC5ib3ggJiYgdmVydGljYWxUZXh0RmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHBsYWNlZEdseXBoQm94ZXMuYm94LCBsYXlvdXQuZ2V0KCd0ZXh0LWlnbm9yZS1wbGFjZW1lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkLCB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwLklEKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChwbGFjZWRHbHlwaEJveGVzLmJveCwgbGF5b3V0LmdldCgndGV4dC1pZ25vcmUtcGxhY2VtZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCwgdGV4dEZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXAuSUQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBsYWNlSWNvbiAmJiBwbGFjZWRJY29uQm94ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChwbGFjZWRJY29uQm94ZXMuYm94LCBsYXlvdXQuZ2V0KCdpY29uLWlnbm9yZS1wbGFjZW1lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkLCBpY29uRmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cC5JRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGxhY2VUZXh0ICYmIHBsYWNlZEdseXBoQ2lyY2xlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhwbGFjZWRHbHlwaENpcmNsZXMuY2lyY2xlcywgbGF5b3V0LmdldCgndGV4dC1pZ25vcmUtcGxhY2VtZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCwgdGV4dEZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXAuSUQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3NlcnQoc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgIT09IDApO1xuICAgICAgICAgICAgYXNzZXJ0KGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkICE9PSAwKTtcblxuICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG5ldyBKb2ludFBsYWNlbWVudChwbGFjZVRleHQgfHwgYWx3YXlzU2hvd1RleHQsIHBsYWNlSWNvbiB8fCBhbHdheXNTaG93SWNvbiwgb2Zmc2NyZWVuIHx8IGJ1Y2tldC5qdXN0UmVsb2FkZWQpO1xuICAgICAgICAgICAgc2VlbkNyb3NzVGlsZUlEc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh6T3JkZXJCeVZpZXdwb3J0WSkge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5kZXhlcyA9IGJ1Y2tldC5nZXRTb3J0ZWRTeW1ib2xJbmRleGVzKHRoaXMudHJhbnNmb3JtLmFuZ2xlKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzeW1ib2xJbmRleGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5kZXggPSBzeW1ib2xJbmRleGVzW2ldO1xuICAgICAgICAgICAgICAgIHBsYWNlU3ltYm9sKGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KHN5bWJvbEluZGV4KSwgYnVja2V0LmNvbGxpc2lvbkFycmF5c1tzeW1ib2xJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VTeW1ib2woYnVja2V0LnN5bWJvbEluc3RhbmNlcy5nZXQoaSksIGJ1Y2tldC5jb2xsaXNpb25BcnJheXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0Lmp1c3RSZWxvYWRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG1hcmtVc2VkSnVzdGlmaWNhdGlvbihidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgcGxhY2VkQW5jaG9yOiBUZXh0QW5jaG9yLCBzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIG9yaWVudGF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QganVzdGlmaWNhdGlvbnMgPSB7XG4gICAgICAgICAgICBcImxlZnRcIjogc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIFwiY2VudGVyXCI6IHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIFwicmlnaHRcIjogc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgYXV0b0luZGV4O1xuICAgICAgICBpZiAob3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICBhdXRvSW5kZXggPSBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF1dG9JbmRleCA9IGp1c3RpZmljYXRpb25zW2dldEFuY2hvckp1c3RpZmljYXRpb24ocGxhY2VkQW5jaG9yKV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleGVzID0gW1xuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF1dG9JbmRleCA+PSAwICYmIGluZGV4ICE9PSBhdXRvSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgYXJlIG11bHRpcGxlIGp1c3RpZmljYXRpb25zIGFuZCB0aGlzIG9uZSBpc24ndCBpdDogc2hpZnQgb2Zmc2NyZWVuXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChpbmRleCkuY3Jvc3NUaWxlSUQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBjaG9zZW4ganVzdGlmaWNhdGlvbiBvciB0aGUganVzdGlmaWNhdGlvbiBpcyBoYXJkd2lyZWQ6IHVzZSB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoaW5kZXgpLmNyb3NzVGlsZUlEID0gc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgb3JpZW50YXRpb246IG51bWJlciwgc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWwgPSAob3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwgfHwgb3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5KSA/IG9yaWVudGF0aW9uIDogMDtcbiAgICAgICAgY29uc3QgdmVydGljYWwgPSBvcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUudmVydGljYWwgPyBvcmllbnRhdGlvbiA6IDA7XG5cbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbEluZGV4ZXMgPSBbXG4gICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGhvcml6b250YWxJbmRleGVzKSB7XG4gICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoaW5kZXgpLnBsYWNlZE9yaWVudGF0aW9uID0gaG9yaXpvbnRhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCkge1xuICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KS5wbGFjZWRPcmllbnRhdGlvbiA9IHZlcnRpY2FsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tbWl0KG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29tbWl0VGltZSA9IG5vdztcbiAgICAgICAgdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrID0gdGhpcy50cmFuc2Zvcm0uem9vbTtcblxuICAgICAgICBjb25zdCBwcmV2UGxhY2VtZW50ID0gdGhpcy5wcmV2UGxhY2VtZW50O1xuICAgICAgICBsZXQgcGxhY2VtZW50Q2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJldlpvb21BZGp1c3RtZW50ID0gcHJldlBsYWNlbWVudCA/IHByZXZQbGFjZW1lbnQuem9vbUFkanVzdG1lbnQodGhpcy50cmFuc2Zvcm0uem9vbSkgOiAwO1xuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC5zeW1ib2xGYWRlQ2hhbmdlKG5vdykgOiAxO1xuXG4gICAgICAgIGNvbnN0IHByZXZPcGFjaXRpZXMgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC5vcGFjaXRpZXMgOiB7fTtcbiAgICAgICAgY29uc3QgcHJldk9mZnNldHMgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHMgOiB7fTtcbiAgICAgICAgY29uc3QgcHJldk9yaWVudGF0aW9ucyA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50LnBsYWNlZE9yaWVudGF0aW9ucyA6IHt9O1xuXG4gICAgICAgIC8vIGFkZCB0aGUgb3BhY2l0aWVzIGZyb20gdGhlIGN1cnJlbnQgcGxhY2VtZW50LCBhbmQgY29weSB0aGVpciBjdXJyZW50IHZhbHVlcyBmcm9tIHRoZSBwcmV2aW91cyBwbGFjZW1lbnRcbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiB0aGlzLnBsYWNlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGpvaW50UGxhY2VtZW50ID0gdGhpcy5wbGFjZW1lbnRzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZPcGFjaXR5ID0gcHJldk9wYWNpdGllc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICBpZiAocHJldk9wYWNpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUocHJldk9wYWNpdHksIGluY3JlbWVudCwgam9pbnRQbGFjZW1lbnQudGV4dCwgam9pbnRQbGFjZW1lbnQuaWNvbik7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50Q2hhbmdlZCA9IHBsYWNlbWVudENoYW5nZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgam9pbnRQbGFjZW1lbnQudGV4dCAhPT0gcHJldk9wYWNpdHkudGV4dC5wbGFjZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgam9pbnRQbGFjZW1lbnQuaWNvbiAhPT0gcHJldk9wYWNpdHkuaWNvbi5wbGFjZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSA9IG5ldyBKb2ludE9wYWNpdHlTdGF0ZShudWxsLCBpbmNyZW1lbnQsIGpvaW50UGxhY2VtZW50LnRleHQsIGpvaW50UGxhY2VtZW50Lmljb24sIGpvaW50UGxhY2VtZW50LnNraXBGYWRlKTtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRDaGFuZ2VkID0gcGxhY2VtZW50Q2hhbmdlZCB8fCBqb2ludFBsYWNlbWVudC50ZXh0IHx8IGpvaW50UGxhY2VtZW50Lmljb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb3B5IGFuZCB1cGRhdGUgdmFsdWVzIGZyb20gdGhlIHByZXZpb3VzIHBsYWNlbWVudCB0aGF0IGFyZW4ndCBpbiB0aGUgY3VycmVudCBwbGFjZW1lbnQgYnV0IGhhdmVuJ3QgZmluaXNoZWQgZmFkaW5nXG4gICAgICAgIGZvciAoY29uc3QgY3Jvc3NUaWxlSUQgaW4gcHJldk9wYWNpdGllcykge1xuICAgICAgICAgICAgY29uc3QgcHJldk9wYWNpdHkgPSBwcmV2T3BhY2l0aWVzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgam9pbnRPcGFjaXR5ID0gbmV3IEpvaW50T3BhY2l0eVN0YXRlKHByZXZPcGFjaXR5LCBpbmNyZW1lbnQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFqb2ludE9wYWNpdHkuaXNIaWRkZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBqb2ludE9wYWNpdHk7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudENoYW5nZWQgPSBwbGFjZW1lbnRDaGFuZ2VkIHx8IHByZXZPcGFjaXR5LnRleHQucGxhY2VkIHx8IHByZXZPcGFjaXR5Lmljb24ucGxhY2VkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNyb3NzVGlsZUlEIGluIHByZXZPZmZzZXRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVPZmZzZXRzW2Nyb3NzVGlsZUlEXSAmJiB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gJiYgIXRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9mZnNldHNbY3Jvc3NUaWxlSURdID0gcHJldk9mZnNldHNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiBwcmV2T3JpZW50YXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucGxhY2VkT3JpZW50YXRpb25zW2Nyb3NzVGlsZUlEXSAmJiB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gJiYgIXRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbY3Jvc3NUaWxlSURdID0gcHJldk9yaWVudGF0aW9uc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBsYXN0IGNvbW1pdCgpIHRoYXRcbiAgICAgICAgLy8gcmVzdWx0ZWQgaW4gYSBwbGFjZW1lbnQgY2hhbmdlIC0tIGluIG90aGVyIHdvcmRzLCB0aGUgc3RhcnQgdGltZSBvZlxuICAgICAgICAvLyB0aGUgbGFzdCBzeW1ib2wgZmFkZSBhbmltYXRpb25cbiAgICAgICAgYXNzZXJ0KCFwcmV2UGxhY2VtZW50IHx8IHByZXZQbGFjZW1lbnQubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGlmIChwbGFjZW1lbnRDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lID0gbm93O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50Lmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIDogbm93O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlTGF5ZXJPcGFjaXRpZXMoc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZXM6IEFycmF5PFRpbGU+KSB7XG4gICAgICAgIGNvbnN0IHNlZW5Dcm9zc1RpbGVJRHMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB0aWxlIG9mIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICAgICAgaWYgKHN5bWJvbEJ1Y2tldCAmJiB0aWxlLmxhdGVzdEZlYXR1cmVJbmRleCAmJiBzdHlsZUxheWVyLmlkID09PSBzeW1ib2xCdWNrZXQubGF5ZXJJZHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcyhzeW1ib2xCdWNrZXQsIHNlZW5Dcm9zc1RpbGVJRHMsIHRpbGUuY29sbGlzaW9uQm94QXJyYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQnVja2V0T3BhY2l0aWVzKGJ1Y2tldDogU3ltYm9sQnVja2V0LCBzZWVuQ3Jvc3NUaWxlSURzOiB7IFtzdHJpbmcgfCBudW1iZXJdOiBib29sZWFuIH0sIGNvbGxpc2lvbkJveEFycmF5OiA/Q29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0RGF0YSgpKSBidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uRGF0YSgpKSBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpKSBidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkpIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCk7XG4gICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkNvbGxpc2lvbkNpcmNsZURhdGEoKSkgYnVja2V0Lmljb25Db2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQ2lyY2xlRGF0YSgpKSBidWNrZXQudGV4dENvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO1xuXG4gICAgICAgIGNvbnN0IGxheW91dCA9IGJ1Y2tldC5sYXllcnNbMF0ubGF5b3V0O1xuICAgICAgICBjb25zdCBkdXBsaWNhdGVPcGFjaXR5U3RhdGUgPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUobnVsbCwgMCwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgY29uc3QgdGV4dEFsbG93T3ZlcmxhcCA9IGxheW91dC5nZXQoJ3RleHQtYWxsb3ctb3ZlcmxhcCcpO1xuICAgICAgICBjb25zdCBpY29uQWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgnaWNvbi1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlUGxhY2VtZW50ID0gbGF5b3V0LmdldCgndGV4dC12YXJpYWJsZS1hbmNob3InKTtcbiAgICAgICAgY29uc3Qgcm90YXRlV2l0aE1hcCA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCBwaXRjaFdpdGhNYXAgPSBsYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJztcbiAgICAgICAgY29uc3QgaGFzSWNvblRleHRGaXQgPSBsYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJztcbiAgICAgICAgLy8gSWYgYWxsb3ctb3ZlcmxhcCBpcyB0cnVlLCB3ZSBjYW4gc2hvdyBzeW1ib2xzIGJlZm9yZSBwbGFjZW1lbnQgcnVucyBvbiB0aGVtXG4gICAgICAgIC8vIEJ1dCB3ZSBoYXZlIHRvIHdhaXQgZm9yIHBsYWNlbWVudCBpZiB3ZSBwb3RlbnRpYWxseSBkZXBlbmQgb24gYSBwYWlyZWQgaWNvbi90ZXh0XG4gICAgICAgIC8vIHdpdGggYWxsb3ctb3ZlcmxhcDogZmFsc2UuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzAzMlxuICAgICAgICBjb25zdCBkZWZhdWx0T3BhY2l0eVN0YXRlID0gbmV3IEpvaW50T3BhY2l0eVN0YXRlKG51bGwsIDAsXG4gICAgICAgICAgICAgICAgdGV4dEFsbG93T3ZlcmxhcCAmJiAoaWNvbkFsbG93T3ZlcmxhcCB8fCAhYnVja2V0Lmhhc0ljb25EYXRhKCkgfHwgbGF5b3V0LmdldCgnaWNvbi1vcHRpb25hbCcpKSxcbiAgICAgICAgICAgICAgICBpY29uQWxsb3dPdmVybGFwICYmICh0ZXh0QWxsb3dPdmVybGFwIHx8ICFidWNrZXQuaGFzVGV4dERhdGEoKSB8fCBsYXlvdXQuZ2V0KCd0ZXh0LW9wdGlvbmFsJykpLFxuICAgICAgICAgICAgICAgIHRydWUpO1xuXG4gICAgICAgIGlmICghYnVja2V0LmNvbGxpc2lvbkFycmF5cyAmJiBjb2xsaXNpb25Cb3hBcnJheSAmJiAoKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpIHx8IGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQ2lyY2xlRGF0YSgpIHx8XG4gICAgICAgICAgICBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSB8fCBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkNpcmNsZURhdGEoKSkpKSB7XG4gICAgICAgICAgICBidWNrZXQuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhjb2xsaXNpb25Cb3hBcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRPcGFjaXRpZXMgPSAoaWNvbk9yVGV4dCwgbnVtVmVydGljZXM6IG51bWJlciwgb3BhY2l0eTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVZlcnRpY2VzIC8gNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWNvbk9yVGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuZW1wbGFjZUJhY2sob3BhY2l0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KHMpO1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLFxuICAgICAgICAgICAgICAgIG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxcbiAgICAgICAgICAgICAgICBjcm9zc1RpbGVJRFxuICAgICAgICAgICAgfSA9IHN5bWJvbEluc3RhbmNlO1xuXG4gICAgICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHNlZW5Dcm9zc1RpbGVJRHNbY3Jvc3NUaWxlSURdO1xuXG4gICAgICAgICAgICBsZXQgb3BhY2l0eVN0YXRlID0gdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eVN0YXRlID0gZHVwbGljYXRlT3BhY2l0eVN0YXRlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghb3BhY2l0eVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eVN0YXRlID0gZGVmYXVsdE9wYWNpdHlTdGF0ZTtcbiAgICAgICAgICAgICAgICAvLyBzdG9yZSB0aGUgc3RhdGUgc28gdGhhdCBmdXR1cmUgcGxhY2VtZW50cyB1c2UgaXQgYXMgYSBzdGFydGluZyBwb2ludFxuICAgICAgICAgICAgICAgIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSA9IG9wYWNpdHlTdGF0ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VlbkNyb3NzVGlsZUlEc1tjcm9zc1RpbGVJRF0gPSB0cnVlO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNUZXh0ID0gbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMgPiAwIHx8IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyA+IDA7XG4gICAgICAgICAgICBjb25zdCBoYXNJY29uID0gc3ltYm9sSW5zdGFuY2UubnVtSWNvblZlcnRpY2VzID4gMDtcblxuICAgICAgICAgICAgY29uc3QgcGxhY2VkT3JpZW50YXRpb24gPSB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsSGlkZGVuID0gcGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsO1xuICAgICAgICAgICAgY29uc3QgdmVydGljYWxIaWRkZW4gPSBwbGFjZWRPcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbCB8fCBwbGFjZWRPcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHk7XG5cbiAgICAgICAgICAgIGlmIChoYXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFja2VkT3BhY2l0eSA9IHBhY2tPcGFjaXR5KG9wYWNpdHlTdGF0ZS50ZXh0KTtcbiAgICAgICAgICAgICAgICAvLyBWZXJ0aWNhbCB0ZXh0IGZhZGVzIGluL291dCBvbiBjb2xsaXNpb24gdGhlIHNhbWUgd2F5IGFzIGNvcnJlc3BvbmRpbmdcbiAgICAgICAgICAgICAgICAvLyBob3Jpem9udGFsIHRleHQuIFN3aXRjaCBiZXR3ZWVuIHZlcnRpY2FsL2hvcml6b250YWwgc2hvdWxkIGJlIGluc3RhbnRhbmVvdXNcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsT3BhY2l0eSA9IGhvcml6b250YWxIaWRkZW4gPyBQQUNLRURfSElEREVOX09QQUNJVFkgOiBwYWNrZWRPcGFjaXR5O1xuICAgICAgICAgICAgICAgIGFkZE9wYWNpdGllcyhidWNrZXQudGV4dCwgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMsIGhvcml6b250YWxPcGFjaXR5KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbE9wYWNpdHkgPSB2ZXJ0aWNhbEhpZGRlbiA/IFBBQ0tFRF9ISURERU5fT1BBQ0lUWSA6IHBhY2tlZE9wYWNpdHk7XG4gICAgICAgICAgICAgICAgYWRkT3BhY2l0aWVzKGJ1Y2tldC50ZXh0LCBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMsIHZlcnRpY2FsT3BhY2l0eSk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGxhYmVsIGlzIGNvbXBsZXRlbHkgZmFkZWQsIG1hcmsgaXQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGNhbGN1bGF0ZVxuICAgICAgICAgICAgICAgIC8vIGl0cyBwb3NpdGlvbiBhdCByZW5kZXIgdGltZS4gSWYgdGhpcyBsYXllciBoYXMgdmFyaWFibGUgcGxhY2VtZW50LCBzaGlmdCB0aGUgdmFyaW91c1xuICAgICAgICAgICAgICAgIC8vIHN5bWJvbCBpbnN0YW5jZXMgYXBwcm9wcmlhdGVseSBzbyB0aGF0IHN5bWJvbHMgZnJvbSBidWNrZXRzIHRoYXQgaGF2ZSB5ZXQgdG8gYmUgcGxhY2VkXG4gICAgICAgICAgICAgICAgLy8gb2Zmc2V0IGFwcHJvcHJpYXRlbHkuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ltYm9sSGlkZGVuID0gb3BhY2l0eVN0YXRlLnRleHQuaXNIaWRkZW4oKTtcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgICAgICAgICBdLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGluZGV4KS5oaWRkZW4gPSBzeW1ib2xIaWRkZW4gfHwgaG9yaXpvbnRhbEhpZGRlbiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLmhpZGRlbiA9IHN5bWJvbEhpZGRlbiB8fCB2ZXJ0aWNhbEhpZGRlbiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZPZmZzZXQgPSB0aGlzLnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgaWYgKHByZXZPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0LCBwcmV2T2Zmc2V0LmFuY2hvciwgc3ltYm9sSW5zdGFuY2UsIHBsYWNlZE9yaWVudGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2T3JpZW50YXRpb24gPSB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgaWYgKHByZXZPcmllbnRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihidWNrZXQsICdsZWZ0Jywgc3ltYm9sSW5zdGFuY2UsIHByZXZPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQsIHByZXZPcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0ljb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWNrZWRPcGFjaXR5ID0gcGFja09wYWNpdHkob3BhY2l0eVN0YXRlLmljb24pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlSG9yaXpvbnRhbCA9ICEoaGFzSWNvblRleHRGaXQgJiYgc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXggJiYgaG9yaXpvbnRhbEhpZGRlbik7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UucGxhY2VkSWNvblN5bWJvbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE9wYWNpdHkgPSB1c2VIb3Jpem9udGFsID8gcGFja2VkT3BhY2l0eSA6IFBBQ0tFRF9ISURERU5fT1BBQ0lUWTtcbiAgICAgICAgICAgICAgICAgICAgYWRkT3BhY2l0aWVzKGJ1Y2tldC5pY29uLCBzeW1ib2xJbnN0YW5jZS5udW1JY29uVmVydGljZXMsIGhvcml6b250YWxPcGFjaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLnBsYWNlZEljb25TeW1ib2xJbmRleCkuaGlkZGVuID1cbiAgICAgICAgICAgICAgICAgICAgICAgIChvcGFjaXR5U3RhdGUuaWNvbi5pc0hpZGRlbigpOiBhbnkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsT3BhY2l0eSA9ICF1c2VIb3Jpem9udGFsID8gcGFja2VkT3BhY2l0eSA6IFBBQ0tFRF9ISURERU5fT1BBQ0lUWTtcbiAgICAgICAgICAgICAgICAgICAgYWRkT3BhY2l0aWVzKGJ1Y2tldC5pY29uLCBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEljb25WZXJ0aWNlcywgdmVydGljYWxPcGFjaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4KS5oaWRkZW4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKG9wYWNpdHlTdGF0ZS5pY29uLmlzSGlkZGVuKCk6IGFueSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkgfHwgYnVja2V0Lmhhc0ljb25Db2xsaXNpb25DaXJjbGVEYXRhKCkgfHxcbiAgICAgICAgICAgICAgICBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSB8fCBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkNpcmNsZURhdGEoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxpc2lvbkFycmF5cyA9IGJ1Y2tldC5jb2xsaXNpb25BcnJheXNbc107XG4gICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2hpZnQgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaXNpb25BcnJheXMudGV4dEJveCB8fCBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYWJsZU9mZnNldCA9IHRoaXMudmFyaWFibGVPZmZzZXRzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHNob3cgZWl0aGVyIHRoZSBjdXJyZW50bHkgcGxhY2VkIHBvc2l0aW9uIG9yIHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3NmdWxseSBwbGFjZWQgcG9zaXRpb24gKHNvIHlvdSBjYW4gdmlzdWFsaXplIHdoYXQgY29sbGlzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgbWFkZSB0aGUgc3ltYm9sIGRpc2FwcGVhciwgYW5kIHRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN5bWJvbCB0byBjb21lIGJhY2spXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gY2FsY3VsYXRlVmFyaWFibGVMYXlvdXRTaGlmdCh2YXJpYWJsZU9mZnNldC5hbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0LndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZU9mZnNldC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0LnRleHRPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0LnRleHRCb3hTY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdC5fcm90YXRlKHBpdGNoV2l0aE1hcCA/IHRoaXMudHJhbnNmb3JtLmFuZ2xlIDogLXRoaXMudHJhbnNmb3JtLmFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIG9mZnNldCAtPiB0aGlzIHN5bWJvbCBoYXNuJ3QgYmVlbiBwbGFjZWQgc2luY2UgY29taW5nIG9uLXNjcmVlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBzaW5nbGUgYm94IGlzIHBhcnRpY3VsYXJseSBtZWFuaW5nZnVsIGFuZCBhbGwgb2YgdGhlbSB3b3VsZCBiZSB0b28gbm9pc3lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBjZW50ZXIgYm94IGp1c3QgdG8gc2hvdyBzb21ldGhpbmcncyB0aGVyZSwgYnV0IG1hcmsgaXQgXCJub3QgdXNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaXNpb25BcnJheXMudGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUudGV4dC5wbGFjZWQsICF1c2VkIHx8IGhvcml6b250YWxIaWRkZW4sIHNoaWZ0LngsIHNoaWZ0LnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhidWNrZXQudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgb3BhY2l0eVN0YXRlLnRleHQucGxhY2VkLCAhdXNlZCB8fCB2ZXJ0aWNhbEhpZGRlbiwgc2hpZnQueCwgc2hpZnQueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbEljb25Vc2VkID0gQm9vbGVhbighdmVydGljYWxIaWRkZW4gJiYgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkJveCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy5pY29uQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgb3BhY2l0eVN0YXRlLmljb24ucGxhY2VkLCB2ZXJ0aWNhbEljb25Vc2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ljb25UZXh0Rml0ID8gc2hpZnQueCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSWNvblRleHRGaXQgPyBzaGlmdC55IDogMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ29sbGlzaW9uVmVydGljZXMoYnVja2V0Lmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksIG9wYWNpdHlTdGF0ZS5pY29uLnBsYWNlZCwgIXZlcnRpY2FsSWNvblVzZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSWNvblRleHRGaXQgPyBzaGlmdC54IDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJY29uVGV4dEZpdCA/IHNoaWZ0LnkgOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRDaXJjbGVzID0gY29sbGlzaW9uQXJyYXlzLnRleHRDaXJjbGVzO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dENpcmNsZXMgJiYgYnVja2V0Lmhhc1RleHRDb2xsaXNpb25DaXJjbGVEYXRhKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGV4dENpcmNsZXMubGVuZ3RoOyBrICs9IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RVc2VkID0gaXNEdXBsaWNhdGUgfHwgdGV4dENpcmNsZXNbayArIDRdID09PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC50ZXh0Q29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUudGV4dC5wbGFjZWQsIG5vdFVzZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0LnNvcnRGZWF0dXJlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgIGlmICh0aGlzLnJldGFpbmVkUXVlcnlEYXRhW2J1Y2tldC5idWNrZXRJbnN0YW5jZUlkXSkge1xuICAgICAgICAgICAgdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtidWNrZXQuYnVja2V0SW5zdGFuY2VJZF0uZmVhdHVyZVNvcnRPcmRlciA9IGJ1Y2tldC5mZWF0dXJlU29ydE9yZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0RGF0YSgpICYmIGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkRhdGEoKSAmJiBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkgJiYgYnVja2V0Lmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpICYmIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkNvbGxpc2lvbkNpcmNsZURhdGEoKSAmJiBidWNrZXQuaWNvbkNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1Y2tldC5pY29uQ29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGJ1Y2tldC5pY29uQ29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHRDb2xsaXNpb25DaXJjbGVEYXRhKCkgJiYgYnVja2V0LnRleHRDb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQudGV4dENvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQudGV4dENvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnQoYnVja2V0LnRleHQub3BhY2l0eVZlcnRleEFycmF5Lmxlbmd0aCA9PT0gYnVja2V0LnRleHQubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoIC8gNCk7XG4gICAgICAgIGFzc2VydChidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkubGVuZ3RoID09PSBidWNrZXQuaWNvbi5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggLyA0KTtcbiAgICB9XG5cbiAgICBzeW1ib2xGYWRlQ2hhbmdlKG5vdzogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZhZGVEdXJhdGlvbiA9PT0gMCA/XG4gICAgICAgICAgICAxIDpcbiAgICAgICAgICAgICgobm93IC0gdGhpcy5jb21taXRUaW1lKSAvIHRoaXMuZmFkZUR1cmF0aW9uICsgdGhpcy5wcmV2Wm9vbUFkanVzdG1lbnQpO1xuICAgIH1cblxuICAgIHpvb21BZGp1c3RtZW50KHpvb206IG51bWJlcikge1xuICAgICAgICAvLyBXaGVuIHpvb21pbmcgb3V0IHF1aWNrbHksIGxhYmVscyBjYW4gb3ZlcmxhcCBlYWNoIG90aGVyLiBUaGlzXG4gICAgICAgIC8vIGFkanVzdG1lbnQgaXMgdXNlZCB0byByZWR1Y2UgdGhlIGludGVydmFsIGJldHdlZW4gcGxhY2VtZW50IGNhbGN1bGF0aW9uc1xuICAgICAgICAvLyBhbmQgdG8gcmVkdWNlIHRoZSBmYWRlIGR1cmF0aW9uIHdoZW4gem9vbWluZyBvdXQgcXVpY2tseS4gRGlzY292ZXJpbmcgdGhlXG4gICAgICAgIC8vIGNvbGxpc2lvbnMgbW9yZSBxdWlja2x5IGFuZCBmYWRpbmcgdGhlbSBtb3JlIHF1aWNrbHkgcmVkdWNlcyB0aGUgdW53YW50ZWQgZWZmZWN0LlxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgKHRoaXMudHJhbnNmb3JtLnpvb20gLSB6b29tKSAvIDEuNSk7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbnMobm93OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhbGUgfHxcbiAgICAgICAgICAgIG5vdyAtIHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgPCB0aGlzLmZhZGVEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBzdGlsbFJlY2VudChub3c6IG51bWJlciwgem9vbTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFRoZSBhZGp1c3RtZW50IG1ha2VzIHBsYWNlbWVudCBtb3JlIGZyZXF1ZW50IHdoZW4gem9vbWluZy5cbiAgICAgICAgLy8gVGhpcyBjb25kaXRpb24gYXBwbGllcyB0aGUgYWRqdXN0bWVudCBvbmx5IGFmdGVyIHRoZSBtYXAgaGFzXG4gICAgICAgIC8vIHN0b3BwZWQgem9vbWluZy4gVGhpcyBhdm9pZHMgYWRkaW5nIGV4dHJhIGphbmsgd2hpbGUgem9vbWluZy5cbiAgICAgICAgY29uc3QgZHVyYXRpb25BZGp1c3RtZW50ID0gdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrID09PSB6b29tID9cbiAgICAgICAgICAgICgxIC0gdGhpcy56b29tQWRqdXN0bWVudCh6b29tKSkgOlxuICAgICAgICAgICAgMTtcbiAgICAgICAgdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrID0gem9vbTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb21taXRUaW1lICsgdGhpcy5mYWRlRHVyYXRpb24gKiBkdXJhdGlvbkFkanVzdG1lbnQgPiBub3c7XG4gICAgfVxuXG4gICAgc2V0U3RhbGUoKSB7XG4gICAgICAgIHRoaXMuc3RhbGUgPSB0cnVlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29sbGlzaW9uVmVydGljZXMoY29sbGlzaW9uVmVydGV4QXJyYXk6IENvbGxpc2lvblZlcnRleEFycmF5LCBwbGFjZWQ6IGJvb2xlYW4sIG5vdFVzZWQ6IGJvb2xlYW4gfCBudW1iZXIsIHNoaWZ0WD86IG51bWJlciwgc2hpZnRZPzogbnVtYmVyKSB7XG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXkuZW1wbGFjZUJhY2socGxhY2VkID8gMSA6IDAsIG5vdFVzZWQgPyAxIDogMCwgc2hpZnRYIHx8IDAsIHNoaWZ0WSB8fCAwKTtcbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwbGFjZWQgPyAxIDogMCwgbm90VXNlZCA/IDEgOiAwLCBzaGlmdFggfHwgMCwgc2hpZnRZIHx8IDApO1xuICAgIGNvbGxpc2lvblZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHBsYWNlZCA/IDEgOiAwLCBub3RVc2VkID8gMSA6IDAsIHNoaWZ0WCB8fCAwLCBzaGlmdFkgfHwgMCk7XG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXkuZW1wbGFjZUJhY2socGxhY2VkID8gMSA6IDAsIG5vdFVzZWQgPyAxIDogMCwgc2hpZnRYIHx8IDAsIHNoaWZ0WSB8fCAwKTtcbn1cblxuLy8gQWxsIGZvdXIgdmVydGljZXMgZm9yIGEgZ2x5cGggd2lsbCBoYXZlIHRoZSBzYW1lIG9wYWNpdHkgc3RhdGVcbi8vIFNvIHdlIHBhY2sgdGhlIG9wYWNpdHkgaW50byBhIHVpbnQ4LCBhbmQgdGhlbiByZXBlYXQgaXQgZm91ciB0aW1lc1xuLy8gdG8gbWFrZSBhIHNpbmdsZSB1aW50MzIgdGhhdCB3ZSBjYW4gdXBsb2FkIGZvciBlYWNoIGdseXBoIGluIHRoZVxuLy8gbGFiZWwuXG5jb25zdCBzaGlmdDI1ID0gTWF0aC5wb3coMiwgMjUpO1xuY29uc3Qgc2hpZnQyNCA9IE1hdGgucG93KDIsIDI0KTtcbmNvbnN0IHNoaWZ0MTcgPSBNYXRoLnBvdygyLCAxNyk7XG5jb25zdCBzaGlmdDE2ID0gTWF0aC5wb3coMiwgMTYpO1xuY29uc3Qgc2hpZnQ5ID0gTWF0aC5wb3coMiwgOSk7XG5jb25zdCBzaGlmdDggPSBNYXRoLnBvdygyLCA4KTtcbmNvbnN0IHNoaWZ0MSA9IE1hdGgucG93KDIsIDEpO1xuZnVuY3Rpb24gcGFja09wYWNpdHkob3BhY2l0eVN0YXRlOiBPcGFjaXR5U3RhdGUpOiBudW1iZXIge1xuICAgIGlmIChvcGFjaXR5U3RhdGUub3BhY2l0eSA9PT0gMCAmJiAhb3BhY2l0eVN0YXRlLnBsYWNlZCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKG9wYWNpdHlTdGF0ZS5vcGFjaXR5ID09PSAxICYmIG9wYWNpdHlTdGF0ZS5wbGFjZWQpIHtcbiAgICAgICAgcmV0dXJuIDQyOTQ5NjcyOTU7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldEJpdCA9IG9wYWNpdHlTdGF0ZS5wbGFjZWQgPyAxIDogMDtcbiAgICBjb25zdCBvcGFjaXR5Qml0cyA9IE1hdGguZmxvb3Iob3BhY2l0eVN0YXRlLm9wYWNpdHkgKiAxMjcpO1xuICAgIHJldHVybiBvcGFjaXR5Qml0cyAqIHNoaWZ0MjUgKyB0YXJnZXRCaXQgKiBzaGlmdDI0ICtcbiAgICAgICAgb3BhY2l0eUJpdHMgKiBzaGlmdDE3ICsgdGFyZ2V0Qml0ICogc2hpZnQxNiArXG4gICAgICAgIG9wYWNpdHlCaXRzICogc2hpZnQ5ICsgdGFyZ2V0Qml0ICogc2hpZnQ4ICtcbiAgICAgICAgb3BhY2l0eUJpdHMgKiBzaGlmdDEgKyB0YXJnZXRCaXQ7XG59XG5cbmNvbnN0IFBBQ0tFRF9ISURERU5fT1BBQ0lUWSA9IDA7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQge1BsYWNlbWVudH0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5cbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uL3NvdXJjZS90aWxlJztcblxuY2xhc3MgTGF5ZXJQbGFjZW1lbnQge1xuICAgIF9jdXJyZW50VGlsZUluZGV4OiBudW1iZXI7XG4gICAgX3RpbGVzOiBBcnJheTxUaWxlPjtcbiAgICBfc2VlbkNyb3NzVGlsZUlEczogeyBbc3RyaW5nIHwgbnVtYmVyXTogYm9vbGVhbiB9O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaWxlSW5kZXggPSAwO1xuICAgICAgICB0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzID0ge307XG4gICAgfVxuXG4gICAgY29udGludWVQbGFjZW1lbnQodGlsZXM6IEFycmF5PFRpbGU+LCBwbGFjZW1lbnQ6IFBsYWNlbWVudCwgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuLCBzdHlsZUxheWVyOiBTdHlsZUxheWVyLCBzaG91bGRQYXVzZVBsYWNlbWVudDogKCkgPT4gYm9vbGVhbikge1xuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudFRpbGVJbmRleCA8IHRpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRpbGVzW3RoaXMuX2N1cnJlbnRUaWxlSW5kZXhdO1xuICAgICAgICAgICAgcGxhY2VtZW50LnBsYWNlTGF5ZXJUaWxlKHN0eWxlTGF5ZXIsIHRpbGUsIHNob3dDb2xsaXNpb25Cb3hlcywgdGhpcy5fc2VlbkNyb3NzVGlsZUlEcyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaWxlSW5kZXgrKztcbiAgICAgICAgICAgIGlmIChzaG91bGRQYXVzZVBsYWNlbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFBhdXNlYWJsZVBsYWNlbWVudCB7XG4gICAgcGxhY2VtZW50OiBQbGFjZW1lbnQ7XG4gICAgX2RvbmU6IGJvb2xlYW47XG4gICAgX2N1cnJlbnRQbGFjZW1lbnRJbmRleDogbnVtYmVyO1xuICAgIF9mb3JjZUZ1bGxQbGFjZW1lbnQ6IGJvb2xlYW47XG4gICAgX3Nob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbjtcbiAgICBfaW5Qcm9ncmVzc0xheWVyOiA/TGF5ZXJQbGFjZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2Zvcm06IFRyYW5zZm9ybSwgb3JkZXI6IEFycmF5PHN0cmluZz4sXG4gICAgICAgICAgICAgICAgZm9yY2VGdWxsUGxhY2VtZW50OiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbixcbiAgICAgICAgICAgICAgICBmYWRlRHVyYXRpb246IG51bWJlcixcbiAgICAgICAgICAgICAgICBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcHJldlBsYWNlbWVudD86IFBsYWNlbWVudCkge1xuXG4gICAgICAgIHRoaXMucGxhY2VtZW50ID0gbmV3IFBsYWNlbWVudCh0cmFuc2Zvcm0sIGZhZGVEdXJhdGlvbiwgY3Jvc3NTb3VyY2VDb2xsaXNpb25zLCBwcmV2UGxhY2VtZW50KTtcbiAgICAgICAgdGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4ID0gb3JkZXIubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5fZm9yY2VGdWxsUGxhY2VtZW50ID0gZm9yY2VGdWxsUGxhY2VtZW50O1xuICAgICAgICB0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMgPSBzaG93Q29sbGlzaW9uQm94ZXM7XG4gICAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpc0RvbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb25lO1xuICAgIH1cblxuICAgIGNvbnRpbnVlUGxhY2VtZW50KG9yZGVyOiBBcnJheTxzdHJpbmc+LCBsYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn0sIGxheWVyVGlsZXM6IHtbc3RyaW5nXTogQXJyYXk8VGlsZT59KSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGJyb3dzZXIubm93KCk7XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkUGF1c2VQbGFjZW1lbnQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGFwc2VkVGltZSA9IGJyb3dzZXIubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9yY2VGdWxsUGxhY2VtZW50ID8gZmFsc2UgOiBlbGFwc2VkVGltZSA+IDI7XG4gICAgICAgIH07XG5cbiAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllcklkID0gb3JkZXJbdGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50Wm9vbSA9IHRoaXMucGxhY2VtZW50LmNvbGxpc2lvbkluZGV4LnRyYW5zZm9ybS56b29tO1xuICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdzeW1ib2wnICYmXG4gICAgICAgICAgICAgICAgKCFsYXllci5taW56b29tIHx8IGxheWVyLm1pbnpvb20gPD0gcGxhY2VtZW50Wm9vbSkgJiZcbiAgICAgICAgICAgICAgICAoIWxheWVyLm1heHpvb20gfHwgbGF5ZXIubWF4em9vbSA+IHBsYWNlbWVudFpvb20pKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2luUHJvZ3Jlc3NMYXllcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pblByb2dyZXNzTGF5ZXIgPSBuZXcgTGF5ZXJQbGFjZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXVzZVBsYWNlbWVudCA9IHRoaXMuX2luUHJvZ3Jlc3NMYXllci5jb250aW51ZVBsYWNlbWVudChsYXllclRpbGVzW2xheWVyLnNvdXJjZV0sIHRoaXMucGxhY2VtZW50LCB0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMsIGxheWVyLCBzaG91bGRQYXVzZVBsYWNlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGF1c2VQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZGlkbid0IGZpbmlzaCBwbGFjaW5nIGFsbCBsYXllcnMgd2l0aGluIDJtcyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHdlIGNhbiBrZWVwIHJlbmRlcmluZyB3aXRoIGEgcGFydGlhbCBwbGFjZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UnbGwgcmVzdW1lIGhlcmUgb24gdGhlIG5leHQgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9pblByb2dyZXNzTGF5ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29tbWl0KG5vdzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGxhY2VtZW50LmNvbW1pdChub3cpO1xuICAgICAgICByZXR1cm4gdGhpcy5wbGFjZW1lbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYXVzZWFibGVQbGFjZW1lbnQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuaW1wb3J0IHtTeW1ib2xJbnN0YW5jZUFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHR5cGUge1N5bWJvbEluc3RhbmNlfSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vc291cmNlL3RpbGUnO1xuXG4vKlxuICAgIFRoZSBDcm9zc1RpbGVTeW1ib2xJbmRleCBnZW5lcmFsbHkgd29ya3Mgb24gdGhlIGFzc3VtcHRpb24gdGhhdFxuICAgIGEgY29uY2VwdHVhbCBcInVuaXF1ZSBzeW1ib2xcIiBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgdGV4dCBvZlxuICAgIHRoZSBsYWJlbCBjb21iaW5lZCB3aXRoIHRoZSBhbmNob3IgcG9pbnQuIFRoZSBnb2FsIGlzIHRvIGFzc2lnblxuICAgIHRoZXNlIGNvbmNlcHR1YWwgXCJ1bmlxdWUgc3ltYm9sc1wiIGEgc2hhcmVkIGNyb3NzVGlsZUlEIHRoYXQgY2FuIGJlXG4gICAgdXNlZCBieSBQbGFjZW1lbnQgdG8ga2VlcCBmYWRpbmcgb3BhY2l0eSBzdGF0ZXMgY29uc2lzdGVudCBhbmQgdG9cbiAgICBkZWR1cGxpY2F0ZSBsYWJlbHMuXG5cbiAgICBUaGUgQ3Jvc3NUaWxlU3ltYm9sSW5kZXggaW5kZXhlcyBhbGwgdGhlIGN1cnJlbnQgc3ltYm9sIGluc3RhbmNlcyBhbmRcbiAgICB0aGVpciBjcm9zc1RpbGVJRHMuIFdoZW4gYSBzeW1ib2wgYnVja2V0IGdldHMgYWRkZWQgb3IgdXBkYXRlZCwgdGhlXG4gICAgaW5kZXggYXNzaWducyBhIGNyb3NzVGlsZUlEIHRvIGVhY2ggb2YgaXQncyBzeW1ib2wgaW5zdGFuY2VzIGJ5IGVpdGhlclxuICAgIG1hdGNoaW5nIGl0IHdpdGggYW4gZXhpc3RpbmcgaWQgb3IgYXNzaWduaW5nIGEgbmV3IG9uZS5cbiovXG5cbi8vIFJvdW5kIGFuY2hvciBwb3NpdGlvbnMgdG8gcm91Z2hseSA0IHBpeGVsIGdyaWRcbmNvbnN0IHJvdW5kaW5nRmFjdG9yID0gNTEyIC8gRVhURU5UIC8gMjtcblxuY2xhc3MgVGlsZUxheWVySW5kZXgge1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICBpbmRleGVkU3ltYm9sSW5zdGFuY2VzOiB7W251bWJlcl06IEFycmF5PHtcbiAgICAgICAgY3Jvc3NUaWxlSUQ6IG51bWJlcixcbiAgICAgICAgY29vcmQ6IHtcbiAgICAgICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgICAgIHk6IG51bWJlclxuICAgICAgICB9XG4gICAgfT59O1xuICAgIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgc3ltYm9sSW5zdGFuY2VzOiBTeW1ib2xJbnN0YW5jZUFycmF5LCBidWNrZXRJbnN0YW5jZUlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aWxlSUQgPSB0aWxlSUQ7XG4gICAgICAgIHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlcyA9IHt9O1xuICAgICAgICB0aGlzLmJ1Y2tldEluc3RhbmNlSWQgPSBidWNrZXRJbnN0YW5jZUlkO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzeW1ib2xJbnN0YW5jZS5rZXk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoaXMgdGlsZSBtYXkgaGF2ZSBtdWx0aXBsZSBzeW1ib2wgaW5zdGFuY2VzIHdpdGggdGhlIHNhbWUga2V5XG4gICAgICAgICAgICAvLyBTdG9yZSBlYWNoIG9uZSBhbG9uZyB3aXRoIGl0cyBjb29yZGluYXRlc1xuICAgICAgICAgICAgdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2tleV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgY3Jvc3NUaWxlSUQ6IHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlELFxuICAgICAgICAgICAgICAgIGNvb3JkOiB0aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKHN5bWJvbEluc3RhbmNlLCB0aWxlSUQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnZlcnRzIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgaW5wdXQgc3ltYm9sIGluc3RhbmNlIGludG8gY29vcmRpbmF0ZXMgdGhhdCBiZSBjYW4gY29tcGFyZWRcbiAgICAvLyBhZ2FpbnN0IG90aGVyIHN5bWJvbHMgaW4gdGhpcyBpbmRleC4gQ29vcmRpbmF0ZXMgYXJlOlxuICAgIC8vICgxKSB3b3JsZC1iYXNlZCAoc28gYWZ0ZXIgY29udmVyc2lvbiB0aGUgc291cmNlIHRpbGUgaXMgaXJyZWxldmFudClcbiAgICAvLyAoMikgY29udmVydGVkIHRvIHRoZSB6LXNjYWxlIG9mIHRoaXMgVGlsZUxheWVySW5kZXhcbiAgICAvLyAoMykgZG93bi1zYW1wbGVkIGJ5IFwicm91bmRpbmdGYWN0b3JcIiBmcm9tIHRpbGUgY29vcmRpbmF0ZSBwcmVjaXNpb24gaW4gb3JkZXIgdG8gYmVcbiAgICAvLyAgICAgbW9yZSB0b2xlcmFudCBvZiBzbWFsbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRpbGVzLlxuICAgIGdldFNjYWxlZENvb3JkaW5hdGVzKHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgY2hpbGRUaWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgekRpZmZlcmVuY2UgPSBjaGlsZFRpbGVJRC5jYW5vbmljYWwueiAtIHRoaXMudGlsZUlELmNhbm9uaWNhbC56O1xuICAgICAgICBjb25zdCBzY2FsZSA9IHJvdW5kaW5nRmFjdG9yIC8gTWF0aC5wb3coMiwgekRpZmZlcmVuY2UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogTWF0aC5mbG9vcigoY2hpbGRUaWxlSUQuY2Fub25pY2FsLnggKiBFWFRFTlQgKyBzeW1ib2xJbnN0YW5jZS5hbmNob3JYKSAqIHNjYWxlKSxcbiAgICAgICAgICAgIHk6IE1hdGguZmxvb3IoKGNoaWxkVGlsZUlELmNhbm9uaWNhbC55ICogRVhURU5UICsgc3ltYm9sSW5zdGFuY2UuYW5jaG9yWSkgKiBzY2FsZSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmaW5kTWF0Y2hlcyhzeW1ib2xJbnN0YW5jZXM6IFN5bWJvbEluc3RhbmNlQXJyYXksIG5ld1RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgem9vbUNyb3NzVGlsZUlEczoge1tjcm9zc1RpbGVJRDogbnVtYmVyXTogYm9vbGVhbn0pIHtcbiAgICAgICAgY29uc3QgdG9sZXJhbmNlID0gdGhpcy50aWxlSUQuY2Fub25pY2FsLnogPCBuZXdUaWxlSUQuY2Fub25pY2FsLnogPyAxIDogTWF0aC5wb3coMiwgdGhpcy50aWxlSUQuY2Fub25pY2FsLnogLSBuZXdUaWxlSUQuY2Fub25pY2FsLnopO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQpIHtcbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhcyBhIG1hdGNoLCBza2lwXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ZWRJbnN0YW5jZXMgPSB0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbc3ltYm9sSW5zdGFuY2Uua2V5XTtcbiAgICAgICAgICAgIGlmICghaW5kZXhlZEluc3RhbmNlcykge1xuICAgICAgICAgICAgICAgIC8vIE5vIHN5bWJvbCB3aXRoIHRoaXMga2V5IGluIHRoaXMgYnVja2V0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNjYWxlZFN5bWJvbENvb3JkID0gdGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhzeW1ib2xJbnN0YW5jZSwgbmV3VGlsZUlEKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0aGlzVGlsZVN5bWJvbCBvZiBpbmRleGVkSW5zdGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV0dXJuIGFueSBzeW1ib2wgd2l0aCB0aGUgc2FtZSBrZXlzIHdob3NlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gMVxuICAgICAgICAgICAgICAgIC8vIGdyaWQgdW5pdC4gKHdpdGggYSA0cHggZ3JpZCwgdGhpcyBjb3ZlcnMgYSAxMnB4IGJ5IDEycHggYXJlYSlcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpc1RpbGVTeW1ib2wuY29vcmQueCAtIHNjYWxlZFN5bWJvbENvb3JkLngpIDw9IHRvbGVyYW5jZSAmJlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyh0aGlzVGlsZVN5bWJvbC5jb29yZC55IC0gc2NhbGVkU3ltYm9sQ29vcmQueSkgPD0gdG9sZXJhbmNlICYmXG4gICAgICAgICAgICAgICAgICAgICF6b29tQ3Jvc3NUaWxlSURzW3RoaXNUaWxlU3ltYm9sLmNyb3NzVGlsZUlEXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmNlIHdlJ3ZlIG1hcmtlZCBvdXJzZWx2ZXMgZHVwbGljYXRlIGFnYWluc3QgdGhpcyBwYXJlbnQgc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBsZXQgYW55IG90aGVyIHN5bWJvbHMgYXQgdGhlIHNhbWUgem9vbSBsZXZlbCBkdXBsaWNhdGUgYWdhaW5zdFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBwYXJlbnQgKHNlZSBpc3N1ZSAjNTk5MylcbiAgICAgICAgICAgICAgICAgICAgem9vbUNyb3NzVGlsZUlEc1t0aGlzVGlsZVN5bWJvbC5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCA9IHRoaXNUaWxlU3ltYm9sLmNyb3NzVGlsZUlEO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIENyb3NzVGlsZUlEcyB7XG4gICAgbWF4Q3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tYXhDcm9zc1RpbGVJRCA9IDA7XG4gICAgfVxuICAgIGdlbmVyYXRlKCkge1xuICAgICAgICByZXR1cm4gKyt0aGlzLm1heENyb3NzVGlsZUlEO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NUaWxlU3ltYm9sTGF5ZXJJbmRleCB7XG4gICAgaW5kZXhlczoge1t6b29tOiBzdHJpbmcgfCBudW1iZXJdOiB7W3RpbGVJZDogc3RyaW5nIHwgbnVtYmVyXTogVGlsZUxheWVySW5kZXh9fTtcbiAgICB1c2VkQ3Jvc3NUaWxlSURzOiB7W3pvb206IHN0cmluZyB8IG51bWJlcl06IHtbY3Jvc3NUaWxlSUQ6IG51bWJlcl06IGJvb2xlYW59fTtcbiAgICBsbmc6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluZGV4ZXMgPSB7fTtcbiAgICAgICAgdGhpcy51c2VkQ3Jvc3NUaWxlSURzID0ge307XG4gICAgICAgIHRoaXMubG5nID0gMDtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFNvbWV0aW1lcyB3aGVuIGEgdXNlciBwYW5zIGFjcm9zcyB0aGUgYW50aW1lcmlkaWFuIHRoZSBsb25naXR1ZGUgdmFsdWUgZ2V0cyB3cmFwcGVkLlxuICAgICAqIFRvIHByZXZlbnQgbGFiZWxzIGZyb20gZmxhc2hpbmcgb3V0IGFuZCBpbiB3ZSBhZGp1c3QgdGhlIHRpbGVJRCB2YWx1ZXMgaW4gdGhlIGluZGV4ZXNcbiAgICAgKiBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIG5ldyB3cmFwcGVkIHZlcnNpb24gb2YgdGhlIG1hcC5cbiAgICAgKi9cbiAgICBoYW5kbGVXcmFwSnVtcChsbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCB3cmFwRGVsdGEgPSBNYXRoLnJvdW5kKChsbmcgLSB0aGlzLmxuZykgLyAzNjApO1xuICAgICAgICBpZiAod3JhcERlbHRhICE9PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHpvb20gaW4gdGhpcy5pbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgem9vbUluZGV4ZXMgPSB0aGlzLmluZGV4ZXNbem9vbV07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Wm9vbUluZGV4ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gem9vbUluZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSB0aWxlSUQncyB3cmFwIGFuZCBhZGQgaXQgdG8gYSBuZXcgaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB6b29tSW5kZXhlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBpbmRleC50aWxlSUQgPSBpbmRleC50aWxlSUQudW53cmFwVG8oaW5kZXgudGlsZUlELndyYXAgKyB3cmFwRGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICBuZXdab29tSW5kZXhbaW5kZXgudGlsZUlELmtleV0gPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleGVzW3pvb21dID0gbmV3Wm9vbUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubG5nID0gbG5nO1xuICAgIH1cblxuICAgIGFkZEJ1Y2tldCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIGJ1Y2tldDogU3ltYm9sQnVja2V0LCBjcm9zc1RpbGVJRHM6IENyb3NzVGlsZUlEcykge1xuICAgICAgICBpZiAodGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl0gJiZcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdW3RpbGVJRC5rZXldKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0uYnVja2V0SW5zdGFuY2VJZCA9PT1cbiAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gV2UncmUgcmVwbGFjaW5nIHRoaXMgYnVja2V0IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvbGQgYnVja2V0J3MgXCJ1c2VkIGNyb3NzVGlsZUlEc1wiIG5vdyBzbyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBidWNrZXQgY2FuIGNsYWltIHRoZW0uXG4gICAgICAgICAgICAgICAgLy8gVGhlIG9sZCBpbmRleCBlbnRyaWVzIHRoZW1zZWx2ZXMgc3RpY2sgYXJvdW5kIHVudGlsXG4gICAgICAgICAgICAgICAgLy8gJ3JlbW92ZVN0YWxlQnVja2V0cycgaXMgY2FsbGVkLlxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdGlsZUlELm92ZXJzY2FsZWRaXSkge1xuICAgICAgICAgICAgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RpbGVJRC5vdmVyc2NhbGVkWl0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB6b29tQ3Jvc3NUaWxlSURzID0gdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RpbGVJRC5vdmVyc2NhbGVkWl07XG5cbiAgICAgICAgZm9yIChjb25zdCB6b29tIGluIHRoaXMuaW5kZXhlcykge1xuICAgICAgICAgICAgY29uc3Qgem9vbUluZGV4ZXMgPSB0aGlzLmluZGV4ZXNbem9vbV07XG4gICAgICAgICAgICBpZiAoTnVtYmVyKHpvb20pID4gdGlsZUlELm92ZXJzY2FsZWRaKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB6b29tSW5kZXhlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEluZGV4ID0gem9vbUluZGV4ZXNbaWRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRleC50aWxlSUQuaXNDaGlsZE9mKHRpbGVJRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5kZXguZmluZE1hdGNoZXMoYnVja2V0LnN5bWJvbEluc3RhbmNlcywgdGlsZUlELCB6b29tQ3Jvc3NUaWxlSURzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q29vcmQgPSB0aWxlSUQuc2NhbGVkVG8oTnVtYmVyKHpvb20pKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHpvb21JbmRleGVzW3BhcmVudENvb3JkLmtleV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEluZGV4LmZpbmRNYXRjaGVzKGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMsIHRpbGVJRCwgem9vbUNyb3NzVGlsZUlEcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKCFzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCkge1xuICAgICAgICAgICAgICAgIC8vIHN5bWJvbCBkaWQgbm90IG1hdGNoIGFueSBrbm93biBzeW1ib2wsIGFzc2lnbiBhIG5ldyBpZFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEID0gY3Jvc3NUaWxlSURzLmdlbmVyYXRlKCk7XG4gICAgICAgICAgICAgICAgem9vbUNyb3NzVGlsZUlEc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0gPSBuZXcgVGlsZUxheWVySW5kZXgodGlsZUlELCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLCBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHpvb206IHN0cmluZyB8IG51bWJlciwgcmVtb3ZlZEJ1Y2tldDogVGlsZUxheWVySW5kZXgpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVtb3ZlZEJ1Y2tldC5pbmRleGVkU3ltYm9sSW5zdGFuY2VzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbEluc3RhbmNlIG9mIHJlbW92ZWRCdWNrZXQuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1soa2V5OiBhbnkpXSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbem9vbV1bc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlU3RhbGVCdWNrZXRzKGN1cnJlbnRJRHM6IHsgW3N0cmluZyB8IG51bWJlcl06IGJvb2xlYW4gfSkge1xuICAgICAgICBsZXQgdGlsZXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgeiBpbiB0aGlzLmluZGV4ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHpvb21JbmRleGVzID0gdGhpcy5pbmRleGVzW3pdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0aWxlS2V5IGluIHpvb21JbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SURzW3pvb21JbmRleGVzW3RpbGVLZXldLmJ1Y2tldEluc3RhbmNlSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHosIHpvb21JbmRleGVzW3RpbGVLZXldKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHpvb21JbmRleGVzW3RpbGVLZXldO1xuICAgICAgICAgICAgICAgICAgICB0aWxlc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGlsZXNDaGFuZ2VkO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NUaWxlU3ltYm9sSW5kZXgge1xuICAgIGxheWVySW5kZXhlczoge1tsYXllcklkOiBzdHJpbmddOiBDcm9zc1RpbGVTeW1ib2xMYXllckluZGV4fTtcbiAgICBjcm9zc1RpbGVJRHM6IENyb3NzVGlsZUlEcztcbiAgICBtYXhCdWNrZXRJbnN0YW5jZUlkOiBudW1iZXI7XG4gICAgYnVja2V0c0luQ3VycmVudFBsYWNlbWVudDoge1tudW1iZXJdOiBib29sZWFufTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxheWVySW5kZXhlcyA9IHt9O1xuICAgICAgICB0aGlzLmNyb3NzVGlsZUlEcyA9IG5ldyBDcm9zc1RpbGVJRHMoKTtcbiAgICAgICAgdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkID0gMDtcbiAgICAgICAgdGhpcy5idWNrZXRzSW5DdXJyZW50UGxhY2VtZW50ID0ge307XG4gICAgfVxuXG4gICAgYWRkTGF5ZXIoc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZXM6IEFycmF5PFRpbGU+LCBsbmc6IG51bWJlcikge1xuICAgICAgICBsZXQgbGF5ZXJJbmRleCA9IHRoaXMubGF5ZXJJbmRleGVzW3N0eWxlTGF5ZXIuaWRdO1xuICAgICAgICBpZiAobGF5ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsYXllckluZGV4ID0gdGhpcy5sYXllckluZGV4ZXNbc3R5bGVMYXllci5pZF0gPSBuZXcgQ3Jvc3NUaWxlU3ltYm9sTGF5ZXJJbmRleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRCdWNrZXRJRHMgPSB7fTtcblxuICAgICAgICBsYXllckluZGV4LmhhbmRsZVdyYXBKdW1wKGxuZyk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlIG9mIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICAgICAgaWYgKCFzeW1ib2xCdWNrZXQgfHwgc3R5bGVMYXllci5pZCAhPT0gc3ltYm9sQnVja2V0LmxheWVySWRzWzBdKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoIXN5bWJvbEJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWQgPSArK3RoaXMubWF4QnVja2V0SW5zdGFuY2VJZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxheWVySW5kZXguYWRkQnVja2V0KHRpbGUudGlsZUlELCBzeW1ib2xCdWNrZXQsIHRoaXMuY3Jvc3NUaWxlSURzKSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRCdWNrZXRJRHNbc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXllckluZGV4LnJlbW92ZVN0YWxlQnVja2V0cyhjdXJyZW50QnVja2V0SURzKSkge1xuICAgICAgICAgICAgc3ltYm9sQnVja2V0c0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkO1xuICAgIH1cblxuICAgIHBydW5lVW51c2VkTGF5ZXJzKHVzZWRMYXllcnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgY29uc3QgdXNlZExheWVyTWFwID0ge307XG4gICAgICAgIHVzZWRMYXllcnMuZm9yRWFjaCgodXNlZExheWVyKSA9PiB7XG4gICAgICAgICAgICB1c2VkTGF5ZXJNYXBbdXNlZExheWVyXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgaW4gdGhpcy5sYXllckluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmICghdXNlZExheWVyTWFwW2xheWVySWRdKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW2xheWVySWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4vc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGNyZWF0ZVN0eWxlTGF5ZXIgZnJvbSAnLi9jcmVhdGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGxvYWRTcHJpdGUgZnJvbSAnLi9sb2FkX3Nwcml0ZSc7XG5pbXBvcnQgSW1hZ2VNYW5hZ2VyIGZyb20gJy4uL3JlbmRlci9pbWFnZV9tYW5hZ2VyJztcbmltcG9ydCBHbHlwaE1hbmFnZXIgZnJvbSAnLi4vcmVuZGVyL2dseXBoX21hbmFnZXInO1xuaW1wb3J0IExpZ2h0IGZyb20gJy4vbGlnaHQnO1xuaW1wb3J0IExpbmVBdGxhcyBmcm9tICcuLi9yZW5kZXIvbGluZV9hdGxhcyc7XG5pbXBvcnQge3BpY2ssIGNsb25lLCBleHRlbmQsIGRlZXBFcXVhbCwgZmlsdGVyT2JqZWN0LCBtYXBPYmplY3R9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge2dldEpTT04sIGdldFJlZmVycmVyLCBtYWtlUmVxdWVzdCwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHtpc01hcGJveFVSTH0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQge3ZhbGlkYXRlU3R5bGUsIGVtaXRWYWxpZGF0aW9uRXJyb3JzIGFzIF9lbWl0VmFsaWRhdGlvbkVycm9yc30gZnJvbSAnLi92YWxpZGF0ZV9zdHlsZSc7XG5pbXBvcnQge1xuICAgIGdldFR5cGUgYXMgZ2V0U291cmNlVHlwZSxcbiAgICBzZXRUeXBlIGFzIHNldFNvdXJjZVR5cGUsXG4gICAgdHlwZSBTb3VyY2VDbGFzc1xufSBmcm9tICcuLi9zb3VyY2Uvc291cmNlJztcbmltcG9ydCB7cXVlcnlSZW5kZXJlZEZlYXR1cmVzLCBxdWVyeVJlbmRlcmVkU3ltYm9scywgcXVlcnlTb3VyY2VGZWF0dXJlc30gZnJvbSAnLi4vc291cmNlL3F1ZXJ5X2ZlYXR1cmVzJztcbmltcG9ydCBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCBHZW9KU09OU291cmNlIGZyb20gJy4uL3NvdXJjZS9nZW9qc29uX3NvdXJjZSc7XG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5pbXBvcnQgZ2V0V29ya2VyUG9vbCBmcm9tICcuLi91dGlsL2dsb2JhbF93b3JrZXJfcG9vbCc7XG5pbXBvcnQgZGVyZWYgZnJvbSAnLi4vc3R5bGUtc3BlYy9kZXJlZic7XG5pbXBvcnQgZGlmZlN0eWxlcywge29wZXJhdGlvbnMgYXMgZGlmZk9wZXJhdGlvbnN9IGZyb20gJy4uL3N0eWxlLXNwZWMvZGlmZic7XG5pbXBvcnQge1xuICAgIHJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5LFxuICAgIGV2ZW50ZWQgYXMgcnRsVGV4dFBsdWdpbkV2ZW50ZWRcbn0gZnJvbSAnLi4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5pbXBvcnQgUGF1c2VhYmxlUGxhY2VtZW50IGZyb20gJy4vcGF1c2VhYmxlX3BsYWNlbWVudCc7XG5pbXBvcnQgWm9vbUhpc3RvcnkgZnJvbSAnLi96b29tX2hpc3RvcnknO1xuaW1wb3J0IENyb3NzVGlsZVN5bWJvbEluZGV4IGZyb20gJy4uL3N5bWJvbC9jcm9zc190aWxlX3N5bWJvbF9pbmRleCc7XG5pbXBvcnQge3ZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcn0gZnJvbSAnLi9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuXG4vLyBXZSdyZSBza2lwcGluZyB2YWxpZGF0aW9uIGVycm9ycyB3aXRoIHRoZSBgc291cmNlLmNhbnZhc2AgaWRlbnRpZmllciBpbiBvcmRlclxuLy8gdG8gY29udGludWUgdG8gYWxsb3cgY2FudmFzIHNvdXJjZXMgdG8gYmUgYWRkZWQgYXQgcnVudGltZS91cGRhdGVkIGluXG4vLyBzbWFydCBzZXRTdHlsZSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNjQyNCk6XG5jb25zdCBlbWl0VmFsaWRhdGlvbkVycm9ycyA9IChldmVudGVkOiBFdmVudGVkLCBlcnJvcnM6ID8kUmVhZE9ubHlBcnJheTx7bWVzc2FnZTogc3RyaW5nLCBpZGVudGlmaWVyPzogc3RyaW5nfT4pID0+XG4gICAgX2VtaXRWYWxpZGF0aW9uRXJyb3JzKGV2ZW50ZWQsIGVycm9ycyAmJiBlcnJvcnMuZmlsdGVyKGVycm9yID0+IGVycm9yLmlkZW50aWZpZXIgIT09ICdzb3VyY2UuY2FudmFzJykpO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1BsYWNlbWVudH0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnMsIFJlc3BvbnNlQ2FsbGJhY2t9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTn0gZnJvbSAnQG1hcGJveC9nZW9qc29uLXR5cGVzJztcbmltcG9ydCB0eXBlIHtcbiAgICBMYXllclNwZWNpZmljYXRpb24sXG4gICAgRmlsdGVyU3BlY2lmaWNhdGlvbixcbiAgICBTdHlsZVNwZWNpZmljYXRpb24sXG4gICAgTGlnaHRTcGVjaWZpY2F0aW9uLFxuICAgIFNvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtWYWxpZGF0b3J9IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuXG5jb25zdCBzdXBwb3J0ZWREaWZmT3BlcmF0aW9ucyA9IHBpY2soZGlmZk9wZXJhdGlvbnMsIFtcbiAgICAnYWRkTGF5ZXInLFxuICAgICdyZW1vdmVMYXllcicsXG4gICAgJ3NldFBhaW50UHJvcGVydHknLFxuICAgICdzZXRMYXlvdXRQcm9wZXJ0eScsXG4gICAgJ3NldEZpbHRlcicsXG4gICAgJ2FkZFNvdXJjZScsXG4gICAgJ3JlbW92ZVNvdXJjZScsXG4gICAgJ3NldExheWVyWm9vbVJhbmdlJyxcbiAgICAnc2V0TGlnaHQnLFxuICAgICdzZXRUcmFuc2l0aW9uJyxcbiAgICAnc2V0R2VvSlNPTlNvdXJjZURhdGEnXG4gICAgLy8gJ3NldEdseXBocycsXG4gICAgLy8gJ3NldFNwcml0ZScsXG5dKTtcblxuY29uc3QgaWdub3JlZERpZmZPcGVyYXRpb25zID0gcGljayhkaWZmT3BlcmF0aW9ucywgW1xuICAgICdzZXRDZW50ZXInLFxuICAgICdzZXRab29tJyxcbiAgICAnc2V0QmVhcmluZycsXG4gICAgJ3NldFBpdGNoJ1xuXSk7XG5cbmV4cG9ydCB0eXBlIFN0eWxlT3B0aW9ucyA9IHtcbiAgICB2YWxpZGF0ZT86IGJvb2xlYW4sXG4gICAgbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5Pzogc3RyaW5nXG59O1xuXG5leHBvcnQgdHlwZSBTdHlsZVNldHRlck9wdGlvbnMgPSB7XG4gICAgdmFsaWRhdGU/OiBib29sZWFuXG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHlsZSBleHRlbmRzIEV2ZW50ZWQge1xuICAgIG1hcDogTWFwO1xuICAgIHN0eWxlc2hlZXQ6IFN0eWxlU3BlY2lmaWNhdGlvbjtcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIGltYWdlTWFuYWdlcjogSW1hZ2VNYW5hZ2VyO1xuICAgIGdseXBoTWFuYWdlcjogR2x5cGhNYW5hZ2VyO1xuICAgIGxpbmVBdGxhczogTGluZUF0bGFzO1xuICAgIGxpZ2h0OiBMaWdodDtcblxuICAgIF9yZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcbiAgICBfc3ByaXRlUmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgX2xheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfTtcbiAgICBfb3JkZXI6IEFycmF5PHN0cmluZz47XG4gICAgc291cmNlQ2FjaGVzOiB7W3N0cmluZ106IFNvdXJjZUNhY2hlfTtcbiAgICB6b29tSGlzdG9yeTogWm9vbUhpc3Rvcnk7XG4gICAgX2xvYWRlZDogYm9vbGVhbjtcbiAgICBfcnRsVGV4dFBsdWdpbkNhbGxiYWNrOiBGdW5jdGlvbjtcbiAgICBfY2hhbmdlZDogYm9vbGVhbjtcbiAgICBfdXBkYXRlZFNvdXJjZXM6IHtbc3RyaW5nXTogJ2NsZWFyJyB8ICdyZWxvYWQnfTtcbiAgICBfdXBkYXRlZExheWVyczoge1tzdHJpbmddOiB0cnVlfTtcbiAgICBfcmVtb3ZlZExheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfTtcbiAgICBfdXBkYXRlZFBhaW50UHJvcHM6IHtbbGF5ZXI6IHN0cmluZ106IHRydWV9O1xuICAgIF9sYXllck9yZGVyQ2hhbmdlZDogYm9vbGVhbjtcblxuICAgIGNyb3NzVGlsZVN5bWJvbEluZGV4OiBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiAgICBwYXVzZWFibGVQbGFjZW1lbnQ6IFBhdXNlYWJsZVBsYWNlbWVudDtcbiAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudDtcbiAgICB6OiBudW1iZXI7XG5cbiAgICAvLyBleHBvc2VkIHRvIGFsbG93IHN0dWJiaW5nIGJ5IHVuaXQgdGVzdHNcbiAgICBzdGF0aWMgZ2V0U291cmNlVHlwZTogdHlwZW9mIGdldFNvdXJjZVR5cGU7XG4gICAgc3RhdGljIHNldFNvdXJjZVR5cGU6IHR5cGVvZiBzZXRTb3VyY2VUeXBlO1xuICAgIHN0YXRpYyByZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eTogdHlwZW9mIHJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5O1xuXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXAsIG9wdGlvbnM6IFN0eWxlT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IG5ldyBEaXNwYXRjaGVyKGdldFdvcmtlclBvb2woKSwgdGhpcyk7XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyID0gbmV3IEltYWdlTWFuYWdlcigpO1xuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5zZXRFdmVudGVkUGFyZW50KHRoaXMpO1xuICAgICAgICB0aGlzLmdseXBoTWFuYWdlciA9IG5ldyBHbHlwaE1hbmFnZXIobWFwLl9yZXF1ZXN0TWFuYWdlciwgb3B0aW9ucy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkpO1xuICAgICAgICB0aGlzLmxpbmVBdGxhcyA9IG5ldyBMaW5lQXRsYXMoMjU2LCA1MTIpO1xuICAgICAgICB0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4ID0gbmV3IENyb3NzVGlsZVN5bWJvbEluZGV4KCk7XG5cbiAgICAgICAgdGhpcy5fbGF5ZXJzID0ge307XG4gICAgICAgIHRoaXMuX29yZGVyICA9IFtdO1xuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlcyA9IHt9O1xuICAgICAgICB0aGlzLnpvb21IaXN0b3J5ID0gbmV3IFpvb21IaXN0b3J5KCk7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX3Jlc2V0VXBkYXRlcygpO1xuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoJ3NldFJlZmVycmVyJywgZ2V0UmVmZXJyZXIoKSk7XG5cbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayA9IFN0eWxlLnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5KChhcmdzKSA9PiB7XG4gICAgICAgICAgICBzZWxmLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdsb2FkUlRMVGV4dFBsdWdpbicsIGFyZ3MucGx1Z2luVVJMLCBhcmdzLmNvbXBsZXRpb25DYWxsYmFjayk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNlbGYuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zb3VyY2VDYWNoZXNbaWRdLnJlbG9hZCgpOyAvLyBTaG91bGQgYmUgYSBuby1vcCBpZiB0aGUgcGx1Z2luIGxvYWRzIGJlZm9yZSBhbnkgdGlsZXMgbG9hZFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uKCdkYXRhJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YVR5cGUgIT09ICdzb3VyY2UnIHx8IGV2ZW50LnNvdXJjZURhdGFUeXBlICE9PSAnbWV0YWRhdGEnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2V2ZW50LnNvdXJjZUlkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXNvdXJjZS52ZWN0b3JMYXllcklkcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci5zb3VyY2UgPT09IHNvdXJjZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRVUkwodXJsOiBzdHJpbmcsIG9wdGlvbnM6IHtcbiAgICAgICAgdmFsaWRhdGU/OiBib29sZWFuLFxuICAgICAgICBhY2Nlc3NUb2tlbj86IHN0cmluZ1xuICAgIH0gPSB7fSkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlID09PSAnYm9vbGVhbicgP1xuICAgICAgICAgICAgb3B0aW9ucy52YWxpZGF0ZSA6ICFpc01hcGJveFVSTCh1cmwpO1xuXG4gICAgICAgIHVybCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTCh1cmwsIG9wdGlvbnMuYWNjZXNzVG9rZW4pO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuU3R5bGUpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gZ2V0SlNPTihyZXF1ZXN0LCAoZXJyb3I6ID9FcnJvciwganNvbjogP09iamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWQoanNvbiwgdmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkSlNPTihqc29uOiBTdHlsZVNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuXG4gICAgICAgIHRoaXMuX3JlcXVlc3QgPSBicm93c2VyLmZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZChqc29uLCBvcHRpb25zLnZhbGlkYXRlICE9PSBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9sb2FkKGpzb246IFN0eWxlU3BlY2lmaWNhdGlvbiwgdmFsaWRhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbGlkYXRlICYmIGVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsIHZhbGlkYXRlU3R5bGUoanNvbikpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0eWxlc2hlZXQgPSBqc29uO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4ganNvbi5zb3VyY2VzKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFNvdXJjZShpZCwganNvbi5zb3VyY2VzW2lkXSwge3ZhbGlkYXRlOiBmYWxzZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGpzb24uc3ByaXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9zcHJpdGVSZXF1ZXN0ID0gbG9hZFNwcml0ZShqc29uLnNwcml0ZSwgdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLCAoZXJyLCBpbWFnZXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zcHJpdGVSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGltYWdlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoaWQsIGltYWdlc1tpZF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0TG9hZGVkKHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoJ3NldEltYWdlcycsIHRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0TG9hZGVkKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nbHlwaE1hbmFnZXIuc2V0VVJMKGpzb24uZ2x5cGhzKTtcblxuICAgICAgICBjb25zdCBsYXllcnMgPSBkZXJlZih0aGlzLnN0eWxlc2hlZXQubGF5ZXJzKTtcblxuICAgICAgICB0aGlzLl9vcmRlciA9IGxheWVycy5tYXAoKGxheWVyKSA9PiBsYXllci5pZCk7XG5cbiAgICAgICAgdGhpcy5fbGF5ZXJzID0ge307XG4gICAgICAgIGZvciAobGV0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICAgICAgbGF5ZXIgPSBjcmVhdGVTdHlsZUxheWVyKGxheWVyKTtcbiAgICAgICAgICAgIGxheWVyLnNldEV2ZW50ZWRQYXJlbnQodGhpcywge2xheWVyOiB7aWQ6IGxheWVyLmlkfX0pO1xuICAgICAgICAgICAgdGhpcy5fbGF5ZXJzW2xheWVyLmlkXSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoJ3NldExheWVycycsIHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcikpO1xuXG4gICAgICAgIHRoaXMubGlnaHQgPSBuZXcgTGlnaHQodGhpcy5zdHlsZXNoZWV0LmxpZ2h0KTtcblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdzdHlsZS5sb2FkJykpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZUxheWVyKGxheWVyOiBTdHlsZUxheWVyKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcbiAgICAgICAgaWYgKCFzb3VyY2VDYWNoZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSBsYXllci5zb3VyY2VMYXllcjtcbiAgICAgICAgaWYgKCFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgICAgIGlmIChzb3VyY2UudHlwZSA9PT0gJ2dlb2pzb24nIHx8IChzb3VyY2UudmVjdG9yTGF5ZXJJZHMgJiYgc291cmNlLnZlY3RvckxheWVySWRzLmluZGV4T2Yoc291cmNlTGF5ZXIpID09PSAtMSkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFNvdXJjZSBsYXllciBcIiR7c291cmNlTGF5ZXJ9XCIgYCArXG4gICAgICAgICAgICAgICAgYGRvZXMgbm90IGV4aXN0IG9uIHNvdXJjZSBcIiR7c291cmNlLmlkfVwiIGAgK1xuICAgICAgICAgICAgICAgIGBhcyBzcGVjaWZpZWQgYnkgc3R5bGUgbGF5ZXIgXCIke2xheWVyLmlkfVwiYFxuICAgICAgICAgICAgKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fdXBkYXRlZFNvdXJjZXMpLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKVxuICAgICAgICAgICAgaWYgKCF0aGlzLnNvdXJjZUNhY2hlc1tpZF0ubG9hZGVkKCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5pbWFnZU1hbmFnZXIuaXNMb2FkZWQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfc2VyaWFsaXplTGF5ZXJzKGlkczogQXJyYXk8c3RyaW5nPik6IEFycmF5PE9iamVjdD4ge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkTGF5ZXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tpZF07XG4gICAgICAgICAgICBpZiAobGF5ZXIudHlwZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTGF5ZXJzLnB1c2gobGF5ZXIuc2VyaWFsaXplKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkTGF5ZXJzO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb25zKCkge1xuICAgICAgICBpZiAodGhpcy5saWdodCAmJiB0aGlzLmxpZ2h0Lmhhc1RyYW5zaXRpb24oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZXNbaWRdLmhhc1RyYW5zaXRpb24oKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9sYXllcnNbaWRdLmhhc1RyYW5zaXRpb24oKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF9jaGVja0xvYWRlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3R5bGUgaXMgbm90IGRvbmUgbG9hZGluZycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgcXVldWVkIHN0eWxlIHVwZGF0ZXMgaW4gYSBiYXRjaCBhbmQgcmVjYWxjdWxhdGUgem9vbS1kZXBlbmRlbnQgcGFpbnQgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICB1cGRhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLl9jaGFuZ2VkO1xuICAgICAgICBpZiAodGhpcy5fY2hhbmdlZCkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZElkcyA9IE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRMYXllcnMpO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZElkcyA9IE9iamVjdC5rZXlzKHRoaXMuX3JlbW92ZWRMYXllcnMpO1xuXG4gICAgICAgICAgICBpZiAodXBkYXRlZElkcy5sZW5ndGggfHwgcmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVXb3JrZXJMYXllcnModXBkYXRlZElkcywgcmVtb3ZlZElkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3VwZGF0ZWRTb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fdXBkYXRlZFNvdXJjZXNbaWRdO1xuICAgICAgICAgICAgICAgIGFzc2VydChhY3Rpb24gPT09ICdyZWxvYWQnIHx8IGFjdGlvbiA9PT0gJ2NsZWFyJyk7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ3JlbG9hZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVsb2FkU291cmNlKGlkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2NsZWFyJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclNvdXJjZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGF5ZXJzW2lkXS51cGRhdGVUcmFuc2l0aW9ucyhwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgdGhpcy5fcmVzZXRVcGRhdGVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZUlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tzb3VyY2VJZF0udXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIHRoaXMuX29yZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklkXTtcblxuICAgICAgICAgICAgbGF5ZXIucmVjYWxjdWxhdGUocGFyYW1ldGVycywgdGhpcy5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpKTtcbiAgICAgICAgICAgIGlmICghbGF5ZXIuaXNIaWRkZW4ocGFyYW1ldGVycy56b29tKSAmJiBsYXllci5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdLnVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saWdodC5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzKTtcbiAgICAgICAgdGhpcy56ID0gcGFyYW1ldGVycy56b29tO1xuXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBfdXBkYXRlV29ya2VyTGF5ZXJzKHVwZGF0ZWRJZHM6IEFycmF5PHN0cmluZz4sIHJlbW92ZWRJZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgndXBkYXRlTGF5ZXJzJywge1xuICAgICAgICAgICAgbGF5ZXJzOiB0aGlzLl9zZXJpYWxpemVMYXllcnModXBkYXRlZElkcyksXG4gICAgICAgICAgICByZW1vdmVkSWRzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9yZXNldFVwZGF0ZXMoKSB7XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl91cGRhdGVkTGF5ZXJzID0ge307XG4gICAgICAgIHRoaXMuX3JlbW92ZWRMYXllcnMgPSB7fTtcblxuICAgICAgICB0aGlzLl91cGRhdGVkU291cmNlcyA9IHt9O1xuICAgICAgICB0aGlzLl91cGRhdGVkUGFpbnRQcm9wcyA9IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGlzIHN0eWxlJ3Mgc3RhdGUgdG8gbWF0Y2ggdGhlIGdpdmVuIHN0eWxlIEpTT04sIHBlcmZvcm1pbmcgb25seVxuICAgICAqIHRoZSBuZWNlc3NhcnkgbXV0YXRpb25zLlxuICAgICAqXG4gICAgICogTWF5IHRocm93IGFuIEVycm9yICgnVW5pbXBsZW1lbnRlZDogTUVUSE9EJykgaWYgdGhlIG1hcGJveC1nbC1zdHlsZS1zcGVjXG4gICAgICogZGlmZiBhbGdvcml0aG0gcHJvZHVjZXMgYW4gb3BlcmF0aW9uIHRoYXQgaXMgbm90IHN1cHBvcnRlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGFueSBjaGFuZ2VzIHdlcmUgbWFkZTsgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZXRTdGF0ZShuZXh0U3RhdGU6IFN0eWxlU3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGlmIChlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZVN0eWxlKG5leHRTdGF0ZSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgbmV4dFN0YXRlID0gY2xvbmUobmV4dFN0YXRlKTtcbiAgICAgICAgbmV4dFN0YXRlLmxheWVycyA9IGRlcmVmKG5leHRTdGF0ZS5sYXllcnMpO1xuXG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSBkaWZmU3R5bGVzKHRoaXMuc2VyaWFsaXplKCksIG5leHRTdGF0ZSlcbiAgICAgICAgICAgIC5maWx0ZXIob3AgPT4gIShvcC5jb21tYW5kIGluIGlnbm9yZWREaWZmT3BlcmF0aW9ucykpO1xuXG4gICAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pbXBsZW1lbnRlZE9wcyA9IGNoYW5nZXMuZmlsdGVyKG9wID0+ICEob3AuY29tbWFuZCBpbiBzdXBwb3J0ZWREaWZmT3BlcmF0aW9ucykpO1xuICAgICAgICBpZiAodW5pbXBsZW1lbnRlZE9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6ICR7dW5pbXBsZW1lbnRlZE9wcy5tYXAob3AgPT4gb3AuY29tbWFuZCkuam9pbignLCAnKX0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGFuZ2VzLmZvckVhY2goKG9wKSA9PiB7XG4gICAgICAgICAgICBpZiAob3AuY29tbWFuZCA9PT0gJ3NldFRyYW5zaXRpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gYHRyYW5zaXRpb25gIGlzIGFsd2F5cyByZWFkIGRpcmVjdGx5IG9mZiBvZlxuICAgICAgICAgICAgICAgIC8vIGB0aGlzLnN0eWxlc2hlZXRgLCB3aGljaCB3ZSB1cGRhdGUgYmVsb3dcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAodGhpczogYW55KVtvcC5jb21tYW5kXS5hcHBseSh0aGlzLCBvcC5hcmdzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdHlsZXNoZWV0ID0gbmV4dFN0YXRlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFkZEltYWdlKGlkOiBzdHJpbmcsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLmdldEltYWdlKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoJ0FuIGltYWdlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLicpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoaWQsIGltYWdlKTtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcbiAgICB9XG5cbiAgICB1cGRhdGVJbWFnZShpZDogc3RyaW5nLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci51cGRhdGVJbWFnZShpZCwgaW1hZ2UpO1xuICAgIH1cblxuICAgIGdldEltYWdlKGlkOiBzdHJpbmcpOiA/U3R5bGVJbWFnZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZShpZCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlSW1hZ2UoaWQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0SW1hZ2UoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignTm8gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgZXhpc3RzLicpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIucmVtb3ZlSW1hZ2UoaWQpO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuICAgIH1cblxuICAgIGxpc3RJbWFnZXMoKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKTtcbiAgICB9XG5cbiAgICBhZGRTb3VyY2UoaWQ6IHN0cmluZywgc291cmNlOiBTb3VyY2VTcGVjaWZpY2F0aW9uLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlc1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhbHJlYWR5IGEgc291cmNlIHdpdGggdGhpcyBJRCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzb3VyY2UudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdHlwZSBwcm9wZXJ0eSBtdXN0IGJlIGRlZmluZWQsIGJ1dCB0aGUgb25seSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgd2VyZSBnaXZlbjogJHtPYmplY3Qua2V5cyhzb3VyY2UpLmpvaW4oJywgJyl9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVpbHRJbnMgPSBbJ3ZlY3RvcicsICdyYXN0ZXInLCAnZ2VvanNvbicsICd2aWRlbycsICdpbWFnZSddO1xuICAgICAgICBjb25zdCBzaG91bGRWYWxpZGF0ZSA9IGJ1aWx0SW5zLmluZGV4T2Yoc291cmNlLnR5cGUpID49IDA7XG4gICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZSAmJiB0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLnNvdXJjZSwgYHNvdXJjZXMuJHtpZH1gLCBzb3VyY2UsIG51bGwsIG9wdGlvbnMpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMubWFwICYmIHRoaXMubWFwLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcpIChzb3VyY2U6IGFueSkuY29sbGVjdFJlc291cmNlVGltaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tpZF0gPSBuZXcgU291cmNlQ2FjaGUoaWQsIHNvdXJjZSwgdGhpcy5kaXNwYXRjaGVyKTtcbiAgICAgICAgc291cmNlQ2FjaGUuc3R5bGUgPSB0aGlzO1xuICAgICAgICBzb3VyY2VDYWNoZS5zZXRFdmVudGVkUGFyZW50KHRoaXMsICgpID0+ICh7XG4gICAgICAgICAgICBpc1NvdXJjZUxvYWRlZDogdGhpcy5sb2FkZWQoKSxcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlQ2FjaGUuc2VyaWFsaXplKCksXG4gICAgICAgICAgICBzb3VyY2VJZDogaWRcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNvdXJjZUNhY2hlLm9uQWRkKHRoaXMubWFwKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgc291cmNlIGZyb20gdGhpcyBzdHlsZXNoZWV0LCBnaXZlbiBpdHMgaWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBzb3VyY2UgdG8gcmVtb3ZlXG4gICAgICogQHRocm93cyB7RXJyb3J9IGlmIG5vIHNvdXJjZSBpcyBmb3VuZCB3aXRoIHRoZSBnaXZlbiBJRFxuICAgICAqL1xuICAgIHJlbW92ZVNvdXJjZShpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVzW2lkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIHRoaXMgSUQnKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgaW4gdGhpcy5fbGF5ZXJzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbGF5ZXJzW2xheWVySWRdLnNvdXJjZSA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgU291cmNlIFwiJHtpZH1cIiBjYW5ub3QgYmUgcmVtb3ZlZCB3aGlsZSBsYXllciBcIiR7bGF5ZXJJZH1cIiBpcyB1c2luZyBpdC5gKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl91cGRhdGVkU291cmNlc1tpZF07XG4gICAgICAgIHNvdXJjZUNhY2hlLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge3NvdXJjZURhdGFUeXBlOiAnbWV0YWRhdGEnLCBkYXRhVHlwZTonc291cmNlJywgc291cmNlSWQ6IGlkfSkpO1xuICAgICAgICBzb3VyY2VDYWNoZS5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuICAgICAgICBzb3VyY2VDYWNoZS5jbGVhclRpbGVzKCk7XG5cbiAgICAgICAgaWYgKHNvdXJjZUNhY2hlLm9uUmVtb3ZlKSBzb3VyY2VDYWNoZS5vblJlbW92ZSh0aGlzLm1hcCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogU2V0IHRoZSBkYXRhIG9mIGEgR2VvSlNPTiBzb3VyY2UsIGdpdmVuIGl0cyBpZC5cbiAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBpZCBvZiB0aGUgc291cmNlXG4gICAgKiBAcGFyYW0ge0dlb0pTT058c3RyaW5nfSBkYXRhIEdlb0pTT04gc291cmNlXG4gICAgKi9cbiAgICBzZXRHZW9KU09OU291cmNlRGF0YShpZDogc3RyaW5nLCBkYXRhOiBHZW9KU09OIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgYXNzZXJ0KHRoaXMuc291cmNlQ2FjaGVzW2lkXSAhPT0gdW5kZWZpbmVkLCAnVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCcpO1xuICAgICAgICBjb25zdCBnZW9qc29uU291cmNlOiBHZW9KU09OU291cmNlID0gKHRoaXMuc291cmNlQ2FjaGVzW2lkXS5nZXRTb3VyY2UoKTogYW55KTtcbiAgICAgICAgYXNzZXJ0KGdlb2pzb25Tb3VyY2UudHlwZSA9PT0gJ2dlb2pzb24nKTtcblxuICAgICAgICBnZW9qc29uU291cmNlLnNldERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIHNvdXJjZSBieSBpZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgaWQgb2YgdGhlIGRlc2lyZWQgc291cmNlXG4gICAgICogQHJldHVybnMge09iamVjdH0gc291cmNlXG4gICAgICovXG4gICAgZ2V0U291cmNlKGlkOiBzdHJpbmcpOiBPYmplY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VDYWNoZXNbaWRdICYmIHRoaXMuc291cmNlQ2FjaGVzW2lkXS5nZXRTb3VyY2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBsYXllciB0byB0aGUgbWFwIHN0eWxlLiBUaGUgbGF5ZXIgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGxheWVyIHdpdGhcbiAgICAgKiBJRCBgYmVmb3JlYCwgb3IgYXBwZW5kZWQgaWYgYGJlZm9yZWAgaXMgb21pdHRlZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZV0gSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IGJlZm9yZVxuICAgICAqL1xuICAgIGFkZExheWVyKGxheWVyT2JqZWN0OiBMYXllclNwZWNpZmljYXRpb24gfCBDdXN0b21MYXllckludGVyZmFjZSwgYmVmb3JlPzogc3RyaW5nLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGlkID0gbGF5ZXJPYmplY3QuaWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuZ2V0TGF5ZXIoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBMYXllciB3aXRoIGlkIFwiJHtpZH1cIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcGApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGF5ZXI7XG4gICAgICAgIGlmIChsYXllck9iamVjdC50eXBlID09PSAnY3VzdG9tJykge1xuXG4gICAgICAgICAgICBpZiAoZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGVDdXN0b21TdHlsZUxheWVyKGxheWVyT2JqZWN0KSkpIHJldHVybjtcblxuICAgICAgICAgICAgbGF5ZXIgPSBjcmVhdGVTdHlsZUxheWVyKGxheWVyT2JqZWN0KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXllck9iamVjdC5zb3VyY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTb3VyY2UoaWQsIGxheWVyT2JqZWN0LnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgbGF5ZXJPYmplY3QgPSBjbG9uZShsYXllck9iamVjdCk7XG4gICAgICAgICAgICAgICAgbGF5ZXJPYmplY3QgPSAoZXh0ZW5kKGxheWVyT2JqZWN0LCB7c291cmNlOiBpZH0pOiBhbnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0aGlzIGxheWVyIGlzIG5vdCBpbiB0aGUgc3R5bGUubGF5ZXJzIGFycmF5LCBzbyB3ZSBwYXNzIGFuIGltcG9zc2libGUgYXJyYXkgaW5kZXhcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLmxheWVyLFxuICAgICAgICAgICAgICAgIGBsYXllcnMuJHtpZH1gLCBsYXllck9iamVjdCwge2FycmF5SW5kZXg6IC0xfSwgb3B0aW9ucykpIHJldHVybjtcblxuICAgICAgICAgICAgbGF5ZXIgPSBjcmVhdGVTdHlsZUxheWVyKGxheWVyT2JqZWN0KTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlTGF5ZXIobGF5ZXIpO1xuXG4gICAgICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtsYXllcjoge2lkfX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBiZWZvcmUgPyB0aGlzLl9vcmRlci5pbmRleE9mKGJlZm9yZSkgOiB0aGlzLl9vcmRlci5sZW5ndGg7XG4gICAgICAgIGlmIChiZWZvcmUgJiYgaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBMYXllciB3aXRoIGlkIFwiJHtiZWZvcmV9XCIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29yZGVyLnNwbGljZShpbmRleCwgMCwgaWQpO1xuICAgICAgICB0aGlzLl9sYXllck9yZGVyQ2hhbmdlZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5fbGF5ZXJzW2lkXSA9IGxheWVyO1xuXG4gICAgICAgIGlmICh0aGlzLl9yZW1vdmVkTGF5ZXJzW2lkXSAmJiBsYXllci5zb3VyY2UgJiYgbGF5ZXIudHlwZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAgICAgICAgIC8vIElmLCBpbiB0aGUgY3VycmVudCBiYXRjaCwgd2UgaGF2ZSBhbHJlYWR5IHJlbW92ZWQgdGhpcyBsYXllclxuICAgICAgICAgICAgLy8gYW5kIHdlIGFyZSBub3cgcmUtYWRkaW5nIGl0IHdpdGggYSBkaWZmZXJlbnQgYHR5cGVgLCB0aGVuIHdlXG4gICAgICAgICAgICAvLyBuZWVkIHRvIGNsZWFyIChyYXRoZXIgdGhhbiBqdXN0IHJlbG9hZCkgdGhlIHVuZGVyeWxpbmcgc291cmNlJ3NcbiAgICAgICAgICAgIC8vIHRpbGVzLiAgT3RoZXJ3aXNlLCB0aWxlcyBtYXJrZWQgJ3JlbG9hZGluZycgd2lsbCBoYXZlIGJ1Y2tldHMgL1xuICAgICAgICAgICAgLy8gYnVmZmVycyB0aGF0IGFyZSBzZXQgdXAgZm9yIHRoZSBfcHJldmlvdXNfIHZlcnNpb24gb2YgdGhpc1xuICAgICAgICAgICAgLy8gbGF5ZXIsIGNhdXNpbmcsIGUuZy46XG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMzYzM1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuX3JlbW92ZWRMYXllcnNbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3JlbW92ZWRMYXllcnNbaWRdO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWQudHlwZSAhPT0gbGF5ZXIudHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2xheWVyLnNvdXJjZV0gPSAnY2xlYXInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVkU291cmNlc1tsYXllci5zb3VyY2VdID0gJ3JlbG9hZCc7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXS5wYXVzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcblxuICAgICAgICBpZiAobGF5ZXIub25BZGQpIHtcbiAgICAgICAgICAgIGxheWVyLm9uQWRkKHRoaXMubWFwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmVzIGEgbGF5ZXIgdG8gYSBkaWZmZXJlbnQgei1wb3NpdGlvbi4gVGhlIGxheWVyIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBsYXllciB3aXRoXG4gICAgICogSUQgYGJlZm9yZWAsIG9yIGFwcGVuZGVkIGlmIGBiZWZvcmVgIGlzIG9taXR0ZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkICBJRCBvZiB0aGUgbGF5ZXIgdG8gbW92ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYmVmb3JlXSBJRCBvZiBhbiBleGlzdGluZyBsYXllciB0byBpbnNlcnQgYmVmb3JlXG4gICAgICovXG4gICAgbW92ZUxheWVyKGlkOiBzdHJpbmcsIGJlZm9yZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tpZF07XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtpZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIG1vdmVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQgPT09IGJlZm9yZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9vcmRlci5pbmRleE9mKGlkKTtcbiAgICAgICAgdGhpcy5fb3JkZXIuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICBjb25zdCBuZXdJbmRleCA9IGJlZm9yZSA/IHRoaXMuX29yZGVyLmluZGV4T2YoYmVmb3JlKSA6IHRoaXMuX29yZGVyLmxlbmd0aDtcbiAgICAgICAgaWYgKGJlZm9yZSAmJiBuZXdJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYExheWVyIHdpdGggaWQgXCIke2JlZm9yZX1cIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29yZGVyLnNwbGljZShuZXdJbmRleCwgMCwgaWQpO1xuXG4gICAgICAgIHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIGlkIGZyb20gdGhlIHN0eWxlLlxuICAgICAqXG4gICAgICogSWYgbm8gc3VjaCBsYXllciBleGlzdHMsIGFuIGBlcnJvcmAgZXZlbnQgaXMgZmlyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgaWQgb2YgdGhlIGxheWVyIHRvIHJlbW92ZVxuICAgICAqIEBmaXJlcyBlcnJvclxuICAgICAqL1xuICAgIHJlbW92ZUxheWVyKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tpZF07XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtpZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHJlbW92ZWQuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxheWVyLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9vcmRlci5pbmRleE9mKGlkKTtcbiAgICAgICAgdGhpcy5fb3JkZXIuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICB0aGlzLl9sYXllck9yZGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZW1vdmVkTGF5ZXJzW2lkXSA9IGxheWVyO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZWRMYXllcnNbaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbaWRdO1xuXG4gICAgICAgIGlmIChsYXllci5vblJlbW92ZSkge1xuICAgICAgICAgICAgbGF5ZXIub25SZW1vdmUodGhpcy5tYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBzdHlsZSBsYXllciBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gYGlkYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkIG9mIHRoZSBkZXNpcmVkIGxheWVyXG4gICAgICogQHJldHVybnMgez9PYmplY3R9IGEgbGF5ZXIsIGlmIG9uZSB3aXRoIHRoZSBnaXZlbiBgaWRgIGV4aXN0c1xuICAgICAqL1xuICAgIGdldExheWVyKGlkOiBzdHJpbmcpOiBPYmplY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICB9XG5cbiAgICBzZXRMYXllclpvb21SYW5nZShsYXllcklkOiBzdHJpbmcsIG1pbnpvb206ID9udW1iZXIsIG1heHpvb206ID9udW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheWVyLm1pbnpvb20gPT09IG1pbnpvb20gJiYgbGF5ZXIubWF4em9vbSA9PT0gbWF4em9vbSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChtaW56b29tICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxheWVyLm1pbnpvb20gPSBtaW56b29tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXh6b29tICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxheWVyLm1heHpvb20gPSBtYXh6b29tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICB9XG5cbiAgICBzZXRGaWx0ZXIobGF5ZXJJZDogc3RyaW5nLCBmaWx0ZXI6ID9GaWx0ZXJTcGVjaWZpY2F0aW9uLCAgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgZmlsdGVyZWQuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWVwRXF1YWwobGF5ZXIuZmlsdGVyLCBmaWx0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVyID09PSBudWxsIHx8IGZpbHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsYXllci5maWx0ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGUodmFsaWRhdGVTdHlsZS5maWx0ZXIsIGBsYXllcnMuJHtsYXllci5pZH0uZmlsdGVyYCwgZmlsdGVyLCBudWxsLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGF5ZXIuZmlsdGVyID0gY2xvbmUoZmlsdGVyKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGF5ZXIobGF5ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGxheWVyJ3MgZmlsdGVyIG9iamVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgdG8gaW5zcGVjdFxuICAgICAqIEByZXR1cm5zIHsqfSB0aGUgbGF5ZXIncyBmaWx0ZXIsIGlmIGFueVxuICAgICAqL1xuICAgIGdldEZpbHRlcihsYXllcjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBjbG9uZSh0aGlzLmdldExheWVyKGxheWVyKS5maWx0ZXIpO1xuICAgIH1cblxuICAgIHNldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCAgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVlcEVxdWFsKGxheWVyLmdldExheW91dFByb3BlcnR5KG5hbWUpLCB2YWx1ZSkpIHJldHVybjtcblxuICAgICAgICBsYXllci5zZXRMYXlvdXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBsYXlvdXQgcHJvcGVydHkncyB2YWx1ZSBmcm9tIGEgZ2l2ZW4gbGF5ZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCB0aGUgbGF5ZXIgdG8gaW5zcGVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgcHJvcGVydHlcbiAgICAgKiBAcmV0dXJucyB7Kn0gdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICovXG4gICAgZ2V0TGF5b3V0UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxheWVyLmdldExheW91dFByb3BlcnR5KG5hbWUpO1xuICAgIH1cblxuICAgIHNldFBhaW50UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZXBFcXVhbChsYXllci5nZXRQYWludFByb3BlcnR5KG5hbWUpLCB2YWx1ZSkpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZXF1aXJlc1JlbGF5b3V0ID0gbGF5ZXIuc2V0UGFpbnRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChyZXF1aXJlc1JlbGF5b3V0KSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbbGF5ZXJJZF0gPSB0cnVlO1xuICAgIH1cblxuICAgIGdldFBhaW50UHJvcGVydHkobGF5ZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExheWVyKGxheWVyKS5nZXRQYWludFByb3BlcnR5KG5hbWUpO1xuICAgIH1cblxuICAgIHNldEZlYXR1cmVTdGF0ZShmZWF0dXJlOiB7IHNvdXJjZTogc3RyaW5nOyBzb3VyY2VMYXllcj86IHN0cmluZzsgaWQ6IHN0cmluZyB8IG51bWJlcjsgfSwgc3RhdGU6IE9iamVjdCkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuICAgICAgICBjb25zdCBzb3VyY2VJZCA9IGZlYXR1cmUuc291cmNlO1xuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IGZlYXR1cmUuc291cmNlTGF5ZXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdO1xuICAgICAgICBjb25zdCBmZWF0dXJlSWQgPSBwYXJzZUludChmZWF0dXJlLmlkLCAxMCk7XG5cbiAgICAgICAgaWYgKHNvdXJjZUNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2UgJyR7c291cmNlSWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCkudHlwZTtcbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICdnZW9qc29uJyAmJiBzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgR2VvSlNPTiBzb3VyY2VzIGNhbm5vdCBoYXZlIGEgc291cmNlTGF5ZXIgcGFyYW1ldGVyLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmICFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKGZlYXR1cmVJZCkgfHwgZmVhdHVyZUlkIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgYW5kIG5vbi1uZWdhdGl2ZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlQ2FjaGUuc2V0RmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlSWQsIHN0YXRlKTtcbiAgICB9XG5cbiAgICByZW1vdmVGZWF0dXJlU3RhdGUodGFyZ2V0OiB7IHNvdXJjZTogc3RyaW5nOyBzb3VyY2VMYXllcj86IHN0cmluZzsgaWQ/OiBzdHJpbmcgfCBudW1iZXI7IH0sIGtleT86IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuICAgICAgICBjb25zdCBzb3VyY2VJZCA9IHRhcmdldC5zb3VyY2U7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdO1xuXG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlICcke3NvdXJjZUlkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCkudHlwZTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSBzb3VyY2VUeXBlID09PSAndmVjdG9yJyA/IHRhcmdldC5zb3VyY2VMYXllciA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmVhdHVyZUlkID0gcGFyc2VJbnQodGFyZ2V0LmlkLCAxMCk7XG5cbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmICFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0LmlkICE9PSB1bmRlZmluZWQgJiYgaXNOYU4oZmVhdHVyZUlkKSB8fCBmZWF0dXJlSWQgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBub24tbmVnYXRpdmUuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgJiYgKHR5cGVvZiB0YXJnZXQuaWQgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB0YXJnZXQuaWQgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgQSBmZWF0dXJlIGlkIGlzIHJlcXVyZWQgdG8gcmVtb3ZlIGl0cyBzcGVjaWZpYyBzdGF0ZSBwcm9wZXJ0eS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlQ2FjaGUucmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlSWQsIGtleSk7XG4gICAgfVxuXG4gICAgZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmU6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUlkID0gZmVhdHVyZS5zb3VyY2U7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gZmVhdHVyZS5zb3VyY2VMYXllcjtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tzb3VyY2VJZF07XG4gICAgICAgIGNvbnN0IGZlYXR1cmVJZCA9IHBhcnNlSW50KGZlYXR1cmUuaWQsIDEwKTtcblxuICAgICAgICBpZiAoc291cmNlQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZSAnJHtzb3VyY2VJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKS50eXBlO1xuICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ3ZlY3RvcicgJiYgIXNvdXJjZUxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4oZmVhdHVyZUlkKSB8fCBmZWF0dXJlSWQgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBhbmQgbm9uLW5lZ2F0aXZlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc291cmNlQ2FjaGUuZ2V0RmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlSWQpO1xuICAgIH1cblxuICAgIGdldFRyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe2R1cmF0aW9uOiAzMDAsIGRlbGF5OiAwfSwgdGhpcy5zdHlsZXNoZWV0ICYmIHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJPYmplY3Qoe1xuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5zdHlsZXNoZWV0LnZlcnNpb24sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnN0eWxlc2hlZXQubmFtZSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0aGlzLnN0eWxlc2hlZXQubWV0YWRhdGEsXG4gICAgICAgICAgICBsaWdodDogdGhpcy5zdHlsZXNoZWV0LmxpZ2h0LFxuICAgICAgICAgICAgY2VudGVyOiB0aGlzLnN0eWxlc2hlZXQuY2VudGVyLFxuICAgICAgICAgICAgem9vbTogdGhpcy5zdHlsZXNoZWV0Lnpvb20sXG4gICAgICAgICAgICBiZWFyaW5nOiB0aGlzLnN0eWxlc2hlZXQuYmVhcmluZyxcbiAgICAgICAgICAgIHBpdGNoOiB0aGlzLnN0eWxlc2hlZXQucGl0Y2gsXG4gICAgICAgICAgICBzcHJpdGU6IHRoaXMuc3R5bGVzaGVldC5zcHJpdGUsXG4gICAgICAgICAgICBnbHlwaHM6IHRoaXMuc3R5bGVzaGVldC5nbHlwaHMsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiB0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbixcbiAgICAgICAgICAgIHNvdXJjZXM6IG1hcE9iamVjdCh0aGlzLnNvdXJjZUNhY2hlcywgKHNvdXJjZSkgPT4gc291cmNlLnNlcmlhbGl6ZSgpKSxcbiAgICAgICAgICAgIGxheWVyczogdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHRoaXMuX29yZGVyKVxuICAgICAgICB9LCAodmFsdWUpID0+IHsgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQ7IH0pO1xuICAgIH1cblxuICAgIF91cGRhdGVMYXllcihsYXllcjogU3R5bGVMYXllcikge1xuICAgICAgICB0aGlzLl91cGRhdGVkTGF5ZXJzW2xheWVyLmlkXSA9IHRydWU7XG4gICAgICAgIGlmIChsYXllci5zb3VyY2UgJiYgIXRoaXMuX3VwZGF0ZWRTb3VyY2VzW2xheWVyLnNvdXJjZV0pIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2xheWVyLnNvdXJjZV0gPSAncmVsb2FkJztcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0ucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfZmxhdHRlbkFuZFNvcnRSZW5kZXJlZEZlYXR1cmVzKHNvdXJjZVJlc3VsdHM6IEFycmF5PGFueT4pIHtcbiAgICAgICAgLy8gRmVhdHVyZSBvcmRlciBpcyBjb21wbGljYXRlZC5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gZmVhdHVyZXMgaW4gdHdvIDJEIGxheWVycyBpcyBhbHdheXMgZGV0ZXJtaW5lZCBieSBsYXllciBvcmRlci5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gZmVhdHVyZXMgaW4gdHdvIDNEIGxheWVycyBpcyBhbHdheXMgZGV0ZXJtaW5lZCBieSBkZXB0aC5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gYSBmZWF0dXJlIGluIGEgMkQgbGF5ZXIgYW5kIGEgM0QgbGF5ZXIgaXMgdHJpY2t5OlxuICAgICAgICAvLyAgICAgIE1vc3Qgb2Z0ZW4gbGF5ZXIgb3JkZXIgZGV0ZXJtaW5lcyB0aGUgZmVhdHVyZSBvcmRlciBpbiB0aGlzIGNhc2UuIElmXG4gICAgICAgIC8vICAgICAgYSBsaW5lIGxheWVyIGlzIGFib3ZlIGEgZXh0cnVzaW9uIGxheWVyIHRoZSBsaW5lIGZlYXR1cmUgd2lsbCBiZSByZW5kZXJlZFxuICAgICAgICAvLyAgICAgIGFib3ZlIHRoZSBleHRydXNpb24uIElmIHRoZSBsaW5lIGxheWVyIGlzIGJlbG93IHRoZSBleHRydXNpb24gbGF5ZXIsXG4gICAgICAgIC8vICAgICAgaXQgd2lsbCBiZSByZW5kZXJlZCBiZWxvdyBpdC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBUaGVyZSBpcyBhIHdlaXJkIGNhc2UgdGhvdWdoLlxuICAgICAgICAvLyAgICAgIFlvdSBoYXZlIGxheWVycyBpbiB0aGlzIG9yZGVyOiBleHRydXNpb25fbGF5ZXJfYSwgbGluZV9sYXllciwgZXh0cnVzaW9uX2xheWVyX2JcbiAgICAgICAgLy8gICAgICBFYWNoIGxheWVyIGhhcyBhIGZlYXR1cmUgdGhhdCBvdmVybGFwcyB0aGUgb3RoZXIgZmVhdHVyZXMuXG4gICAgICAgIC8vICAgICAgVGhlIGZlYXR1cmUgaW4gZXh0cnVzaW9uX2xheWVyX2EgaXMgY2xvc2VyIHRoYW4gdGhlIGZlYXR1cmUgaW4gZXh0cnVzaW9uX2xheWVyX2Igc28gaXQgaXMgcmVuZGVyZWQgYWJvdmUuXG4gICAgICAgIC8vICAgICAgVGhlIGZlYXR1cmUgaW4gbGluZV9sYXllciBpcyByZW5kZXJlZCBhYm92ZSBleHRydXNpb25fbGF5ZXJfYS5cbiAgICAgICAgLy8gICAgICBUaGlzIG1lYW5zIHRoYXQgdGhhdCB0aGUgbGluZV9sYXllciBmZWF0dXJlIGlzIGFib3ZlIHRoZSBleHRydXNpb25fbGF5ZXJfYiBmZWF0dXJlIGRlc3BpdGVcbiAgICAgICAgLy8gICAgICBpdCBiZWluZyBpbiBhbiBlYXJsaWVyIGxheWVyLlxuXG4gICAgICAgIGNvbnN0IGlzTGF5ZXIzRCA9IGxheWVySWQgPT4gdGhpcy5fbGF5ZXJzW2xheWVySWRdLnR5cGUgPT09ICdmaWxsLWV4dHJ1c2lvbic7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IHt9O1xuICAgICAgICBjb25zdCBmZWF0dXJlczNEID0gW107XG4gICAgICAgIGZvciAobGV0IGwgPSB0aGlzLl9vcmRlci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IHRoaXMuX29yZGVyW2xdO1xuICAgICAgICAgICAgaWYgKGlzTGF5ZXIzRChsYXllcklkKSkge1xuICAgICAgICAgICAgICAgIGxheWVySW5kZXhbbGF5ZXJJZF0gPSBsO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc291cmNlUmVzdWx0IG9mIHNvdXJjZVJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5ZXJGZWF0dXJlcyA9IHNvdXJjZVJlc3VsdFtsYXllcklkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyRmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZVdyYXBwZXIgb2YgbGF5ZXJGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzM0QucHVzaChmZWF0dXJlV3JhcHBlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmZWF0dXJlczNELnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBiLmludGVyc2VjdGlvblogLSBhLmludGVyc2VjdGlvblo7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGwgPSB0aGlzLl9vcmRlci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IHRoaXMuX29yZGVyW2xdO1xuXG4gICAgICAgICAgICBpZiAoaXNMYXllcjNEKGxheWVySWQpKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGFsbCAzRCBmZWF0dXJlcyB0aGF0IGFyZSBpbiBvciBhYm92ZSB0aGUgY3VycmVudCBsYXllclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBmZWF0dXJlczNELmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvcG1vc3QzRCA9IGZlYXR1cmVzM0RbaV0uZmVhdHVyZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVySW5kZXhbdG9wbW9zdDNELmxheWVyLmlkXSA8IGwpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHRvcG1vc3QzRCk7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzM0QucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZVJlc3VsdCBvZiBzb3VyY2VSZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyRmVhdHVyZXMgPSBzb3VyY2VSZXN1bHRbbGF5ZXJJZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXllckZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmVXcmFwcGVyIG9mIGxheWVyRmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKGZlYXR1cmVXcmFwcGVyLmZlYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzO1xuICAgIH1cblxuICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhxdWVyeUdlb21ldHJ5OiBhbnksIHBhcmFtczogYW55LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUuZmlsdGVyLCAncXVlcnlSZW5kZXJlZEZlYXR1cmVzLmZpbHRlcicsIHBhcmFtcy5maWx0ZXIsIG51bGwsIHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlZFNvdXJjZXMgPSB7fTtcbiAgICAgICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGF5ZXJzKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zLmxheWVycykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdwYXJhbWV0ZXJzLmxheWVycyBtdXN0IGJlIGFuIEFycmF5LicpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIHBhcmFtcy5sYXllcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbGF5ZXIgaXMgbm90IGluIHRoZSBzdHlsZS5sYXllcnMgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2xheWVySWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGZvciBmZWF0dXJlcy5gKSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluY2x1ZGVkU291cmNlc1tsYXllci5zb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZVJlc3VsdHMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBpZiAocGFyYW1zLmxheWVycyAmJiAhaW5jbHVkZWRTb3VyY2VzW2lkXSkgY29udGludWU7XG4gICAgICAgICAgICBzb3VyY2VSZXN1bHRzLnB1c2goXG4gICAgICAgICAgICAgICAgcXVlcnlSZW5kZXJlZEZlYXR1cmVzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xheWVycyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGxhY2VtZW50KSB7XG4gICAgICAgICAgICAvLyBJZiBhIHBsYWNlbWVudCBoYXMgcnVuLCBxdWVyeSBhZ2FpbnN0IGl0cyBDb2xsaXNpb25JbmRleFxuICAgICAgICAgICAgLy8gZm9yIHN5bWJvbCByZXN1bHRzLCBhbmQgdHJlYXQgaXQgYXMgYW4gZXh0cmEgc291cmNlIHRvIG1lcmdlXG4gICAgICAgICAgICBzb3VyY2VSZXN1bHRzLnB1c2goXG4gICAgICAgICAgICAgICAgcXVlcnlSZW5kZXJlZFN5bWJvbHMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xheWVycyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXMsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50LnJldGFpbmVkUXVlcnlEYXRhKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9mbGF0dGVuQW5kU29ydFJlbmRlcmVkRmVhdHVyZXMoc291cmNlUmVzdWx0cyk7XG4gICAgfVxuXG4gICAgcXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VJRDogc3RyaW5nLCBwYXJhbXM6ID97c291cmNlTGF5ZXI6ID9zdHJpbmcsIGZpbHRlcjogP0FycmF5PGFueT4sIHZhbGlkYXRlPzogYm9vbGVhbn0pIHtcbiAgICAgICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMuZmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLmZpbHRlciwgJ3F1ZXJ5U291cmNlRmVhdHVyZXMuZmlsdGVyJywgcGFyYW1zLmZpbHRlciwgbnVsbCwgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW3NvdXJjZUlEXTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZUNhY2hlID8gcXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VDYWNoZSwgcGFyYW1zKSA6IFtdO1xuICAgIH1cblxuICAgIGFkZFNvdXJjZVR5cGUobmFtZTogc3RyaW5nLCBTb3VyY2VUeXBlOiBTb3VyY2VDbGFzcywgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIGlmIChTdHlsZS5nZXRTb3VyY2VUeXBlKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKGBBIHNvdXJjZSB0eXBlIGNhbGxlZCBcIiR7bmFtZX1cIiBhbHJlYWR5IGV4aXN0cy5gKSk7XG4gICAgICAgIH1cblxuICAgICAgICBTdHlsZS5zZXRTb3VyY2VUeXBlKG5hbWUsIFNvdXJjZVR5cGUpO1xuXG4gICAgICAgIGlmICghU291cmNlVHlwZS53b3JrZXJTb3VyY2VVUkwpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoJ2xvYWRXb3JrZXJTb3VyY2UnLCB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdXJsOiBTb3VyY2VUeXBlLndvcmtlclNvdXJjZVVSTFxuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZ2V0TGlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpZ2h0LmdldExpZ2h0KCk7XG4gICAgfVxuXG4gICAgc2V0TGlnaHQobGlnaHRPcHRpb25zOiBMaWdodFNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGlnaHQgPSB0aGlzLmxpZ2h0LmdldExpZ2h0KCk7XG4gICAgICAgIGxldCBfdXBkYXRlID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGxpZ2h0T3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFkZWVwRXF1YWwobGlnaHRPcHRpb25zW2tleV0sIGxpZ2h0W2tleV0pKSB7XG4gICAgICAgICAgICAgICAgX3VwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfdXBkYXRlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIG5vdzogYnJvd3Nlci5ub3coKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGV4dGVuZCh7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMCxcbiAgICAgICAgICAgICAgICBkZWxheTogMFxuICAgICAgICAgICAgfSwgdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5saWdodC5zZXRMaWdodChsaWdodE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZSh2YWxpZGF0ZTogVmFsaWRhdG9yLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgcHJvcHM6IGFueSwgb3B0aW9uczogeyB2YWxpZGF0ZT86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudmFsaWRhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsIHZhbGlkYXRlLmNhbGwodmFsaWRhdGVTdHlsZSwgZXh0ZW5kKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHN0eWxlOiB0aGlzLnNlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSwgcHJvcHMpKSk7XG4gICAgfVxuXG4gICAgX3JlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc3ByaXRlUmVxdWVzdCkge1xuICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX3Nwcml0ZVJlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJ0bFRleHRQbHVnaW5FdmVudGVkLm9mZigncGx1Z2luQXZhaWxhYmxlJywgdGhpcy5fcnRsVGV4dFBsdWdpbkNhbGxiYWNrKTtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXI6IFN0eWxlTGF5ZXIgPSB0aGlzLl9sYXllcnNbbGF5ZXJJZF07XG4gICAgICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2lkXS5jbGVhclRpbGVzKCk7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0uc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuICAgICAgICB0aGlzLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBfY2xlYXJTb3VyY2UoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0uY2xlYXJUaWxlcygpO1xuICAgIH1cblxuICAgIF9yZWxvYWRTb3VyY2UoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0ucmVzdW1lKCk7XG4gICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2lkXS5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlU291cmNlcyh0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0udXBkYXRlKHRyYW5zZm9ybSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgdGhpcy5fcmVsb2FkU291cmNlKGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVQbGFjZW1lbnQodHJhbnNmb3JtOiBUcmFuc2Zvcm0sIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbiwgZmFkZUR1cmF0aW9uOiBudW1iZXIsIGNyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbikge1xuICAgICAgICBsZXQgc3ltYm9sQnVja2V0c0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHBsYWNlbWVudENvbW1pdHRlZCA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGxheWVyVGlsZXMgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxheWVySUQgb2YgdGhpcy5fb3JkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlTGF5ZXIgPSB0aGlzLl9sYXllcnNbbGF5ZXJJRF07XG4gICAgICAgICAgICBpZiAoc3R5bGVMYXllci50eXBlICE9PSAnc3ltYm9sJykgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICghbGF5ZXJUaWxlc1tzdHlsZUxheWVyLnNvdXJjZV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW3N0eWxlTGF5ZXIuc291cmNlXTtcbiAgICAgICAgICAgICAgICBsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSA9IHNvdXJjZUNhY2hlLmdldFJlbmRlcmFibGVJZHModHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoaWQpID0+IHNvdXJjZUNhY2hlLmdldFRpbGVCeUlEKGlkKSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IChiLnRpbGVJRC5vdmVyc2NhbGVkWiAtIGEudGlsZUlELm92ZXJzY2FsZWRaKSB8fCAoYS50aWxlSUQuaXNMZXNzVGhhbihiLnRpbGVJRCkgPyAtMSA6IDEpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGF5ZXJCdWNrZXRzQ2hhbmdlZCA9IHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXguYWRkTGF5ZXIoc3R5bGVMYXllciwgbGF5ZXJUaWxlc1tzdHlsZUxheWVyLnNvdXJjZV0sIHRyYW5zZm9ybS5jZW50ZXIubG5nKTtcbiAgICAgICAgICAgIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gc3ltYm9sQnVja2V0c0NoYW5nZWQgfHwgbGF5ZXJCdWNrZXRzQ2hhbmdlZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4LnBydW5lVW51c2VkTGF5ZXJzKHRoaXMuX29yZGVyKTtcblxuICAgICAgICAvLyBBbnl0aGluZyB0aGF0IGNoYW5nZXMgb3VyIFwiaW4gcHJvZ3Jlc3NcIiBsYXllciBhbmQgdGlsZSBpbmRpY2VzIHJlcXVpcmVzIHVzXG4gICAgICAgIC8vIHRvIHN0YXJ0IG92ZXIuIFdoZW4gd2Ugc3RhcnQgb3Zlciwgd2UgZG8gYSBmdWxsIHBsYWNlbWVudCBpbnN0ZWFkIG9mIGluY3JlbWVudGFsXG4gICAgICAgIC8vIHRvIHByZXZlbnQgc3RhcnZhdGlvbi5cbiAgICAgICAgLy8gV2UgbmVlZCB0byByZXN0YXJ0IHBsYWNlbWVudCB0byBrZWVwIGxheWVyIGluZGljZXMgaW4gc3luYy5cbiAgICAgICAgLy8gQWxzbyBmb3JjZSBmdWxsIHBsYWNlbWVudCB3aGVuIGZhZGVEdXJhdGlvbiA9PT0gMCB0byBlbnN1cmUgdGhhdCBuZXdseSBsb2FkZWRcbiAgICAgICAgLy8gdGlsZXMgd2lsbCBmdWxseSBkaXNwbGF5IHN5bWJvbHMgaW4gdGhlaXIgZmlyc3QgZnJhbWVcbiAgICAgICAgY29uc3QgZm9yY2VGdWxsUGxhY2VtZW50ID0gdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgfHwgZmFkZUR1cmF0aW9uID09PSAwO1xuXG4gICAgICAgIGlmIChmb3JjZUZ1bGxQbGFjZW1lbnQgfHwgIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50IHx8ICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSAmJiAhdGhpcy5wbGFjZW1lbnQuc3RpbGxSZWNlbnQoYnJvd3Nlci5ub3coKSwgdHJhbnNmb3JtLnpvb20pKSkge1xuICAgICAgICAgICAgdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQgPSBuZXcgUGF1c2VhYmxlUGxhY2VtZW50KHRyYW5zZm9ybSwgdGhpcy5fb3JkZXIsIGZvcmNlRnVsbFBsYWNlbWVudCwgc2hvd0NvbGxpc2lvbkJveGVzLCBmYWRlRHVyYXRpb24sIGNyb3NzU291cmNlQ29sbGlzaW9ucywgdGhpcy5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSkge1xuICAgICAgICAgICAgLy8gdGhlIGxhc3QgcGxhY2VtZW50IGZpbmlzaGVkIHJ1bm5pbmcsIGJ1dCB0aGUgbmV4dCBvbmUgaGFzbsOiwoDCmXRcbiAgICAgICAgICAgIC8vIHN0YXJ0ZWQgeWV0IGJlY2F1c2Ugb2YgdGhlIGBzdGlsbFJlY2VudGAgY2hlY2sgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIC8vIGFib3ZlLCBzbyBtYXJrIGl0IHN0YWxlIHRvIGVuc3VyZSB0aGF0IHdlIHJlcXVlc3QgYW5vdGhlclxuICAgICAgICAgICAgLy8gcmVuZGVyIGZyYW1lXG4gICAgICAgICAgICB0aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29udGludWVQbGFjZW1lbnQodGhpcy5fb3JkZXIsIHRoaXMuX2xheWVycywgbGF5ZXJUaWxlcyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50ID0gdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29tbWl0KGJyb3dzZXIubm93KCkpO1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudENvbW1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xCdWNrZXRzQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBwbGFjZW1lbnQgZ2V0cyBzcGxpdCBvdmVyIG11bHRpcGxlIGZyYW1lcyBpdCBpcyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIC8vIHRoZXNlIGJ1Y2tldHMgd2VyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZXkgd2VyZSBjaGFuZ2VkIGFuZCBzbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBwbGFjZW1lbnQgaXMgYWxyZWFkeSBzdGFsZSB3aGlsZSBpdCBpcyBpbiBwcm9ncmVzc1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LnBsYWNlbWVudC5zZXRTdGFsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBsYWNlbWVudENvbW1pdHRlZCB8fCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklEIG9mIHRoaXMuX29yZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGVMYXllci50eXBlICE9PSAnc3ltYm9sJykgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQudXBkYXRlTGF5ZXJPcGFjaXRpZXMoc3R5bGVMYXllciwgbGF5ZXJUaWxlc1tzdHlsZUxheWVyLnNvdXJjZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmVlZHNSZW5kZXIgaXMgZmFsc2Ugd2hlbiB3ZSBoYXZlIGp1c3QgZmluaXNoZWQgYSBwbGFjZW1lbnQgdGhhdCBkaWRuJ3QgY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9mIGFueSBzeW1ib2xzXG4gICAgICAgIGNvbnN0IG5lZWRzUmVyZW5kZXIgPSAhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkgfHwgdGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnMoYnJvd3Nlci5ub3coKSk7XG4gICAgICAgIHJldHVybiBuZWVkc1JlcmVuZGVyO1xuICAgIH1cblxuICAgIF9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0ucmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FsbGJhY2tzIGZyb20gd2ViIHdvcmtlcnNcblxuICAgIGdldEltYWdlcyhtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtpY29uczogQXJyYXk8c3RyaW5nPn0sIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0cmluZ106IFN0eWxlSW1hZ2V9Pikge1xuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZXMocGFyYW1zLmljb25zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZ2V0R2x5cGhzKG1hcElkOiBzdHJpbmcsIHBhcmFtczoge3N0YWNrczoge1tzdHJpbmddOiBBcnJheTxudW1iZXI+fX0sIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0cmluZ106IHtbbnVtYmVyXTogP1N0eWxlR2x5cGh9fT4pIHtcbiAgICAgICAgdGhpcy5nbHlwaE1hbmFnZXIuZ2V0R2x5cGhzKHBhcmFtcy5zdGFja3MsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBnZXRSZXNvdXJjZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxhbnk+KTogQ2FuY2VsYWJsZSB7XG4gICAgICAgIHJldHVybiBtYWtlUmVxdWVzdChwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICB9XG59XG5cblN0eWxlLmdldFNvdXJjZVR5cGUgPSBnZXRTb3VyY2VUeXBlO1xuU3R5bGUuc2V0U291cmNlVHlwZSA9IHNldFNvdXJjZVR5cGU7XG5TdHlsZS5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eSA9IHJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5O1xuXG5leHBvcnQgZGVmYXVsdCBTdHlsZTtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCB0eXBlOiAnSW50MTYnLCBjb21wb25lbnRzOiAyfVxuXSk7XG4iLCJcbi8vIERpc2FibGUgRmxvdyBhbm5vdGF0aW9ucyBoZXJlIGJlY2F1c2UgRmxvdyBkb2Vzbid0IHN1cHBvcnQgaW1wb3J0aW5nIEdMU0wgZmlsZXNcbi8qIGVzbGludC1kaXNhYmxlIGZsb3d0eXBlL3JlcXVpcmUtdmFsaWQtZmlsZS1hbm5vdGF0aW9uICovXG5cbmltcG9ydCBwcmVsdWRlRnJhZyBmcm9tICcuL19wcmVsdWRlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHByZWx1ZGVWZXJ0IGZyb20gJy4vX3ByZWx1ZGUudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGJhY2tncm91bmRGcmFnIGZyb20gJy4vYmFja2dyb3VuZC5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBiYWNrZ3JvdW5kVmVydCBmcm9tICcuL2JhY2tncm91bmQudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGJhY2tncm91bmRQYXR0ZXJuRnJhZyBmcm9tICcuL2JhY2tncm91bmRfcGF0dGVybi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBiYWNrZ3JvdW5kUGF0dGVyblZlcnQgZnJvbSAnLi9iYWNrZ3JvdW5kX3BhdHRlcm4udmVydGV4Lmdsc2wnO1xuaW1wb3J0IGNpcmNsZUZyYWcgZnJvbSAnLi9jaXJjbGUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgY2lyY2xlVmVydCBmcm9tICcuL2NpcmNsZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgY2xpcHBpbmdNYXNrRnJhZyBmcm9tICcuL2NsaXBwaW5nX21hc2suZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgY2xpcHBpbmdNYXNrVmVydCBmcm9tICcuL2NsaXBwaW5nX21hc2sudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGhlYXRtYXBGcmFnIGZyb20gJy4vaGVhdG1hcC5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBoZWF0bWFwVmVydCBmcm9tICcuL2hlYXRtYXAudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGhlYXRtYXBUZXh0dXJlRnJhZyBmcm9tICcuL2hlYXRtYXBfdGV4dHVyZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBoZWF0bWFwVGV4dHVyZVZlcnQgZnJvbSAnLi9oZWF0bWFwX3RleHR1cmUudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGNvbGxpc2lvbkJveEZyYWcgZnJvbSAnLi9jb2xsaXNpb25fYm94LmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGNvbGxpc2lvbkJveFZlcnQgZnJvbSAnLi9jb2xsaXNpb25fYm94LnZlcnRleC5nbHNsJztcbmltcG9ydCBjb2xsaXNpb25DaXJjbGVGcmFnIGZyb20gJy4vY29sbGlzaW9uX2NpcmNsZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBjb2xsaXNpb25DaXJjbGVWZXJ0IGZyb20gJy4vY29sbGlzaW9uX2NpcmNsZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZGVidWdGcmFnIGZyb20gJy4vZGVidWcuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgZGVidWdWZXJ0IGZyb20gJy4vZGVidWcudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGZpbGxGcmFnIGZyb20gJy4vZmlsbC5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBmaWxsVmVydCBmcm9tICcuL2ZpbGwudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGZpbGxPdXRsaW5lRnJhZyBmcm9tICcuL2ZpbGxfb3V0bGluZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBmaWxsT3V0bGluZVZlcnQgZnJvbSAnLi9maWxsX291dGxpbmUudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGZpbGxPdXRsaW5lUGF0dGVybkZyYWcgZnJvbSAnLi9maWxsX291dGxpbmVfcGF0dGVybi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBmaWxsT3V0bGluZVBhdHRlcm5WZXJ0IGZyb20gJy4vZmlsbF9vdXRsaW5lX3BhdHRlcm4udmVydGV4Lmdsc2wnO1xuaW1wb3J0IGZpbGxQYXR0ZXJuRnJhZyBmcm9tICcuL2ZpbGxfcGF0dGVybi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBmaWxsUGF0dGVyblZlcnQgZnJvbSAnLi9maWxsX3BhdHRlcm4udmVydGV4Lmdsc2wnO1xuaW1wb3J0IGZpbGxFeHRydXNpb25GcmFnIGZyb20gJy4vZmlsbF9leHRydXNpb24uZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvblZlcnQgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvblBhdHRlcm5GcmFnIGZyb20gJy4vZmlsbF9leHRydXNpb25fcGF0dGVybi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uUGF0dGVyblZlcnQgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9wYXR0ZXJuLnZlcnRleC5nbHNsJztcbmltcG9ydCBoaWxsc2hhZGVQcmVwYXJlRnJhZyBmcm9tICcuL2hpbGxzaGFkZV9wcmVwYXJlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGhpbGxzaGFkZVByZXBhcmVWZXJ0IGZyb20gJy4vaGlsbHNoYWRlX3ByZXBhcmUudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGhpbGxzaGFkZUZyYWcgZnJvbSAnLi9oaWxsc2hhZGUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgaGlsbHNoYWRlVmVydCBmcm9tICcuL2hpbGxzaGFkZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgbGluZUZyYWcgZnJvbSAnLi9saW5lLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGxpbmVWZXJ0IGZyb20gJy4vbGluZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgbGluZUdyYWRpZW50RnJhZyBmcm9tICcuL2xpbmVfZ3JhZGllbnQuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgbGluZUdyYWRpZW50VmVydCBmcm9tICcuL2xpbmVfZ3JhZGllbnQudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGxpbmVQYXR0ZXJuRnJhZyBmcm9tICcuL2xpbmVfcGF0dGVybi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBsaW5lUGF0dGVyblZlcnQgZnJvbSAnLi9saW5lX3BhdHRlcm4udmVydGV4Lmdsc2wnO1xuaW1wb3J0IGxpbmVTREZGcmFnIGZyb20gJy4vbGluZV9zZGYuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgbGluZVNERlZlcnQgZnJvbSAnLi9saW5lX3NkZi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgcmFzdGVyRnJhZyBmcm9tICcuL3Jhc3Rlci5mcmFnbWVudC5nbHNsJztcbmltcG9ydCByYXN0ZXJWZXJ0IGZyb20gJy4vcmFzdGVyLnZlcnRleC5nbHNsJztcbmltcG9ydCBzeW1ib2xJY29uRnJhZyBmcm9tICcuL3N5bWJvbF9pY29uLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbEljb25WZXJ0IGZyb20gJy4vc3ltYm9sX2ljb24udmVydGV4Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbFNERkZyYWcgZnJvbSAnLi9zeW1ib2xfc2RmLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbFNERlZlcnQgZnJvbSAnLi9zeW1ib2xfc2RmLnZlcnRleC5nbHNsJztcblxuZXhwb3J0IGNvbnN0IHByZWx1ZGUgPSBjb21waWxlKHByZWx1ZGVGcmFnLCBwcmVsdWRlVmVydCk7XG5leHBvcnQgY29uc3QgYmFja2dyb3VuZCA9IGNvbXBpbGUoYmFja2dyb3VuZEZyYWcsIGJhY2tncm91bmRWZXJ0KTtcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kUGF0dGVybiA9IGNvbXBpbGUoYmFja2dyb3VuZFBhdHRlcm5GcmFnLCBiYWNrZ3JvdW5kUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGNpcmNsZSA9IGNvbXBpbGUoY2lyY2xlRnJhZywgY2lyY2xlVmVydCk7XG5leHBvcnQgY29uc3QgY2xpcHBpbmdNYXNrID0gY29tcGlsZShjbGlwcGluZ01hc2tGcmFnLCBjbGlwcGluZ01hc2tWZXJ0KTtcbmV4cG9ydCBjb25zdCBoZWF0bWFwID0gY29tcGlsZShoZWF0bWFwRnJhZywgaGVhdG1hcFZlcnQpO1xuZXhwb3J0IGNvbnN0IGhlYXRtYXBUZXh0dXJlID0gY29tcGlsZShoZWF0bWFwVGV4dHVyZUZyYWcsIGhlYXRtYXBUZXh0dXJlVmVydCk7XG5leHBvcnQgY29uc3QgY29sbGlzaW9uQm94ID0gY29tcGlsZShjb2xsaXNpb25Cb3hGcmFnLCBjb2xsaXNpb25Cb3hWZXJ0KTtcbmV4cG9ydCBjb25zdCBjb2xsaXNpb25DaXJjbGUgPSBjb21waWxlKGNvbGxpc2lvbkNpcmNsZUZyYWcsIGNvbGxpc2lvbkNpcmNsZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGRlYnVnID0gY29tcGlsZShkZWJ1Z0ZyYWcsIGRlYnVnVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbCA9IGNvbXBpbGUoZmlsbEZyYWcsIGZpbGxWZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsT3V0bGluZSA9IGNvbXBpbGUoZmlsbE91dGxpbmVGcmFnLCBmaWxsT3V0bGluZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxPdXRsaW5lUGF0dGVybiA9IGNvbXBpbGUoZmlsbE91dGxpbmVQYXR0ZXJuRnJhZywgZmlsbE91dGxpbmVQYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbFBhdHRlcm4gPSBjb21waWxlKGZpbGxQYXR0ZXJuRnJhZywgZmlsbFBhdHRlcm5WZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsRXh0cnVzaW9uID0gY29tcGlsZShmaWxsRXh0cnVzaW9uRnJhZywgZmlsbEV4dHJ1c2lvblZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxFeHRydXNpb25QYXR0ZXJuID0gY29tcGlsZShmaWxsRXh0cnVzaW9uUGF0dGVybkZyYWcsIGZpbGxFeHRydXNpb25QYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgaGlsbHNoYWRlUHJlcGFyZSA9IGNvbXBpbGUoaGlsbHNoYWRlUHJlcGFyZUZyYWcsIGhpbGxzaGFkZVByZXBhcmVWZXJ0KTtcbmV4cG9ydCBjb25zdCBoaWxsc2hhZGUgPSBjb21waWxlKGhpbGxzaGFkZUZyYWcsIGhpbGxzaGFkZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmUgPSBjb21waWxlKGxpbmVGcmFnLCBsaW5lVmVydCk7XG5leHBvcnQgY29uc3QgbGluZUdyYWRpZW50ID0gY29tcGlsZShsaW5lR3JhZGllbnRGcmFnLCBsaW5lR3JhZGllbnRWZXJ0KTtcbmV4cG9ydCBjb25zdCBsaW5lUGF0dGVybiA9IGNvbXBpbGUobGluZVBhdHRlcm5GcmFnLCBsaW5lUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmVTREYgPSBjb21waWxlKGxpbmVTREZGcmFnLCBsaW5lU0RGVmVydCk7XG5leHBvcnQgY29uc3QgcmFzdGVyID0gY29tcGlsZShyYXN0ZXJGcmFnLCByYXN0ZXJWZXJ0KTtcbmV4cG9ydCBjb25zdCBzeW1ib2xJY29uID0gY29tcGlsZShzeW1ib2xJY29uRnJhZywgc3ltYm9sSWNvblZlcnQpO1xuZXhwb3J0IGNvbnN0IHN5bWJvbFNERiA9IGNvbXBpbGUoc3ltYm9sU0RGRnJhZywgc3ltYm9sU0RGVmVydCk7XG5cbi8vIEV4cGFuZCAjcHJhZ21hcyB0byAjaWZkZWZzLlxuXG5mdW5jdGlvbiBjb21waWxlKGZyYWdtZW50U291cmNlLCB2ZXJ0ZXhTb3VyY2UpIHtcbiAgICBjb25zdCByZSA9IC8jcHJhZ21hIG1hcGJveDogKFtcXHddKykgKFtcXHddKykgKFtcXHddKykgKFtcXHddKykvZztcblxuICAgIGNvbnN0IGZyYWdtZW50UHJhZ21hcyA9IHt9O1xuXG4gICAgZnJhZ21lbnRTb3VyY2UgPSBmcmFnbWVudFNvdXJjZS5yZXBsYWNlKHJlLCAobWF0Y2gsIG9wZXJhdGlvbiwgcHJlY2lzaW9uLCB0eXBlLCBuYW1lKSA9PiB7XG4gICAgICAgIGZyYWdtZW50UHJhZ21hc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdkZWZpbmUnKSB7XG4gICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbnZhcnlpbmcgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfTtcbiNlbHNlXG51bmlmb3JtICR7cHJlY2lzaW9ufSAke3R5cGV9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgfSBlbHNlIC8qIGlmIChvcGVyYXRpb24gPT09ICdpbml0aWFsaXplJykgKi8ge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiNpZmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2ZXJ0ZXhTb3VyY2UgPSB2ZXJ0ZXhTb3VyY2UucmVwbGFjZShyZSwgKG1hdGNoLCBvcGVyYXRpb24sIHByZWNpc2lvbiwgdHlwZSwgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBhdHRyVHlwZSA9IHR5cGUgPT09ICdmbG9hdCcgPyAndmVjMicgOiAndmVjNCc7XG4gICAgICAgIGNvbnN0IHVucGFja1R5cGUgPSBuYW1lLm1hdGNoKC9jb2xvci8pID8gJ2NvbG9yJyA6IGF0dHJUeXBlO1xuXG4gICAgICAgIGlmIChmcmFnbWVudFByYWdtYXNbbmFtZV0pIHtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdkZWZpbmUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG51bmlmb3JtIGxvd3AgZmxvYXQgdV8ke25hbWV9X3Q7XG5hdHRyaWJ1dGUgJHtwcmVjaXNpb259ICR7YXR0clR5cGV9IGFfJHtuYW1lfTtcbnZhcnlpbmcgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfTtcbiNlbHNlXG51bmlmb3JtICR7cHJlY2lzaW9ufSAke3R5cGV9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAob3BlcmF0aW9uID09PSAnaW5pdGlhbGl6ZScpICovIHtcbiAgICAgICAgICAgICAgICBpZiAodW5wYWNrVHlwZSA9PT0gJ3ZlYzQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHZlYzQgYXR0cmlidXRlcyBhcmUgb25seSB1c2VkIGZvciBjcm9zcy1mYWRlZCBwcm9wZXJ0aWVzLCBhbmQgYXJlIG5vdCBwYWNrZWRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG4gICAgJHtuYW1lfSA9IGFfJHtuYW1lfTtcbiNlbHNlXG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke25hbWV9ID0gdW5wYWNrX21peF8ke3VucGFja1R5cGV9KGFfJHtuYW1lfSwgdV8ke25hbWV9X3QpO1xuI2Vsc2VcbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdkZWZpbmUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG51bmlmb3JtIGxvd3AgZmxvYXQgdV8ke25hbWV9X3Q7XG5hdHRyaWJ1dGUgJHtwcmVjaXNpb259ICR7YXR0clR5cGV9IGFfJHtuYW1lfTtcbiNlbHNlXG51bmlmb3JtICR7cHJlY2lzaW9ufSAke3R5cGV9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAob3BlcmF0aW9uID09PSAnaW5pdGlhbGl6ZScpICovIHtcbiAgICAgICAgICAgICAgICBpZiAodW5wYWNrVHlwZSA9PT0gJ3ZlYzQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHZlYzQgYXR0cmlidXRlcyBhcmUgb25seSB1c2VkIGZvciBjcm9zcy1mYWRlZCBwcm9wZXJ0aWVzLCBhbmQgYXJlIG5vdCBwYWNrZWRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IGFfJHtuYW1lfTtcbiNlbHNlXG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgLyogKi97XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1bnBhY2tfbWl4XyR7dW5wYWNrVHlwZX0oYV8ke25hbWV9LCB1XyR7bmFtZX1fdCk7XG4jZWxzZVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge2ZyYWdtZW50U291cmNlLCB2ZXJ0ZXhTb3VyY2V9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSBQcm9ncmFtIGZyb20gJy4vcHJvZ3JhbSc7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcblxuY2xhc3MgVmVydGV4QXJyYXlPYmplY3Qge1xuICAgIGNvbnRleHQ6IENvbnRleHQ7XG4gICAgYm91bmRQcm9ncmFtOiA/UHJvZ3JhbTwqPjtcbiAgICBib3VuZExheW91dFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcbiAgICBib3VuZFBhaW50VmVydGV4QnVmZmVyczogQXJyYXk8VmVydGV4QnVmZmVyPjtcbiAgICBib3VuZEluZGV4QnVmZmVyOiA/SW5kZXhCdWZmZXI7XG4gICAgYm91bmRWZXJ0ZXhPZmZzZXQ6ID9udW1iZXI7XG4gICAgYm91bmREeW5hbWljVmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuICAgIGJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjI6ID9WZXJ0ZXhCdWZmZXI7XG4gICAgdmFvOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5ib3VuZFByb2dyYW0gPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycyA9IFtdO1xuICAgICAgICB0aGlzLmJvdW5kSW5kZXhCdWZmZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kVmVydGV4T2Zmc2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgICAgICB0aGlzLnZhbyA9IG51bGw7XG4gICAgfVxuXG4gICAgYmluZChjb250ZXh0OiBDb250ZXh0LFxuICAgICAgICAgcHJvZ3JhbTogUHJvZ3JhbTwqPixcbiAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyLFxuICAgICAgICAgcGFpbnRWZXJ0ZXhCdWZmZXJzOiBBcnJheTxWZXJ0ZXhCdWZmZXI+LFxuICAgICAgICAgaW5kZXhCdWZmZXI6ID9JbmRleEJ1ZmZlcixcbiAgICAgICAgIHZlcnRleE9mZnNldDogP251bWJlcixcbiAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMjogP1ZlcnRleEJ1ZmZlcikge1xuXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAgICAgbGV0IHBhaW50QnVmZmVyc0RpZmZlciA9IHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnMubGVuZ3RoICE9PSBwYWludFZlcnRleEJ1ZmZlcnMubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgIXBhaW50QnVmZmVyc0RpZmZlciAmJiBpIDwgcGFpbnRWZXJ0ZXhCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVyc1tpXSAhPT0gcGFpbnRWZXJ0ZXhCdWZmZXJzW2ldKSB7XG4gICAgICAgICAgICAgICAgcGFpbnRCdWZmZXJzRGlmZmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzRnJlc2hCaW5kUmVxdWlyZWQgPSAoXG4gICAgICAgICAgICAhdGhpcy52YW8gfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmRQcm9ncmFtICE9PSBwcm9ncmFtIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyICE9PSBsYXlvdXRWZXJ0ZXhCdWZmZXIgfHxcbiAgICAgICAgICAgIHBhaW50QnVmZmVyc0RpZmZlciB8fFxuICAgICAgICAgICAgdGhpcy5ib3VuZEluZGV4QnVmZmVyICE9PSBpbmRleEJ1ZmZlciB8fFxuICAgICAgICAgICAgdGhpcy5ib3VuZFZlcnRleE9mZnNldCAhPT0gdmVydGV4T2Zmc2V0IHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlciAhPT0gZHluYW1pY1ZlcnRleEJ1ZmZlciB8fFxuICAgICAgICAgICAgdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIyICE9PSBkeW5hbWljVmVydGV4QnVmZmVyMlxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdCB8fCBpc0ZyZXNoQmluZFJlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZyZXNoQmluZChwcm9ncmFtLCBsYXlvdXRWZXJ0ZXhCdWZmZXIsIHBhaW50VmVydGV4QnVmZmVycywgaW5kZXhCdWZmZXIsIHZlcnRleE9mZnNldCwgZHluYW1pY1ZlcnRleEJ1ZmZlciwgZHluYW1pY1ZlcnRleEJ1ZmZlcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dC5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KHRoaXMudmFvKTtcblxuICAgICAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgYnVmZmVyIG1heSBoYXZlIGJlZW4gdXBkYXRlZC4gUmViaW5kIHRvIHVwbG9hZCBkYXRhLlxuICAgICAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIuYmluZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5kZXhCdWZmZXIgJiYgaW5kZXhCdWZmZXIuZHluYW1pY0RyYXcpIHtcbiAgICAgICAgICAgICAgICBpbmRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyMikge1xuICAgICAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIyLmJpbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZyZXNoQmluZChwcm9ncmFtOiBQcm9ncmFtPCo+LFxuICAgICAgICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgcGFpbnRWZXJ0ZXhCdWZmZXJzOiBBcnJheTxWZXJ0ZXhCdWZmZXI+LFxuICAgICAgICAgICAgICBpbmRleEJ1ZmZlcjogP0luZGV4QnVmZmVyLFxuICAgICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQ6ID9udW1iZXIsXG4gICAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXIsXG4gICAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIyOiA/VmVydGV4QnVmZmVyKSB7XG4gICAgICAgIGxldCBudW1QcmV2QXR0cmlidXRlcztcbiAgICAgICAgY29uc3QgbnVtTmV4dEF0dHJpYnV0ZXMgPSBwcm9ncmFtLm51bUF0dHJpYnV0ZXM7XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGlmIChjb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YW8pIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy52YW8gPSBjb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7XG4gICAgICAgICAgICBjb250ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pO1xuICAgICAgICAgICAgbnVtUHJldkF0dHJpYnV0ZXMgPSAwO1xuXG4gICAgICAgICAgICAvLyBzdG9yZSB0aGUgYXJndW1lbnRzIHNvIHRoYXQgd2UgY2FuIHZlcmlmeSB0aGVtIHdoZW4gdGhlIHZhbyBpcyBib3VuZCBhZ2FpblxuICAgICAgICAgICAgdGhpcy5ib3VuZFByb2dyYW0gPSBwcm9ncmFtO1xuICAgICAgICAgICAgdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlciA9IGxheW91dFZlcnRleEJ1ZmZlcjtcbiAgICAgICAgICAgIHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnMgPSBwYWludFZlcnRleEJ1ZmZlcnM7XG4gICAgICAgICAgICB0aGlzLmJvdW5kSW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlcjtcbiAgICAgICAgICAgIHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQgPSB2ZXJ0ZXhPZmZzZXQ7XG4gICAgICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlciA9IGR5bmFtaWNWZXJ0ZXhCdWZmZXI7XG4gICAgICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjIgPSBkeW5hbWljVmVydGV4QnVmZmVyMjtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbnVtUHJldkF0dHJpYnV0ZXMgPSBjb250ZXh0LmN1cnJlbnROdW1BdHRyaWJ1dGVzIHx8IDA7XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgYWxsIGF0dHJpYnV0ZXMgZnJvbSB0aGUgcHJldmlvdXMgcHJvZ3JhbSB0aGF0IGFyZW4ndCB1c2VkIGluXG4gICAgICAgICAgICAvLyB0aGUgbmV3IHByb2dyYW0uIE5vdGU6IGF0dHJpYnV0ZSBpbmRpY2VzIGFyZSAqbm90KiBwcm9ncmFtIHNwZWNpZmljIVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IG51bU5leHRBdHRyaWJ1dGVzOyBpIDwgbnVtUHJldkF0dHJpYnV0ZXM7IGkrKykge1xuICAgICAgICAgICAgICAgIC8vIFdlYkdMIGJyZWFrcyBpZiB5b3UgZGlzYWJsZSBhdHRyaWJ1dGUgMC5cbiAgICAgICAgICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIwMzA1MjMxXG4gICAgICAgICAgICAgICAgYXNzZXJ0KGkgIT09IDApO1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxheW91dFZlcnRleEJ1ZmZlci5lbmFibGVBdHRyaWJ1dGVzKGdsLCBwcm9ncmFtKTtcbiAgICAgICAgZm9yIChjb25zdCB2ZXJ0ZXhCdWZmZXIgb2YgcGFpbnRWZXJ0ZXhCdWZmZXJzKSB7XG4gICAgICAgICAgICB2ZXJ0ZXhCdWZmZXIuZW5hYmxlQXR0cmlidXRlcyhnbCwgcHJvZ3JhbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZHluYW1pY1ZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlci5lbmFibGVBdHRyaWJ1dGVzKGdsLCBwcm9ncmFtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZHluYW1pY1ZlcnRleEJ1ZmZlcjIpIHtcbiAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIyLmVuYWJsZUF0dHJpYnV0ZXMoZ2wsIHByb2dyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKGdsLCBwcm9ncmFtLCB2ZXJ0ZXhPZmZzZXQpO1xuICAgICAgICBmb3IgKGNvbnN0IHZlcnRleEJ1ZmZlciBvZiBwYWludFZlcnRleEJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgICAgICB2ZXJ0ZXhCdWZmZXIuc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2wsIHByb2dyYW0sIHZlcnRleE9mZnNldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZHluYW1pY1ZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKGdsLCBwcm9ncmFtLCB2ZXJ0ZXhPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleEJ1ZmZlcikge1xuICAgICAgICAgICAgaW5kZXhCdWZmZXIuYmluZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyMikge1xuICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjIuYmluZCgpO1xuICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjIuc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2wsIHByb2dyYW0sIHZlcnRleE9mZnNldCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmN1cnJlbnROdW1BdHRyaWJ1dGVzID0gbnVtTmV4dEF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFvKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy52YW8pO1xuICAgICAgICAgICAgdGhpcy52YW8gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWZXJ0ZXhBcnJheU9iamVjdDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7cHJlbHVkZX0gZnJvbSAnLi4vc2hhZGVycyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgUHJvZ3JhbUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vZGF0YS9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFZlcnRleEFycmF5T2JqZWN0IGZyb20gJy4vdmVydGV4X2FycmF5X29iamVjdCc7XG5pbXBvcnQgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcblxuaW1wb3J0IHR5cGUgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCB0eXBlIFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgdHlwZSBDb2xvck1vZGUgZnJvbSAnLi4vZ2wvY29sb3JfbW9kZSc7XG5pbXBvcnQgdHlwZSBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1CaW5kaW5ncywgVW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUge0JpbmRlclVuaWZvcm19IGZyb20gJy4uL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcblxuZXhwb3J0IHR5cGUgRHJhd01vZGUgPVxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdMSU5FUyc+XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ1RSSUFOR0xFUyc+XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0xJTkVfU1RSSVAnPjtcblxuY2xhc3MgUHJvZ3JhbTxVczogVW5pZm9ybUJpbmRpbmdzPiB7XG4gICAgcHJvZ3JhbTogV2ViR0xQcm9ncmFtO1xuICAgIGF0dHJpYnV0ZXM6IHtbc3RyaW5nXTogbnVtYmVyfTtcbiAgICBudW1BdHRyaWJ1dGVzOiBudW1iZXI7XG4gICAgZml4ZWRVbmlmb3JtczogVXM7XG4gICAgYmluZGVyVW5pZm9ybXM6IEFycmF5PEJpbmRlclVuaWZvcm0+O1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCxcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHtmcmFnbWVudFNvdXJjZTogc3RyaW5nLCB2ZXJ0ZXhTb3VyY2U6IHN0cmluZ30sXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbjogUHJvZ3JhbUNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICAgICAgZml4ZWRVbmlmb3JtczogKENvbnRleHQsIFVuaWZvcm1Mb2NhdGlvbnMpID0+IFVzLFxuICAgICAgICAgICAgICAgIHNob3dPdmVyZHJhd0luc3BlY3RvcjogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMucHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgICAgICBjb25zdCBkZWZpbmVzID0gY29uZmlndXJhdGlvbi5kZWZpbmVzKCk7XG4gICAgICAgIGlmIChzaG93T3ZlcmRyYXdJbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGRlZmluZXMucHVzaCgnI2RlZmluZSBPVkVSRFJBV19JTlNQRUNUT1I7Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmcmFnbWVudFNvdXJjZSA9IGRlZmluZXMuY29uY2F0KHByZWx1ZGUuZnJhZ21lbnRTb3VyY2UsIHNvdXJjZS5mcmFnbWVudFNvdXJjZSkuam9pbignXFxuJyk7XG4gICAgICAgIGNvbnN0IHZlcnRleFNvdXJjZSA9IGRlZmluZXMuY29uY2F0KHByZWx1ZGUudmVydGV4U291cmNlLCBzb3VyY2UudmVydGV4U291cmNlKS5qb2luKCdcXG4nKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTtcbiAgICAgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNvdXJjZSk7XG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuICAgICAgICBhc3NlcnQoZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZyYWdtZW50U2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUyksIChnbC5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTogYW55KSk7XG4gICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcblxuICAgICAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuVkVSVEVYX1NIQURFUik7XG4gICAgICAgIGdsLnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNvdXJjZSk7XG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTtcbiAgICAgICAgYXNzZXJ0KGdsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSwgKGdsLmdldFNoYWRlckluZm9Mb2codmVydGV4U2hhZGVyKTogYW55KSk7XG4gICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIHZlcnRleFNoYWRlcik7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgYmluZCBsYXlvdXQgYXR0cmlidXRlcyBpbiB0aGUgb3JkZXIgZGVmaW5lZCBieSB0aGVpclxuICAgICAgICAvLyBQcm9ncmFtSW50ZXJmYWNlIHNvIHRoYXQgd2UgZG9uJ3QgZHluYW1pY2FsbHkgbGluayBhbiB1bnVzZWRcbiAgICAgICAgLy8gYXR0cmlidXRlIGF0IHBvc2l0aW9uIDAsIHdoaWNoIGNhbiBjYXVzZSByZW5kZXJpbmcgdG8gZmFpbCBmb3IgYW5cbiAgICAgICAgLy8gZW50aXJlIGxheWVyIChzZWUgIzQ2MDcsICM0NzI4KVxuICAgICAgICBjb25zdCBsYXlvdXRBdHRyaWJ1dGVzID0gY29uZmlndXJhdGlvbi5sYXlvdXRBdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGksIGxheW91dEF0dHJpYnV0ZXNbaV0ubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5saW5rUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuICAgICAgICBhc3NlcnQoZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSwgKGdsLmdldFByb2dyYW1JbmZvTG9nKHRoaXMucHJvZ3JhbSk6IGFueSkpO1xuXG4gICAgICAgIHRoaXMubnVtQXR0cmlidXRlcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUyk7XG5cbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGNvbnN0IHVuaWZvcm1Mb2NhdGlvbnMgPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtQXR0cmlidXRlczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBnbC5nZXRBY3RpdmVBdHRyaWIodGhpcy5wcm9ncmFtLCBpKTtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLCBhdHRyaWJ1dGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1Vbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5BQ1RJVkVfVU5JRk9STVMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVVuaWZvcm1zOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaWZvcm0gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHRoaXMucHJvZ3JhbSwgaSk7XG4gICAgICAgICAgICBpZiAodW5pZm9ybSkge1xuICAgICAgICAgICAgICAgIHVuaWZvcm1Mb2NhdGlvbnNbdW5pZm9ybS5uYW1lXSA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0sIHVuaWZvcm0ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpeGVkVW5pZm9ybXMgPSBmaXhlZFVuaWZvcm1zKGNvbnRleHQsIHVuaWZvcm1Mb2NhdGlvbnMpO1xuICAgICAgICB0aGlzLmJpbmRlclVuaWZvcm1zID0gY29uZmlndXJhdGlvbi5nZXRVbmlmb3Jtcyhjb250ZXh0LCB1bmlmb3JtTG9jYXRpb25zKTtcbiAgICB9XG5cbiAgICBkcmF3KGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICBkcmF3TW9kZTogRHJhd01vZGUsXG4gICAgICAgICBkZXB0aE1vZGU6ICRSZWFkT25seTxEZXB0aE1vZGU+LFxuICAgICAgICAgc3RlbmNpbE1vZGU6ICRSZWFkT25seTxTdGVuY2lsTW9kZT4sXG4gICAgICAgICBjb2xvck1vZGU6ICRSZWFkT25seTxDb2xvck1vZGU+LFxuICAgICAgICAgY3VsbEZhY2VNb2RlOiAkUmVhZE9ubHk8Q3VsbEZhY2VNb2RlPixcbiAgICAgICAgIHVuaWZvcm1WYWx1ZXM6IFVuaWZvcm1WYWx1ZXM8VXM+LFxuICAgICAgICAgbGF5ZXJJRDogc3RyaW5nLFxuICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXIsXG4gICAgICAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcixcbiAgICAgICAgIGN1cnJlbnRQcm9wZXJ0aWVzOiBhbnksXG4gICAgICAgICB6b29tOiA/bnVtYmVyLFxuICAgICAgICAgY29uZmlndXJhdGlvbjogP1Byb2dyYW1Db25maWd1cmF0aW9uLFxuICAgICAgICAgZHluYW1pY0xheW91dEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXIyOiA/VmVydGV4QnVmZmVyKSB7XG5cbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGNvbnRleHQucHJvZ3JhbS5zZXQodGhpcy5wcm9ncmFtKTtcbiAgICAgICAgY29udGV4dC5zZXREZXB0aE1vZGUoZGVwdGhNb2RlKTtcbiAgICAgICAgY29udGV4dC5zZXRTdGVuY2lsTW9kZShzdGVuY2lsTW9kZSk7XG4gICAgICAgIGNvbnRleHQuc2V0Q29sb3JNb2RlKGNvbG9yTW9kZSk7XG4gICAgICAgIGNvbnRleHQuc2V0Q3VsbEZhY2UoY3VsbEZhY2VNb2RlKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5maXhlZFVuaWZvcm1zKSB7XG4gICAgICAgICAgICB0aGlzLmZpeGVkVW5pZm9ybXNbbmFtZV0uc2V0KHVuaWZvcm1WYWx1ZXNbbmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0VW5pZm9ybXMoY29udGV4dCwgdGhpcy5iaW5kZXJVbmlmb3JtcywgY3VycmVudFByb3BlcnRpZXMsIHt6b29tOiAoem9vbTogYW55KX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJpbWl0aXZlU2l6ZSA9IHtcbiAgICAgICAgICAgIFtnbC5MSU5FU106IDIsXG4gICAgICAgICAgICBbZ2wuVFJJQU5HTEVTXTogMyxcbiAgICAgICAgICAgIFtnbC5MSU5FX1NUUklQXTogMVxuICAgICAgICB9W2RyYXdNb2RlXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMuZ2V0KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhb3MgPSBzZWdtZW50LnZhb3MgfHwgKHNlZ21lbnQudmFvcyA9IHt9KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbzogVmVydGV4QXJyYXlPYmplY3QgPSB2YW9zW2xheWVySURdIHx8ICh2YW9zW2xheWVySURdID0gbmV3IFZlcnRleEFycmF5T2JqZWN0KCkpO1xuXG4gICAgICAgICAgICB2YW8uYmluZChcbiAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPyBjb25maWd1cmF0aW9uLmdldFBhaW50VmVydGV4QnVmZmVycygpIDogW10sXG4gICAgICAgICAgICAgICAgaW5kZXhCdWZmZXIsXG4gICAgICAgICAgICAgICAgc2VnbWVudC52ZXJ0ZXhPZmZzZXQsXG4gICAgICAgICAgICAgICAgZHluYW1pY0xheW91dEJ1ZmZlcixcbiAgICAgICAgICAgICAgICBkeW5hbWljTGF5b3V0QnVmZmVyMlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKFxuICAgICAgICAgICAgICAgIGRyYXdNb2RlLFxuICAgICAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICogcHJpbWl0aXZlU2l6ZSxcbiAgICAgICAgICAgICAgICBnbC5VTlNJR05FRF9TSE9SVCxcbiAgICAgICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZU9mZnNldCAqIHByaW1pdGl2ZVNpemUgKiAyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvZ3JhbTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge0Nyb3NzRmFkZWR9IGZyb20gJy4uLy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG50eXBlIEJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9wYXR0ZXJuX3RsX2EnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9icl9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fdGxfYic6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX2JyX2InOiBVbmlmb3JtMmYsXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9taXgnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGF0dGVybl9zaXplX2EnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9zaXplX2InOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGVfYSc6IFVuaWZvcm0xZixcbiAgICAndV9zY2FsZV9iJzogVW5pZm9ybTFmLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogVW5pZm9ybTJmLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogVW5pZm9ybTJmLFxuICAgICd1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzJzogVW5pZm9ybTFmXG58fTtcblxuZXhwb3J0IHR5cGUgUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgLy8gcGF0dGVybiB1bmlmb3JtczpcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlJzogVW5pZm9ybTRmLFxuICAgICd1X2ZhZGUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmZcbnx9O1xuXG5mdW5jdGlvbiBwYXR0ZXJuVW5pZm9ybVZhbHVlcyhjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgICAgIHRpbGU6IFRpbGVcbik6IFVuaWZvcm1WYWx1ZXM8UGF0dGVyblVuaWZvcm1zVHlwZT4ge1xuXG4gICAgY29uc3QgdGlsZVJhdGlvID0gMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHBhaW50ZXIudHJhbnNmb3JtLnRpbGVab29tKTtcblxuICAgIGNvbnN0IG51bVRpbGVzID0gTWF0aC5wb3coMiwgdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgIGNvbnN0IHRpbGVTaXplQXROZWFyZXN0Wm9vbSA9IHRpbGUudGlsZVNpemUgKiBNYXRoLnBvdygyLCBwYWludGVyLnRyYW5zZm9ybS50aWxlWm9vbSkgLyBudW1UaWxlcztcblxuICAgIGNvbnN0IHBpeGVsWCA9IHRpbGVTaXplQXROZWFyZXN0Wm9vbSAqICh0aWxlLnRpbGVJRC5jYW5vbmljYWwueCArIHRpbGUudGlsZUlELndyYXAgKiBudW1UaWxlcyk7XG4gICAgY29uc3QgcGl4ZWxZID0gdGlsZVNpemVBdE5lYXJlc3Rab29tICogdGlsZS50aWxlSUQuY2Fub25pY2FsLnk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgICd1X3RleHNpemUnOiB0aWxlLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsXG4gICAgICAgIC8vIHRoaXMgYXNzdW1lcyBhbGwgaW1hZ2VzIGluIHRoZSBpY29uIGF0bGFzIHRleHR1cmUgaGF2ZSB0aGUgc2FtZSBwaXhlbCByYXRpb1xuICAgICAgICAndV9zY2FsZSc6IFticm93c2VyLmRldmljZVBpeGVsUmF0aW8sIHRpbGVSYXRpbywgY3Jvc3NmYWRlLmZyb21TY2FsZSwgY3Jvc3NmYWRlLnRvU2NhbGVdLFxuICAgICAgICAndV9mYWRlJzogY3Jvc3NmYWRlLnQsXG4gICAgICAgIC8vIHNwbGl0IHRoZSBwaXhlbCBjb29yZCBpbnRvIHR3byBwYWlycyBvZiAxNiBiaXQgbnVtYmVycy4gVGhlIGdsc2wgc3BlYyBvbmx5IGd1YXJhbnRlZXMgMTYgYml0cyBvZiBwcmVjaXNpb24uXG4gICAgICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogW3BpeGVsWCA+PiAxNiwgcGl4ZWxZID4+IDE2XSxcbiAgICAgICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBbcGl4ZWxYICYgMHhGRkZGLCBwaXhlbFkgJiAweEZGRkZdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gYmdQYXR0ZXJuVW5pZm9ybVZhbHVlcyhpbWFnZTogQ3Jvc3NGYWRlZDxSZXNvbHZlZEltYWdlPiwgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzLCBwYWludGVyOiBQYWludGVyLFxuICAgICAgICB0aWxlOiB7dGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCB0aWxlU2l6ZTogbnVtYmVyfVxuKTogVW5pZm9ybVZhbHVlczxCYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zVHlwZT4ge1xuICAgIGNvbnN0IGltYWdlUG9zQSA9IHBhaW50ZXIuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4oaW1hZ2UuZnJvbS50b1N0cmluZygpKTtcbiAgICBjb25zdCBpbWFnZVBvc0IgPSBwYWludGVyLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKGltYWdlLnRvLnRvU3RyaW5nKCkpO1xuICAgIGFzc2VydChpbWFnZVBvc0EgJiYgaW1hZ2VQb3NCKTtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBwYWludGVyLmltYWdlTWFuYWdlci5nZXRQaXhlbFNpemUoKTtcblxuICAgIGNvbnN0IG51bVRpbGVzID0gTWF0aC5wb3coMiwgdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgIGNvbnN0IHRpbGVTaXplQXROZWFyZXN0Wm9vbSA9IHRpbGUudGlsZVNpemUgKiBNYXRoLnBvdygyLCBwYWludGVyLnRyYW5zZm9ybS50aWxlWm9vbSkgLyBudW1UaWxlcztcblxuICAgIGNvbnN0IHBpeGVsWCA9IHRpbGVTaXplQXROZWFyZXN0Wm9vbSAqICh0aWxlLnRpbGVJRC5jYW5vbmljYWwueCArIHRpbGUudGlsZUlELndyYXAgKiBudW1UaWxlcyk7XG4gICAgY29uc3QgcGl4ZWxZID0gdGlsZVNpemVBdE5lYXJlc3Rab29tICogdGlsZS50aWxlSUQuY2Fub25pY2FsLnk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgICd1X3BhdHRlcm5fdGxfYSc6IChpbWFnZVBvc0E6IGFueSkudGwsXG4gICAgICAgICd1X3BhdHRlcm5fYnJfYSc6IChpbWFnZVBvc0E6IGFueSkuYnIsXG4gICAgICAgICd1X3BhdHRlcm5fdGxfYic6IChpbWFnZVBvc0I6IGFueSkudGwsXG4gICAgICAgICd1X3BhdHRlcm5fYnJfYic6IChpbWFnZVBvc0I6IGFueSkuYnIsXG4gICAgICAgICd1X3RleHNpemUnOiBbd2lkdGgsIGhlaWdodF0sXG4gICAgICAgICd1X21peCc6IGNyb3NzZmFkZS50LFxuICAgICAgICAndV9wYXR0ZXJuX3NpemVfYSc6IChpbWFnZVBvc0E6IGFueSkuZGlzcGxheVNpemUsXG4gICAgICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogKGltYWdlUG9zQjogYW55KS5kaXNwbGF5U2l6ZSxcbiAgICAgICAgJ3Vfc2NhbGVfYSc6IGNyb3NzZmFkZS5mcm9tU2NhbGUsXG4gICAgICAgICd1X3NjYWxlX2InOiBjcm9zc2ZhZGUudG9TY2FsZSxcbiAgICAgICAgJ3VfdGlsZV91bml0c190b19waXhlbHMnOiAxIC8gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgcGFpbnRlci50cmFuc2Zvcm0udGlsZVpvb20pLFxuICAgICAgICAvLyBzcGxpdCB0aGUgcGl4ZWwgY29vcmQgaW50byB0d28gcGFpcnMgb2YgMTYgYml0IG51bWJlcnMuIFRoZSBnbHNsIHNwZWMgb25seSBndWFyYW50ZWVzIDE2IGJpdHMgb2YgcHJlY2lzaW9uLlxuICAgICAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFtwaXhlbFggPj4gMTYsIHBpeGVsWSA+PiAxNl0sXG4gICAgICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogW3BpeGVsWCAmIDB4RkZGRiwgcGl4ZWxZICYgMHhGRkZGXVxuICAgIH07XG59XG5leHBvcnQge2JnUGF0dGVyblVuaWZvcm1WYWx1ZXMsIHBhdHRlcm5Vbmlmb3JtVmFsdWVzfTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7cGF0dGVyblVuaWZvcm1WYWx1ZXN9IGZyb20gJy4vcGF0dGVybic7XG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm0zZixcbiAgICBVbmlmb3JtNGYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB7bWF0MywgdmVjM30gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5cbmV4cG9ydCB0eXBlIEZpbGxFeHRydXNpb25Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9saWdodHBvcyc6IFVuaWZvcm0zZixcbiAgICAndV9saWdodGludGVuc2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9saWdodGNvbG9yJzogVW5pZm9ybTNmLFxuICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogVW5pZm9ybTFmLFxuICAgICd1X29wYWNpdHknOiBVbmlmb3JtMWZcbnx9O1xuXG5leHBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xpZ2h0cG9zJzogVW5pZm9ybTNmLFxuICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2xpZ2h0Y29sb3InOiBVbmlmb3JtM2YsXG4gICAgJ3VfaGVpZ2h0X2ZhY3Rvcic6IFVuaWZvcm0xZixcbiAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6IFVuaWZvcm0xZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtNGYsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgZmlsbEV4dHJ1c2lvblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxFeHRydXNpb25Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfbGlnaHRwb3MnOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0cG9zKSxcbiAgICAndV9saWdodGludGVuc2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHRpbnRlbnNpdHkpLFxuICAgICd1X2xpZ2h0Y29sb3InOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0Y29sb3IpLFxuICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV92ZXJ0aWNhbF9ncmFkaWVudCksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSlcbn0pO1xuXG5jb25zdCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xpZ2h0cG9zJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodHBvcyksXG4gICAgJ3VfbGlnaHRpbnRlbnNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0aW50ZW5zaXR5KSxcbiAgICAndV9saWdodGNvbG9yJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodGNvbG9yKSxcbiAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfdmVydGljYWxfZ3JhZGllbnQpLFxuICAgICd1X2hlaWdodF9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2hlaWdodF9mYWN0b3IpLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXNcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF91cHBlciksXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX2xvd2VyKSxcbiAgICAndV9zY2FsZSc6IG5ldyBVbmlmb3JtNGYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGUpLFxuICAgICd1X2ZhZGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGUpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpXG59KTtcblxuY29uc3QgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50OiBib29sZWFuLFxuICAgIG9wYWNpdHk6IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxGaWxsRXh0cnVzaW9uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgbGlnaHQgPSBwYWludGVyLnN0eWxlLmxpZ2h0O1xuICAgIGNvbnN0IF9scCA9IGxpZ2h0LnByb3BlcnRpZXMuZ2V0KCdwb3NpdGlvbicpO1xuICAgIGNvbnN0IGxpZ2h0UG9zID0gW19scC54LCBfbHAueSwgX2xwLnpdO1xuICAgIGNvbnN0IGxpZ2h0TWF0ID0gbWF0My5jcmVhdGUoKTtcbiAgICBpZiAobGlnaHQucHJvcGVydGllcy5nZXQoJ2FuY2hvcicpID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgIG1hdDMuZnJvbVJvdGF0aW9uKGxpZ2h0TWF0LCAtcGFpbnRlci50cmFuc2Zvcm0uYW5nbGUpO1xuICAgIH1cbiAgICB2ZWMzLnRyYW5zZm9ybU1hdDMobGlnaHRQb3MsIGxpZ2h0UG9zLCBsaWdodE1hdCk7XG5cbiAgICBjb25zdCBsaWdodENvbG9yID0gbGlnaHQucHJvcGVydGllcy5nZXQoJ2NvbG9yJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X2xpZ2h0cG9zJzogbGlnaHRQb3MsXG4gICAgICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogbGlnaHQucHJvcGVydGllcy5nZXQoJ2ludGVuc2l0eScpLFxuICAgICAgICAndV9saWdodGNvbG9yJzogW2xpZ2h0Q29sb3IuciwgbGlnaHRDb2xvci5nLCBsaWdodENvbG9yLmJdLFxuICAgICAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6ICtzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LFxuICAgICAgICAndV9vcGFjaXR5Jzogb3BhY2l0eVxuICAgIH07XG59O1xuXG5jb25zdCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50OiBib29sZWFuLFxuICAgIG9wYWNpdHk6IG51bWJlcixcbiAgICBjb29yZDogT3ZlcnNjYWxlZFRpbGVJRCxcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsXG4gICAgdGlsZTogVGlsZVxuKTogVW5pZm9ybVZhbHVlczxGaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIHJldHVybiBleHRlbmQoZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMobWF0cml4LCBwYWludGVyLCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LCBvcGFjaXR5KSxcbiAgICAgICAgcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKSxcbiAgICAgICAge1xuICAgICAgICAgICAgJ3VfaGVpZ2h0X2ZhY3Rvcic6IC1NYXRoLnBvdygyLCBjb29yZC5vdmVyc2NhbGVkWikgLyB0aWxlLnRpbGVTaXplIC8gOFxuICAgICAgICB9KTtcbn07XG5cbmV4cG9ydCB7XG4gICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1zLFxuICAgIGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwYXR0ZXJuVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wYXR0ZXJuJztcbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTRmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuXG5leHBvcnQgdHlwZSBGaWxsVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5leHBvcnQgdHlwZSBGaWxsT3V0bGluZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmXG58fTtcblxuZXhwb3J0IHR5cGUgRmlsbFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtNGYsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZSc6IFVuaWZvcm00ZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgZmlsbFVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeClcbn0pO1xuXG5jb25zdCBmaWxsUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm00Zihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcblxufSk7XG5cbmNvbnN0IGZpbGxPdXRsaW5lVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRmlsbE91dGxpbmVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfd29ybGQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3dvcmxkKVxufSk7XG5cbmNvbnN0IGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV93b3JsZCc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfd29ybGQpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm00Zihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcbn0pO1xuXG5jb25zdCBmaWxsVW5pZm9ybVZhbHVlcyA9IChtYXRyaXg6IEZsb2F0MzJBcnJheSk6IFVuaWZvcm1WYWx1ZXM8RmlsbFVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXhcbn0pO1xuXG5jb25zdCBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsXG4gICAgdGlsZTogVGlsZVxuKTogVW5pZm9ybVZhbHVlczxGaWxsUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4gZXh0ZW5kKFxuICAgIGZpbGxVbmlmb3JtVmFsdWVzKG1hdHJpeCksXG4gICAgcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKVxuKTtcblxuY29uc3QgZmlsbE91dGxpbmVVbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGRyYXdpbmdCdWZmZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxPdXRsaW5lVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV93b3JsZCc6IGRyYXdpbmdCdWZmZXJTaXplXG59KTtcblxuY29uc3QgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycyxcbiAgICB0aWxlOiBUaWxlLFxuICAgIGRyYXdpbmdCdWZmZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4gZXh0ZW5kKFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyhtYXRyaXgsIHBhaW50ZXIsIGNyb3NzZmFkZSwgdGlsZSksXG4gICAge1xuICAgICAgICAndV93b3JsZCc6IGRyYXdpbmdCdWZmZXJTaXplXG4gICAgfVxuKTtcblxuZXhwb3J0IHtcbiAgICBmaWxsVW5pZm9ybXMsXG4gICAgZmlsbFBhdHRlcm5Vbmlmb3JtcyxcbiAgICBmaWxsT3V0bGluZVVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zLFxuICAgIGZpbGxVbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsT3V0bGluZVVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUgQ2lyY2xlU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5cbmV4cG9ydCB0eXBlIENpcmNsZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IFVuaWZvcm0xZixcbiAgICAndV9zY2FsZV93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV9leHRydWRlX3NjYWxlJzogVW5pZm9ybTJmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5jb25zdCBjaXJjbGVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBDaXJjbGVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSxcbiAgICAndV9zY2FsZV93aXRoX21hcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfd2l0aF9tYXApLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaF93aXRoX21hcCksXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfZXh0cnVkZV9zY2FsZSksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KVxufSk7XG5cbmNvbnN0IGNpcmNsZVVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBjb29yZDogT3ZlcnNjYWxlZFRpbGVJRCxcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBDaXJjbGVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPENpcmNsZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuXG4gICAgbGV0IHBpdGNoV2l0aE1hcDogYm9vbGVhbiwgZXh0cnVkZVNjYWxlOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCcpIHtcbiAgICAgICAgY29uc3QgcGl4ZWxSYXRpbyA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKTtcbiAgICAgICAgcGl0Y2hXaXRoTWFwID0gdHJ1ZTtcbiAgICAgICAgZXh0cnVkZVNjYWxlID0gW3BpeGVsUmF0aW8sIHBpeGVsUmF0aW9dO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBpdGNoV2l0aE1hcCA9IGZhbHNlO1xuICAgICAgICBleHRydWRlU2NhbGUgPSB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxcbiAgICAgICAgJ3Vfc2NhbGVfd2l0aF9tYXAnOiArKGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLXNjYWxlJykgPT09ICdtYXAnKSxcbiAgICAgICAgJ3VfbWF0cml4JzogcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoXG4gICAgICAgICAgICBjb29yZC5wb3NNYXRyaXgsXG4gICAgICAgICAgICB0aWxlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUtYW5jaG9yJykpLFxuICAgICAgICAndV9waXRjaF93aXRoX21hcCc6ICsocGl0Y2hXaXRoTWFwKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV9leHRydWRlX3NjYWxlJzogZXh0cnVkZVNjYWxlXG4gICAgfTtcbn07XG5cbmV4cG9ydCB7Y2lyY2xlVW5pZm9ybXMsIGNpcmNsZVVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uLy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi8uLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuXG5leHBvcnQgdHlwZSBDb2xsaXNpb25Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpeGVsc190b190aWxlX3VuaXRzJzogVW5pZm9ybTFmLFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBVbmlmb3JtMmYsXG4gICAgJ3Vfb3ZlcnNjYWxlX2ZhY3Rvcic6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGNvbGxpc2lvblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IENvbGxpc2lvblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSxcbiAgICAndV9waXhlbHNfdG9fdGlsZV91bml0cyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxzX3RvX3RpbGVfdW5pdHMpLFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X2V4dHJ1ZGVfc2NhbGUpLFxuICAgICd1X292ZXJzY2FsZV9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X292ZXJzY2FsZV9mYWN0b3IpXG59KTtcblxuY29uc3QgY29sbGlzaW9uVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICB0aWxlOiBUaWxlXG4pOiBVbmlmb3JtVmFsdWVzPENvbGxpc2lvblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHBpeGVsUmF0aW8gPSBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0cmFuc2Zvcm0uem9vbSk7XG4gICAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB0cmFuc2Zvcm0uem9vbSAtIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICBjb25zdCBvdmVyc2NhbGVGYWN0b3IgPSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxcbiAgICAgICAgJ3VfcGl4ZWxzX3RvX3RpbGVfdW5pdHMnOiBwaXhlbFJhdGlvLFxuICAgICAgICAndV9leHRydWRlX3NjYWxlJzogW3RyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMF0gLyAocGl4ZWxSYXRpbyAqIHNjYWxlKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMV0gLyAocGl4ZWxSYXRpbyAqIHNjYWxlKV0sXG4gICAgICAgICd1X292ZXJzY2FsZV9mYWN0b3InOiBvdmVyc2NhbGVGYWN0b3JcbiAgICB9O1xufTtcblxuZXhwb3J0IHtjb2xsaXNpb25Vbmlmb3JtcywgY29sbGlzaW9uVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm1Db2xvcixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuZXhwb3J0IHR5cGUgRGVidWdVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X2NvbG9yJzogVW5pZm9ybUNvbG9yLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZlxufH07XG5cbmNvbnN0IGRlYnVnVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRGVidWdVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9jb2xvcic6IG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb25zLnVfY29sb3IpLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KVxufSk7XG5cbmNvbnN0IGRlYnVnVW5pZm9ybVZhbHVlcyA9IChtYXRyaXg6IEZsb2F0MzJBcnJheSwgY29sb3I6IENvbG9yKTogVW5pZm9ybVZhbHVlczxEZWJ1Z1VuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3VfY29sb3InOiBjb2xvclxufSk7XG5cbmV4cG9ydCB7ZGVidWdVbmlmb3JtcywgZGVidWdVbmlmb3JtVmFsdWVzfTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7VW5pZm9ybU1hdHJpeDRmfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmV4cG9ydCB0eXBlIENsaXBwaW5nTWFza1VuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmXG58fTtcblxuY29uc3QgY2xpcHBpbmdNYXNrVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQ2xpcHBpbmdNYXNrVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpXG59KTtcblxuY29uc3QgY2xpcHBpbmdNYXNrVW5pZm9ybVZhbHVlcyA9IChtYXRyaXg6IEZsb2F0MzJBcnJheSk6IFVuaWZvcm1WYWx1ZXM8Q2xpcHBpbmdNYXNrVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeFxufSk7XG5cbmV4cG9ydCB7Y2xpcHBpbmdNYXNrVW5pZm9ybXMsIGNsaXBwaW5nTWFza1VuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uLy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIEhlYXRtYXBTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuXG5leHBvcnQgdHlwZSBIZWF0bWFwVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9leHRydWRlX3NjYWxlJzogVW5pZm9ybTFmLFxuICAgICd1X2ludGVuc2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5leHBvcnQgdHlwZSBIZWF0bWFwVGV4dHVyZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X2NvbG9yX3JhbXAnOiBVbmlmb3JtMWksXG4gICAgJ3Vfb3BhY2l0eSc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGhlYXRtYXBVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBIZWF0bWFwVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZXh0cnVkZV9zY2FsZSksXG4gICAgJ3VfaW50ZW5zaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9pbnRlbnNpdHkpLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KVxufSk7XG5cbmNvbnN0IGhlYXRtYXBUZXh0dXJlVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogSGVhdG1hcFRleHR1cmVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfd29ybGQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3dvcmxkKSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X2NvbG9yX3JhbXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2NvbG9yX3JhbXApLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpXG59KTtcblxuY29uc3QgaGVhdG1hcFVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgdGlsZTogVGlsZSxcbiAgICB6b29tOiBudW1iZXIsXG4gICAgaW50ZW5zaXR5OiBudW1iZXJcbik6IFVuaWZvcm1WYWx1ZXM8SGVhdG1hcFVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHpvb20pLFxuICAgICd1X2ludGVuc2l0eSc6IGludGVuc2l0eVxufSk7XG5cbmNvbnN0IGhlYXRtYXBUZXh0dXJlVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGxheWVyOiBIZWF0bWFwU3R5bGVMYXllcixcbiAgICB0ZXh0dXJlVW5pdDogbnVtYmVyLFxuICAgIGNvbG9yUmFtcFVuaXQ6IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxIZWF0bWFwVGV4dHVyZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IG1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgbWF0NC5vcnRobyhtYXRyaXgsIDAsIHBhaW50ZXIud2lkdGgsIHBhaW50ZXIuaGVpZ2h0LCAwLCAwLCAxKTtcblxuICAgIGNvbnN0IGdsID0gcGFpbnRlci5jb250ZXh0LmdsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV93b3JsZCc6IFtnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRdLFxuICAgICAgICAndV9pbWFnZSc6IHRleHR1cmVVbml0LFxuICAgICAgICAndV9jb2xvcl9yYW1wJzogY29sb3JSYW1wVW5pdCxcbiAgICAgICAgJ3Vfb3BhY2l0eSc6IGxheWVyLnBhaW50LmdldCgnaGVhdG1hcC1vcGFjaXR5JylcbiAgICB9O1xufTtcblxuZXhwb3J0IHtcbiAgICBoZWF0bWFwVW5pZm9ybXMsXG4gICAgaGVhdG1hcFRleHR1cmVVbmlmb3JtcyxcbiAgICBoZWF0bWFwVW5pZm9ybVZhbHVlcyxcbiAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1WYWx1ZXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm1NYXRyaXg0ZixcbiAgICBVbmlmb3JtNGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi8uLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIEhpbGxzaGFkZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGlsbHNoYWRlX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIERFTURhdGEgZnJvbSAnLi4vLi4vZGF0YS9kZW1fZGF0YSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgdHlwZSBIaWxsc2hhZGVVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9sYXRyYW5nZSc6IFVuaWZvcm0yZixcbiAgICAndV9saWdodCc6IFVuaWZvcm0yZixcbiAgICAndV9zaGFkb3cnOiBVbmlmb3JtQ29sb3IsXG4gICAgJ3VfaGlnaGxpZ2h0JzogVW5pZm9ybUNvbG9yLFxuICAgICd1X2FjY2VudCc6IFVuaWZvcm1Db2xvclxufH07XG5cbmV4cG9ydCB0eXBlIEhpbGxzaGFkZVByZXBhcmVVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9kaW1lbnNpb24nOiBVbmlmb3JtMmYsXG4gICAgJ3Vfem9vbSc6IFVuaWZvcm0xZixcbiAgICAndV9tYXh6b29tJzogVW5pZm9ybTFmLFxuICAgICd1X3VucGFjayc6IFVuaWZvcm00ZlxufH07XG5cbmNvbnN0IGhpbGxzaGFkZVVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEhpbGxzaGFkZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X2xhdHJhbmdlJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9sYXRyYW5nZSksXG4gICAgJ3VfbGlnaHQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0KSxcbiAgICAndV9zaGFkb3cnOiBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9ucy51X3NoYWRvdyksXG4gICAgJ3VfaGlnaGxpZ2h0JzogbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbnMudV9oaWdobGlnaHQpLFxuICAgICd1X2FjY2VudCc6IG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb25zLnVfYWNjZW50KVxufSk7XG5cbmNvbnN0IGhpbGxzaGFkZVByZXBhcmVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBIaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfZGltZW5zaW9uJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9kaW1lbnNpb24pLFxuICAgICd1X3pvb20nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3pvb20pLFxuICAgICd1X21heHpvb20nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X21heHpvb20pLFxuICAgICd1X3VucGFjayc6IG5ldyBVbmlmb3JtNGYoY29udGV4dCwgbG9jYXRpb25zLnVfdW5wYWNrKVxufSk7XG5cbmNvbnN0IGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBIaWxsc2hhZGVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPEhpbGxzaGFkZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHNoYWRvdyA9IGxheWVyLnBhaW50LmdldChcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIik7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gbGF5ZXIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiKTtcbiAgICBjb25zdCBhY2NlbnQgPSBsYXllci5wYWludC5nZXQoXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCIpO1xuXG4gICAgbGV0IGF6aW11dGhhbCA9IGxheWVyLnBhaW50LmdldCgnaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb24nKSAqIChNYXRoLlBJIC8gMTgwKTtcbiAgICAvLyBtb2RpZnkgYXppbXV0aGFsIGFuZ2xlIGJ5IG1hcCByb3RhdGlvbiBpZiBsaWdodCBpcyBhbmNob3JlZCBhdCB0aGUgdmlld3BvcnRcbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvcicpID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgIGF6aW11dGhhbCAtPSBwYWludGVyLnRyYW5zZm9ybS5hbmdsZTtcbiAgICB9XG4gICAgY29uc3QgYWxpZ24gPSAhcGFpbnRlci5vcHRpb25zLm1vdmluZztcbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgodGlsZS50aWxlSUQudG9VbndyYXBwZWQoKSwgYWxpZ24pLFxuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgICd1X2xhdHJhbmdlJzogZ2V0VGlsZUxhdFJhbmdlKHBhaW50ZXIsIHRpbGUudGlsZUlEKSxcbiAgICAgICAgJ3VfbGlnaHQnOiBbbGF5ZXIucGFpbnQuZ2V0KCdoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uJyksIGF6aW11dGhhbF0sXG4gICAgICAgICd1X3NoYWRvdyc6IHNoYWRvdyxcbiAgICAgICAgJ3VfaGlnaGxpZ2h0JzogaGlnaGxpZ2h0LFxuICAgICAgICAndV9hY2NlbnQnOiBhY2NlbnRcbiAgICB9O1xufTtcblxuY29uc3QgaGlsbHNoYWRlVW5pZm9ybVByZXBhcmVWYWx1ZXMgPSAoXG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCBkZW06IERFTURhdGEsIG1heHpvb206IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxIaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXNUeXBlPiA9PiB7XG5cbiAgICBjb25zdCBzdHJpZGUgPSBkZW0uc3RyaWRlO1xuICAgIGNvbnN0IG1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgLy8gRmxpcCByZW5kZXJpbmcgYXQgeSBheGlzLlxuICAgIG1hdDQub3J0aG8obWF0cml4LCAwLCBFWFRFTlQsIC1FWFRFTlQsIDAsIDAsIDEpO1xuICAgIG1hdDQudHJhbnNsYXRlKG1hdHJpeCwgbWF0cml4LCBbMCwgLUVYVEVOVCwgMF0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV9pbWFnZSc6IDEsXG4gICAgICAgICd1X2RpbWVuc2lvbic6IFtzdHJpZGUsIHN0cmlkZV0sXG4gICAgICAgICd1X3pvb20nOiB0aWxlSUQub3ZlcnNjYWxlZFosXG4gICAgICAgICd1X21heHpvb20nOiBtYXh6b29tLFxuICAgICAgICAndV91bnBhY2snOiBkZW0uZ2V0VW5wYWNrVmVjdG9yKClcbiAgICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0VGlsZUxhdFJhbmdlKHBhaW50ZXI6IFBhaW50ZXIsIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgIC8vIGZvciBzY2FsaW5nIHRoZSBtYWduaXR1ZGUgb2YgYSBwb2ludHMgc2xvcGUgYnkgaXRzIGxhdGl0dWRlXG4gICAgY29uc3QgdGlsZXNBdFpvb20gPSBNYXRoLnBvdygyLCB0aWxlSUQuY2Fub25pY2FsLnopO1xuICAgIGNvbnN0IHkgPSB0aWxlSUQuY2Fub25pY2FsLnk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZSgwLCB5IC8gdGlsZXNBdFpvb20pLnRvTG5nTGF0KCkubGF0LFxuICAgICAgICBuZXcgTWVyY2F0b3JDb29yZGluYXRlKDAsICh5ICsgMSkgLyB0aWxlc0F0Wm9vbSkudG9MbmdMYXQoKS5sYXRdO1xufVxuXG5leHBvcnQge1xuICAgIGhpbGxzaGFkZVVuaWZvcm1zLFxuICAgIGhpbGxzaGFkZVByZXBhcmVVbmlmb3JtcyxcbiAgICBoaWxsc2hhZGVVbmlmb3JtVmFsdWVzLFxuICAgIGhpbGxzaGFkZVVuaWZvcm1QcmVwYXJlVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtNGYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBMaW5lU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuZXhwb3J0IHR5cGUgTGluZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMmZcbnx9O1xuXG5leHBvcnQgdHlwZSBMaW5lR3JhZGllbnRVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogVW5pZm9ybTJmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpXG58fTtcblxuZXhwb3J0IHR5cGUgTGluZVBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtNGYsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIExpbmVTREZVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5zY2FsZV9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5zY2FsZV9iJzogVW5pZm9ybTJmLFxuICAgICd1X3NkZmdhbW1hJzogVW5pZm9ybTFmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3RleF95X2EnOiBVbmlmb3JtMWYsXG4gICAgJ3VfdGV4X3lfYic6IFVuaWZvcm0xZixcbiAgICAndV9taXgnOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBsaW5lVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogTGluZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcmF0aW8pLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VuaXRzX3RvX3BpeGVscylcbn0pO1xuXG5jb25zdCBsaW5lR3JhZGllbnRVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBMaW5lR3JhZGllbnRVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3JhdGlvKSxcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RldmljZV9waXhlbF9yYXRpbyksXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV91bml0c190b19waXhlbHMpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSlcbn0pO1xuXG5jb25zdCBsaW5lUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IExpbmVQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9yYXRpbyksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV91bml0c190b19waXhlbHMpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm00Zihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcbn0pO1xuXG5jb25zdCBsaW5lU0RGVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogTGluZVNERlVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcmF0aW8pLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VuaXRzX3RvX3BpeGVscyksXG4gICAgJ3VfcGF0dGVybnNjYWxlX2EnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5zY2FsZV9hKSxcbiAgICAndV9wYXR0ZXJuc2NhbGVfYic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybnNjYWxlX2IpLFxuICAgICd1X3NkZmdhbW1hJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zZGZnYW1tYSksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV90ZXhfeV9hJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhfeV9hKSxcbiAgICAndV90ZXhfeV9iJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhfeV9iKSxcbiAgICAndV9taXgnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X21peClcbn0pO1xuXG5jb25zdCBsaW5lVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IExpbmVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IGNhbGN1bGF0ZU1hdHJpeChwYWludGVyLCB0aWxlLCBsYXllciksXG4gICAgICAgICd1X3JhdGlvJzogMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV91bml0c190b19waXhlbHMnOiBbXG4gICAgICAgICAgICAxIC8gdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSxcbiAgICAgICAgICAgIDEgLyB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdXG4gICAgICAgIF1cbiAgICB9O1xufTtcblxuY29uc3QgbGluZUdyYWRpZW50VW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IExpbmVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVHcmFkaWVudFVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIHJldHVybiBleHRlbmQobGluZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpLCB7XG4gICAgICAgICd1X2ltYWdlJzogMFxuICAgIH0pO1xufTtcblxuY29uc3QgbGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgdGlsZTogVGlsZSxcbiAgICBsYXllcjogTGluZVN0eWxlTGF5ZXIsXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVQYXR0ZXJuVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG4gICAgY29uc3QgdGlsZVpvb21SYXRpbyA9IGNhbGN1bGF0ZVRpbGVSYXRpbyh0aWxlLCB0cmFuc2Zvcm0pO1xuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IGNhbGN1bGF0ZU1hdHJpeChwYWludGVyLCB0aWxlLCBsYXllciksXG4gICAgICAgICd1X3RleHNpemUnOiB0aWxlLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsXG4gICAgICAgIC8vIGNhbWVyYSB6b29tIHJhdGlvXG4gICAgICAgICd1X3JhdGlvJzogMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgIC8vIHRoaXMgYXNzdW1lcyBhbGwgaW1hZ2VzIGluIHRoZSBpY29uIGF0bGFzIHRleHR1cmUgaGF2ZSB0aGUgc2FtZSBwaXhlbCByYXRpb1xuICAgICAgICAndV9zY2FsZSc6IFticm93c2VyLmRldmljZVBpeGVsUmF0aW8sIHRpbGVab29tUmF0aW8sIGNyb3NzZmFkZS5mcm9tU2NhbGUsIGNyb3NzZmFkZS50b1NjYWxlXSxcbiAgICAgICAgJ3VfZmFkZSc6IGNyb3NzZmFkZS50LFxuICAgICAgICAndV91bml0c190b19waXhlbHMnOiBbXG4gICAgICAgICAgICAxIC8gdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSxcbiAgICAgICAgICAgIDEgLyB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdXG4gICAgICAgIF1cbiAgICB9O1xufTtcblxuY29uc3QgbGluZVNERlVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBMaW5lU3R5bGVMYXllcixcbiAgICBkYXNoYXJyYXk6IENyb3NzRmFkZWQ8QXJyYXk8bnVtYmVyPj4sXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVTREZVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCBsaW5lQXRsYXMgPSBwYWludGVyLmxpbmVBdGxhcztcbiAgICBjb25zdCB0aWxlUmF0aW8gPSBjYWxjdWxhdGVUaWxlUmF0aW8odGlsZSwgdHJhbnNmb3JtKTtcblxuICAgIGNvbnN0IHJvdW5kID0gbGF5ZXIubGF5b3V0LmdldCgnbGluZS1jYXAnKSA9PT0gJ3JvdW5kJztcblxuICAgIGNvbnN0IHBvc0EgPSBsaW5lQXRsYXMuZ2V0RGFzaChkYXNoYXJyYXkuZnJvbSwgcm91bmQpO1xuICAgIGNvbnN0IHBvc0IgPSBsaW5lQXRsYXMuZ2V0RGFzaChkYXNoYXJyYXkudG8sIHJvdW5kKTtcblxuICAgIGNvbnN0IHdpZHRoQSA9IHBvc0Eud2lkdGggKiBjcm9zc2ZhZGUuZnJvbVNjYWxlO1xuICAgIGNvbnN0IHdpZHRoQiA9IHBvc0Iud2lkdGggKiBjcm9zc2ZhZGUudG9TY2FsZTtcblxuICAgIHJldHVybiBleHRlbmQobGluZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpLCB7XG4gICAgICAgICd1X3BhdHRlcm5zY2FsZV9hJzogW3RpbGVSYXRpbyAvIHdpZHRoQSwgLXBvc0EuaGVpZ2h0IC8gMl0sXG4gICAgICAgICd1X3BhdHRlcm5zY2FsZV9iJzogW3RpbGVSYXRpbyAvIHdpZHRoQiwgLXBvc0IuaGVpZ2h0IC8gMl0sXG4gICAgICAgICd1X3NkZmdhbW1hJzogbGluZUF0bGFzLndpZHRoIC8gKE1hdGgubWluKHdpZHRoQSwgd2lkdGhCKSAqIDI1NiAqIGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbykgLyAyLFxuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgICd1X3RleF95X2EnOiBwb3NBLnksXG4gICAgICAgICd1X3RleF95X2InOiBwb3NCLnksXG4gICAgICAgICd1X21peCc6IGNyb3NzZmFkZS50XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVUaWxlUmF0aW8odGlsZTogVGlsZSwgdHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICByZXR1cm4gMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS50aWxlWm9vbSk7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1hdHJpeChwYWludGVyLCB0aWxlLCBsYXllcikge1xuICAgIHJldHVybiBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChcbiAgICAgICAgdGlsZS50aWxlSUQucG9zTWF0cml4LFxuICAgICAgICB0aWxlLFxuICAgICAgICBsYXllci5wYWludC5nZXQoJ2xpbmUtdHJhbnNsYXRlJyksXG4gICAgICAgIGxheWVyLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUtYW5jaG9yJylcbiAgICApO1xufVxuXG5leHBvcnQge1xuICAgIGxpbmVVbmlmb3JtcyxcbiAgICBsaW5lR3JhZGllbnRVbmlmb3JtcyxcbiAgICBsaW5lUGF0dGVyblVuaWZvcm1zLFxuICAgIGxpbmVTREZVbmlmb3JtcyxcbiAgICBsaW5lVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lR3JhZGllbnRVbmlmb3JtVmFsdWVzLFxuICAgIGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lU0RGVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTNmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBSYXN0ZXJTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcic7XG5cbmV4cG9ydCB0eXBlIFJhc3RlclVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3RsX3BhcmVudCc6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZV9wYXJlbnQnOiBVbmlmb3JtMWYsXG4gICAgJ3VfYnVmZmVyX3NjYWxlJzogVW5pZm9ybTFmLFxuICAgICd1X2ZhZGVfdCc6IFVuaWZvcm0xZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2ltYWdlMCc6IFVuaWZvcm0xaSxcbiAgICAndV9pbWFnZTEnOiBVbmlmb3JtMWksXG4gICAgJ3VfYnJpZ2h0bmVzc19sb3cnOiBVbmlmb3JtMWYsXG4gICAgJ3VfYnJpZ2h0bmVzc19oaWdoJzogVW5pZm9ybTFmLFxuICAgICd1X3NhdHVyYXRpb25fZmFjdG9yJzogVW5pZm9ybTFmLFxuICAgICd1X2NvbnRyYXN0X2ZhY3Rvcic6IFVuaWZvcm0xZixcbiAgICAndV9zcGluX3dlaWdodHMnOiBVbmlmb3JtM2Zcbnx9O1xuXG5jb25zdCByYXN0ZXJVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBSYXN0ZXJVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfdGxfcGFyZW50JzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90bF9wYXJlbnQpLFxuICAgICd1X3NjYWxlX3BhcmVudCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfcGFyZW50KSxcbiAgICAndV9idWZmZXJfc2NhbGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2J1ZmZlcl9zY2FsZSksXG4gICAgJ3VfZmFkZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX3QpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpLFxuICAgICd1X2ltYWdlMCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UwKSxcbiAgICAndV9pbWFnZTEnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlMSksXG4gICAgJ3VfYnJpZ2h0bmVzc19sb3cnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2JyaWdodG5lc3NfbG93KSxcbiAgICAndV9icmlnaHRuZXNzX2hpZ2gnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2JyaWdodG5lc3NfaGlnaCksXG4gICAgJ3Vfc2F0dXJhdGlvbl9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NhdHVyYXRpb25fZmFjdG9yKSxcbiAgICAndV9jb250cmFzdF9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NvbnRyYXN0X2ZhY3RvciksXG4gICAgJ3Vfc3Bpbl93ZWlnaHRzJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zcGluX3dlaWdodHMpXG59KTtcblxuY29uc3QgcmFzdGVyVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBwYXJlbnRUTDogW251bWJlciwgbnVtYmVyXSxcbiAgICBwYXJlbnRTY2FsZUJ5OiBudW1iZXIsXG4gICAgZmFkZToge21peDogbnVtYmVyLCBvcGFjaXR5OiBudW1iZXJ9LFxuICAgIGxheWVyOiBSYXN0ZXJTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPFJhc3RlclVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3VfdGxfcGFyZW50JzogcGFyZW50VEwsXG4gICAgJ3Vfc2NhbGVfcGFyZW50JzogcGFyZW50U2NhbGVCeSxcbiAgICAndV9idWZmZXJfc2NhbGUnOiAxLFxuICAgICd1X2ZhZGVfdCc6IGZhZGUubWl4LFxuICAgICd1X29wYWNpdHknOiBmYWRlLm9wYWNpdHkgKiBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1vcGFjaXR5JyksXG4gICAgJ3VfaW1hZ2UwJzogMCxcbiAgICAndV9pbWFnZTEnOiAxLFxuICAgICd1X2JyaWdodG5lc3NfbG93JzogbGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItYnJpZ2h0bmVzcy1taW4nKSxcbiAgICAndV9icmlnaHRuZXNzX2hpZ2gnOiBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1icmlnaHRuZXNzLW1heCcpLFxuICAgICd1X3NhdHVyYXRpb25fZmFjdG9yJzogc2F0dXJhdGlvbkZhY3RvcihsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1zYXR1cmF0aW9uJykpLFxuICAgICd1X2NvbnRyYXN0X2ZhY3Rvcic6IGNvbnRyYXN0RmFjdG9yKGxheWVyLnBhaW50LmdldCgncmFzdGVyLWNvbnRyYXN0JykpLFxuICAgICd1X3NwaW5fd2VpZ2h0cyc6IHNwaW5XZWlnaHRzKGxheWVyLnBhaW50LmdldCgncmFzdGVyLWh1ZS1yb3RhdGUnKSlcbn0pO1xuXG5mdW5jdGlvbiBzcGluV2VpZ2h0cyhhbmdsZSkge1xuICAgIGFuZ2xlICo9IE1hdGguUEkgLyAxODA7XG4gICAgY29uc3QgcyA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICBjb25zdCBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIHJldHVybiBbXG4gICAgICAgICgyICogYyArIDEpIC8gMyxcbiAgICAgICAgKC1NYXRoLnNxcnQoMykgKiBzIC0gYyArIDEpIC8gMyxcbiAgICAgICAgKE1hdGguc3FydCgzKSAqIHMgLSBjICsgMSkgLyAzXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gY29udHJhc3RGYWN0b3IoY29udHJhc3QpIHtcbiAgICByZXR1cm4gY29udHJhc3QgPiAwID9cbiAgICAgICAgMSAvICgxIC0gY29udHJhc3QpIDpcbiAgICAgICAgMSArIGNvbnRyYXN0O1xufVxuXG5mdW5jdGlvbiBzYXR1cmF0aW9uRmFjdG9yKHNhdHVyYXRpb24pIHtcbiAgICByZXR1cm4gc2F0dXJhdGlvbiA+IDAgP1xuICAgICAgICAxIC0gMSAvICgxLjAwMSAtIHNhdHVyYXRpb24pIDpcbiAgICAgICAgLXNhdHVyYXRpb247XG59XG5cbmV4cG9ydCB7cmFzdGVyVW5pZm9ybXMsIHJhc3RlclVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuZXhwb3J0IHR5cGUgU3ltYm9sSWNvblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6IFVuaWZvcm0xaSxcbiAgICAndV9zaXplX3QnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2l6ZSc6IFVuaWZvcm0xZixcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpdGNoJzogVW5pZm9ybTFmLFxuICAgICd1X3JvdGF0ZV9zeW1ib2wnOiBVbmlmb3JtMWksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogVW5pZm9ybTFmLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfY29vcmRfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2lzX3RleHQnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV90ZXh0dXJlJzogVW5pZm9ybTFpXG58fTtcblxuZXhwb3J0IHR5cGUgU3ltYm9sU0RGVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBVbmlmb3JtMWksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X3NpemVfdCc6IFVuaWZvcm0xZixcbiAgICAndV9zaXplJzogVW5pZm9ybTFmLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl0Y2gnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IFVuaWZvcm0xaSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jb29yZF9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfaXNfdGV4dCc6IFVuaWZvcm0xZixcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHR1cmUnOiBVbmlmb3JtMWksXG4gICAgJ3VfZ2FtbWFfc2NhbGUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2lzX2hhbG8nOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBzeW1ib2xJY29uVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogU3ltYm9sSWNvblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksXG4gICAgJ3Vfc2l6ZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplX3QpLFxuICAgICd1X3NpemUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemUpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpdGNoJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaCksXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcm90YXRlX3N5bWJvbCksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9hc3BlY3RfcmF0aW8pLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX2NoYW5nZSksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbGFiZWxfcGxhbmVfbWF0cml4KSxcbiAgICAndV9jb29yZF9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2Nvb3JkX21hdHJpeCksXG4gICAgJ3VfaXNfdGV4dCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfdGV4dCksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoX3dpdGhfbWFwKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV90ZXh0dXJlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV90ZXh0dXJlKVxufSk7XG5cbmNvbnN0IHN5bWJvbFNERlVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IFN5bWJvbFNERlVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksXG4gICAgJ3Vfc2l6ZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplX3QpLFxuICAgICd1X3NpemUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemUpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpdGNoJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaCksXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcm90YXRlX3N5bWJvbCksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9hc3BlY3RfcmF0aW8pLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX2NoYW5nZSksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbGFiZWxfcGxhbmVfbWF0cml4KSxcbiAgICAndV9jb29yZF9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2Nvb3JkX21hdHJpeCksXG4gICAgJ3VfaXNfdGV4dCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfdGV4dCksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoX3dpdGhfbWFwKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV90ZXh0dXJlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV90ZXh0dXJlKSxcbiAgICAndV9nYW1tYV9zY2FsZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZ2FtbWFfc2NhbGUpLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV9pc19oYWxvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9pc19oYWxvKVxufSk7XG5cbmNvbnN0IHN5bWJvbEljb25Vbmlmb3JtVmFsdWVzID0gKFxuICAgIGZ1bmN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHNpemU6ID97dVNpemVUOiBudW1iZXIsIHVTaXplOiBudW1iZXJ9LFxuICAgIHJvdGF0ZUluU2hhZGVyOiBib29sZWFuLFxuICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGxhYmVsUGxhbmVNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBnbENvb3JkTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgaXNUZXh0OiBib29sZWFuLFxuICAgIHRleFNpemU6IFtudW1iZXIsIG51bWJlcl1cbik6IFVuaWZvcm1WYWx1ZXM8U3ltYm9sSWNvblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogKyhmdW5jdGlvblR5cGUgPT09ICdjb25zdGFudCcgfHwgZnVuY3Rpb25UeXBlID09PSAnc291cmNlJyksXG4gICAgICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6ICsoZnVuY3Rpb25UeXBlID09PSAnY29uc3RhbnQnIHx8IGZ1bmN0aW9uVHlwZSA9PT0gJ2NhbWVyYScpLFxuICAgICAgICAndV9zaXplX3QnOiBzaXplID8gc2l6ZS51U2l6ZVQgOiAwLFxuICAgICAgICAndV9zaXplJzogc2l6ZSA/IHNpemUudVNpemUgOiAwLFxuICAgICAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsXG4gICAgICAgICd1X3BpdGNoJzogdHJhbnNmb3JtLnBpdGNoIC8gMzYwICogMiAqIE1hdGguUEksXG4gICAgICAgICd1X3JvdGF0ZV9zeW1ib2wnOiArcm90YXRlSW5TaGFkZXIsXG4gICAgICAgICd1X2FzcGVjdF9yYXRpbyc6IHRyYW5zZm9ybS53aWR0aCAvIHRyYW5zZm9ybS5oZWlnaHQsXG4gICAgICAgICd1X2ZhZGVfY2hhbmdlJzogcGFpbnRlci5vcHRpb25zLmZhZGVEdXJhdGlvbiA/IHBhaW50ZXIuc3ltYm9sRmFkZUNoYW5nZSA6IDEsXG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3VfbGFiZWxfcGxhbmVfbWF0cml4JzogbGFiZWxQbGFuZU1hdHJpeCxcbiAgICAgICAgJ3VfY29vcmRfbWF0cml4JzogZ2xDb29yZE1hdHJpeCxcbiAgICAgICAgJ3VfaXNfdGV4dCc6ICtpc1RleHQsXG4gICAgICAgICd1X3BpdGNoX3dpdGhfbWFwJzogK3BpdGNoV2l0aE1hcCxcbiAgICAgICAgJ3VfdGV4c2l6ZSc6IHRleFNpemUsXG4gICAgICAgICd1X3RleHR1cmUnOiAwXG4gICAgfTtcbn07XG5cbmNvbnN0IHN5bWJvbFNERlVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgZnVuY3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgc2l6ZTogP3t1U2l6ZVQ6IG51bWJlciwgdVNpemU6IG51bWJlcn0sXG4gICAgcm90YXRlSW5TaGFkZXI6IGJvb2xlYW4sXG4gICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgbGFiZWxQbGFuZU1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGdsQ29vcmRNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBpc1RleHQ6IGJvb2xlYW4sXG4gICAgdGV4U2l6ZTogW251bWJlciwgbnVtYmVyXSxcbiAgICBpc0hhbG86IGJvb2xlYW5cbik6IFVuaWZvcm1WYWx1ZXM8U3ltYm9sU0RGVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICByZXR1cm4gZXh0ZW5kKHN5bWJvbEljb25Vbmlmb3JtVmFsdWVzKGZ1bmN0aW9uVHlwZSwgc2l6ZSxcbiAgICAgICAgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICBnbENvb3JkTWF0cml4LCBpc1RleHQsIHRleFNpemUpLCB7XG4gICAgICAgICd1X2dhbW1hX3NjYWxlJzogKHBpdGNoV2l0aE1hcCA/IE1hdGguY29zKHRyYW5zZm9ybS5fcGl0Y2gpICogdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgOiAxKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV9pc19oYWxvJzogK2lzSGFsb1xuICAgIH0pO1xufTtcblxuZXhwb3J0IHtzeW1ib2xJY29uVW5pZm9ybXMsIHN5bWJvbFNERlVuaWZvcm1zLCBzeW1ib2xJY29uVW5pZm9ybVZhbHVlcywgc3ltYm9sU0RGVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JnUGF0dGVyblVuaWZvcm1WYWx1ZXN9IGZyb20gJy4vcGF0dGVybic7XG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1Db2xvcixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCB0eXBlIHtDcm9zc0ZhZGVkfSBmcm9tICcuLi8uLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IHR5cGUgQmFja2dyb3VuZFVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X29wYWNpdHknOiBVbmlmb3JtMWYsXG4gICAgJ3VfY29sb3InOiBVbmlmb3JtQ29sb3Jcbnx9O1xuXG5leHBvcnQgdHlwZSBCYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X29wYWNpdHknOiBVbmlmb3JtMWYsXG4gICAgLy8gcGF0dGVybiB1bmlmb3JtczpcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9wYXR0ZXJuX3RsX2EnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9icl9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fdGxfYic6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX2JyX2InOiBVbmlmb3JtMmYsXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9taXgnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGF0dGVybl9zaXplX2EnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9zaXplX2InOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGVfYSc6IFVuaWZvcm0xZixcbiAgICAndV9zY2FsZV9iJzogVW5pZm9ybTFmLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogVW5pZm9ybTJmLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogVW5pZm9ybTJmLFxuICAgICd1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzJzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgYmFja2dyb3VuZFVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEJhY2tncm91bmRVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSksXG4gICAgJ3VfY29sb3InOiBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9ucy51X2NvbG9yKVxufSk7XG5cbmNvbnN0IGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV9wYXR0ZXJuX3RsX2EnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5fdGxfYSksXG4gICAgJ3VfcGF0dGVybl9icl9hJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX2JyX2EpLFxuICAgICd1X3BhdHRlcm5fdGxfYic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl90bF9iKSxcbiAgICAndV9wYXR0ZXJuX2JyX2InOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5fYnJfYiksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfbWl4JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9taXgpLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9hJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX3NpemVfYSksXG4gICAgJ3VfcGF0dGVybl9zaXplX2InOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5fc2l6ZV9iKSxcbiAgICAndV9zY2FsZV9hJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZV9hKSxcbiAgICAndV9zY2FsZV9iJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZV9iKSxcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfdXBwZXIpLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF9sb3dlciksXG4gICAgJ3VfdGlsZV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RpbGVfdW5pdHNfdG9fcGl4ZWxzKVxufSk7XG5cbmNvbnN0IGJhY2tncm91bmRVbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIG9wYWNpdHk6IG51bWJlcixcbiAgICBjb2xvcjogQ29sb3Jcbik6IFVuaWZvcm1WYWx1ZXM8QmFja2dyb3VuZFVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3Vfb3BhY2l0eSc6IG9wYWNpdHksXG4gICAgJ3VfY29sb3InOiBjb2xvclxufSk7XG5cbmNvbnN0IGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBvcGFjaXR5OiBudW1iZXIsXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBpbWFnZTogQ3Jvc3NGYWRlZDxSZXNvbHZlZEltYWdlPixcbiAgICB0aWxlOiB7dGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCB0aWxlU2l6ZTogbnVtYmVyfSxcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnNcbik6IFVuaWZvcm1WYWx1ZXM8QmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc1R5cGU+ID0+IGV4dGVuZChcbiAgICBiZ1BhdHRlcm5Vbmlmb3JtVmFsdWVzKGltYWdlLCBjcm9zc2ZhZGUsIHBhaW50ZXIsIHRpbGUpLFxuICAgIHtcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV9vcGFjaXR5Jzogb3BhY2l0eVxuICAgIH1cbik7XG5cbmV4cG9ydCB7XG4gICAgYmFja2dyb3VuZFVuaWZvcm1zLFxuICAgIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXMsXG4gICAgYmFja2dyb3VuZFVuaWZvcm1WYWx1ZXMsXG4gICAgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3JtVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtmaWxsRXh0cnVzaW9uVW5pZm9ybXMsIGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXN9IGZyb20gJy4vZmlsbF9leHRydXNpb25fcHJvZ3JhbSc7XG5pbXBvcnQge2ZpbGxVbmlmb3JtcywgZmlsbFBhdHRlcm5Vbmlmb3JtcywgZmlsbE91dGxpbmVVbmlmb3JtcywgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybXN9IGZyb20gJy4vZmlsbF9wcm9ncmFtJztcbmltcG9ydCB7Y2lyY2xlVW5pZm9ybXN9IGZyb20gJy4vY2lyY2xlX3Byb2dyYW0nO1xuaW1wb3J0IHtjb2xsaXNpb25Vbmlmb3Jtc30gZnJvbSAnLi9jb2xsaXNpb25fcHJvZ3JhbSc7XG5pbXBvcnQge2RlYnVnVW5pZm9ybXN9IGZyb20gJy4vZGVidWdfcHJvZ3JhbSc7XG5pbXBvcnQge2NsaXBwaW5nTWFza1VuaWZvcm1zfSBmcm9tICcuL2NsaXBwaW5nX21hc2tfcHJvZ3JhbSc7XG5pbXBvcnQge2hlYXRtYXBVbmlmb3JtcywgaGVhdG1hcFRleHR1cmVVbmlmb3Jtc30gZnJvbSAnLi9oZWF0bWFwX3Byb2dyYW0nO1xuaW1wb3J0IHtoaWxsc2hhZGVVbmlmb3JtcywgaGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zfSBmcm9tICcuL2hpbGxzaGFkZV9wcm9ncmFtJztcbmltcG9ydCB7bGluZVVuaWZvcm1zLCBsaW5lR3JhZGllbnRVbmlmb3JtcywgbGluZVBhdHRlcm5Vbmlmb3JtcywgbGluZVNERlVuaWZvcm1zfSBmcm9tICcuL2xpbmVfcHJvZ3JhbSc7XG5pbXBvcnQge3Jhc3RlclVuaWZvcm1zfSBmcm9tICcuL3Jhc3Rlcl9wcm9ncmFtJztcbmltcG9ydCB7c3ltYm9sSWNvblVuaWZvcm1zLCBzeW1ib2xTREZVbmlmb3Jtc30gZnJvbSAnLi9zeW1ib2xfcHJvZ3JhbSc7XG5pbXBvcnQge2JhY2tncm91bmRVbmlmb3JtcywgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc30gZnJvbSAnLi9iYWNrZ3JvdW5kX3Byb2dyYW0nO1xuXG5leHBvcnQgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0ge1xuICAgIGZpbGxFeHRydXNpb246IGZpbGxFeHRydXNpb25Vbmlmb3JtcyxcbiAgICBmaWxsRXh0cnVzaW9uUGF0dGVybjogZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtcyxcbiAgICBmaWxsOiBmaWxsVW5pZm9ybXMsXG4gICAgZmlsbFBhdHRlcm46IGZpbGxQYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbE91dGxpbmU6IGZpbGxPdXRsaW5lVW5pZm9ybXMsXG4gICAgZmlsbE91dGxpbmVQYXR0ZXJuOiBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtcyxcbiAgICBjaXJjbGU6IGNpcmNsZVVuaWZvcm1zLFxuICAgIGNvbGxpc2lvbkJveDogY29sbGlzaW9uVW5pZm9ybXMsXG4gICAgY29sbGlzaW9uQ2lyY2xlOiBjb2xsaXNpb25Vbmlmb3JtcyxcbiAgICBkZWJ1ZzogZGVidWdVbmlmb3JtcyxcbiAgICBjbGlwcGluZ01hc2s6IGNsaXBwaW5nTWFza1VuaWZvcm1zLFxuICAgIGhlYXRtYXA6IGhlYXRtYXBVbmlmb3JtcyxcbiAgICBoZWF0bWFwVGV4dHVyZTogaGVhdG1hcFRleHR1cmVVbmlmb3JtcyxcbiAgICBoaWxsc2hhZGU6IGhpbGxzaGFkZVVuaWZvcm1zLFxuICAgIGhpbGxzaGFkZVByZXBhcmU6IGhpbGxzaGFkZVByZXBhcmVVbmlmb3JtcyxcbiAgICBsaW5lOiBsaW5lVW5pZm9ybXMsXG4gICAgbGluZUdyYWRpZW50OiBsaW5lR3JhZGllbnRVbmlmb3JtcyxcbiAgICBsaW5lUGF0dGVybjogbGluZVBhdHRlcm5Vbmlmb3JtcyxcbiAgICBsaW5lU0RGOiBsaW5lU0RGVW5pZm9ybXMsXG4gICAgcmFzdGVyOiByYXN0ZXJVbmlmb3JtcyxcbiAgICBzeW1ib2xJY29uOiBzeW1ib2xJY29uVW5pZm9ybXMsXG4gICAgc3ltYm9sU0RGOiBzeW1ib2xTREZVbmlmb3JtcyxcbiAgICBiYWNrZ3JvdW5kOiBiYWNrZ3JvdW5kVW5pZm9ybXMsXG4gICAgYmFja2dyb3VuZFBhdHRlcm46IGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUQsIENhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcblxuZXhwb3J0IHR5cGUgTWFzayA9IHtcbiAgICBbbnVtYmVyXTogQ2Fub25pY2FsVGlsZUlEXG59O1xuXG4vLyBVcGRhdGVzIHRoZSBUaWxlTWFza3MgZm9yIGFsbCByZW5kZXJhYmxlIHRpbGVzLiBBIFRpbGVNYXNrIGRlc2NyaWJlcyBhbGwgcmVnaW9uc1xuLy8gd2l0aGluIHRoYXQgdGlsZSB0aGF0IGFyZSAqbm90KiBjb3ZlcmVkIGJ5IG90aGVyIHJlbmRlcmFibGUgdGlsZXMuXG4vLyBFeGFtcGxlOiByZW5kZXJhYmxlVGlsZXMgaW4gb3VyIGxpc3QgYXJlIDIvMS8zLCAzLzMvNiwgYW5kIDQvNS8xMy4gVGhlIHNjaGVtYXRpYyBmb3IgY3JlYXRpbmcgdGhlXG4vLyBUaWxlTWFzayBmb3IgMi8xLzMgbG9va3MgbGlrZSB0aGlzOlxuLy9cbi8vICAgIMOiwpTCjMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCrMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCrMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCkFxuLy8gICAgw6LClMKCICAgICAgICDDosKUwoIgICAgICAgIMOiwpTCgiMjIyMjIyMjIyMjIyMjIyMjw6LClMKCXG4vLyAgICDDosKUwoIgNC80LzEyIMOiwpTCgiA0LzUvMTIgw6LClMKCIyMjIyMjIyMjIyMjIyMjIyPDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgw6LClMKCICAgICAgICDDosKUwoIjIyMjIyMjIyMjIyMjIyMjI8OiwpTCglxuLy8gICAgw6LClMKcw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAMy8yLzbDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwqQjIyMjIzMvMy82IyMjIyMjI8OiwpTCglxuLy8gICAgw6LClMKCICAgICAgICDDosKUwoIjIyMjIyMjI8OiwpTCgiMjIyMjIyMjIyMjIyMjIyMjw6LClMKCXG4vLyAgICDDosKUwoIgNC80LzEzIMOiwpTCgiM0LzUvMTMjw6LClMKCIyMjIyMjIyMjIyMjIyMjIyPDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgw6LClMKCIyMjIyMjIyPDosKUwoIjIyMjIyMjIyMjIyMjIyMjI8OiwpTCglxuLy8gICAgw6LClMKcw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMK0w6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAMi8xLzPDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwqRcbi8vICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgIDMvMi83ICAgICAgw6LClMKCICAgICAgMy8zLzcgICAgICDDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCICAgICAgICAgICAgICAgICDDosKUwoJcbi8vICAgIMOiwpTClMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCtMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCmFxuLy9cbi8vIFRoZSBUaWxlTWFzayBmb3IgMi8xLzMgdGh1cyBjb25zaXN0cyBvZiB0aGUgdGlsZXMgNC80LzEyLCA0LzUvMTIsIDQvNC8xMywgMy8yLzcsIGFuZCAzLzMvNyxcbi8vIGJ1dCBpdCBkb2VzICpub3QqIGluY2x1ZGUgNC81LzEzLCBhbmQgMy8zLzYsIHNpbmNlIHRoZXNlIGFyZSBvdGhlciByZW5kZXJhYmxlVGlsZXMuXG4vLyBBIFRpbGVNYXNrIGFsd2F5cyBjb250YWlucyBUaWxlSURzICpyZWxhdGl2ZSogdG8gdGhlIHRpbGUgaXQgaXMgZ2VuZXJhdGVkIGZvciwgc28gMi8xLzMgaXNcbi8vIFwic3VidHJhY3RlZFwiIGZyb20gdGhlc2UgVGlsZUlEcy4gVGhlIGZpbmFsIFRpbGVNYXNrIGZvciAyLzEvMyB3aWxsIHRodXMgYmU6XG4vL1xuLy8gICAgw6LClMKMw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKsw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKsw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKQXG4vLyAgICDDosKUwoIgICAgICAgIMOiwpTCgiAgICAgICAgw6LClMKCIyMjIyMjIyMjIyMjIyMjIyPDosKUwoJcbi8vICAgIMOiwpTCgiAyLzAvMCAgw6LClMKCIDIvMS8wICDDosKUwoIjIyMjIyMjIyMjIyMjIyMjI8OiwpTCglxuLy8gICAgw6LClMKCICAgICAgICDDosKUwoIgICAgICAgIMOiwpTCgiMjIyMjIyMjIyMjIyMjIyMjw6LClMKCXG4vLyAgICDDosKUwpzDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwrzDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwqQjIyMjIyMjIyMjIyMjIyMjI8OiwpTCglxuLy8gICAgw6LClMKCICAgICAgICDDosKUwoIjIyMjIyMjI8OiwpTCgiMjIyMjIyMjIyMjIyMjIyMjw6LClMKCXG4vLyAgICDDosKUwoIgMi8wLzEgIMOiwpTCgiMjIyMjIyMjw6LClMKCIyMjIyMjIyMjIyMjIyMjIyPDosKUwoJcbi8vICAgIMOiwpTCgiAgICAgICAgw6LClMKCIyMjIyMjIyPDosKUwoIjIyMjIyMjIyMjIyMjIyMjI8OiwpTCglxuLy8gICAgw6LClMKcw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMK0w6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMK8w6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKkXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAxLzAvMSAgICAgIMOiwpTCgiAgICAgIDEvMS8xICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwoIgICAgICAgICAgICAgICAgIMOiwpTCgiAgICAgICAgICAgICAgICAgw6LClMKCXG4vLyAgICDDosKUwpTDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwrTDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwphcbi8vXG4vLyBPbmx5IG90aGVyIHJlbmRlcmFibGUgdGlsZXMgdGhhdCBhcmUgKmNoaWxkcmVuKiBvZiB0aGUgdGlsZSB3ZSBhcmUgZ2VuZXJhdGluZyB0aGUgbWFzayBmb3Igd2lsbFxuLy8gYmUgY29uc2lkZXJlZC4gRm9yIGV4YW1wbGUsIGFkZGluZyBUaWxlSUQgNC84LzEzIHRvIHJlbmRlcmFibGVUaWxlcyB3b24ndCBhZmZlY3QgdGhlIFRpbGVNYXNrIGZvclxuLy8gMi8xLzMsIHNpbmNlIGl0IGlzIG5vdCBhIGRlc2NlbmRhbnQgb2YgaXQuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJlbmRlcmFibGVUaWxlczogQXJyYXk8VGlsZT4sIGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICBjb25zdCBzb3J0ZWRSZW5kZXJhYmxlcyA9IHJlbmRlcmFibGVUaWxlcy5zb3J0KChhLCBiKSA9PiB7IHJldHVybiBhLnRpbGVJRC5pc0xlc3NUaGFuKGIudGlsZUlEKSA/IC0xIDogYi50aWxlSUQuaXNMZXNzVGhhbihhLnRpbGVJRCkgPyAxIDogMDsgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJlbmRlcmFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1hc2sgPSB7fTtcbiAgICAgICAgY29uc3QgdGlsZSA9ICBzb3J0ZWRSZW5kZXJhYmxlc1tpXTtcbiAgICAgICAgY29uc3QgY2hpbGRBcnJheSA9IHNvcnRlZFJlbmRlcmFibGVzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgLy8gVHJ5IHRvIGFkZCBhbGwgcmVtYWluaW5nIGlkcyBhcyBjaGlsZHJlbi4gV2Ugc29ydGVkIHRoZSB0aWxlIGxpc3RcbiAgICAgICAgLy8gYnkgeiBlYXJsaWVyLCBzbyBhbGwgcHJlY2VkaW5nIGl0ZW1zIGNhbm5vdCBiZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudFxuICAgICAgICAvLyB0aWxlLiBXZSBhbHNvIGNvbXB1dGUgdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBuZXh0IHdyYXAsIGJlY2F1c2UgaXRlbXMgb2YgdGhlIG5leHQgd3JhcFxuICAgICAgICAvLyBjYW4gbmV2ZXIgYmUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgd3JhcC5cblxuICAgICAgICBjb21wdXRlVGlsZU1hc2tzKHRpbGUudGlsZUlELndyYXBwZWQoKSwgdGlsZS50aWxlSUQsIGNoaWxkQXJyYXksIG5ldyBPdmVyc2NhbGVkVGlsZUlEKDAsIHRpbGUudGlsZUlELndyYXAgKyAxLCAwLCAwLCAwKSwgbWFzayk7XG4gICAgICAgIHRpbGUuc2V0TWFzayhtYXNrLCBjb250ZXh0KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVUaWxlTWFza3Mocm9vdFRpbGU6IE92ZXJzY2FsZWRUaWxlSUQsIHJlZjogT3ZlcnNjYWxlZFRpbGVJRCwgY2hpbGRBcnJheTogQXJyYXk8VGlsZT4sIGxvd2VyQm91bmQ6IE92ZXJzY2FsZWRUaWxlSUQsIG1hc2s6IE1hc2spIHtcbiAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIG9yIGFueSBvZiBpdHMgY2hpbGRyZW4gaXMgZm91bmQgaW4gdGhlIGxpc3QsIHdlIG5lZWQgdG8gcmVjdXJzZS5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGRUaWxlID0gY2hpbGRBcnJheVtpXTtcbiAgICAgICAgLy8gY2hpbGRUaWxlIGlzIGZyb20gYSBsYXJnZXIgd3JhcCB0aGFuIHRoZSByb290VGlsZSBzbyBpdCBjYW5ub3QgYmUgYSBjaGlsZCB0aWxlXG4gICAgICAgIGlmIChsb3dlckJvdW5kLmlzTGVzc1RoYW4oY2hpbGRUaWxlLnRpbGVJRCkpIGJyZWFrO1xuICAgICAgICAvLyBUaGUgY3VycmVudCB0aWxlIGlzIG1hc2tlZCBvdXQsIHNvIHdlIGRvbid0IG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhlIG1hc2sgc2V0LlxuICAgICAgICBpZiAocmVmLmtleSA9PT0gY2hpbGRUaWxlLnRpbGVJRC5rZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChjaGlsZFRpbGUudGlsZUlELmlzQ2hpbGRPZihyZWYpKSB7XG4gICAgICAgICAgICAvLyBUaGVyZSdzIGF0IGxlYXN0IG9uZSBjaGlsZCB0aWxlIHRoYXQgaXMgbWFza2VkIG91dCwgc28gcmVjdXJzaXZlbHkgZGVzY2VuZFxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSByZWYuY2hpbGRyZW4oSW5maW5pdHkpO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5bal07XG4gICAgICAgICAgICAgICAgY29tcHV0ZVRpbGVNYXNrcyhyb290VGlsZSwgY2hpbGQsIGNoaWxkQXJyYXkuc2xpY2UoaSksIGxvd2VyQm91bmQsIG1hc2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFdlIGNvdWxkbid0IGZpbmQgYSBjaGlsZCwgc28gaXQncyBkZWZpbml0ZWx5IGEgbWFza2VkIHBhcnQuXG4gICAgLy8gQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByb290IHRpbGUgSUQgYW5kIHRoZSByZWZlcmVuY2UgdGlsZSBJRCwgc2luY2UgVGlsZU1hc2tcbiAgICAvLyBlbGVtZW50cyBhcmUgYWx3YXlzIHJlbGF0aXZlIChzZWUgYmVsb3cgZm9yIGV4cGxhbmF0aW9uKS5cbiAgICBjb25zdCBkaWZmWiA9IHJlZi5vdmVyc2NhbGVkWiAtIHJvb3RUaWxlLm92ZXJzY2FsZWRaO1xuICAgIGNvbnN0IG1hc2tUaWxlSWQgPSBuZXcgQ2Fub25pY2FsVGlsZUlEKGRpZmZaLCByZWYuY2Fub25pY2FsLnggLSAocm9vdFRpbGUuY2Fub25pY2FsLnggPDwgZGlmZlopLCByZWYuY2Fub25pY2FsLnkgLSAocm9vdFRpbGUuY2Fub25pY2FsLnkgPDwgZGlmZlopKTtcbiAgICBtYXNrW21hc2tUaWxlSWQua2V5XSA9IG1hc2tbbWFza1RpbGVJZC5rZXldIHx8IG1hc2tUaWxlSWQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtjb2xsaXNpb25Vbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vY29sbGlzaW9uX3Byb2dyYW0nO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3Q29sbGlzaW9uRGVidWc7XG5cbmZ1bmN0aW9uIGRyYXdDb2xsaXNpb25EZWJ1Z0dlb21ldHJ5KHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IFN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4sIGRyYXdDaXJjbGVzOiBib29sZWFuLFxuICAgIHRyYW5zbGF0ZTogW251bWJlciwgbnVtYmVyXSwgdHJhbnNsYXRlQW5jaG9yOiAnbWFwJyB8ICd2aWV3cG9ydCcsIGlzVGV4dDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IHByb2dyYW0gPSBkcmF3Q2lyY2xlcyA/IHBhaW50ZXIudXNlUHJvZ3JhbSgnY29sbGlzaW9uQ2lyY2xlJykgOiBwYWludGVyLnVzZVByb2dyYW0oJ2NvbGxpc2lvbkJveCcpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29vcmQgPSBjb29yZHNbaV07XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiA/U3ltYm9sQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBidWZmZXJzID0gZHJhd0NpcmNsZXMgPyAoaXNUZXh0ID8gYnVja2V0LnRleHRDb2xsaXNpb25DaXJjbGUgOiBidWNrZXQuaWNvbkNvbGxpc2lvbkNpcmNsZSkgOiAoaXNUZXh0ID8gYnVja2V0LnRleHRDb2xsaXNpb25Cb3ggOiBidWNrZXQuaWNvbkNvbGxpc2lvbkJveCk7XG4gICAgICAgIGlmICghYnVmZmVycykgY29udGludWU7XG4gICAgICAgIGxldCBwb3NNYXRyaXggPSBjb29yZC5wb3NNYXRyaXg7XG4gICAgICAgIGlmICh0cmFuc2xhdGVbMF0gIT09IDAgfHwgdHJhbnNsYXRlWzFdICE9PSAwKSB7XG4gICAgICAgICAgICBwb3NNYXRyaXggPSBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChjb29yZC5wb3NNYXRyaXgsIHRpbGUsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlQW5jaG9yKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZHJhd0NpcmNsZXMgPyBnbC5UUklBTkdMRVMgOiBnbC5MSU5FUyxcbiAgICAgICAgICAgIERlcHRoTW9kZS5kaXNhYmxlZCwgU3RlbmNpbE1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxcbiAgICAgICAgICAgIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIGNvbGxpc2lvblVuaWZvcm1WYWx1ZXMoXG4gICAgICAgICAgICAgICAgcG9zTWF0cml4LFxuICAgICAgICAgICAgICAgIHBhaW50ZXIudHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIHRpbGUpLFxuICAgICAgICAgICAgbGF5ZXIuaWQsIGJ1ZmZlcnMubGF5b3V0VmVydGV4QnVmZmVyLCBidWZmZXJzLmluZGV4QnVmZmVyLFxuICAgICAgICAgICAgYnVmZmVycy5zZWdtZW50cywgbnVsbCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSwgbnVsbCwgbnVsbCxcbiAgICAgICAgICAgIGJ1ZmZlcnMuY29sbGlzaW9uVmVydGV4QnVmZmVyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdDb2xsaXNpb25EZWJ1ZyhwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+LCB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sIHRyYW5zbGF0ZUFuY2hvcjogJ21hcCcgfCAndmlld3BvcnQnLCBpc1RleHQ6IGJvb2xlYW4pIHtcbiAgICBkcmF3Q29sbGlzaW9uRGVidWdHZW9tZXRyeShwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgZmFsc2UsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlQW5jaG9yLCBpc1RleHQpO1xuICAgIGRyYXdDb2xsaXNpb25EZWJ1Z0dlb21ldHJ5KHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCB0cnVlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvciwgaXNUZXh0KTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBkcmF3Q29sbGlzaW9uRGVidWcgZnJvbSAnLi9kcmF3X2NvbGxpc2lvbl9kZWJ1Zyc7XG5cbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCAqIGFzIHN5bWJvbFByb2plY3Rpb24gZnJvbSAnLi4vc3ltYm9sL3Byb2plY3Rpb24nO1xuaW1wb3J0ICogYXMgc3ltYm9sU2l6ZSBmcm9tICcuLi9zeW1ib2wvc3ltYm9sX3NpemUnO1xuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuY29uc3QgaWRlbnRpdHlNYXQ0ID0gbWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSk7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7YWRkRHluYW1pY0F0dHJpYnV0ZXN9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuXG5pbXBvcnQge2dldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGV9IGZyb20gJy4uL3N5bWJvbC9zaGFwaW5nJztcbmltcG9ydCBPTkVfRU0gZnJvbSAnLi4vc3ltYm9sL29uZV9lbSc7XG5pbXBvcnQge2V2YWx1YXRlVmFyaWFibGVPZmZzZXR9IGZyb20gJy4uL3N5bWJvbC9zeW1ib2xfbGF5b3V0JztcblxuaW1wb3J0IHtcbiAgICBzeW1ib2xJY29uVW5pZm9ybVZhbHVlcyxcbiAgICBzeW1ib2xTREZVbmlmb3JtVmFsdWVzXG59IGZyb20gJy4vcHJvZ3JhbS9zeW1ib2xfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgU3ltYm9sU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgU3ltYm9sQnVja2V0LCB7U3ltYm9sQnVmZmVyc30gZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBUZXh0dXJlIGZyb20gJy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlc30gZnJvbSAnLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUge1N5bWJvbFNERlVuaWZvcm1zVHlwZX0gZnJvbSAnLi4vcmVuZGVyL3Byb2dyYW0vc3ltYm9sX3Byb2dyYW0nO1xuaW1wb3J0IHR5cGUge0Nyb3NzVGlsZUlELCBWYXJpYWJsZU9mZnNldH0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdTeW1ib2xzO1xuXG50eXBlIFN5bWJvbFRpbGVSZW5kZXJTdGF0ZSA9IHtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcixcbiAgICBzb3J0S2V5OiBudW1iZXIsXG4gICAgc3RhdGU6IHtcbiAgICAgICAgcHJvZ3JhbTogYW55LFxuICAgICAgICBidWZmZXJzOiBTeW1ib2xCdWZmZXJzLFxuICAgICAgICB1bmlmb3JtVmFsdWVzOiBhbnksXG4gICAgICAgIGF0bGFzVGV4dHVyZTogVGV4dHVyZSxcbiAgICAgICAgYXRsYXNJbnRlcnBvbGF0aW9uOiBhbnksXG4gICAgICAgIGlzU0RGOiBib29sZWFuLFxuICAgICAgICBoYXNIYWxvOiBib29sZWFuXG4gICAgfVxufTtcblxuZnVuY3Rpb24gZHJhd1N5bWJvbHMocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogU3ltYm9sU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgdmFyaWFibGVPZmZzZXRzOiB7W0Nyb3NzVGlsZUlEXTogVmFyaWFibGVPZmZzZXR9KSB7XG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gJ3RyYW5zbHVjZW50JykgcmV0dXJuO1xuXG4gICAgLy8gRGlzYWJsZSB0aGUgc3RlbmNpbCB0ZXN0IHNvIHRoYXQgbGFiZWxzIGFyZW4ndCBjbGlwcGVkIHRvIHRpbGUgYm91bmRhcmllcy5cbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgIGNvbnN0IHZhcmlhYmxlUGxhY2VtZW50ID0gbGF5ZXIubGF5b3V0LmdldCgndGV4dC12YXJpYWJsZS1hbmNob3InKTtcblxuICAgIC8vQ29tcHV0ZSB2YXJpYWJsZS1vZmZzZXRzIGJlZm9yZSBwYWludGluZyBzaW5jZSBpY29ucyBhbmQgdGV4dCBkYXRhIHBvc2l0aW9uaW5nXG4gICAgLy9kZXBlbmQgb24gZWFjaCBvdGhlciBpbiB0aGlzIGNhc2UuXG4gICAgaWYgKHZhcmlhYmxlUGxhY2VtZW50KSB7XG4gICAgICAgIHVwZGF0ZVZhcmlhYmxlQW5jaG9ycyhjb29yZHMsIHBhaW50ZXIsIGxheWVyLCBzb3VyY2VDYWNoZSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgdmFyaWFibGVPZmZzZXRzXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGxheWVyLnBhaW50LmdldCgnaWNvbi1vcGFjaXR5JykuY29uc3RhbnRPcigxKSAhPT0gMCkge1xuICAgICAgICBkcmF3TGF5ZXJTeW1ib2xzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBmYWxzZSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgnaWNvbi10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgnaWNvbi10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXJvdGF0aW9uLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1waXRjaC1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ2ljb24ta2VlcC11cHJpZ2h0JyksXG4gICAgICAgICAgICBzdGVuY2lsTW9kZSwgY29sb3JNb2RlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGxheWVyLnBhaW50LmdldCgndGV4dC1vcGFjaXR5JykuY29uc3RhbnRPcigxKSAhPT0gMCkge1xuICAgICAgICBkcmF3TGF5ZXJTeW1ib2xzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCB0cnVlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCd0ZXh0LXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCd0ZXh0LXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1rZWVwLXVwcmlnaHQnKSxcbiAgICAgICAgICAgIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlQ2FjaGUubWFwLnNob3dDb2xsaXNpb25Cb3hlcykge1xuICAgICAgICBkcmF3Q29sbGlzaW9uRGVidWcocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGxheWVyLnBhaW50LmdldCgndGV4dC10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgndGV4dC10cmFuc2xhdGUtYW5jaG9yJyksIHRydWUpO1xuICAgICAgICBkcmF3Q29sbGlzaW9uRGVidWcocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGxheWVyLnBhaW50LmdldCgnaWNvbi10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgnaWNvbi10cmFuc2xhdGUtYW5jaG9yJyksIGZhbHNlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVZhcmlhYmxlUmVuZGVyU2hpZnQoYW5jaG9yLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0T2Zmc2V0LCB0ZXh0Qm94U2NhbGUsIHJlbmRlclRleHRTaXplKTogUG9pbnQge1xuICAgIGNvbnN0IHtob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ259ID0gZ2V0QW5jaG9yQWxpZ25tZW50KGFuY2hvcik7XG4gICAgY29uc3Qgc2hpZnRYID0gLShob3Jpem9udGFsQWxpZ24gLSAwLjUpICogd2lkdGg7XG4gICAgY29uc3Qgc2hpZnRZID0gLSh2ZXJ0aWNhbEFsaWduIC0gMC41KSAqIGhlaWdodDtcbiAgICBjb25zdCB2YXJpYWJsZU9mZnNldCA9IGV2YWx1YXRlVmFyaWFibGVPZmZzZXQoYW5jaG9yLCB0ZXh0T2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICAoc2hpZnRYIC8gdGV4dEJveFNjYWxlICsgdmFyaWFibGVPZmZzZXRbMF0pICogcmVuZGVyVGV4dFNpemUsXG4gICAgICAgIChzaGlmdFkgLyB0ZXh0Qm94U2NhbGUgKyB2YXJpYWJsZU9mZnNldFsxXSkgKiByZW5kZXJUZXh0U2l6ZVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVZhcmlhYmxlQW5jaG9ycyhjb29yZHMsIHBhaW50ZXIsIGxheWVyLCBzb3VyY2VDYWNoZSwgcm90YXRpb25BbGlnbm1lbnQsIHBpdGNoQWxpZ25tZW50LCB2YXJpYWJsZU9mZnNldHMpIHtcbiAgICBjb25zdCB0ciA9IHBhaW50ZXIudHJhbnNmb3JtO1xuICAgIGNvbnN0IHJvdGF0ZVdpdGhNYXAgPSByb3RhdGlvbkFsaWdubWVudCA9PT0gJ21hcCc7XG4gICAgY29uc3QgcGl0Y2hXaXRoTWFwID0gcGl0Y2hBbGlnbm1lbnQgPT09ICdtYXAnO1xuXG4gICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBjb25zdCBidWNrZXQ6IFN5bWJvbEJ1Y2tldCA9ICh0aWxlLmdldEJ1Y2tldChsYXllcik6IGFueSk7XG4gICAgICAgIGlmICghYnVja2V0IHx8ICFidWNrZXQudGV4dCB8fCAhYnVja2V0LnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBzaXplRGF0YSA9IGJ1Y2tldC50ZXh0U2l6ZURhdGE7XG4gICAgICAgIGNvbnN0IHNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20oc2l6ZURhdGEsIHRyLnpvb20pO1xuXG4gICAgICAgIGNvbnN0IHBpeGVsVG9UaWxlU2NhbGUgPSBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCBwYWludGVyLnRyYW5zZm9ybS56b29tKTtcbiAgICAgICAgY29uc3QgbGFiZWxQbGFuZU1hdHJpeCA9IHN5bWJvbFByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeChjb29yZC5wb3NNYXRyaXgsIHBpdGNoV2l0aE1hcCwgcm90YXRlV2l0aE1hcCwgcGFpbnRlci50cmFuc2Zvcm0sIHBpeGVsVG9UaWxlU2NhbGUpO1xuICAgICAgICBjb25zdCB1cGRhdGVUZXh0Rml0SWNvbiA9IGxheWVyLmxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQnKSAhPT0gJ25vbmUnICYmICBidWNrZXQuaGFzSWNvbkRhdGEoKTtcblxuICAgICAgICBpZiAoc2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgdGlsZVNjYWxlID0gTWF0aC5wb3coMiwgdHIuem9vbSAtIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICAgICAgICAgIHVwZGF0ZVZhcmlhYmxlQW5jaG9yc0ZvckJ1Y2tldChidWNrZXQsIHJvdGF0ZVdpdGhNYXAsIHBpdGNoV2l0aE1hcCwgdmFyaWFibGVPZmZzZXRzLCBzeW1ib2xTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyLCBsYWJlbFBsYW5lTWF0cml4LCBjb29yZC5wb3NNYXRyaXgsIHRpbGVTY2FsZSwgc2l6ZSwgdXBkYXRlVGV4dEZpdEljb24pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVWYXJpYWJsZUFuY2hvcnNGb3JCdWNrZXQoYnVja2V0LCByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHZhcmlhYmxlT2Zmc2V0cywgc3ltYm9sU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0sIGxhYmVsUGxhbmVNYXRyaXgsIHBvc01hdHJpeCwgdGlsZVNjYWxlLCBzaXplLCB1cGRhdGVUZXh0Rml0SWNvbikge1xuICAgIGNvbnN0IHBsYWNlZFN5bWJvbHMgPSBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheTtcbiAgICBjb25zdCBkeW5hbWljVGV4dExheW91dFZlcnRleEFycmF5ID0gYnVja2V0LnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5O1xuICAgIGNvbnN0IGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXkgPSBidWNrZXQuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk7XG4gICAgY29uc3QgcGxhY2VkVGV4dFNoaWZ0cyA9IHt9O1xuXG4gICAgZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgcGxhY2VkU3ltYm9scy5sZW5ndGg7IHMrKykge1xuICAgICAgICBjb25zdCBzeW1ib2w6IGFueSA9IHBsYWNlZFN5bWJvbHMuZ2V0KHMpO1xuICAgICAgICBjb25zdCBza2lwT3JpZW50YXRpb24gPSBidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiAhc3ltYm9sLnBsYWNlZE9yaWVudGF0aW9uO1xuICAgICAgICBjb25zdCB2YXJpYWJsZU9mZnNldCA9ICghc3ltYm9sLmhpZGRlbiAmJiBzeW1ib2wuY3Jvc3NUaWxlSUQgJiYgIXNraXBPcmllbnRhdGlvbikgPyB2YXJpYWJsZU9mZnNldHNbc3ltYm9sLmNyb3NzVGlsZUlEXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKCF2YXJpYWJsZU9mZnNldCkge1xuICAgICAgICAgICAgLy8gVGhlc2Ugc3ltYm9scyBhcmUgZnJvbSBhIGp1c3RpZmljYXRpb24gdGhhdCBpcyBub3QgYmVpbmcgdXNlZCwgb3IgYSBsYWJlbCB0aGF0IHdhc24ndCBwbGFjZWRcbiAgICAgICAgICAgIC8vIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhlIGV4dHJhIG1hdGggdG8gZmlndXJlIG91dCB3aGF0IGluY3JlbWVudGFsIHNoaWZ0IHRvIGFwcGx5LlxuICAgICAgICAgICAgc3ltYm9sUHJvamVjdGlvbi5oaWRlR2x5cGhzKHN5bWJvbC5udW1HbHlwaHMsIGR5bmFtaWNUZXh0TGF5b3V0VmVydGV4QXJyYXkpO1xuICAgICAgICB9IGVsc2UgIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVBbmNob3IgPSBuZXcgUG9pbnQoc3ltYm9sLmFuY2hvclgsIHN5bWJvbC5hbmNob3JZKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2plY3RlZEFuY2hvciA9IHN5bWJvbFByb2plY3Rpb24ucHJvamVjdCh0aWxlQW5jaG9yLCBwaXRjaFdpdGhNYXAgPyBwb3NNYXRyaXggOiBsYWJlbFBsYW5lTWF0cml4KTtcbiAgICAgICAgICAgIGNvbnN0IHBlcnNwZWN0aXZlUmF0aW8gPSAwLjUgKyAwLjUgKiAodHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgLyBwcm9qZWN0ZWRBbmNob3Iuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKTtcbiAgICAgICAgICAgIGxldCByZW5kZXJUZXh0U2l6ZSA9IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShidWNrZXQudGV4dFNpemVEYXRhLCBzaXplLCBzeW1ib2wpICogcGVyc3BlY3RpdmVSYXRpbyAvIE9ORV9FTTtcbiAgICAgICAgICAgIGlmIChwaXRjaFdpdGhNYXApIHtcbiAgICAgICAgICAgICAgICAvLyBHbyBmcm9tIHNpemUgaW4gcGl4ZWxzIHRvIGVxdWl2YWxlbnQgc2l6ZSBpbiB0aWxlIHVuaXRzXG4gICAgICAgICAgICAgICAgcmVuZGVyVGV4dFNpemUgKj0gYnVja2V0LnRpbGVQaXhlbFJhdGlvIC8gdGlsZVNjYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgYW5jaG9yLCB0ZXh0T2Zmc2V0LCB0ZXh0Qm94U2NhbGV9ID0gdmFyaWFibGVPZmZzZXQ7XG5cbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0ID0gY2FsY3VsYXRlVmFyaWFibGVSZW5kZXJTaGlmdChcbiAgICAgICAgICAgICAgICBhbmNob3IsIHdpZHRoLCBoZWlnaHQsIHRleHRPZmZzZXQsIHRleHRCb3hTY2FsZSwgcmVuZGVyVGV4dFNpemUpO1xuXG4gICAgICAgICAgICAvLyBVc3VhbCBjYXNlIGlzIHRoYXQgd2UgdGFrZSB0aGUgcHJvamVjdGVkIGFuY2hvciBhbmQgYWRkIHRoZSBwaXhlbC1iYXNlZCBzaGlmdFxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlZCBhYm92ZS4gSW4gdGhlIChzb21ld2hhdCB3ZWlyZCkgY2FzZSBvZiBwaXRjaC1hbGlnbmVkIHRleHQsIHdlIGFkZCBhbiBlcXVpdmFsZW50XG4gICAgICAgICAgICAvLyB0aWxlLXVuaXQgYmFzZWQgc2hpZnQgdG8gdGhlIGFuY2hvciBiZWZvcmUgcHJvamVjdGluZyB0byB0aGUgbGFiZWwgcGxhbmUuXG4gICAgICAgICAgICBjb25zdCBzaGlmdGVkQW5jaG9yID0gcGl0Y2hXaXRoTWFwID9cbiAgICAgICAgICAgICAgICBzeW1ib2xQcm9qZWN0aW9uLnByb2plY3QodGlsZUFuY2hvci5hZGQoc2hpZnQpLCBsYWJlbFBsYW5lTWF0cml4KS5wb2ludCA6XG4gICAgICAgICAgICAgICAgcHJvamVjdGVkQW5jaG9yLnBvaW50LmFkZChyb3RhdGVXaXRoTWFwID9cbiAgICAgICAgICAgICAgICAgICAgc2hpZnQucm90YXRlKC10cmFuc2Zvcm0uYW5nbGUpIDpcbiAgICAgICAgICAgICAgICAgICAgc2hpZnQpO1xuXG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2wucGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSA/IE1hdGguUEkgLyAyIDogMDtcbiAgICAgICAgICAgIGZvciAobGV0IGcgPSAwOyBnIDwgc3ltYm9sLm51bUdseXBoczsgZysrKSB7XG4gICAgICAgICAgICAgICAgYWRkRHluYW1pY0F0dHJpYnV0ZXMoZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSwgc2hpZnRlZEFuY2hvciwgYW5nbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9Pbmx5IG9mZnNldCBob3Jpem9udGFsIHRleHQgaWNvbnNcbiAgICAgICAgICAgIGlmICh1cGRhdGVUZXh0Rml0SWNvbiAmJiBzeW1ib2wuYXNzb2NpYXRlZEljb25JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VkVGV4dFNoaWZ0c1tzeW1ib2wuYXNzb2NpYXRlZEljb25JbmRleF0gPSB7c2hpZnRlZEFuY2hvciwgYW5nbGV9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVRleHRGaXRJY29uKSB7XG4gICAgICAgIGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcGxhY2VkSWNvbnMgPSBidWNrZXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZWRJY29ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGxhY2VkSWNvbiA9IHBsYWNlZEljb25zLmdldChpKTtcbiAgICAgICAgICAgIGlmIChwbGFjZWRJY29uLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyhwbGFjZWRJY29uLm51bUdseXBocywgZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoaWZ0ID0gcGxhY2VkVGV4dFNoaWZ0c1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXNoaWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyhwbGFjZWRJY29uLm51bUdseXBocywgZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZyA9IDA7IGcgPCBwbGFjZWRJY29uLm51bUdseXBoczsgZysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGREeW5hbWljQXR0cmlidXRlcyhkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5LCBzaGlmdC5zaGlmdGVkQW5jaG9yLCBzaGlmdC5hbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnVja2V0Lmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgIH1cbiAgICBidWNrZXQudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSk7XG59XG5cbmZ1bmN0aW9uIGRyYXdMYXllclN5bWJvbHMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGlzVGV4dCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uQWxpZ25tZW50LCBwaXRjaEFsaWdubWVudCwga2VlcFVwcmlnaHQsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUpIHtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IHRyID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gcm90YXRpb25BbGlnbm1lbnQgPT09ICdtYXAnO1xuICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IHBpdGNoQWxpZ25tZW50ID09PSAnbWFwJztcbiAgICBjb25zdCBhbG9uZ0xpbmUgPSByb3RhdGVXaXRoTWFwICYmIGxheWVyLmxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JztcbiAgICAvLyBMaW5lIGxhYmVsIHJvdGF0aW9uIGhhcHBlbnMgaW4gYHVwZGF0ZUxpbmVMYWJlbHNgXG4gICAgLy8gUGl0Y2hlZCBwb2ludCBsYWJlbHMgYXJlIGF1dG9tYXRpY2FsbHkgcm90YXRlZCBieSB0aGUgbGFiZWxQbGFuZU1hdHJpeCBwcm9qZWN0aW9uXG4gICAgLy8gVW5waXRjaGVkIHBvaW50IGxhYmVscyBuZWVkIHRvIGhhdmUgdGhlaXIgcm90YXRpb24gYXBwbGllZCBhZnRlciBwcm9qZWN0aW9uXG4gICAgY29uc3Qgcm90YXRlSW5TaGFkZXIgPSByb3RhdGVXaXRoTWFwICYmICFwaXRjaFdpdGhNYXAgJiYgIWFsb25nTGluZTtcblxuICAgIGNvbnN0IHNvcnRGZWF0dXJlc0J5S2V5ID0gbGF5ZXIubGF5b3V0LmdldCgnc3ltYm9sLXNvcnQta2V5JykuY29uc3RhbnRPcigxKSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuXG4gICAgbGV0IHByb2dyYW07XG4gICAgbGV0IHNpemU7XG4gICAgY29uc3QgdmFyaWFibGVQbGFjZW1lbnQgPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpO1xuXG4gICAgY29uc3QgdGlsZVJlbmRlclN0YXRlOiBBcnJheTxTeW1ib2xUaWxlUmVuZGVyU3RhdGU+ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogU3ltYm9sQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBidWZmZXJzID0gaXNUZXh0ID8gYnVja2V0LnRleHQgOiBidWNrZXQuaWNvbjtcbiAgICAgICAgaWYgKCFidWZmZXJzIHx8ICFidWZmZXJzLnNlZ21lbnRzLmdldCgpLmxlbmd0aCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Db25maWd1cmF0aW9uID0gYnVmZmVycy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcblxuICAgICAgICBjb25zdCBpc1NERiA9IGlzVGV4dCB8fCBidWNrZXQuc2RmSWNvbnM7XG5cbiAgICAgICAgY29uc3Qgc2l6ZURhdGEgPSBpc1RleHQgPyBidWNrZXQudGV4dFNpemVEYXRhIDogYnVja2V0Lmljb25TaXplRGF0YTtcblxuICAgICAgICBpZiAoIXByb2dyYW0pIHtcbiAgICAgICAgICAgIHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oaXNTREYgPyAnc3ltYm9sU0RGJyA6ICdzeW1ib2xJY29uJywgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgc2l6ZSA9IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yWm9vbShzaXplRGF0YSwgdHIuem9vbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBsZXQgdGV4U2l6ZTogW251bWJlciwgbnVtYmVyXTtcbiAgICAgICAgbGV0IGF0bGFzVGV4dHVyZTtcbiAgICAgICAgbGV0IGF0bGFzSW50ZXJwb2xhdGlvbjtcbiAgICAgICAgaWYgKGlzVGV4dCkge1xuICAgICAgICAgICAgYXRsYXNUZXh0dXJlID0gdGlsZS5nbHlwaEF0bGFzVGV4dHVyZTtcbiAgICAgICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbiA9IGdsLkxJTkVBUjtcbiAgICAgICAgICAgIHRleFNpemUgPSB0aWxlLmdseXBoQXRsYXNUZXh0dXJlLnNpemU7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGljb25TY2FsZWQgPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXNpemUnKS5jb25zdGFudE9yKDApICE9PSAxIHx8IGJ1Y2tldC5pY29uc05lZWRMaW5lYXI7XG4gICAgICAgICAgICBjb25zdCBpY29uVHJhbnNmb3JtZWQgPSBwaXRjaFdpdGhNYXAgfHwgdHIucGl0Y2ggIT09IDA7XG5cbiAgICAgICAgICAgIGF0bGFzVGV4dHVyZSA9IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmU7XG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb24gPSBpc1NERiB8fCBwYWludGVyLm9wdGlvbnMucm90YXRpbmcgfHwgcGFpbnRlci5vcHRpb25zLnpvb21pbmcgfHwgaWNvblNjYWxlZCB8fCBpY29uVHJhbnNmb3JtZWQgP1xuICAgICAgICAgICAgICAgIGdsLkxJTkVBUiA6XG4gICAgICAgICAgICAgICAgZ2wuTkVBUkVTVDtcbiAgICAgICAgICAgIHRleFNpemUgPSB0aWxlLmltYWdlQXRsYXNUZXh0dXJlLnNpemU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzID0gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUGxhbmVNYXRyaXggPSBzeW1ib2xQcm9qZWN0aW9uLmdldExhYmVsUGxhbmVNYXRyaXgoY29vcmQucG9zTWF0cml4LCBwaXRjaFdpdGhNYXAsIHJvdGF0ZVdpdGhNYXAsIHBhaW50ZXIudHJhbnNmb3JtLCBzKTtcbiAgICAgICAgY29uc3QgZ2xDb29yZE1hdHJpeCA9IHN5bWJvbFByb2plY3Rpb24uZ2V0R2xDb29yZE1hdHJpeChjb29yZC5wb3NNYXRyaXgsIHBpdGNoV2l0aE1hcCwgcm90YXRlV2l0aE1hcCwgcGFpbnRlci50cmFuc2Zvcm0sIHMpO1xuXG4gICAgICAgIGNvbnN0IGhhc1ZhcmlhYmxlQW5jaG9ycyA9IHZhcmlhYmxlUGxhY2VtZW50ICYmIGJ1Y2tldC5oYXNUZXh0RGF0YSgpO1xuICAgICAgICBjb25zdCB1cGRhdGVUZXh0Rml0SWNvbiA9IGxheWVyLmxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQnKSAhPT0gJ25vbmUnICYmXG4gICAgICAgICAgICBoYXNWYXJpYWJsZUFuY2hvcnMgJiZcbiAgICAgICAgICAgIGJ1Y2tldC5oYXNJY29uRGF0YSgpO1xuXG4gICAgICAgIGlmIChhbG9uZ0xpbmUpIHtcbiAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24udXBkYXRlTGluZUxhYmVscyhidWNrZXQsIGNvb3JkLnBvc01hdHJpeCwgcGFpbnRlciwgaXNUZXh0LCBsYWJlbFBsYW5lTWF0cml4LCBnbENvb3JkTWF0cml4LCBwaXRjaFdpdGhNYXAsIGtlZXBVcHJpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IHBhaW50ZXIudHJhbnNsYXRlUG9zTWF0cml4KGNvb3JkLnBvc01hdHJpeCwgdGlsZSwgdHJhbnNsYXRlLCB0cmFuc2xhdGVBbmNob3IpLFxuICAgICAgICAgICAgdUxhYmVsUGxhbmVNYXRyaXggPSAoYWxvbmdMaW5lIHx8IChpc1RleHQgJiYgdmFyaWFibGVQbGFjZW1lbnQpIHx8IHVwZGF0ZVRleHRGaXRJY29uKSA/IGlkZW50aXR5TWF0NCA6IGxhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICB1Z2xDb29yZE1hdHJpeCA9IHBhaW50ZXIudHJhbnNsYXRlUG9zTWF0cml4KGdsQ29vcmRNYXRyaXgsIHRpbGUsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlQW5jaG9yLCB0cnVlKTtcblxuICAgICAgICBjb25zdCBoYXNIYWxvID0gaXNTREYgJiYgbGF5ZXIucGFpbnQuZ2V0KGlzVGV4dCA/ICd0ZXh0LWhhbG8td2lkdGgnIDogJ2ljb24taGFsby13aWR0aCcpLmNvbnN0YW50T3IoMSkgIT09IDA7XG5cbiAgICAgICAgbGV0IHVuaWZvcm1WYWx1ZXM7XG4gICAgICAgIGlmIChpc1NERikge1xuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IHN5bWJvbFNERlVuaWZvcm1WYWx1ZXMoc2l6ZURhdGEua2luZCxcbiAgICAgICAgICAgICAgICBzaXplLCByb3RhdGVJblNoYWRlciwgcGl0Y2hXaXRoTWFwLCBwYWludGVyLCBtYXRyaXgsXG4gICAgICAgICAgICAgICAgdUxhYmVsUGxhbmVNYXRyaXgsIHVnbENvb3JkTWF0cml4LCBpc1RleHQsIHRleFNpemUsIHRydWUpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzID0gc3ltYm9sSWNvblVuaWZvcm1WYWx1ZXMoc2l6ZURhdGEua2luZCxcbiAgICAgICAgICAgICAgICBzaXplLCByb3RhdGVJblNoYWRlciwgcGl0Y2hXaXRoTWFwLCBwYWludGVyLCBtYXRyaXgsXG4gICAgICAgICAgICAgICAgdUxhYmVsUGxhbmVNYXRyaXgsIHVnbENvb3JkTWF0cml4LCBpc1RleHQsIHRleFNpemUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICBwcm9ncmFtLFxuICAgICAgICAgICAgYnVmZmVycyxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsXG4gICAgICAgICAgICBhdGxhc1RleHR1cmUsXG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb24sXG4gICAgICAgICAgICBpc1NERixcbiAgICAgICAgICAgIGhhc0hhbG9cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNlZ21lbnRzID0gYnVmZmVycy5zZWdtZW50cy5nZXQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvbGRTZWdtZW50cykge1xuICAgICAgICAgICAgICAgIHRpbGVSZW5kZXJTdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHM6IG5ldyBTZWdtZW50VmVjdG9yKFtzZWdtZW50XSksXG4gICAgICAgICAgICAgICAgICAgIHNvcnRLZXk6ICgoc2VnbWVudC5zb3J0S2V5OiBhbnkpOiBudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZVJlbmRlclN0YXRlLnB1c2goe1xuICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBidWZmZXJzLnNlZ21lbnRzLFxuICAgICAgICAgICAgICAgIHNvcnRLZXk6IDAsXG4gICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgIHRpbGVSZW5kZXJTdGF0ZS5zb3J0KChhLCBiKSA9PiBhLnNvcnRLZXkgLSBiLnNvcnRLZXkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VnbWVudFN0YXRlIG9mIHRpbGVSZW5kZXJTdGF0ZSkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHNlZ21lbnRTdGF0ZS5zdGF0ZTtcblxuICAgICAgICBzdGF0ZS5hdGxhc1RleHR1cmUuYmluZChzdGF0ZS5hdGxhc0ludGVycG9sYXRpb24sIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gICAgICAgIGlmIChzdGF0ZS5pc1NERikge1xuICAgICAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9ICgoc3RhdGUudW5pZm9ybVZhbHVlczogYW55KTogVW5pZm9ybVZhbHVlczxTeW1ib2xTREZVbmlmb3Jtc1R5cGU+KTtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5oYXNIYWxvKSB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlc1sndV9pc19oYWxvJ10gPSAxO1xuICAgICAgICAgICAgICAgIGRyYXdTeW1ib2xFbGVtZW50cyhzdGF0ZS5idWZmZXJzLCBzZWdtZW50U3RhdGUuc2VnbWVudHMsIGxheWVyLCBwYWludGVyLCBzdGF0ZS5wcm9ncmFtLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIHVuaWZvcm1WYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlc1sndV9pc19oYWxvJ10gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGRyYXdTeW1ib2xFbGVtZW50cyhzdGF0ZS5idWZmZXJzLCBzZWdtZW50U3RhdGUuc2VnbWVudHMsIGxheWVyLCBwYWludGVyLCBzdGF0ZS5wcm9ncmFtLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIHN0YXRlLnVuaWZvcm1WYWx1ZXMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhd1N5bWJvbEVsZW1lbnRzKGJ1ZmZlcnMsIHNlZ21lbnRzLCBsYXllciwgcGFpbnRlciwgcHJvZ3JhbSwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCB1bmlmb3JtVmFsdWVzKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBidWZmZXJzLmxheW91dFZlcnRleEJ1ZmZlcixcbiAgICAgICAgYnVmZmVycy5pbmRleEJ1ZmZlciwgc2VnbWVudHMsIGxheWVyLnBhaW50LFxuICAgICAgICBwYWludGVyLnRyYW5zZm9ybS56b29tLCBidWZmZXJzLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpLFxuICAgICAgICBidWZmZXJzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsIGJ1ZmZlcnMub3BhY2l0eVZlcnRleEJ1ZmZlcik7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCBQcm9ncmFtIGZyb20gJy4vcHJvZ3JhbSc7XG5pbXBvcnQge2NpcmNsZVVuaWZvcm1WYWx1ZXN9IGZyb20gJy4vcHJvZ3JhbS9jaXJjbGVfcHJvZ3JhbSc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgQ2lyY2xlU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ2lyY2xlQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2NpcmNsZV9idWNrZXQnO1xuaW1wb3J0IHR5cGUgUHJvZ3JhbUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vZGF0YS9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSB7Q2lyY2xlVW5pZm9ybXNUeXBlfSBmcm9tICcuL3Byb2dyYW0vY2lyY2xlX3Byb2dyYW0nO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3Q2lyY2xlcztcblxudHlwZSBUaWxlUmVuZGVyU3RhdGUgPSB7XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb246IFByb2dyYW1Db25maWd1cmF0aW9uLFxuICAgIHByb2dyYW06IFByb2dyYW08Kj4sXG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyLFxuICAgIHVuaWZvcm1WYWx1ZXM6IFVuaWZvcm1WYWx1ZXM8Q2lyY2xlVW5pZm9ybXNUeXBlPlxufTtcblxudHlwZSBTZWdtZW50c1RpbGVSZW5kZXJTdGF0ZSA9IHtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcixcbiAgICBzb3J0S2V5OiBudW1iZXIsXG4gICAgc3RhdGU6IFRpbGVSZW5kZXJTdGF0ZVxufTtcblxuZnVuY3Rpb24gZHJhd0NpcmNsZXMocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogQ2lyY2xlU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcblxuICAgIGNvbnN0IG9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2NpcmNsZS1vcGFjaXR5Jyk7XG4gICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBsYXllci5wYWludC5nZXQoJ2NpcmNsZS1zdHJva2Utd2lkdGgnKTtcbiAgICBjb25zdCBzdHJva2VPcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtc3Ryb2tlLW9wYWNpdHknKTtcbiAgICBjb25zdCBzb3J0RmVhdHVyZXNCeUtleSA9IGxheWVyLmxheW91dC5nZXQoJ2NpcmNsZS1zb3J0LWtleScpLmNvbnN0YW50T3IoMSkgIT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChvcGFjaXR5LmNvbnN0YW50T3IoMSkgPT09IDAgJiYgKHN0cm9rZVdpZHRoLmNvbnN0YW50T3IoMSkgPT09IDAgfHwgc3Ryb2tlT3BhY2l0eS5jb25zdGFudE9yKDEpID09PSAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgLy8gVHVybiBvZmYgc3RlbmNpbCB0ZXN0aW5nIHRvIGFsbG93IGNpcmNsZXMgdG8gYmUgZHJhd24gYWNyb3NzIGJvdW5kYXJpZXMsXG4gICAgLy8gc28gdGhhdCBsYXJnZSBjaXJjbGVzIGFyZSBub3QgY2xpcHBlZCB0byB0aWxlc1xuICAgIGNvbnN0IHN0ZW5jaWxNb2RlID0gU3RlbmNpbE1vZGUuZGlzYWJsZWQ7XG4gICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG5cbiAgICBjb25zdCBzZWdtZW50c1JlbmRlclN0YXRlczogQXJyYXk8U2VnbWVudHNUaWxlUmVuZGVyU3RhdGU+ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb29yZCA9IGNvb3Jkc1tpXTtcblxuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0NpcmNsZUJ1Y2tldDwqPiA9ICh0aWxlLmdldEJ1Y2tldChsYXllcik6IGFueSk7XG4gICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBwcm9ncmFtQ29uZmlndXJhdGlvbiA9IGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgnY2lyY2xlJywgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBsYXlvdXRWZXJ0ZXhCdWZmZXIgPSBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyO1xuICAgICAgICBjb25zdCBpbmRleEJ1ZmZlciA9IGJ1Y2tldC5pbmRleEJ1ZmZlcjtcbiAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGNpcmNsZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgY29vcmQsIHRpbGUsIGxheWVyKTtcblxuICAgICAgICBjb25zdCBzdGF0ZTogVGlsZVJlbmRlclN0YXRlID0ge1xuICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBwcm9ncmFtLFxuICAgICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLFxuICAgICAgICAgICAgaW5kZXhCdWZmZXIsXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChzb3J0RmVhdHVyZXNCeUtleSkge1xuICAgICAgICAgICAgY29uc3Qgb2xkU2VnbWVudHMgPSBidWNrZXQuc2VnbWVudHMuZ2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygb2xkU2VnbWVudHMpIHtcbiAgICAgICAgICAgICAgICBzZWdtZW50c1JlbmRlclN0YXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHM6IG5ldyBTZWdtZW50VmVjdG9yKFtzZWdtZW50XSksXG4gICAgICAgICAgICAgICAgICAgIHNvcnRLZXk6ICgoc2VnbWVudC5zb3J0S2V5OiBhbnkpOiBudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VnbWVudHNSZW5kZXJTdGF0ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc2VnbWVudHM6IGJ1Y2tldC5zZWdtZW50cyxcbiAgICAgICAgICAgICAgICBzb3J0S2V5OiAwLFxuICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgIHNlZ21lbnRzUmVuZGVyU3RhdGVzLnNvcnQoKGEsIGIpID0+IGEuc29ydEtleSAtIGIuc29ydEtleSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzZWdtZW50c1N0YXRlIG9mIHNlZ21lbnRzUmVuZGVyU3RhdGVzKSB7XG4gICAgICAgIGNvbnN0IHtwcm9ncmFtQ29uZmlndXJhdGlvbiwgcHJvZ3JhbSwgbGF5b3V0VmVydGV4QnVmZmVyLCBpbmRleEJ1ZmZlciwgdW5pZm9ybVZhbHVlc30gPSBzZWdtZW50c1N0YXRlLnN0YXRlO1xuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHNlZ21lbnRzU3RhdGUuc2VnbWVudHM7XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCxcbiAgICAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlciwgaW5kZXhCdWZmZXIsIHNlZ21lbnRzLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sIHByb2dyYW1Db25maWd1cmF0aW9uKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGhlYXRtYXBVbmlmb3JtVmFsdWVzLFxuICAgIGhlYXRtYXBUZXh0dXJlVW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vaGVhdG1hcF9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBIZWF0bWFwU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIEhlYXRtYXBCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvaGVhdG1hcF9idWNrZXQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0hlYXRtYXA7XG5cbmZ1bmN0aW9uIGRyYXdIZWF0bWFwKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEhlYXRtYXBTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgaWYgKGxheWVyLnBhaW50LmdldCgnaGVhdG1hcC1vcGFjaXR5JykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICdvZmZzY3JlZW4nKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgICAgIC8vIEFsbG93IGtlcm5lbHMgdG8gYmUgZHJhd24gYWNyb3NzIGJvdW5kYXJpZXMsIHNvIHRoYXRcbiAgICAgICAgLy8gbGFyZ2Uga2VybmVscyBhcmUgbm90IGNsaXBwZWQgdG8gdGlsZXNcbiAgICAgICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICAgICAgLy8gVHVybiBvbiBhZGRpdGl2ZSBibGVuZGluZyBmb3Iga2VybmVscywgd2hpY2ggaXMgYSBrZXkgYXNwZWN0IG9mIGtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gZm9ybXVsYVxuICAgICAgICBjb25zdCBjb2xvck1vZGUgPSBuZXcgQ29sb3JNb2RlKFtnbC5PTkUsIGdsLk9ORV0sIENvbG9yLnRyYW5zcGFyZW50LCBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0pO1xuXG4gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCBsYXllcik7XG5cbiAgICAgICAgY29udGV4dC5jbGVhcih7Y29sb3I6IENvbG9yLnRyYW5zcGFyZW50fSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkID0gY29vcmRzW2ldO1xuXG4gICAgICAgICAgICAvLyBTa2lwIHRpbGVzIHRoYXQgaGF2ZSB1bmNvdmVyZWQgcGFyZW50cyB0byBhdm9pZCBmbGlja2VyaW5nOyB3ZSBkb24ndCBuZWVkXG4gICAgICAgICAgICAvLyB0byB1c2UgY29tcGxleCB0aWxlIG1hc2tpbmcgaGVyZSBiZWNhdXNlIHRoZSBjaGFuZ2UgYmV0d2VlbiB6b29tIGxldmVscyBpcyBzdWJ0bGUsXG4gICAgICAgICAgICAvLyBzbyBpdCdzIGZpbmUgdG8gc2ltcGx5IHJlbmRlciB0aGUgcGFyZW50IHVudGlsIGFsbCBpdHMgNCBjaGlsZHJlbiBhcmUgbG9hZGVkXG4gICAgICAgICAgICBpZiAoc291cmNlQ2FjaGUuaGFzUmVuZGVyYWJsZVBhcmVudChjb29yZCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQ6ID9IZWF0bWFwQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgICAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKCdoZWF0bWFwJywgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgY29uc3Qge3pvb219ID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICAgICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhlYXRtYXBVbmlmb3JtVmFsdWVzKGNvb3JkLnBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICAgICAgdGlsZSwgem9vbSwgbGF5ZXIucGFpbnQuZ2V0KCdoZWF0bWFwLWludGVuc2l0eScpKSxcbiAgICAgICAgICAgICAgICBsYXllci5pZCwgYnVja2V0LmxheW91dFZlcnRleEJ1ZmZlciwgYnVja2V0LmluZGV4QnVmZmVyLFxuICAgICAgICAgICAgICAgIGJ1Y2tldC5zZWdtZW50cywgbGF5ZXIucGFpbnQsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sXG4gICAgICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHBhaW50ZXIud2lkdGgsIHBhaW50ZXIuaGVpZ2h0XSk7XG5cbiAgICB9IGVsc2UgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50Jykge1xuICAgICAgICBwYWludGVyLmNvbnRleHQuc2V0Q29sb3JNb2RlKHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtcbiAgICAgICAgcmVuZGVyVGV4dHVyZVRvTWFwKHBhaW50ZXIsIGxheWVyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRGcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCBsYXllcikge1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUxKTtcblxuICAgIC8vIFVzZSBhIDR4IGRvd25zY2FsZWQgc2NyZWVuIHRleHR1cmUgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgIGNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCBwYWludGVyLndpZHRoIC8gNCwgcGFpbnRlci5oZWlnaHQgLyA0XSk7XG5cbiAgICBsZXQgZmJvID0gbGF5ZXIuaGVhdG1hcEZibztcblxuICAgIGlmICghZmJvKSB7XG4gICAgICAgIGNvbnN0IHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTtcblxuICAgICAgICBmYm8gPSBsYXllci5oZWF0bWFwRmJvID0gY29udGV4dC5jcmVhdGVGcmFtZWJ1ZmZlcihwYWludGVyLndpZHRoIC8gNCwgcGFpbnRlci5oZWlnaHQgLyA0KTtcblxuICAgICAgICBiaW5kVGV4dHVyZVRvRnJhbWVidWZmZXIoY29udGV4dCwgcGFpbnRlciwgdGV4dHVyZSwgZmJvKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuICAgICAgICBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoZmJvLmZyYW1lYnVmZmVyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRUZXh0dXJlVG9GcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCB0ZXh0dXJlLCBmYm8pIHtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgLy8gVXNlIHRoZSBoaWdoZXIgcHJlY2lzaW9uIGhhbGYtZmxvYXQgdGV4dHVyZSB3aGVyZSBhdmFpbGFibGUgKHByb2R1Y2luZyBtdWNoIHNtb290aGVyIGxvb2tpbmcgaGVhdG1hcHMpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgcGFpbnRlci53aWR0aCAvIDQsIHBhaW50ZXIuaGVpZ2h0IC8gNCwgMCwgZ2wuUkdCQSxcbiAgICAgICAgY29udGV4dC5leHRUZXh0dXJlSGFsZkZsb2F0ID8gY29udGV4dC5leHRUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTIDogZ2wuVU5TSUdORURfQllURSwgbnVsbCk7XG5cbiAgICBmYm8uY29sb3JBdHRhY2htZW50LnNldCh0ZXh0dXJlKTtcblxuICAgIC8vIElmIHVzaW5nIGhhbGYtZmxvYXQgdGV4dHVyZSBhcyBhIHJlbmRlciB0YXJnZXQgaXMgbm90IHN1cHBvcnRlZCwgZmFsbCBiYWNrIHRvIGEgbG93IHByZWNpc2lvbiB0ZXh0dXJlXG4gICAgaWYgKGNvbnRleHQuZXh0VGV4dHVyZUhhbGZGbG9hdCAmJiBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSAhPT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUpIHtcbiAgICAgICAgY29udGV4dC5leHRUZXh0dXJlSGFsZkZsb2F0ID0gbnVsbDtcbiAgICAgICAgZmJvLmNvbG9yQXR0YWNobWVudC5zZXREaXJ0eSgpO1xuICAgICAgICBiaW5kVGV4dHVyZVRvRnJhbWVidWZmZXIoY29udGV4dCwgcGFpbnRlciwgdGV4dHVyZSwgZmJvKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRleHR1cmVUb01hcChwYWludGVyLCBsYXllcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgLy8gSGVyZSB3ZSBiaW5kIHR3byBkaWZmZXJlbnQgdGV4dHVyZXMgZnJvbSB3aGljaCB3ZSdsbCBzYW1wbGUgaW4gZHJhd2luZ1xuICAgIC8vIGhlYXRtYXBzOiB0aGUga2VybmVsIHRleHR1cmUsIHByZXBhcmVkIGluIHRoZSBvZmZzY3JlZW4gcGFzcywgYW5kIGFcbiAgICAvLyBjb2xvciByYW1wIHRleHR1cmUuXG4gICAgY29uc3QgZmJvID0gbGF5ZXIuaGVhdG1hcEZibztcbiAgICBpZiAoIWZibykgcmV0dXJuO1xuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuXG4gICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMSk7XG4gICAgbGV0IGNvbG9yUmFtcFRleHR1cmUgPSBsYXllci5jb2xvclJhbXBUZXh0dXJlO1xuICAgIGlmICghY29sb3JSYW1wVGV4dHVyZSkge1xuICAgICAgICBjb2xvclJhbXBUZXh0dXJlID0gbGF5ZXIuY29sb3JSYW1wVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIGxheWVyLmNvbG9yUmFtcCwgZ2wuUkdCQSk7XG4gICAgfVxuICAgIGNvbG9yUmFtcFRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gICAgcGFpbnRlci51c2VQcm9ncmFtKCdoZWF0bWFwVGV4dHVyZScpLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLFxuICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsIFN0ZW5jaWxNb2RlLmRpc2FibGVkLCBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgbGF5ZXIsIDAsIDEpLFxuICAgICAgICBsYXllci5pZCwgcGFpbnRlci52aWV3cG9ydEJ1ZmZlciwgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcixcbiAgICAgICAgcGFpbnRlci52aWV3cG9ydFNlZ21lbnRzLCBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IHtcbiAgICBsaW5lVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZVNERlVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZUdyYWRpZW50VW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vbGluZV9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBMaW5lU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIExpbmVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZHJhd0xpbmUocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogTGluZVN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLW9wYWNpdHknKTtcbiAgICBjb25zdCB3aWR0aCA9IGxheWVyLnBhaW50LmdldCgnbGluZS13aWR0aCcpO1xuICAgIGlmIChvcGFjaXR5LmNvbnN0YW50T3IoMSkgPT09IDAgfHwgd2lkdGguY29uc3RhbnRPcigxKSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgZGFzaGFycmF5ID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLWRhc2hhcnJheScpO1xuICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldCgnbGluZS1wYXR0ZXJuJyk7XG4gICAgY29uc3QgaW1hZ2UgPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcigoMTogYW55KSk7XG5cbiAgICBjb25zdCBncmFkaWVudCA9IGxheWVyLnBhaW50LmdldCgnbGluZS1ncmFkaWVudCcpO1xuICAgIGNvbnN0IGNyb3NzZmFkZSA9IGxheWVyLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcblxuICAgIGNvbnN0IHByb2dyYW1JZCA9XG4gICAgICAgIGRhc2hhcnJheSA/ICdsaW5lU0RGJyA6XG4gICAgICAgIGltYWdlID8gJ2xpbmVQYXR0ZXJuJyA6XG4gICAgICAgIGdyYWRpZW50ID8gJ2xpbmVHcmFkaWVudCcgOiAnbGluZSc7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgIGxldCBmaXJzdFRpbGUgPSB0cnVlO1xuXG4gICAgaWYgKGdyYWRpZW50KSB7XG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGxldCBncmFkaWVudFRleHR1cmUgPSBsYXllci5ncmFkaWVudFRleHR1cmU7XG4gICAgICAgIGlmICghbGF5ZXIuZ3JhZGllbnQpIHJldHVybjtcbiAgICAgICAgaWYgKCFncmFkaWVudFRleHR1cmUpIGdyYWRpZW50VGV4dHVyZSA9IGxheWVyLmdyYWRpZW50VGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIGxheWVyLmdyYWRpZW50LCBnbC5SR0JBKTtcbiAgICAgICAgZ3JhZGllbnRUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG5cbiAgICAgICAgaWYgKGltYWdlICYmICF0aWxlLnBhdHRlcm5zTG9hZGVkKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0xpbmVCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByZXZQcm9ncmFtID0gcGFpbnRlci5jb250ZXh0LnByb2dyYW0uZ2V0KCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0ocHJvZ3JhbUlkLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IHByb2dyYW1DaGFuZ2VkID0gZmlyc3RUaWxlIHx8IHByb2dyYW0ucHJvZ3JhbSAhPT0gcHJldlByb2dyYW07XG5cbiAgICAgICAgY29uc3QgY29uc3RhbnRQYXR0ZXJuID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IobnVsbCk7XG4gICAgICAgIGlmIChjb25zdGFudFBhdHRlcm4gJiYgdGlsZS5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICBjb25zdCBhdGxhcyA9IHRpbGUuaW1hZ2VBdGxhcztcbiAgICAgICAgICAgIGNvbnN0IHBvc1RvID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4udG8udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBwb3NGcm9tID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4uZnJvbS50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGlmIChwb3NUbyAmJiBwb3NGcm9tKSBwcm9ncmFtQ29uZmlndXJhdGlvbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGRhc2hhcnJheSA/IGxpbmVTREZVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyLCBkYXNoYXJyYXksIGNyb3NzZmFkZSkgOlxuICAgICAgICAgICAgaW1hZ2UgPyBsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIsIGNyb3NzZmFkZSkgOlxuICAgICAgICAgICAgZ3JhZGllbnQgPyBsaW5lR3JhZGllbnRVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyKSA6XG4gICAgICAgICAgICBsaW5lVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllcik7XG5cbiAgICAgICAgaWYgKGRhc2hhcnJheSAmJiAocHJvZ3JhbUNoYW5nZWQgfHwgcGFpbnRlci5saW5lQXRsYXMuZGlydHkpKSB7XG4gICAgICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgICAgIHBhaW50ZXIubGluZUF0bGFzLmJpbmQoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICAgICAgdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbi51cGRhdGVQYXR0ZXJuUGFpbnRCdWZmZXJzKGNyb3NzZmFkZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsXG4gICAgICAgICAgICBwYWludGVyLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcoY29vcmQpLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCwgdW5pZm9ybVZhbHVlcyxcbiAgICAgICAgICAgIGxheWVyLmlkLCBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyLCBidWNrZXQuaW5kZXhCdWZmZXIsIGJ1Y2tldC5zZWdtZW50cyxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgZmlyc3RUaWxlID0gZmFsc2U7XG4gICAgICAgIC8vIG9uY2UgcmVmYWN0b3JlZCBzbyB0aGF0IGJvdW5kIHRleHR1cmUgc3RhdGUgaXMgbWFuYWdlZCwgd2UnbGwgYWxzbyBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIGZpcnN0VGlsZS9wcm9ncmFtQ2hhbmdlZCBsb2dpY1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBmaWxsVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbE91dGxpbmVVbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2ZpbGxfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgRmlsbFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBGaWxsQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0JztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdGaWxsO1xuXG5mdW5jdGlvbiBkcmF3RmlsbChwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBGaWxsU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGNvbnN0IGNvbG9yID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWNvbG9yJyk7XG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1vcGFjaXR5Jyk7XG5cbiAgICBpZiAob3BhY2l0eS5jb25zdGFudE9yKDEpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGNvbnN0IHBhdHRlcm4gPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtcGF0dGVybicpO1xuICAgIGNvbnN0IHBhc3MgPSBwYWludGVyLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSAmJlxuICAgICAgICAoIXBhdHRlcm4uY29uc3RhbnRPcigoMTogYW55KSkgJiZcbiAgICAgICAgY29sb3IuY29uc3RhbnRPcihDb2xvci50cmFuc3BhcmVudCkuYSA9PT0gMSAmJlxuICAgICAgICBvcGFjaXR5LmNvbnN0YW50T3IoMCkgPT09IDEpID8gJ29wYXF1ZScgOiAndHJhbnNsdWNlbnQnO1xuXG4gICAgLy8gRHJhdyBmaWxsXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gcGFzcykge1xuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKFxuICAgICAgICAgICAgMSwgcGFpbnRlci5yZW5kZXJQYXNzID09PSAnb3BhcXVlJyA/IERlcHRoTW9kZS5SZWFkV3JpdGUgOiBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgICAgICBkcmF3RmlsbFRpbGVzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIGNvbG9yTW9kZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIERyYXcgc3Ryb2tlXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50JyAmJiBsYXllci5wYWludC5nZXQoJ2ZpbGwtYW50aWFsaWFzJykpIHtcblxuICAgICAgICAvLyBJZiB3ZSBkZWZpbmVkIGEgZGlmZmVyZW50IGNvbG9yIGZvciB0aGUgZmlsbCBvdXRsaW5lLCB3ZSBhcmVcbiAgICAgICAgLy8gZ29pbmcgdG8gaWdub3JlIHRoZSBiaXRzIGluIDB4MDcgYW5kIGp1c3QgY2FyZSBhYm91dCB0aGUgZ2xvYmFsXG4gICAgICAgIC8vIGNsaXBwaW5nIG1hc2suXG4gICAgICAgIC8vIE90aGVyd2lzZSwgd2Ugb25seSB3YW50IHRvIGRyYXdGaWxsIHRoZSBhbnRpYWxpYXNlZCBwYXJ0cyB0aGF0IGFyZVxuICAgICAgICAvLyAqb3V0c2lkZSogdGhlIGN1cnJlbnQgc2hhcGUuIFRoaXMgaXMgaW1wb3J0YW50IGluIGNhc2UgdGhlIGZpbGxcbiAgICAgICAgLy8gb3Igc3Ryb2tlIGNvbG9yIGlzIHRyYW5zbHVjZW50LiBJZiB3ZSB3b3VsZG4ndCBjbGlwIHRvIG91dHNpZGVcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQgc2hhcGUsIHNvbWUgcGl4ZWxzIGZyb20gdGhlIG91dGxpbmUgc3Ryb2tlIG92ZXJsYXBwZWRcbiAgICAgICAgLy8gdGhlIChub24tYW50aWFsaWFzZWQpIGZpbGwuXG4gICAgICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoXG4gICAgICAgICAgICBsYXllci5nZXRQYWludFByb3BlcnR5KCdmaWxsLW91dGxpbmUtY29sb3InKSA/IDIgOiAwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgICAgICBkcmF3RmlsbFRpbGVzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIGNvbG9yTW9kZSwgdHJ1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmF3RmlsbFRpbGVzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIGNvbG9yTW9kZSwgaXNPdXRsaW5lKSB7XG4gICAgY29uc3QgZ2wgPSBwYWludGVyLmNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtcGF0dGVybicpO1xuICAgIGNvbnN0IGltYWdlID0gcGF0dGVyblByb3BlcnR5ICYmIHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKCgxOiBhbnkpKTtcbiAgICBjb25zdCBjcm9zc2ZhZGUgPSBsYXllci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7XG4gICAgbGV0IGRyYXdNb2RlLCBwcm9ncmFtTmFtZSwgdW5pZm9ybVZhbHVlcywgaW5kZXhCdWZmZXIsIHNlZ21lbnRzO1xuXG4gICAgaWYgKCFpc091dGxpbmUpIHtcbiAgICAgICAgcHJvZ3JhbU5hbWUgPSBpbWFnZSA/ICdmaWxsUGF0dGVybicgOiAnZmlsbCc7XG4gICAgICAgIGRyYXdNb2RlID0gZ2wuVFJJQU5HTEVTO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2dyYW1OYW1lID0gaW1hZ2UgJiYgIWxheWVyLmdldFBhaW50UHJvcGVydHkoJ2ZpbGwtb3V0bGluZS1jb2xvcicpID8gJ2ZpbGxPdXRsaW5lUGF0dGVybicgOiAnZmlsbE91dGxpbmUnO1xuICAgICAgICBkcmF3TW9kZSA9IGdsLkxJTkVTO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgaWYgKGltYWdlICYmICF0aWxlLnBhdHRlcm5zTG9hZGVkKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0ZpbGxCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0ocHJvZ3JhbU5hbWUsIHByb2dyYW1Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIHBhaW50ZXIuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgICAgICB0aWxlLmltYWdlQXRsYXNUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uLnVwZGF0ZVBhdHRlcm5QYWludEJ1ZmZlcnMoY3Jvc3NmYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnN0YW50UGF0dGVybiA9IHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKG51bGwpO1xuICAgICAgICBpZiAoY29uc3RhbnRQYXR0ZXJuICYmIHRpbGUuaW1hZ2VBdGxhcykge1xuICAgICAgICAgICAgY29uc3QgYXRsYXMgPSB0aWxlLmltYWdlQXRsYXM7XG4gICAgICAgICAgICBjb25zdCBwb3NUbyA9IGF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbY29uc3RhbnRQYXR0ZXJuLnRvLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgY29uc3QgcG9zRnJvbSA9IGF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbY29uc3RhbnRQYXR0ZXJuLmZyb20udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBpZiAocG9zVG8gJiYgcG9zRnJvbSkgcHJvZ3JhbUNvbmZpZ3VyYXRpb24uc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvLCBwb3NGcm9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbGVNYXRyaXggPSBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChjb29yZC5wb3NNYXRyaXgsIHRpbGUsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlJyksIGxheWVyLnBhaW50LmdldCgnZmlsbC10cmFuc2xhdGUtYW5jaG9yJykpO1xuXG4gICAgICAgIGlmICghaXNPdXRsaW5lKSB7XG4gICAgICAgICAgICBpbmRleEJ1ZmZlciA9IGJ1Y2tldC5pbmRleEJ1ZmZlcjtcbiAgICAgICAgICAgIHNlZ21lbnRzID0gYnVja2V0LnNlZ21lbnRzO1xuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IGltYWdlID9cbiAgICAgICAgICAgICAgICBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXModGlsZU1hdHJpeCwgcGFpbnRlciwgY3Jvc3NmYWRlLCB0aWxlKSA6XG4gICAgICAgICAgICAgICAgZmlsbFVuaWZvcm1WYWx1ZXModGlsZU1hdHJpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleEJ1ZmZlciA9IGJ1Y2tldC5pbmRleEJ1ZmZlcjI7XG4gICAgICAgICAgICBzZWdtZW50cyA9IGJ1Y2tldC5zZWdtZW50czI7XG4gICAgICAgICAgICBjb25zdCBkcmF3aW5nQnVmZmVyU2l6ZSA9IFtnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRdO1xuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IChwcm9ncmFtTmFtZSA9PT0gJ2ZpbGxPdXRsaW5lUGF0dGVybicgJiYgaW1hZ2UpID9cbiAgICAgICAgICAgICAgICBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzKHRpbGVNYXRyaXgsIHBhaW50ZXIsIGNyb3NzZmFkZSwgdGlsZSwgZHJhd2luZ0J1ZmZlclNpemUpIDpcbiAgICAgICAgICAgICAgICBmaWxsT3V0bGluZVVuaWZvcm1WYWx1ZXModGlsZU1hdHJpeCwgZHJhd2luZ0J1ZmZlclNpemUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KHBhaW50ZXIuY29udGV4dCwgZHJhd01vZGUsIGRlcHRoTW9kZSxcbiAgICAgICAgICAgIHBhaW50ZXIuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhjb29yZCksIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLCB1bmlmb3JtVmFsdWVzLFxuICAgICAgICAgICAgbGF5ZXIuaWQsIGJ1Y2tldC5sYXlvdXRWZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyLCBzZWdtZW50cyxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IENvbG9yTW9kZSBmcm9tICcuLi9nbC9jb2xvcl9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBmaWxsRXh0cnVzaW9uVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG59IGZyb20gJy4vcHJvZ3JhbS9maWxsX2V4dHJ1c2lvbl9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2ZpbGxfZXh0cnVzaW9uX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3O1xuXG5mdW5jdGlvbiBkcmF3KHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZTogU291cmNlQ2FjaGUsIGxheWVyOiBGaWxsRXh0cnVzaW9uU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGNvbnN0IG9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLW9wYWNpdHknKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50Jykge1xuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBuZXcgRGVwdGhNb2RlKHBhaW50ZXIuY29udGV4dC5nbC5MRVFVQUwsIERlcHRoTW9kZS5SZWFkV3JpdGUsIHBhaW50ZXIuZGVwdGhSYW5nZUZvcjNEKTtcblxuICAgICAgICBpZiAob3BhY2l0eSA9PT0gMSAmJiAhbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuJykuY29uc3RhbnRPcigoMTogYW55KSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgICAgICAgICAgZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLCBTdGVuY2lsTW9kZS5kaXNhYmxlZCwgY29sb3JNb2RlKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRHJhdyB0cmFuc3BhcmVudCBidWlsZGluZ3MgaW4gdHdvIHBhc3NlcyBzbyB0aGF0IG9ubHkgdGhlIGNsb3Nlc3Qgc3VyZmFjZSBpcyBkcmF3bi5cbiAgICAgICAgICAgIC8vIEZpcnN0IGRyYXcgYWxsIHRoZSBleHRydXNpb25zIGludG8gb25seSB0aGUgZGVwdGggYnVmZmVyLiBObyBjb2xvcnMgYXJlIGRyYXduLlxuICAgICAgICAgICAgZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLFxuICAgICAgICAgICAgICAgIFN0ZW5jaWxNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIENvbG9yTW9kZS5kaXNhYmxlZCk7XG5cbiAgICAgICAgICAgIC8vIFRoZW4gZHJhdyBhbGwgdGhlIGV4dHJ1c2lvbnMgYSBzZWNvbmQgdHlwZSwgb25seSBjb2xvcmluZyBmcmFnbWVudHMgaWYgdGhleSBoYXZlIHRoZVxuICAgICAgICAgICAgLy8gc2FtZSBkZXB0aCB2YWx1ZSBhcyB0aGUgY2xvc2VzdCBmcmFnbWVudCBpbiB0aGUgcHJldmlvdXMgcGFzcy4gVXNlIHRoZSBzdGVuY2lsIGJ1ZmZlclxuICAgICAgICAgICAgLy8gdG8gcHJldmVudCB0aGUgc2Vjb25kIGRyYXcgaW4gY2FzZXMgd2hlcmUgd2UgaGF2ZSBjb2luY2lkZW50IHBvbHlnb25zLlxuICAgICAgICAgICAgZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIuc3RlbmNpbE1vZGVGb3IzRCgpLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgcGF0dGVyblByb3BlcnR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuJyk7XG4gICAgY29uc3QgaW1hZ2UgPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcigoMTogYW55KSk7XG4gICAgY29uc3QgY3Jvc3NmYWRlID0gbGF5ZXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLW9wYWNpdHknKTtcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2UuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0ZpbGxFeHRydXNpb25CdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oaW1hZ2UgPyAnZmlsbEV4dHJ1c2lvblBhdHRlcm4nIDogJ2ZpbGxFeHRydXNpb24nLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICBwYWludGVyLmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICAgICAgdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbi51cGRhdGVQYXR0ZXJuUGFpbnRCdWZmZXJzKGNyb3NzZmFkZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25zdGFudFBhdHRlcm4gPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcihudWxsKTtcbiAgICAgICAgaWYgKGNvbnN0YW50UGF0dGVybiAmJiB0aWxlLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0bGFzID0gdGlsZS5pbWFnZUF0bGFzO1xuICAgICAgICAgICAgY29uc3QgcG9zVG8gPSBhdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2NvbnN0YW50UGF0dGVybi50by50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGNvbnN0IHBvc0Zyb20gPSBhdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2NvbnN0YW50UGF0dGVybi5mcm9tLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgaWYgKHBvc1RvICYmIHBvc0Zyb20pIHByb2dyYW1Db25maWd1cmF0aW9uLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbywgcG9zRnJvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXRyaXggPSBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChcbiAgICAgICAgICAgIGNvb3JkLnBvc01hdHJpeCxcbiAgICAgICAgICAgIHRpbGUsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yJykpO1xuXG4gICAgICAgIGNvbnN0IHNob3VsZFVzZVZlcnRpY2FsR3JhZGllbnQgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50Jyk7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSBpbWFnZSA/XG4gICAgICAgICAgICBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1WYWx1ZXMobWF0cml4LCBwYWludGVyLCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LCBvcGFjaXR5LCBjb29yZCwgY3Jvc3NmYWRlLCB0aWxlKSA6XG4gICAgICAgICAgICBmaWxsRXh0cnVzaW9uVW5pZm9ybVZhbHVlcyhtYXRyaXgsIHBhaW50ZXIsIHNob3VsZFVzZVZlcnRpY2FsR3JhZGllbnQsIG9wYWNpdHkpO1xuXG4gICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBjb250ZXh0LmdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuYmFja0NDVyxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyLCBidWNrZXQuaW5kZXhCdWZmZXIsXG4gICAgICAgICAgICBidWNrZXQuc2VnbWVudHMsIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tLFxuICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7XG4gICAgaGlsbHNoYWRlVW5pZm9ybVZhbHVlcyxcbiAgICBoaWxsc2hhZGVVbmlmb3JtUHJlcGFyZVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vaGlsbHNoYWRlX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIEhpbGxzaGFkZVN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGlsbHNoYWRlX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdIaWxsc2hhZGU7XG5cbmZ1bmN0aW9uIGRyYXdIaWxsc2hhZGUocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogSGlsbHNoYWRlU3R5bGVMYXllciwgdGlsZUlEczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAnb2Zmc2NyZWVuJyAmJiBwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3Qgc291cmNlTWF4Wm9vbSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLm1heHpvb207XG5cbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGZvciAoY29uc3QgdGlsZUlEIG9mIHRpbGVJRHMpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUodGlsZUlEKTtcbiAgICAgICAgaWYgKHRpbGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlICYmIHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ29mZnNjcmVlbicpIHtcbiAgICAgICAgICAgIHByZXBhcmVIaWxsc2hhZGUocGFpbnRlciwgdGlsZSwgbGF5ZXIsIHNvdXJjZU1heFpvb20sIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcpIHtcbiAgICAgICAgICAgIHJlbmRlckhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCBwYWludGVyLndpZHRoLCBwYWludGVyLmhlaWdodF0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJIaWxsc2hhZGUocGFpbnRlciwgdGlsZSwgbGF5ZXIsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IGZibyA9IHRpbGUuZmJvO1xuICAgIGlmICghZmJvKSByZXR1cm47XG5cbiAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKCdoaWxsc2hhZGUnKTtcblxuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuXG4gICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpO1xuXG4gICAgaWYgKHRpbGUubWFza2VkQm91bmRzQnVmZmVyICYmIHRpbGUubWFza2VkSW5kZXhCdWZmZXIgJiYgdGlsZS5zZWdtZW50cykge1xuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCB0aWxlLm1hc2tlZEJvdW5kc0J1ZmZlcixcbiAgICAgICAgICAgIHRpbGUubWFza2VkSW5kZXhCdWZmZXIsIHRpbGUuc2VnbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcywgbGF5ZXIuaWQsIHBhaW50ZXIucmFzdGVyQm91bmRzQnVmZmVyLFxuICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci5yYXN0ZXJCb3VuZHNTZWdtZW50cyk7XG4gICAgfVxufVxuXG4vLyBoaWxsc2hhZGUgcmVuZGVyaW5nIGlzIGRvbmUgaW4gdHdvIHN0ZXBzLiB0aGUgcHJlcGFyZSBzdGVwIGZpcnN0IGNhbGN1bGF0ZXMgdGhlIHNsb3BlIG9mIHRoZSB0ZXJyYWluIGluIHRoZSB4IGFuZCB5XG4vLyBkaXJlY3Rpb25zIGZvciBlYWNoIHBpeGVsLCBhbmQgc2F2ZXMgdGhvc2UgdmFsdWVzIHRvIGEgZnJhbWVidWZmZXIgdGV4dHVyZSBpbiB0aGUgciBhbmQgZyBjaGFubmVscy5cbmZ1bmN0aW9uIHByZXBhcmVIaWxsc2hhZGUocGFpbnRlciwgdGlsZSwgbGF5ZXIsIHNvdXJjZU1heFpvb20sIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IGRlbSA9IHRpbGUuZGVtO1xuICAgIGlmIChkZW0gJiYgZGVtLmRhdGEpIHtcbiAgICAgICAgY29uc3QgdGlsZVNpemUgPSBkZW0uZGltO1xuICAgICAgICBjb25zdCB0ZXh0dXJlU3RyaWRlID0gZGVtLnN0cmlkZTtcblxuICAgICAgICBjb25zdCBwaXhlbERhdGEgPSBkZW0uZ2V0UGl4ZWxzKCk7XG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTEpO1xuXG4gICAgICAgIGNvbnRleHQucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KGZhbHNlKTtcbiAgICAgICAgdGlsZS5kZW1UZXh0dXJlID0gdGlsZS5kZW1UZXh0dXJlIHx8IHBhaW50ZXIuZ2V0VGlsZVRleHR1cmUodGV4dHVyZVN0cmlkZSk7XG4gICAgICAgIGlmICh0aWxlLmRlbVRleHR1cmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbVRleHR1cmUgPSB0aWxlLmRlbVRleHR1cmU7XG4gICAgICAgICAgICBkZW1UZXh0dXJlLnVwZGF0ZShwaXhlbERhdGEsIHtwcmVtdWx0aXBseTogZmFsc2V9KTtcbiAgICAgICAgICAgIGRlbVRleHR1cmUuYmluZChnbC5ORUFSRVNULCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUuZGVtVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHBpeGVsRGF0YSwgZ2wuUkdCQSwge3ByZW11bHRpcGx5OiBmYWxzZX0pO1xuICAgICAgICAgICAgdGlsZS5kZW1UZXh0dXJlLmJpbmQoZ2wuTkVBUkVTVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBsZXQgZmJvID0gdGlsZS5mYm87XG5cbiAgICAgICAgaWYgKCFmYm8pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlclRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB7d2lkdGg6IHRpbGVTaXplLCBoZWlnaHQ6IHRpbGVTaXplLCBkYXRhOiBudWxsfSwgZ2wuUkdCQSk7XG4gICAgICAgICAgICByZW5kZXJUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcblxuICAgICAgICAgICAgZmJvID0gdGlsZS5mYm8gPSBjb250ZXh0LmNyZWF0ZUZyYW1lYnVmZmVyKHRpbGVTaXplLCB0aWxlU2l6ZSk7XG4gICAgICAgICAgICBmYm8uY29sb3JBdHRhY2htZW50LnNldChyZW5kZXJUZXh0dXJlLnRleHR1cmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KGZiby5mcmFtZWJ1ZmZlcik7XG4gICAgICAgIGNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCB0aWxlU2l6ZSwgdGlsZVNpemVdKTtcblxuICAgICAgICBwYWludGVyLnVzZVByb2dyYW0oJ2hpbGxzaGFkZVByZXBhcmUnKS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUyxcbiAgICAgICAgICAgIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgaGlsbHNoYWRlVW5pZm9ybVByZXBhcmVWYWx1ZXModGlsZS50aWxlSUQsIGRlbSwgc291cmNlTWF4Wm9vbSksXG4gICAgICAgICAgICBsYXllci5pZCwgcGFpbnRlci5yYXN0ZXJCb3VuZHNCdWZmZXIsXG4gICAgICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnJhc3RlckJvdW5kc1NlZ21lbnRzKTtcblxuICAgICAgICB0aWxlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSA9IGZhbHNlO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Y2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCBJbWFnZVNvdXJjZSBmcm9tICcuLi9zb3VyY2UvaW1hZ2Vfc291cmNlJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7cmFzdGVyVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL3Jhc3Rlcl9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBSYXN0ZXJTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3UmFzdGVyO1xuXG5mdW5jdGlvbiBkcmF3UmFzdGVyKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IFJhc3RlclN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG4gICAgaWYgKGxheWVyLnBhaW50LmdldCgncmFzdGVyLW9wYWNpdHknKSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgncmFzdGVyJyk7XG5cbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgIGNvbnN0IG1pblRpbGVaID0gY29vcmRzLmxlbmd0aCAmJiBjb29yZHNbMF0ub3ZlcnNjYWxlZFo7XG4gICAgY29uc3QgYWxpZ24gPSAhcGFpbnRlci5vcHRpb25zLm1vdmluZztcbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICAvLyBTZXQgdGhlIGxvd2VyIHpvb20gbGV2ZWwgdG8gc3VibGF5ZXIgMCwgYW5kIGhpZ2hlciB6b29tIGxldmVscyB0byBoaWdoZXIgc3VibGF5ZXJzXG4gICAgICAgIC8vIFVzZSBnbC5MRVNTIHRvIHByZXZlbnQgZG91YmxlIGRyYXdpbmcgaW4gYXJlYXMgd2hlcmUgdGlsZXMgb3ZlcmxhcC5cbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcihjb29yZC5vdmVyc2NhbGVkWiAtIG1pblRpbGVaLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItb3BhY2l0eScpID09PSAxID8gRGVwdGhNb2RlLlJlYWRXcml0ZSA6IERlcHRoTW9kZS5SZWFkT25seSwgZ2wuTEVTUyk7XG5cbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBjb25zdCBwb3NNYXRyaXggPSBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoY29vcmQudG9VbndyYXBwZWQoKSwgYWxpZ24pO1xuXG4gICAgICAgIHRpbGUucmVnaXN0ZXJGYWRlRHVyYXRpb24obGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItZmFkZS1kdXJhdGlvbicpKTtcblxuICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gc291cmNlQ2FjaGUuZmluZExvYWRlZFBhcmVudChjb29yZCwgMCksXG4gICAgICAgICAgICBmYWRlID0gZ2V0RmFkZVZhbHVlcyh0aWxlLCBwYXJlbnRUaWxlLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIHBhaW50ZXIudHJhbnNmb3JtKTtcblxuICAgICAgICBsZXQgcGFyZW50U2NhbGVCeSwgcGFyZW50VEw7XG5cbiAgICAgICAgY29uc3QgdGV4dHVyZUZpbHRlciA9IGxheWVyLnBhaW50LmdldCgncmFzdGVyLXJlc2FtcGxpbmcnKSA9PT0gJ25lYXJlc3QnID8gIGdsLk5FQVJFU1QgOiBnbC5MSU5FQVI7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgIHRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMSk7XG5cbiAgICAgICAgaWYgKHBhcmVudFRpbGUpIHtcbiAgICAgICAgICAgIHBhcmVudFRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG4gICAgICAgICAgICBwYXJlbnRTY2FsZUJ5ID0gTWF0aC5wb3coMiwgcGFyZW50VGlsZS50aWxlSUQub3ZlcnNjYWxlZFogLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgICAgICAgICBwYXJlbnRUTCA9IFt0aWxlLnRpbGVJRC5jYW5vbmljYWwueCAqIHBhcmVudFNjYWxlQnkgJSAxLCB0aWxlLnRpbGVJRC5jYW5vbmljYWwueSAqIHBhcmVudFNjYWxlQnkgJSAxXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS50ZXh0dXJlLmJpbmQodGV4dHVyZUZpbHRlciwgZ2wuQ0xBTVBfVE9fRURHRSwgZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSByYXN0ZXJVbmlmb3JtVmFsdWVzKHBvc01hdHJpeCwgcGFyZW50VEwgfHwgWzAsIDBdLCBwYXJlbnRTY2FsZUJ5IHx8IDEsIGZhZGUsIGxheWVyKTtcblxuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgSW1hZ2VTb3VyY2UpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBzb3VyY2UuYm91bmRzQnVmZmVyLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHNvdXJjZS5ib3VuZHNTZWdtZW50cyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGlsZS5tYXNrZWRCb3VuZHNCdWZmZXIgJiYgdGlsZS5tYXNrZWRJbmRleEJ1ZmZlciAmJiB0aWxlLnNlZ21lbnRzKSB7XG4gICAgICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgdGlsZS5tYXNrZWRCb3VuZHNCdWZmZXIsXG4gICAgICAgICAgICAgICAgdGlsZS5tYXNrZWRJbmRleEJ1ZmZlciwgdGlsZS5zZWdtZW50cywgbGF5ZXIucGFpbnQsXG4gICAgICAgICAgICAgICAgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgcGFpbnRlci5yYXN0ZXJCb3VuZHNCdWZmZXIsXG4gICAgICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci5yYXN0ZXJCb3VuZHNTZWdtZW50cyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEZhZGVWYWx1ZXModGlsZSwgcGFyZW50VGlsZSwgc291cmNlQ2FjaGUsIGxheWVyLCB0cmFuc2Zvcm0pIHtcbiAgICBjb25zdCBmYWRlRHVyYXRpb24gPSBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1mYWRlLWR1cmF0aW9uJyk7XG5cbiAgICBpZiAoZmFkZUR1cmF0aW9uID4gMCkge1xuICAgICAgICBjb25zdCBub3cgPSBicm93c2VyLm5vdygpO1xuICAgICAgICBjb25zdCBzaW5jZVRpbGUgPSAobm93IC0gdGlsZS50aW1lQWRkZWQpIC8gZmFkZUR1cmF0aW9uO1xuICAgICAgICBjb25zdCBzaW5jZVBhcmVudCA9IHBhcmVudFRpbGUgPyAobm93IC0gcGFyZW50VGlsZS50aW1lQWRkZWQpIC8gZmFkZUR1cmF0aW9uIDogLTE7XG5cbiAgICAgICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgICAgIGNvbnN0IGlkZWFsWiA9IHRyYW5zZm9ybS5jb3ZlcmluZ1pvb21MZXZlbCh7XG4gICAgICAgICAgICB0aWxlU2l6ZTogc291cmNlLnRpbGVTaXplLFxuICAgICAgICAgICAgcm91bmRab29tOiBzb3VyY2Uucm91bmRab29tXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGlmIG5vIHBhcmVudCBvciBwYXJlbnQgaXMgb2xkZXIsIGZhZGUgaW47IGlmIHBhcmVudCBpcyB5b3VuZ2VyLCBmYWRlIG91dFxuICAgICAgICBjb25zdCBmYWRlSW4gPSAhcGFyZW50VGlsZSB8fCBNYXRoLmFicyhwYXJlbnRUaWxlLnRpbGVJRC5vdmVyc2NhbGVkWiAtIGlkZWFsWikgPiBNYXRoLmFicyh0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWiAtIGlkZWFsWik7XG5cbiAgICAgICAgY29uc3QgY2hpbGRPcGFjaXR5ID0gKGZhZGVJbiAmJiB0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uKSA/IDEgOiBjbGFtcChmYWRlSW4gPyBzaW5jZVRpbGUgOiAxIC0gc2luY2VQYXJlbnQsIDAsIDEpO1xuXG4gICAgICAgIC8vIHdlIGRvbid0IGNyb3NzZmFkZSB0aWxlcyB0aGF0IHdlcmUganVzdCByZWZyZXNoZWQgdXBvbiBleHBpcmluZzpcbiAgICAgICAgLy8gb25jZSB0aGV5J3JlIG9sZCBlbm91Z2ggdG8gcGFzcyB0aGUgY3Jvc3NmYWRpbmcgdGhyZXNob2xkXG4gICAgICAgIC8vIChmYWRlRHVyYXRpb24pLCB1bnNldCB0aGUgYHJlZnJlc2hlZFVwb25FeHBpcmF0aW9uYCBmbGFnIHNvIHdlIGRvbid0XG4gICAgICAgIC8vIGluY29ycmVjdGx5IGZhaWwgdG8gY3Jvc3NmYWRlIHRoZW0gd2hlbiB6b29taW5nXG4gICAgICAgIGlmICh0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uICYmIHNpbmNlVGlsZSA+PSAxKSB0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBhcmVudFRpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICBtaXg6IDEgLSBjaGlsZE9wYWNpdHlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IGNoaWxkT3BhY2l0eSxcbiAgICAgICAgICAgICAgICBtaXg6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgIG1peDogMFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyxcbiAgICBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2JhY2tncm91bmRfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgQmFja2dyb3VuZFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvYmFja2dyb3VuZF9zdHlsZV9sYXllcic7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdCYWNrZ3JvdW5kO1xuXG5mdW5jdGlvbiBkcmF3QmFja2dyb3VuZChwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBCYWNrZ3JvdW5kU3R5bGVMYXllcikge1xuICAgIGNvbnN0IGNvbG9yID0gbGF5ZXIucGFpbnQuZ2V0KCdiYWNrZ3JvdW5kLWNvbG9yJyk7XG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnYmFja2dyb3VuZC1vcGFjaXR5Jyk7XG5cbiAgICBpZiAob3BhY2l0eSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG4gICAgY29uc3QgdGlsZVNpemUgPSB0cmFuc2Zvcm0udGlsZVNpemU7XG4gICAgY29uc3QgaW1hZ2UgPSBsYXllci5wYWludC5nZXQoJ2JhY2tncm91bmQtcGF0dGVybicpO1xuICAgIGlmIChwYWludGVyLmlzUGF0dGVybk1pc3NpbmcoaW1hZ2UpKSByZXR1cm47XG5cbiAgICBjb25zdCBwYXNzID0gKCFpbWFnZSAmJiBjb2xvci5hID09PSAxICYmIG9wYWNpdHkgPT09IDEgJiYgcGFpbnRlci5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkpID8gJ29wYXF1ZScgOiAndHJhbnNsdWNlbnQnO1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09IHBhc3MpIHJldHVybjtcblxuICAgIGNvbnN0IHN0ZW5jaWxNb2RlID0gU3RlbmNpbE1vZGUuZGlzYWJsZWQ7XG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBwYXNzID09PSAnb3BhcXVlJyA/IERlcHRoTW9kZS5SZWFkV3JpdGUgOiBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbShpbWFnZSA/ICdiYWNrZ3JvdW5kUGF0dGVybicgOiAnYmFja2dyb3VuZCcpO1xuXG4gICAgY29uc3QgdGlsZUlEcyA9IHRyYW5zZm9ybS5jb3ZlcmluZ1RpbGVzKHt0aWxlU2l6ZX0pO1xuXG4gICAgaWYgKGltYWdlKSB7XG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICBwYWludGVyLmltYWdlTWFuYWdlci5iaW5kKHBhaW50ZXIuY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3Jvc3NmYWRlID0gbGF5ZXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpO1xuICAgIGZvciAoY29uc3QgdGlsZUlEIG9mIHRpbGVJRHMpIHtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gcGFpbnRlci50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHRpbGVJRC50b1Vud3JhcHBlZCgpKTtcbiAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGltYWdlID9cbiAgICAgICAgICAgIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybVZhbHVlcyhtYXRyaXgsIG9wYWNpdHksIHBhaW50ZXIsIGltYWdlLCB7dGlsZUlELCB0aWxlU2l6ZX0sIGNyb3NzZmFkZSkgOlxuICAgICAgICAgICAgYmFja2dyb3VuZFVuaWZvcm1WYWx1ZXMobWF0cml4LCBvcGFjaXR5LCBjb2xvcik7XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgcGFpbnRlci50aWxlRXh0ZW50QnVmZmVyLFxuICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci50aWxlRXh0ZW50U2VnbWVudHMpO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHtQb3NBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQge0xpbmVJbmRleEFycmF5fSBmcm9tICcuLi9kYXRhL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IHBvc0F0dHJpYnV0ZXMgZnJvbSAnLi4vZGF0YS9wb3NfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2RlYnVnVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2RlYnVnX3Byb2dyYW0nO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0RlYnVnO1xuXG5mdW5jdGlvbiBkcmF3RGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHJhd0RlYnVnVGlsZShwYWludGVyLCBzb3VyY2VDYWNoZSwgY29vcmRzW2ldKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdEZWJ1Z1RpbGUocGFpbnRlciwgc291cmNlQ2FjaGUsIGNvb3JkKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBwb3NNYXRyaXggPSBjb29yZC5wb3NNYXRyaXg7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgnZGVidWcnKTtcblxuICAgIGNvbnN0IGRlcHRoTW9kZSA9IERlcHRoTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgIGNvbnN0IGlkID0gJyRkZWJ1Zyc7XG5cbiAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuTElORV9TVFJJUCwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgIGRlYnVnVW5pZm9ybVZhbHVlcyhwb3NNYXRyaXgsIENvbG9yLnJlZCksIGlkLFxuICAgICAgICBwYWludGVyLmRlYnVnQnVmZmVyLCBwYWludGVyLnRpbGVCb3JkZXJJbmRleEJ1ZmZlciwgcGFpbnRlci5kZWJ1Z1NlZ21lbnRzKTtcblxuICAgIGNvbnN0IHRpbGVSYXdEYXRhID0gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoY29vcmQua2V5KS5sYXRlc3RSYXdUaWxlRGF0YTtcbiAgICBjb25zdCB0aWxlQnl0ZUxlbmd0aCA9ICh0aWxlUmF3RGF0YSAmJiB0aWxlUmF3RGF0YS5ieXRlTGVuZ3RoKSB8fCAwO1xuICAgIGNvbnN0IHRpbGVTaXplS2IgPSBNYXRoLmZsb29yKHRpbGVCeXRlTGVuZ3RoIC8gMTAyNCk7XG4gICAgY29uc3QgdGlsZVNpemUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKS50aWxlU2l6ZTtcbiAgICBjb25zdCBzY2FsZVJhdGlvID0gNTEyIC8gTWF0aC5taW4odGlsZVNpemUsIDUxMik7XG4gICAgY29uc3QgdmVydGljZXMgPSBjcmVhdGVUZXh0VmVydGljZXMoYCR7Y29vcmQudG9TdHJpbmcoKX0gJHt0aWxlU2l6ZUtifWtiYCwgNTAsIDIwMCAqIHNjYWxlUmF0aW8sIDUgKiBzY2FsZVJhdGlvKTtcbiAgICBjb25zdCBkZWJ1Z1RleHRBcnJheSA9IG5ldyBQb3NBcnJheSgpO1xuICAgIGNvbnN0IGRlYnVnVGV4dEluZGljZXMgPSBuZXcgTGluZUluZGV4QXJyYXkoKTtcbiAgICBmb3IgKGxldCB2ID0gMDsgdiA8IHZlcnRpY2VzLmxlbmd0aDsgdiArPSAyKSB7XG4gICAgICAgIGRlYnVnVGV4dEFycmF5LmVtcGxhY2VCYWNrKHZlcnRpY2VzW3ZdLCB2ZXJ0aWNlc1t2ICsgMV0pO1xuICAgICAgICBkZWJ1Z1RleHRJbmRpY2VzLmVtcGxhY2VCYWNrKHYsIHYgKyAxKTtcbiAgICB9XG4gICAgY29uc3QgZGVidWdUZXh0QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIoZGVidWdUZXh0QXJyYXksIHBvc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgY29uc3QgZGVidWdUZXh0SW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKGRlYnVnVGV4dEluZGljZXMpO1xuICAgIGNvbnN0IGRlYnVnVGV4dFNlZ21lbnQgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgZGVidWdUZXh0QXJyYXkubGVuZ3RoIC8gMiwgZGVidWdUZXh0QXJyYXkubGVuZ3RoIC8gMik7XG5cbiAgICAvLyBEcmF3IHRoZSBoYWxvIHdpdGggbXVsdGlwbGUgMXB4IGxpbmVzIGluc3RlYWQgb2Ygb25lIHdpZGVyIGxpbmUgYmVjYXVzZVxuICAgIC8vIHRoZSBnbCBzcGVjIGRvZXNuJ3QgZ3VhcmFudGVlIHN1cHBvcnQgZm9yIGxpbmVzIHdpdGggd2lkdGggPiAxLlxuICAgIGNvbnN0IG9uZVBpeGVsID0gRVhURU5UIC8gKE1hdGgucG93KDIsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20gLSBjb29yZC5vdmVyc2NhbGVkWikgKiB0aWxlU2l6ZSAqIHNjYWxlUmF0aW8pO1xuXG4gICAgY29uc3QgaGFsb1dpZHRoID0gMTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBbXTtcbiAgICBmb3IgKGxldCB4ID0gLWhhbG9XaWR0aDsgeCA8PSBoYWxvV2lkdGg7IHgrKykge1xuICAgICAgICBmb3IgKGxldCB5ID0gLWhhbG9XaWR0aDsgeSA8PSBoYWxvV2lkdGg7IHkrKykge1xuICAgICAgICAgICAgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGRvbid0IGRyYXcgdGhlIGhhbG8gYXQgMCwwIHNpbmNlIHRoZSB0ZXh0IGlzIGRyYXduIHRoZXJlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucy5wdXNoKFt4LCB5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyYW5zbGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uc1tpXTtcblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuTElORVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgZGVidWdVbmlmb3JtVmFsdWVzKFxuICAgICAgICAgICAgICAgIG1hdDQudHJhbnNsYXRlKFtdLCBwb3NNYXRyaXgsIFtcbiAgICAgICAgICAgICAgICAgICAgb25lUGl4ZWwgKiB0cmFuc2xhdGlvblswXSxcbiAgICAgICAgICAgICAgICAgICAgb25lUGl4ZWwgKiB0cmFuc2xhdGlvblsxXSwgMF0pLFxuICAgICAgICAgICAgICAgIENvbG9yLndoaXRlKSxcbiAgICAgICAgICAgIGlkLCBkZWJ1Z1RleHRCdWZmZXIsIGRlYnVnVGV4dEluZGV4QnVmZmVyLCBkZWJ1Z1RleHRTZWdtZW50KTtcbiAgICB9XG5cbiAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuTElORVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBkZWJ1Z1VuaWZvcm1WYWx1ZXMocG9zTWF0cml4LCBDb2xvci5ibGFjayksIGlkLFxuICAgICAgICBkZWJ1Z1RleHRCdWZmZXIsIGRlYnVnVGV4dEluZGV4QnVmZmVyLCBkZWJ1Z1RleHRTZWdtZW50KTtcblxuICAgIGRlYnVnVGV4dEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgZGVidWdUZXh0SW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIGRlYnVnVGV4dFNlZ21lbnQuZGVzdHJveSgpO1xufVxuXG4vLyBGb250IGRhdGEgRnJvbSBIZXJzaGV5IFNpbXBsZXggRm9udFxuLy8gaHR0cDovL3BhdWxib3Vya2UubmV0L2RhdGFmb3JtYXRzL2hlcnNoZXkvXG5jb25zdCBzaW1wbGV4Rm9udCA9IHtcbiAgICBcIiBcIjogWzE2LCBbXV0sXG4gICAgXCIhXCI6IFsxMCwgWzUsIDIxLCA1LCA3LCAtMSwgLTEsIDUsIDIsIDQsIDEsIDUsIDAsIDYsIDEsIDUsIDJdXSxcbiAgICBcIlxcXCJcIjogWzE2LCBbNCwgMjEsIDQsIDE0LCAtMSwgLTEsIDEyLCAyMSwgMTIsIDE0XV0sXG4gICAgXCIjXCI6IFsyMSwgWzExLCAyNSwgNCwgLTcsIC0xLCAtMSwgMTcsIDI1LCAxMCwgLTcsIC0xLCAtMSwgNCwgMTIsIDE4LCAxMiwgLTEsIC0xLCAzLCA2LCAxNywgNl1dLFxuICAgIFwiJFwiOiBbMjAsIFs4LCAyNSwgOCwgLTQsIC0xLCAtMSwgMTIsIDI1LCAxMiwgLTQsIC0xLCAtMSwgMTcsIDE4LCAxNSwgMjAsIDEyLCAyMSwgOCwgMjEsIDUsIDIwLCAzLCAxOCwgMywgMTYsIDQsIDE0LCA1LCAxMywgNywgMTIsIDEzLCAxMCwgMTUsIDksIDE2LCA4LCAxNywgNiwgMTcsIDMsIDE1LCAxLCAxMiwgMCwgOCwgMCwgNSwgMSwgMywgM11dLFxuICAgIFwiJVwiOiBbMjQsIFsyMSwgMjEsIDMsIDAsIC0xLCAtMSwgOCwgMjEsIDEwLCAxOSwgMTAsIDE3LCA5LCAxNSwgNywgMTQsIDUsIDE0LCAzLCAxNiwgMywgMTgsIDQsIDIwLCA2LCAyMSwgOCwgMjEsIDEwLCAyMCwgMTMsIDE5LCAxNiwgMTksIDE5LCAyMCwgMjEsIDIxLCAtMSwgLTEsIDE3LCA3LCAxNSwgNiwgMTQsIDQsIDE0LCAyLCAxNiwgMCwgMTgsIDAsIDIwLCAxLCAyMSwgMywgMjEsIDUsIDE5LCA3LCAxNywgN11dLFxuICAgIFwiJlwiOiBbMjYsIFsyMywgMTIsIDIzLCAxMywgMjIsIDE0LCAyMSwgMTQsIDIwLCAxMywgMTksIDExLCAxNywgNiwgMTUsIDMsIDEzLCAxLCAxMSwgMCwgNywgMCwgNSwgMSwgNCwgMiwgMywgNCwgMywgNiwgNCwgOCwgNSwgOSwgMTIsIDEzLCAxMywgMTQsIDE0LCAxNiwgMTQsIDE4LCAxMywgMjAsIDExLCAyMSwgOSwgMjAsIDgsIDE4LCA4LCAxNiwgOSwgMTMsIDExLCAxMCwgMTYsIDMsIDE4LCAxLCAyMCwgMCwgMjIsIDAsIDIzLCAxLCAyMywgMl1dLFxuICAgIFwiJ1wiOiBbMTAsIFs1LCAxOSwgNCwgMjAsIDUsIDIxLCA2LCAyMCwgNiwgMTgsIDUsIDE2LCA0LCAxNV1dLFxuICAgIFwiKFwiOiBbMTQsIFsxMSwgMjUsIDksIDIzLCA3LCAyMCwgNSwgMTYsIDQsIDExLCA0LCA3LCA1LCAyLCA3LCAtMiwgOSwgLTUsIDExLCAtN11dLFxuICAgIFwiKVwiOiBbMTQsIFszLCAyNSwgNSwgMjMsIDcsIDIwLCA5LCAxNiwgMTAsIDExLCAxMCwgNywgOSwgMiwgNywgLTIsIDUsIC01LCAzLCAtN11dLFxuICAgIFwiKlwiOiBbMTYsIFs4LCAyMSwgOCwgOSwgLTEsIC0xLCAzLCAxOCwgMTMsIDEyLCAtMSwgLTEsIDEzLCAxOCwgMywgMTJdXSxcbiAgICBcIitcIjogWzI2LCBbMTMsIDE4LCAxMywgMCwgLTEsIC0xLCA0LCA5LCAyMiwgOV1dLFxuICAgIFwiLFwiOiBbMTAsIFs2LCAxLCA1LCAwLCA0LCAxLCA1LCAyLCA2LCAxLCA2LCAtMSwgNSwgLTMsIDQsIC00XV0sXG4gICAgXCItXCI6IFsyNiwgWzQsIDksIDIyLCA5XV0sXG4gICAgXCIuXCI6IFsxMCwgWzUsIDIsIDQsIDEsIDUsIDAsIDYsIDEsIDUsIDJdXSxcbiAgICBcIi9cIjogWzIyLCBbMjAsIDI1LCAyLCAtN11dLFxuICAgIFwiMFwiOiBbMjAsIFs5LCAyMSwgNiwgMjAsIDQsIDE3LCAzLCAxMiwgMywgOSwgNCwgNCwgNiwgMSwgOSwgMCwgMTEsIDAsIDE0LCAxLCAxNiwgNCwgMTcsIDksIDE3LCAxMiwgMTYsIDE3LCAxNCwgMjAsIDExLCAyMSwgOSwgMjFdXSxcbiAgICBcIjFcIjogWzIwLCBbNiwgMTcsIDgsIDE4LCAxMSwgMjEsIDExLCAwXV0sXG4gICAgXCIyXCI6IFsyMCwgWzQsIDE2LCA0LCAxNywgNSwgMTksIDYsIDIwLCA4LCAyMSwgMTIsIDIxLCAxNCwgMjAsIDE1LCAxOSwgMTYsIDE3LCAxNiwgMTUsIDE1LCAxMywgMTMsIDEwLCAzLCAwLCAxNywgMF1dLFxuICAgIFwiM1wiOiBbMjAsIFs1LCAyMSwgMTYsIDIxLCAxMCwgMTMsIDEzLCAxMywgMTUsIDEyLCAxNiwgMTEsIDE3LCA4LCAxNywgNiwgMTYsIDMsIDE0LCAxLCAxMSwgMCwgOCwgMCwgNSwgMSwgNCwgMiwgMywgNF1dLFxuICAgIFwiNFwiOiBbMjAsIFsxMywgMjEsIDMsIDcsIDE4LCA3LCAtMSwgLTEsIDEzLCAyMSwgMTMsIDBdXSxcbiAgICBcIjVcIjogWzIwLCBbMTUsIDIxLCA1LCAyMSwgNCwgMTIsIDUsIDEzLCA4LCAxNCwgMTEsIDE0LCAxNCwgMTMsIDE2LCAxMSwgMTcsIDgsIDE3LCA2LCAxNiwgMywgMTQsIDEsIDExLCAwLCA4LCAwLCA1LCAxLCA0LCAyLCAzLCA0XV0sXG4gICAgXCI2XCI6IFsyMCwgWzE2LCAxOCwgMTUsIDIwLCAxMiwgMjEsIDEwLCAyMSwgNywgMjAsIDUsIDE3LCA0LCAxMiwgNCwgNywgNSwgMywgNywgMSwgMTAsIDAsIDExLCAwLCAxNCwgMSwgMTYsIDMsIDE3LCA2LCAxNywgNywgMTYsIDEwLCAxNCwgMTIsIDExLCAxMywgMTAsIDEzLCA3LCAxMiwgNSwgMTAsIDQsIDddXSxcbiAgICBcIjdcIjogWzIwLCBbMTcsIDIxLCA3LCAwLCAtMSwgLTEsIDMsIDIxLCAxNywgMjFdXSxcbiAgICBcIjhcIjogWzIwLCBbOCwgMjEsIDUsIDIwLCA0LCAxOCwgNCwgMTYsIDUsIDE0LCA3LCAxMywgMTEsIDEyLCAxNCwgMTEsIDE2LCA5LCAxNywgNywgMTcsIDQsIDE2LCAyLCAxNSwgMSwgMTIsIDAsIDgsIDAsIDUsIDEsIDQsIDIsIDMsIDQsIDMsIDcsIDQsIDksIDYsIDExLCA5LCAxMiwgMTMsIDEzLCAxNSwgMTQsIDE2LCAxNiwgMTYsIDE4LCAxNSwgMjAsIDEyLCAyMSwgOCwgMjFdXSxcbiAgICBcIjlcIjogWzIwLCBbMTYsIDE0LCAxNSwgMTEsIDEzLCA5LCAxMCwgOCwgOSwgOCwgNiwgOSwgNCwgMTEsIDMsIDE0LCAzLCAxNSwgNCwgMTgsIDYsIDIwLCA5LCAyMSwgMTAsIDIxLCAxMywgMjAsIDE1LCAxOCwgMTYsIDE0LCAxNiwgOSwgMTUsIDQsIDEzLCAxLCAxMCwgMCwgOCwgMCwgNSwgMSwgNCwgM11dLFxuICAgIFwiOlwiOiBbMTAsIFs1LCAxNCwgNCwgMTMsIDUsIDEyLCA2LCAxMywgNSwgMTQsIC0xLCAtMSwgNSwgMiwgNCwgMSwgNSwgMCwgNiwgMSwgNSwgMl1dLFxuICAgIFwiO1wiOiBbMTAsIFs1LCAxNCwgNCwgMTMsIDUsIDEyLCA2LCAxMywgNSwgMTQsIC0xLCAtMSwgNiwgMSwgNSwgMCwgNCwgMSwgNSwgMiwgNiwgMSwgNiwgLTEsIDUsIC0zLCA0LCAtNF1dLFxuICAgIFwiPFwiOiBbMjQsIFsyMCwgMTgsIDQsIDksIDIwLCAwXV0sXG4gICAgXCI9XCI6IFsyNiwgWzQsIDEyLCAyMiwgMTIsIC0xLCAtMSwgNCwgNiwgMjIsIDZdXSxcbiAgICBcIj5cIjogWzI0LCBbNCwgMTgsIDIwLCA5LCA0LCAwXV0sXG4gICAgXCI/XCI6IFsxOCwgWzMsIDE2LCAzLCAxNywgNCwgMTksIDUsIDIwLCA3LCAyMSwgMTEsIDIxLCAxMywgMjAsIDE0LCAxOSwgMTUsIDE3LCAxNSwgMTUsIDE0LCAxMywgMTMsIDEyLCA5LCAxMCwgOSwgNywgLTEsIC0xLCA5LCAyLCA4LCAxLCA5LCAwLCAxMCwgMSwgOSwgMl1dLFxuICAgIFwiQFwiOiBbMjcsIFsxOCwgMTMsIDE3LCAxNSwgMTUsIDE2LCAxMiwgMTYsIDEwLCAxNSwgOSwgMTQsIDgsIDExLCA4LCA4LCA5LCA2LCAxMSwgNSwgMTQsIDUsIDE2LCA2LCAxNywgOCwgLTEsIC0xLCAxMiwgMTYsIDEwLCAxNCwgOSwgMTEsIDksIDgsIDEwLCA2LCAxMSwgNSwgLTEsIC0xLCAxOCwgMTYsIDE3LCA4LCAxNywgNiwgMTksIDUsIDIxLCA1LCAyMywgNywgMjQsIDEwLCAyNCwgMTIsIDIzLCAxNSwgMjIsIDE3LCAyMCwgMTksIDE4LCAyMCwgMTUsIDIxLCAxMiwgMjEsIDksIDIwLCA3LCAxOSwgNSwgMTcsIDQsIDE1LCAzLCAxMiwgMywgOSwgNCwgNiwgNSwgNCwgNywgMiwgOSwgMSwgMTIsIDAsIDE1LCAwLCAxOCwgMSwgMjAsIDIsIDIxLCAzLCAtMSwgLTEsIDE5LCAxNiwgMTgsIDgsIDE4LCA2LCAxOSwgNV1dLFxuICAgIFwiQVwiOiBbMTgsIFs5LCAyMSwgMSwgMCwgLTEsIC0xLCA5LCAyMSwgMTcsIDAsIC0xLCAtMSwgNCwgNywgMTQsIDddXSxcbiAgICBcIkJcIjogWzIxLCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMjEsIDEzLCAyMSwgMTYsIDIwLCAxNywgMTksIDE4LCAxNywgMTgsIDE1LCAxNywgMTMsIDE2LCAxMiwgMTMsIDExLCAtMSwgLTEsIDQsIDExLCAxMywgMTEsIDE2LCAxMCwgMTcsIDksIDE4LCA3LCAxOCwgNCwgMTcsIDIsIDE2LCAxLCAxMywgMCwgNCwgMF1dLFxuICAgIFwiQ1wiOiBbMjEsIFsxOCwgMTYsIDE3LCAxOCwgMTUsIDIwLCAxMywgMjEsIDksIDIxLCA3LCAyMCwgNSwgMTgsIDQsIDE2LCAzLCAxMywgMywgOCwgNCwgNSwgNSwgMywgNywgMSwgOSwgMCwgMTMsIDAsIDE1LCAxLCAxNywgMywgMTgsIDVdXSxcbiAgICBcIkRcIjogWzIxLCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMjEsIDExLCAyMSwgMTQsIDIwLCAxNiwgMTgsIDE3LCAxNiwgMTgsIDEzLCAxOCwgOCwgMTcsIDUsIDE2LCAzLCAxNCwgMSwgMTEsIDAsIDQsIDBdXSxcbiAgICBcIkVcIjogWzE5LCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMjEsIDE3LCAyMSwgLTEsIC0xLCA0LCAxMSwgMTIsIDExLCAtMSwgLTEsIDQsIDAsIDE3LCAwXV0sXG4gICAgXCJGXCI6IFsxOCwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxNywgMjEsIC0xLCAtMSwgNCwgMTEsIDEyLCAxMV1dLFxuICAgIFwiR1wiOiBbMjEsIFsxOCwgMTYsIDE3LCAxOCwgMTUsIDIwLCAxMywgMjEsIDksIDIxLCA3LCAyMCwgNSwgMTgsIDQsIDE2LCAzLCAxMywgMywgOCwgNCwgNSwgNSwgMywgNywgMSwgOSwgMCwgMTMsIDAsIDE1LCAxLCAxNywgMywgMTgsIDUsIDE4LCA4LCAtMSwgLTEsIDEzLCA4LCAxOCwgOF1dLFxuICAgIFwiSFwiOiBbMjIsIFs0LCAyMSwgNCwgMCwgLTEsIC0xLCAxOCwgMjEsIDE4LCAwLCAtMSwgLTEsIDQsIDExLCAxOCwgMTFdXSxcbiAgICBcIklcIjogWzgsIFs0LCAyMSwgNCwgMF1dLFxuICAgIFwiSlwiOiBbMTYsIFsxMiwgMjEsIDEyLCA1LCAxMSwgMiwgMTAsIDEsIDgsIDAsIDYsIDAsIDQsIDEsIDMsIDIsIDIsIDUsIDIsIDddXSxcbiAgICBcIktcIjogWzIxLCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgMTgsIDIxLCA0LCA3LCAtMSwgLTEsIDksIDEyLCAxOCwgMF1dLFxuICAgIFwiTFwiOiBbMTcsIFs0LCAyMSwgNCwgMCwgLTEsIC0xLCA0LCAwLCAxNiwgMF1dLFxuICAgIFwiTVwiOiBbMjQsIFs0LCAyMSwgNCwgMCwgLTEsIC0xLCA0LCAyMSwgMTIsIDAsIC0xLCAtMSwgMjAsIDIxLCAxMiwgMCwgLTEsIC0xLCAyMCwgMjEsIDIwLCAwXV0sXG4gICAgXCJOXCI6IFsyMiwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxOCwgMCwgLTEsIC0xLCAxOCwgMjEsIDE4LCAwXV0sXG4gICAgXCJPXCI6IFsyMiwgWzksIDIxLCA3LCAyMCwgNSwgMTgsIDQsIDE2LCAzLCAxMywgMywgOCwgNCwgNSwgNSwgMywgNywgMSwgOSwgMCwgMTMsIDAsIDE1LCAxLCAxNywgMywgMTgsIDUsIDE5LCA4LCAxOSwgMTMsIDE4LCAxNiwgMTcsIDE4LCAxNSwgMjAsIDEzLCAyMSwgOSwgMjFdXSxcbiAgICBcIlBcIjogWzIxLCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMjEsIDEzLCAyMSwgMTYsIDIwLCAxNywgMTksIDE4LCAxNywgMTgsIDE0LCAxNywgMTIsIDE2LCAxMSwgMTMsIDEwLCA0LCAxMF1dLFxuICAgIFwiUVwiOiBbMjIsIFs5LCAyMSwgNywgMjAsIDUsIDE4LCA0LCAxNiwgMywgMTMsIDMsIDgsIDQsIDUsIDUsIDMsIDcsIDEsIDksIDAsIDEzLCAwLCAxNSwgMSwgMTcsIDMsIDE4LCA1LCAxOSwgOCwgMTksIDEzLCAxOCwgMTYsIDE3LCAxOCwgMTUsIDIwLCAxMywgMjEsIDksIDIxLCAtMSwgLTEsIDEyLCA0LCAxOCwgLTJdXSxcbiAgICBcIlJcIjogWzIxLCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMjEsIDEzLCAyMSwgMTYsIDIwLCAxNywgMTksIDE4LCAxNywgMTgsIDE1LCAxNywgMTMsIDE2LCAxMiwgMTMsIDExLCA0LCAxMSwgLTEsIC0xLCAxMSwgMTEsIDE4LCAwXV0sXG4gICAgXCJTXCI6IFsyMCwgWzE3LCAxOCwgMTUsIDIwLCAxMiwgMjEsIDgsIDIxLCA1LCAyMCwgMywgMTgsIDMsIDE2LCA0LCAxNCwgNSwgMTMsIDcsIDEyLCAxMywgMTAsIDE1LCA5LCAxNiwgOCwgMTcsIDYsIDE3LCAzLCAxNSwgMSwgMTIsIDAsIDgsIDAsIDUsIDEsIDMsIDNdXSxcbiAgICBcIlRcIjogWzE2LCBbOCwgMjEsIDgsIDAsIC0xLCAtMSwgMSwgMjEsIDE1LCAyMV1dLFxuICAgIFwiVVwiOiBbMjIsIFs0LCAyMSwgNCwgNiwgNSwgMywgNywgMSwgMTAsIDAsIDEyLCAwLCAxNSwgMSwgMTcsIDMsIDE4LCA2LCAxOCwgMjFdXSxcbiAgICBcIlZcIjogWzE4LCBbMSwgMjEsIDksIDAsIC0xLCAtMSwgMTcsIDIxLCA5LCAwXV0sXG4gICAgXCJXXCI6IFsyNCwgWzIsIDIxLCA3LCAwLCAtMSwgLTEsIDEyLCAyMSwgNywgMCwgLTEsIC0xLCAxMiwgMjEsIDE3LCAwLCAtMSwgLTEsIDIyLCAyMSwgMTcsIDBdXSxcbiAgICBcIlhcIjogWzIwLCBbMywgMjEsIDE3LCAwLCAtMSwgLTEsIDE3LCAyMSwgMywgMF1dLFxuICAgIFwiWVwiOiBbMTgsIFsxLCAyMSwgOSwgMTEsIDksIDAsIC0xLCAtMSwgMTcsIDIxLCA5LCAxMV1dLFxuICAgIFwiWlwiOiBbMjAsIFsxNywgMjEsIDMsIDAsIC0xLCAtMSwgMywgMjEsIDE3LCAyMSwgLTEsIC0xLCAzLCAwLCAxNywgMF1dLFxuICAgIFwiW1wiOiBbMTQsIFs0LCAyNSwgNCwgLTcsIC0xLCAtMSwgNSwgMjUsIDUsIC03LCAtMSwgLTEsIDQsIDI1LCAxMSwgMjUsIC0xLCAtMSwgNCwgLTcsIDExLCAtN11dLFxuICAgIFwiXFxcXFwiOiBbMTQsIFswLCAyMSwgMTQsIC0zXV0sXG4gICAgXCJdXCI6IFsxNCwgWzksIDI1LCA5LCAtNywgLTEsIC0xLCAxMCwgMjUsIDEwLCAtNywgLTEsIC0xLCAzLCAyNSwgMTAsIDI1LCAtMSwgLTEsIDMsIC03LCAxMCwgLTddXSxcbiAgICBcIl5cIjogWzE2LCBbNiwgMTUsIDgsIDE4LCAxMCwgMTUsIC0xLCAtMSwgMywgMTIsIDgsIDE3LCAxMywgMTIsIC0xLCAtMSwgOCwgMTcsIDgsIDBdXSxcbiAgICBcIl9cIjogWzE2LCBbMCwgLTIsIDE2LCAtMl1dLFxuICAgIFwiYFwiOiBbMTAsIFs2LCAyMSwgNSwgMjAsIDQsIDE4LCA0LCAxNiwgNSwgMTUsIDYsIDE2LCA1LCAxN11dLFxuICAgIFwiYVwiOiBbMTksIFsxNSwgMTQsIDE1LCAwLCAtMSwgLTEsIDE1LCAxMSwgMTMsIDEzLCAxMSwgMTQsIDgsIDE0LCA2LCAxMywgNCwgMTEsIDMsIDgsIDMsIDYsIDQsIDMsIDYsIDEsIDgsIDAsIDExLCAwLCAxMywgMSwgMTUsIDNdXSxcbiAgICBcImJcIjogWzE5LCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMTEsIDYsIDEzLCA4LCAxNCwgMTEsIDE0LCAxMywgMTMsIDE1LCAxMSwgMTYsIDgsIDE2LCA2LCAxNSwgMywgMTMsIDEsIDExLCAwLCA4LCAwLCA2LCAxLCA0LCAzXV0sXG4gICAgXCJjXCI6IFsxOCwgWzE1LCAxMSwgMTMsIDEzLCAxMSwgMTQsIDgsIDE0LCA2LCAxMywgNCwgMTEsIDMsIDgsIDMsIDYsIDQsIDMsIDYsIDEsIDgsIDAsIDExLCAwLCAxMywgMSwgMTUsIDNdXSxcbiAgICBcImRcIjogWzE5LCBbMTUsIDIxLCAxNSwgMCwgLTEsIC0xLCAxNSwgMTEsIDEzLCAxMywgMTEsIDE0LCA4LCAxNCwgNiwgMTMsIDQsIDExLCAzLCA4LCAzLCA2LCA0LCAzLCA2LCAxLCA4LCAwLCAxMSwgMCwgMTMsIDEsIDE1LCAzXV0sXG4gICAgXCJlXCI6IFsxOCwgWzMsIDgsIDE1LCA4LCAxNSwgMTAsIDE0LCAxMiwgMTMsIDEzLCAxMSwgMTQsIDgsIDE0LCA2LCAxMywgNCwgMTEsIDMsIDgsIDMsIDYsIDQsIDMsIDYsIDEsIDgsIDAsIDExLCAwLCAxMywgMSwgMTUsIDNdXSxcbiAgICBcImZcIjogWzEyLCBbMTAsIDIxLCA4LCAyMSwgNiwgMjAsIDUsIDE3LCA1LCAwLCAtMSwgLTEsIDIsIDE0LCA5LCAxNF1dLFxuICAgIFwiZ1wiOiBbMTksIFsxNSwgMTQsIDE1LCAtMiwgMTQsIC01LCAxMywgLTYsIDExLCAtNywgOCwgLTcsIDYsIC02LCAtMSwgLTEsIDE1LCAxMSwgMTMsIDEzLCAxMSwgMTQsIDgsIDE0LCA2LCAxMywgNCwgMTEsIDMsIDgsIDMsIDYsIDQsIDMsIDYsIDEsIDgsIDAsIDExLCAwLCAxMywgMSwgMTUsIDNdXSxcbiAgICBcImhcIjogWzE5LCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMTAsIDcsIDEzLCA5LCAxNCwgMTIsIDE0LCAxNCwgMTMsIDE1LCAxMCwgMTUsIDBdXSxcbiAgICBcImlcIjogWzgsIFszLCAyMSwgNCwgMjAsIDUsIDIxLCA0LCAyMiwgMywgMjEsIC0xLCAtMSwgNCwgMTQsIDQsIDBdXSxcbiAgICBcImpcIjogWzEwLCBbNSwgMjEsIDYsIDIwLCA3LCAyMSwgNiwgMjIsIDUsIDIxLCAtMSwgLTEsIDYsIDE0LCA2LCAtMywgNSwgLTYsIDMsIC03LCAxLCAtN11dLFxuICAgIFwia1wiOiBbMTcsIFs0LCAyMSwgNCwgMCwgLTEsIC0xLCAxNCwgMTQsIDQsIDQsIC0xLCAtMSwgOCwgOCwgMTUsIDBdXSxcbiAgICBcImxcIjogWzgsIFs0LCAyMSwgNCwgMF1dLFxuICAgIFwibVwiOiBbMzAsIFs0LCAxNCwgNCwgMCwgLTEsIC0xLCA0LCAxMCwgNywgMTMsIDksIDE0LCAxMiwgMTQsIDE0LCAxMywgMTUsIDEwLCAxNSwgMCwgLTEsIC0xLCAxNSwgMTAsIDE4LCAxMywgMjAsIDE0LCAyMywgMTQsIDI1LCAxMywgMjYsIDEwLCAyNiwgMF1dLFxuICAgIFwiblwiOiBbMTksIFs0LCAxNCwgNCwgMCwgLTEsIC0xLCA0LCAxMCwgNywgMTMsIDksIDE0LCAxMiwgMTQsIDE0LCAxMywgMTUsIDEwLCAxNSwgMF1dLFxuICAgIFwib1wiOiBbMTksIFs4LCAxNCwgNiwgMTMsIDQsIDExLCAzLCA4LCAzLCA2LCA0LCAzLCA2LCAxLCA4LCAwLCAxMSwgMCwgMTMsIDEsIDE1LCAzLCAxNiwgNiwgMTYsIDgsIDE1LCAxMSwgMTMsIDEzLCAxMSwgMTQsIDgsIDE0XV0sXG4gICAgXCJwXCI6IFsxOSwgWzQsIDE0LCA0LCAtNywgLTEsIC0xLCA0LCAxMSwgNiwgMTMsIDgsIDE0LCAxMSwgMTQsIDEzLCAxMywgMTUsIDExLCAxNiwgOCwgMTYsIDYsIDE1LCAzLCAxMywgMSwgMTEsIDAsIDgsIDAsIDYsIDEsIDQsIDNdXSxcbiAgICBcInFcIjogWzE5LCBbMTUsIDE0LCAxNSwgLTcsIC0xLCAtMSwgMTUsIDExLCAxMywgMTMsIDExLCAxNCwgOCwgMTQsIDYsIDEzLCA0LCAxMSwgMywgOCwgMywgNiwgNCwgMywgNiwgMSwgOCwgMCwgMTEsIDAsIDEzLCAxLCAxNSwgM11dLFxuICAgIFwiclwiOiBbMTMsIFs0LCAxNCwgNCwgMCwgLTEsIC0xLCA0LCA4LCA1LCAxMSwgNywgMTMsIDksIDE0LCAxMiwgMTRdXSxcbiAgICBcInNcIjogWzE3LCBbMTQsIDExLCAxMywgMTMsIDEwLCAxNCwgNywgMTQsIDQsIDEzLCAzLCAxMSwgNCwgOSwgNiwgOCwgMTEsIDcsIDEzLCA2LCAxNCwgNCwgMTQsIDMsIDEzLCAxLCAxMCwgMCwgNywgMCwgNCwgMSwgMywgM11dLFxuICAgIFwidFwiOiBbMTIsIFs1LCAyMSwgNSwgNCwgNiwgMSwgOCwgMCwgMTAsIDAsIC0xLCAtMSwgMiwgMTQsIDksIDE0XV0sXG4gICAgXCJ1XCI6IFsxOSwgWzQsIDE0LCA0LCA0LCA1LCAxLCA3LCAwLCAxMCwgMCwgMTIsIDEsIDE1LCA0LCAtMSwgLTEsIDE1LCAxNCwgMTUsIDBdXSxcbiAgICBcInZcIjogWzE2LCBbMiwgMTQsIDgsIDAsIC0xLCAtMSwgMTQsIDE0LCA4LCAwXV0sXG4gICAgXCJ3XCI6IFsyMiwgWzMsIDE0LCA3LCAwLCAtMSwgLTEsIDExLCAxNCwgNywgMCwgLTEsIC0xLCAxMSwgMTQsIDE1LCAwLCAtMSwgLTEsIDE5LCAxNCwgMTUsIDBdXSxcbiAgICBcInhcIjogWzE3LCBbMywgMTQsIDE0LCAwLCAtMSwgLTEsIDE0LCAxNCwgMywgMF1dLFxuICAgIFwieVwiOiBbMTYsIFsyLCAxNCwgOCwgMCwgLTEsIC0xLCAxNCwgMTQsIDgsIDAsIDYsIC00LCA0LCAtNiwgMiwgLTcsIDEsIC03XV0sXG4gICAgXCJ6XCI6IFsxNywgWzE0LCAxNCwgMywgMCwgLTEsIC0xLCAzLCAxNCwgMTQsIDE0LCAtMSwgLTEsIDMsIDAsIDE0LCAwXV0sXG4gICAgXCJ7XCI6IFsxNCwgWzksIDI1LCA3LCAyNCwgNiwgMjMsIDUsIDIxLCA1LCAxOSwgNiwgMTcsIDcsIDE2LCA4LCAxNCwgOCwgMTIsIDYsIDEwLCAtMSwgLTEsIDcsIDI0LCA2LCAyMiwgNiwgMjAsIDcsIDE4LCA4LCAxNywgOSwgMTUsIDksIDEzLCA4LCAxMSwgNCwgOSwgOCwgNywgOSwgNSwgOSwgMywgOCwgMSwgNywgMCwgNiwgLTIsIDYsIC00LCA3LCAtNiwgLTEsIC0xLCA2LCA4LCA4LCA2LCA4LCA0LCA3LCAyLCA2LCAxLCA1LCAtMSwgNSwgLTMsIDYsIC01LCA3LCAtNiwgOSwgLTddXSxcbiAgICBcInxcIjogWzgsIFs0LCAyNSwgNCwgLTddXSxcbiAgICBcIn1cIjogWzE0LCBbNSwgMjUsIDcsIDI0LCA4LCAyMywgOSwgMjEsIDksIDE5LCA4LCAxNywgNywgMTYsIDYsIDE0LCA2LCAxMiwgOCwgMTAsIC0xLCAtMSwgNywgMjQsIDgsIDIyLCA4LCAyMCwgNywgMTgsIDYsIDE3LCA1LCAxNSwgNSwgMTMsIDYsIDExLCAxMCwgOSwgNiwgNywgNSwgNSwgNSwgMywgNiwgMSwgNywgMCwgOCwgLTIsIDgsIC00LCA3LCAtNiwgLTEsIC0xLCA4LCA4LCA2LCA2LCA2LCA0LCA3LCAyLCA4LCAxLCA5LCAtMSwgOSwgLTMsIDgsIC01LCA3LCAtNiwgNSwgLTddXSxcbiAgICBcIn5cIjogWzI0LCBbMywgNiwgMywgOCwgNCwgMTEsIDYsIDEyLCA4LCAxMiwgMTAsIDExLCAxNCwgOCwgMTYsIDcsIDE4LCA3LCAyMCwgOCwgMjEsIDEwLCAtMSwgLTEsIDMsIDgsIDQsIDEwLCA2LCAxMSwgOCwgMTEsIDEwLCAxMCwgMTQsIDcsIDE2LCA2LCAxOCwgNiwgMjAsIDcsIDIxLCAxMCwgMjEsIDEyXV1cbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHRWZXJ0aWNlcyh0ZXh0LCBsZWZ0LCBiYXNlbGluZSwgc2NhbGUpIHtcbiAgICBzY2FsZSA9IHNjYWxlIHx8IDE7XG5cbiAgICBjb25zdCBzdHJva2VzID0gW107XG4gICAgbGV0IGksIGxlbiwgaiwgbGVuMiwgZ2x5cGgsIHgsIHksIHByZXY7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSB0ZXh0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGdseXBoID0gc2ltcGxleEZvbnRbdGV4dFtpXV07XG4gICAgICAgIGlmICghZ2x5cGgpIGNvbnRpbnVlO1xuICAgICAgICBwcmV2ID0gbnVsbDtcblxuICAgICAgICBmb3IgKGogPSAwLCBsZW4yID0gZ2x5cGhbMV0ubGVuZ3RoOyBqIDwgbGVuMjsgaiArPSAyKSB7XG4gICAgICAgICAgICBpZiAoZ2x5cGhbMV1bal0gPT09IC0xICYmIGdseXBoWzFdW2ogKyAxXSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBwcmV2ID0gbnVsbDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB4ID0gbGVmdCArIGdseXBoWzFdW2pdICogc2NhbGU7XG4gICAgICAgICAgICAgICAgeSA9IGJhc2VsaW5lIC0gZ2x5cGhbMV1baiArIDFdICogc2NhbGU7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlcy5wdXNoKHByZXYueCwgcHJldi55LCB4LCB5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJldiA9IHt4LCB5fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZWZ0ICs9IGdseXBoWzBdICogc2NhbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cm9rZXM7XG59XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3Q3VzdG9tO1xuXG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgQ3VzdG9tU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuXG5mdW5jdGlvbiBkcmF3Q3VzdG9tKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEN1c3RvbVN0eWxlTGF5ZXIpIHtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgaW1wbGVtZW50YXRpb24gPSBsYXllci5pbXBsZW1lbnRhdGlvbjtcblxuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICdvZmZzY3JlZW4nKSB7XG5cbiAgICAgICAgY29uc3QgcHJlcmVuZGVyID0gaW1wbGVtZW50YXRpb24ucHJlcmVuZGVyO1xuICAgICAgICBpZiAocHJlcmVuZGVyKSB7XG4gICAgICAgICAgICBwYWludGVyLnNldEN1c3RvbUxheWVyRGVmYXVsdHMoKTtcbiAgICAgICAgICAgIGNvbnRleHQuc2V0Q29sb3JNb2RlKHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtcblxuICAgICAgICAgICAgcHJlcmVuZGVyLmNhbGwoaW1wbGVtZW50YXRpb24sIGNvbnRleHQuZ2wsIHBhaW50ZXIudHJhbnNmb3JtLmN1c3RvbUxheWVyTWF0cml4KCkpO1xuXG4gICAgICAgICAgICBjb250ZXh0LnNldERpcnR5KCk7XG4gICAgICAgICAgICBwYWludGVyLnNldEJhc2VTdGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50Jykge1xuXG4gICAgICAgIHBhaW50ZXIuc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpO1xuXG4gICAgICAgIGNvbnRleHQuc2V0Q29sb3JNb2RlKHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtcbiAgICAgICAgY29udGV4dC5zZXRTdGVuY2lsTW9kZShTdGVuY2lsTW9kZS5kaXNhYmxlZCk7XG5cbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gaW1wbGVtZW50YXRpb24ucmVuZGVyaW5nTW9kZSA9PT0gJzNkJyA/XG4gICAgICAgICAgICBuZXcgRGVwdGhNb2RlKHBhaW50ZXIuY29udGV4dC5nbC5MRVFVQUwsIERlcHRoTW9kZS5SZWFkV3JpdGUsIHBhaW50ZXIuZGVwdGhSYW5nZUZvcjNEKSA6XG4gICAgICAgICAgICBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG5cbiAgICAgICAgY29udGV4dC5zZXREZXB0aE1vZGUoZGVwdGhNb2RlKTtcblxuICAgICAgICBpbXBsZW1lbnRhdGlvbi5yZW5kZXIoY29udGV4dC5nbCwgcGFpbnRlci50cmFuc2Zvcm0uY3VzdG9tTGF5ZXJNYXRyaXgoKSk7XG5cbiAgICAgICAgY29udGV4dC5zZXREaXJ0eSgpO1xuICAgICAgICBwYWludGVyLnNldEJhc2VTdGF0ZSgpO1xuICAgICAgICBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQobnVsbCk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQge1Jhc3RlckJvdW5kc0FycmF5LCBQb3NBcnJheSwgVHJpYW5nbGVJbmRleEFycmF5LCBMaW5lU3RyaXBJbmRleEFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBwb3NBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcG9zX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFByb2dyYW1Db25maWd1cmF0aW9uIGZyb20gJy4uL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCBDcm9zc1RpbGVTeW1ib2xJbmRleCBmcm9tICcuLi9zeW1ib2wvY3Jvc3NfdGlsZV9zeW1ib2xfaW5kZXgnO1xuaW1wb3J0ICogYXMgc2hhZGVycyBmcm9tICcuLi9zaGFkZXJzJztcbmltcG9ydCBQcm9ncmFtIGZyb20gJy4vcHJvZ3JhbSc7XG5pbXBvcnQge3Byb2dyYW1Vbmlmb3Jtc30gZnJvbSAnLi9wcm9ncmFtL3Byb2dyYW1fdW5pZm9ybXMnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IHVwZGF0ZVRpbGVNYXNrcyBmcm9tICcuL3RpbGVfbWFzayc7XG5pbXBvcnQge2NsaXBwaW5nTWFza1VuaWZvcm1WYWx1ZXN9IGZyb20gJy4vcHJvZ3JhbS9jbGlwcGluZ19tYXNrX3Byb2dyYW0nO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgc3ltYm9sIGZyb20gJy4vZHJhd19zeW1ib2wnO1xuaW1wb3J0IGNpcmNsZSBmcm9tICcuL2RyYXdfY2lyY2xlJztcbmltcG9ydCBoZWF0bWFwIGZyb20gJy4vZHJhd19oZWF0bWFwJztcbmltcG9ydCBsaW5lIGZyb20gJy4vZHJhd19saW5lJztcbmltcG9ydCBmaWxsIGZyb20gJy4vZHJhd19maWxsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uIGZyb20gJy4vZHJhd19maWxsX2V4dHJ1c2lvbic7XG5pbXBvcnQgaGlsbHNoYWRlIGZyb20gJy4vZHJhd19oaWxsc2hhZGUnO1xuaW1wb3J0IHJhc3RlciBmcm9tICcuL2RyYXdfcmFzdGVyJztcbmltcG9ydCBiYWNrZ3JvdW5kIGZyb20gJy4vZHJhd19iYWNrZ3JvdW5kJztcbmltcG9ydCBkZWJ1ZyBmcm9tICcuL2RyYXdfZGVidWcnO1xuaW1wb3J0IGN1c3RvbSBmcm9tICcuL2RyYXdfY3VzdG9tJztcblxuY29uc3QgZHJhdyA9IHtcbiAgICBzeW1ib2wsXG4gICAgY2lyY2xlLFxuICAgIGhlYXRtYXAsXG4gICAgbGluZSxcbiAgICBmaWxsLFxuICAgICdmaWxsLWV4dHJ1c2lvbic6IGZpbGxFeHRydXNpb24sXG4gICAgaGlsbHNoYWRlLFxuICAgIHJhc3RlcixcbiAgICBiYWNrZ3JvdW5kLFxuICAgIGRlYnVnLFxuICAgIGN1c3RvbVxufTtcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBMaW5lQXRsYXMgZnJvbSAnLi9saW5lX2F0bGFzJztcbmltcG9ydCB0eXBlIEltYWdlTWFuYWdlciBmcm9tICcuL2ltYWdlX21hbmFnZXInO1xuaW1wb3J0IHR5cGUgR2x5cGhNYW5hZ2VyIGZyb20gJy4vZ2x5cGhfbWFuYWdlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge0RlcHRoUmFuZ2VUeXBlLCBEZXB0aE1hc2tUeXBlLCBEZXB0aEZ1bmNUeXBlfSBmcm9tICcuLi9nbC90eXBlcyc7XG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIFJlbmRlclBhc3MgPSAnb2Zmc2NyZWVuJyB8ICdvcGFxdWUnIHwgJ3RyYW5zbHVjZW50JztcblxudHlwZSBQYWludGVyT3B0aW9ucyA9IHtcbiAgICBzaG93T3ZlcmRyYXdJbnNwZWN0b3I6IGJvb2xlYW4sXG4gICAgc2hvd1RpbGVCb3VuZGFyaWVzOiBib29sZWFuLFxuICAgIHJvdGF0aW5nOiBib29sZWFuLFxuICAgIHpvb21pbmc6IGJvb2xlYW4sXG4gICAgbW92aW5nOiBib29sZWFuLFxuICAgIGZhZGVEdXJhdGlvbjogbnVtYmVyXG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBwYWludGVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0NhbnZhc30gZ2wgYW4gZXhwZXJpbWVudGFsLXdlYmdsIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgUGFpbnRlciB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybTtcbiAgICBfdGlsZVRleHR1cmVzOiB7IFtudW1iZXJdOiBBcnJheTxUZXh0dXJlPiB9O1xuICAgIG51bVN1YmxheWVyczogbnVtYmVyO1xuICAgIGRlcHRoRXBzaWxvbjogbnVtYmVyO1xuICAgIGVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb246IFByb2dyYW1Db25maWd1cmF0aW9uO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgZGVwdGhSYm86IFdlYkdMUmVuZGVyYnVmZmVyO1xuICAgIGRlcHRoUmJvTmVlZHNDbGVhcjogYm9vbGVhbjtcbiAgICB0aWxlRXh0ZW50QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG4gICAgdGlsZUV4dGVudFNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIGRlYnVnQnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG4gICAgZGVidWdTZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICByYXN0ZXJCb3VuZHNCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcbiAgICByYXN0ZXJCb3VuZHNTZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICB2aWV3cG9ydEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIHZpZXdwb3J0U2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgcXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuICAgIHRpbGVCb3JkZXJJbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG4gICAgX3RpbGVDbGlwcGluZ01hc2tJRHM6IHsgW251bWJlcl06IG51bWJlciB9O1xuICAgIHN0ZW5jaWxDbGVhck1vZGU6IFN0ZW5jaWxNb2RlO1xuICAgIHN0eWxlOiBTdHlsZTtcbiAgICBvcHRpb25zOiBQYWludGVyT3B0aW9ucztcbiAgICBsaW5lQXRsYXM6IExpbmVBdGxhcztcbiAgICBpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlcjtcbiAgICBnbHlwaE1hbmFnZXI6IEdseXBoTWFuYWdlcjtcbiAgICBkZXB0aFJhbmdlRm9yM0Q6IERlcHRoUmFuZ2VUeXBlO1xuICAgIG9wYXF1ZVBhc3NDdXRvZmY6IG51bWJlcjtcbiAgICByZW5kZXJQYXNzOiBSZW5kZXJQYXNzO1xuICAgIGN1cnJlbnRMYXllcjogbnVtYmVyO1xuICAgIGN1cnJlbnRTdGVuY2lsU291cmNlOiA/c3RyaW5nO1xuICAgIG5leHRTdGVuY2lsSUQ6IG51bWJlcjtcbiAgICBpZDogc3RyaW5nO1xuICAgIF9zaG93T3ZlcmRyYXdJbnNwZWN0b3I6IGJvb2xlYW47XG4gICAgY2FjaGU6IHsgW3N0cmluZ106IFByb2dyYW08Kj4gfTtcbiAgICBjcm9zc1RpbGVTeW1ib2xJbmRleDogQ3Jvc3NUaWxlU3ltYm9sSW5kZXg7XG4gICAgc3ltYm9sRmFkZUNoYW5nZTogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgdHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbmV3IENvbnRleHQoZ2wpO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgICAgdGhpcy5fdGlsZVRleHR1cmVzID0ge307XG5cbiAgICAgICAgdGhpcy5zZXR1cCgpO1xuXG4gICAgICAgIC8vIFdpdGhpbiBlYWNoIGxheWVyIHRoZXJlIGFyZSBtdWx0aXBsZSBkaXN0aW5jdCB6LXBsYW5lcyB0aGF0IGNhbiBiZSBkcmF3biB0by5cbiAgICAgICAgLy8gVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgV2ViR0wgZGVwdGggYnVmZmVyLlxuICAgICAgICB0aGlzLm51bVN1YmxheWVycyA9IFNvdXJjZUNhY2hlLm1heFVuZGVyem9vbWluZyArIFNvdXJjZUNhY2hlLm1heE92ZXJ6b29taW5nICsgMTtcbiAgICAgICAgdGhpcy5kZXB0aEVwc2lsb24gPSAxIC8gTWF0aC5wb3coMiwgMTYpO1xuXG4gICAgICAgIHRoaXMuZGVwdGhSYm9OZWVkc0NsZWFyID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb24oKTtcblxuICAgICAgICB0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4ID0gbmV3IENyb3NzVGlsZVN5bWJvbEluZGV4KCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBVcGRhdGUgdGhlIEdMIHZpZXdwb3J0LCBwcm9qZWN0aW9uIG1hdHJpeCwgYW5kIHRyYW5zZm9ybXMgdG8gY29tcGVuc2F0ZVxuICAgICAqIGZvciBhIG5ldyB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlLlxuICAgICAqL1xuICAgIHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcblxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGggKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF0pO1xuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgdGhpcy5zdHlsZS5fb3JkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZF0ucmVzaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kZXB0aFJibykge1xuICAgICAgICAgICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuZGVwdGhSYm8pO1xuICAgICAgICAgICAgdGhpcy5kZXB0aFJibyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgICAgICBjb25zdCB0aWxlRXh0ZW50QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICB0aWxlRXh0ZW50QXJyYXkuZW1wbGFjZUJhY2soRVhURU5ULCAwKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKDAsIEVYVEVOVCk7XG4gICAgICAgIHRpbGVFeHRlbnRBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMudGlsZUV4dGVudEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRpbGVFeHRlbnRBcnJheSwgcG9zQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy50aWxlRXh0ZW50U2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgMik7XG5cbiAgICAgICAgY29uc3QgZGVidWdBcnJheSA9IG5ldyBQb3NBcnJheSgpO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCk7XG4gICAgICAgIGRlYnVnQXJyYXkuZW1wbGFjZUJhY2soMCwgRVhURU5UKTtcbiAgICAgICAgZGVidWdBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMuZGVidWdCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcihkZWJ1Z0FycmF5LCBwb3NBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLmRlYnVnU2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgNSk7XG5cbiAgICAgICAgY29uc3QgcmFzdGVyQm91bmRzQXJyYXkgPSBuZXcgUmFzdGVyQm91bmRzQXJyYXkoKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soMCwgMCwgMCwgMCk7XG4gICAgICAgIHJhc3RlckJvdW5kc0FycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCwgRVhURU5ULCAwKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soMCwgRVhURU5ULCAwLCBFWFRFTlQpO1xuICAgICAgICByYXN0ZXJCb3VuZHNBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCwgRVhURU5ULCBFWFRFTlQpO1xuICAgICAgICB0aGlzLnJhc3RlckJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHJhc3RlckJvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLnJhc3RlckJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygwLCAwKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygxLCAwKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygwLCAxKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygxLCAxKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHZpZXdwb3J0QXJyYXksIHBvc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgIHRoaXMudmlld3BvcnRTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcblxuICAgICAgICBjb25zdCB0aWxlTGluZVN0cmlwSW5kaWNlcyA9IG5ldyBMaW5lU3RyaXBJbmRleEFycmF5KCk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDApO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygxKTtcbiAgICAgICAgdGlsZUxpbmVTdHJpcEluZGljZXMuZW1wbGFjZUJhY2soMyk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDIpO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygwKTtcbiAgICAgICAgdGhpcy50aWxlQm9yZGVySW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRpbGVMaW5lU3RyaXBJbmRpY2VzKTtcblxuICAgICAgICBjb25zdCBxdWFkVHJpYW5nbGVJbmRpY2VzID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICBxdWFkVHJpYW5nbGVJbmRpY2VzLmVtcGxhY2VCYWNrKDAsIDEsIDIpO1xuICAgICAgICBxdWFkVHJpYW5nbGVJbmRpY2VzLmVtcGxhY2VCYWNrKDIsIDEsIDMpO1xuICAgICAgICB0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcihxdWFkVHJpYW5nbGVJbmRpY2VzKTtcblxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgdGhpcy5zdGVuY2lsQ2xlYXJNb2RlID0gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBnbC5BTFdBWVMsIG1hc2s6IDB9LCAweDAsIDB4RkYsIGdsLlpFUk8sIGdsLlpFUk8sIGdsLlpFUk8pO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogUmVzZXQgdGhlIGRyYXdpbmcgY2FudmFzIGJ5IGNsZWFyaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlciBzbyB0aGF0IHdlIGNhbiBkcmF3XG4gICAgICogbmV3IHRpbGVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLCB3aGlsZSByZXRhaW5pbmcgcHJldmlvdXNseSBkcmF3biBwaXhlbHMuXG4gICAgICovXG4gICAgY2xlYXJTdGVuY2lsKCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgdGhpcy5uZXh0U3RlbmNpbElEID0gMTtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBBcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNTQ5MCxcbiAgICAgICAgLy8gcGVuZGluZyBhbiB1cHN0cmVhbSBmaXgsIHdlIGRyYXcgYSBmdWxsc2NyZWVuIHN0ZW5jaWw9MCBjbGlwcGluZyBtYXNrIGhlcmUsXG4gICAgICAgIC8vIGVmZmVjdGl2ZWx5IGNsZWFyaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcjogb25jZSBhbiB1cHN0cmVhbSBwYXRjaCBsYW5kcywgcmVtb3ZlXG4gICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gaW4gZmF2b3Igb2YgY29udGV4dC5jbGVhcih7IHN0ZW5jaWw6IDB4MCB9KVxuXG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIG1hdDQub3J0aG8obWF0cml4LCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgMCwgMSk7XG4gICAgICAgIG1hdDQuc2NhbGUobWF0cml4LCBtYXRyaXgsIFtnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsIDBdKTtcblxuICAgICAgICB0aGlzLnVzZVByb2dyYW0oJ2NsaXBwaW5nTWFzaycpLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLFxuICAgICAgICAgICAgRGVwdGhNb2RlLmRpc2FibGVkLCB0aGlzLnN0ZW5jaWxDbGVhck1vZGUsIENvbG9yTW9kZS5kaXNhYmxlZCwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgY2xpcHBpbmdNYXNrVW5pZm9ybVZhbHVlcyhtYXRyaXgpLFxuICAgICAgICAgICAgJyRjbGlwcGluZycsIHRoaXMudmlld3BvcnRCdWZmZXIsXG4gICAgICAgICAgICB0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCB0aGlzLnZpZXdwb3J0U2VnbWVudHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyhsYXllcjogU3R5bGVMYXllciwgdGlsZUlEczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UgPT09IGxheWVyLnNvdXJjZSB8fCAhbGF5ZXIuaXNUaWxlQ2xpcHBlZCgpIHx8ICF0aWxlSURzIHx8ICF0aWxlSURzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UgPSBsYXllci5zb3VyY2U7XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGlmICh0aGlzLm5leHRTdGVuY2lsSUQgKyB0aWxlSURzLmxlbmd0aCA+IDI1Nikge1xuICAgICAgICAgICAgLy8gd2UnbGwgcnVuIG91dCBvZiBmcmVzaCBJRHMgc28gd2UgbmVlZCB0byBjbGVhciBhbmQgc3RhcnQgZnJvbSBzY3JhdGNoXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUoQ29sb3JNb2RlLmRpc2FibGVkKTtcbiAgICAgICAgY29udGV4dC5zZXREZXB0aE1vZGUoRGVwdGhNb2RlLmRpc2FibGVkKTtcblxuICAgICAgICBjb25zdCBwcm9ncmFtID0gdGhpcy51c2VQcm9ncmFtKCdjbGlwcGluZ01hc2snKTtcblxuICAgICAgICB0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlSUQgb2YgdGlsZUlEcykge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW3RpbGVJRC5rZXldID0gdGhpcy5uZXh0U3RlbmNpbElEKys7XG5cbiAgICAgICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIERlcHRoTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAvLyBUZXN0cyB3aWxsIGFsd2F5cyBwYXNzLCBhbmQgcmVmIHZhbHVlIHdpbGwgYmUgd3JpdHRlbiB0byBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLkFMV0FZUywgbWFzazogMH0sIGlkLCAweEZGLCBnbC5LRUVQLCBnbC5LRUVQLCBnbC5SRVBMQUNFKSxcbiAgICAgICAgICAgICAgICBDb2xvck1vZGUuZGlzYWJsZWQsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCwgY2xpcHBpbmdNYXNrVW5pZm9ybVZhbHVlcyh0aWxlSUQucG9zTWF0cml4KSxcbiAgICAgICAgICAgICAgICAnJGNsaXBwaW5nJywgdGhpcy50aWxlRXh0ZW50QnVmZmVyLFxuICAgICAgICAgICAgICAgIHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHRoaXMudGlsZUV4dGVudFNlZ21lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0ZW5jaWxNb2RlRm9yM0QoKTogU3RlbmNpbE1vZGUge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLm5leHRTdGVuY2lsSUQgKyAxID4gMjU2KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLm5leHRTdGVuY2lsSUQrKztcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIHJldHVybiBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLk5PVEVRVUFMLCBtYXNrOiAweEZGfSwgaWQsIDB4RkYsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpO1xuICAgIH1cblxuICAgIHN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogU3RlbmNpbE1vZGUge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgcmV0dXJuIG5ldyBTdGVuY2lsTW9kZSh7ZnVuYzogZ2wuRVFVQUwsIG1hc2s6IDB4RkZ9LCB0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW3RpbGVJRC5rZXldLCAweDAwLCBnbC5LRUVQLCBnbC5LRUVQLCBnbC5SRVBMQUNFKTtcbiAgICB9XG5cbiAgICBjb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk6ICRSZWFkT25seTxDb2xvck1vZGU+IHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIGlmICh0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bU92ZXJkcmF3U3RlcHMgPSA4O1xuICAgICAgICAgICAgY29uc3QgYSA9IDEgLyBudW1PdmVyZHJhd1N0ZXBzO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yTW9kZShbZ2wuQ09OU1RBTlRfQ09MT1IsIGdsLk9ORV0sIG5ldyBDb2xvcihhLCBhLCBhLCAwKSwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlbmRlclBhc3MgPT09ICdvcGFxdWUnKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3JNb2RlLnVuYmxlbmRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvck1vZGUuYWxwaGFCbGVuZGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVwdGhNb2RlRm9yU3VibGF5ZXIobjogbnVtYmVyLCBtYXNrOiBEZXB0aE1hc2tUeXBlLCBmdW5jOiA/RGVwdGhGdW5jVHlwZSk6ICRSZWFkT25seTxEZXB0aE1vZGU+IHtcbiAgICAgICAgaWYgKCF0aGlzLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSkgcmV0dXJuIERlcHRoTW9kZS5kaXNhYmxlZDtcbiAgICAgICAgY29uc3QgZGVwdGggPSAxIC0gKCgxICsgdGhpcy5jdXJyZW50TGF5ZXIpICogdGhpcy5udW1TdWJsYXllcnMgKyBuKSAqIHRoaXMuZGVwdGhFcHNpbG9uO1xuICAgICAgICByZXR1cm4gbmV3IERlcHRoTW9kZShmdW5jIHx8IHRoaXMuY29udGV4dC5nbC5MRVFVQUwsIG1hc2ssIFtkZXB0aCwgZGVwdGhdKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFRoZSBvcGFxdWUgcGFzcyBhbmQgM0QgbGF5ZXJzIGJvdGggdXNlIHRoZSBkZXB0aCBidWZmZXIuXG4gICAgICogTGF5ZXJzIGRyYXduIGFib3ZlIDNEIGxheWVycyBuZWVkIHRvIGJlIGRyYXduIHVzaW5nIHRoZVxuICAgICAqIHBhaW50ZXIncyBhbGdvcml0aG0gc28gdGhhdCB0aGV5IGFwcGVhciBhYm92ZSAzRCBmZWF0dXJlcy5cbiAgICAgKiBUaGlzIHJldHVybnMgdHJ1ZSBmb3IgbGF5ZXJzIHRoYXQgY2FuIGJlIGRyYXduIHVzaW5nIHRoZVxuICAgICAqIG9wYXF1ZSBwYXNzLlxuICAgICAqL1xuICAgIG9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYXllciA8IHRoaXMub3BhcXVlUGFzc0N1dG9mZjtcbiAgICB9XG5cbiAgICByZW5kZXIoc3R5bGU6IFN0eWxlLCBvcHRpb25zOiBQYWludGVyT3B0aW9ucykge1xuICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5saW5lQXRsYXMgPSBzdHlsZS5saW5lQXRsYXM7XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyID0gc3R5bGUuaW1hZ2VNYW5hZ2VyO1xuICAgICAgICB0aGlzLmdseXBoTWFuYWdlciA9IHN0eWxlLmdseXBoTWFuYWdlcjtcblxuICAgICAgICB0aGlzLnN5bWJvbEZhZGVDaGFuZ2UgPSBzdHlsZS5wbGFjZW1lbnQuc3ltYm9sRmFkZUNoYW5nZShicm93c2VyLm5vdygpKTtcblxuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5iZWdpbkZyYW1lKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJJZHMgPSB0aGlzLnN0eWxlLl9vcmRlcjtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGVzID0gdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDYWNoZS51c2VkKSB7XG4gICAgICAgICAgICAgICAgc291cmNlQ2FjaGUucHJlcGFyZSh0aGlzLmNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29vcmRzQXNjZW5kaW5nOiB7W3N0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuICAgICAgICBjb25zdCBjb29yZHNEZXNjZW5kaW5nOiB7W3N0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuICAgICAgICBjb25zdCBjb29yZHNEZXNjZW5kaW5nU3ltYm9sOiB7W3N0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgICAgICBjb29yZHNBc2NlbmRpbmdbaWRdID0gc291cmNlQ2FjaGUuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCk7XG4gICAgICAgICAgICBjb29yZHNEZXNjZW5kaW5nW2lkXSA9IGNvb3Jkc0FzY2VuZGluZ1tpZF0uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICBjb29yZHNEZXNjZW5kaW5nU3ltYm9sW2lkXSA9IHNvdXJjZUNhY2hlLmdldFZpc2libGVDb29yZGluYXRlcyh0cnVlKS5yZXZlcnNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbaWRdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgICAgICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdyYXN0ZXInICYmIHNvdXJjZS50eXBlICE9PSAncmFzdGVyLWRlbScpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZVRpbGVzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkc0FzY2VuZGluZ1tpZF0pIHZpc2libGVUaWxlcy5wdXNoKHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpKTtcbiAgICAgICAgICAgIHVwZGF0ZVRpbGVNYXNrcyh2aXNpYmxlVGlsZXMsIHRoaXMuY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wYXF1ZVBhc3NDdXRvZmYgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcklkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IGxheWVySWRzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkXS5pczNEKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wYXF1ZVBhc3NDdXRvZmYgPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2Zmc2NyZWVuIHBhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gV2UgZmlyc3QgZG8gYWxsIHJlbmRlcmluZyB0aGF0IHJlcXVpcmVzIHJlbmRlcmluZyB0byBhIHNlcGFyYXRlXG4gICAgICAgIC8vIGZyYW1lYnVmZmVyLCBhbmQgdGhlbiBzYXZlIHRob3NlIGZvciByZW5kZXJpbmcgYmFjayB0byB0aGUgbWFwXG4gICAgICAgIC8vIGxhdGVyOiBpbiBkb2luZyB0aGlzIHdlIGF2b2lkIGRvaW5nIGV4cGVuc2l2ZSBmcmFtZWJ1ZmZlciByZXN0b3Jlcy5cbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzID0gJ29mZnNjcmVlbic7XG4gICAgICAgIHRoaXMuZGVwdGhSYm9OZWVkc0NsZWFyID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgbGF5ZXJJZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5zdHlsZS5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgaWYgKCFsYXllci5oYXNPZmZzY3JlZW5QYXNzKCkgfHwgbGF5ZXIuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBjb29yZHMgPSBjb29yZHNEZXNjZW5kaW5nW2xheWVyLnNvdXJjZV07XG4gICAgICAgICAgICBpZiAobGF5ZXIudHlwZSAhPT0gJ2N1c3RvbScgJiYgIWNvb3Jkcy5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlYmluZCB0aGUgbWFpbiBmcmFtZWJ1ZmZlciBub3cgdGhhdCBhbGwgb2Zmc2NyZWVuIGxheWVycyBoYXZlIGJlZW4gcmVuZGVyZWQ6XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpO1xuXG4gICAgICAgIC8vIENsZWFyIGJ1ZmZlcnMgaW4gcHJlcGFyYXRpb24gZm9yIGRyYXdpbmcgdG8gdGhlIG1haW4gZnJhbWVidWZmZXJcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKHtjb2xvcjogb3B0aW9ucy5zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPyBDb2xvci5ibGFjayA6IENvbG9yLnRyYW5zcGFyZW50LCBkZXB0aDogMX0pO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbCgpO1xuXG4gICAgICAgIHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciA9IG9wdGlvbnMuc2hvd092ZXJkcmF3SW5zcGVjdG9yO1xuICAgICAgICB0aGlzLmRlcHRoUmFuZ2VGb3IzRCA9IFswLCAxIC0gKChzdHlsZS5fb3JkZXIubGVuZ3RoICsgMikgKiB0aGlzLm51bVN1YmxheWVycyAqIHRoaXMuZGVwdGhFcHNpbG9uKV07XG5cbiAgICAgICAgLy8gT3BhcXVlIHBhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gRHJhdyBvcGFxdWUgbGF5ZXJzIHRvcC10by1ib3R0b20gZmlyc3QuXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyA9ICdvcGFxdWUnO1xuXG4gICAgICAgIGZvciAodGhpcy5jdXJyZW50TGF5ZXIgPSBsYXllcklkcy5sZW5ndGggLSAxOyB0aGlzLmN1cnJlbnRMYXllciA+PSAwOyB0aGlzLmN1cnJlbnRMYXllci0tKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkc1t0aGlzLmN1cnJlbnRMYXllcl1dO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkcyA9IGNvb3Jkc0FzY2VuZGluZ1tsYXllci5zb3VyY2VdO1xuXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyhsYXllciwgY29vcmRzKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyTGF5ZXIodGhpcywgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJhbnNsdWNlbnQgcGFzcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvLyBEcmF3IGFsbCBvdGhlciBsYXllcnMgYm90dG9tLXRvLXRvcC5cbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzID0gJ3RyYW5zbHVjZW50JztcblxuICAgICAgICBmb3IgKHRoaXMuY3VycmVudExheWVyID0gMDsgdGhpcy5jdXJyZW50TGF5ZXIgPCBsYXllcklkcy5sZW5ndGg7IHRoaXMuY3VycmVudExheWVyKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5zdHlsZS5fbGF5ZXJzW2xheWVySWRzW3RoaXMuY3VycmVudExheWVyXV07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuXG4gICAgICAgICAgICAvLyBGb3Igc3ltYm9sIGxheWVycyBpbiB0aGUgdHJhbnNsdWNlbnQgcGFzcywgd2UgYWRkIGV4dHJhIHRpbGVzIHRvIHRoZSByZW5kZXJhYmxlIHNldFxuICAgICAgICAgICAgLy8gZm9yIGNyb3NzLXRpbGUgc3ltYm9sIGZhZGluZy4gU3ltYm9sIGxheWVycyBkb24ndCB1c2UgdGlsZSBjbGlwcGluZywgc28gbm8gbmVlZCB0byByZW5kZXJcbiAgICAgICAgICAgIC8vIHNlcGFyYXRlIGNsaXBwaW5nIG1hc2tzXG4gICAgICAgICAgICBjb25zdCBjb29yZHMgPSAobGF5ZXIudHlwZSA9PT0gJ3N5bWJvbCcgPyBjb29yZHNEZXNjZW5kaW5nU3ltYm9sIDogY29vcmRzRGVzY2VuZGluZylbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MobGF5ZXIsIGNvb3Jkc0FzY2VuZGluZ1tsYXllci5zb3VyY2VdKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyTGF5ZXIodGhpcywgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VGlsZUJvdW5kYXJpZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICAgICAgZHJhdy5kZWJ1Zyh0aGlzLCBzb3VyY2VDYWNoZXNbaWRdLCBjb29yZHNBc2NlbmRpbmdbaWRdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBkZWZhdWx0cyBmb3IgbW9zdCBHTCB2YWx1ZXMgc28gdGhhdCBhbnlvbmUgdXNpbmcgdGhlIHN0YXRlIGFmdGVyIHRoZSByZW5kZXJcbiAgICAgICAgLy8gZW5jb3VudGVycyBtb3JlIGV4cGVjdGVkIHZhbHVlcy5cbiAgICAgICAgdGhpcy5jb250ZXh0LnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBzZXR1cE9mZnNjcmVlbkRlcHRoUmVuZGVyYnVmZmVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICAvLyBBbGwgb2YgdGhlIDNEIHRleHR1cmVzIHdpbGwgdXNlIHRoZSBzYW1lIGRlcHRoIHJlbmRlcmJ1ZmZlci5cbiAgICAgICAgaWYgKCF0aGlzLmRlcHRoUmJvKSB7XG4gICAgICAgICAgICB0aGlzLmRlcHRoUmJvID0gY29udGV4dC5jcmVhdGVSZW5kZXJidWZmZXIoY29udGV4dC5nbC5ERVBUSF9DT01QT05FTlQxNiwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyTGF5ZXIocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgICAgICBpZiAobGF5ZXIuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSkpIHJldHVybjtcbiAgICAgICAgaWYgKGxheWVyLnR5cGUgIT09ICdiYWNrZ3JvdW5kJyAmJiBsYXllci50eXBlICE9PSAnY3VzdG9tJyAmJiAhY29vcmRzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmlkID0gbGF5ZXIuaWQ7XG5cbiAgICAgICAgZHJhd1tsYXllci50eXBlXShwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdGhpcy5zdHlsZS5wbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gYSBtYXRyaXggdG8gaW5jb3Jwb3JhdGUgdGhlICotdHJhbnNsYXRlIGFuZCAqLXRyYW5zbGF0ZS1hbmNob3IgcHJvcGVydGllcyBpbnRvIGl0LlxuICAgICAqIEBwYXJhbSBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzIFRydWUgd2hlbiB0aGUgdW5pdHMgYWNjZXB0ZWQgYnkgdGhlIG1hdHJpeCBhcmUgaW4gdmlld3BvcnQgcGl4ZWxzIGluc3RlYWQgb2YgdGlsZSB1bml0cy5cbiAgICAgKiBAcmV0dXJucyB7RmxvYXQzMkFycmF5fSBtYXRyaXhcbiAgICAgKi9cbiAgICB0cmFuc2xhdGVQb3NNYXRyaXgobWF0cml4OiBGbG9hdDMyQXJyYXksIHRpbGU6IFRpbGUsIHRyYW5zbGF0ZTogW251bWJlciwgbnVtYmVyXSwgdHJhbnNsYXRlQW5jaG9yOiAnbWFwJyB8ICd2aWV3cG9ydCcsIGluVmlld3BvcnRQaXhlbFVuaXRzVW5pdHM/OiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdHJhbnNsYXRlWzBdICYmICF0cmFuc2xhdGVbMV0pIHJldHVybiBtYXRyaXg7XG5cbiAgICAgICAgY29uc3QgYW5nbGUgPSBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzID9cbiAgICAgICAgICAgICh0cmFuc2xhdGVBbmNob3IgPT09ICdtYXAnID8gdGhpcy50cmFuc2Zvcm0uYW5nbGUgOiAwKSA6XG4gICAgICAgICAgICAodHJhbnNsYXRlQW5jaG9yID09PSAndmlld3BvcnQnID8gLXRoaXMudHJhbnNmb3JtLmFuZ2xlIDogMCk7XG5cbiAgICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgICAgICBjb25zdCBzaW5BID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICAgICAgY29uc3QgY29zQSA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgICAgIHRyYW5zbGF0ZSA9IFtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVbMF0gKiBjb3NBIC0gdHJhbnNsYXRlWzFdICogc2luQSxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVbMF0gKiBzaW5BICsgdHJhbnNsYXRlWzFdICogY29zQVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gW1xuICAgICAgICAgICAgaW5WaWV3cG9ydFBpeGVsVW5pdHNVbml0cyA/IHRyYW5zbGF0ZVswXSA6IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIHRyYW5zbGF0ZVswXSwgdGhpcy50cmFuc2Zvcm0uem9vbSksXG4gICAgICAgICAgICBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzID8gdHJhbnNsYXRlWzFdIDogcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgdHJhbnNsYXRlWzFdLCB0aGlzLnRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkTWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKHRyYW5zbGF0ZWRNYXRyaXgsIG1hdHJpeCwgdHJhbnNsYXRpb24pO1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRlZE1hdHJpeDtcbiAgICB9XG5cbiAgICBzYXZlVGlsZVRleHR1cmUodGV4dHVyZTogVGV4dHVyZSkge1xuICAgICAgICBjb25zdCB0ZXh0dXJlcyA9IHRoaXMuX3RpbGVUZXh0dXJlc1t0ZXh0dXJlLnNpemVbMF1dO1xuICAgICAgICBpZiAoIXRleHR1cmVzKSB7XG4gICAgICAgICAgICB0aGlzLl90aWxlVGV4dHVyZXNbdGV4dHVyZS5zaXplWzBdXSA9IFt0ZXh0dXJlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHR1cmVzLnB1c2godGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRUaWxlVGV4dHVyZShzaXplOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgdGV4dHVyZXMgPSB0aGlzLl90aWxlVGV4dHVyZXNbc2l6ZV07XG4gICAgICAgIHJldHVybiB0ZXh0dXJlcyAmJiB0ZXh0dXJlcy5sZW5ndGggPiAwID8gdGV4dHVyZXMucG9wKCkgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIGEgcGF0dGVybiBpbWFnZSBpcyBuZWVkZWQsIGFuZCBpZiBpdCBpcywgd2hldGhlciBpdCBpcyBub3QgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIG5lZWRlZCBpbWFnZSBpcyBtaXNzaW5nIGFuZCByZW5kZXJpbmcgbmVlZHMgdG8gYmUgc2tpcHBlZC5cbiAgICAgKi9cbiAgICBpc1BhdHRlcm5NaXNzaW5nKGltYWdlOiA/Q3Jvc3NGYWRlZDxSZXNvbHZlZEltYWdlPik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWltYWdlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGltYWdlUG9zQSA9IHRoaXMuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4oaW1hZ2UuZnJvbS50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3QgaW1hZ2VQb3NCID0gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihpbWFnZS50by50b1N0cmluZygpKTtcbiAgICAgICAgcmV0dXJuICFpbWFnZVBvc0EgfHwgIWltYWdlUG9zQjtcbiAgICB9XG5cbiAgICB1c2VQcm9ncmFtKG5hbWU6IHN0cmluZywgcHJvZ3JhbUNvbmZpZ3VyYXRpb246IFByb2dyYW1Db25maWd1cmF0aW9uID0gdGhpcy5lbXB0eVByb2dyYW1Db25maWd1cmF0aW9uKTogUHJvZ3JhbTxhbnk+IHtcbiAgICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUgfHwge307XG4gICAgICAgIGNvbnN0IGtleSA9IGAke25hbWV9JHtwcm9ncmFtQ29uZmlndXJhdGlvbi5jYWNoZUtleSB8fCAnJ30ke3RoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciA/ICcvb3ZlcmRyYXcnIDogJyd9YDtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVba2V5XSA9IG5ldyBQcm9ncmFtKHRoaXMuY29udGV4dCwgc2hhZGVyc1tuYW1lXSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24sIHByb2dyYW1Vbmlmb3Jtc1tuYW1lXSwgdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZVtrZXldO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogUmVzZXQgc29tZSBHTCBzdGF0ZSB0byBkZWZhdWx0IHZhbHVlcyB0byBhdm9pZCBoYXJkLXRvLWRlYnVnIGJ1Z3NcbiAgICAgKiBpbiBjdXN0b20gbGF5ZXJzLlxuICAgICAqL1xuICAgIHNldEN1c3RvbUxheWVyRGVmYXVsdHMoKSB7XG4gICAgICAgIC8vIFByZXZlbnQgY3VzdG9tIGxheWVycyBmcm9tIHVuaW50ZW50aW9uYWxseSBtb2RpZnkgdGhlIGxhc3QgVkFPIHVzZWQuXG4gICAgICAgIC8vIEFsbCBvdGhlciBzdGF0ZSBpcyBzdGF0ZSBpcyByZXN0b3JlZCBvbiBpdCdzIG93biwgYnV0IGZvciBWQU9zIGl0J3NcbiAgICAgICAgLy8gc2ltcGxlciB0byB1bmJpbmQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHRyYWNrIHRoZSBzdGF0ZSBvZiBWQU9zLlxuICAgICAgICB0aGlzLmNvbnRleHQudW5iaW5kVkFPKCk7XG5cbiAgICAgICAgLy8gVGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGlzIHN0YXRlIGlzIG1lYW5pbmdmdWwgYW5kIG9mdGVuIGV4cGVjdGVkLlxuICAgICAgICAvLyBMZWF2aW5nIHRoaXMgc3RhdGUgZGlydHkgY291bGQgY2F1c2UgYSBsb3Qgb2YgY29uZnVzaW9uIGZvciB1c2Vycy5cbiAgICAgICAgdGhpcy5jb250ZXh0LmN1bGxGYWNlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFjay5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogU2V0IEdMIHN0YXRlIHRoYXQgaXMgc2hhcmVkIGJ5IGFsbCBsYXllcnMuXG4gICAgICovXG4gICAgc2V0QmFzZVN0YXRlKCkge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgdGhpcy5jb250ZXh0LmN1bGxGYWNlLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0XSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5ibGVuZEVxdWF0aW9uLnNldChnbC5GVU5DX0FERCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYWludGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCB0aWxlQ292ZXI7XG5cbmZ1bmN0aW9uIHRpbGVDb3Zlcih6OiBudW1iZXIsIGJvdW5kczogW01lcmNhdG9yQ29vcmRpbmF0ZSwgTWVyY2F0b3JDb29yZGluYXRlLCBNZXJjYXRvckNvb3JkaW5hdGUsIE1lcmNhdG9yQ29vcmRpbmF0ZV0sXG4gICAgYWN0dWFsWjogbnVtYmVyLCByZW5kZXJXb3JsZENvcGllczogYm9vbGVhbiB8IHZvaWQpOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiB7XG4gICAgaWYgKHJlbmRlcldvcmxkQ29waWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVuZGVyV29ybGRDb3BpZXMgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0aWxlcyA9IDEgPDwgejtcbiAgICBjb25zdCB0ID0ge307XG5cbiAgICBmdW5jdGlvbiBzY2FuTGluZSh4MCwgeDEsIHkpIHtcbiAgICAgICAgbGV0IHgsIHcsIHd4LCBjb29yZDtcbiAgICAgICAgaWYgKHkgPj0gMCAmJiB5IDw9IHRpbGVzKSB7XG4gICAgICAgICAgICBmb3IgKHggPSB4MDsgeCA8IHgxOyB4KyspIHtcbiAgICAgICAgICAgICAgICB3ID0gTWF0aC5mbG9vcih4IC8gdGlsZXMpO1xuICAgICAgICAgICAgICAgIHd4ID0gKHggJSB0aWxlcyArIHRpbGVzKSAlIHRpbGVzO1xuICAgICAgICAgICAgICAgIGlmICh3ID09PSAwIHx8IHJlbmRlcldvcmxkQ29waWVzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvb3JkID0gbmV3IE92ZXJzY2FsZWRUaWxlSUQoYWN0dWFsWiwgdywgeiwgd3gsIHkpO1xuICAgICAgICAgICAgICAgICAgICB0W2Nvb3JkLmtleV0gPSBjb29yZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB6b29tZWRCb3VuZHMgPSBib3VuZHMubWFwKChjb29yZCkgPT4gbmV3IFBvaW50KGNvb3JkLngsIGNvb3JkLnkpLl9tdWx0KHRpbGVzKSk7XG5cbiAgICAvLyBEaXZpZGUgdGhlIHNjcmVlbiB1cCBpbiB0d28gdHJpYW5nbGVzIGFuZCBzY2FuIGVhY2ggb2YgdGhlbTpcbiAgICAvLyArLS0tL1xuICAgIC8vIHwgLyB8XG4gICAgLy8gLy0tLStcbiAgICBzY2FuVHJpYW5nbGUoem9vbWVkQm91bmRzWzBdLCB6b29tZWRCb3VuZHNbMV0sIHpvb21lZEJvdW5kc1syXSwgMCwgdGlsZXMsIHNjYW5MaW5lKTtcbiAgICBzY2FuVHJpYW5nbGUoem9vbWVkQm91bmRzWzJdLCB6b29tZWRCb3VuZHNbM10sIHpvb21lZEJvdW5kc1swXSwgMCwgdGlsZXMsIHNjYW5MaW5lKTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoKGlkKSA9PiB7XG4gICAgICAgIHJldHVybiB0W2lkXTtcbiAgICB9KTtcbn1cblxuLy8gVGFrZW4gZnJvbSBwb2x5bWFwcyBzcmMvTGF5ZXIuanNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW1wbGVnZW8vcG9seW1hcHMvYmxvYi9tYXN0ZXIvc3JjL0xheWVyLmpzI0wzMzMtTDM4M1xuXG5mdW5jdGlvbiBlZGdlKGE6IFBvaW50LCBiOiBQb2ludCkge1xuICAgIGlmIChhLnkgPiBiLnkpIHsgY29uc3QgdCA9IGE7IGEgPSBiOyBiID0gdDsgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHgwOiBhLngsXG4gICAgICAgIHkwOiBhLnksXG4gICAgICAgIHgxOiBiLngsXG4gICAgICAgIHkxOiBiLnksXG4gICAgICAgIGR4OiBiLnggLSBhLngsXG4gICAgICAgIGR5OiBiLnkgLSBhLnlcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuU3BhbnMoZTAsIGUxLCB5bWluLCB5bWF4LCBzY2FuTGluZSkge1xuICAgIGNvbnN0IHkwID0gTWF0aC5tYXgoeW1pbiwgTWF0aC5mbG9vcihlMS55MCkpO1xuICAgIGNvbnN0IHkxID0gTWF0aC5taW4oeW1heCwgTWF0aC5jZWlsKGUxLnkxKSk7XG5cbiAgICAvLyBzb3J0IGVkZ2VzIGJ5IHgtY29vcmRpbmF0ZVxuICAgIGlmICgoZTAueDAgPT09IGUxLngwICYmIGUwLnkwID09PSBlMS55MCkgP1xuICAgICAgICAoZTAueDAgKyBlMS5keSAvIGUwLmR5ICogZTAuZHggPCBlMS54MSkgOlxuICAgICAgICAoZTAueDEgLSBlMS5keSAvIGUwLmR5ICogZTAuZHggPCBlMS54MCkpIHtcbiAgICAgICAgY29uc3QgdCA9IGUwOyBlMCA9IGUxOyBlMSA9IHQ7XG4gICAgfVxuXG4gICAgLy8gc2NhbiBsaW5lcyFcbiAgICBjb25zdCBtMCA9IGUwLmR4IC8gZTAuZHk7XG4gICAgY29uc3QgbTEgPSBlMS5keCAvIGUxLmR5O1xuICAgIGNvbnN0IGQwID0gZTAuZHggPiAwOyAvLyB1c2UgeSArIDEgdG8gY29tcHV0ZSB4MFxuICAgIGNvbnN0IGQxID0gZTEuZHggPCAwOyAvLyB1c2UgeSArIDEgdG8gY29tcHV0ZSB4MVxuICAgIGZvciAobGV0IHkgPSB5MDsgeSA8IHkxOyB5KyspIHtcbiAgICAgICAgY29uc3QgeDAgPSBtMCAqIE1hdGgubWF4KDAsIE1hdGgubWluKGUwLmR5LCB5ICsgZDAgLSBlMC55MCkpICsgZTAueDA7XG4gICAgICAgIGNvbnN0IHgxID0gbTEgKiBNYXRoLm1heCgwLCBNYXRoLm1pbihlMS5keSwgeSArIGQxIC0gZTEueTApKSArIGUxLngwO1xuICAgICAgICBzY2FuTGluZShNYXRoLmZsb29yKHgxKSwgTWF0aC5jZWlsKHgwKSwgeSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzY2FuVHJpYW5nbGUoYTogUG9pbnQsIGI6IFBvaW50LCBjOiBQb2ludCwgeW1pbiwgeW1heCwgc2NhbkxpbmUpIHtcbiAgICBsZXQgYWIgPSBlZGdlKGEsIGIpLFxuICAgICAgICBiYyA9IGVkZ2UoYiwgYyksXG4gICAgICAgIGNhID0gZWRnZShjLCBhKTtcblxuICAgIGxldCB0O1xuXG4gICAgLy8gc29ydCBlZGdlcyBieSB5LWxlbmd0aFxuICAgIGlmIChhYi5keSA+IGJjLmR5KSB7IHQgPSBhYjsgYWIgPSBiYzsgYmMgPSB0OyB9XG4gICAgaWYgKGFiLmR5ID4gY2EuZHkpIHsgdCA9IGFiOyBhYiA9IGNhOyBjYSA9IHQ7IH1cbiAgICBpZiAoYmMuZHkgPiBjYS5keSkgeyB0ID0gYmM7IGJjID0gY2E7IGNhID0gdDsgfVxuXG4gICAgLy8gc2NhbiBzcGFuISBzY2FuIHNwYW4hXG4gICAgaWYgKGFiLmR5KSBzY2FuU3BhbnMoY2EsIGFiLCB5bWluLCB5bWF4LCBzY2FuTGluZSk7XG4gICAgaWYgKGJjLmR5KSBzY2FuU3BhbnMoY2EsIGJjLCB5bWluLCB5bWF4LCBzY2FuTGluZSk7XG59XG5cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBMbmdMYXQgZnJvbSAnLi9sbmdfbGF0JztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlLCB7bWVyY2F0b3JYZnJvbUxuZywgbWVyY2F0b3JZZnJvbUxhdCwgbWVyY2F0b3JaZnJvbUFsdGl0dWRlfSBmcm9tICcuL21lcmNhdG9yX2Nvb3JkaW5hdGUnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHt3cmFwLCBjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHRpbGVDb3ZlciBmcm9tICcuLi91dGlsL3RpbGVfY292ZXInO1xuaW1wb3J0IHtVbndyYXBwZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHt2ZWM0LCBtYXQ0LCBtYXQyfSBmcm9tICdnbC1tYXRyaXgnO1xuXG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRCwgQ2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbi8qKlxuICogQSBzaW5nbGUgdHJhbnNmb3JtLCBnZW5lcmFsbHkgdXNlZCBmb3IgYSBzaW5nbGUgdGlsZSB0byBiZVxuICogc2NhbGVkLCByb3RhdGVkLCBhbmQgem9vbWVkLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVHJhbnNmb3JtIHtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIHRpbGVab29tOiBudW1iZXI7XG4gICAgbG5nUmFuZ2U6ID9bbnVtYmVyLCBudW1iZXJdO1xuICAgIGxhdFJhbmdlOiA/W251bWJlciwgbnVtYmVyXTtcbiAgICBtYXhWYWxpZExhdGl0dWRlOiBudW1iZXI7XG4gICAgc2NhbGU6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIGFuZ2xlOiBudW1iZXI7XG4gICAgcm90YXRpb25NYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICB6b29tRnJhY3Rpb246IG51bWJlcjtcbiAgICBwaXhlbHNUb0dMVW5pdHM6IFtudW1iZXIsIG51bWJlcl07XG4gICAgY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTogbnVtYmVyO1xuICAgIG1lcmNhdG9yTWF0cml4OiBBcnJheTxudW1iZXI+O1xuICAgIHByb2pNYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICBhbGlnbmVkUHJvak1hdHJpeDogRmxvYXQ2NEFycmF5O1xuICAgIHBpeGVsTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgcGl4ZWxNYXRyaXhJbnZlcnNlOiBGbG9hdDY0QXJyYXk7XG4gICAgZ2xDb29yZE1hdHJpeDogRmxvYXQzMkFycmF5O1xuICAgIGxhYmVsUGxhbmVNYXRyaXg6IEZsb2F0MzJBcnJheTtcbiAgICBfZm92OiBudW1iZXI7XG4gICAgX3BpdGNoOiBudW1iZXI7XG4gICAgX3pvb206IG51bWJlcjtcbiAgICBfdW5tb2RpZmllZDogYm9vbGVhbjtcbiAgICBfcmVuZGVyV29ybGRDb3BpZXM6IGJvb2xlYW47XG4gICAgX21pblpvb206IG51bWJlcjtcbiAgICBfbWF4Wm9vbTogbnVtYmVyO1xuICAgIF9jZW50ZXI6IExuZ0xhdDtcbiAgICBfY29uc3RyYWluaW5nOiBib29sZWFuO1xuICAgIF9wb3NNYXRyaXhDYWNoZToge1tudW1iZXJdOiBGbG9hdDMyQXJyYXl9O1xuICAgIF9hbGlnbmVkUG9zTWF0cml4Q2FjaGU6IHtbbnVtYmVyXTogRmxvYXQzMkFycmF5fTtcblxuICAgIGNvbnN0cnVjdG9yKG1pblpvb206ID9udW1iZXIsIG1heFpvb206ID9udW1iZXIsIHJlbmRlcldvcmxkQ29waWVzOiBib29sZWFuIHwgdm9pZCkge1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gNTEyOyAvLyBjb25zdGFudFxuICAgICAgICB0aGlzLm1heFZhbGlkTGF0aXR1ZGUgPSA4NS4wNTExMjk7IC8vIGNvbnN0YW50XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMgPSByZW5kZXJXb3JsZENvcGllcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHJlbmRlcldvcmxkQ29waWVzO1xuICAgICAgICB0aGlzLl9taW5ab29tID0gbWluWm9vbSB8fCAwO1xuICAgICAgICB0aGlzLl9tYXhab29tID0gbWF4Wm9vbSB8fCAyMjtcblxuICAgICAgICB0aGlzLnNldE1heEJvdW5kcygpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSAwO1xuICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuX2NlbnRlciA9IG5ldyBMbmdMYXQoMCwgMCk7XG4gICAgICAgIHRoaXMuem9vbSA9IDA7XG4gICAgICAgIHRoaXMuYW5nbGUgPSAwO1xuICAgICAgICB0aGlzLl9mb3YgPSAwLjY0MzUwMTEwODc5MzI4NDQ7XG4gICAgICAgIHRoaXMuX3BpdGNoID0gMDtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3Bvc01hdHJpeENhY2hlID0ge307XG4gICAgICAgIHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRyYW5zZm9ybSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRyYW5zZm9ybSh0aGlzLl9taW5ab29tLCB0aGlzLl9tYXhab29tLCB0aGlzLl9yZW5kZXJXb3JsZENvcGllcyk7XG4gICAgICAgIGNsb25lLnRpbGVTaXplID0gdGhpcy50aWxlU2l6ZTtcbiAgICAgICAgY2xvbmUubGF0UmFuZ2UgPSB0aGlzLmxhdFJhbmdlO1xuICAgICAgICBjbG9uZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIGNsb25lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICBjbG9uZS5fY2VudGVyID0gdGhpcy5fY2VudGVyO1xuICAgICAgICBjbG9uZS56b29tID0gdGhpcy56b29tO1xuICAgICAgICBjbG9uZS5hbmdsZSA9IHRoaXMuYW5nbGU7XG4gICAgICAgIGNsb25lLl9mb3YgPSB0aGlzLl9mb3Y7XG4gICAgICAgIGNsb25lLl9waXRjaCA9IHRoaXMuX3BpdGNoO1xuICAgICAgICBjbG9uZS5fdW5tb2RpZmllZCA9IHRoaXMuX3VubW9kaWZpZWQ7XG4gICAgICAgIGNsb25lLl9jYWxjTWF0cmljZXMoKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldCBtaW5ab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9taW5ab29tOyB9XG4gICAgc2V0IG1pblpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9taW5ab29tID09PSB6b29tKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21pblpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1heCh0aGlzLnpvb20sIHpvb20pO1xuICAgIH1cblxuICAgIGdldCBtYXhab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9tYXhab29tOyB9XG4gICAgc2V0IG1heFpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhab29tID09PSB6b29tKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21heFpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1pbih0aGlzLnpvb20sIHpvb20pO1xuICAgIH1cblxuICAgIGdldCByZW5kZXJXb3JsZENvcGllcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzOyB9XG4gICAgc2V0IHJlbmRlcldvcmxkQ29waWVzKHJlbmRlcldvcmxkQ29waWVzPzogP2Jvb2xlYW4pIHtcbiAgICAgICAgaWYgKHJlbmRlcldvcmxkQ29waWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlbmRlcldvcmxkQ29waWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJXb3JsZENvcGllcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmVuZGVyV29ybGRDb3BpZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzID0gcmVuZGVyV29ybGRDb3BpZXM7XG4gICAgfVxuXG4gICAgZ2V0IHdvcmxkU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50aWxlU2l6ZSAqIHRoaXMuc2NhbGU7XG4gICAgfVxuXG4gICAgZ2V0IGNlbnRlclBvaW50KCk6IFBvaW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZS5fZGl2KDIpO1xuICAgIH1cblxuICAgIGdldCBzaXplKCk6IFBvaW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgZ2V0IGJlYXJpbmcoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIC10aGlzLmFuZ2xlIC8gTWF0aC5QSSAqIDE4MDtcbiAgICB9XG4gICAgc2V0IGJlYXJpbmcoYmVhcmluZzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGIgPSAtd3JhcChiZWFyaW5nLCAtMTgwLCAxODApICogTWF0aC5QSSAvIDE4MDtcbiAgICAgICAgaWYgKHRoaXMuYW5nbGUgPT09IGIpIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFuZ2xlID0gYjtcbiAgICAgICAgdGhpcy5fY2FsY01hdHJpY2VzKCk7XG5cbiAgICAgICAgLy8gMngyIG1hdHJpeCBmb3Igcm90YXRpbmcgcG9pbnRzXG4gICAgICAgIHRoaXMucm90YXRpb25NYXRyaXggPSBtYXQyLmNyZWF0ZSgpO1xuICAgICAgICBtYXQyLnJvdGF0ZSh0aGlzLnJvdGF0aW9uTWF0cml4LCB0aGlzLnJvdGF0aW9uTWF0cml4LCB0aGlzLmFuZ2xlKTtcbiAgICB9XG5cbiAgICBnZXQgcGl0Y2goKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BpdGNoIC8gTWF0aC5QSSAqIDE4MDtcbiAgICB9XG4gICAgc2V0IHBpdGNoKHBpdGNoOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcCA9IGNsYW1wKHBpdGNoLCAwLCA2MCkgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICBpZiAodGhpcy5fcGl0Y2ggPT09IHApIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9waXRjaCA9IHA7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCBmb3YoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvdiAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBmb3YoZm92OiBudW1iZXIpIHtcbiAgICAgICAgZm92ID0gTWF0aC5tYXgoMC4wMSwgTWF0aC5taW4oNjAsIGZvdikpO1xuICAgICAgICBpZiAodGhpcy5fZm92ID09PSBmb3YpIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9mb3YgPSBmb3YgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICB0aGlzLl9jYWxjTWF0cmljZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgem9vbSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fem9vbTsgfVxuICAgIHNldCB6b29tKHpvb206IG51bWJlcikge1xuICAgICAgICBjb25zdCB6ID0gTWF0aC5taW4oTWF0aC5tYXgoem9vbSwgdGhpcy5taW5ab29tKSwgdGhpcy5tYXhab29tKTtcbiAgICAgICAgaWYgKHRoaXMuX3pvb20gPT09IHopIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl96b29tID0gejtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHRoaXMuem9vbVNjYWxlKHopO1xuICAgICAgICB0aGlzLnRpbGVab29tID0gTWF0aC5mbG9vcih6KTtcbiAgICAgICAgdGhpcy56b29tRnJhY3Rpb24gPSB6IC0gdGhpcy50aWxlWm9vbTtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCBjZW50ZXIoKTogTG5nTGF0IHsgcmV0dXJuIHRoaXMuX2NlbnRlcjsgfVxuICAgIHNldCBjZW50ZXIoY2VudGVyOiBMbmdMYXQpIHtcbiAgICAgICAgaWYgKGNlbnRlci5sYXQgPT09IHRoaXMuX2NlbnRlci5sYXQgJiYgY2VudGVyLmxuZyA9PT0gdGhpcy5fY2VudGVyLmxuZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NlbnRlciA9IGNlbnRlcjtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHpvb20gbGV2ZWwgdGhhdCB3aWxsIGNvdmVyIGFsbCB0aWxlcyB0aGUgdHJhbnNmb3JtXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aWxlU2l6ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yb3VuZFpvb21cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSB6b29tIGxldmVsXG4gICAgICovXG4gICAgY292ZXJpbmdab29tTGV2ZWwob3B0aW9uczoge3JvdW5kWm9vbT86IGJvb2xlYW4sIHRpbGVTaXplOiBudW1iZXJ9KSB7XG4gICAgICAgIHJldHVybiAob3B0aW9ucy5yb3VuZFpvb20gPyBNYXRoLnJvdW5kIDogTWF0aC5mbG9vcikoXG4gICAgICAgICAgICB0aGlzLnpvb20gKyB0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplIC8gb3B0aW9ucy50aWxlU2l6ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW55IFwid3JhcHBlZFwiIGNvcGllcyBvZiBhIGdpdmVuIHRpbGUgY29vcmRpbmF0ZSB0aGF0IGFyZSB2aXNpYmxlXG4gICAgICogaW4gdGhlIGN1cnJlbnQgdmlldy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzKHRpbGVJRDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtuZXcgVW53cmFwcGVkVGlsZUlEKDAsIHRpbGVJRCldO1xuICAgICAgICBpZiAodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHV0bCA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCgwLCAwKSk7XG4gICAgICAgICAgICBjb25zdCB1dHIgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQodGhpcy53aWR0aCwgMCkpO1xuICAgICAgICAgICAgY29uc3QgdWJsID0gdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KSk7XG4gICAgICAgICAgICBjb25zdCB1YnIgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQoMCwgdGhpcy5oZWlnaHQpKTtcbiAgICAgICAgICAgIGNvbnN0IHcwID0gTWF0aC5mbG9vcihNYXRoLm1pbih1dGwueCwgdXRyLngsIHVibC54LCB1YnIueCkpO1xuICAgICAgICAgICAgY29uc3QgdzEgPSBNYXRoLmZsb29yKE1hdGgubWF4KHV0bC54LCB1dHIueCwgdWJsLngsIHVici54KSk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBhbiBleHRyYSBjb3B5IG9mIHRoZSB3b3JsZCBvbiBlYWNoIHNpZGUgdG8gcHJvcGVybHkgcmVuZGVyIEltYWdlU291cmNlcyBhbmQgQ2FudmFzU291cmNlcy5cbiAgICAgICAgICAgIC8vIEJvdGggc291cmNlcyBkcmF3IG91dHNpZGUgdGhlIHRpbGUgYm91bmRhcmllcyBvZiB0aGUgdGlsZSB0aGF0IFwiY29udGFpbnMgdGhlbVwiIHNvIHdlIG5lZWRcbiAgICAgICAgICAgIC8vIHRvIGFkZCBleHRyYSBjb3BpZXMgb24gYm90aCBzaWRlcyBpbiBjYXNlIG9mZnNjcmVlbiB0aWxlcyBuZWVkIHRvIGRyYXcgaW50byBvbi1zY3JlZW4gb25lcy5cbiAgICAgICAgICAgIGNvbnN0IGV4dHJhV29ybGRDb3B5ID0gMTtcblxuICAgICAgICAgICAgZm9yIChsZXQgdyA9IHcwIC0gZXh0cmFXb3JsZENvcHk7IHcgPD0gdzEgKyBleHRyYVdvcmxkQ29weTsgdysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHcgPT09IDApIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBVbndyYXBwZWRUaWxlSUQodywgdGlsZUlEKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWxsIGNvb3JkaW5hdGVzIHRoYXQgY291bGQgY292ZXIgdGhpcyB0cmFuc2Zvcm0gZm9yIGEgY292ZXJpbmdcbiAgICAgKiB6b29tIGxldmVsLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGlsZVNpemVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5taW56b29tXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMubWF4em9vbVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yb3VuZFpvb21cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMucmVwYXJzZU92ZXJzY2FsZWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMucmVuZGVyV29ybGRDb3BpZXNcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD59IE92ZXJzY2FsZWRUaWxlSURzXG4gICAgICovXG4gICAgY292ZXJpbmdUaWxlcyhcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgdGlsZVNpemU6IG51bWJlcixcbiAgICAgICAgICAgIG1pbnpvb20/OiBudW1iZXIsXG4gICAgICAgICAgICBtYXh6b29tPzogbnVtYmVyLFxuICAgICAgICAgICAgcm91bmRab29tPzogYm9vbGVhbixcbiAgICAgICAgICAgIHJlcGFyc2VPdmVyc2NhbGVkPzogYm9vbGVhbixcbiAgICAgICAgICAgIHJlbmRlcldvcmxkQ29waWVzPzogYm9vbGVhblxuICAgICAgICB9XG4gICAgKTogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4ge1xuICAgICAgICBsZXQgeiA9IHRoaXMuY292ZXJpbmdab29tTGV2ZWwob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGFjdHVhbFogPSB6O1xuXG4gICAgICAgIGlmIChvcHRpb25zLm1pbnpvb20gIT09IHVuZGVmaW5lZCAmJiB6IDwgb3B0aW9ucy5taW56b29tKSByZXR1cm4gW107XG4gICAgICAgIGlmIChvcHRpb25zLm1heHpvb20gIT09IHVuZGVmaW5lZCAmJiB6ID4gb3B0aW9ucy5tYXh6b29tKSB6ID0gb3B0aW9ucy5tYXh6b29tO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlckNvb3JkID0gTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQodGhpcy5jZW50ZXIpO1xuICAgICAgICBjb25zdCBudW1UaWxlcyA9IE1hdGgucG93KDIsIHopO1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IG5ldyBQb2ludChudW1UaWxlcyAqIGNlbnRlckNvb3JkLnggLSAwLjUsIG51bVRpbGVzICogY2VudGVyQ29vcmQueSAtIDAuNSk7XG4gICAgICAgIGNvbnN0IGNvcm5lckNvb3JkcyA9IFtcbiAgICAgICAgICAgIHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCgwLCAwKSksXG4gICAgICAgICAgICB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQodGhpcy53aWR0aCwgMCkpLFxuICAgICAgICAgICAgdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KSksXG4gICAgICAgICAgICB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQoMCwgdGhpcy5oZWlnaHQpKVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gdGlsZUNvdmVyKHosIGNvcm5lckNvb3Jkcywgb3B0aW9ucy5yZXBhcnNlT3ZlcnNjYWxlZCA/IGFjdHVhbFogOiB6LCB0aGlzLl9yZW5kZXJXb3JsZENvcGllcylcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBjZW50ZXJQb2ludC5kaXN0KGEuY2Fub25pY2FsKSAtIGNlbnRlclBvaW50LmRpc3QoYi5jYW5vbmljYWwpKTtcbiAgICB9XG5cbiAgICByZXNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICB0aGlzLnBpeGVsc1RvR0xVbml0cyA9IFsyIC8gd2lkdGgsIC0yIC8gaGVpZ2h0XTtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCB1bm1vZGlmaWVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fdW5tb2RpZmllZDsgfVxuXG4gICAgem9vbVNjYWxlKHpvb206IG51bWJlcikgeyByZXR1cm4gTWF0aC5wb3coMiwgem9vbSk7IH1cbiAgICBzY2FsZVpvb20oc2NhbGU6IG51bWJlcikgeyByZXR1cm4gTWF0aC5sb2coc2NhbGUpIC8gTWF0aC5MTjI7IH1cblxuICAgIHByb2plY3QobG5nbGF0OiBMbmdMYXQpIHtcbiAgICAgICAgY29uc3QgbGF0ID0gY2xhbXAobG5nbGF0LmxhdCwgLXRoaXMubWF4VmFsaWRMYXRpdHVkZSwgdGhpcy5tYXhWYWxpZExhdGl0dWRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgICAgICAgICBtZXJjYXRvclhmcm9tTG5nKGxuZ2xhdC5sbmcpICogdGhpcy53b3JsZFNpemUsXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JZZnJvbUxhdChsYXQpICogdGhpcy53b3JsZFNpemUpO1xuICAgIH1cblxuICAgIHVucHJvamVjdChwb2ludDogUG9pbnQpOiBMbmdMYXQge1xuICAgICAgICByZXR1cm4gbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShwb2ludC54IC8gdGhpcy53b3JsZFNpemUsIHBvaW50LnkgLyB0aGlzLndvcmxkU2l6ZSkudG9MbmdMYXQoKTtcbiAgICB9XG5cbiAgICBnZXQgcG9pbnQoKTogUG9pbnQgeyByZXR1cm4gdGhpcy5wcm9qZWN0KHRoaXMuY2VudGVyKTsgfVxuXG4gICAgc2V0TG9jYXRpb25BdFBvaW50KGxuZ2xhdDogTG5nTGF0LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMucG9pbnRDb29yZGluYXRlKHBvaW50KTtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpO1xuICAgICAgICBjb25zdCBsb2MgPSB0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZShsbmdsYXQpO1xuICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBuZXcgTWVyY2F0b3JDb29yZGluYXRlKFxuICAgICAgICAgICAgICAgIGxvYy54IC0gKGEueCAtIGIueCksXG4gICAgICAgICAgICAgICAgbG9jLnkgLSAoYS55IC0gYi55KSk7XG4gICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy5jb29yZGluYXRlTG9jYXRpb24obmV3Q2VudGVyKTtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKSB7XG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHRoaXMuY2VudGVyLndyYXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbG9jYXRpb24sIHJldHVybiB0aGUgc2NyZWVuIHBvaW50IHRoYXQgY29ycmVzcG9uZHMgdG8gaXRcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdH0gbG5nbGF0IGxvY2F0aW9uXG4gICAgICogQHJldHVybnMge1BvaW50fSBzY3JlZW4gcG9pbnRcbiAgICAgKi9cbiAgICBsb2NhdGlvblBvaW50KGxuZ2xhdDogTG5nTGF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVQb2ludCh0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZShsbmdsYXQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIHBvaW50IG9uIHNjcmVlbiwgcmV0dXJuIGl0cyBsbmdsYXRcbiAgICAgKiBAcGFyYW0ge1BvaW50fSBwIHNjcmVlbiBwb2ludFxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IGxuZ2xhdCBsb2NhdGlvblxuICAgICAqL1xuICAgIHBvaW50TG9jYXRpb24ocDogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKHRoaXMucG9pbnRDb29yZGluYXRlKHApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIGdlb2dyYXBoaWNhbCBsbmdsYXQsIHJldHVybiBhbiB1bnJvdW5kZWRcbiAgICAgKiBjb29yZGluYXRlIHRoYXQgcmVwcmVzZW50cyBpdCBhdCB0aGlzIHRyYW5zZm9ybSdzIHpvb20gbGV2ZWwuXG4gICAgICogQHBhcmFtIHtMbmdMYXR9IGxuZ2xhdFxuICAgICAqIEByZXR1cm5zIHtDb29yZGluYXRlfVxuICAgICAqL1xuICAgIGxvY2F0aW9uQ29vcmRpbmF0ZShsbmdsYXQ6IExuZ0xhdCkge1xuICAgICAgICByZXR1cm4gTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQobG5nbGF0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIENvb3JkaW5hdGUsIHJldHVybiBpdHMgZ2VvZ3JhcGhpY2FsIHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29vcmRpbmF0ZX0gY29vcmRcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBsbmdsYXRcbiAgICAgKi9cbiAgICBjb29yZGluYXRlTG9jYXRpb24oY29vcmQ6IE1lcmNhdG9yQ29vcmRpbmF0ZSkge1xuICAgICAgICByZXR1cm4gY29vcmQudG9MbmdMYXQoKTtcbiAgICB9XG5cbiAgICBwb2ludENvb3JkaW5hdGUocDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0WiA9IDA7XG4gICAgICAgIC8vIHNpbmNlIHdlIGRvbid0IGtub3cgdGhlIGNvcnJlY3QgcHJvamVjdGVkIHogdmFsdWUgZm9yIHRoZSBwb2ludCxcbiAgICAgICAgLy8gdW5wcm9qZWN0IHR3byBwb2ludHMgdG8gZ2V0IGEgbGluZSBhbmQgdGhlbiBmaW5kIHRoZSBwb2ludCBvbiB0aGF0XG4gICAgICAgIC8vIGxpbmUgd2l0aCB6PTBcblxuICAgICAgICBjb25zdCBjb29yZDAgPSBbcC54LCBwLnksIDAsIDFdO1xuICAgICAgICBjb25zdCBjb29yZDEgPSBbcC54LCBwLnksIDEsIDFdO1xuXG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChjb29yZDAsIGNvb3JkMCwgdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO1xuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQoY29vcmQxLCBjb29yZDEsIHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKTtcblxuICAgICAgICBjb25zdCB3MCA9IGNvb3JkMFszXTtcbiAgICAgICAgY29uc3QgdzEgPSBjb29yZDFbM107XG4gICAgICAgIGNvbnN0IHgwID0gY29vcmQwWzBdIC8gdzA7XG4gICAgICAgIGNvbnN0IHgxID0gY29vcmQxWzBdIC8gdzE7XG4gICAgICAgIGNvbnN0IHkwID0gY29vcmQwWzFdIC8gdzA7XG4gICAgICAgIGNvbnN0IHkxID0gY29vcmQxWzFdIC8gdzE7XG4gICAgICAgIGNvbnN0IHowID0gY29vcmQwWzJdIC8gdzA7XG4gICAgICAgIGNvbnN0IHoxID0gY29vcmQxWzJdIC8gdzE7XG5cbiAgICAgICAgY29uc3QgdCA9IHowID09PSB6MSA/IDAgOiAodGFyZ2V0WiAtIHowKSAvICh6MSAtIHowKTtcblxuICAgICAgICByZXR1cm4gbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShcbiAgICAgICAgICAgIGludGVycG9sYXRlKHgwLCB4MSwgdCkgLyB0aGlzLndvcmxkU2l6ZSxcbiAgICAgICAgICAgIGludGVycG9sYXRlKHkwLCB5MSwgdCkgLyB0aGlzLndvcmxkU2l6ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBjb29yZGluYXRlLCByZXR1cm4gdGhlIHNjcmVlbiBwb2ludCB0aGF0IGNvcnJlc3BvbmRzIHRvIGl0XG4gICAgICogQHBhcmFtIHtDb29yZGluYXRlfSBjb29yZFxuICAgICAqIEByZXR1cm5zIHtQb2ludH0gc2NyZWVuIHBvaW50XG4gICAgICovXG4gICAgY29vcmRpbmF0ZVBvaW50KGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgY29uc3QgcCA9IFtjb29yZC54ICogdGhpcy53b3JsZFNpemUsIGNvb3JkLnkgKiB0aGlzLndvcmxkU2l6ZSwgMCwgMV07XG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChwLCBwLCB0aGlzLnBpeGVsTWF0cml4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChwWzBdIC8gcFszXSwgcFsxXSAvIHBbM10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuIFdoZW4gdGhlIGJlYXJpbmcgb3IgcGl0Y2ggaXMgbm9uLXplcm8sIHRoZSB2aXNpYmxlIHJlZ2lvbiBpcyBub3RcbiAgICAgKiBhbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc21hbGxlc3QgYm91bmRzIHRoYXQgZW5jb21wYXNzZXMgdGhlIHZpc2libGUgcmVnaW9uLlxuICAgICAqL1xuICAgIGdldEJvdW5kcygpOiBMbmdMYXRCb3VuZHMge1xuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdEJvdW5kcygpXG4gICAgICAgICAgICAuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgUG9pbnQoMCwgMCkpKVxuICAgICAgICAgICAgLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IFBvaW50KHRoaXMud2lkdGgsIDApKSlcbiAgICAgICAgICAgIC5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyBQb2ludCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCkpKVxuICAgICAgICAgICAgLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IFBvaW50KDAsIHRoaXMuaGVpZ2h0KSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gZ2VvZ3JhcGhpY2FsIGJvdW5kcyB0aGUgbWFwIGlzIGNvbnN0cmFpbmVkIHRvLCBvciBgbnVsbGAgaWYgbm9uZSBzZXQuXG4gICAgICovXG4gICAgZ2V0TWF4Qm91bmRzKCk6IExuZ0xhdEJvdW5kcyB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMubGF0UmFuZ2UgfHwgdGhpcy5sYXRSYW5nZS5sZW5ndGggIT09IDIgfHxcbiAgICAgICAgICAgICF0aGlzLmxuZ1JhbmdlIHx8IHRoaXMubG5nUmFuZ2UubGVuZ3RoICE9PSAyKSByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdEJvdW5kcyhbdGhpcy5sbmdSYW5nZVswXSwgdGhpcy5sYXRSYW5nZVswXV0sIFt0aGlzLmxuZ1JhbmdlWzFdLCB0aGlzLmxhdFJhbmdlWzFdXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBzZXRNYXhCb3VuZHMoYm91bmRzPzogTG5nTGF0Qm91bmRzKSB7XG4gICAgICAgIGlmIChib3VuZHMpIHtcbiAgICAgICAgICAgIHRoaXMubG5nUmFuZ2UgPSBbYm91bmRzLmdldFdlc3QoKSwgYm91bmRzLmdldEVhc3QoKV07XG4gICAgICAgICAgICB0aGlzLmxhdFJhbmdlID0gW2JvdW5kcy5nZXRTb3V0aCgpLCBib3VuZHMuZ2V0Tm9ydGgoKV07XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJhaW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG5nUmFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sYXRSYW5nZSA9IFstdGhpcy5tYXhWYWxpZExhdGl0dWRlLCB0aGlzLm1heFZhbGlkTGF0aXR1ZGVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBwb3NNYXRyaXggdGhhdCwgZ2l2ZW4gYSB0aWxlIGNvb3JkaW5hdGUsIHdvdWxkIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgdGlsZSBvbiBhIG1hcC5cbiAgICAgKiBAcGFyYW0ge1Vud3JhcHBlZFRpbGVJRH0gdW53cmFwcGVkVGlsZUlEO1xuICAgICAqL1xuICAgIGNhbGN1bGF0ZVBvc01hdHJpeCh1bndyYXBwZWRUaWxlSUQ6IFVud3JhcHBlZFRpbGVJRCwgYWxpZ25lZDogYm9vbGVhbiA9IGZhbHNlKTogRmxvYXQzMkFycmF5IHtcbiAgICAgICAgY29uc3QgcG9zTWF0cml4S2V5ID0gdW53cmFwcGVkVGlsZUlELmtleTtcbiAgICAgICAgY29uc3QgY2FjaGUgPSBhbGlnbmVkID8gdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlIDogdGhpcy5fcG9zTWF0cml4Q2FjaGU7XG4gICAgICAgIGlmIChjYWNoZVtwb3NNYXRyaXhLZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVbcG9zTWF0cml4S2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbCA9IHVud3JhcHBlZFRpbGVJRC5jYW5vbmljYWw7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy53b3JsZFNpemUgLyB0aGlzLnpvb21TY2FsZShjYW5vbmljYWwueik7XG4gICAgICAgIGNvbnN0IHVud3JhcHBlZFggPSBjYW5vbmljYWwueCArIE1hdGgucG93KDIsIGNhbm9uaWNhbC56KSAqIHVud3JhcHBlZFRpbGVJRC53cmFwO1xuXG4gICAgICAgIGNvbnN0IHBvc01hdHJpeCA9IG1hdDQuaWRlbnRpdHkobmV3IEZsb2F0NjRBcnJheSgxNikpO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShwb3NNYXRyaXgsIHBvc01hdHJpeCwgW3Vud3JhcHBlZFggKiBzY2FsZSwgY2Fub25pY2FsLnkgKiBzY2FsZSwgMF0pO1xuICAgICAgICBtYXQ0LnNjYWxlKHBvc01hdHJpeCwgcG9zTWF0cml4LCBbc2NhbGUgLyBFWFRFTlQsIHNjYWxlIC8gRVhURU5ULCAxXSk7XG4gICAgICAgIG1hdDQubXVsdGlwbHkocG9zTWF0cml4LCBhbGlnbmVkID8gdGhpcy5hbGlnbmVkUHJvak1hdHJpeCA6IHRoaXMucHJvak1hdHJpeCwgcG9zTWF0cml4KTtcblxuICAgICAgICBjYWNoZVtwb3NNYXRyaXhLZXldID0gbmV3IEZsb2F0MzJBcnJheShwb3NNYXRyaXgpO1xuICAgICAgICByZXR1cm4gY2FjaGVbcG9zTWF0cml4S2V5XTtcbiAgICB9XG5cbiAgICBjdXN0b21MYXllck1hdHJpeCgpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVyY2F0b3JNYXRyaXguc2xpY2UoKTtcbiAgICB9XG5cbiAgICBfY29uc3RyYWluKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2VudGVyIHx8ICF0aGlzLndpZHRoIHx8ICF0aGlzLmhlaWdodCB8fCB0aGlzLl9jb25zdHJhaW5pbmcpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9jb25zdHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgICAgIGxldCBtaW5ZID0gLTkwO1xuICAgICAgICBsZXQgbWF4WSA9IDkwO1xuICAgICAgICBsZXQgbWluWCA9IC0xODA7XG4gICAgICAgIGxldCBtYXhYID0gMTgwO1xuICAgICAgICBsZXQgc3ksIHN4LCB4MiwgeTI7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemUsXG4gICAgICAgICAgICB1bm1vZGlmaWVkID0gdGhpcy5fdW5tb2RpZmllZDtcblxuICAgICAgICBpZiAodGhpcy5sYXRSYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgbGF0UmFuZ2UgPSB0aGlzLmxhdFJhbmdlO1xuICAgICAgICAgICAgbWluWSA9IG1lcmNhdG9yWWZyb21MYXQobGF0UmFuZ2VbMV0pICogdGhpcy53b3JsZFNpemU7XG4gICAgICAgICAgICBtYXhZID0gbWVyY2F0b3JZZnJvbUxhdChsYXRSYW5nZVswXSkgKiB0aGlzLndvcmxkU2l6ZTtcbiAgICAgICAgICAgIHN5ID0gbWF4WSAtIG1pblkgPCBzaXplLnkgPyBzaXplLnkgLyAobWF4WSAtIG1pblkpIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxuZ1JhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBsbmdSYW5nZSA9IHRoaXMubG5nUmFuZ2U7XG4gICAgICAgICAgICBtaW5YID0gbWVyY2F0b3JYZnJvbUxuZyhsbmdSYW5nZVswXSkgKiB0aGlzLndvcmxkU2l6ZTtcbiAgICAgICAgICAgIG1heFggPSBtZXJjYXRvclhmcm9tTG5nKGxuZ1JhbmdlWzFdKSAqIHRoaXMud29ybGRTaXplO1xuICAgICAgICAgICAgc3ggPSBtYXhYIC0gbWluWCA8IHNpemUueCA/IHNpemUueCAvIChtYXhYIC0gbWluWCkgOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLnBvaW50O1xuXG4gICAgICAgIC8vIGhvdyBtdWNoIHRoZSBtYXAgc2hvdWxkIHNjYWxlIHRvIGZpdCB0aGUgc2NyZWVuIGludG8gZ2l2ZW4gbGF0aXR1ZGUvbG9uZ2l0dWRlIHJhbmdlc1xuICAgICAgICBjb25zdCBzID0gTWF0aC5tYXgoc3ggfHwgMCwgc3kgfHwgMCk7XG5cbiAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy51bnByb2plY3QobmV3IFBvaW50KFxuICAgICAgICAgICAgICAgIHN4ID8gKG1heFggKyBtaW5YKSAvIDIgOiBwb2ludC54LFxuICAgICAgICAgICAgICAgIHN5ID8gKG1heFkgKyBtaW5ZKSAvIDIgOiBwb2ludC55KSk7XG4gICAgICAgICAgICB0aGlzLnpvb20gKz0gdGhpcy5zY2FsZVpvb20ocyk7XG4gICAgICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gdW5tb2RpZmllZDtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cmFpbmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGF0UmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBwb2ludC55LFxuICAgICAgICAgICAgICAgIGgyID0gc2l6ZS55IC8gMjtcblxuICAgICAgICAgICAgaWYgKHkgLSBoMiA8IG1pblkpIHkyID0gbWluWSArIGgyO1xuICAgICAgICAgICAgaWYgKHkgKyBoMiA+IG1heFkpIHkyID0gbWF4WSAtIGgyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubG5nUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBwb2ludC54LFxuICAgICAgICAgICAgICAgIHcyID0gc2l6ZS54IC8gMjtcblxuICAgICAgICAgICAgaWYgKHggLSB3MiA8IG1pblgpIHgyID0gbWluWCArIHcyO1xuICAgICAgICAgICAgaWYgKHggKyB3MiA+IG1heFgpIHgyID0gbWF4WCAtIHcyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGFuIHRoZSBtYXAgaWYgdGhlIHNjcmVlbiBnb2VzIG9mZiB0aGUgcmFuZ2VcbiAgICAgICAgaWYgKHgyICE9PSB1bmRlZmluZWQgfHwgeTIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLnVucHJvamVjdChuZXcgUG9pbnQoXG4gICAgICAgICAgICAgICAgeDIgIT09IHVuZGVmaW5lZCA/IHgyIDogcG9pbnQueCxcbiAgICAgICAgICAgICAgICB5MiAhPT0gdW5kZWZpbmVkID8geTIgOiBwb2ludC55KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gdW5tb2RpZmllZDtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX2NhbGNNYXRyaWNlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhlaWdodCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSA9IDAuNSAvIE1hdGgudGFuKHRoaXMuX2ZvdiAvIDIpICogdGhpcy5oZWlnaHQ7XG5cbiAgICAgICAgLy8gRmluZCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIHBvaW50IFt3aWR0aC8yLCBoZWlnaHQvMl0gdG8gdGhlXG4gICAgICAgIC8vIGNlbnRlciB0b3AgcG9pbnQgW3dpZHRoLzIsIDBdIGluIFogdW5pdHMsIHVzaW5nIHRoZSBsYXcgb2Ygc2luZXMuXG4gICAgICAgIC8vIDEgWiB1bml0IGlzIGVxdWl2YWxlbnQgdG8gMSBob3Jpem9udGFsIHB4IGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hcFxuICAgICAgICAvLyAodGhlIGRpc3RhbmNlIGJldHdlZW5bd2lkdGgvMiwgaGVpZ2h0LzJdIGFuZCBbd2lkdGgvMiArIDEsIGhlaWdodC8yXSlcbiAgICAgICAgY29uc3QgaGFsZkZvdiA9IHRoaXMuX2ZvdiAvIDI7XG4gICAgICAgIGNvbnN0IGdyb3VuZEFuZ2xlID0gTWF0aC5QSSAvIDIgKyB0aGlzLl9waXRjaDtcbiAgICAgICAgY29uc3QgdG9wSGFsZlN1cmZhY2VEaXN0YW5jZSA9IE1hdGguc2luKGhhbGZGb3YpICogdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIC8gTWF0aC5zaW4oTWF0aC5QSSAtIGdyb3VuZEFuZ2xlIC0gaGFsZkZvdik7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5wb2ludDtcbiAgICAgICAgY29uc3QgeCA9IHBvaW50LngsIHkgPSBwb2ludC55O1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB6IGRpc3RhbmNlIG9mIHRoZSBmYXJ0aGVzdCBmcmFnbWVudCB0aGF0IHNob3VsZCBiZSByZW5kZXJlZC5cbiAgICAgICAgY29uc3QgZnVydGhlc3REaXN0YW5jZSA9IE1hdGguY29zKE1hdGguUEkgLyAyIC0gdGhpcy5fcGl0Y2gpICogdG9wSGFsZlN1cmZhY2VEaXN0YW5jZSArIHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTtcbiAgICAgICAgLy8gQWRkIGEgYml0IGV4dHJhIHRvIGF2b2lkIHByZWNpc2lvbiBwcm9ibGVtcyB3aGVuIGEgZnJhZ21lbnQncyBkaXN0YW5jZSBpcyBleGFjdGx5IGBmdXJ0aGVzdERpc3RhbmNlYFxuICAgICAgICBjb25zdCBmYXJaID0gZnVydGhlc3REaXN0YW5jZSAqIDEuMDE7XG5cbiAgICAgICAgLy8gVGhlIGxhcmdlciB0aGUgdmFsdWUgb2YgbmVhclogaXNcbiAgICAgICAgLy8gLSB0aGUgbW9yZSBkZXB0aCBwcmVjaXNpb24gaXMgYXZhaWxhYmxlIGZvciBmZWF0dXJlcyAoZ29vZClcbiAgICAgICAgLy8gLSBjbGlwcGluZyBzdGFydHMgYXBwZWFyaW5nIHNvb25lciB3aGVuIHRoZSBjYW1lcmEgaXMgY2xvc2UgdG8gM2QgZmVhdHVyZXMgKGJhZClcbiAgICAgICAgLy9cbiAgICAgICAgLy8gU21hbGxlciB2YWx1ZXMgd29ya2VkIHdlbGwgZm9yIG1hcGJveC1nbC1qcyBidXQgZGVja2dsIHdhcyBlbmNvdW50ZXJpbmcgcHJlY2lzaW9uIGlzc3Vlc1xuICAgICAgICAvLyB3aGVuIHJlbmRlcmluZyBpdCdzIGxheWVycyB1c2luZyBjdXN0b20gbGF5ZXJzLiBUaGlzIHZhbHVlIHdhcyBleHBlcmltZW50YWxseSBjaG9zZW4gYW5kXG4gICAgICAgIC8vIHNlZW1zIHRvIHNvbHZlIHotZmlnaHRpbmcgaXNzdWVzIGluIGRlY2tnbCB3aGlsZSBub3QgY2xpcHBpbmcgYnVpbGRpbmdzIHRvbyBjbG9zZSB0byB0aGUgY2FtZXJhLlxuICAgICAgICBjb25zdCBuZWFyWiA9IHRoaXMuaGVpZ2h0IC8gNTA7XG5cbiAgICAgICAgLy8gbWF0cml4IGZvciBjb252ZXJzaW9uIGZyb20gbG9jYXRpb24gdG8gR0wgY29vcmRpbmF0ZXMgKC0xIC4uIDEpXG4gICAgICAgIGxldCBtID0gbmV3IEZsb2F0NjRBcnJheSgxNik7XG4gICAgICAgIG1hdDQucGVyc3BlY3RpdmUobSwgdGhpcy5fZm92LCB0aGlzLndpZHRoIC8gdGhpcy5oZWlnaHQsIG5lYXJaLCBmYXJaKTtcblxuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxLCAtMSwgMV0pO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbMCwgMCwgLXRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZV0pO1xuICAgICAgICBtYXQ0LnJvdGF0ZVgobSwgbSwgdGhpcy5fcGl0Y2gpO1xuICAgICAgICBtYXQ0LnJvdGF0ZVoobSwgbSwgdGhpcy5hbmdsZSk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKG0sIG0sIFsteCwgLXksIDBdKTtcblxuICAgICAgICAvLyBUaGUgbWVyY2F0b3JNYXRyaXggY2FuIGJlIHVzZWQgdG8gdHJhbnNmb3JtIHBvaW50cyBmcm9tIG1lcmNhdG9yIGNvb3JkaW5hdGVzXG4gICAgICAgIC8vIChbMCwgMF0gbncsIFsxLCAxXSBzZSkgdG8gR0wgY29vcmRpbmF0ZXMuXG4gICAgICAgIHRoaXMubWVyY2F0b3JNYXRyaXggPSBtYXQ0LnNjYWxlKFtdLCBtLCBbdGhpcy53b3JsZFNpemUsIHRoaXMud29ybGRTaXplLCB0aGlzLndvcmxkU2l6ZV0pO1xuXG4gICAgICAgIC8vIHNjYWxlIHZlcnRpY2FsbHkgdG8gbWV0ZXJzIHBlciBwaXhlbCAoaW52ZXJzZSBvZiBncm91bmQgcmVzb2x1dGlvbik6XG4gICAgICAgIG1hdDQuc2NhbGUobSwgbSwgWzEsIDEsIG1lcmNhdG9yWmZyb21BbHRpdHVkZSgxLCB0aGlzLmNlbnRlci5sYXQpICogdGhpcy53b3JsZFNpemUsIDFdKTtcblxuICAgICAgICB0aGlzLnByb2pNYXRyaXggPSBtO1xuXG4gICAgICAgIC8vIE1ha2UgYSBzZWNvbmQgcHJvamVjdGlvbiBtYXRyaXggdGhhdCBpcyBhbGlnbmVkIHRvIGEgcGl4ZWwgZ3JpZCBmb3IgcmVuZGVyaW5nIHJhc3RlciB0aWxlcy5cbiAgICAgICAgLy8gV2UncmUgcm91bmRpbmcgdGhlIChmbG9hdGluZyBwb2ludCkgeC95IHZhbHVlcyB0byBhY2hpZXZlIHRvIGF2b2lkIHJlbmRlcmluZyByYXN0ZXIgaW1hZ2VzIHRvIGZyYWN0aW9uYWxcbiAgICAgICAgLy8gY29vcmRpbmF0ZXMuIEFkZGl0aW9uYWxseSwgd2UgYWRqdXN0IGJ5IGhhbGYgYSBwaXhlbCBpbiBlaXRoZXIgZGlyZWN0aW9uIGluIGNhc2UgdGhhdCB2aWV3cG9ydCBkaW1lbnNpb25cbiAgICAgICAgLy8gaXMgYW4gb2RkIGludGVnZXIgdG8gcHJlc2VydmUgcmVuZGVyaW5nIHRvIHRoZSBwaXhlbCBncmlkLiBXZSdyZSByb3RhdGluZyB0aGlzIHNoaWZ0IGJhc2VkIG9uIHRoZSBhbmdsZVxuICAgICAgICAvLyBvZiB0aGUgdHJhbnNmb3JtYXRpb24gc28gdGhhdCAww4LCsCwgOTDDgsKwLCAxODDDgsKwLCBhbmQgMjcww4LCsCByYXN0ZXJzIGFyZSBjcmlzcCwgYW5kIGFkanVzdCB0aGUgc2hpZnQgc28gdGhhdFxuICAgICAgICAvLyBpdCBpcyBhbHdheXMgPD0gMC41IHBpeGVscy5cbiAgICAgICAgY29uc3QgeFNoaWZ0ID0gKHRoaXMud2lkdGggJSAyKSAvIDIsIHlTaGlmdCA9ICh0aGlzLmhlaWdodCAlIDIpIC8gMixcbiAgICAgICAgICAgIGFuZ2xlQ29zID0gTWF0aC5jb3ModGhpcy5hbmdsZSksIGFuZ2xlU2luID0gTWF0aC5zaW4odGhpcy5hbmdsZSksXG4gICAgICAgICAgICBkeCA9IHggLSBNYXRoLnJvdW5kKHgpICsgYW5nbGVDb3MgKiB4U2hpZnQgKyBhbmdsZVNpbiAqIHlTaGlmdCxcbiAgICAgICAgICAgIGR5ID0geSAtIE1hdGgucm91bmQoeSkgKyBhbmdsZUNvcyAqIHlTaGlmdCArIGFuZ2xlU2luICogeFNoaWZ0O1xuICAgICAgICBjb25zdCBhbGlnbmVkTSA9IG5ldyBGbG9hdDY0QXJyYXkobSk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKGFsaWduZWRNLCBhbGlnbmVkTSwgWyBkeCA+IDAuNSA/IGR4IC0gMSA6IGR4LCBkeSA+IDAuNSA/IGR5IC0gMSA6IGR5LCAwIF0pO1xuICAgICAgICB0aGlzLmFsaWduZWRQcm9qTWF0cml4ID0gYWxpZ25lZE07XG5cbiAgICAgICAgbSA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIG1hdDQuc2NhbGUobSwgbSwgW3RoaXMud2lkdGggLyAyLCAtdGhpcy5oZWlnaHQgLyAyLCAxXSk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKG0sIG0sIFsxLCAtMSwgMF0pO1xuICAgICAgICB0aGlzLmxhYmVsUGxhbmVNYXRyaXggPSBtO1xuXG4gICAgICAgIG0gPSBtYXQ0LmNyZWF0ZSgpO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxLCAtMSwgMV0pO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbLTEsIC0xLCAwXSk7XG4gICAgICAgIG1hdDQuc2NhbGUobSwgbSwgWzIgLyB0aGlzLndpZHRoLCAyIC8gdGhpcy5oZWlnaHQsIDFdKTtcbiAgICAgICAgdGhpcy5nbENvb3JkTWF0cml4ID0gbTtcblxuICAgICAgICAvLyBtYXRyaXggZm9yIGNvbnZlcnNpb24gZnJvbSBsb2NhdGlvbiB0byBzY3JlZW4gY29vcmRpbmF0ZXNcbiAgICAgICAgdGhpcy5waXhlbE1hdHJpeCA9IG1hdDQubXVsdGlwbHkobmV3IEZsb2F0NjRBcnJheSgxNiksIHRoaXMubGFiZWxQbGFuZU1hdHJpeCwgdGhpcy5wcm9qTWF0cml4KTtcblxuICAgICAgICAvLyBpbnZlcnNlIG1hdHJpeCBmb3IgY29udmVyc2lvbiBmcm9tIHNjcmVlbiBjb29yZGluYWVzIHRvIGxvY2F0aW9uXG4gICAgICAgIG0gPSBtYXQ0LmludmVydChuZXcgRmxvYXQ2NEFycmF5KDE2KSwgdGhpcy5waXhlbE1hdHJpeCk7XG4gICAgICAgIGlmICghbSkgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIGludmVydCBtYXRyaXhcIik7XG4gICAgICAgIHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlID0gbTtcblxuICAgICAgICB0aGlzLl9wb3NNYXRyaXhDYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGUgPSB7fTtcbiAgICB9XG5cbiAgICBtYXhQaXRjaFNjYWxlRmFjdG9yKCkge1xuICAgICAgICAvLyBjYWxjTWF0cmljZXMgaGFzbid0IHJ1biB5ZXRcbiAgICAgICAgaWYgKCF0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSkgcmV0dXJuIDE7XG5cbiAgICAgICAgY29uc3QgY29vcmQgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQoMCwgMCkpO1xuICAgICAgICBjb25zdCBwID0gW2Nvb3JkLnggKiB0aGlzLndvcmxkU2l6ZSwgY29vcmQueSAqIHRoaXMud29ybGRTaXplLCAwLCAxXTtcbiAgICAgICAgY29uc3QgdG9wUG9pbnQgPSB2ZWM0LnRyYW5zZm9ybU1hdDQocCwgcCwgdGhpcy5waXhlbE1hdHJpeCk7XG4gICAgICAgIHJldHVybiB0b3BQb2ludFszXSAvIHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFRoZSBjYW1lcmEgbG9va3MgYXQgdGhlIG1hcCBmcm9tIGEgM0QgKGxuZywgbGF0LCBhbHRpdHVkZSkgbG9jYXRpb24uIExldCdzIHVzZSBgY2FtZXJhTG9jYXRpb25gXG4gICAgICogYXMgdGhlIG5hbWUgZm9yIHRoZSBsb2NhdGlvbiB1bmRlciB0aGUgY2FtZXJhIGFuZCBvbiB0aGUgc3VyZmFjZSBvZiB0aGUgZWFydGggKGxuZywgbGF0LCAwKS5cbiAgICAgKiBgY2FtZXJhUG9pbnRgIGlzIHRoZSBwcm9qZWN0ZWQgcG9zaXRpb24gb2YgdGhlIGBjYW1lcmFMb2NhdGlvbmAuXG4gICAgICpcbiAgICAgKiBUaGlzIHBvaW50IGlzIHVzZWZ1bCB0byB1cyBiZWNhdXNlIG9ubHkgZmlsbC1leHRydXNpb25zIHRoYXQgYXJlIGJldHdlZW4gYGNhbWVyYVBvaW50YCBhbmRcbiAgICAgKiB0aGUgcXVlcnkgcG9pbnQgb24gdGhlIHN1cmZhY2Ugb2YgdGhlIGVhcnRoIGNhbiBleHRlbmQgYW5kIGludGVyc2VjdCB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBXaGVuIHRoZSBtYXAgaXMgbm90IHBpdGNoZWQgdGhlIGBjYW1lcmFQb2ludGAgaXMgZXF1aXZhbGVudCB0byB0aGUgY2VudGVyIG9mIHRoZSBtYXAgYmVjYXVzZVxuICAgICAqIHRoZSBjYW1lcmEgaXMgcmlnaHQgYWJvdmUgdGhlIGNlbnRlciBvZiB0aGUgbWFwLlxuICAgICAqL1xuICAgIGdldENhbWVyYVBvaW50KCkge1xuICAgICAgICBjb25zdCBwaXRjaCA9IHRoaXMuX3BpdGNoO1xuICAgICAgICBjb25zdCB5T2Zmc2V0ID0gTWF0aC50YW4ocGl0Y2gpICogKHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSB8fCAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VudGVyUG9pbnQuYWRkKG5ldyBQb2ludCgwLCB5T2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBXaGVuIHRoZSBtYXAgaXMgcGl0Y2hlZCwgc29tZSBvZiB0aGUgM0QgZmVhdHVyZXMgdGhhdCBpbnRlcnNlY3QgYSBxdWVyeSB3aWxsIG5vdCBpbnRlcnNlY3RcbiAgICAgKiB0aGUgcXVlcnkgYXQgdGhlIHN1cmZhY2Ugb2YgdGhlIGVhcnRoLiBJbnN0ZWFkIHRoZSBmZWF0dXJlIG1heSBiZSBjbG9zZXIgYW5kIG9ubHkgaW50ZXJzZWN0XG4gICAgICogdGhlIHF1ZXJ5IGJlY2F1c2UgaXQgZXh0cnVkZXMgaW50byB0aGUgYWlyLlxuICAgICAqXG4gICAgICogVGhpcyByZXR1cm5zIGEgZ2VvbWV0cnkgdGhhdCBpbmNsdWRlcyBhbGwgb2YgdGhlIG9yaWdpbmFsIHF1ZXJ5IGFzIHdlbGwgYXMgYWxsIHBvc3NpYmxlIGFyZXMgb2YgdGhlXG4gICAgICogc2NyZWVuIHdoZXJlIHRoZSAqYmFzZSogb2YgYSB2aXNpYmxlIGV4dHJ1c2lvbiBjb3VsZCBiZS5cbiAgICAgKiAgLSBGb3IgcG9pbnQgcXVlcmllcywgdGhlIGxpbmUgZnJvbSB0aGUgcXVlcnkgcG9pbnQgdG8gdGhlIFwiY2FtZXJhIHBvaW50XCJcbiAgICAgKiAgLSBGb3Igb3RoZXIgZ2VvbWV0cmllcywgdGhlIGVudmVsb3BlIG9mIHRoZSBxdWVyeSBnZW9tZXRyeSBhbmQgdGhlIFwiY2FtZXJhIHBvaW50XCJcbiAgICAgKi9cbiAgICBnZXRDYW1lcmFRdWVyeUdlb21ldHJ5KHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50Pik6IEFycmF5PFBvaW50PiB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmdldENhbWVyYVBvaW50KCk7XG5cbiAgICAgICAgaWYgKHF1ZXJ5R2VvbWV0cnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gW3F1ZXJ5R2VvbWV0cnlbMF0sIGNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG1pblggPSBjLng7XG4gICAgICAgICAgICBsZXQgbWluWSA9IGMueTtcbiAgICAgICAgICAgIGxldCBtYXhYID0gYy54O1xuICAgICAgICAgICAgbGV0IG1heFkgPSBjLnk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcXVlcnlHZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwLngpO1xuICAgICAgICAgICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBwLnkpO1xuICAgICAgICAgICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBwLngpO1xuICAgICAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwLnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQobWluWCwgbWluWSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KG1heFgsIG1pblkpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChtYXhYLCBtYXhZKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQobWluWCwgbWF4WSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KG1pblgsIG1pblkpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2Zvcm07XG4iLCIvLyBAZmxvdyBzdHJpY3RcblxuLyoqXG4gKiBUaHJvdHRsZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gcnVuIGF0IG1vc3QgZXZlcnkgYHBlcmlvZGAgbWlsbGlzZWNvbmRzLlxuIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBydW4gYXQgbW9zdCBldmVyeSBwZXJpb2QgbWlsbGlzZWNvbmRzLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyb3R0bGUoZm46ICgpID0+IHZvaWQsIHRpbWU6IG51bWJlcik6ICgpID0+ID9UaW1lb3V0SUQge1xuICAgIGxldCBwZW5kaW5nID0gZmFsc2U7XG4gICAgbGV0IHRpbWVySWQ6ID9UaW1lb3V0SUQgPSBudWxsO1xuXG4gICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgICAgICBpZiAocGVuZGluZykge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KGxhdGVyLCB0aW1lKTtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aW1lcklkKSB7XG4gICAgICAgICAgICBsYXRlcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aW1lcklkO1xuICAgIH07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB0aHJvdHRsZSBmcm9tICcuLi91dGlsL3Rocm90dGxlJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4vbWFwJztcblxuLypcbiAqIEFkZHMgdGhlIG1hcCdzIHBvc2l0aW9uIHRvIGl0cyBwYWdlJ3MgbG9jYXRpb24gaGFzaC5cbiAqIFBhc3NlZCBhcyBhbiBvcHRpb24gdG8gdGhlIG1hcCBvYmplY3QuXG4gKlxuICogQHJldHVybnMge0hhc2h9IGB0aGlzYFxuICovXG5jbGFzcyBIYXNoIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX3VwZGF0ZUhhc2g6ICgpID0+ID9UaW1lb3V0SUQ7XG4gICAgX2hhc2hOYW1lOiA/c3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoaGFzaE5hbWU6ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faGFzaE5hbWUgPSBoYXNoTmFtZSAmJiBlbmNvZGVVUklDb21wb25lbnQoaGFzaE5hbWUpO1xuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfZ2V0Q3VycmVudEhhc2gnLFxuICAgICAgICAgICAgJ19vbkhhc2hDaGFuZ2UnLFxuICAgICAgICAgICAgJ191cGRhdGVIYXNoJ1xuICAgICAgICBdLCB0aGlzKTtcblxuICAgICAgICAvLyBNb2JpbGUgU2FmYXJpIGRvZXNuJ3QgYWxsb3cgdXBkYXRpbmcgdGhlIGhhc2ggbW9yZSB0aGFuIDEwMCB0aW1lcyBwZXIgMzAgc2Vjb25kcy5cbiAgICAgICAgdGhpcy5fdXBkYXRlSGFzaCA9IHRocm90dGxlKHRoaXMuX3VwZGF0ZUhhc2hVbnRocm90dGxlZC5iaW5kKHRoaXMpLCAzMCAqIDEwMDAgLyAxMDApO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTWFwIGVsZW1lbnQgdG8gbGlzdGVuIGZvciBjb29yZGluYXRlIGNoYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBtYXBcbiAgICAgKiBAcmV0dXJucyB7SGFzaH0gYHRoaXNgXG4gICAgICovXG4gICAgYWRkVG8obWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRoaXMuX29uSGFzaENoYW5nZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9tYXAub24oJ21vdmVlbmQnLCB0aGlzLl91cGRhdGVIYXNoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBSZW1vdmVzIGhhc2hcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRoaXMuX29uSGFzaENoYW5nZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlSGFzaCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVIYXNoKCkpO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldEhhc2hTdHJpbmcobWFwRmVlZGJhY2s/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IHRoaXMuX21hcC5nZXRDZW50ZXIoKSxcbiAgICAgICAgICAgIHpvb20gPSBNYXRoLnJvdW5kKHRoaXMuX21hcC5nZXRab29tKCkgKiAxMDApIC8gMTAwLFxuICAgICAgICAgICAgLy8gZGVyaXZlZCBmcm9tIGVxdWF0aW9uOiA1MTJweCAqIDJeeiAvIDM2MCAvIDEwXmQgPCAwLjVweFxuICAgICAgICAgICAgcHJlY2lzaW9uID0gTWF0aC5jZWlsKCh6b29tICogTWF0aC5MTjIgKyBNYXRoLmxvZyg1MTIgLyAzNjAgLyAwLjUpKSAvIE1hdGguTE4xMCksXG4gICAgICAgICAgICBtID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiksXG4gICAgICAgICAgICBsbmcgPSBNYXRoLnJvdW5kKGNlbnRlci5sbmcgKiBtKSAvIG0sXG4gICAgICAgICAgICBsYXQgPSBNYXRoLnJvdW5kKGNlbnRlci5sYXQgKiBtKSAvIG0sXG4gICAgICAgICAgICBiZWFyaW5nID0gdGhpcy5fbWFwLmdldEJlYXJpbmcoKSxcbiAgICAgICAgICAgIHBpdGNoID0gdGhpcy5fbWFwLmdldFBpdGNoKCk7XG4gICAgICAgIGxldCBoYXNoID0gJyc7XG4gICAgICAgIGlmIChtYXBGZWVkYmFjaykge1xuICAgICAgICAgICAgLy8gbmV3IG1hcCBmZWVkYmFjayBzaXRlIGhhcyBzb21lIGNvbnN0cmFpbnRzIHRoYXQgZG9uJ3QgYWxsb3dcbiAgICAgICAgICAgIC8vIHVzIHRvIHVzZSB0aGUgc2FtZSBoYXNoIGZvcm1hdCBhcyB3ZSBkbyBmb3IgdGhlIE1hcCBoYXNoIG9wdGlvbi5cbiAgICAgICAgICAgIGhhc2ggKz0gYC8ke2xuZ30vJHtsYXR9LyR7em9vbX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGFzaCArPSBgJHt6b29tfS8ke2xhdH0vJHtsbmd9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiZWFyaW5nIHx8IHBpdGNoKSBoYXNoICs9IChgLyR7TWF0aC5yb3VuZChiZWFyaW5nICogMTApIC8gMTB9YCk7XG4gICAgICAgIGlmIChwaXRjaCkgaGFzaCArPSAoYC8ke01hdGgucm91bmQocGl0Y2gpfWApO1xuXG4gICAgICAgIGlmICh0aGlzLl9oYXNoTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgaGFzaE5hbWUgPSB0aGlzLl9oYXNoTmFtZTtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKS5zcGxpdCgnJicpLm1hcChwYXJ0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBwYXJ0LnNwbGl0KCc9JylbMF07XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gaGFzaE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7a2V5fT0ke2hhc2h9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgICB9KS5maWx0ZXIoYSA9PiBhKTtcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKGAke2hhc2hOYW1lfT0ke2hhc2h9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCMke3BhcnRzLmpvaW4oJyYnKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAjJHtoYXNofWA7XG4gICAgfVxuXG4gICAgX2dldEN1cnJlbnRIYXNoKCkge1xuICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaGFzaCBmcm9tIGxvY2F0aW9uLCBzdHJpcHBlZCBmcm9tIGl0cyBudW1iZXIgc2lnblxuICAgICAgICBjb25zdCBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgnIycsICcnKTtcbiAgICAgICAgaWYgKHRoaXMuX2hhc2hOYW1lKSB7XG4gICAgICAgICAgICAvLyBTcGxpdCB0aGUgcGFyYW1ldGVyLXN0eWxlZCBoYXNoIGludG8gcGFydHMgYW5kIGZpbmQgdGhlIHZhbHVlIHdlIG5lZWRcbiAgICAgICAgICAgIGNvbnN0IGtleXZhbCA9IGhhc2guc3BsaXQoJyYnKS5tYXAoXG4gICAgICAgICAgICAgICAgcGFydCA9PiBwYXJ0LnNwbGl0KCc9JylcbiAgICAgICAgICAgICkuZmluZChwYXJ0ID0+IHBhcnRbMF0gPT09IHRoaXMuX2hhc2hOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiAoa2V5dmFsID8ga2V5dmFsWzFdIHx8ICcnIDogJycpLnNwbGl0KCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2guc3BsaXQoJy8nKTtcbiAgICB9XG5cbiAgICBfb25IYXNoQ2hhbmdlKCkge1xuICAgICAgICBjb25zdCBsb2MgPSB0aGlzLl9nZXRDdXJyZW50SGFzaCgpO1xuICAgICAgICBpZiAobG9jLmxlbmd0aCA+PSAzICYmICFsb2Muc29tZSh2ID0+IGlzTmFOKHYpKSkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLmp1bXBUbyh7XG4gICAgICAgICAgICAgICAgY2VudGVyOiBbK2xvY1syXSwgK2xvY1sxXV0sXG4gICAgICAgICAgICAgICAgem9vbTogK2xvY1swXSxcbiAgICAgICAgICAgICAgICBiZWFyaW5nOiArKGxvY1szXSB8fCAwKSxcbiAgICAgICAgICAgICAgICBwaXRjaDogKyhsb2NbNF0gfHwgMClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF91cGRhdGVIYXNoVW50aHJvdHRsZWQoKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldEhhc2hTdHJpbmcoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwgJycsIGhhc2gpO1xuICAgICAgICB9IGNhdGNoIChTZWN1cml0eUVycm9yKSB7XG4gICAgICAgICAgICAvLyBJRTExIGRvZXMgbm90IGFsbG93IHRoaXMgaWYgdGhlIHBhZ2UgaXMgd2l0aGluIGFuIGlmcmFtZSBjcmVhdGVkXG4gICAgICAgICAgICAvLyB3aXRoIGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LndyaXRlKC4uLikuXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzQxMFxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhhc2g7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uL3V0aWwvZG9tJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHR5cGUgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcblxuLyoqXG4gKiBgTWFwTW91c2VFdmVudGAgaXMgdGhlIGV2ZW50IHR5cGUgZm9yIG1vdXNlLXJlbGF0ZWQgbWFwIGV2ZW50cy5cbiAqIEBleHRlbmRzIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBNb3VzZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBldmVudCB0eXBlLlxuICAgICAqL1xuICAgIHR5cGU6ICdtb3VzZWRvd24nXG4gICAgICAgIHwgJ21vdXNldXAnXG4gICAgICAgIHwgJ2NsaWNrJ1xuICAgICAgICB8ICdkYmxjbGljaydcbiAgICAgICAgfCAnbW91c2Vtb3ZlJ1xuICAgICAgICB8ICdtb3VzZW92ZXInXG4gICAgICAgIHwgJ21vdXNlZW50ZXInXG4gICAgICAgIHwgJ21vdXNlbGVhdmUnXG4gICAgICAgIHwgJ21vdXNlb3V0J1xuICAgICAgICB8ICdjb250ZXh0bWVudSc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYE1hcGAgb2JqZWN0IHRoYXQgZmlyZWQgdGhlIGV2ZW50LlxuICAgICAqL1xuICAgIHRhcmdldDogTWFwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBldmVudCB3aGljaCBjYXVzZWQgdGhlIG1hcCBldmVudC5cbiAgICAgKi9cbiAgICBvcmlnaW5hbEV2ZW50OiBNb3VzZUV2ZW50O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBjdXJzb3IsIHJlbGF0aXZlIHRvIHRoZSBtYXAgYW5kIG1lYXN1cmVkIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lci5cbiAgICAgKi9cbiAgICBwb2ludDogUG9pbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZ2VvZ3JhcGhpYyBsb2NhdGlvbiBvbiB0aGUgbWFwIG9mIHRoZSBtb3VzZSBjdXJzb3IuXG4gICAgICovXG4gICAgbG5nTGF0OiBMbmdMYXQ7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBtYXAgYmVoYXZpb3JzOlxuICAgICAqXG4gICAgICogICAqIE9uIGBtb3VzZWRvd25gIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBEcmFnUGFuSGFuZGxlcn1cbiAgICAgKiAgICogT24gYG1vdXNlZG93bmAgZXZlbnRzLCB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfVxuICAgICAqICAgKiBPbiBgbW91c2Vkb3duYCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9XG4gICAgICogICAqIE9uIGBkYmxjbGlja2AgZXZlbnRzLCB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIERvdWJsZUNsaWNrWm9vbUhhbmRsZXJ9XG4gICAgICpcbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYHRydWVgIGlmIGBwcmV2ZW50RGVmYXVsdGAgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG5cbiAgICBfZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBtYXA6IE1hcCwgb3JpZ2luYWxFdmVudDogTW91c2VFdmVudCwgZGF0YTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBET00ubW91c2VQb3MobWFwLmdldENhbnZhc0NvbnRhaW5lcigpLCBvcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gbWFwLnVucHJvamVjdChwb2ludCk7XG4gICAgICAgIHN1cGVyKHR5cGUsIGV4dGVuZCh7cG9pbnQsIGxuZ0xhdCwgb3JpZ2luYWxFdmVudH0sIGRhdGEpKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRhcmdldCA9IG1hcDtcbiAgICB9XG59XG5cbi8qKlxuICogYE1hcFRvdWNoRXZlbnRgIGlzIHRoZSBldmVudCB0eXBlIGZvciB0b3VjaC1yZWxhdGVkIG1hcCBldmVudHMuXG4gKiBAZXh0ZW5kcyB7T2JqZWN0fVxuICovXG5leHBvcnQgY2xhc3MgTWFwVG91Y2hFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnQgdHlwZS5cbiAgICAgKi9cbiAgICB0eXBlOiAndG91Y2hzdGFydCdcbiAgICAgICAgfCAndG91Y2hlbmQnXG4gICAgICAgIHwgJ3RvdWNoY2FuY2VsJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBgTWFwYCBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgdGFyZ2V0OiBNYXA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGV2ZW50IHdoaWNoIGNhdXNlZCB0aGUgbWFwIGV2ZW50LlxuICAgICAqL1xuICAgIG9yaWdpbmFsRXZlbnQ6IFRvdWNoRXZlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZ2VvZ3JhcGhpYyBsb2NhdGlvbiBvbiB0aGUgbWFwIG9mIHRoZSBjZW50ZXIgb2YgdGhlIHRvdWNoIGV2ZW50IHBvaW50cy5cbiAgICAgKi9cbiAgICBsbmdMYXQ6IExuZ0xhdDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBjb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG9mIHRoZSB0b3VjaCBldmVudCBwb2ludHMsIHJlbGF0aXZlIHRvIHRoZSBtYXAgYW5kIG1lYXN1cmVkIGZyb20gdGhlIHRvcCBsZWZ0XG4gICAgICogY29ybmVyLlxuICAgICAqL1xuICAgIHBvaW50OiBQb2ludDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBwaXhlbCBjb29yZGluYXRlcyBjb3JyZXNwb25kaW5nIHRvIGFcbiAgICAgKiBbdG91Y2ggZXZlbnQncyBgdG91Y2hlc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ub3VjaEV2ZW50L3RvdWNoZXMpIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHBvaW50czogQXJyYXk8UG9pbnQ+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbnMgb24gdGhlIG1hcCBjb3JyZXNwb25kaW5nIHRvIGFcbiAgICAgKiBbdG91Y2ggZXZlbnQncyBgdG91Y2hlc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ub3VjaEV2ZW50L3RvdWNoZXMpIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGxuZ0xhdHM6IEFycmF5PExuZ0xhdD47XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBtYXAgYmVoYXZpb3JzOlxuICAgICAqXG4gICAgICogICAqIE9uIGB0b3VjaHN0YXJ0YCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9XG4gICAgICogICAqIE9uIGB0b3VjaHN0YXJ0YCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgVG91Y2hab29tUm90YXRlSGFuZGxlcn1cbiAgICAgKlxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgaWYgYHByZXZlbnREZWZhdWx0YCBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICovXG4gICAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cblxuICAgIF9kZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIG1hcDogTWFwLCBvcmlnaW5hbEV2ZW50OiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IERPTS50b3VjaFBvcyhtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCksIG9yaWdpbmFsRXZlbnQpO1xuICAgICAgICBjb25zdCBsbmdMYXRzID0gcG9pbnRzLm1hcCgodCkgPT4gbWFwLnVucHJvamVjdCh0KSk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzLnJlZHVjZSgocHJldiwgY3VyciwgaSwgYXJyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcHJldi5hZGQoY3Vyci5kaXYoYXJyLmxlbmd0aCkpO1xuICAgICAgICB9LCBuZXcgUG9pbnQoMCwgMCkpO1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBtYXAudW5wcm9qZWN0KHBvaW50KTtcbiAgICAgICAgc3VwZXIodHlwZSwge3BvaW50cywgcG9pbnQsIGxuZ0xhdHMsIGxuZ0xhdCwgb3JpZ2luYWxFdmVudH0pO1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIGBNYXBXaGVlbEV2ZW50YCBpcyB0aGUgZXZlbnQgdHlwZSBmb3IgdGhlIGB3aGVlbGAgbWFwIGV2ZW50LlxuICogQGV4dGVuZHMge09iamVjdH1cbiAqL1xuZXhwb3J0IGNsYXNzIE1hcFdoZWVsRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50IHR5cGUuXG4gICAgICovXG4gICAgdHlwZTogJ3doZWVsJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBgTWFwYCBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgdGFyZ2V0OiBNYXA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGV2ZW50IHdoaWNoIGNhdXNlZCB0aGUgbWFwIGV2ZW50LlxuICAgICAqL1xuICAgIG9yaWdpbmFsRXZlbnQ6IFdoZWVsRXZlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIFNjcm9sbFpvb21IYW5kbGVyfS5cbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYHRydWVgIGlmIGBwcmV2ZW50RGVmYXVsdGAgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG5cbiAgICBfZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBtYXA6IE1hcCwgb3JpZ2luYWxFdmVudDogV2hlZWxFdmVudCkge1xuICAgICAgICBzdXBlcih0eXBlLCB7b3JpZ2luYWxFdmVudH0pO1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgYE1hcEJveFpvb21FdmVudGAgaXMgdGhlIGV2ZW50IHR5cGUgZm9yIGJveHpvb20tcmVsYXRlZCBtYXAgZXZlbnRzLlxuICogYG9yaWdpbmFsRXZlbnRgIGNhbiBiZSBhIHtAbGluayBNYXAuZXZlbnQ6Y2xpY2t9IHdoZW4gdGhlIHpvb20gaXMgdHJpZ2dlcmVkIGJ5IGEgVUkgZXZlbnQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFwQm94Wm9vbUV2ZW50XG4gKiBAcHJvcGVydHkge01vdXNlRXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuZXhwb3J0IHR5cGUgTWFwQm94Wm9vbUV2ZW50ID0ge1xuICAgIHR5cGU6ICdib3h6b29tc3RhcnQnXG4gICAgICAgIHwgJ2JveHpvb21lbmQnXG4gICAgICAgIHwgJ2JveHpvb21jYW5jZWwnLFxuICAgIG1hcDogTWFwLFxuICAgIG9yaWdpbmFsRXZlbnQ6IE1vdXNlRXZlbnRcbn07XG5cbi8qKlxuICogQSBgTWFwRGF0YUV2ZW50YCBvYmplY3QgaXMgZW1pdHRlZCB3aXRoIHRoZSB7QGxpbmsgTWFwLmV2ZW50OmRhdGF9XG4gKiBhbmQge0BsaW5rIE1hcC5ldmVudDpkYXRhbG9hZGluZ30gZXZlbnRzLiBQb3NzaWJsZSB2YWx1ZXMgZm9yXG4gKiBgZGF0YVR5cGVgcyBhcmU6XG4gKlxuICogLSBgJ3NvdXJjZSdgOiBUaGUgbm9uLXRpbGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYW55IHNvdXJjZVxuICogLSBgJ3N0eWxlJ2A6IFRoZSBbc3R5bGVdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKSB1c2VkIGJ5IHRoZSBtYXBcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYXBEYXRhRXZlbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCBoYXMgY2hhbmdlZC4gT25lIG9mIGAnc291cmNlJ2AsIGAnc3R5bGUnYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzU291cmNlTG9hZGVkXSBUcnVlIGlmIHRoZSBldmVudCBoYXMgYSBgZGF0YVR5cGVgIG9mIGBzb3VyY2VgIGFuZCB0aGUgc291cmNlIGhhcyBubyBvdXRzdGFuZGluZyBuZXR3b3JrIHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFtzb3VyY2VdIFRoZSBbc3R5bGUgc3BlYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc291cmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzKSBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc291cmNlRGF0YVR5cGVdIEluY2x1ZGVkIGlmIHRoZSBldmVudCBoYXMgYSBgZGF0YVR5cGVgIG9mIGBzb3VyY2VgIGFuZCB0aGUgZXZlbnQgc2lnbmFsc1xuICogdGhhdCBpbnRlcm5hbCBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIG9yIGNoYW5nZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYG1ldGFkYXRhYCBhbmQgYGNvbnRlbnRgLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFt0aWxlXSBUaGUgdGlsZSBiZWluZyBsb2FkZWQgb3IgY2hhbmdlZCwgaWYgdGhlIGV2ZW50IGhhcyBhIGBkYXRhVHlwZWAgb2YgYHNvdXJjZWAgYW5kXG4gKiB0aGUgZXZlbnQgaXMgcmVsYXRlZCB0byBsb2FkaW5nIG9mIGEgdGlsZS5cbiAqIEBwcm9wZXJ0eSB7Q29vcmRpbmF0ZX0gW2Nvb3JkXSBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgdGlsZSBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYCBhbmRcbiAqIHRoZSBldmVudCBpcyByZWxhdGVkIHRvIGxvYWRpbmcgb2YgYSB0aWxlLlxuICovXG5leHBvcnQgdHlwZSBNYXBEYXRhRXZlbnQgPSB7XG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGFUeXBlOiBzdHJpbmdcbn07XG5cbmV4cG9ydCB0eXBlIE1hcENvbnRleHRFdmVudCA9IHtcbiAgICB0eXBlOiAnd2ViZ2xjb250ZXh0bG9zdCcgfCAnd2ViZ2xjb250ZXh0cmVzdG9yZWQnLFxuICAgIG9yaWdpbmFsRXZlbnQ6IFdlYkdMQ29udGV4dEV2ZW50XG59XG5cbmV4cG9ydCB0eXBlIE1hcEV2ZW50ID1cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIHByZXNzZWQgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2Vkb3duXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAnbW91c2Vkb3duJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyByZWxlYXNlZCB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZXVwXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAnbW91c2V1cCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgbW92ZWQgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2VvdmVyXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0dldCBjb29yZGluYXRlcyBvZiB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9tb3VzZS1wb3NpdGlvbi8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHVuZGVyIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hvdmVyLXN0eWxlcy8pXG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGhvdmVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWhvdmVyLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZW92ZXInXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIG1vdmVkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdXNlbW92ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAc2VlIFtHZXQgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbW91c2UtcG9zaXRpb24vKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB1bmRlciB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9ob3Zlci1zdHlsZXMvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBvdmVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWhvdmVyLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZW1vdmUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIHByZXNzZWQgYW5kIHJlbGVhc2VkIGF0IHRoZSBzYW1lIHBvaW50IG9uIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY2xpY2tcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQHNlZSBbTWVhc3VyZSBkaXN0YW5jZXNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWVhc3VyZS8pXG4gICAgICogQHNlZSBbQ2VudGVyIHRoZSBtYXAgb24gYSBjbGlja2VkIHN5bWJvbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jZW50ZXItb24tc3ltYm9sLylcbiAgICAgKi9cbiAgICB8ICdjbGljaydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgY2xpY2tlZCB0d2ljZSBhdCB0aGUgc2FtZSBwb2ludCBvbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IGRibGNsaWNrXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RibGNsaWNrJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBlbnRlcnMgYSB2aXNpYmxlIHBvcnRpb24gb2YgYSBzcGVjaWZpZWQgbGF5ZXIgZnJvbVxuICAgICAqIG91dHNpZGUgdGhhdCBsYXllciBvciBvdXRzaWRlIHRoZSBtYXAgY2FudmFzLiBUaGlzIGV2ZW50IGNhbiBvbmx5IGJlIGxpc3RlbmVkIGZvciB2aWEgdGhlIHRocmVlLWFyZ3VtZW50XG4gICAgICogdmVyc2lvbiBvZiB7QGxpbmsgTWFwI29ufSwgd2hlcmUgdGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2VlbnRlclxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdtb3VzZWVudGVyJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBsZWF2ZXMgYSB2aXNpYmxlIHBvcnRpb24gb2YgYSBzcGVjaWZpZWQgbGF5ZXIsIG9yIGxlYXZlc1xuICAgICAqIHRoZSBtYXAgY2FudmFzLiBUaGlzIGV2ZW50IGNhbiBvbmx5IGJlIGxpc3RlbmVkIGZvciB2aWEgdGhlIHRocmVlLWFyZ3VtZW50IHZlcnNpb24gb2Yge0BsaW5rIE1hcCNvbn0sXG4gICAgICogd2hlcmUgdGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2VsZWF2ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgdW5kZXIgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaG92ZXItc3R5bGVzLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZWxlYXZlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50IGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBsZWF2ZXMgdGhlIG1hcCdzIGNhbnZhcy5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZW91dFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdtb3VzZW91dCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHJpZ2h0IGJ1dHRvbiBvZiB0aGUgbW91c2UgaXMgY2xpY2tlZCBvciB0aGUgY29udGV4dCBtZW51IGtleSBpcyBwcmVzc2VkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbnRleHRtZW51XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2NvbnRleHRtZW51J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFtgd2hlZWxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvd2hlZWwpIGV2ZW50IG9jY3VycyB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCB3aGVlbFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcFdoZWVsRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICd3aGVlbCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoc3RhcnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvdG91Y2hzdGFydCkgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IHRvdWNoc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAndG91Y2hzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoZW5kYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3RvdWNoZW5kKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAndG91Y2hlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgW2B0b3VjaG1vdmVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvdG91Y2htb3ZlKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2htb3ZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3RvdWNobW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoY2FuY2VsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3RvdWNoY2FuY2VsKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hjYW5jZWxcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAndG91Y2hjYW5jZWwnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBqdXN0IGJlZm9yZSB0aGUgbWFwIGJlZ2lucyBhIHRyYW5zaXRpb24gZnJvbSBvbmVcbiAgICAgKiB2aWV3IHRvIGFub3RoZXIsIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjanVtcFRvfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3Zlc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ21vdmVzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24gZnJvbSBvbmUgdmlldyB0b1xuICAgICAqIGFub3RoZXIsIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ21vdmUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBqdXN0IGFmdGVyIHRoZSBtYXAgY29tcGxldGVzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZVxuICAgICAqIHZpZXcgdG8gYW5vdGhlciwgYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNqdW1wVG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqIEBzZWUgW1BsYXkgbWFwIGxvY2F0aW9ucyBhcyBhIHNsaWRlc2hvd10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wbGF5YmFjay1sb2NhdGlvbnMvKVxuICAgICAqIEBzZWUgW0ZpbHRlciBmZWF0dXJlcyB3aXRoaW4gbWFwIHZpZXddKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLWZlYXR1cmVzLXdpdGhpbi1tYXAtdmlldy8pXG4gICAgICovXG4gICAgfCAnbW92ZWVuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gc3RhcnRzLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RyYWdzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdkcmFnJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBlbmRzLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnZW5kXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7e29yaWdpbmFsRXZlbnQ6IERyYWdFdmVudH19IGRhdGFcbiAgICAgKi9cbiAgICB8ICdkcmFnZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQganVzdCBiZWZvcmUgdGhlIG1hcCBiZWdpbnMgYSB0cmFuc2l0aW9uIGZyb20gb25lIHpvb20gbGV2ZWwgdG8gYW5vdGhlcixcbiAgICAgKiBhcyB0aGUgcmVzdWx0IG9mIGVpdGhlciB1c2VyIGludGVyYWN0aW9uIG9yIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgTWFwI2ZseVRvfS5cbiAgICAgKlxuICAgICAqIEBldmVudCB6b29tc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3pvb21zdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24gZnJvbSBvbmUgem9vbSBsZXZlbCB0byBhbm90aGVyLFxuICAgICAqIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHpvb21cbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW1VwZGF0ZSBhIGNob3JvcGxldGggbGF5ZXIgYnkgem9vbSBsZXZlbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91cGRhdGluZy1jaG9yb3BsZXRoLylcbiAgICAgKi9cbiAgICB8ICd6b29tJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQganVzdCBhZnRlciB0aGUgbWFwIGNvbXBsZXRlcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgem9vbSBsZXZlbCB0byBhbm90aGVyLFxuICAgICAqIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHpvb21lbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3pvb21lbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIHN0YXJ0cy4gU2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcm90YXRlc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3JvdGF0ZXN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgcmVwZWF0ZWRseSBkdXJpbmcgYSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uIFNlZSB7QGxpbmsgRHJhZ1JvdGF0ZUhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IHJvdGF0ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAncm90YXRlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBlbmRzLiBTZWUge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCByb3RhdGVlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3JvdGF0ZWVuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW5ldmVyIHRoZSBtYXAncyBwaXRjaCAodGlsdCkgYmVnaW5zIGEgY2hhbmdlIGFzXG4gICAgICogdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30gLlxuICAgICAqXG4gICAgICogQGV2ZW50IHBpdGNoc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBFdmVudERhdGF9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdwaXRjaHN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbmV2ZXIgdGhlIG1hcCdzIHBpdGNoICh0aWx0KSBjaGFuZ2VzIGFzLlxuICAgICAqIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHBpdGNoXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRXZlbnREYXRhfSBkYXRhXG4gICAgICovXG4gICAgfCAncGl0Y2gnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgbWFwJ3MgcGl0Y2ggKHRpbHQpIGZpbmlzaGVzIGNoYW5naW5nIGFzXG4gICAgICogdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcGl0Y2hlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBFdmVudERhdGF9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdwaXRjaGVuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gc3RhcnRzLiBTZWUge0BsaW5rIEJveFpvb21IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBib3h6b29tc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBCb3hab29tRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdib3h6b29tc3RhcnQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGVuZHMuICBTZWUge0BsaW5rIEJveFpvb21IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBib3h6b29tZW5kXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICogQHByb3BlcnR5IHtNYXBCb3hab29tRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdib3h6b29tZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIGEgXCJib3ggem9vbVwiIGludGVyYWN0aW9uLCBvciB3aGVuIHRoZSBib3VuZGluZyBib3ggZG9lcyBub3QgbWVldCB0aGUgbWluaW11bSBzaXplIHRocmVzaG9sZC5cbiAgICAgKiBTZWUge0BsaW5rIEJveFpvb21IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBib3h6b29tY2FuY2VsXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwQm94Wm9vbUV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnYm94em9vbWNhbmNlbCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYXAgaGFzIGJlZW4gcmVzaXplZC5cbiAgICAgKlxuICAgICAqIEBldmVudCByZXNpemVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAncmVzaXplJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgV2ViR0wgY29udGV4dCBpcyBsb3N0LlxuICAgICAqXG4gICAgICogQGV2ZW50IHdlYmdsY29udGV4dGxvc3RcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAnd2ViZ2xjb250ZXh0bG9zdCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIFdlYkdMIGNvbnRleHQgaXMgcmVzdG9yZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgd2ViZ2xjb250ZXh0cmVzdG9yZWRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAnd2ViZ2xjb250ZXh0cmVzdG9yZWQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBpbW1lZGlhdGVseSBhZnRlciBhbGwgbmVjZXNzYXJ5IHJlc291cmNlcyBoYXZlIGJlZW4gZG93bmxvYWRlZFxuICAgICAqIGFuZCB0aGUgZmlyc3QgdmlzdWFsbHkgY29tcGxldGUgcmVuZGVyaW5nIG9mIHRoZSBtYXAgaGFzIG9jY3VycmVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAc2VlIFtEcmF3IEdlb0pTT04gcG9pbnRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dlb2pzb24tbWFya2Vycy8pXG4gICAgICogQHNlZSBbQWRkIGxpdmUgcmVhbHRpbWUgZGF0YV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLWdlb2pzb24vKVxuICAgICAqIEBzZWUgW0FuaW1hdGUgYSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hbmltYXRlLXBvaW50LWFsb25nLWxpbmUvKVxuICAgICAqL1xuICAgIHwgJ2xvYWQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuZXZlciB0aGUgbWFwIGlzIGRyYXduIHRvIHRoZSBzY3JlZW4sIGFzIHRoZSByZXN1bHQgb2ZcbiAgICAgKlxuICAgICAqIC0gYSBjaGFuZ2UgdG8gdGhlIG1hcCdzIHBvc2l0aW9uLCB6b29tLCBwaXRjaCwgb3IgYmVhcmluZ1xuICAgICAqIC0gYSBjaGFuZ2UgdG8gdGhlIG1hcCdzIHN0eWxlXG4gICAgICogLSBhIGNoYW5nZSB0byBhIEdlb0pTT04gc291cmNlXG4gICAgICogLSB0aGUgbG9hZGluZyBvZiBhIHZlY3RvciB0aWxlLCBHZW9KU09OIGZpbGUsIGdseXBoLCBvciBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBldmVudCByZW5kZXJcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAncmVuZGVyJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgdGhlIGxhc3QgZnJhbWUgcmVuZGVyZWQgYmVmb3JlIHRoZSBtYXAgZW50ZXJzIGFuXG4gICAgICogXCJpZGxlXCIgc3RhdGU6XG4gICAgICpcbiAgICAgKiAtIE5vIGNhbWVyYSB0cmFuc2l0aW9ucyBhcmUgaW4gcHJvZ3Jlc3NcbiAgICAgKiAtIEFsbCBjdXJyZW50bHkgcmVxdWVzdGVkIHRpbGVzIGhhdmUgbG9hZGVkXG4gICAgICogLSBBbGwgZmFkZS90cmFuc2l0aW9uIGFuaW1hdGlvbnMgaGF2ZSBjb21wbGV0ZWRcbiAgICAgKlxuICAgICAqIEBldmVudCBpZGxlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIHwgJ2lkbGUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgbWFwIGhhcyBiZWVuIHJlbW92ZWQgd2l0aCB7QGxpbmsgTWFwLmV2ZW50OnJlbW92ZX0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcmVtb3ZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIHwgJ3JlbW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzLiBUaGlzIGlzIEdMIEpTJ3MgcHJpbWFyeSBlcnJvciByZXBvcnRpbmdcbiAgICAgKiBtZWNoYW5pc20uIFdlIHVzZSBhbiBldmVudCBpbnN0ZWFkIG9mIGB0aHJvd2AgdG8gYmV0dGVyIGFjY29tbW9kYXRlXG4gICAgICogYXN5bmNyb25vdXMgb3BlcmF0aW9ucy4gSWYgbm8gbGlzdGVuZXJzIGFyZSBib3VuZCB0byB0aGUgYGVycm9yYCBldmVudCwgdGhlXG4gICAgICogZXJyb3Igd2lsbCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7e2Vycm9yOiB7bWVzc2FnZTogc3RyaW5nfX19IGRhdGFcbiAgICAgKi9cbiAgICB8ICdlcnJvcidcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW55IG1hcCBkYXRhIGxvYWRzIG9yIGNoYW5nZXMuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqXG4gICAgICogQGV2ZW50IGRhdGFcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdkYXRhJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbWFwJ3Mgc3R5bGUgbG9hZHMgb3IgY2hhbmdlcy4gU2VlXG4gICAgICoge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3R5bGVkYXRhXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRGF0YUV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnc3R5bGVkYXRhJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBvbmUgb2YgdGhlIG1hcCdzIHNvdXJjZXMgbG9hZHMgb3IgY2hhbmdlcywgaW5jbHVkaW5nIGlmIGEgdGlsZSBiZWxvbmdpbmdcbiAgICAgKiB0byBhIHNvdXJjZSBsb2FkcyBvciBjaGFuZ2VzLiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc291cmNlZGF0YVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3NvdXJjZWRhdGEnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGFueSBtYXAgZGF0YSAoc3R5bGUsIHNvdXJjZSwgdGlsZSwgZXRjKSBiZWdpbnMgbG9hZGluZyBvclxuICAgICAqIGNoYW5naW5nIGFzeW5jcm9ub3VzbHkuIEFsbCBgZGF0YWxvYWRpbmdgIGV2ZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBgZGF0YWBcbiAgICAgKiBvciBgZXJyb3JgIGV2ZW50LiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZGF0YWxvYWRpbmdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdkYXRhbG9hZGluZydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1hcCdzIHN0eWxlIGJlZ2lucyBsb2FkaW5nIG9yIGNoYW5naW5nIGFzeW5jcm9ub3VzbHkuXG4gICAgICogQWxsIGBzdHlsZWRhdGFsb2FkaW5nYCBldmVudHMgYXJlIGZvbGxvd2VkIGJ5IGEgYHN0eWxlZGF0YWBcbiAgICAgKiBvciBgZXJyb3JgIGV2ZW50LiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3R5bGVkYXRhbG9hZGluZ1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3N0eWxlZGF0YWxvYWRpbmcnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIG9uZSBvZiB0aGUgbWFwJ3Mgc291cmNlcyBiZWdpbnMgbG9hZGluZyBvciBjaGFuZ2luZyBhc3luY3Jvbm91c2x5LlxuICAgICAqIEFsbCBgc291cmNlZGF0YWxvYWRpbmdgIGV2ZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBgc291cmNlZGF0YWAgb3IgYGVycm9yYCBldmVudC5cbiAgICAgKiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc291cmNlZGF0YWxvYWRpbmdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdzb3VyY2VkYXRhbG9hZGluZydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW4gaWNvbiBvciBwYXR0ZXJuIG5lZWRlZCBieSB0aGUgc3R5bGUgaXMgbWlzc2luZy4gVGhlIG1pc3NpbmcgaW1hZ2UgY2FuXG4gICAgICogYmUgYWRkZWQgd2l0aCB7QGxpbmsgTWFwI2FkZEltYWdlfSB3aXRoaW4gdGhpcyBldmVudCBsaXN0ZW5lciBjYWxsYmFjayB0byBwcmV2ZW50IHRoZSBpbWFnZSBmcm9tXG4gICAgICogYmVpbmcgc2tpcHBlZC4gVGhpcyBldmVudCBjYW4gYmUgdXNlZCB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSBpY29ucyBhbmQgcGF0dGVybnMuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3R5bGVpbWFnZW1pc3NpbmdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIFRoZSBpZCBvZiB0aGUgbWlzc2luZyBpbWFnZS5cbiAgICAgKlxuICAgICAqIEBzZWUgW0dlbmVyYXRlIGFuZCBhZGQgYSBtaXNzaW5nIGljb24gdG8gdGhlIG1hcF0oaHR0cHM6Ly9tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS1taXNzaW5nLWdlbmVyYXRlZC8pXG4gICAgICovXG4gICAgfCAnc3R5bGVpbWFnZW1pc3NpbmcnXG5cbiAgICAvKipcbiAgICAgKiBAZXZlbnQgc3R5bGUubG9hZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHwgJ3N0eWxlLmxvYWQnO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmltcG9ydCB7ZWFzZSBhcyBfZWFzZSwgYmluZEFsbCwgYmV6aWVyfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uLy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi8uLi91dGlsL3Rhc2tfcXVldWUnO1xuXG4vLyBkZWx0YVkgdmFsdWUgZm9yIG1vdXNlIHNjcm9sbCB3aGVlbCBpZGVudGlmaWNhdGlvblxuY29uc3Qgd2hlZWxab29tRGVsdGEgPSA0LjAwMDI0NDE0MDYyNTtcblxuLy8gVGhlc2UgbWFnaWMgbnVtYmVycyBjb250cm9sIHRoZSByYXRlIG9mIHpvb20uIFRyYWNrcGFkIGV2ZW50cyBmaXJlIGF0IGEgZ3JlYXRlclxuLy8gZnJlcXVlbmN5IHRoYW4gbW91c2Ugc2Nyb2xsIHdoZWVsLCBzbyByZWR1Y2UgdGhlIHpvb20gcmF0ZSBwZXIgd2hlZWwgdGlja1xuY29uc3QgZGVmYXVsdFpvb21SYXRlID0gMSAvIDEwMDtcbmNvbnN0IHdoZWVsWm9vbVJhdGUgPSAxIC8gNDUwO1xuXG4vLyB1cHBlciBib3VuZCBvbiBob3cgbXVjaCB3ZSBzY2FsZSB0aGUgbWFwIGluIGFueSBzaW5nbGUgcmVuZGVyIGZyYW1lOyB0aGlzXG4vLyBpcyB1c2VkIHRvIGxpbWl0IHpvb20gcmF0ZSBpbiB0aGUgY2FzZSBvZiB2ZXJ5IGZhc3Qgc2Nyb2xsaW5nXG5jb25zdCBtYXhTY2FsZVBlckZyYW1lID0gMjtcblxuLyoqXG4gKiBUaGUgYFNjcm9sbFpvb21IYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSB0aGUgbWFwIGJ5IHNjcm9sbGluZy5cbiAqL1xuY2xhc3MgU2Nyb2xsWm9vbUhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3pvb21pbmc6IGJvb2xlYW47XG4gICAgX2Fyb3VuZENlbnRlcjogYm9vbGVhbjtcbiAgICBfYXJvdW5kOiBQb2ludDtcbiAgICBfYXJvdW5kUG9pbnQ6IFBvaW50O1xuICAgIF90eXBlOiAnd2hlZWwnIHwgJ3RyYWNrcGFkJyB8IG51bGw7XG4gICAgX2xhc3RWYWx1ZTogbnVtYmVyO1xuICAgIF90aW1lb3V0OiA/VGltZW91dElEOyAvLyB1c2VkIGZvciBkZWxheWVkLWhhbmRsaW5nIG9mIGEgc2luZ2xlIHdoZWVsIG1vdmVtZW50XG4gICAgX2ZpbmlzaFRpbWVvdXQ6ID9UaW1lb3V0SUQ7IC8vIHVzZWQgdG8gZGVsYXkgZmluYWwgJ3ttb3ZlLHpvb219ZW5kJyBldmVudHNcblxuICAgIF9sYXN0V2hlZWxFdmVudDogYW55O1xuICAgIF9sYXN0V2hlZWxFdmVudFRpbWU6IG51bWJlcjtcblxuICAgIF9zdGFydFpvb206ID9udW1iZXI7XG4gICAgX3RhcmdldFpvb206ID9udW1iZXI7XG4gICAgX2RlbHRhOiBudW1iZXI7XG4gICAgX2Vhc2luZzogPygobnVtYmVyKSA9PiBudW1iZXIpO1xuICAgIF9wcmV2RWFzZTogP3tzdGFydDogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyLCBlYXNpbmc6IChudW1iZXIpID0+IG51bWJlcn07XG5cbiAgICBfZnJhbWVJZDogP1Rhc2tJRDtcblxuICAgIF9kZWZhdWx0Wm9vbVJhdGU6IG51bWJlcjtcbiAgICBfd2hlZWxab29tUmF0ZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2VsID0gbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuXG4gICAgICAgIHRoaXMuX2RlbHRhID0gMDtcblxuICAgICAgICB0aGlzLl9kZWZhdWx0Wm9vbVJhdGUgPSBkZWZhdWx0Wm9vbVJhdGU7XG4gICAgICAgIHRoaXMuX3doZWVsWm9vbVJhdGUgPSB3aGVlbFpvb21SYXRlO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbldoZWVsJyxcbiAgICAgICAgICAgICdfb25UaW1lb3V0JyxcbiAgICAgICAgICAgICdfb25TY3JvbGxGcmFtZScsXG4gICAgICAgICAgICAnX29uU2Nyb2xsRmluaXNoZWQnXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgem9vbSByYXRlIG9mIGEgdHJhY2twYWRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3pvb21SYXRlID0gMS8xMDBdXG4gICAgICovXG4gICAgc2V0Wm9vbVJhdGUoem9vbVJhdGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9kZWZhdWx0Wm9vbVJhdGUgPSB6b29tUmF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHpvb20gcmF0ZSBvZiBhIG1vdXNlIHdoZWVsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aGVlbFpvb21SYXRlID0gMS80NTBdXG4gICAgICovXG4gICAgc2V0V2hlZWxab29tUmF0ZSh3aGVlbFpvb21SYXRlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fd2hlZWxab29tUmF0ZSA9IHdoZWVsWm9vbVJhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcInNjcm9sbCB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICAvKlxuICAgICogQWN0aXZlIHN0YXRlIGlzIHR1cm5lZCBvbiBhbmQgb2ZmIHdpdGggZXZlcnkgc2Nyb2xsIHdoZWVsIGV2ZW50IGFuZCBpcyBzZXQgYmFjayB0byBmYWxzZSBiZWZvcmUgdGhlIG1hcFxuICAgICogcmVuZGVyIGlzIGNhbGxlZCwgc28gX2FjdGl2ZSBpcyBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBzY3JvbGwgem9vbSBhbmltYXRpb24gaXMgaW5cbiAgICAqIHByb2dyZXNzLlxuICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcbiAgICB9XG5cbiAgICBpc1pvb21pbmcoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX3pvb21pbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYXJvdW5kXSBJZiBcImNlbnRlclwiIGlzIHBhc3NlZCwgbWFwIHdpbGwgem9vbSBhcm91bmQgY2VudGVyIG9mIG1hcFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC5zY3JvbGxab29tLmVuYWJsZSgpO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogIG1hcC5zY3JvbGxab29tLmVuYWJsZSh7IGFyb3VuZDogJ2NlbnRlcicgfSlcbiAgICAgKi9cbiAgICBlbmFibGUob3B0aW9uczogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9hcm91bmRDZW50ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuYXJvdW5kID09PSAnY2VudGVyJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJzY3JvbGwgdG8gem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC5zY3JvbGxab29tLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uV2hlZWwoZTogV2hlZWxFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcblxuICAgICAgICAvLyBSZW1vdmUgYGFueWAgY2FzdCB3aGVuIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy80ODc5IGlzIGZpeGVkLlxuICAgICAgICBsZXQgdmFsdWUgPSBlLmRlbHRhTW9kZSA9PT0gKHdpbmRvdy5XaGVlbEV2ZW50OiBhbnkpLkRPTV9ERUxUQV9MSU5FID8gZS5kZWx0YVkgKiA0MCA6IGUuZGVsdGFZO1xuICAgICAgICBjb25zdCBub3cgPSBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgdGltZURlbHRhID0gbm93IC0gKHRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZSB8fCAwKTtcblxuICAgICAgICB0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWUgPSBub3c7XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSAwICYmICh2YWx1ZSAlIHdoZWVsWm9vbURlbHRhKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gVGhpcyBvbmUgaXMgZGVmaW5pdGVseSBhIG1vdXNlIHdoZWVsIGV2ZW50LlxuICAgICAgICAgICAgdGhpcy5fdHlwZSA9ICd3aGVlbCc7XG5cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gMCAmJiBNYXRoLmFicyh2YWx1ZSkgPCA0KSB7XG4gICAgICAgICAgICAvLyBUaGlzIG9uZSBpcyBkZWZpbml0ZWx5IGEgdHJhY2twYWQgZXZlbnQgYmVjYXVzZSBpdCBpcyBzbyBzbWFsbC5cbiAgICAgICAgICAgIHRoaXMuX3R5cGUgPSAndHJhY2twYWQnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodGltZURlbHRhID4gNDAwKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGxpa2VseSBhIG5ldyBzY3JvbGwgYWN0aW9uLlxuICAgICAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sYXN0VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgLy8gU3RhcnQgYSB0aW1lb3V0IGluIGNhc2UgdGhpcyB3YXMgYSBzaW5ndWxhciBldmVudCwgYW5kIGRlbHkgaXQgYnkgdXAgdG8gNDBtcy5cbiAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuX29uVGltZW91dCwgNDAsIGUpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3R5cGUpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSByZXBlYXRpbmcgZXZlbnQsIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSB0eXBlIG9mIGV2ZW50IGp1c3QgeWV0LlxuICAgICAgICAgICAgLy8gSWYgdGhlIGRlbHRhIHBlciB0aW1lIGlzIHNtYWxsLCB3ZSBhc3N1bWUgaXQncyBhIGZhc3QgdHJhY2twYWQ7IG90aGVyd2lzZSB3ZSBzd2l0Y2ggaW50byB3aGVlbCBtb2RlLlxuICAgICAgICAgICAgdGhpcy5fdHlwZSA9IChNYXRoLmFicyh0aW1lRGVsdGEgKiB2YWx1ZSkgPCAyMDApID8gJ3RyYWNrcGFkJyA6ICd3aGVlbCc7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBvdXIgZGVsYXllZCBldmVudCBpc24ndCBmaXJlZCBhZ2FpbiwgYmVjYXVzZSB3ZSBhY2N1bXVsYXRlXG4gICAgICAgICAgICAvLyB0aGUgcHJldmlvdXMgZXZlbnQgKHdoaWNoIHdhcyBsZXNzIHRoYW4gNDBtcyBhZ28pIGludG8gdGhpcyBldmVudC5cbiAgICAgICAgICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX2xhc3RWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNsb3cgZG93biB6b29tIGlmIHNoaWZ0IGtleSBpcyBoZWxkIGZvciBtb3JlIHByZWNpc2Ugem9vbWluZ1xuICAgICAgICBpZiAoZS5zaGlmdEtleSAmJiB2YWx1ZSkgdmFsdWUgPSB2YWx1ZSAvIDQ7XG5cbiAgICAgICAgLy8gT25seSBmaXJlIHRoZSBjYWxsYmFjayBpZiB3ZSBhY3R1YWxseSBrbm93IHdoYXQgdHlwZSBvZiBzY3JvbGxpbmcgZGV2aWNlIHRoZSB1c2VyIHVzZXMuXG4gICAgICAgIGlmICh0aGlzLl90eXBlKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0V2hlZWxFdmVudCA9IGU7XG4gICAgICAgICAgICB0aGlzLl9kZWx0YSAtPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgX29uVGltZW91dChpbml0aWFsRXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLl90eXBlID0gJ3doZWVsJztcbiAgICAgICAgdGhpcy5fZGVsdGEgLT0gdGhpcy5fbGFzdFZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnQoaW5pdGlhbEV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zdGFydChlOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kZWx0YSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuaXNab29taW5nKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3pvb21pbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCdtb3Zlc3RhcnQnLCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnem9vbXN0YXJ0Jywge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmluaXNoVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2ZpbmlzaFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcblxuICAgICAgICB0aGlzLl9hcm91bmQgPSBMbmdMYXQuY29udmVydCh0aGlzLl9hcm91bmRDZW50ZXIgPyB0aGlzLl9tYXAuZ2V0Q2VudGVyKCkgOiB0aGlzLl9tYXAudW5wcm9qZWN0KHBvcykpO1xuICAgICAgICB0aGlzLl9hcm91bmRQb2ludCA9IHRoaXMuX21hcC50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludCh0aGlzLl9hcm91bmQpO1xuICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSB0aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblNjcm9sbEZyYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vblNjcm9sbEZyYW1lKCkge1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMuX21hcC50cmFuc2Zvcm07XG5cbiAgICAgICAgLy8gaWYgd2UndmUgaGFkIHNjcm9sbCBldmVudHMgc2luY2UgdGhlIGxhc3QgcmVuZGVyIGZyYW1lLCBjb25zdW1lIHRoZVxuICAgICAgICAvLyBhY2N1bXVsYXRlZCBkZWx0YSwgYW5kIHVwZGF0ZSB0aGUgdGFyZ2V0IHpvb20gbGV2ZWwgYWNjb3JkaW5nbHlcbiAgICAgICAgaWYgKHRoaXMuX2RlbHRhICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBGb3IgdHJhY2twYWQgZXZlbnRzIGFuZCBzaW5nbGUgbW91c2Ugd2hlZWwgdGlja3MsIHVzZSB0aGUgZGVmYXVsdCB6b29tIHJhdGVcbiAgICAgICAgICAgIGNvbnN0IHpvb21SYXRlID0gKHRoaXMuX3R5cGUgPT09ICd3aGVlbCcgJiYgTWF0aC5hYnModGhpcy5fZGVsdGEpID4gd2hlZWxab29tRGVsdGEpID8gdGhpcy5fd2hlZWxab29tUmF0ZSA6IHRoaXMuX2RlZmF1bHRab29tUmF0ZTtcbiAgICAgICAgICAgIC8vIFNjYWxlIGJ5IHNpZ21vaWQgb2Ygc2Nyb2xsIHdoZWVsIGRlbHRhLlxuICAgICAgICAgICAgbGV0IHNjYWxlID0gbWF4U2NhbGVQZXJGcmFtZSAvICgxICsgTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhICogem9vbVJhdGUpKSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWx0YSA8IDAgJiYgc2NhbGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBzY2FsZSA9IDEgLyBzY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZnJvbVNjYWxlID0gdHlwZW9mIHRoaXMuX3RhcmdldFpvb20gPT09ICdudW1iZXInID8gdHIuem9vbVNjYWxlKHRoaXMuX3RhcmdldFpvb20pIDogdHIuc2NhbGU7XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRab29tID0gTWF0aC5taW4odHIubWF4Wm9vbSwgTWF0aC5tYXgodHIubWluWm9vbSwgdHIuc2NhbGVab29tKGZyb21TY2FsZSAqIHNjYWxlKSkpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbW91c2Ugd2hlZWwsIHJlZnJlc2ggdGhlIHN0YXJ0aW5nIHpvb20gYW5kIGVhc2luZ1xuICAgICAgICAgICAgLy8gZnVuY3Rpb24gd2UncmUgdXNpbmcgdG8gc21vb3RoIG91dCB0aGUgem9vbWluZyBiZXR3ZWVuIHdoZWVsXG4gICAgICAgICAgICAvLyBldmVudHNcbiAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSAnd2hlZWwnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRab29tID0gdHIuem9vbTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXNpbmcgPSB0aGlzLl9zbW9vdGhPdXRFYXNpbmcoMjAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZGVsdGEgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0Wm9vbSA9IHR5cGVvZiB0aGlzLl90YXJnZXRab29tID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRab29tIDogdHIuem9vbTtcbiAgICAgICAgY29uc3Qgc3RhcnRab29tID0gdGhpcy5fc3RhcnRab29tO1xuICAgICAgICBjb25zdCBlYXNpbmcgPSB0aGlzLl9lYXNpbmc7XG5cbiAgICAgICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl90eXBlID09PSAnd2hlZWwnICYmIHN0YXJ0Wm9vbSAmJiBlYXNpbmcpIHtcbiAgICAgICAgICAgIGFzc2VydChlYXNpbmcgJiYgdHlwZW9mIHN0YXJ0Wm9vbSA9PT0gJ251bWJlcicpO1xuXG4gICAgICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oKGJyb3dzZXIubm93KCkgLSB0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWUpIC8gMjAwLCAxKTtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBlYXNpbmcodCk7XG4gICAgICAgICAgICB0ci56b29tID0gaW50ZXJwb2xhdGUoc3RhcnRab29tLCB0YXJnZXRab29tLCBrKTtcbiAgICAgICAgICAgIGlmICh0IDwgMSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZnJhbWVJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25TY3JvbGxGcmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ci56b29tID0gdGFyZ2V0Wm9vbTtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0aGlzLl9hcm91bmQsIHRoaXMuX2Fyb3VuZFBvaW50KTtcblxuICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFdoZWVsRXZlbnR9KSk7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnem9vbScsIHtvcmlnaW5hbEV2ZW50OiB0aGlzLl9sYXN0V2hlZWxFdmVudH0pKTtcblxuICAgICAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fZmluaXNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3pvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ3pvb21lbmQnLCB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFdoZWVsRXZlbnR9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCdtb3ZlZW5kJywge29yaWdpbmFsRXZlbnQ6IHRoaXMuX2xhc3RXaGVlbEV2ZW50fSkpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90YXJnZXRab29tO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zbW9vdGhPdXRFYXNpbmcoZHVyYXRpb246IG51bWJlcikge1xuICAgICAgICBsZXQgZWFzaW5nID0gX2Vhc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ByZXZFYXNlKSB7XG4gICAgICAgICAgICBjb25zdCBlYXNlID0gdGhpcy5fcHJldkVhc2UsXG4gICAgICAgICAgICAgICAgdCA9IChicm93c2VyLm5vdygpIC0gZWFzZS5zdGFydCkgLyBlYXNlLmR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIHNwZWVkID0gZWFzZS5lYXNpbmcodCArIDAuMDEpIC0gZWFzZS5lYXNpbmcodCksXG5cbiAgICAgICAgICAgICAgICAvLyBRdWljayBoYWNrIHRvIG1ha2UgbmV3IGJlemllciB0aGF0IGlzIGNvbnRpbnVvdXMgd2l0aCBsYXN0XG4gICAgICAgICAgICAgICAgeCA9IDAuMjcgLyBNYXRoLnNxcnQoc3BlZWQgKiBzcGVlZCArIDAuMDAwMSkgKiAwLjAxLFxuICAgICAgICAgICAgICAgIHkgPSBNYXRoLnNxcnQoMC4yNyAqIDAuMjcgLSB4ICogeCk7XG5cbiAgICAgICAgICAgIGVhc2luZyA9IGJlemllcih4LCB5LCAwLjI1LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByZXZFYXNlID0ge1xuICAgICAgICAgICAgc3RhcnQ6IGJyb3dzZXIubm93KCksXG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgIGVhc2luZ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBlYXNpbmc7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTY3JvbGxab29tSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG4vKipcbiAqIFRoZSBgQm94Wm9vbUhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byB6b29tIHRoZSBtYXAgdG8gZml0IHdpdGhpbiBhIGJvdW5kaW5nIGJveC5cbiAqIFRoZSBib3VuZGluZyBib3ggaXMgZGVmaW5lZCBieSBjbGlja2luZyBhbmQgaG9sZGluZyBgc2hpZnRgIHdoaWxlIGRyYWdnaW5nIHRoZSBjdXJzb3IuXG4gKi9cbmNsYXNzIEJveFpvb21IYW5kbGVyIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2VsOiBIVE1MRWxlbWVudDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcbiAgICBfYWN0aXZlOiBib29sZWFuO1xuICAgIF9zdGFydFBvczogUG9pbnQ7XG4gICAgX2xhc3RQb3M6IFBvaW50O1xuICAgIF9ib3g6IEhUTUxFbGVtZW50O1xuICAgIF9jbGlja1RvbGVyYW5jZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCwgb3B0aW9uczoge1xuICAgICAgICBjbGlja1RvbGVyYW5jZT86IG51bWJlclxuICAgIH0pIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9lbCA9IG1hcC5nZXRDYW52YXNDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gbWFwLmdldENvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9jbGlja1RvbGVyYW5jZSA9IG9wdGlvbnMuY2xpY2tUb2xlcmFuY2UgfHwgMTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25Nb3VzZU1vdmUnLFxuICAgICAgICAgICAgJ19vbk1vdXNlVXAnLFxuICAgICAgICAgICAgJ19vbktleURvd24nXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuYm94Wm9vbS5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLmJveFpvb20uZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Nb3VzZURvd24oZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgaWYgKCEoZS5zaGlmdEtleSAmJiBlLmJ1dHRvbiA9PT0gMCkpIHJldHVybjtcblxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXAsIGZhbHNlKTtcblxuICAgICAgICBET00uZGlzYWJsZURyYWcoKTtcbiAgICAgICAgdGhpcy5fc3RhcnRQb3MgPSB0aGlzLl9sYXN0UG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfb25Nb3VzZU1vdmUoZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBwb3MgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUpO1xuXG4gICAgICAgIGlmICh0aGlzLl9sYXN0UG9zLmVxdWFscyhwb3MpIHx8ICghdGhpcy5fYm94ICYmIHBvcy5kaXN0KHRoaXMuX3N0YXJ0UG9zKSA8IHRoaXMuX2NsaWNrVG9sZXJhbmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcDAgPSB0aGlzLl9zdGFydFBvcztcbiAgICAgICAgdGhpcy5fbGFzdFBvcyA9IHBvcztcblxuICAgICAgICBpZiAoIXRoaXMuX2JveCkge1xuICAgICAgICAgICAgdGhpcy5fYm94ID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWJveHpvb20nLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWNyb3NzaGFpcicpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdib3h6b29tc3RhcnQnLCBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbihwMC54LCBwb3MueCksXG4gICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgocDAueCwgcG9zLngpLFxuICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKHAwLnksIHBvcy55KSxcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChwMC55LCBwb3MueSk7XG5cbiAgICAgICAgRE9NLnNldFRyYW5zZm9ybSh0aGlzLl9ib3gsIGB0cmFuc2xhdGUoJHttaW5YfXB4LCR7bWluWX1weClgKTtcblxuICAgICAgICB0aGlzLl9ib3guc3R5bGUud2lkdGggPSBgJHttYXhYIC0gbWluWH1weGA7XG4gICAgICAgIHRoaXMuX2JveC5zdHlsZS5oZWlnaHQgPSBgJHttYXhZIC0gbWluWX1weGA7XG4gICAgfVxuXG4gICAgX29uTW91c2VVcChlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmIChlLmJ1dHRvbiAhPT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHAwID0gdGhpcy5fc3RhcnRQb3MsXG4gICAgICAgICAgICBwMSA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG5cbiAgICAgICAgdGhpcy5fZmluaXNoKCk7XG5cbiAgICAgICAgRE9NLnN1cHByZXNzQ2xpY2soKTtcblxuICAgICAgICBpZiAocDAueCA9PT0gcDEueCAmJiBwMC55ID09PSBwMS55KSB7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2JveHpvb21jYW5jZWwnLCBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX21hcFxuICAgICAgICAgICAgICAgIC5maXRTY3JlZW5Db29yZGluYXRlcyhwMCwgcDEsIHRoaXMuX21hcC5nZXRCZWFyaW5nKCksIHtsaW5lYXI6IHRydWV9KVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnYm94em9vbWVuZCcsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgICB0aGlzLl9maW5pc2goKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnYm94em9vbWNhbmNlbCcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2ZpbmlzaCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fb25Nb3VzZVVwLCBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWNyb3NzaGFpcicpO1xuXG4gICAgICAgIGlmICh0aGlzLl9ib3gpIHtcbiAgICAgICAgICAgIERPTS5yZW1vdmUodGhpcy5fYm94KTtcbiAgICAgICAgICAgIHRoaXMuX2JveCA9IChudWxsOiBhbnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgRE9NLmVuYWJsZURyYWcoKTtcblxuICAgICAgICBkZWxldGUgdGhpcy5fc3RhcnRQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0UG9zO1xuICAgIH1cblxuICAgIF9maXJlRXZlbnQodHlwZTogc3RyaW5nLCBlOiAqKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQodHlwZSwge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb3hab29tSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge2JlemllciwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi8uLi91dGlsL3Rhc2tfcXVldWUnO1xuXG5jb25zdCBpbmVydGlhTGluZWFyaXR5ID0gMC4yNSxcbiAgICBpbmVydGlhRWFzaW5nID0gYmV6aWVyKDAsIDAsIGluZXJ0aWFMaW5lYXJpdHksIDEpLFxuICAgIGluZXJ0aWFNYXhTcGVlZCA9IDE4MCwgLy8gZGVnL3NcbiAgICBpbmVydGlhRGVjZWxlcmF0aW9uID0gNzIwOyAvLyBkZWcvc14yXG5cbi8qKlxuICogVGhlIGBEcmFnUm90YXRlSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHJvdGF0ZSB0aGUgbWFwIGJ5IGNsaWNraW5nIGFuZFxuICogZHJhZ2dpbmcgdGhlIGN1cnNvciB3aGlsZSBob2xkaW5nIHRoZSByaWdodCBtb3VzZSBidXR0b24gb3IgYGN0cmxgIGtleS5cbiAqL1xuY2xhc3MgRHJhZ1JvdGF0ZUhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9zdGF0ZTogJ2Rpc2FibGVkJyB8ICdlbmFibGVkJyB8ICdwZW5kaW5nJyB8ICdhY3RpdmUnO1xuICAgIF9idXR0b246ICdyaWdodCcgfCAnbGVmdCc7XG4gICAgX2V2ZW50QnV0dG9uOiBudW1iZXI7XG4gICAgX2JlYXJpbmdTbmFwOiBudW1iZXI7XG4gICAgX3BpdGNoV2l0aFJvdGF0ZTogYm9vbGVhbjtcblxuICAgIF9zdGFydFBvczogUG9pbnQ7XG4gICAgX3ByZXZQb3M6IFBvaW50O1xuICAgIF9sYXN0UG9zOiBQb2ludDtcbiAgICBfc3RhcnRUaW1lOiBudW1iZXI7XG4gICAgX2xhc3RNb3ZlRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gICAgX2luZXJ0aWE6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+O1xuICAgIF9jZW50ZXI6IFBvaW50O1xuICAgIF9mcmFtZUlkOiA/VGFza0lEO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwYm94IEdMIEpTIG1hcCB0byBhZGQgdGhlIGhhbmRsZXIgdG8uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5iZWFyaW5nU25hcF0gVGhlIHRocmVzaG9sZCwgbWVhc3VyZWQgaW4gZGVncmVlcywgdGhhdCBkZXRlcm1pbmVzIHdoZW4gdGhlIG1hcCdzXG4gICAgICogICBiZWFyaW5nIHdpbGwgc25hcCB0byBub3J0aC5cbiAgICAgKiBAcGFyYW0ge2Jvb2x9IFtvcHRpb25zLnBpdGNoV2l0aFJvdGF0ZT10cnVlXSBDb250cm9sIHRoZSBtYXAgcGl0Y2ggaW4gYWRkaXRpb24gdG8gdGhlIGJlYXJpbmdcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiB7XG4gICAgICAgIGJ1dHRvbj86ICdyaWdodCcgfCAnbGVmdCcsXG4gICAgICAgIGVsZW1lbnQ/OiBIVE1MRWxlbWVudCxcbiAgICAgICAgYmVhcmluZ1NuYXA/OiBudW1iZXIsXG4gICAgICAgIHBpdGNoV2l0aFJvdGF0ZT86IGJvb2xlYW5cbiAgICB9KSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSBvcHRpb25zLmVsZW1lbnQgfHwgbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgIHRoaXMuX2J1dHRvbiA9IG9wdGlvbnMuYnV0dG9uIHx8ICdyaWdodCc7XG4gICAgICAgIHRoaXMuX2JlYXJpbmdTbmFwID0gb3B0aW9ucy5iZWFyaW5nU25hcCB8fCAwO1xuICAgICAgICB0aGlzLl9waXRjaFdpdGhSb3RhdGUgPSBvcHRpb25zLnBpdGNoV2l0aFJvdGF0ZSAhPT0gZmFsc2U7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnb25Nb3VzZURvd24nLFxuICAgICAgICAgICAgJ19vbk1vdXNlTW92ZScsXG4gICAgICAgICAgICAnX29uTW91c2VVcCcsXG4gICAgICAgICAgICAnX29uQmx1cicsXG4gICAgICAgICAgICAnX29uRHJhZ0ZyYW1lJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUgIT09ICdkaXNhYmxlZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlID09PSAnYWN0aXZlJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kcmFnUm90YXRlLmVuYWJsZSgpO1xuICAgICAqL1xuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmRyYWdSb3RhdGUuZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncm90YXRlZW5kJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGl0Y2hXaXRoUm90YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdwaXRjaGVuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ2VuYWJsZWQnKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnO1xuXG4gICAgICAgIGlmICh0b3VjaEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2J1dHRvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50QnV0dG9uID0gRE9NLm1vdXNlQnV0dG9uKGUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudEJ1dHRvbiAhPT0gKGUuY3RybEtleSA/IDAgOiAyKSkgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IERPTS5tb3VzZUJ1dHRvbihlKSAhPT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50QnV0dG9uID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5kaXNhYmxlRHJhZygpO1xuXG4gICAgICAgIC8vIEJpbmQgd2luZG93LWxldmVsIGV2ZW50IGxpc3RlbmVycyBmb3IgbW92ZSBhbmQgdXAvZW5kIGV2ZW50cy4gSW4gdGhlIGFic2VuY2Ugb2ZcbiAgICAgICAgLy8gdGhlIHBvaW50ZXIgY2FwdHVyZSBBUEksIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIG5lY2Vzc2FyeSBwbGF0Zm9ybXMsXG4gICAgICAgIC8vIHdpbmRvdy1sZXZlbCBldmVudCBsaXN0ZW5lcnMgZ2l2ZSB1cyB0aGUgYmVzdCBzaG90IGF0IGNhcHR1cmluZyBldmVudHMgdGhhdFxuICAgICAgICAvLyBmYWxsIG91dHNpZGUgdGhlIG1hcCBjYW52YXMgZWxlbWVudC4gVXNlIGB7Y2FwdHVyZTogdHJ1ZX1gIGZvciB0aGUgbW92ZSBldmVudFxuICAgICAgICAvLyB0byBwcmV2ZW50IG1hcCBtb3ZlIGV2ZW50cyBmcm9tIGJlaW5nIGZpcmVkIGR1cmluZyBhIGRyYWcuXG4gICAgICAgIGlmICh0b3VjaEV2ZW50KSB7XG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHtjYXB0dXJlOiB0cnVlfSk7XG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVhY3RpdmF0ZSB3aGVuIHRoZSB3aW5kb3cgbG9zZXMgZm9jdXMuIE90aGVyd2lzZSBpZiBhIG1vdXNldXAgb2NjdXJzIHdoZW4gdGhlIHdpbmRvd1xuICAgICAgICAvLyBpc24ndCBpbiBmb2N1cywgZHJhZ2dpbmcgd2lsbCBjb250aW51ZSBldmVuIHRob3VnaCB0aGUgbW91c2UgaXMgbm8gbG9uZ2VyIHByZXNzZWQuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25CbHVyKTtcblxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgdGhpcy5faW5lcnRpYSA9IFtbYnJvd3Nlci5ub3coKSwgdGhpcy5fbWFwLmdldEJlYXJpbmcoKV1dO1xuICAgICAgICB0aGlzLl9zdGFydFBvcyA9IHRoaXMuX3ByZXZQb3MgPSB0aGlzLl9sYXN0UG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcbiAgICAgICAgdGhpcy5fY2VudGVyID0gdGhpcy5fbWFwLnRyYW5zZm9ybS5jZW50ZXJQb2ludDsgIC8vIENlbnRlciBvZiByb3RhdGlvblxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBfb25Nb3VzZU1vdmUoZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBwb3MgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUpO1xuICAgICAgICBpZiAodGhpcy5fbGFzdFBvcy5lcXVhbHMocG9zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdE1vdmVFdmVudCA9IGU7XG4gICAgICAgIHRoaXMuX2xhc3RQb3MgPSBwb3M7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2FjdGl2ZSc7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ3JvdGF0ZXN0YXJ0JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ21vdmVzdGFydCcsIGUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncGl0Y2hzdGFydCcsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25EcmFnRnJhbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uRHJhZ0ZyYW1lKCkge1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBjb25zdCBlID0gdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy5fbWFwLnRyYW5zZm9ybTtcblxuICAgICAgICBjb25zdCBwMSA9IHRoaXMuX3ByZXZQb3MsXG4gICAgICAgICAgICBwMiA9IHRoaXMuX2xhc3RQb3MsXG4gICAgICAgICAgICBiZWFyaW5nRGlmZiA9IChwMS54IC0gcDIueCkgKiAwLjgsXG4gICAgICAgICAgICBwaXRjaERpZmYgPSAocDEueSAtIHAyLnkpICogLTAuNSxcbiAgICAgICAgICAgIGJlYXJpbmcgPSB0ci5iZWFyaW5nIC0gYmVhcmluZ0RpZmYsXG4gICAgICAgICAgICBwaXRjaCA9IHRyLnBpdGNoIC0gcGl0Y2hEaWZmLFxuICAgICAgICAgICAgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWEsXG4gICAgICAgICAgICBsYXN0ID0gaW5lcnRpYVtpbmVydGlhLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuICAgICAgICBpbmVydGlhLnB1c2goW2Jyb3dzZXIubm93KCksIHRoaXMuX21hcC5fbm9ybWFsaXplQmVhcmluZyhiZWFyaW5nLCBsYXN0WzFdKV0pO1xuXG4gICAgICAgIGNvbnN0IHByZXZCZWFyaW5nID0gdHIuYmVhcmluZztcbiAgICAgICAgdHIuYmVhcmluZyA9IGJlYXJpbmc7XG4gICAgICAgIGlmICh0aGlzLl9waXRjaFdpdGhSb3RhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZQaXRjaCA9IHRyLnBpdGNoO1xuICAgICAgICAgICAgdHIucGl0Y2ggPSBwaXRjaDtcbiAgICAgICAgICAgIGlmICh0ci5waXRjaCAhPT0gcHJldlBpdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdwaXRjaCcsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyLmJlYXJpbmcgIT09IHByZXZCZWFyaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ3JvdGF0ZScsIGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZScsIGUpO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50O1xuICAgICAgICB0aGlzLl9wcmV2UG9zID0gdGhpcy5fbGFzdFBvcztcbiAgICB9XG5cbiAgICBfb25Nb3VzZVVwKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoZW5kJztcblxuICAgICAgICBpZiAodG91Y2hFdmVudCAmJiAodGhpcy5fc3RhcnRQb3MgPT09IHRoaXMuX2xhc3RQb3MpICYmIChEYXRlLm5vdygpIC0gdGhpcy5fc3RhcnRUaW1lKSA8IDMwMCkge1xuICAgICAgICAgICAgdGhpcy5fZWwuY2xpY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChET00ubW91c2VCdXR0b24oZSkgIT09IHRoaXMuX2V2ZW50QnV0dG9uKSByZXR1cm47XG4gICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgY2FzZSAnYWN0aXZlJzpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgRE9NLnN1cHByZXNzQ2xpY2soKTtcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5faW5lcnRpYWxSb3RhdGUoZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25CbHVyKGU6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xuICAgICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncm90YXRlZW5kJywgZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGl0Y2hXaXRoUm90YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdwaXRjaGVuZCcsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJywgZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdW5iaW5kKCkge1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHtjYXB0dXJlOiB0cnVlfSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fb25Nb3VzZVVwKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX29uQmx1cik7XG4gICAgICAgIERPTS5lbmFibGVEcmFnKCk7XG4gICAgfVxuXG4gICAgX2RlYWN0aXZhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ByZXZQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0UG9zO1xuICAgIH1cblxuICAgIF9pbmVydGlhbFJvdGF0ZShlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncm90YXRlZW5kJywgZSk7XG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuXG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcCxcbiAgICAgICAgICAgIG1hcEJlYXJpbmcgPSBtYXAuZ2V0QmVhcmluZygpLFxuICAgICAgICAgICAgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWE7XG5cbiAgICAgICAgY29uc3QgZmluaXNoID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKG1hcEJlYXJpbmcpIDwgdGhpcy5fYmVhcmluZ1NuYXApIHtcbiAgICAgICAgICAgICAgICBtYXAucmVzZXROb3J0aCh7bm9Nb3ZlU3RhcnQ6IHRydWV9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ21vdmVlbmQnLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9waXRjaFdpdGhSb3RhdGUpIHRoaXMuX2ZpcmVFdmVudCgncGl0Y2hlbmQnLCBlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoaW5lcnRpYS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gaW5lcnRpYVswXSxcbiAgICAgICAgICAgIGxhc3QgPSBpbmVydGlhW2luZXJ0aWEubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICBwcmV2aW91cyA9IGluZXJ0aWFbaW5lcnRpYS5sZW5ndGggLSAyXTtcbiAgICAgICAgbGV0IGJlYXJpbmcgPSBtYXAuX25vcm1hbGl6ZUJlYXJpbmcobWFwQmVhcmluZywgcHJldmlvdXNbMV0pO1xuICAgICAgICBjb25zdCBmbGluZ0RpZmYgPSBsYXN0WzFdIC0gZmlyc3RbMV0sXG4gICAgICAgICAgICBzaWduID0gZmxpbmdEaWZmIDwgMCA/IC0xIDogMSxcbiAgICAgICAgICAgIGZsaW5nRHVyYXRpb24gPSAobGFzdFswXSAtIGZpcnN0WzBdKSAvIDEwMDA7XG5cbiAgICAgICAgaWYgKGZsaW5nRGlmZiA9PT0gMCB8fCBmbGluZ0R1cmF0aW9uID09PSAwKSB7XG4gICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzcGVlZCA9IE1hdGguYWJzKGZsaW5nRGlmZiAqIChpbmVydGlhTGluZWFyaXR5IC8gZmxpbmdEdXJhdGlvbikpOyAgLy8gZGVnL3NcbiAgICAgICAgaWYgKHNwZWVkID4gaW5lcnRpYU1heFNwZWVkKSB7XG4gICAgICAgICAgICBzcGVlZCA9IGluZXJ0aWFNYXhTcGVlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gc3BlZWQgLyAoaW5lcnRpYURlY2VsZXJhdGlvbiAqIGluZXJ0aWFMaW5lYXJpdHkpLFxuICAgICAgICAgICAgb2Zmc2V0ID0gc2lnbiAqIHNwZWVkICogKGR1cmF0aW9uIC8gMik7XG5cbiAgICAgICAgYmVhcmluZyArPSBvZmZzZXQ7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKG1hcC5fbm9ybWFsaXplQmVhcmluZyhiZWFyaW5nLCAwKSkgPCB0aGlzLl9iZWFyaW5nU25hcCkge1xuICAgICAgICAgICAgYmVhcmluZyA9IG1hcC5fbm9ybWFsaXplQmVhcmluZygwLCBiZWFyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC5yb3RhdGVUbyhiZWFyaW5nLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLFxuICAgICAgICAgICAgZWFzaW5nOiBpbmVydGlhRWFzaW5nLFxuICAgICAgICAgICAgbm9Nb3ZlU3RhcnQ6IHRydWVcbiAgICAgICAgfSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICB9XG5cbiAgICBfZmlyZUV2ZW50KHR5cGU6IHN0cmluZywgZTogKikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KHR5cGUsIGUgPyB7b3JpZ2luYWxFdmVudDogZX0gOiB7fSkpO1xuICAgIH1cblxuICAgIF9kcmFpbkluZXJ0aWFCdWZmZXIoKSB7XG4gICAgICAgIGNvbnN0IGluZXJ0aWEgPSB0aGlzLl9pbmVydGlhLFxuICAgICAgICAgICAgbm93ID0gYnJvd3Nlci5ub3coKSxcbiAgICAgICAgICAgIGN1dG9mZiA9IDE2MDsgICAvL21zZWNcblxuICAgICAgICB3aGlsZSAoaW5lcnRpYS5sZW5ndGggPiAwICYmIG5vdyAtIGluZXJ0aWFbMF1bMF0gPiBjdXRvZmYpXG4gICAgICAgICAgICBpbmVydGlhLnNoaWZ0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcmFnUm90YXRlSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuaW1wb3J0IHtiZXppZXIsIGJpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQge0V2ZW50fSBmcm9tICcuLi8uLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge1Rhc2tJRH0gZnJvbSAnLi4vLi4vdXRpbC90YXNrX3F1ZXVlJztcblxuY29uc3QgaW5lcnRpYUxpbmVhcml0eSA9IDAuMyxcbiAgICBpbmVydGlhRWFzaW5nID0gYmV6aWVyKDAsIDAsIGluZXJ0aWFMaW5lYXJpdHksIDEpLFxuICAgIGluZXJ0aWFNYXhTcGVlZCA9IDE0MDAsIC8vIHB4L3NcbiAgICBpbmVydGlhRGVjZWxlcmF0aW9uID0gMjUwMDsgLy8gcHgvc14yXG5cbi8qKlxuICogVGhlIGBEcmFnUGFuSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHBhbiB0aGUgbWFwIGJ5IGNsaWNraW5nIGFuZCBkcmFnZ2luZ1xuICogdGhlIGN1cnNvci5cbiAqL1xuY2xhc3MgRHJhZ1BhbkhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9zdGF0ZTogJ2Rpc2FibGVkJyB8ICdlbmFibGVkJyB8ICdwZW5kaW5nJyB8ICdhY3RpdmUnO1xuICAgIF9zdGFydFBvczogUG9pbnQ7XG4gICAgX21vdXNlRG93blBvczogUG9pbnQ7XG4gICAgX3ByZXZQb3M6IFBvaW50O1xuICAgIF9sYXN0UG9zOiBQb2ludDtcbiAgICBfc3RhcnRUb3VjaDogP0FycmF5PFBvaW50PjtcbiAgICBfbGFzdFRvdWNoOiA/QXJyYXk8UG9pbnQ+O1xuICAgIF9sYXN0TW92ZUV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCB8IHZvaWQ7XG4gICAgX2luZXJ0aWE6IEFycmF5PFtudW1iZXIsIFBvaW50XT47XG4gICAgX2ZyYW1lSWQ6ID9UYXNrSUQ7XG4gICAgX2NsaWNrVG9sZXJhbmNlOiBudW1iZXI7XG4gICAgX3Nob3VsZFN0YXJ0OiA/Ym9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXAsIG9wdGlvbnM6IHtcbiAgICAgICAgY2xpY2tUb2xlcmFuY2U/OiBudW1iZXJcbiAgICB9KSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2Rpc2FibGVkJztcbiAgICAgICAgdGhpcy5fY2xpY2tUb2xlcmFuY2UgPSBvcHRpb25zLmNsaWNrVG9sZXJhbmNlIHx8IDE7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uTW92ZScsXG4gICAgICAgICAgICAnX29uTW91c2VVcCcsXG4gICAgICAgICAgICAnX29uVG91Y2hFbmQnLFxuICAgICAgICAgICAgJ19vbkJsdXInLFxuICAgICAgICAgICAgJ19vbkRyYWdGcmFtZSdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlICE9PSAnZGlzYWJsZWQnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZSwgaS5lLiBjdXJyZW50bHkgYmVpbmcgdXNlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUuXG4gICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gJ2FjdGl2ZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuZHJhZ1Bhbi5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXRvdWNoLWRyYWctcGFuJyk7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kcmFnUGFuLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4nKTtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xuICAgICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICB0aGlzLl9kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2RyYWdlbmQnKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZWVuZCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2Rpc2FibGVkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb3VzZURvd24oZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdlbmFibGVkJykgcmV0dXJuO1xuICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IERPTS5tb3VzZUJ1dHRvbihlKSAhPT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIEJpbmQgd2luZG93LWxldmVsIGV2ZW50IGxpc3RlbmVycyBmb3IgbW91c2Vtb3ZlL3VwIGV2ZW50cy4gSW4gdGhlIGFic2VuY2Ugb2ZcbiAgICAgICAgLy8gdGhlIHBvaW50ZXIgY2FwdHVyZSBBUEksIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIG5lY2Vzc2FyeSBwbGF0Zm9ybXMsXG4gICAgICAgIC8vIHdpbmRvdy1sZXZlbCBldmVudCBsaXN0ZW5lcnMgZ2l2ZSB1cyB0aGUgYmVzdCBzaG90IGF0IGNhcHR1cmluZyBldmVudHMgdGhhdFxuICAgICAgICAvLyBmYWxsIG91dHNpZGUgdGhlIG1hcCBjYW52YXMgZWxlbWVudC4gVXNlIGB7Y2FwdHVyZTogdHJ1ZX1gIGZvciB0aGUgbW92ZSBldmVudFxuICAgICAgICAvLyB0byBwcmV2ZW50IG1hcCBtb3ZlIGV2ZW50cyBmcm9tIGJlaW5nIGZpcmVkIGR1cmluZyBhIGRyYWcuXG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX29uTW92ZSwge2NhcHR1cmU6IHRydWV9KTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMuX29uTW91c2VVcCk7XG5cbiAgICAgICAgdGhpcy5fc3RhcnQoZSk7XG4gICAgfVxuXG4gICAgb25Ub3VjaFN0YXJ0KGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIGlmIChlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxlbmd0aCA+IDEpIHsgLy8gbXVsdGktZmluZ2VyIHRvdWNoXG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBkcmFnZ2luZyAoZS5nLiB3aXRoIG9uZSBmaW5nZXIpIGFuZCBhZGQgYW5vdGhlciBmaW5nZXIsXG4gICAgICAgICAgICAvLyBrZWVwIHRoZSBoYW5kbGVyIGFjdGl2ZSBidXQgZG9uJ3QgYXR0ZW1wdCB0byAuX3N0YXJ0KCkgYWdhaW5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ3BlbmRpbmcnIHx8IHRoaXMuX3N0YXRlID09PSAnYWN0aXZlJykgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmluZCB3aW5kb3ctbGV2ZWwgZXZlbnQgbGlzdGVuZXJzIGZvciB0b3VjaG1vdmUvZW5kIGV2ZW50cy4gSW4gdGhlIGFic2VuY2Ugb2ZcbiAgICAgICAgLy8gdGhlIHBvaW50ZXIgY2FwdHVyZSBBUEksIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIG5lY2Vzc2FyeSBwbGF0Zm9ybXMsXG4gICAgICAgIC8vIHdpbmRvdy1sZXZlbCBldmVudCBsaXN0ZW5lcnMgZ2l2ZSB1cyB0aGUgYmVzdCBzaG90IGF0IGNhcHR1cmluZyBldmVudHMgdGhhdFxuICAgICAgICAvLyBmYWxsIG91dHNpZGUgdGhlIG1hcCBjYW52YXMgZWxlbWVudC4gVXNlIGB7Y2FwdHVyZTogdHJ1ZX1gIGZvciB0aGUgbW92ZSBldmVudFxuICAgICAgICAvLyB0byBwcmV2ZW50IG1hcCBtb3ZlIGV2ZW50cyBmcm9tIGJlaW5nIGZpcmVkIGR1cmluZyBhIGRyYWcuXG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSwge2NhcHR1cmU6IHRydWUsIHBhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Ub3VjaEVuZCk7XG5cbiAgICAgICAgdGhpcy5fc3RhcnQoZSk7XG4gICAgfVxuXG4gICAgX3N0YXJ0KGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgICAgIC8vIERlYWN0aXZhdGUgd2hlbiB0aGUgd2luZG93IGxvc2VzIGZvY3VzLiBPdGhlcndpc2UgaWYgYSBtb3VzZXVwIG9jY3VycyB3aGVuIHRoZSB3aW5kb3dcbiAgICAgICAgLy8gaXNuJ3QgaW4gZm9jdXMsIGRyYWdnaW5nIHdpbGwgY29udGludWUgZXZlbiB0aG91Z2ggdGhlIG1vdXNlIGlzIG5vIGxvbmdlciBwcmVzc2VkLlxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX29uQmx1cik7XG5cbiAgICAgICAgdGhpcy5fc3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgIHRoaXMuX3N0YXJ0UG9zID0gdGhpcy5fbW91c2VEb3duUG9zID0gdGhpcy5fcHJldlBvcyA9IHRoaXMuX2xhc3RQb3MgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUpO1xuICAgICAgICB0aGlzLl9zdGFydFRvdWNoID0gdGhpcy5fbGFzdFRvdWNoID0gKHdpbmRvdy5Ub3VjaEV2ZW50ICYmIGUgaW5zdGFuY2VvZiB3aW5kb3cuVG91Y2hFdmVudCkgPyBET00udG91Y2hQb3ModGhpcy5fZWwsIGUpIDogbnVsbDtcbiAgICAgICAgdGhpcy5faW5lcnRpYSA9IFtbYnJvd3Nlci5ub3coKSwgdGhpcy5fc3RhcnRQb3NdXTtcbiAgICB9XG5cbiAgICBfdG91Y2hlc01hdGNoKGxhc3RUb3VjaDogP0FycmF5PFBvaW50PiwgdGhpc1RvdWNoOiA/QXJyYXk8UG9pbnQ+KSB7XG4gICAgICAgIGlmICghbGFzdFRvdWNoIHx8ICF0aGlzVG91Y2ggfHwgbGFzdFRvdWNoLmxlbmd0aCAhPT0gdGhpc1RvdWNoLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gbGFzdFRvdWNoLmV2ZXJ5KChwb3MsIGkpID0+IHRoaXNUb3VjaFtpXSA9PT0gcG9zKTtcbiAgICB9XG5cbiAgICBfb25Nb3ZlKGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCB0b3VjaFBvcyA9ICh3aW5kb3cuVG91Y2hFdmVudCAmJiBlIGluc3RhbmNlb2Ygd2luZG93LlRvdWNoRXZlbnQpID8gRE9NLnRvdWNoUG9zKHRoaXMuX2VsLCBlKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHBvcyA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG5cbiAgICAgICAgY29uc3QgbWF0Y2hlc0xhc3RQb3MgPSB0b3VjaFBvcyA/IHRoaXMuX3RvdWNoZXNNYXRjaCh0aGlzLl9sYXN0VG91Y2gsIHRvdWNoUG9zKSA6IHRoaXMuX2xhc3RQb3MuZXF1YWxzKHBvcyk7XG5cbiAgICAgICAgaWYgKG1hdGNoZXNMYXN0UG9zIHx8ICh0aGlzLl9zdGF0ZSA9PT0gJ3BlbmRpbmcnICYmIHBvcy5kaXN0KHRoaXMuX21vdXNlRG93blBvcykgPCB0aGlzLl9jbGlja1RvbGVyYW5jZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xhc3RNb3ZlRXZlbnQgPSBlO1xuICAgICAgICB0aGlzLl9sYXN0UG9zID0gcG9zO1xuICAgICAgICB0aGlzLl9sYXN0VG91Y2ggPSB0b3VjaFBvcztcbiAgICAgICAgdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7XG4gICAgICAgIHRoaXMuX2luZXJ0aWEucHVzaChbYnJvd3Nlci5ub3coKSwgdGhpcy5fbGFzdFBvc10pO1xuXG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdhY3RpdmUnO1xuICAgICAgICAgICAgdGhpcy5fc2hvdWxkU3RhcnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25EcmFnRnJhbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGluIGVhY2ggcmVuZGVyIGZyYW1lIHdoaWxlIGRyYWdnaW5nIGlzIGhhcHBlbmluZy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vbkRyYWdGcmFtZSgpIHtcbiAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG5cbiAgICAgICAgY29uc3QgZSA9IHRoaXMuX2xhc3RNb3ZlRXZlbnQ7XG4gICAgICAgIGlmICghZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl9tYXAudG91Y2hab29tUm90YXRlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2Fib3J0KGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFN0YXJ0KSB7XG4gICAgICAgICAgICAvLyB3ZSB0cmVhdCB0aGUgZmlyc3QgZHJhZyBmcmFtZSAocmF0aGVyIHRoYW4gdGhlIG1vdXNlZG93biBldmVudClcbiAgICAgICAgICAgIC8vIGFzIHRoZSBzdGFydCBvZiB0aGUgZHJhZ1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdkcmFnc3RhcnQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZXN0YXJ0JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRTdGFydCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHJldHVybjsgLy8gSXQncyBwb3NzaWJsZSBmb3IgdGhlIGRyYWdzdGFydCBldmVudCB0byB0cmlnZ2VyIGEgZGlzYWJsZSgpIGNhbGwgKCMyNDE5KSBzbyB3ZSBtdXN0IGFjY291bnQgZm9yIHRoYXRcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMuX21hcC50cmFuc2Zvcm07XG4gICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0ci5wb2ludExvY2F0aW9uKHRoaXMuX3ByZXZQb3MpLCB0aGlzLl9sYXN0UG9zKTtcbiAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdkcmFnJywgZSk7XG4gICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZScsIGUpO1xuXG4gICAgICAgIHRoaXMuX3ByZXZQb3MgPSB0aGlzLl9sYXN0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICB9XG5cbiAgICBfb25Nb3VzZVVwKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKERPTS5tb3VzZUJ1dHRvbihlKSAhPT0gMCkgcmV0dXJuO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIERPTS5zdXBwcmVzc0NsaWNrKCk7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2luZXJ0aWFsUGFuKGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uVG91Y2hFbmQoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAoIWUudG91Y2hlcyB8fCBlLnRvdWNoZXMubGVuZ3RoID09PSAwKSB7IC8vIG9ubHkgc3RvcCBkcmFnIGlmIGFsbCBmaW5nZXJzIGhhdmUgYmVlbiByZW1vdmVkXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmVydGlhbFBhbihlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5hYmxlZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7ICAvLyBzb21lIGZpbmdlcihzKSBzdGlsbCB0b3VjaGluZyB0aGUgc2NyZWVuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICAgICAgLy8gd2UgYXJlIGFscmVhZHkgZHJhZ2dpbmc7IGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmFibGVkJzpcbiAgICAgICAgICAgICAgICAvLyBub3QgY3VycmVudGx5IGRyYWdnaW5nOyBnZXQgcmVhZHkgdG8gc3RhcnQgYSBuZXcgZHJhZ1xuICAgICAgICAgICAgICAgIHRoaXMub25Ub3VjaFN0YXJ0KGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2Fib3J0KGU6IEZvY3VzRXZlbnQgfCBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIGlmICghdGhpcy5fc2hvdWxkU3RhcnQpIHsgLy8gSWYgd2Ugc2NoZWR1bGVkIHRoZSBkcmFnc3RhcnQgYnV0IG5ldmVyIGZpcmVkLCBub3RoaW5nIHRvIGVuZFxuICAgICAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgc3RhcnRlZCB0aGUgZHJhZywgZW5kIGl0XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdkcmFnZW5kJywgZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIGlmICgod2luZG93LlRvdWNoRXZlbnQgJiYgZSBpbnN0YW5jZW9mIHdpbmRvdy5Ub3VjaEV2ZW50KSAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBmaW5nZXJzIHRvdWNoaW5nLCByZWF0dGFjaCB0b3VjaGVuZCBsaXN0ZW5lciBpbiBjYXNlXG4gICAgICAgICAgICAgICAgLy8gYWxsIGJ1dCBvbmUgZmluZ2VyIGlzIHJlbW92ZWQgYW5kIHdlIG5lZWQgdG8gcmVzdGFydCBhIGRyYWcgb24gdG91Y2hlbmRcbiAgICAgICAgICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX29uVG91Y2hFbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbmFibGVkJzpcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25CbHVyKGU6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fYWJvcnQoZSk7XG4gICAgfVxuXG4gICAgX3VuYmluZCgpIHtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB7Y2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vblRvdWNoRW5kKTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3ZlLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fb25Nb3VzZVVwKTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCAnYmx1cicsIHRoaXMuX29uQmx1cik7XG4gICAgfVxuXG4gICAgX2RlYWN0aXZhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ByZXZQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tb3VzZURvd25Qb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fc3RhcnRUb3VjaDtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RUb3VjaDtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3Nob3VsZFN0YXJ0O1xuICAgIH1cblxuICAgIF9pbmVydGlhbFBhbihlOiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkge1xuICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2RyYWdlbmQnLCBlKTtcblxuICAgICAgICB0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTtcbiAgICAgICAgY29uc3QgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWE7XG4gICAgICAgIGlmIChpbmVydGlhLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZWVuZCcsIGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdCA9IGluZXJ0aWFbaW5lcnRpYS5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgIGZpcnN0ID0gaW5lcnRpYVswXSxcbiAgICAgICAgICAgIGZsaW5nT2Zmc2V0ID0gbGFzdFsxXS5zdWIoZmlyc3RbMV0pLFxuICAgICAgICAgICAgZmxpbmdEdXJhdGlvbiA9IChsYXN0WzBdIC0gZmlyc3RbMF0pIC8gMTAwMDtcblxuICAgICAgICBpZiAoZmxpbmdEdXJhdGlvbiA9PT0gMCB8fCBsYXN0WzFdLmVxdWFscyhmaXJzdFsxXSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZWVuZCcsIGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHB4L3MgdmVsb2NpdHkgJiBhZGp1c3QgZm9yIGluY3JlYXNlZCBpbml0aWFsIGFuaW1hdGlvbiBzcGVlZCB3aGVuIGVhc2luZyBvdXRcbiAgICAgICAgY29uc3QgdmVsb2NpdHkgPSBmbGluZ09mZnNldC5tdWx0KGluZXJ0aWFMaW5lYXJpdHkgLyBmbGluZ0R1cmF0aW9uKTtcbiAgICAgICAgbGV0IHNwZWVkID0gdmVsb2NpdHkubWFnKCk7IC8vIHB4L3NcblxuICAgICAgICBpZiAoc3BlZWQgPiBpbmVydGlhTWF4U3BlZWQpIHtcbiAgICAgICAgICAgIHNwZWVkID0gaW5lcnRpYU1heFNwZWVkO1xuICAgICAgICAgICAgdmVsb2NpdHkuX3VuaXQoKS5fbXVsdChzcGVlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHNwZWVkIC8gKGluZXJ0aWFEZWNlbGVyYXRpb24gKiBpbmVydGlhTGluZWFyaXR5KSxcbiAgICAgICAgICAgIG9mZnNldCA9IHZlbG9jaXR5Lm11bHQoLWR1cmF0aW9uIC8gMik7XG5cbiAgICAgICAgdGhpcy5fbWFwLnBhbkJ5KG9mZnNldCwge1xuICAgICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCxcbiAgICAgICAgICAgIGVhc2luZzogaW5lcnRpYUVhc2luZyxcbiAgICAgICAgICAgIG5vTW92ZVN0YXJ0OiB0cnVlXG4gICAgICAgIH0sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgfVxuXG4gICAgX2ZpcmVFdmVudCh0eXBlOiBzdHJpbmcsIGU6ICopIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCh0eXBlLCBlID8ge29yaWdpbmFsRXZlbnQ6IGV9IDoge30pKTtcbiAgICB9XG5cbiAgICBfZHJhaW5JbmVydGlhQnVmZmVyKCkge1xuICAgICAgICBjb25zdCBpbmVydGlhID0gdGhpcy5faW5lcnRpYSxcbiAgICAgICAgICAgIG5vdyA9IGJyb3dzZXIubm93KCksXG4gICAgICAgICAgICBjdXRvZmYgPSAxNjA7ICAgLy8gbXNlY1xuXG4gICAgICAgIHdoaWxlIChpbmVydGlhLmxlbmd0aCA+IDAgJiYgbm93IC0gaW5lcnRpYVswXVswXSA+IGN1dG9mZikgaW5lcnRpYS5zaGlmdCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJhZ1BhbkhhbmRsZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG5jb25zdCBwYW5TdGVwID0gMTAwLFxuICAgIGJlYXJpbmdTdGVwID0gMTUsXG4gICAgcGl0Y2hTdGVwID0gMTA7XG5cbi8qKlxuICogVGhlIGBLZXlib2FyZEhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byB6b29tLCByb3RhdGUsIGFuZCBwYW4gdGhlIG1hcCB1c2luZ1xuICogdGhlIGZvbGxvd2luZyBrZXlib2FyZCBzaG9ydGN1dHM6XG4gKlxuICogLSBgPWAgLyBgK2A6IEluY3JlYXNlIHRoZSB6b29tIGxldmVsIGJ5IDEuXG4gKiAtIGBTaGlmdC09YCAvIGBTaGlmdC0rYDogSW5jcmVhc2UgdGhlIHpvb20gbGV2ZWwgYnkgMi5cbiAqIC0gYC1gOiBEZWNyZWFzZSB0aGUgem9vbSBsZXZlbCBieSAxLlxuICogLSBgU2hpZnQtLWA6IERlY3JlYXNlIHRoZSB6b29tIGxldmVsIGJ5IDIuXG4gKiAtIEFycm93IGtleXM6IFBhbiBieSAxMDAgcGl4ZWxzLlxuICogLSBgU2hpZnQrw6LCh8KiYDogSW5jcmVhc2UgdGhlIHJvdGF0aW9uIGJ5IDE1IGRlZ3JlZXMuXG4gKiAtIGBTaGlmdCvDosKHwqBgOiBEZWNyZWFzZSB0aGUgcm90YXRpb24gYnkgMTUgZGVncmVlcy5cbiAqIC0gYFNoaWZ0K8OiwofCoWA6IEluY3JlYXNlIHRoZSBwaXRjaCBieSAxMCBkZWdyZWVzLlxuICogLSBgU2hpZnQrw6LCh8KjYDogRGVjcmVhc2UgdGhlIHBpdGNoIGJ5IDEwIGRlZ3JlZXMuXG4gKi9cbmNsYXNzIEtleWJvYXJkSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uS2V5RG93bidcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGtleWJvYXJkIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGtleWJvYXJkIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5rZXlib2FyZC5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5rZXlib2FyZC5kaXNhYmxlKCk7XG4gICAgICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX29uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSByZXR1cm47XG5cbiAgICAgICAgbGV0IHpvb21EaXIgPSAwO1xuICAgICAgICBsZXQgYmVhcmluZ0RpciA9IDA7XG4gICAgICAgIGxldCBwaXRjaERpciA9IDA7XG4gICAgICAgIGxldCB4RGlyID0gMDtcbiAgICAgICAgbGV0IHlEaXIgPSAwO1xuXG4gICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICBjYXNlIDE3MTpcbiAgICAgICAgY2FzZSAxODc6XG4gICAgICAgICAgICB6b29tRGlyID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTg5OlxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgY2FzZSAxNzM6XG4gICAgICAgICAgICB6b29tRGlyID0gLTE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBiZWFyaW5nRGlyID0gLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB4RGlyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBiZWFyaW5nRGlyID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHhEaXIgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgcGl0Y2hEaXIgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgeURpciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgcGl0Y2hEaXIgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeURpciA9IDE7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcDtcbiAgICAgICAgY29uc3Qgem9vbSA9IG1hcC5nZXRab29tKCk7XG5cbiAgICAgICAgY29uc3QgZWFzZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgZGVsYXlFbmRFdmVudHM6IDUwMCxcbiAgICAgICAgICAgIGVhc2luZzogZWFzZU91dCxcblxuICAgICAgICAgICAgem9vbTogem9vbURpciA/IE1hdGgucm91bmQoem9vbSkgKyB6b29tRGlyICogKGUuc2hpZnRLZXkgPyAyIDogMSkgOiB6b29tLFxuICAgICAgICAgICAgYmVhcmluZzogbWFwLmdldEJlYXJpbmcoKSArIGJlYXJpbmdEaXIgKiBiZWFyaW5nU3RlcCxcbiAgICAgICAgICAgIHBpdGNoOiBtYXAuZ2V0UGl0Y2goKSArIHBpdGNoRGlyICogcGl0Y2hTdGVwLFxuICAgICAgICAgICAgb2Zmc2V0OiBbLXhEaXIgKiBwYW5TdGVwLCAteURpciAqIHBhblN0ZXBdLFxuICAgICAgICAgICAgY2VudGVyOiBtYXAuZ2V0Q2VudGVyKClcbiAgICAgICAgfTtcblxuICAgICAgICBtYXAuZWFzZVRvKGVhc2VPcHRpb25zLCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZWFzZU91dCh0KSB7XG4gICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBLZXlib2FyZEhhbmRsZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUge01hcE1vdXNlRXZlbnQsIE1hcFRvdWNoRXZlbnR9IGZyb20gJy4uL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuLy8gbWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIHR3byB0YXAgUG9pbnRzIGZvciB0aGVtIHRvIHF1YWxpZnkgYXMgYSBkb3VibGUtdGFwXG5jb25zdCBtYXhEaXN0ID0gMzA7XG5cbi8qKlxuICogVGhlIGBEb3VibGVDbGlja1pvb21IYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSB0aGUgbWFwIGF0IGEgcG9pbnQgYnlcbiAqIGRvdWJsZSBjbGlja2luZyBvciBkb3VibGUgdGFwcGluZy5cbiAqL1xuY2xhc3MgRG91YmxlQ2xpY2tab29tSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3RhcHBlZDogP1RpbWVvdXRJRDtcbiAgICBfdGFwcGVkUG9pbnQ6ID9Qb2ludDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbkRibENsaWNrJyxcbiAgICAgICAgICAgICdfb25ab29tRW5kJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZSwgaS5lLiBjdXJyZW50bHkgYmVpbmcgdXNlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUuXG4gICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kb3VibGVDbGlja1pvb20uZW5hYmxlKCk7XG4gICAgICovXG4gICAgZW5hYmxlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuZG91YmxlQ2xpY2tab29tLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uVG91Y2hTdGFydChlOiBNYXBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICBpZiAoZS5wb2ludHMubGVuZ3RoID4gMSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICghdGhpcy5fdGFwcGVkKSB7XG4gICAgICAgICAgICB0aGlzLl90YXBwZWRQb2ludCA9IGUucG9pbnRzWzBdO1xuICAgICAgICAgICAgdGhpcy5fdGFwcGVkID0gc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuX3RhcHBlZCA9IG51bGw7IHRoaXMuX3RhcHBlZFBvaW50ID0gbnVsbDsgfSwgMzAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1RhcCA9IGUucG9pbnRzWzBdO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RUYXAgPSB0aGlzLl90YXBwZWRQb2ludDtcblxuICAgICAgICAgICAgaWYgKGZpcnN0VGFwICYmIGZpcnN0VGFwLmRpc3QobmV3VGFwKSA8PSBtYXhEaXN0KSB7XG4gICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgZHVwbGljYXRlIHpvb20gb24gZGJsY2xpY2tcblxuICAgICAgICAgICAgICAgIGNvbnN0IG9uVG91Y2hFbmQgPSAoKSA9PiB7IC8vIGlnbm9yZSB0aGUgdG91Y2hlbmQgZXZlbnQsIGFzIGl0IGhhcyBubyBwb2ludCB3ZSBjYW4gem9vbSB0b1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFwcGVkKSB7IC8vIG1ha2Ugc3VyZSB3ZSBhcmUgc3RpbGwgd2l0aGluIHRoZSB0aW1lb3V0IHdpbmRvd1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fem9vbShlKTsgLy8gcGFzcyB0aGUgb3JpZ2luYWwgdG91Y2hzdGFydCBldmVudCwgd2l0aCB0aGUgdGFwcGVkIHBvaW50XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2hjYW5jZWwnLCBvblRvdWNoQ2FuY2VsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRUYXBwZWQoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb25Ub3VjaENhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRUYXBwZWQoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uY2UoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uY2UoJ3RvdWNoY2FuY2VsJywgb25Ub3VjaENhbmNlbCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHRvdWNoZXMgYXJlIHRvbyBmYXIgYXBhcnQsIGRvbid0IHpvb21cbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNldFRhcHBlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3Jlc2V0VGFwcGVkKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGFwcGVkKTtcbiAgICAgICAgdGhpcy5fdGFwcGVkID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdGFwcGVkUG9pbnQgPSBudWxsO1xuICAgIH1cblxuICAgIG9uRGJsQ2xpY2soZTogTWFwTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3pvb20oZSk7XG4gICAgfVxuXG4gICAgX3pvb20oZTogTWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbWFwLm9uKCd6b29tZW5kJywgdGhpcy5fb25ab29tRW5kKTtcbiAgICAgICAgdGhpcy5fbWFwLnpvb21UbyhcbiAgICAgICAgICAgIHRoaXMuX21hcC5nZXRab29tKCkgKyAoZS5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5ID8gLTEgOiAxKSxcbiAgICAgICAgICAgIHthcm91bmQ6IGUubG5nTGF0fSxcbiAgICAgICAgICAgIGVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBfb25ab29tRW5kKCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignem9vbWVuZCcsIHRoaXMuX29uWm9vbUVuZCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEb3VibGVDbGlja1pvb21IYW5kbGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2JlemllciwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBMbmdMYXQgZnJvbSAnLi4vLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge1Rhc2tJRH0gZnJvbSAnLi4vLi4vdXRpbC90YXNrX3F1ZXVlJztcblxuY29uc3QgaW5lcnRpYUxpbmVhcml0eSA9IDAuMTUsXG4gICAgaW5lcnRpYUVhc2luZyA9IGJlemllcigwLCAwLCBpbmVydGlhTGluZWFyaXR5LCAxKSxcbiAgICBpbmVydGlhRGVjZWxlcmF0aW9uID0gMTIsIC8vIHNjYWxlIC8gc14yXG4gICAgaW5lcnRpYU1heFNwZWVkID0gMi41LCAvLyBzY2FsZSAvIHNcbiAgICBzaWduaWZpY2FudFNjYWxlVGhyZXNob2xkID0gMC4xNSxcbiAgICBzaWduaWZpY2FudFJvdGF0ZVRocmVzaG9sZCA9IDEwO1xuXG4vKipcbiAqIFRoZSBgVG91Y2hab29tUm90YXRlSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20gYW5kIHJvdGF0ZSB0aGUgbWFwIGJ5XG4gKiBwaW5jaGluZyBvbiBhIHRvdWNoc2NyZWVuLlxuICovXG5jbGFzcyBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2VsOiBIVE1MRWxlbWVudDtcbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcbiAgICBfYXJvdW5kQ2VudGVyOiBib29sZWFuO1xuICAgIF9yb3RhdGlvbkRpc2FibGVkOiBib29sZWFuO1xuICAgIF9zdGFydFZlYzogUG9pbnQ7XG4gICAgX3N0YXJ0QXJvdW5kOiBMbmdMYXQ7XG4gICAgX3N0YXJ0U2NhbGU6IG51bWJlcjtcbiAgICBfc3RhcnRCZWFyaW5nOiBudW1iZXI7XG4gICAgX2dlc3R1cmVJbnRlbnQ6ICdyb3RhdGUnIHwgJ3pvb20nIHwgdm9pZDtcbiAgICBfaW5lcnRpYTogQXJyYXk8W251bWJlciwgbnVtYmVyLCBQb2ludF0+O1xuICAgIF9sYXN0VG91Y2hFdmVudDogVG91Y2hFdmVudDtcbiAgICBfZnJhbWVJZDogP1Rhc2tJRDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9lbCA9IG1hcC5nZXRDYW52YXNDb250YWluZXIoKTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25Nb3ZlJyxcbiAgICAgICAgICAgICdfb25FbmQnLFxuICAgICAgICAgICAgJ19vblRvdWNoRnJhbWUnXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJwaW5jaCB0byByb3RhdGUgYW5kIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJwaW5jaCB0byByb3RhdGUgYW5kIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hcm91bmRdIElmIFwiY2VudGVyXCIgaXMgcGFzc2VkLCBtYXAgd2lsbCB6b29tIGFyb3VuZCB0aGUgY2VudGVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoeyBhcm91bmQ6ICdjZW50ZXInIH0pO1xuICAgICAqL1xuICAgIGVuYWJsZShvcHRpb25zOiA/e2Fyb3VuZD86ICdjZW50ZXInfSkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZScpO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYXJvdW5kQ2VudGVyID0gISFvcHRpb25zICYmIG9wdGlvbnMuYXJvdW5kID09PSAnY2VudGVyJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJwaW5jaCB0byByb3RhdGUgYW5kIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtdG91Y2gtem9vbS1yb3RhdGUnKTtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcInBpbmNoIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uLCBsZWF2aW5nIHRoZSBcInBpbmNoIHRvIHpvb21cIlxuICAgICAqIGludGVyYWN0aW9uIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5kaXNhYmxlUm90YXRpb24oKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlUm90YXRpb24oKSB7XG4gICAgICAgIHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwicGluY2ggdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoKTtcbiAgICAgKiAgIG1hcC50b3VjaFpvb21Sb3RhdGUuZW5hYmxlUm90YXRpb24oKTtcbiAgICAgKi9cbiAgICBlbmFibGVSb3RhdGlvbigpIHtcbiAgICAgICAgdGhpcy5fcm90YXRpb25EaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaGFuZGxlciBpcyBlbmFibGVkIGFuZCBoYXMgZGV0ZWN0ZWQgdGhlIHN0YXJ0IG9mIGEgem9vbS9yb3RhdGUgZ2VzdHVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyXG4gICAgICovXG4gICAgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRW5hYmxlZCgpICYmICEhdGhpcy5fZ2VzdHVyZUludGVudDtcbiAgICB9XG5cbiAgICBvblN0YXJ0KGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoICE9PSAyKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcDAgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUudG91Y2hlc1swXSksXG4gICAgICAgICAgICBwMSA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZS50b3VjaGVzWzFdKSxcbiAgICAgICAgICAgIGNlbnRlciA9IHAwLmFkZChwMSkuZGl2KDIpO1xuXG4gICAgICAgIHRoaXMuX3N0YXJ0VmVjID0gcDAuc3ViKHAxKTtcbiAgICAgICAgdGhpcy5fc3RhcnRBcm91bmQgPSB0aGlzLl9tYXAudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oY2VudGVyKTtcbiAgICAgICAgdGhpcy5fZ2VzdHVyZUludGVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5faW5lcnRpYSA9IFtdO1xuXG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25FbmQpO1xuICAgIH1cblxuICAgIF9nZXRUb3VjaEV2ZW50RGF0YShlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHAwID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlLnRvdWNoZXNbMF0pLFxuICAgICAgICAgICAgcDEgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUudG91Y2hlc1sxXSk7XG5cbiAgICAgICAgY29uc3QgdmVjID0gcDAuc3ViKHAxKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZlYyxcbiAgICAgICAgICAgIGNlbnRlcjogcDAuYWRkKHAxKS5kaXYoMiksXG4gICAgICAgICAgICBzY2FsZTogdmVjLm1hZygpIC8gdGhpcy5fc3RhcnRWZWMubWFnKCksXG4gICAgICAgICAgICBiZWFyaW5nOiB0aGlzLl9yb3RhdGlvbkRpc2FibGVkID8gMCA6IHZlYy5hbmdsZVdpdGgodGhpcy5fc3RhcnRWZWMpICogMTgwIC8gTWF0aC5QSVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9vbk1vdmUoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCAhPT0gMikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHt2ZWMsIHNjYWxlLCBiZWFyaW5nfSA9IHRoaXMuX2dldFRvdWNoRXZlbnREYXRhKGUpO1xuXG4gICAgICAgIC8vIERldGVybWluZSAnaW50ZW50JyBieSB3aGljaGV2ZXIgdGhyZXNob2xkIGlzIHN1cnBhc3NlZCBmaXJzdCxcbiAgICAgICAgLy8gdGhlbiBrZWVwIHRoYXQgc3RhdGUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGdlc3R1cmUuXG4gICAgICAgIGlmICghdGhpcy5fZ2VzdHVyZUludGVudCkge1xuICAgICAgICAgICAgLy8gd2hlbiByb3RhdGlvbiBpcyBkaXNhYmxlZCwgYW55IHNjYWxlIGNoYW5nZSB0cmlnZ2VycyB0aGUgem9vbSBnZXN0dXJlIHRvIHN0YXJ0XG4gICAgICAgICAgICBjb25zdCBzY2FsaW5nU2lnbmlmaWNhbnRseSA9ICh0aGlzLl9yb3RhdGlvbkRpc2FibGVkICYmIHNjYWxlICE9PSAxKSB8fCAoTWF0aC5hYnMoMSAtIHNjYWxlKSA+IHNpZ25pZmljYW50U2NhbGVUaHJlc2hvbGQpLFxuICAgICAgICAgICAgICAgIHJvdGF0aW5nU2lnbmlmaWNhbnRseSA9IChNYXRoLmFicyhiZWFyaW5nKSA+IHNpZ25pZmljYW50Um90YXRlVGhyZXNob2xkKTtcblxuICAgICAgICAgICAgaWYgKHJvdGF0aW5nU2lnbmlmaWNhbnRseSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlc3R1cmVJbnRlbnQgPSAncm90YXRlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2NhbGluZ1NpZ25pZmljYW50bHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXN0dXJlSW50ZW50ID0gJ3pvb20nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fZ2VzdHVyZUludGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudChgJHt0aGlzLl9nZXN0dXJlSW50ZW50fXN0YXJ0YCwge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCdtb3Zlc3RhcnQnLCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFZlYyA9IHZlYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xhc3RUb3VjaEV2ZW50ID0gZTtcbiAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25Ub3VjaEZyYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBfb25Ub3VjaEZyYW1lKCkge1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBjb25zdCBnZXN0dXJlSW50ZW50ID0gdGhpcy5fZ2VzdHVyZUludGVudDtcbiAgICAgICAgaWYgKCFnZXN0dXJlSW50ZW50KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLl9tYXAudHJhbnNmb3JtO1xuXG4gICAgICAgIGlmICghdGhpcy5fc3RhcnRTY2FsZSkge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRTY2FsZSA9IHRyLnNjYWxlO1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRCZWFyaW5nID0gdHIuYmVhcmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtjZW50ZXIsIGJlYXJpbmcsIHNjYWxlfSA9IHRoaXMuX2dldFRvdWNoRXZlbnREYXRhKHRoaXMuX2xhc3RUb3VjaEV2ZW50KTtcbiAgICAgICAgY29uc3QgYXJvdW5kID0gdHIucG9pbnRMb2NhdGlvbihjZW50ZXIpO1xuICAgICAgICBjb25zdCBhcm91bmRQb2ludCA9IHRyLmxvY2F0aW9uUG9pbnQoYXJvdW5kKTtcblxuICAgICAgICBpZiAoZ2VzdHVyZUludGVudCA9PT0gJ3JvdGF0ZScpIHtcbiAgICAgICAgICAgIHRyLmJlYXJpbmcgPSB0aGlzLl9zdGFydEJlYXJpbmcgKyBiZWFyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgdHIuem9vbSA9IHRyLnNjYWxlWm9vbSh0aGlzLl9zdGFydFNjYWxlICogc2NhbGUpO1xuICAgICAgICB0ci5zZXRMb2NhdGlvbkF0UG9pbnQodGhpcy5fc3RhcnRBcm91bmQsIGFyb3VuZFBvaW50KTtcblxuICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoZ2VzdHVyZUludGVudCwge29yaWdpbmFsRXZlbnQ6IHRoaXMuX2xhc3RUb3VjaEV2ZW50fSkpO1xuICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFRvdWNoRXZlbnR9KSk7XG5cbiAgICAgICAgdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7XG4gICAgICAgIHRoaXMuX2luZXJ0aWEucHVzaChbYnJvd3Nlci5ub3coKSwgc2NhbGUsIGNlbnRlcl0pO1xuICAgIH1cblxuICAgIF9vbkVuZChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25FbmQpO1xuXG4gICAgICAgIGNvbnN0IGdlc3R1cmVJbnRlbnQgPSB0aGlzLl9nZXN0dXJlSW50ZW50O1xuICAgICAgICBjb25zdCBzdGFydFNjYWxlID0gdGhpcy5fc3RhcnRTY2FsZTtcblxuICAgICAgICBpZiAodGhpcy5fZnJhbWVJZCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKTtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9nZXN0dXJlSW50ZW50O1xuICAgICAgICBkZWxldGUgdGhpcy5fc3RhcnRTY2FsZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0QmVhcmluZztcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RUb3VjaEV2ZW50O1xuXG4gICAgICAgIGlmICghZ2VzdHVyZUludGVudCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudChgJHtnZXN0dXJlSW50ZW50fWVuZGAsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuXG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuXG4gICAgICAgIGNvbnN0IGluZXJ0aWEgPSB0aGlzLl9pbmVydGlhLFxuICAgICAgICAgICAgbWFwID0gdGhpcy5fbWFwO1xuXG4gICAgICAgIGlmIChpbmVydGlhLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIG1hcC5zbmFwVG9Ob3J0aCh7fSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhc3QgPSBpbmVydGlhW2luZXJ0aWEubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICBmaXJzdCA9IGluZXJ0aWFbMF0sXG4gICAgICAgICAgICBsYXN0U2NhbGUgPSBtYXAudHJhbnNmb3JtLnNjYWxlWm9vbShzdGFydFNjYWxlICogbGFzdFsxXSksXG4gICAgICAgICAgICBmaXJzdFNjYWxlID0gbWFwLnRyYW5zZm9ybS5zY2FsZVpvb20oc3RhcnRTY2FsZSAqIGZpcnN0WzFdKSxcbiAgICAgICAgICAgIHNjYWxlT2Zmc2V0ID0gbGFzdFNjYWxlIC0gZmlyc3RTY2FsZSxcbiAgICAgICAgICAgIHNjYWxlRHVyYXRpb24gPSAobGFzdFswXSAtIGZpcnN0WzBdKSAvIDEwMDAsXG4gICAgICAgICAgICBwID0gbGFzdFsyXTtcblxuICAgICAgICBpZiAoc2NhbGVEdXJhdGlvbiA9PT0gMCB8fCBsYXN0U2NhbGUgPT09IGZpcnN0U2NhbGUpIHtcbiAgICAgICAgICAgIG1hcC5zbmFwVG9Ob3J0aCh7fSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBzY2FsZS9zIHNwZWVkIGFuZCBhZGp1c3QgZm9yIGluY3JlYXNlZCBpbml0aWFsIGFuaW1hdGlvbiBzcGVlZCB3aGVuIGVhc2luZ1xuICAgICAgICBsZXQgc3BlZWQgPSBzY2FsZU9mZnNldCAqIGluZXJ0aWFMaW5lYXJpdHkgLyBzY2FsZUR1cmF0aW9uOyAvLyBzY2FsZS9zXG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHNwZWVkKSA+IGluZXJ0aWFNYXhTcGVlZCkge1xuICAgICAgICAgICAgaWYgKHNwZWVkID4gMCkge1xuICAgICAgICAgICAgICAgIHNwZWVkID0gaW5lcnRpYU1heFNwZWVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcGVlZCA9IC1pbmVydGlhTWF4U3BlZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IE1hdGguYWJzKHNwZWVkIC8gKGluZXJ0aWFEZWNlbGVyYXRpb24gKiBpbmVydGlhTGluZWFyaXR5KSkgKiAxMDAwO1xuICAgICAgICBsZXQgdGFyZ2V0U2NhbGUgPSBsYXN0U2NhbGUgKyBzcGVlZCAqIGR1cmF0aW9uIC8gMjAwMDtcblxuICAgICAgICBpZiAodGFyZ2V0U2NhbGUgPCAwKSB7XG4gICAgICAgICAgICB0YXJnZXRTY2FsZSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBtYXAuZWFzZVRvKHtcbiAgICAgICAgICAgIHpvb206IHRhcmdldFNjYWxlLFxuICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICBlYXNpbmc6IGluZXJ0aWFFYXNpbmcsXG4gICAgICAgICAgICBhcm91bmQ6IHRoaXMuX2Fyb3VuZENlbnRlciA/IG1hcC5nZXRDZW50ZXIoKSA6IG1hcC51bnByb2plY3QocCksXG4gICAgICAgICAgICBub01vdmVTdGFydDogdHJ1ZVxuICAgICAgICB9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgIH1cblxuICAgIF9kcmFpbkluZXJ0aWFCdWZmZXIoKSB7XG4gICAgICAgIGNvbnN0IGluZXJ0aWEgPSB0aGlzLl9pbmVydGlhLFxuICAgICAgICAgICAgbm93ID0gYnJvd3Nlci5ub3coKSxcbiAgICAgICAgICAgIGN1dG9mZiA9IDE2MDsgLy8gbXNlY1xuXG4gICAgICAgIHdoaWxlIChpbmVydGlhLmxlbmd0aCA+IDIgJiYgbm93IC0gaW5lcnRpYVswXVswXSA+IGN1dG9mZikgaW5lcnRpYS5zaGlmdCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVG91Y2hab29tUm90YXRlSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7TWFwTW91c2VFdmVudCwgTWFwVG91Y2hFdmVudCwgTWFwV2hlZWxFdmVudH0gZnJvbSAnLi4vdWkvZXZlbnRzJztcbmltcG9ydCBET00gZnJvbSAnLi4vdXRpbC9kb20nO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4vbWFwJztcbmltcG9ydCBzY3JvbGxab29tIGZyb20gJy4vaGFuZGxlci9zY3JvbGxfem9vbSc7XG5pbXBvcnQgYm94Wm9vbSBmcm9tICcuL2hhbmRsZXIvYm94X3pvb20nO1xuaW1wb3J0IGRyYWdSb3RhdGUgZnJvbSAnLi9oYW5kbGVyL2RyYWdfcm90YXRlJztcbmltcG9ydCBkcmFnUGFuIGZyb20gJy4vaGFuZGxlci9kcmFnX3Bhbic7XG5pbXBvcnQga2V5Ym9hcmQgZnJvbSAnLi9oYW5kbGVyL2tleWJvYXJkJztcbmltcG9ydCBkb3VibGVDbGlja1pvb20gZnJvbSAnLi9oYW5kbGVyL2RibGNsaWNrX3pvb20nO1xuaW1wb3J0IHRvdWNoWm9vbVJvdGF0ZSBmcm9tICcuL2hhbmRsZXIvdG91Y2hfem9vbV9yb3RhdGUnO1xuXG5jb25zdCBoYW5kbGVycyA9IHtcbiAgICBzY3JvbGxab29tLFxuICAgIGJveFpvb20sXG4gICAgZHJhZ1JvdGF0ZSxcbiAgICBkcmFnUGFuLFxuICAgIGtleWJvYXJkLFxuICAgIGRvdWJsZUNsaWNrWm9vbSxcbiAgICB0b3VjaFpvb21Sb3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmRIYW5kbGVycyhtYXA6IE1hcCwgb3B0aW9uczoge2ludGVyYWN0aXZlOiBib29sZWFuLCBjbGlja1RvbGVyYW5jZTogbnVtYmVyfSkge1xuICAgIGNvbnN0IGVsID0gbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuICAgIGxldCBjb250ZXh0TWVudUV2ZW50ID0gbnVsbDtcbiAgICBsZXQgbW91c2VEb3duID0gZmFsc2U7XG4gICAgbGV0IHN0YXJ0UG9zID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgbmFtZSBpbiBoYW5kbGVycykge1xuICAgICAgICAobWFwOiBhbnkpW25hbWVdID0gbmV3IGhhbmRsZXJzW25hbWVdKG1hcCwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChvcHRpb25zLmludGVyYWN0aXZlICYmIG9wdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIChtYXA6IGFueSlbbmFtZV0uZW5hYmxlKG9wdGlvbnNbbmFtZV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdtb3VzZW91dCcsIG9uTW91c2VPdXQpO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdtb3VzZW92ZXInLCBvbk1vdXNlT3Zlcik7XG5cbiAgICAvLyBCaW5kIHRvdWNoc3RhcnQgYW5kIHRvdWNobW92ZSB3aXRoIHBhc3NpdmU6IGZhbHNlIGJlY2F1c2UsIGV2ZW4gdGhvdWdoXG4gICAgLy8gdGhleSBvbmx5IGZpcmUgYSBtYXAgZXZlbnRzIGFuZCB0aGVyZWZvcmUgY291bGQgdGhlb3JldGljYWxseSBiZVxuICAgIC8vIHBhc3NpdmUsIGJpbmRpbmcgd2l0aCBwYXNzaXZlOiB0cnVlIGNhdXNlcyBpT1Mgbm90IHRvIHJlc3BlY3RcbiAgICAvLyBlLnByZXZlbnREZWZhdWx0KCkgaW4gX290aGVyXyBoYW5kbGVycywgZXZlbiBpZiB0aGV5IGFyZSBub24tcGFzc2l2ZVxuICAgIC8vIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI1MSlcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQsIHtwYXNzaXZlOiBmYWxzZX0pO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUsIHtwYXNzaXZlOiBmYWxzZX0pO1xuXG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAndG91Y2hjYW5jZWwnLCBvblRvdWNoQ2FuY2VsKTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2NsaWNrJywgb25DbGljayk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdkYmxjbGljaycsIG9uRGJsQ2xpY2spO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnY29udGV4dG1lbnUnLCBvbkNvbnRleHRNZW51KTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ3doZWVsJywgb25XaGVlbCwge3Bhc3NpdmU6IGZhbHNlfSk7XG5cbiAgICBmdW5jdGlvbiBvbk1vdXNlRG93bihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIG1vdXNlRG93biA9IHRydWU7XG4gICAgICAgIHN0YXJ0UG9zID0gRE9NLm1vdXNlUG9zKGVsLCBlKTtcblxuICAgICAgICBjb25zdCBtYXBFdmVudCA9IG5ldyBNYXBNb3VzZUV2ZW50KCdtb3VzZWRvd24nLCBtYXAsIGUpO1xuICAgICAgICBtYXAuZmlyZShtYXBFdmVudCk7XG5cbiAgICAgICAgaWYgKG1hcEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmludGVyYWN0aXZlICYmICFtYXAuZG91YmxlQ2xpY2tab29tLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIG1hcC5zdG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBtYXAuYm94Wm9vbS5vbk1vdXNlRG93bihlKTtcblxuICAgICAgICBpZiAoIW1hcC5ib3hab29tLmlzQWN0aXZlKCkgJiYgIW1hcC5kcmFnUGFuLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIG1hcC5kcmFnUm90YXRlLm9uTW91c2VEb3duKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtYXAuYm94Wm9vbS5pc0FjdGl2ZSgpICYmICFtYXAuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICBtYXAuZHJhZ1Bhbi5vbk1vdXNlRG93bihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uTW91c2VVcChlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHJvdGF0aW5nID0gbWFwLmRyYWdSb3RhdGUuaXNBY3RpdmUoKTtcblxuICAgICAgICBpZiAoY29udGV4dE1lbnVFdmVudCAmJiAhcm90YXRpbmcpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSB0aGUgY2FzZSBmb3IgTWFjXG4gICAgICAgICAgICBtYXAuZmlyZShuZXcgTWFwTW91c2VFdmVudCgnY29udGV4dG1lbnUnLCBtYXAsIGNvbnRleHRNZW51RXZlbnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHRNZW51RXZlbnQgPSBudWxsO1xuICAgICAgICBtb3VzZURvd24gPSBmYWxzZTtcblxuICAgICAgICBtYXAuZmlyZShuZXcgTWFwTW91c2VFdmVudCgnbW91c2V1cCcsIG1hcCwgZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKG1hcC5kcmFnUGFuLmlzQWN0aXZlKCkpIHJldHVybjtcbiAgICAgICAgaWYgKG1hcC5kcmFnUm90YXRlLmlzQWN0aXZlKCkpIHJldHVybjtcblxuICAgICAgICBsZXQgdGFyZ2V0OiA/Tm9kZSA9IChlLnRhcmdldDogYW55KTtcbiAgICAgICAgd2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT09IGVsKSB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHRhcmdldCAhPT0gZWwpIHJldHVybjtcblxuICAgICAgICBtYXAuZmlyZShuZXcgTWFwTW91c2VFdmVudCgnbW91c2Vtb3ZlJywgbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Nb3VzZU92ZXIoZTogTW91c2VFdmVudCkge1xuICAgICAgICBsZXQgdGFyZ2V0OiA/Tm9kZSA9IChlLnRhcmdldDogYW55KTtcbiAgICAgICAgd2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT09IGVsKSB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHRhcmdldCAhPT0gZWwpIHJldHVybjtcblxuICAgICAgICBtYXAuZmlyZShuZXcgTWFwTW91c2VFdmVudCgnbW91c2VvdmVyJywgbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Nb3VzZU91dChlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdtb3VzZW91dCcsIG1hcCwgZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uVG91Y2hTdGFydChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IG1hcEV2ZW50ID0gbmV3IE1hcFRvdWNoRXZlbnQoJ3RvdWNoc3RhcnQnLCBtYXAsIGUpO1xuICAgICAgICBtYXAuZmlyZShtYXBFdmVudCk7XG5cbiAgICAgICAgaWYgKG1hcEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICBtYXAuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtYXAuYm94Wm9vbS5pc0FjdGl2ZSgpICYmICFtYXAuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICBtYXAuZHJhZ1Bhbi5vblRvdWNoU3RhcnQoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBtYXAudG91Y2hab29tUm90YXRlLm9uU3RhcnQoZSk7XG4gICAgICAgIG1hcC5kb3VibGVDbGlja1pvb20ub25Ub3VjaFN0YXJ0KG1hcEV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblRvdWNoTW92ZShlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIG1hcC5maXJlKG5ldyBNYXBUb3VjaEV2ZW50KCd0b3VjaG1vdmUnLCBtYXAsIGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblRvdWNoRW5kKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgbWFwLmZpcmUobmV3IE1hcFRvdWNoRXZlbnQoJ3RvdWNoZW5kJywgbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Ub3VjaENhbmNlbChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIG1hcC5maXJlKG5ldyBNYXBUb3VjaEV2ZW50KCd0b3VjaGNhbmNlbCcsIG1hcCwgZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xpY2soZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBwb3MgPSBET00ubW91c2VQb3MoZWwsIGUpO1xuICAgICAgICBpZiAoIXN0YXJ0UG9zIHx8IHBvcy5lcXVhbHMoc3RhcnRQb3MpIHx8IHBvcy5kaXN0KHN0YXJ0UG9zKSA8IG9wdGlvbnMuY2xpY2tUb2xlcmFuY2UpIHtcbiAgICAgICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdjbGljaycsIG1hcCwgZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25EYmxDbGljayhlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IG1hcEV2ZW50ID0gbmV3IE1hcE1vdXNlRXZlbnQoJ2RibGNsaWNrJywgbWFwLCBlKTtcbiAgICAgICAgbWFwLmZpcmUobWFwRXZlbnQpO1xuXG4gICAgICAgIGlmIChtYXBFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLm9uRGJsQ2xpY2sobWFwRXZlbnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnUoZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCByb3RhdGluZyA9IG1hcC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7XG4gICAgICAgIGlmICghbW91c2VEb3duICYmICFyb3RhdGluZykge1xuICAgICAgICAgICAgLy8gV2luZG93czogY29udGV4dG1lbnUgZmlyZWQgb24gbW91c2V1cCwgc28gZmlyZSBldmVudCBub3dcbiAgICAgICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdjb250ZXh0bWVudScsIG1hcCwgZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1vdXNlRG93bikge1xuICAgICAgICAgICAgLy8gTWFjOiBjb250ZXh0bWVudSBmaXJlZCBvbiBtb3VzZWRvd247IHdlIHNhdmUgaXQgdW50aWwgbW91c2V1cCBmb3IgY29uc2lzdGVuY3kncyBzYWtlXG4gICAgICAgICAgICBjb250ZXh0TWVudUV2ZW50ID0gZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHByZXZlbnQgYnJvd3NlciBjb250ZXh0IG1lbnUgd2hlbiBuZWNlc3Nhcnk7IHdlIGRvbid0IGFsbG93IGl0IHdpdGggcm90YXRpb25cbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBjYW4ndCBkaXNjZXJuIHJvdGF0aW9uIGdlc3R1cmUgc3RhcnQgZnJvbSBjb250ZXh0bWVudSBvbiBNYWNcbiAgICAgICAgaWYgKG1hcC5kcmFnUm90YXRlLmlzRW5hYmxlZCgpIHx8IG1hcC5saXN0ZW5zKCdjb250ZXh0bWVudScpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbldoZWVsKGU6IFdoZWVsRXZlbnQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIG1hcC5zdG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXBFdmVudCA9IG5ldyBNYXBXaGVlbEV2ZW50KCd3aGVlbCcsIG1hcCwgZSk7XG4gICAgICAgIG1hcC5maXJlKG1hcEV2ZW50KTtcblxuICAgICAgICBpZiAobWFwRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFwLnNjcm9sbFpvb20ub25XaGVlbChlKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIGJpbmRBbGwsXG4gICAgZXh0ZW5kLFxuICAgIGRlZXBFcXVhbCxcbiAgICB3YXJuT25jZSxcbiAgICBjbGFtcCxcbiAgICB3cmFwLFxuICAgIGVhc2UgYXMgZGVmYXVsdEVhc2luZyxcbiAgICBwaWNrXG59IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi4vZ2VvL2xuZ19sYXRfYm91bmRzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7RXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtMbmdMYXRMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0Qm91bmRzTGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXRfYm91bmRzJztcbmltcG9ydCB0eXBlIHtUYXNrSUR9IGZyb20gJy4uL3V0aWwvdGFza19xdWV1ZSc7XG5pbXBvcnQgdHlwZSB7UG9pbnRMaWtlfSBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuLyoqXG4gKiBPcHRpb25zIGNvbW1vbiB0byB7QGxpbmsgTWFwI2p1bXBUb30sIHtAbGluayBNYXAjZWFzZVRvfSwgYW5kIHtAbGluayBNYXAjZmx5VG99LCBjb250cm9sbGluZyB0aGUgZGVzaXJlZCBsb2NhdGlvbixcbiAqIHpvb20sIGJlYXJpbmcsIGFuZCBwaXRjaCBvZiB0aGUgY2FtZXJhLiBBbGwgcHJvcGVydGllcyBhcmUgb3B0aW9uYWwsIGFuZCB3aGVuIGEgcHJvcGVydHkgaXMgb21pdHRlZCwgdGhlIGN1cnJlbnRcbiAqIGNhbWVyYSB2YWx1ZSBmb3IgdGhhdCBwcm9wZXJ0eSB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2FtZXJhT3B0aW9uc1xuICogQHByb3BlcnR5IHtMbmdMYXRMaWtlfSBjZW50ZXIgVGhlIGRlc2lyZWQgY2VudGVyLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHpvb20gVGhlIGRlc2lyZWQgem9vbSBsZXZlbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZWFyaW5nIFRoZSBkZXNpcmVkIGJlYXJpbmcsIGluIGRlZ3JlZXMuIFRoZSBiZWFyaW5nIGlzIHRoZSBjb21wYXNzIGRpcmVjdGlvbiB0aGF0XG4gKiBpcyBcInVwXCI7IGZvciBleGFtcGxlLCBhIGJlYXJpbmcgb2YgOTDDgsKwIG9yaWVudHMgdGhlIG1hcCBzbyB0aGF0IGVhc3QgaXMgdXAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGl0Y2ggVGhlIGRlc2lyZWQgcGl0Y2gsIGluIGRlZ3JlZXMuXG4gKiBAcHJvcGVydHkge0xuZ0xhdExpa2V9IGFyb3VuZCBJZiBgem9vbWAgaXMgc3BlY2lmaWVkLCBgYXJvdW5kYCBkZXRlcm1pbmVzIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggdGhlIHpvb20gaXMgY2VudGVyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIENhbWVyYU9wdGlvbnMgPSB7XG4gICAgY2VudGVyPzogTG5nTGF0TGlrZSxcbiAgICB6b29tPzogbnVtYmVyLFxuICAgIGJlYXJpbmc/OiBudW1iZXIsXG4gICAgcGl0Y2g/OiBudW1iZXIsXG4gICAgYXJvdW5kPzogTG5nTGF0TGlrZVxufTtcblxuLyoqXG4gKiBPcHRpb25zIGNvbW1vbiB0byBtYXAgbW92ZW1lbnQgbWV0aG9kcyB0aGF0IGludm9sdmUgYW5pbWF0aW9uLCBzdWNoIGFzIHtAbGluayBNYXAjcGFuQnl9IGFuZFxuICoge0BsaW5rIE1hcCNlYXNlVG99LCBjb250cm9sbGluZyB0aGUgZHVyYXRpb24gYW5kIGVhc2luZyBmdW5jdGlvbiBvZiB0aGUgYW5pbWF0aW9uLiBBbGwgcHJvcGVydGllc1xuICogYXJlIG9wdGlvbmFsLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFuaW1hdGlvbk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkdXJhdGlvbiBUaGUgYW5pbWF0aW9uJ3MgZHVyYXRpb24sIG1lYXN1cmVkIGluIG1pbGxpc2Vjb25kcy5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGVhc2luZyBBIGZ1bmN0aW9uIHRha2luZyBhIHRpbWUgaW4gdGhlIHJhbmdlIDAuLjEgYW5kIHJldHVybmluZyBhIG51bWJlciB3aGVyZSAwIGlzXG4gKiAgIHRoZSBpbml0aWFsIHN0YXRlIGFuZCAxIGlzIHRoZSBmaW5hbCBzdGF0ZS5cbiAqIEBwcm9wZXJ0eSB7UG9pbnRMaWtlfSBvZmZzZXQgb2YgdGhlIHRhcmdldCBjZW50ZXIgcmVsYXRpdmUgdG8gcmVhbCBtYXAgY29udGFpbmVyIGNlbnRlciBhdCB0aGUgZW5kIG9mIGFuaW1hdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYW5pbWF0ZSBJZiBgZmFsc2VgLCBubyBhbmltYXRpb24gd2lsbCBvY2N1ci5cbiAqL1xuZXhwb3J0IHR5cGUgQW5pbWF0aW9uT3B0aW9ucyA9IHtcbiAgICBkdXJhdGlvbj86IG51bWJlcixcbiAgICBlYXNpbmc/OiAobnVtYmVyKSA9PiBudW1iZXIsXG4gICAgb2Zmc2V0PzogUG9pbnRMaWtlLFxuICAgIGFuaW1hdGU/OiBib29sZWFuXG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHNldHRpbmcgcGFkZGluZyBvbiBhIGNhbGwgdG8ge0BsaW5rIE1hcCNmaXRCb3VuZHN9LiBBbGwgcHJvcGVydGllcyBvZiB0aGlzIG9iamVjdCBtdXN0IGJlXG4gKiBub24tbmVnYXRpdmUgaW50ZWdlcnMuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFkZGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgUGFkZGluZyBpbiBwaXhlbHMgZnJvbSB0aGUgdG9wIG9mIHRoZSBtYXAgY2FudmFzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvdHRvbSBQYWRkaW5nIGluIHBpeGVscyBmcm9tIHRoZSBib3R0b20gb2YgdGhlIG1hcCBjYW52YXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCBQYWRkaW5nIGluIHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBtYXAgY2FudmFzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJpZ2h0IFBhZGRpbmcgaW4gcGl4ZWxzIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBtYXAgY2FudmFzLlxuICovXG5cbmNsYXNzIENhbWVyYSBleHRlbmRzIEV2ZW50ZWQge1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIF9tb3Zpbmc6IGJvb2xlYW47XG4gICAgX3pvb21pbmc6IGJvb2xlYW47XG4gICAgX3JvdGF0aW5nOiBib29sZWFuO1xuICAgIF9waXRjaGluZzogYm9vbGVhbjtcblxuICAgIF9iZWFyaW5nU25hcDogbnVtYmVyO1xuICAgIF9lYXNlRW5kVGltZW91dElEOiBUaW1lb3V0SUQ7XG4gICAgX2Vhc2VTdGFydDogbnVtYmVyO1xuICAgIF9lYXNlT3B0aW9uczoge2R1cmF0aW9uOiBudW1iZXIsIGVhc2luZzogKG51bWJlcikgPT4gbnVtYmVyfTtcblxuICAgIF9vbkVhc2VGcmFtZTogKG51bWJlcikgPT4gdm9pZDtcbiAgICBfb25FYXNlRW5kOiAoKSA9PiB2b2lkO1xuICAgIF9lYXNlRnJhbWVJZDogP1Rhc2tJRDtcblxuICAgICtfcmVxdWVzdFJlbmRlckZyYW1lOiAoKCkgPT4gdm9pZCkgPT4gVGFza0lEO1xuICAgICtfY2FuY2VsUmVuZGVyRnJhbWU6IChUYXNrSUQpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2Zvcm06IFRyYW5zZm9ybSwgb3B0aW9uczoge2JlYXJpbmdTbmFwOiBudW1iZXJ9KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX21vdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl96b29taW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICB0aGlzLl9iZWFyaW5nU25hcCA9IG9wdGlvbnMuYmVhcmluZ1NuYXA7XG5cbiAgICAgICAgYmluZEFsbChbJ19yZW5kZXJGcmFtZUNhbGxiYWNrJ10sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBjZW50ZXJwb2ludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMgVGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBjZW50ZXJwb2ludC5cbiAgICAgKi9cbiAgICBnZXRDZW50ZXIoKTogTG5nTGF0IHsgcmV0dXJuIG5ldyBMbmdMYXQodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZywgdGhpcy50cmFuc2Zvcm0uY2VudGVyLmxhdCk7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBjZW50ZXJwb2ludC4gRXF1aXZhbGVudCB0byBganVtcFRvKHtjZW50ZXI6IGNlbnRlcn0pYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIGNlbnRlciBUaGUgY2VudGVycG9pbnQgdG8gc2V0LlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRDZW50ZXIoWy03NCwgMzhdKTtcbiAgICAgKi9cbiAgICBzZXRDZW50ZXIoY2VudGVyOiBMbmdMYXRMaWtlLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuanVtcFRvKHtjZW50ZXJ9LCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMgdGhlIG1hcCBieSB0aGUgc3BlY2lmaWVkIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9mZnNldCBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyBieSB3aGljaCB0byBwYW4gdGhlIG1hcC5cbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAc2VlIFtOYXZpZ2F0ZSB0aGUgbWFwIHdpdGggZ2FtZS1saWtlIGNvbnRyb2xzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dhbWUtY29udHJvbHMvKVxuICAgICAqL1xuICAgIHBhbkJ5KG9mZnNldDogUG9pbnRMaWtlLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIG9mZnNldCA9IFBvaW50LmNvbnZlcnQob2Zmc2V0KS5tdWx0KC0xKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLCBleHRlbmQoe29mZnNldH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMgdGhlIG1hcCB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBsbmdsYXQgVGhlIGxvY2F0aW9uIHRvIHBhbiB0aGUgbWFwIHRvLlxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHBhblRvKGxuZ2xhdDogTG5nTGF0TGlrZSwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lYXNlVG8oZXh0ZW5kKHtcbiAgICAgICAgICAgIGNlbnRlcjogbG5nbGF0XG4gICAgICAgIH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMgVGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbC5cbiAgICAgKi9cbiAgICBnZXRab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS56b29tOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXAncyB6b29tIGxldmVsLiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe3pvb206IHpvb219KWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB6b29tIFRoZSB6b29tIGxldmVsIHRvIHNldCAoMC0yMCkuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIHpvb20gdGhlIG1hcCB0byA1XG4gICAgICogbWFwLnNldFpvb20oNSk7XG4gICAgICovXG4gICAgc2V0Wm9vbSh6b29tOiBudW1iZXIsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmp1bXBUbyh7em9vbX0sIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFpvb21zIHRoZSBtYXAgdG8gdGhlIHNwZWNpZmllZCB6b29tIGxldmVsLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB6b29tIFRoZSB6b29tIGxldmVsIHRvIHRyYW5zaXRpb24gdG8uXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHpvb21Ubyh6b29tOiBudW1iZXIsIG9wdGlvbnM6ID8gQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhc2VUbyhleHRlbmQoe1xuICAgICAgICAgICAgem9vbVxuICAgICAgICB9LCBvcHRpb25zKSwgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmNyZWFzZXMgdGhlIG1hcCdzIHpvb20gbGV2ZWwgYnkgMS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHpvb21JbihvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuem9vbVRvKHRoaXMuZ2V0Wm9vbSgpICsgMSwgb3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjcmVhc2VzIHRoZSBtYXAncyB6b29tIGxldmVsIGJ5IDEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICB6b29tT3V0KG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkgLSAxLCBvcHRpb25zLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBjdXJyZW50IGJlYXJpbmcuIFRoZSBiZWFyaW5nIGlzIHRoZSBjb21wYXNzIGRpcmVjdGlvbiB0aGF0IGlzIFxcXCJ1cFxcXCI7IGZvciBleGFtcGxlLCBhIGJlYXJpbmdcbiAgICAgKiBvZiA5MMOCwrAgb3JpZW50cyB0aGUgbWFwIHNvIHRoYXQgZWFzdCBpcyB1cC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMgVGhlIG1hcCdzIGN1cnJlbnQgYmVhcmluZy5cbiAgICAgKiBAc2VlIFtOYXZpZ2F0ZSB0aGUgbWFwIHdpdGggZ2FtZS1saWtlIGNvbnRyb2xzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dhbWUtY29udHJvbHMvKVxuICAgICAqL1xuICAgIGdldEJlYXJpbmcoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLmJlYXJpbmc7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIGJlYXJpbmcgKHJvdGF0aW9uKS4gVGhlIGJlYXJpbmcgaXMgdGhlIGNvbXBhc3MgZGlyZWN0aW9uIHRoYXQgaXMgXFxcInVwXFxcIjsgZm9yIGV4YW1wbGUsIGEgYmVhcmluZ1xuICAgICAqIG9mIDkww4LCsCBvcmllbnRzIHRoZSBtYXAgc28gdGhhdCBlYXN0IGlzIHVwLlxuICAgICAqXG4gICAgICogRXF1aXZhbGVudCB0byBganVtcFRvKHtiZWFyaW5nOiBiZWFyaW5nfSlgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gYmVhcmluZyBUaGUgZGVzaXJlZCBiZWFyaW5nLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIHJvdGF0ZSB0aGUgbWFwIHRvIDkwIGRlZ3JlZXNcbiAgICAgKiBtYXAuc2V0QmVhcmluZyg5MCk7XG4gICAgICovXG4gICAgc2V0QmVhcmluZyhiZWFyaW5nOiBudW1iZXIsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmp1bXBUbyh7YmVhcmluZ30sIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZXMgdGhlIG1hcCB0byB0aGUgc3BlY2lmaWVkIGJlYXJpbmcsIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi4gVGhlIGJlYXJpbmcgaXMgdGhlIGNvbXBhc3MgZGlyZWN0aW9uXG4gICAgICogdGhhdCBpcyBcXFwidXBcXFwiOyBmb3IgZXhhbXBsZSwgYSBiZWFyaW5nIG9mIDkww4LCsCBvcmllbnRzIHRoZSBtYXAgc28gdGhhdCBlYXN0IGlzIHVwLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gYmVhcmluZyBUaGUgZGVzaXJlZCBiZWFyaW5nLlxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHJvdGF0ZVRvKGJlYXJpbmc6IG51bWJlciwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lYXNlVG8oZXh0ZW5kKHtcbiAgICAgICAgICAgIGJlYXJpbmdcbiAgICAgICAgfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUm90YXRlcyB0aGUgbWFwIHNvIHRoYXQgbm9ydGggaXMgdXAgKDDDgsKwIGJlYXJpbmcpLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHJlc2V0Tm9ydGgob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnJvdGF0ZVRvKDAsIGV4dGVuZCh7ZHVyYXRpb246IDEwMDB9LCBvcHRpb25zKSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUm90YXRlcyBhbmQgcGl0Y2hlcyB0aGUgbWFwIHNvIHRoYXQgbm9ydGggaXMgdXAgKDDDgsKwIGJlYXJpbmcpIGFuZCBwaXRjaCBpcyAww4LCsCwgd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZXNldE5vcnRoUGl0Y2gob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmVhc2VUbyhleHRlbmQoe1xuICAgICAgICAgICAgYmVhcmluZzogMCxcbiAgICAgICAgICAgIHBpdGNoOiAwLFxuICAgICAgICAgICAgZHVyYXRpb246IDEwMDBcbiAgICAgICAgfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNuYXBzIHRoZSBtYXAgc28gdGhhdCBub3J0aCBpcyB1cCAoMMOCwrAgYmVhcmluZyksIGlmIHRoZSBjdXJyZW50IGJlYXJpbmcgaXMgY2xvc2UgZW5vdWdoIHRvIGl0IChpLmUuIHdpdGhpbiB0aGVcbiAgICAgKiBgYmVhcmluZ1NuYXBgIHRocmVzaG9sZCkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNuYXBUb05vcnRoKG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuZ2V0QmVhcmluZygpKSA8IHRoaXMuX2JlYXJpbmdTbmFwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNldE5vcnRoKG9wdGlvbnMsIGV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgY3VycmVudCBwaXRjaCAodGlsdCkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIFRoZSBtYXAncyBjdXJyZW50IHBpdGNoLCBtZWFzdXJlZCBpbiBkZWdyZWVzIGF3YXkgZnJvbSB0aGUgcGxhbmUgb2YgdGhlIHNjcmVlbi5cbiAgICAgKi9cbiAgICBnZXRQaXRjaCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGl0Y2g7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIHBpdGNoICh0aWx0KS4gRXF1aXZhbGVudCB0byBganVtcFRvKHtwaXRjaDogcGl0Y2h9KWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBwaXRjaCBUaGUgcGl0Y2ggdG8gc2V0LCBtZWFzdXJlZCBpbiBkZWdyZWVzIGF3YXkgZnJvbSB0aGUgcGxhbmUgb2YgdGhlIHNjcmVlbiAoMC02MCkuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBwaXRjaHN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0UGl0Y2gocGl0Y2g6IG51bWJlciwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuanVtcFRvKHtwaXRjaH0sIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHtMYXRMbmdCb3VuZHNMaWtlfSBib3VuZHMgQ2FsY3VsYXRlIHRoZSBjZW50ZXIgZm9yIHRoZXNlIGJvdW5kcyBpbiB0aGUgdmlld3BvcnQgYW5kIHVzZVxuICAgICAqICAgICAgdGhlIGhpZ2hlc3Qgem9vbSBsZXZlbCB1cCB0byBhbmQgaW5jbHVkaW5nIGBNYXAjZ2V0TWF4Wm9vbSgpYCB0aGF0IGZpdHNcbiAgICAgKiAgICAgIGluIHRoZSB2aWV3cG9ydC4gTGF0TG5nQm91bmRzIHJlcHJlc2VudCBhIGJveCB0aGF0IGlzIGFsd2F5cyBheGlzLWFsaWduZWQgd2l0aCBiZWFyaW5nIDAuXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IFBhZGRpbmdPcHRpb25zfSBbb3B0aW9ucy5wYWRkaW5nXSBUaGUgYW1vdW50IG9mIHBhZGRpbmcgaW4gcGl4ZWxzIHRvIGFkZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfSBbb3B0aW9ucy5vZmZzZXQ9WzAsIDBdXSBUaGUgY2VudGVyIG9mIHRoZSBnaXZlbiBib3VuZHMgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGNlbnRlciwgbWVhc3VyZWQgaW4gcGl4ZWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhab29tXSBUaGUgbWF4aW11bSB6b29tIGxldmVsIHRvIGFsbG93IHdoZW4gdGhlIGNhbWVyYSB3b3VsZCB0cmFuc2l0aW9uIHRvIHRoZSBzcGVjaWZpZWQgYm91bmRzLlxuICAgICAqIEByZXR1cm5zIHtDYW1lcmFPcHRpb25zIHwgdm9pZH0gSWYgbWFwIGlzIGFibGUgdG8gZml0IHRvIHByb3ZpZGVkIGJvdW5kcywgcmV0dXJucyBgQ2FtZXJhT3B0aW9uc2Agd2l0aFxuICAgICAqICAgICAgYGNlbnRlcmAsIGB6b29tYCwgYW5kIGBiZWFyaW5nYC4gSWYgbWFwIGlzIHVuYWJsZSB0byBmaXQsIG1ldGhvZCB3aWxsIHdhcm4gYW5kIHJldHVybiB1bmRlZmluZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYmJveCA9IFtbLTc5LCA0M10sIFstNzMsIDQ1XV07XG4gICAgICogdmFyIG5ld0NhbWVyYVRyYW5zZm9ybSA9IG1hcC5jYW1lcmFGb3JCb3VuZHMoYmJveCwge1xuICAgICAqICAgcGFkZGluZzoge3RvcDogMTAsIGJvdHRvbToyNSwgbGVmdDogMTUsIHJpZ2h0OiA1fVxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGNhbWVyYUZvckJvdW5kcyhib3VuZHM6IExuZ0xhdEJvdW5kc0xpa2UsIG9wdGlvbnM/OiBDYW1lcmFPcHRpb25zKTogdm9pZCB8IENhbWVyYU9wdGlvbnMgJiBBbmltYXRpb25PcHRpb25zIHtcbiAgICAgICAgYm91bmRzID0gTG5nTGF0Qm91bmRzLmNvbnZlcnQoYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYUZvckJveEFuZEJlYXJpbmcoYm91bmRzLmdldE5vcnRoV2VzdCgpLCBib3VuZHMuZ2V0U291dGhFYXN0KCksIDAsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY2VudGVyIG9mIHRoZXNlIHR3byBwb2ludHMgaW4gdGhlIHZpZXdwb3J0IGFuZCB1c2VcbiAgICAgKiB0aGUgaGlnaGVzdCB6b29tIGxldmVsIHVwIHRvIGFuZCBpbmNsdWRpbmcgYE1hcCNnZXRNYXhab29tKClgIHRoYXQgZml0c1xuICAgICAqIHRoZSBwb2ludHMgaW4gdGhlIHZpZXdwb3J0IGF0IHRoZSBzcGVjaWZpZWQgYmVhcmluZy5cbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gcDAgRmlyc3QgcG9pbnRcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IHAxIFNlY29uZCBwb2ludFxuICAgICAqIEBwYXJhbSBiZWFyaW5nIERlc2lyZWQgbWFwIGJlYXJpbmcgYXQgZW5kIG9mIGFuaW1hdGlvbiwgaW4gZGVncmVlc1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBQYWRkaW5nT3B0aW9uc30gW29wdGlvbnMucGFkZGluZ10gVGhlIGFtb3VudCBvZiBwYWRkaW5nIGluIHBpeGVscyB0byBhZGQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0PVswLCAwXV0gVGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gYm91bmRzIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBjZW50ZXIsIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbV0gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBhbGxvdyB3aGVuIHRoZSBjYW1lcmEgd291bGQgdHJhbnNpdGlvbiB0byB0aGUgc3BlY2lmaWVkIGJvdW5kcy5cbiAgICAgKiBAcmV0dXJucyB7Q2FtZXJhT3B0aW9ucyB8IHZvaWR9IElmIG1hcCBpcyBhYmxlIHRvIGZpdCB0byBwcm92aWRlZCBib3VuZHMsIHJldHVybnMgYENhbWVyYU9wdGlvbnNgIHdpdGhcbiAgICAgKiAgICAgIGBjZW50ZXJgLCBgem9vbWAsIGFuZCBgYmVhcmluZ2AuIElmIG1hcCBpcyB1bmFibGUgdG8gZml0LCBtZXRob2Qgd2lsbCB3YXJuIGFuZCByZXR1cm4gdW5kZWZpbmVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgcDAgPSBbLTc5LCA0M107XG4gICAgICogdmFyIHAxID0gWy03MywgNDVdO1xuICAgICAqIHZhciBiZWFyaW5nID0gOTA7XG4gICAgICogdmFyIG5ld0NhbWVyYVRyYW5zZm9ybSA9IG1hcC5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyhwMCwgcDEsIGJlYXJpbmcsIHtcbiAgICAgKiAgIHBhZGRpbmc6IHt0b3A6IDEwLCBib3R0b206MjUsIGxlZnQ6IDE1LCByaWdodDogNX1cbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBfY2FtZXJhRm9yQm94QW5kQmVhcmluZyhwMDogTG5nTGF0TGlrZSwgcDE6IExuZ0xhdExpa2UsIGJlYXJpbmc6IG51bWJlciwgb3B0aW9ucz86IENhbWVyYU9wdGlvbnMpOiB2b2lkIHwgQ2FtZXJhT3B0aW9ucyAmIEFuaW1hdGlvbk9wdGlvbnMge1xuICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHtcbiAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICAgIGxlZnQ6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvZmZzZXQ6IFswLCAwXSxcbiAgICAgICAgICAgIG1heFpvb206IHRoaXMudHJhbnNmb3JtLm1heFpvb21cbiAgICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnBhZGRpbmcgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gb3B0aW9ucy5wYWRkaW5nO1xuICAgICAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0ge1xuICAgICAgICAgICAgICAgIHRvcDogcCxcbiAgICAgICAgICAgICAgICBib3R0b206IHAsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IHAsXG4gICAgICAgICAgICAgICAgbGVmdDogcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlZXBFcXVhbChPYmplY3Qua2V5cyhvcHRpb25zLnBhZGRpbmcpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KSwgW1wiYm90dG9tXCIsIFwibGVmdFwiLCBcInJpZ2h0XCIsIFwidG9wXCJdKSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICAgXCJvcHRpb25zLnBhZGRpbmcgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgb3IgYW4gT2JqZWN0IHdpdGgga2V5cyAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnLCAndG9wJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLnRyYW5zZm9ybTtcblxuICAgICAgICAvLyBXZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgdXBwZXIgcmlnaHQgYW5kIGxvd2VyIGxlZnQgb2YgdGhlIGJveCBkZWZpbmVkIGJ5IHAwIGFuZCBwMVxuICAgICAgICAvLyBpbiBhIGNvb3JkaW5hdGUgc3lzdGVtIHJvdGF0ZSB0byBtYXRjaCB0aGUgZGVzdGluYXRpb24gYmVhcmluZy5cbiAgICAgICAgY29uc3QgcDB3b3JsZCA9IHRyLnByb2plY3QoTG5nTGF0LmNvbnZlcnQocDApKTtcbiAgICAgICAgY29uc3QgcDF3b3JsZCA9IHRyLnByb2plY3QoTG5nTGF0LmNvbnZlcnQocDEpKTtcbiAgICAgICAgY29uc3QgcDByb3RhdGVkID0gcDB3b3JsZC5yb3RhdGUoLWJlYXJpbmcgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgY29uc3QgcDFyb3RhdGVkID0gcDF3b3JsZC5yb3RhdGUoLWJlYXJpbmcgKiBNYXRoLlBJIC8gMTgwKTtcblxuICAgICAgICBjb25zdCB1cHBlclJpZ2h0ID0gbmV3IFBvaW50KE1hdGgubWF4KHAwcm90YXRlZC54LCBwMXJvdGF0ZWQueCksIE1hdGgubWF4KHAwcm90YXRlZC55LCBwMXJvdGF0ZWQueSkpO1xuICAgICAgICBjb25zdCBsb3dlckxlZnQgPSBuZXcgUG9pbnQoTWF0aC5taW4ocDByb3RhdGVkLngsIHAxcm90YXRlZC54KSwgTWF0aC5taW4ocDByb3RhdGVkLnksIHAxcm90YXRlZC55KSk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHpvb206IGNvbnNpZGVyIHRoZSBvcmlnaW5hbCBiYm94IGFuZCBwYWRkaW5nLlxuICAgICAgICBjb25zdCBzaXplID0gdXBwZXJSaWdodC5zdWIobG93ZXJMZWZ0KTtcbiAgICAgICAgY29uc3Qgc2NhbGVYID0gKHRyLndpZHRoIC0gb3B0aW9ucy5wYWRkaW5nLmxlZnQgLSBvcHRpb25zLnBhZGRpbmcucmlnaHQpIC8gc2l6ZS54O1xuICAgICAgICBjb25zdCBzY2FsZVkgPSAodHIuaGVpZ2h0IC0gb3B0aW9ucy5wYWRkaW5nLnRvcCAtIG9wdGlvbnMucGFkZGluZy5ib3R0b20pIC8gc2l6ZS55O1xuXG4gICAgICAgIGlmIChzY2FsZVkgPCAwIHx8IHNjYWxlWCA8IDApIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgICdNYXAgY2Fubm90IGZpdCB3aXRoaW4gY2FudmFzIHdpdGggdGhlIGdpdmVuIGJvdW5kcywgcGFkZGluZywgYW5kL29yIG9mZnNldC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgem9vbSA9IE1hdGgubWluKHRyLnNjYWxlWm9vbSh0ci5zY2FsZSAqIE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKSksIG9wdGlvbnMubWF4Wm9vbSk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIGNlbnRlcjogYXBwbHkgdGhlIHpvb20sIHRoZSBjb25maWd1cmVkIG9mZnNldCwgYXMgd2VsbCBhcyBvZmZzZXQgdGhhdCBleGlzdHMgYXMgYSByZXN1bHQgb2YgcGFkZGluZy5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gUG9pbnQuY29udmVydChvcHRpb25zLm9mZnNldCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdPZmZzZXRYID0gKG9wdGlvbnMucGFkZGluZy5sZWZ0IC0gb3B0aW9ucy5wYWRkaW5nLnJpZ2h0KSAvIDI7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdPZmZzZXRZID0gKG9wdGlvbnMucGFkZGluZy50b3AgLSBvcHRpb25zLnBhZGRpbmcuYm90dG9tKSAvIDI7XG4gICAgICAgIGNvbnN0IG9mZnNldEF0SW5pdGlhbFpvb20gPSBuZXcgUG9pbnQob2Zmc2V0LnggKyBwYWRkaW5nT2Zmc2V0WCwgb2Zmc2V0LnkgKyBwYWRkaW5nT2Zmc2V0WSk7XG4gICAgICAgIGNvbnN0IG9mZnNldEF0RmluYWxab29tID0gb2Zmc2V0QXRJbml0aWFsWm9vbS5tdWx0KHRyLnNjYWxlIC8gdHIuem9vbVNjYWxlKHpvb20pKTtcblxuICAgICAgICBjb25zdCBjZW50ZXIgPSAgdHIudW5wcm9qZWN0KHAwd29ybGQuYWRkKHAxd29ybGQpLmRpdigyKS5zdWIob2Zmc2V0QXRGaW5hbFpvb20pKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2VudGVyLFxuICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgIGJlYXJpbmdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYW5zIGFuZCB6b29tcyB0aGUgbWFwIHRvIGNvbnRhaW4gaXRzIHZpc2libGUgYXJlYSB3aXRoaW4gdGhlIHNwZWNpZmllZCBnZW9ncmFwaGljYWwgYm91bmRzLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIHJlc2V0IHRoZSBtYXAncyBiZWFyaW5nIHRvIDAgaWYgYmVhcmluZyBpcyBub256ZXJvLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gYm91bmRzIENlbnRlciB0aGVzZSBib3VuZHMgaW4gdGhlIHZpZXdwb3J0IGFuZCB1c2UgdGhlIGhpZ2hlc3RcbiAgICAgKiAgICAgIHpvb20gbGV2ZWwgdXAgdG8gYW5kIGluY2x1ZGluZyBgTWFwI2dldE1heFpvb20oKWAgdGhhdCBmaXRzIHRoZW0gaW4gdGhlIHZpZXdwb3J0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBzdXBwb3J0cyBhbGwgcHJvcGVydGllcyBmcm9tIHtAbGluayBBbmltYXRpb25PcHRpb25zfSBhbmQge0BsaW5rIENhbWVyYU9wdGlvbnN9IGluIGFkZGl0aW9uIHRvIHRoZSBmaWVsZHMgYmVsb3cuXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBQYWRkaW5nT3B0aW9uc30gW29wdGlvbnMucGFkZGluZ10gVGhlIGFtb3VudCBvZiBwYWRkaW5nIGluIHBpeGVscyB0byBhZGQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxpbmVhcj1mYWxzZV0gSWYgYHRydWVgLCB0aGUgbWFwIHRyYW5zaXRpb25zIHVzaW5nXG4gICAgICogICAgIHtAbGluayBNYXAjZWFzZVRvfS4gSWYgYGZhbHNlYCwgdGhlIG1hcCB0cmFuc2l0aW9ucyB1c2luZyB7QGxpbmsgTWFwI2ZseVRvfS4gU2VlXG4gICAgICogICAgIHRob3NlIGZ1bmN0aW9ucyBhbmQge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9IGZvciBpbmZvcm1hdGlvbiBhYm91dCBvcHRpb25zIGF2YWlsYWJsZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5lYXNpbmddIEFuIGVhc2luZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGVkIHRyYW5zaXRpb24uIFNlZSB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30uXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IFtvcHRpb25zLm9mZnNldD1bMCwgMF1dIFRoZSBjZW50ZXIgb2YgdGhlIGdpdmVuIGJvdW5kcyByZWxhdGl2ZSB0byB0aGUgbWFwJ3MgY2VudGVyLCBtZWFzdXJlZCBpbiBwaXhlbHMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFpvb21dIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gYWxsb3cgd2hlbiB0aGUgbWFwIHZpZXcgdHJhbnNpdGlvbnMgdG8gdGhlIHNwZWNpZmllZCBib3VuZHMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtldmVudERhdGFdIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG5cdCAqIEBleGFtcGxlXG4gICAgICogdmFyIGJib3ggPSBbWy03OSwgNDNdLCBbLTczLCA0NV1dO1xuICAgICAqIG1hcC5maXRCb3VuZHMoYmJveCwge1xuICAgICAqICAgcGFkZGluZzoge3RvcDogMTAsIGJvdHRvbToyNSwgbGVmdDogMTUsIHJpZ2h0OiA1fVxuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW0ZpdCBhIG1hcCB0byBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maXRib3VuZHMvKVxuICAgICAqL1xuICAgIGZpdEJvdW5kcyhib3VuZHM6IExuZ0xhdEJvdW5kc0xpa2UsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zICYgQ2FtZXJhT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maXRJbnRlcm5hbChcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhRm9yQm91bmRzKGJvdW5kcywgb3B0aW9ucyksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYW5zLCByb3RhdGVzIGFuZCB6b29tcyB0aGUgbWFwIHRvIHRvIGZpdCB0aGUgYm94IG1hZGUgYnkgcG9pbnRzIHAwIGFuZCBwMVxuICAgICAqIG9uY2UgdGhlIG1hcCBpcyByb3RhdGVkIHRvIHRoZSBzcGVjaWZpZWQgYmVhcmluZy4gVG8gem9vbSB3aXRob3V0IHJvdGF0aW5nLFxuICAgICAqIHBhc3MgaW4gdGhlIGN1cnJlbnQgbWFwIGJlYXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBwMCBGaXJzdCBwb2ludCBvbiBzY3JlZW4sIGluIHBpeGVsIGNvb3JkaW5hdGVzXG4gICAgICogQHBhcmFtIHAxIFNlY29uZCBwb2ludCBvbiBzY3JlZW4sIGluIHBpeGVsIGNvb3JkaW5hdGVzXG4gICAgICogQHBhcmFtIGJlYXJpbmcgRGVzaXJlZCBtYXAgYmVhcmluZyBhdCBlbmQgb2YgYW5pbWF0aW9uLCBpbiBkZWdyZWVzXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IFBhZGRpbmdPcHRpb25zfSBbb3B0aW9ucy5wYWRkaW5nXSBUaGUgYW1vdW50IG9mIHBhZGRpbmcgaW4gcGl4ZWxzIHRvIGFkZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGluZWFyPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBtYXAgdHJhbnNpdGlvbnMgdXNpbmdcbiAgICAgKiAgICAge0BsaW5rIE1hcCNlYXNlVG99LiBJZiBgZmFsc2VgLCB0aGUgbWFwIHRyYW5zaXRpb25zIHVzaW5nIHtAbGluayBNYXAjZmx5VG99LiBTZWVcbiAgICAgKiAgICAgdGhvc2UgZnVuY3Rpb25zIGFuZCB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30gZm9yIGluZm9ybWF0aW9uIGFib3V0IG9wdGlvbnMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmVhc2luZ10gQW4gZWFzaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0ZWQgdHJhbnNpdGlvbi4gU2VlIHtAbGluayBBbmltYXRpb25PcHRpb25zfS5cbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0PVswLCAwXV0gVGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gYm91bmRzIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBjZW50ZXIsIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbV0gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBhbGxvdyB3aGVuIHRoZSBtYXAgdmlldyB0cmFuc2l0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG5cdCAqIEBleGFtcGxlXG4gICAgICogdmFyIHAwID0gWzIyMCwgNDAwXTtcbiAgICAgKiB2YXIgcDEgPSBbNTAwLCA5MDBdO1xuICAgICAqIG1hcC5maXRTY3JlZW5Db29yZGluYXRlcyhwMCwgcDEsIG1hcC5nZXRCZWFyaW5nKCksIHtcbiAgICAgKiAgIHBhZGRpbmc6IHt0b3A6IDEwLCBib3R0b206MjUsIGxlZnQ6IDE1LCByaWdodDogNX1cbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtVc2VkIGJ5IEJveFpvb21IYW5kbGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9hcGkvI2JveHpvb21oYW5kbGVyKVxuICAgICAqL1xuICAgIGZpdFNjcmVlbkNvb3JkaW5hdGVzKHAwOiBQb2ludExpa2UsIHAxOiBQb2ludExpa2UsIGJlYXJpbmc6IG51bWJlciwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMgJiBDYW1lcmFPcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKFxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyhcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKFBvaW50LmNvbnZlcnQocDApKSxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKFBvaW50LmNvbnZlcnQocDEpKSxcbiAgICAgICAgICAgICAgICBiZWFyaW5nLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMpLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgX2ZpdEludGVybmFsKGNhbGN1bGF0ZWRPcHRpb25zPzogQ2FtZXJhT3B0aW9ucyAmIEFuaW1hdGlvbk9wdGlvbnMsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zICYgQ2FtZXJhT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIC8vIGNhbWVyYUZvckJvdW5kcyB3YXJucyArIHJldHVybnMgdW5kZWZpbmVkIGlmIHVuYWJsZSB0byBmaXQ6XG4gICAgICAgIGlmICghY2FsY3VsYXRlZE9wdGlvbnMpIHJldHVybiB0aGlzO1xuXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoY2FsY3VsYXRlZE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zLmxpbmVhciA/XG4gICAgICAgICAgICB0aGlzLmVhc2VUbyhvcHRpb25zLCBldmVudERhdGEpIDpcbiAgICAgICAgICAgIHRoaXMuZmx5VG8ob3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFueSBjb21iaW5hdGlvbiBvZiBjZW50ZXIsIHpvb20sIGJlYXJpbmcsIGFuZCBwaXRjaCwgd2l0aG91dFxuICAgICAqIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uIFRoZSBtYXAgd2lsbCByZXRhaW4gaXRzIGN1cnJlbnQgdmFsdWVzIGZvciBhbnlcbiAgICAgKiBkZXRhaWxzIG5vdCBzcGVjaWZpZWQgaW4gYG9wdGlvbnNgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBwaXRjaHN0YXJ0XG4gICAgICogQGZpcmVzIHJvdGF0ZVxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgcGl0Y2hcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQGZpcmVzIHBpdGNoZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAganVtcFRvKG9wdGlvbnM6IENhbWVyYU9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBsZXQgem9vbUNoYW5nZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGJlYXJpbmdDaGFuZ2VkID0gZmFsc2UsXG4gICAgICAgICAgICBwaXRjaENoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoJ3pvb20nIGluIG9wdGlvbnMgJiYgdHIuem9vbSAhPT0gK29wdGlvbnMuem9vbSkge1xuICAgICAgICAgICAgem9vbUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgdHIuem9vbSA9ICtvcHRpb25zLnpvb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jZW50ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHIuY2VudGVyID0gTG5nTGF0LmNvbnZlcnQob3B0aW9ucy5jZW50ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdiZWFyaW5nJyBpbiBvcHRpb25zICYmIHRyLmJlYXJpbmcgIT09ICtvcHRpb25zLmJlYXJpbmcpIHtcbiAgICAgICAgICAgIGJlYXJpbmdDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyLmJlYXJpbmcgPSArb3B0aW9ucy5iZWFyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwaXRjaCcgaW4gb3B0aW9ucyAmJiB0ci5waXRjaCAhPT0gK29wdGlvbnMucGl0Y2gpIHtcbiAgICAgICAgICAgIHBpdGNoQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB0ci5waXRjaCA9ICtvcHRpb25zLnBpdGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZXN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnbW92ZScsIGV2ZW50RGF0YSkpO1xuXG4gICAgICAgIGlmICh6b29tQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnem9vbXN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3pvb20nLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnem9vbWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJlYXJpbmdDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVzdGFydCcsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdyb3RhdGUnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgncm90YXRlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGl0Y2hDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdwaXRjaHN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3BpdGNoJywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3BpdGNoZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYW55IGNvbWJpbmF0aW9uIG9mIGNlbnRlciwgem9vbSwgYmVhcmluZywgYW5kIHBpdGNoLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb25cbiAgICAgKiBiZXR3ZWVuIG9sZCBhbmQgbmV3IHZhbHVlcy4gVGhlIG1hcCB3aWxsIHJldGFpbiBpdHMgY3VycmVudCB2YWx1ZXMgZm9yIGFueVxuICAgICAqIGRldGFpbHMgbm90IHNwZWNpZmllZCBpbiBgb3B0aW9uc2AuXG4gICAgICpcbiAgICAgKiBOb3RlOiBUaGUgdHJhbnNpdGlvbiB3aWxsIGhhcHBlbiBpbnN0YW50bHkgaWYgdGhlIHVzZXIgaGFzIGVuYWJsZWRcbiAgICAgKiB0aGUgYHJlZHVjZWQgbW90aW9uYCBhY2Nlc2liaWxpdHkgZmVhdHVyZSBlbmFibGVkIGluIHRoZWlyIG9wZXJhdGluZyBzeXN0ZW0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZGVzY3JpYmluZyB0aGUgZGVzdGluYXRpb24gYW5kIGFuaW1hdGlvbiBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgKiAgICAgICAgICAgIEFjY2VwdHMge0BsaW5rIENhbWVyYU9wdGlvbnN9IGFuZCB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30uXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIHBpdGNoc3RhcnRcbiAgICAgKiBAZmlyZXMgcm90YXRlXG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBwaXRjaFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAZmlyZXMgcGl0Y2hlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAc2VlIFtOYXZpZ2F0ZSB0aGUgbWFwIHdpdGggZ2FtZS1saWtlIGNvbnRyb2xzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dhbWUtY29udHJvbHMvKVxuICAgICAqL1xuICAgIGVhc2VUbyhvcHRpb25zOiBDYW1lcmFPcHRpb25zICYgQW5pbWF0aW9uT3B0aW9ucyAmIHtkZWxheUVuZEV2ZW50cz86IG51bWJlcn0sIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHtcbiAgICAgICAgICAgIG9mZnNldDogWzAsIDBdLFxuICAgICAgICAgICAgZHVyYXRpb246IDUwMCxcbiAgICAgICAgICAgIGVhc2luZzogZGVmYXVsdEVhc2luZ1xuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5hbmltYXRlID09PSBmYWxzZSB8fCBicm93c2VyLnByZWZlcnNSZWR1Y2VkTW90aW9uKSBvcHRpb25zLmR1cmF0aW9uID0gMDtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtLFxuICAgICAgICAgICAgc3RhcnRab29tID0gdGhpcy5nZXRab29tKCksXG4gICAgICAgICAgICBzdGFydEJlYXJpbmcgPSB0aGlzLmdldEJlYXJpbmcoKSxcbiAgICAgICAgICAgIHN0YXJ0UGl0Y2ggPSB0aGlzLmdldFBpdGNoKCksXG5cbiAgICAgICAgICAgIHpvb20gPSAnem9vbScgaW4gb3B0aW9ucyA/ICtvcHRpb25zLnpvb20gOiBzdGFydFpvb20sXG4gICAgICAgICAgICBiZWFyaW5nID0gJ2JlYXJpbmcnIGluIG9wdGlvbnMgPyB0aGlzLl9ub3JtYWxpemVCZWFyaW5nKG9wdGlvbnMuYmVhcmluZywgc3RhcnRCZWFyaW5nKSA6IHN0YXJ0QmVhcmluZyxcbiAgICAgICAgICAgIHBpdGNoID0gJ3BpdGNoJyBpbiBvcHRpb25zID8gK29wdGlvbnMucGl0Y2ggOiBzdGFydFBpdGNoO1xuXG4gICAgICAgIGNvbnN0IHBvaW50QXRPZmZzZXQgPSB0ci5jZW50ZXJQb2ludC5hZGQoUG9pbnQuY29udmVydChvcHRpb25zLm9mZnNldCkpO1xuICAgICAgICBjb25zdCBsb2NhdGlvbkF0T2Zmc2V0ID0gdHIucG9pbnRMb2NhdGlvbihwb2ludEF0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgY2VudGVyID0gTG5nTGF0LmNvbnZlcnQob3B0aW9ucy5jZW50ZXIgfHwgbG9jYXRpb25BdE9mZnNldCk7XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZUNlbnRlcihjZW50ZXIpO1xuXG4gICAgICAgIGNvbnN0IGZyb20gPSB0ci5wcm9qZWN0KGxvY2F0aW9uQXRPZmZzZXQpO1xuICAgICAgICBjb25zdCBkZWx0YSA9IHRyLnByb2plY3QoY2VudGVyKS5zdWIoZnJvbSk7XG4gICAgICAgIGNvbnN0IGZpbmFsU2NhbGUgPSB0ci56b29tU2NhbGUoem9vbSAtIHN0YXJ0Wm9vbSk7XG5cbiAgICAgICAgbGV0IGFyb3VuZCwgYXJvdW5kUG9pbnQ7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYXJvdW5kKSB7XG4gICAgICAgICAgICBhcm91bmQgPSBMbmdMYXQuY29udmVydChvcHRpb25zLmFyb3VuZCk7XG4gICAgICAgICAgICBhcm91bmRQb2ludCA9IHRyLmxvY2F0aW9uUG9pbnQoYXJvdW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3pvb21pbmcgPSAoem9vbSAhPT0gc3RhcnRab29tKTtcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSAoc3RhcnRCZWFyaW5nICE9PSBiZWFyaW5nKTtcbiAgICAgICAgdGhpcy5fcGl0Y2hpbmcgPSAocGl0Y2ggIT09IHN0YXJ0UGl0Y2gpO1xuXG4gICAgICAgIHRoaXMuX3ByZXBhcmVFYXNlKGV2ZW50RGF0YSwgb3B0aW9ucy5ub01vdmVTdGFydCk7XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Vhc2VFbmRUaW1lb3V0SUQpO1xuXG4gICAgICAgIHRoaXMuX2Vhc2UoKGspID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl96b29taW5nKSB7XG4gICAgICAgICAgICAgICAgdHIuem9vbSA9IGludGVycG9sYXRlKHN0YXJ0Wm9vbSwgem9vbSwgayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcbiAgICAgICAgICAgICAgICB0ci5iZWFyaW5nID0gaW50ZXJwb2xhdGUoc3RhcnRCZWFyaW5nLCBiZWFyaW5nLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9waXRjaGluZykge1xuICAgICAgICAgICAgICAgIHRyLnBpdGNoID0gaW50ZXJwb2xhdGUoc3RhcnRQaXRjaCwgcGl0Y2gsIGspO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXJvdW5kKSB7XG4gICAgICAgICAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KGFyb3VuZCwgYXJvdW5kUG9pbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2FsZSA9IHRyLnpvb21TY2FsZSh0ci56b29tIC0gc3RhcnRab29tKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gem9vbSA+IHN0YXJ0Wm9vbSA/XG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKDIsIGZpbmFsU2NhbGUpIDpcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoMC41LCBmaW5hbFNjYWxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGVlZHVwID0gTWF0aC5wb3coYmFzZSwgMSAtIGspO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IHRyLnVucHJvamVjdChmcm9tLmFkZChkZWx0YS5tdWx0KGsgKiBzcGVlZHVwKSkubXVsdChzY2FsZSkpO1xuICAgICAgICAgICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0ci5yZW5kZXJXb3JsZENvcGllcyA/IG5ld0NlbnRlci53cmFwKCkgOiBuZXdDZW50ZXIsIHBvaW50QXRPZmZzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9maXJlTW92ZUV2ZW50cyhldmVudERhdGEpO1xuXG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmRlbGF5RW5kRXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWFzZUVuZFRpbWVvdXRJRCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fYWZ0ZXJFYXNlKGV2ZW50RGF0YSksIG9wdGlvbnMuZGVsYXlFbmRFdmVudHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZnRlckVhc2UoZXZlbnREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3ByZXBhcmVFYXNlKGV2ZW50RGF0YT86IE9iamVjdCwgbm9Nb3ZlU3RhcnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fbW92aW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIW5vTW92ZVN0YXJ0KSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3Zlc3RhcnQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fem9vbWluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnem9vbXN0YXJ0JywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVzdGFydCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9waXRjaGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncGl0Y2hzdGFydCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2ZpcmVNb3ZlRXZlbnRzKGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3ZlJywgZXZlbnREYXRhKSk7XG4gICAgICAgIGlmICh0aGlzLl96b29taW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyb3RhdGUnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcGl0Y2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3BpdGNoJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWZ0ZXJFYXNlKGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICBjb25zdCB3YXNab29taW5nID0gdGhpcy5fem9vbWluZztcbiAgICAgICAgY29uc3Qgd2FzUm90YXRpbmcgPSB0aGlzLl9yb3RhdGluZztcbiAgICAgICAgY29uc3Qgd2FzUGl0Y2hpbmcgPSB0aGlzLl9waXRjaGluZztcbiAgICAgICAgdGhpcy5fbW92aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3pvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGl0Y2hpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAod2FzWm9vbWluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnem9vbWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3YXNSb3RhdGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncm90YXRlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhc1BpdGNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdwaXRjaGVuZCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmVlbmQnLCBldmVudERhdGEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFueSBjb21iaW5hdGlvbiBvZiBjZW50ZXIsIHpvb20sIGJlYXJpbmcsIGFuZCBwaXRjaCwgYW5pbWF0aW5nIHRoZSB0cmFuc2l0aW9uIGFsb25nIGEgY3VydmUgdGhhdFxuICAgICAqIGV2b2tlcyBmbGlnaHQuIFRoZSBhbmltYXRpb24gc2VhbWxlc3NseSBpbmNvcnBvcmF0ZXMgem9vbWluZyBhbmQgcGFubmluZyB0byBoZWxwXG4gICAgICogdGhlIHVzZXIgbWFpbnRhaW4gaGVyIGJlYXJpbmdzIGV2ZW4gYWZ0ZXIgdHJhdmVyc2luZyBhIGdyZWF0IGRpc3RhbmNlLlxuICAgICAqXG4gICAgICogTm90ZTogVGhlIGFuaW1hdGlvbiB3aWxsIGJlIHNraXBwZWQsIGFuZCB0aGlzIHdpbGwgYmVoYXZlIGVxdWl2YWxlbnRseSB0byBganVtcFRvYFxuICAgICAqIGlmIHRoZSB1c2VyIGhhcyB0aGUgYHJlZHVjZWQgbW90aW9uYCBhY2Nlc2liaWxpdHkgZmVhdHVyZSBlbmFibGVkIGluIHRoZWlyIG9wZXJhdGluZyBzeXN0ZW0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgZGVzY3JpYmluZyB0aGUgZGVzdGluYXRpb24gYW5kIGFuaW1hdGlvbiBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgKiAgICAgQWNjZXB0cyB7QGxpbmsgQ2FtZXJhT3B0aW9uc30sIHtAbGluayBBbmltYXRpb25PcHRpb25zfSxcbiAgICAgKiAgICAgYW5kIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5jdXJ2ZT0xLjQyXSBUaGUgem9vbWluZyBcImN1cnZlXCIgdGhhdCB3aWxsIG9jY3VyIGFsb25nIHRoZVxuICAgICAqICAgICBmbGlnaHQgcGF0aC4gQSBoaWdoIHZhbHVlIG1heGltaXplcyB6b29taW5nIGZvciBhbiBleGFnZ2VyYXRlZCBhbmltYXRpb24sIHdoaWxlIGEgbG93XG4gICAgICogICAgIHZhbHVlIG1pbmltaXplcyB6b29taW5nIGZvciBhbiBlZmZlY3QgY2xvc2VyIHRvIHtAbGluayBNYXAjZWFzZVRvfS4gMS40MiBpcyB0aGUgYXZlcmFnZVxuICAgICAqICAgICB2YWx1ZSBzZWxlY3RlZCBieSBwYXJ0aWNpcGFudHMgaW4gdGhlIHVzZXIgc3R1ZHkgZGlzY3Vzc2VkIGluXG4gICAgICogICAgIFt2YW4gV2lqayAoMjAwMyldKGh0dHBzOi8vd3d3Lndpbi50dWUubmwvfnZhbndpamsvem9vbXBhbi5wZGYpLiBBIHZhbHVlIG9mXG4gICAgICogICAgIGBNYXRoLnBvdyg2LCAwLjI1KWAgd291bGQgYmUgZXF1aXZhbGVudCB0byB0aGUgcm9vdCBtZWFuIHNxdWFyZWQgYXZlcmFnZSB2ZWxvY2l0eS4gQVxuICAgICAqICAgICB2YWx1ZSBvZiAxIHdvdWxkIHByb2R1Y2UgYSBjaXJjdWxhciBtb3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pblpvb21dIFRoZSB6ZXJvLWJhc2VkIHpvb20gbGV2ZWwgYXQgdGhlIHBlYWsgb2YgdGhlIGZsaWdodCBwYXRoLiBJZlxuICAgICAqICAgICBgb3B0aW9ucy5jdXJ2ZWAgaXMgc3BlY2lmaWVkLCB0aGlzIG9wdGlvbiBpcyBpZ25vcmVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zcGVlZD0xLjJdIFRoZSBhdmVyYWdlIHNwZWVkIG9mIHRoZSBhbmltYXRpb24gZGVmaW5lZCBpbiByZWxhdGlvbiB0b1xuICAgICAqICAgICBgb3B0aW9ucy5jdXJ2ZWAuIEEgc3BlZWQgb2YgMS4yIG1lYW5zIHRoYXQgdGhlIG1hcCBhcHBlYXJzIHRvIG1vdmUgYWxvbmcgdGhlIGZsaWdodCBwYXRoXG4gICAgICogICAgIGJ5IDEuMiB0aW1lcyBgb3B0aW9ucy5jdXJ2ZWAgc2NyZWVuZnVscyBldmVyeSBzZWNvbmQuIEEgX3NjcmVlbmZ1bF8gaXMgdGhlIG1hcCdzIHZpc2libGUgc3Bhbi5cbiAgICAgKiAgICAgSXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGZpeGVkIHBoeXNpY2FsIGRpc3RhbmNlLCBidXQgdmFyaWVzIGJ5IHpvb20gbGV2ZWwuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNjcmVlblNwZWVkXSBUaGUgYXZlcmFnZSBzcGVlZCBvZiB0aGUgYW5pbWF0aW9uIG1lYXN1cmVkIGluIHNjcmVlbmZ1bHNcbiAgICAgKiAgICAgcGVyIHNlY29uZCwgYXNzdW1pbmcgYSBsaW5lYXIgdGltaW5nIGN1cnZlLiBJZiBgb3B0aW9ucy5zcGVlZGAgaXMgc3BlY2lmaWVkLCB0aGlzIG9wdGlvbiBpcyBpZ25vcmVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhEdXJhdGlvbl0gVGhlIGFuaW1hdGlvbidzIG1heGltdW0gZHVyYXRpb24sIG1lYXN1cmVkIGluIG1pbGxpc2Vjb25kcy5cbiAgICAgKiAgICAgSWYgZHVyYXRpb24gZXhjZWVkcyBtYXhpbXVtIGR1cmF0aW9uLCBpdCByZXNldHMgdG8gMC5cbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgcGl0Y2hzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgcm90YXRlXG4gICAgICogQGZpcmVzIHBpdGNoXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEBmaXJlcyBwaXRjaGVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gZmx5IHdpdGggZGVmYXVsdCBvcHRpb25zIHRvIG51bGwgaXNsYW5kXG4gICAgICogbWFwLmZseVRvKHtjZW50ZXI6IFswLCAwXSwgem9vbTogOX0pO1xuICAgICAqIC8vIHVzaW5nIGZseVRvIG9wdGlvbnNcbiAgICAgKiBtYXAuZmx5VG8oe1xuICAgICAqICAgY2VudGVyOiBbMCwgMF0sXG4gICAgICogICB6b29tOiA5LFxuICAgICAqICAgc3BlZWQ6IDAuMixcbiAgICAgKiAgIGN1cnZlOiAxLFxuICAgICAqICAgZWFzaW5nKHQpIHtcbiAgICAgKiAgICAgcmV0dXJuIHQ7XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbRmx5IHRvIGEgbG9jYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmx5dG8vKVxuICAgICAqIEBzZWUgW1Nsb3dseSBmbHkgdG8gYSBsb2NhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9mbHl0by1vcHRpb25zLylcbiAgICAgKiBAc2VlIFtGbHkgdG8gYSBsb2NhdGlvbiBiYXNlZCBvbiBzY3JvbGwgcG9zaXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvc2Nyb2xsLWZseS10by8pXG4gICAgICovXG4gICAgZmx5VG8ob3B0aW9uczogT2JqZWN0LCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGp1bXBUbyBpZiB1c2VyIGhhcyBzZXQgcHJlZmVycy1yZWR1Y2VkLW1vdGlvblxuICAgICAgICBpZiAoYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY29lcmNlZE9wdGlvbnMgPSAocGljayhvcHRpb25zLCBbJ2NlbnRlcicsICd6b29tJywgJ2JlYXJpbmcnLCAncGl0Y2gnLCAnYXJvdW5kJ10pOiBDYW1lcmFPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmp1bXBUbyhjb2VyY2VkT3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgbWV0aG9kIGltcGxlbWVudHMgYW4gw6LCgMKcb3B0aW1hbCBwYXRow6LCgMKdIGFuaW1hdGlvbiwgYXMgZGV0YWlsZWQgaW46XG4gICAgICAgIC8vXG4gICAgICAgIC8vIFZhbiBXaWprLCBKYXJrZSBKLjsgTnVpaiwgV2ltIEEuIEEuIMOiwoDCnFNtb290aCBhbmQgZWZmaWNpZW50IHpvb21pbmcgYW5kIHBhbm5pbmcuw6LCgMKdIElORk9WSVNcbiAgICAgICAgLy8gICDDosKAwpkwMy4gcHAuIDE1w6LCgMKTMjIuIDxodHRwczovL3d3dy53aW4udHVlLm5sL352YW53aWprL3pvb21wYW4ucGRmI3BhZ2U9NT4uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdoZXJlIGFwcGxpY2FibGUsIGxvY2FsIHZhcmlhYmxlIGRvY3VtZW50YXRpb24gYmVnaW5zIHdpdGggdGhlIGFzc29jaWF0ZWQgdmFyaWFibGUgb3JcbiAgICAgICAgLy8gZnVuY3Rpb24gaW4gdmFuIFdpamsgKDIwMDMpLlxuXG4gICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe1xuICAgICAgICAgICAgb2Zmc2V0OiBbMCwgMF0sXG4gICAgICAgICAgICBzcGVlZDogMS4yLFxuICAgICAgICAgICAgY3VydmU6IDEuNDIsXG4gICAgICAgICAgICBlYXNpbmc6IGRlZmF1bHRFYXNpbmdcbiAgICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgIHN0YXJ0Wm9vbSA9IHRoaXMuZ2V0Wm9vbSgpLFxuICAgICAgICAgICAgc3RhcnRCZWFyaW5nID0gdGhpcy5nZXRCZWFyaW5nKCksXG4gICAgICAgICAgICBzdGFydFBpdGNoID0gdGhpcy5nZXRQaXRjaCgpO1xuXG4gICAgICAgIGNvbnN0IHpvb20gPSAnem9vbScgaW4gb3B0aW9ucyA/IGNsYW1wKCtvcHRpb25zLnpvb20sIHRyLm1pblpvb20sIHRyLm1heFpvb20pIDogc3RhcnRab29tO1xuICAgICAgICBjb25zdCBiZWFyaW5nID0gJ2JlYXJpbmcnIGluIG9wdGlvbnMgPyB0aGlzLl9ub3JtYWxpemVCZWFyaW5nKG9wdGlvbnMuYmVhcmluZywgc3RhcnRCZWFyaW5nKSA6IHN0YXJ0QmVhcmluZztcbiAgICAgICAgY29uc3QgcGl0Y2ggPSAncGl0Y2gnIGluIG9wdGlvbnMgPyArb3B0aW9ucy5waXRjaCA6IHN0YXJ0UGl0Y2g7XG5cbiAgICAgICAgY29uc3Qgc2NhbGUgPSB0ci56b29tU2NhbGUoem9vbSAtIHN0YXJ0Wm9vbSk7XG4gICAgICAgIGNvbnN0IHBvaW50QXRPZmZzZXQgPSB0ci5jZW50ZXJQb2ludC5hZGQoUG9pbnQuY29udmVydChvcHRpb25zLm9mZnNldCkpO1xuICAgICAgICBjb25zdCBsb2NhdGlvbkF0T2Zmc2V0ID0gdHIucG9pbnRMb2NhdGlvbihwb2ludEF0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgY2VudGVyID0gTG5nTGF0LmNvbnZlcnQob3B0aW9ucy5jZW50ZXIgfHwgbG9jYXRpb25BdE9mZnNldCk7XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZUNlbnRlcihjZW50ZXIpO1xuXG4gICAgICAgIGNvbnN0IGZyb20gPSB0ci5wcm9qZWN0KGxvY2F0aW9uQXRPZmZzZXQpO1xuICAgICAgICBjb25zdCBkZWx0YSA9IHRyLnByb2plY3QoY2VudGVyKS5zdWIoZnJvbSk7XG5cbiAgICAgICAgbGV0IHJobyA9IG9wdGlvbnMuY3VydmU7XG5cbiAgICAgICAgLy8gd8OiwoLCgDogSW5pdGlhbCB2aXNpYmxlIHNwYW4sIG1lYXN1cmVkIGluIHBpeGVscyBhdCB0aGUgaW5pdGlhbCBzY2FsZS5cbiAgICAgICAgY29uc3QgdzAgPSBNYXRoLm1heCh0ci53aWR0aCwgdHIuaGVpZ2h0KSxcbiAgICAgICAgICAgIC8vIHfDosKCwoE6IEZpbmFsIHZpc2libGUgc3BhbiwgbWVhc3VyZWQgaW4gcGl4ZWxzIHdpdGggcmVzcGVjdCB0byB0aGUgaW5pdGlhbCBzY2FsZS5cbiAgICAgICAgICAgIHcxID0gdzAgLyBzY2FsZSxcbiAgICAgICAgICAgIC8vIExlbmd0aCBvZiB0aGUgZmxpZ2h0IHBhdGggYXMgcHJvamVjdGVkIG9udG8gdGhlIGdyb3VuZCBwbGFuZSwgbWVhc3VyZWQgaW4gcGl4ZWxzIGZyb21cbiAgICAgICAgICAgIC8vIHRoZSB3b3JsZCBpbWFnZSBvcmlnaW4gYXQgdGhlIGluaXRpYWwgc2NhbGUuXG4gICAgICAgICAgICB1MSA9IGRlbHRhLm1hZygpO1xuXG4gICAgICAgIGlmICgnbWluWm9vbScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgbWluWm9vbSA9IGNsYW1wKE1hdGgubWluKG9wdGlvbnMubWluWm9vbSwgc3RhcnRab29tLCB6b29tKSwgdHIubWluWm9vbSwgdHIubWF4Wm9vbSk7XG4gICAgICAgICAgICAvLyB3PHN1Yj5tPC9zdWI+OiBNYXhpbXVtIHZpc2libGUgc3BhbiwgbWVhc3VyZWQgaW4gcGl4ZWxzIHdpdGggcmVzcGVjdCB0byB0aGUgaW5pdGlhbFxuICAgICAgICAgICAgLy8gc2NhbGUuXG4gICAgICAgICAgICBjb25zdCB3TWF4ID0gdzAgLyB0ci56b29tU2NhbGUobWluWm9vbSAtIHN0YXJ0Wm9vbSk7XG4gICAgICAgICAgICByaG8gPSBNYXRoLnNxcnQod01heCAvIHUxICogMik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDDj8KBw4LCslxuICAgICAgICBjb25zdCByaG8yID0gcmhvICogcmhvO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByw6HCtcKiOiBSZXR1cm5zIHRoZSB6b29tLW91dCBmYWN0b3IgYXQgb25lIGVuZCBvZiB0aGUgYW5pbWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gaSAwIGZvciB0aGUgYXNjZW50IG9yIDEgZm9yIHRoZSBkZXNjZW50LlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gcihpKSB7XG4gICAgICAgICAgICBjb25zdCBiID0gKHcxICogdzEgLSB3MCAqIHcwICsgKGkgPyAtMSA6IDEpICogcmhvMiAqIHJobzIgKiB1MSAqIHUxKSAvICgyICogKGkgPyB3MSA6IHcwKSAqIHJobzIgKiB1MSk7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGIgKiBiICsgMSkgLSBiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNpbmgobikgeyByZXR1cm4gKE1hdGguZXhwKG4pIC0gTWF0aC5leHAoLW4pKSAvIDI7IH1cbiAgICAgICAgZnVuY3Rpb24gY29zaChuKSB7IHJldHVybiAoTWF0aC5leHAobikgKyBNYXRoLmV4cCgtbikpIC8gMjsgfVxuICAgICAgICBmdW5jdGlvbiB0YW5oKG4pIHsgcmV0dXJuIHNpbmgobikgLyBjb3NoKG4pOyB9XG5cbiAgICAgICAgLy8gcsOiwoLCgDogWm9vbS1vdXQgZmFjdG9yIGR1cmluZyBhc2NlbnQuXG4gICAgICAgIGNvbnN0IHIwID0gcigwKTtcblxuICAgICAgICAvLyB3KHMpOiBSZXR1cm5zIHRoZSB2aXNpYmxlIHNwYW4gb24gdGhlIGdyb3VuZCwgbWVhc3VyZWQgaW4gcGl4ZWxzIHdpdGggcmVzcGVjdCB0byB0aGVcbiAgICAgICAgLy8gaW5pdGlhbCBzY2FsZS4gQXNzdW1lcyBhbiBhbmd1bGFyIGZpZWxkIG9mIHZpZXcgb2YgMiBhcmN0YW4gw4LCvSDDosKJwoggNTPDgsKwLlxuICAgICAgICBsZXQgdzogKG51bWJlcikgPT4gbnVtYmVyID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIHJldHVybiAoY29zaChyMCkgLyBjb3NoKHIwICsgcmhvICogcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHUocyk6IFJldHVybnMgdGhlIGRpc3RhbmNlIGFsb25nIHRoZSBmbGlnaHQgcGF0aCBhcyBwcm9qZWN0ZWQgb250byB0aGUgZ3JvdW5kIHBsYW5lLFxuICAgICAgICAvLyBtZWFzdXJlZCBpbiBwaXhlbHMgZnJvbSB0aGUgd29ybGQgaW1hZ2Ugb3JpZ2luIGF0IHRoZSBpbml0aWFsIHNjYWxlLlxuICAgICAgICBsZXQgdTogKG51bWJlcikgPT4gbnVtYmVyID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIHJldHVybiB3MCAqICgoY29zaChyMCkgKiB0YW5oKHIwICsgcmhvICogcykgLSBzaW5oKHIwKSkgLyByaG8yKSAvIHUxO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFM6IFRvdGFsIGxlbmd0aCBvZiB0aGUgZmxpZ2h0IHBhdGgsIG1lYXN1cmVkIGluIMOPwoEtc2NyZWVuZnVscy5cbiAgICAgICAgbGV0IFMgPSAocigxKSAtIHIwKSAvIHJobztcblxuICAgICAgICAvLyBXaGVuIHXDosKCwoAgPSB1w6LCgsKBLCB0aGUgb3B0aW1hbCBwYXRoIGRvZXNuw6LCgMKZdCByZXF1aXJlIGJvdGggYXNjZW50IGFuZCBkZXNjZW50LlxuICAgICAgICBpZiAoTWF0aC5hYnModTEpIDwgMC4wMDAwMDEgfHwgIWlzRmluaXRlKFMpKSB7XG4gICAgICAgICAgICAvLyBQZXJmb3JtIGEgbW9yZSBvciBsZXNzIGluc3RhbnRhbmVvdXMgdHJhbnNpdGlvbiBpZiB0aGUgcGF0aCBpcyB0b28gc2hvcnQuXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModzAgLSB3MSkgPCAwLjAwMDAwMSkgcmV0dXJuIHRoaXMuZWFzZVRvKG9wdGlvbnMsIGV2ZW50RGF0YSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGsgPSB3MSA8IHcwID8gLTEgOiAxO1xuICAgICAgICAgICAgUyA9IE1hdGguYWJzKE1hdGgubG9nKHcxIC8gdzApKSAvIHJobztcblxuICAgICAgICAgICAgdSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiAgICAgICAgICAgIHcgPSBmdW5jdGlvbihzKSB7IHJldHVybiBNYXRoLmV4cChrICogcmhvICogcyk7IH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2R1cmF0aW9uJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmR1cmF0aW9uID0gK29wdGlvbnMuZHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBWID0gJ3NjcmVlblNwZWVkJyBpbiBvcHRpb25zID8gK29wdGlvbnMuc2NyZWVuU3BlZWQgLyByaG8gOiArb3B0aW9ucy5zcGVlZDtcbiAgICAgICAgICAgIG9wdGlvbnMuZHVyYXRpb24gPSAxMDAwICogUyAvIFY7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5tYXhEdXJhdGlvbiAmJiBvcHRpb25zLmR1cmF0aW9uID4gb3B0aW9ucy5tYXhEdXJhdGlvbikge1xuICAgICAgICAgICAgb3B0aW9ucy5kdXJhdGlvbiA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl96b29taW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSAoc3RhcnRCZWFyaW5nICE9PSBiZWFyaW5nKTtcbiAgICAgICAgdGhpcy5fcGl0Y2hpbmcgPSAocGl0Y2ggIT09IHN0YXJ0UGl0Y2gpO1xuXG4gICAgICAgIHRoaXMuX3ByZXBhcmVFYXNlKGV2ZW50RGF0YSwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuX2Vhc2UoKGspID0+IHtcbiAgICAgICAgICAgIC8vIHM6IFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBhbG9uZyB0aGUgZmxpZ2h0IHBhdGgsIG1lYXN1cmVkIGluIMOPwoEtc2NyZWVuZnVscy5cbiAgICAgICAgICAgIGNvbnN0IHMgPSBrICogUztcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gMSAvIHcocyk7XG4gICAgICAgICAgICB0ci56b29tID0gayA9PT0gMSA/IHpvb20gOiBzdGFydFpvb20gKyB0ci5zY2FsZVpvb20oc2NhbGUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcbiAgICAgICAgICAgICAgICB0ci5iZWFyaW5nID0gaW50ZXJwb2xhdGUoc3RhcnRCZWFyaW5nLCBiZWFyaW5nLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9waXRjaGluZykge1xuICAgICAgICAgICAgICAgIHRyLnBpdGNoID0gaW50ZXJwb2xhdGUoc3RhcnRQaXRjaCwgcGl0Y2gsIGspO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBrID09PSAxID8gY2VudGVyIDogdHIudW5wcm9qZWN0KGZyb20uYWRkKGRlbHRhLm11bHQodShzKSkpLm11bHQoc2NhbGUpKTtcbiAgICAgICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0ci5yZW5kZXJXb3JsZENvcGllcyA/IG5ld0NlbnRlci53cmFwKCkgOiBuZXdDZW50ZXIsIHBvaW50QXRPZmZzZXQpO1xuXG4gICAgICAgICAgICB0aGlzLl9maXJlTW92ZUV2ZW50cyhldmVudERhdGEpO1xuXG4gICAgICAgIH0sICgpID0+IHRoaXMuX2FmdGVyRWFzZShldmVudERhdGEpLCBvcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpc0Vhc2luZygpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZWFzZUZyYW1lSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcHMgYW55IGFuaW1hdGVkIHRyYW5zaXRpb24gdW5kZXJ3YXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHN0b3AoKTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl9lYXNlRnJhbWVJZCkge1xuICAgICAgICAgICAgdGhpcy5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZWFzZUZyYW1lSWQpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2Vhc2VGcmFtZUlkO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29uRWFzZUZyYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX29uRWFzZUVuZCkge1xuICAgICAgICAgICAgLy8gVGhlIF9vbkVhc2VFbmQgZnVuY3Rpb24gbWlnaHQgZW1pdCBldmVudHMgd2hpY2ggdHJpZ2dlciBuZXdcbiAgICAgICAgICAgIC8vIGFuaW1hdGlvbiwgd2hpY2ggc2V0cyBhIG5ldyBfb25FYXNlRW5kLiBFbnN1cmUgd2UgZG9uJ3QgZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCB1bmludGVudGlvbmFsbHkuXG4gICAgICAgICAgICBjb25zdCBvbkVhc2VFbmQgPSB0aGlzLl9vbkVhc2VFbmQ7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb25FYXNlRW5kO1xuICAgICAgICAgICAgb25FYXNlRW5kLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2Vhc2UoZnJhbWU6IChudW1iZXIpID0+IHZvaWQsXG4gICAgICAgICAgZmluaXNoOiAoKSA9PiB2b2lkLFxuICAgICAgICAgIG9wdGlvbnM6IHthbmltYXRlOiBib29sZWFuLCBkdXJhdGlvbjogbnVtYmVyLCBlYXNpbmc6IChudW1iZXIpID0+IG51bWJlcn0pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gZmFsc2UgfHwgb3B0aW9ucy5kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgZnJhbWUoMSk7XG4gICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2Vhc2VTdGFydCA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgICAgICB0aGlzLl9lYXNlT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLl9vbkVhc2VGcmFtZSA9IGZyYW1lO1xuICAgICAgICAgICAgdGhpcy5fb25FYXNlRW5kID0gZmluaXNoO1xuICAgICAgICAgICAgdGhpcy5fZWFzZUZyYW1lSWQgPSB0aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYWxsYmFjayBmb3IgbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWVcbiAgICBfcmVuZGVyRnJhbWVDYWxsYmFjaygpIHtcbiAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKChicm93c2VyLm5vdygpIC0gdGhpcy5fZWFzZVN0YXJ0KSAvIHRoaXMuX2Vhc2VPcHRpb25zLmR1cmF0aW9uLCAxKTtcbiAgICAgICAgdGhpcy5fb25FYXNlRnJhbWUodGhpcy5fZWFzZU9wdGlvbnMuZWFzaW5nKHQpKTtcbiAgICAgICAgaWYgKHQgPCAxKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXNlRnJhbWVJZCA9IHRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBiZWFyaW5nIHNvIHRoYXQgaXQncyBudW1lcmljYWxseSBjbG9zZSB0byB0aGUgY3VycmVudCBvbmUgc28gdGhhdCBpdCBpbnRlcnBvbGF0ZXMgcHJvcGVybHlcbiAgICBfbm9ybWFsaXplQmVhcmluZyhiZWFyaW5nOiBudW1iZXIsIGN1cnJlbnRCZWFyaW5nOiBudW1iZXIpIHtcbiAgICAgICAgYmVhcmluZyA9IHdyYXAoYmVhcmluZywgLTE4MCwgMTgwKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGJlYXJpbmcgLSBjdXJyZW50QmVhcmluZyk7XG4gICAgICAgIGlmIChNYXRoLmFicyhiZWFyaW5nIC0gMzYwIC0gY3VycmVudEJlYXJpbmcpIDwgZGlmZikgYmVhcmluZyAtPSAzNjA7XG4gICAgICAgIGlmIChNYXRoLmFicyhiZWFyaW5nICsgMzYwIC0gY3VycmVudEJlYXJpbmcpIDwgZGlmZikgYmVhcmluZyArPSAzNjA7XG4gICAgICAgIHJldHVybiBiZWFyaW5nO1xuICAgIH1cblxuICAgIC8vIElmIGEgcGF0aCBjcm9zc2luZyB0aGUgYW50aW1lcmlkaWFuIHdvdWxkIGJlIHNob3J0ZXIsIGV4dGVuZCB0aGUgZmluYWwgY29vcmRpbmF0ZSBzbyB0aGF0XG4gICAgLy8gaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHRoZSB0d28gZW5kcG9pbnRzIHdpbGwgY3Jvc3MgaXQuXG4gICAgX25vcm1hbGl6ZUNlbnRlcihjZW50ZXI6IExuZ0xhdCkge1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBpZiAoIXRyLnJlbmRlcldvcmxkQ29waWVzIHx8IHRyLmxuZ1JhbmdlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGVsdGEgPSBjZW50ZXIubG5nIC0gdHIuY2VudGVyLmxuZztcbiAgICAgICAgY2VudGVyLmxuZyArPVxuICAgICAgICAgICAgZGVsdGEgPiAxODAgPyAtMzYwIDpcbiAgICAgICAgICAgIGRlbHRhIDwgLTE4MCA/IDM2MCA6IDA7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW1lcmE7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vLi4vdXRpbC9jb25maWcnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIGNvbXBhY3Q/OiBib29sZWFuLFxuICAgIGN1c3RvbUF0dHJpYnV0aW9uPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPlxufTtcblxuLyoqXG4gKiBBbiBgQXR0cmlidXRpb25Db250cm9sYCBjb250cm9sIHByZXNlbnRzIHRoZSBtYXAncyBbYXR0cmlidXRpb24gaW5mb3JtYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9hdHRyaWJ1dGlvbi8pLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29tcGFjdF0gSWYgYHRydWVgIGZvcmNlIGEgY29tcGFjdCBhdHRyaWJ1dGlvbiB0aGF0IHNob3dzIHRoZSBmdWxsIGF0dHJpYnV0aW9uIG9uIG1vdXNlIGhvdmVyLCBvciBpZiBgZmFsc2VgIGZvcmNlIHRoZSBmdWxsIGF0dHJpYnV0aW9uIGNvbnRyb2wuIFRoZSBkZWZhdWx0IGlzIGEgcmVzcG9uc2l2ZSBhdHRyaWJ1dGlvbiB0aGF0IGNvbGxhcHNlcyB3aGVuIHRoZSBtYXAgaXMgbGVzcyB0aGFuIDY0MCBwaXhlbHMgd2lkZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nPn0gW29wdGlvbnMuY3VzdG9tQXR0cmlidXRpb25dIFN0cmluZyBvciBzdHJpbmdzIHRvIHNob3cgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIGF0dHJpYnV0aW9ucy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7YXR0cmlidXRpb25Db250cm9sOiBmYWxzZX0pXG4gKiAgICAgLmFkZENvbnRyb2wobmV3IG1hcGJveGdsLkF0dHJpYnV0aW9uQ29udHJvbCh7XG4gKiAgICAgICAgIGNvbXBhY3Q6IHRydWVcbiAqICAgICB9KSk7XG4gKi9cbmNsYXNzIEF0dHJpYnV0aW9uQ29udHJvbCB7XG4gICAgb3B0aW9uczogT3B0aW9ucztcbiAgICBfbWFwOiBNYXA7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2lubmVyQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZWRpdExpbms6ID9IVE1MQW5jaG9yRWxlbWVudDtcbiAgICBfYXR0cmliSFRNTDogc3RyaW5nO1xuICAgIHN0eWxlSWQ6IHN0cmluZztcbiAgICBzdHlsZU93bmVyOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfdXBkYXRlRWRpdExpbmsnLFxuICAgICAgICAgICAgJ191cGRhdGVEYXRhJyxcbiAgICAgICAgICAgICdfdXBkYXRlQ29tcGFjdCdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ2JvdHRvbS1yaWdodCc7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgY29uc3QgY29tcGFjdCA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuY29tcGFjdDtcblxuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtYXR0cmliJyk7XG4gICAgICAgIHRoaXMuX2lubmVyQ29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyJywgdGhpcy5fY29udGFpbmVyKTtcblxuICAgICAgICBpZiAoY29tcGFjdCkge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpO1xuICAgICAgICB0aGlzLl91cGRhdGVFZGl0TGluaygpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbignc3R5bGVkYXRhJywgdGhpcy5fdXBkYXRlRGF0YSk7XG4gICAgICAgIHRoaXMuX21hcC5vbignc291cmNlZGF0YScsIHRoaXMuX3VwZGF0ZURhdGEpO1xuICAgICAgICB0aGlzLl9tYXAub24oJ21vdmVlbmQnLCB0aGlzLl91cGRhdGVFZGl0TGluayk7XG5cbiAgICAgICAgaWYgKGNvbXBhY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdyZXNpemUnLCB0aGlzLl91cGRhdGVDb21wYWN0KTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbXBhY3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcblxuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzdHlsZWRhdGEnLCB0aGlzLl91cGRhdGVEYXRhKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignc291cmNlZGF0YScsIHRoaXMuX3VwZGF0ZURhdGEpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlRWRpdExpbmspO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdyZXNpemUnLCB0aGlzLl91cGRhdGVDb21wYWN0KTtcblxuICAgICAgICB0aGlzLl9tYXAgPSAodW5kZWZpbmVkOiBhbnkpO1xuICAgIH1cblxuICAgIF91cGRhdGVFZGl0TGluaygpIHtcbiAgICAgICAgbGV0IGVkaXRMaW5rID0gdGhpcy5fZWRpdExpbms7XG4gICAgICAgIGlmICghZWRpdExpbmspIHtcbiAgICAgICAgICAgIGVkaXRMaW5rID0gdGhpcy5fZWRpdExpbmsgPSAodGhpcy5fY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5tYXBib3gtaW1wcm92ZS1tYXAnKTogYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgICAgICAgIHtrZXk6IFwib3duZXJcIiwgdmFsdWU6IHRoaXMuc3R5bGVPd25lcn0sXG4gICAgICAgICAgICB7a2V5OiBcImlkXCIsIHZhbHVlOiB0aGlzLnN0eWxlSWR9LFxuICAgICAgICAgICAge2tleTogXCJhY2Nlc3NfdG9rZW5cIiwgdmFsdWU6IHRoaXMuX21hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGNvbmZpZy5BQ0NFU1NfVE9LRU59XG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKGVkaXRMaW5rKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbVN0cmluZyA9IHBhcmFtcy5yZWR1Y2UoKGFjYywgbmV4dCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjYyArPSBgJHtuZXh0LmtleX09JHtuZXh0LnZhbHVlfSR7aSA8IHBhcmFtcy5sZW5ndGggLSAxID8gJyYnIDogJyd9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIGA/YCk7XG4gICAgICAgICAgICBlZGl0TGluay5ocmVmID0gYCR7Y29uZmlnLkZFRURCQUNLX1VSTH0vJHtwYXJhbVN0cmluZ30ke3RoaXMuX21hcC5faGFzaCA/IHRoaXMuX21hcC5faGFzaC5nZXRIYXNoU3RyaW5nKHRydWUpIDogJyd9YDtcbiAgICAgICAgICAgIGVkaXRMaW5rLnJlbCA9IFwibm9vcGVuZXIgbm9mb2xsb3dcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVEYXRhKGU6IGFueSkge1xuICAgICAgICBpZiAoZSAmJiAoZS5zb3VyY2VEYXRhVHlwZSA9PT0gJ21ldGFkYXRhJyB8fCBlLmRhdGFUeXBlID09PSAnc3R5bGUnKSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0TGluaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZUF0dHJpYnV0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXAuc3R5bGUpIHJldHVybjtcbiAgICAgICAgbGV0IGF0dHJpYnV0aW9uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24pKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRpb25zID0gYXR0cmlidXRpb25zLmNvbmNhdChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uLm1hcChhdHRyaWJ1dGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0aW9uICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRpb25zLnB1c2godGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldDogYW55ID0gdGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQ7XG4gICAgICAgICAgICB0aGlzLnN0eWxlT3duZXIgPSBzdHlsZXNoZWV0Lm93bmVyO1xuICAgICAgICAgICAgdGhpcy5zdHlsZUlkID0gc3R5bGVzaGVldC5pZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlcyA9IHRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgICAgICBpZiAoc291cmNlQ2FjaGUudXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuYXR0cmlidXRpb24gJiYgYXR0cmlidXRpb25zLmluZGV4T2Yoc291cmNlLmF0dHJpYnV0aW9uKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRpb25zLnB1c2goc291cmNlLmF0dHJpYnV0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZW1vdmUgYW55IGVudHJpZXMgdGhhdCBhcmUgc3Vic3RyaW5ncyBvZiBhbm90aGVyIGVudHJ5LlxuICAgICAgICAvLyBmaXJzdCBzb3J0IGJ5IGxlbmd0aCBzbyB0aGF0IHN1YnN0cmluZ3MgY29tZSBmaXJzdFxuICAgICAgICBhdHRyaWJ1dGlvbnMuc29ydCgoYSwgYikgPT4gYS5sZW5ndGggLSBiLmxlbmd0aCk7XG4gICAgICAgIGF0dHJpYnV0aW9ucyA9IGF0dHJpYnV0aW9ucy5maWx0ZXIoKGF0dHJpYiwgaSkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgYXR0cmlidXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0aW9uc1tqXS5pbmRleE9mKGF0dHJpYikgPj0gMCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjaGVjayBpZiBhdHRyaWJ1dGlvbiBzdHJpbmcgaXMgZGlmZmVyZW50IHRvIG1pbmltaXplIERPTSBjaGFuZ2VzXG4gICAgICAgIGNvbnN0IGF0dHJpYkhUTUwgPSBhdHRyaWJ1dGlvbnMuam9pbignIHwgJyk7XG4gICAgICAgIGlmIChhdHRyaWJIVE1MID09PSB0aGlzLl9hdHRyaWJIVE1MKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fYXR0cmliSFRNTCA9IGF0dHJpYkhUTUw7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2lubmVyQ29udGFpbmVyLmlubmVySFRNTCA9IGF0dHJpYkhUTUw7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtYXR0cmliLWVtcHR5Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtYXR0cmliLWVtcHR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVtb3ZlIG9sZCBET00gbm9kZSBmcm9tIF9lZGl0TGlua1xuICAgICAgICB0aGlzLl9lZGl0TGluayA9IG51bGw7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUNvbXBhY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGggPD0gNjQwKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBBdHRyaWJ1dGlvbkNvbnRyb2w7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcblxuaW1wb3J0IHtiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxuLyoqXG4gKiBBIGBMb2dvQ29udHJvbGAgaXMgYSBjb250cm9sIHRoYXQgYWRkcyB0aGUgTWFwYm94IHdhdGVybWFya1xuICogdG8gdGhlIG1hcCBhcyByZXF1aXJlZCBieSB0aGUgW3Rlcm1zIG9mIHNlcnZpY2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vdG9zLykgZm9yIE1hcGJveFxuICogdmVjdG9yIHRpbGVzIGFuZCBjb3JlIHN0eWxlcy5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcHJpdmF0ZVxuKiovXG5cbmNsYXNzIExvZ29Db250cm9sIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgYmluZEFsbChbJ191cGRhdGVMb2dvJ10sIHRoaXMpO1xuICAgICAgICBiaW5kQWxsKFsnX3VwZGF0ZUNvbXBhY3QnXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9jb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY3RybCcpO1xuICAgICAgICBjb25zdCBhbmNob3IgPSBET00uY3JlYXRlKCdhJywgJ21hcGJveGdsLWN0cmwtbG9nbycpO1xuICAgICAgICBhbmNob3IudGFyZ2V0ID0gXCJfYmxhbmtcIjtcbiAgICAgICAgYW5jaG9yLnJlbCA9IFwibm9vcGVuZXIgbm9mb2xsb3dcIjtcbiAgICAgICAgYW5jaG9yLmhyZWYgPSBcImh0dHBzOi8vd3d3Lm1hcGJveC5jb20vXCI7XG4gICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIFwiTWFwYm94IGxvZ29cIik7XG4gICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJub29wZW5lciBub2ZvbGxvd1wiKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGFuY2hvcik7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbignc291cmNlZGF0YScsIHRoaXMuX3VwZGF0ZUxvZ28pO1xuICAgICAgICB0aGlzLl91cGRhdGVMb2dvKCk7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdyZXNpemUnLCB0aGlzLl91cGRhdGVDb21wYWN0KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ29tcGFjdCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignc291cmNlZGF0YScsIHRoaXMuX3VwZGF0ZUxvZ28pO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdyZXNpemUnLCB0aGlzLl91cGRhdGVDb21wYWN0KTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0UG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiAnYm90dG9tLWxlZnQnO1xuICAgIH1cblxuICAgIF91cGRhdGVMb2dvKGU6IGFueSkge1xuICAgICAgICBpZiAoIWUgfHwgZS5zb3VyY2VEYXRhVHlwZSA9PT0gJ21ldGFkYXRhJykge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSB0aGlzLl9sb2dvUmVxdWlyZWQoKSA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfbG9nb1JlcXVpcmVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuX21hcC5zdHlsZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlcyA9IHRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZXNbaWRdLmdldFNvdXJjZSgpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5tYXBib3hfbG9nbykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF91cGRhdGVDb21wYWN0KCkge1xuICAgICAgICBjb25zdCBjb250YWluZXJDaGlsZHJlbiA9IHRoaXMuX2NvbnRhaW5lci5jaGlsZHJlbjtcbiAgICAgICAgaWYgKGNvbnRhaW5lckNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gY29udGFpbmVyQ2hpbGRyZW5bMF07XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLm9mZnNldFdpZHRoIDwgMjUwKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBMb2dvQ29udHJvbDtcbiIsIi8vIEBmbG93IHN0cmljdFxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgdHlwZSBUYXNrSUQgPSBudW1iZXI7IC8vIGNhbid0IG1hcmsgb3BhcXVlIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vZmxvd3R5cGUvZmxvdy1yZW1vdmUtdHlwZXMvcHVsbC82MVxudHlwZSBUYXNrID0ge1xuICAgIGNhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICAgIGlkOiBUYXNrSUQ7XG4gICAgY2FuY2VsbGVkOiBib29sZWFuO1xufTtcblxuY2xhc3MgVGFza1F1ZXVlIHtcbiAgICBfcXVldWU6IEFycmF5PFRhc2s+O1xuICAgIF9pZDogVGFza0lEO1xuICAgIF9jbGVhcmVkOiBib29sZWFuO1xuICAgIF9jdXJyZW50bHlSdW5uaW5nOiBBcnJheTxUYXNrPiB8IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSAge1xuICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLl9pZCA9IDA7XG4gICAgICAgIHRoaXMuX2NsZWFyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY3VycmVudGx5UnVubmluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGFkZChjYWxsYmFjazogKCkgPT4gdm9pZCk6IFRhc2tJRCB7XG4gICAgICAgIGNvbnN0IGlkID0gKyt0aGlzLl9pZDtcbiAgICAgICAgY29uc3QgcXVldWUgPSB0aGlzLl9xdWV1ZTtcbiAgICAgICAgcXVldWUucHVzaCh7Y2FsbGJhY2ssIGlkLCBjYW5jZWxsZWQ6IGZhbHNlfSk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICByZW1vdmUoaWQ6IFRhc2tJRCkge1xuICAgICAgICBjb25zdCBydW5uaW5nID0gdGhpcy5fY3VycmVudGx5UnVubmluZztcbiAgICAgICAgY29uc3QgcXVldWUgPSBydW5uaW5nID8gdGhpcy5fcXVldWUuY29uY2F0KHJ1bm5pbmcpIDogdGhpcy5fcXVldWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFzayBvZiBxdWV1ZSkge1xuICAgICAgICAgICAgaWYgKHRhc2suaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgdGFzay5jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJ1bigpIHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLl9jdXJyZW50bHlSdW5uaW5nKTtcbiAgICAgICAgY29uc3QgcXVldWUgPSB0aGlzLl9jdXJyZW50bHlSdW5uaW5nID0gdGhpcy5fcXVldWU7XG5cbiAgICAgICAgLy8gVGFza3MgcXVldWVkIGJ5IGNhbGxiYWNrcyBpbiB0aGUgY3VycmVudCBxdWV1ZSBzaG91bGQgYmUgZXhlY3V0ZWRcbiAgICAgICAgLy8gb24gdGhlIG5leHQgcnVuLCBub3QgdGhlIGN1cnJlbnQgcnVuLlxuICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgdGFzayBvZiBxdWV1ZSkge1xuICAgICAgICAgICAgaWYgKHRhc2suY2FuY2VsbGVkKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRhc2suY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGVhcmVkKSBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NsZWFyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY3VycmVudGx5UnVubmluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudGx5UnVubmluZykge1xuICAgICAgICAgICAgdGhpcy5fY2xlYXJlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcXVldWUgPSBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhc2tRdWV1ZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dmVyc2lvbn0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsLCB3YXJuT25jZSwgdW5pcXVlSWR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5jb25zdCB7SFRNTEltYWdlRWxlbWVudCwgSFRNTEVsZW1lbnR9ID0gd2luZG93O1xuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQge2dldEltYWdlLCBnZXRKU09OLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgUGFpbnRlciBmcm9tICcuLi9yZW5kZXIvcGFpbnRlcic7XG5pbXBvcnQgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IEhhc2ggZnJvbSAnLi9oYXNoJztcbmltcG9ydCBiaW5kSGFuZGxlcnMgZnJvbSAnLi9iaW5kX2hhbmRsZXJzJztcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi9jYW1lcmEnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4uL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgQXR0cmlidXRpb25Db250cm9sIGZyb20gJy4vY29udHJvbC9hdHRyaWJ1dGlvbl9jb250cm9sJztcbmltcG9ydCBMb2dvQ29udHJvbCBmcm9tICcuL2NvbnRyb2wvbG9nb19jb250cm9sJztcbmltcG9ydCBpc1N1cHBvcnRlZCBmcm9tICdAbWFwYm94L21hcGJveC1nbC1zdXBwb3J0ZWQnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7TWFwTW91c2VFdmVudH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IFRhc2tRdWV1ZSBmcm9tICcuLi91dGlsL3Rhc2tfcXVldWUnO1xuaW1wb3J0IHdlYnBTdXBwb3J0ZWQgZnJvbSAnLi4vdXRpbC93ZWJwX3N1cHBvcnRlZCc7XG5pbXBvcnQge3NldENhY2hlTGltaXRzfSBmcm9tICcuLi91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZSc7XG5cbmltcG9ydCB0eXBlIHtQb2ludExpa2V9IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbn0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB0eXBlIHtMbmdMYXRCb3VuZHNMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IHR5cGUge1N0eWxlT3B0aW9ucywgU3R5bGVTZXR0ZXJPcHRpb25zfSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQgdHlwZSB7TWFwRXZlbnQsIE1hcERhdGFFdmVudH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHR5cGUge0N1c3RvbUxheWVySW50ZXJmYWNlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2VJbnRlcmZhY2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2ltYWdlJztcblxuaW1wb3J0IHR5cGUgU2Nyb2xsWm9vbUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL3Njcm9sbF96b29tJztcbmltcG9ydCB0eXBlIEJveFpvb21IYW5kbGVyIGZyb20gJy4vaGFuZGxlci9ib3hfem9vbSc7XG5pbXBvcnQgdHlwZSBEcmFnUm90YXRlSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvZHJhZ19yb3RhdGUnO1xuaW1wb3J0IHR5cGUgRHJhZ1BhbkhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL2RyYWdfcGFuJztcbmltcG9ydCB0eXBlIEtleWJvYXJkSGFuZGxlciBmcm9tICcuL2hhbmRsZXIva2V5Ym9hcmQnO1xuaW1wb3J0IHR5cGUgRG91YmxlQ2xpY2tab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvZGJsY2xpY2tfem9vbSc7XG5pbXBvcnQgdHlwZSBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyIGZyb20gJy4vaGFuZGxlci90b3VjaF96b29tX3JvdGF0ZSc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi91dGlsL3Rhc2tfcXVldWUnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge1xuICAgIExheWVyU3BlY2lmaWNhdGlvbixcbiAgICBGaWx0ZXJTcGVjaWZpY2F0aW9uLFxuICAgIFN0eWxlU3BlY2lmaWNhdGlvbixcbiAgICBMaWdodFNwZWNpZmljYXRpb24sXG4gICAgU291cmNlU3BlY2lmaWNhdGlvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxudHlwZSBDb250cm9sUG9zaXRpb24gPSAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xudHlwZSBJQ29udHJvbCA9IHtcbiAgICBvbkFkZChtYXA6IE1hcCk6IEhUTUxFbGVtZW50O1xuICAgIG9uUmVtb3ZlKG1hcDogTWFwKTogdm9pZDtcblxuICAgICtnZXREZWZhdWx0UG9zaXRpb24/OiAoKSA9PiBDb250cm9sUG9zaXRpb247XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG5cbnR5cGUgTWFwT3B0aW9ucyA9IHtcbiAgICBoYXNoPzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBpbnRlcmFjdGl2ZT86IGJvb2xlYW4sXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IHN0cmluZyxcbiAgICBiZWFyaW5nU25hcD86IG51bWJlcixcbiAgICBhdHRyaWJ1dGlvbkNvbnRyb2w/OiBib29sZWFuLFxuICAgIGN1c3RvbUF0dHJpYnV0aW9uPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICBsb2dvUG9zaXRpb24/OiBDb250cm9sUG9zaXRpb24sXG4gICAgZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD86IGJvb2xlYW4sXG4gICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyPzogYm9vbGVhbixcbiAgICBhbnRpYWxpYXM/OiBib29sZWFuLFxuICAgIHJlZnJlc2hFeHBpcmVkVGlsZXM/OiBib29sZWFuLFxuICAgIG1heEJvdW5kcz86IExuZ0xhdEJvdW5kc0xpa2UsXG4gICAgc2Nyb2xsWm9vbT86IGJvb2xlYW4sXG4gICAgbWluWm9vbT86ID9udW1iZXIsXG4gICAgbWF4Wm9vbT86ID9udW1iZXIsXG4gICAgYm94Wm9vbT86IGJvb2xlYW4sXG4gICAgZHJhZ1JvdGF0ZT86IGJvb2xlYW4sXG4gICAgZHJhZ1Bhbj86IGJvb2xlYW4sXG4gICAga2V5Ym9hcmQ/OiBib29sZWFuLFxuICAgIGRvdWJsZUNsaWNrWm9vbT86IGJvb2xlYW4sXG4gICAgdG91Y2hab29tUm90YXRlPzogYm9vbGVhbixcbiAgICB0cmFja1Jlc2l6ZT86IGJvb2xlYW4sXG4gICAgY2VudGVyPzogTG5nTGF0TGlrZSxcbiAgICB6b29tPzogbnVtYmVyLFxuICAgIGJlYXJpbmc/OiBudW1iZXIsXG4gICAgcGl0Y2g/OiBudW1iZXIsXG4gICAgcmVuZGVyV29ybGRDb3BpZXM/OiBib29sZWFuLFxuICAgIG1heFRpbGVDYWNoZVNpemU/OiBudW1iZXIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdD86IFJlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbixcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nXG59O1xuXG5jb25zdCBkZWZhdWx0TWluWm9vbSA9IDA7XG5jb25zdCBkZWZhdWx0TWF4Wm9vbSA9IDIyO1xuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgY2VudGVyOiBbMCwgMF0sXG4gICAgem9vbTogMCxcbiAgICBiZWFyaW5nOiAwLFxuICAgIHBpdGNoOiAwLFxuXG4gICAgbWluWm9vbTogZGVmYXVsdE1pblpvb20sXG4gICAgbWF4Wm9vbTogZGVmYXVsdE1heFpvb20sXG5cbiAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICBzY3JvbGxab29tOiB0cnVlLFxuICAgIGJveFpvb206IHRydWUsXG4gICAgZHJhZ1JvdGF0ZTogdHJ1ZSxcbiAgICBkcmFnUGFuOiB0cnVlLFxuICAgIGtleWJvYXJkOiB0cnVlLFxuICAgIGRvdWJsZUNsaWNrWm9vbTogdHJ1ZSxcbiAgICB0b3VjaFpvb21Sb3RhdGU6IHRydWUsXG5cbiAgICBiZWFyaW5nU25hcDogNyxcbiAgICBjbGlja1RvbGVyYW5jZTogMyxcblxuICAgIGhhc2g6IGZhbHNlLFxuICAgIGF0dHJpYnV0aW9uQ29udHJvbDogdHJ1ZSxcblxuICAgIGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6IGZhbHNlLFxuICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgdHJhY2tSZXNpemU6IHRydWUsXG4gICAgcmVuZGVyV29ybGRDb3BpZXM6IHRydWUsXG4gICAgcmVmcmVzaEV4cGlyZWRUaWxlczogdHJ1ZSxcbiAgICBtYXhUaWxlQ2FjaGVTaXplOiBudWxsLFxuICAgIGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogJ3NhbnMtc2VyaWYnLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IG51bGwsXG4gICAgYWNjZXNzVG9rZW46IG51bGwsXG4gICAgZmFkZUR1cmF0aW9uOiAzMDAsXG4gICAgY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiB0cnVlXG59O1xuXG4vKipcbiAqIFRoZSBgTWFwYCBvYmplY3QgcmVwcmVzZW50cyB0aGUgbWFwIG9uIHlvdXIgcGFnZS4gSXQgZXhwb3NlcyBtZXRob2RzXG4gKiBhbmQgcHJvcGVydGllcyB0aGF0IGVuYWJsZSB5b3UgdG8gcHJvZ3JhbW1hdGljYWxseSBjaGFuZ2UgdGhlIG1hcCxcbiAqIGFuZCBmaXJlcyBldmVudHMgYXMgdXNlcnMgaW50ZXJhY3Qgd2l0aCBpdC5cbiAqXG4gKiBZb3UgY3JlYXRlIGEgYE1hcGAgYnkgc3BlY2lmeWluZyBhIGBjb250YWluZXJgIGFuZCBvdGhlciBvcHRpb25zLlxuICogVGhlbiBNYXBib3ggR0wgSlMgaW5pdGlhbGl6ZXMgdGhlIG1hcCBvbiB0aGUgcGFnZSBhbmQgcmV0dXJucyB5b3VyIGBNYXBgXG4gKiBvYmplY3QuXG4gKlxuICogQGV4dGVuZHMgRXZlbnRlZFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBvcHRpb25zLmNvbnRhaW5lciBUaGUgSFRNTCBlbGVtZW50IGluIHdoaWNoIE1hcGJveCBHTCBKUyB3aWxsIHJlbmRlciB0aGUgbWFwLCBvciB0aGUgZWxlbWVudCdzIHN0cmluZyBgaWRgLiBUaGUgc3BlY2lmaWVkIGVsZW1lbnQgbXVzdCBoYXZlIG5vIGNoaWxkcmVuLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pblpvb209MF0gVGhlIG1pbmltdW0gem9vbSBsZXZlbCBvZiB0aGUgbWFwICgwLTI0KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhab29tPTIyXSBUaGUgbWF4aW11bSB6b29tIGxldmVsIG9mIHRoZSBtYXAgKDAtMjQpLlxuICogQHBhcmFtIHtPYmplY3R8c3RyaW5nfSBbb3B0aW9ucy5zdHlsZV0gVGhlIG1hcCdzIE1hcGJveCBzdHlsZS4gVGhpcyBtdXN0IGJlIGFuIGEgSlNPTiBvYmplY3QgY29uZm9ybWluZyB0b1xuICogdGhlIHNjaGVtYSBkZXNjcmliZWQgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyksIG9yIGEgVVJMIHRvXG4gKiBzdWNoIEpTT04uXG4gKlxuICogVG8gbG9hZCBhIHN0eWxlIGZyb20gdGhlIE1hcGJveCBBUEksIHlvdSBjYW4gdXNlIGEgVVJMIG9mIHRoZSBmb3JtIGBtYXBib3g6Ly9zdHlsZXMvOm93bmVyLzpzdHlsZWAsXG4gKiB3aGVyZSBgOm93bmVyYCBpcyB5b3VyIE1hcGJveCBhY2NvdW50IG5hbWUgYW5kIGA6c3R5bGVgIGlzIHRoZSBzdHlsZSBJRC4gT3IgeW91IGNhbiB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmdcbiAqIFt0aGUgcHJlZGVmaW5lZCBNYXBib3ggc3R5bGVzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcHMvKTpcbiAqXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMGBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L291dGRvb3JzLXYxMGBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L2xpZ2h0LXY5YFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvZGFyay12OWBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS12OWBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS1zdHJlZXRzLXYxMGBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tcHJldmlldy1kYXktdjJgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLXByZXZpZXctbmlnaHQtdjJgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLWd1aWRhbmNlLWRheS12MmBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tZ3VpZGFuY2UtbmlnaHQtdjJgXG4gKlxuICogVGlsZXNldHMgaG9zdGVkIHdpdGggTWFwYm94IGNhbiBiZSBzdHlsZS1vcHRpbWl6ZWQgaWYgeW91IGFwcGVuZCBgP29wdGltaXplPXRydWVgIHRvIHRoZSBlbmQgb2YgeW91ciBzdHlsZSBVUkwsIGxpa2UgYG1hcGJveDovL3N0eWxlcy9tYXBib3gvc3RyZWV0cy12OT9vcHRpbWl6ZT10cnVlYC5cbiAqIExlYXJuIG1vcmUgYWJvdXQgc3R5bGUtb3B0aW1pemVkIHZlY3RvciB0aWxlcyBpbiBvdXIgW0FQSSBkb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uL21hcHMvI3JldHJpZXZlLXRpbGVzKS5cbiAqXG4gKiBAcGFyYW0geyhib29sZWFufHN0cmluZyl9IFtvcHRpb25zLmhhc2g9ZmFsc2VdIElmIGB0cnVlYCwgdGhlIG1hcCdzIHBvc2l0aW9uICh6b29tLCBjZW50ZXIgbGF0aXR1ZGUsIGNlbnRlciBsb25naXR1ZGUsIGJlYXJpbmcsIGFuZCBwaXRjaCkgd2lsbCBiZSBzeW5jZWQgd2l0aCB0aGUgaGFzaCBmcmFnbWVudCBvZiB0aGUgcGFnZSdzIFVSTC5cbiAqICAgRm9yIGV4YW1wbGUsIGBodHRwOi8vcGF0aC90by9teS9wYWdlLmh0bWwjMi41OS8zOS4yNi81My4wNy8tMjQuMS82MGAuXG4gKiAgIEFuIGFkZGl0aW9uYWwgc3RyaW5nIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIHRvIGluZGljYXRlIGEgcGFyYW1ldGVyLXN0eWxlZCBoYXNoLFxuICogICBlLmcuIGh0dHA6Ly9wYXRoL3RvL215L3BhZ2UuaHRtbCNtYXA9Mi41OS8zOS4yNi81My4wNy8tMjQuMS82MCZmb289YmFyLCB3aGVyZSBmb29cbiAqICAgaXMgYSBjdXN0b20gcGFyYW1ldGVyIGFuZCBiYXIgaXMgYW4gYXJiaXRyYXJ5IGhhc2ggZGlzdGluY3QgZnJvbSB0aGUgbWFwIGhhc2guXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmludGVyYWN0aXZlPXRydWVdIElmIGBmYWxzZWAsIG5vIG1vdXNlLCB0b3VjaCwgb3Iga2V5Ym9hcmQgbGlzdGVuZXJzIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIG1hcCwgc28gaXQgd2lsbCBub3QgcmVzcG9uZCB0byBpbnRlcmFjdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5iZWFyaW5nU25hcD03XSBUaGUgdGhyZXNob2xkLCBtZWFzdXJlZCBpbiBkZWdyZWVzLCB0aGF0IGRldGVybWluZXMgd2hlbiB0aGUgbWFwJ3NcbiAqICAgYmVhcmluZyB3aWxsIHNuYXAgdG8gbm9ydGguIEZvciBleGFtcGxlLCB3aXRoIGEgYGJlYXJpbmdTbmFwYCBvZiA3LCBpZiB0aGUgdXNlciByb3RhdGVzXG4gKiAgIHRoZSBtYXAgd2l0aGluIDcgZGVncmVlcyBvZiBub3J0aCwgdGhlIG1hcCB3aWxsIGF1dG9tYXRpY2FsbHkgc25hcCB0byBleGFjdCBub3J0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucGl0Y2hXaXRoUm90YXRlPXRydWVdIElmIGBmYWxzZWAsIHRoZSBtYXAncyBwaXRjaCAodGlsdCkgY29udHJvbCB3aXRoIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiB3aWxsIGJlIGRpc2FibGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmNsaWNrVG9sZXJhbmNlPTNdIFRoZSBtYXggbnVtYmVyIG9mIHBpeGVscyBhIHVzZXIgY2FuIHNoaWZ0IHRoZSBtb3VzZSBwb2ludGVyIGR1cmluZyBhIGNsaWNrIGZvciBpdCB0byBiZSBjb25zaWRlcmVkIGEgdmFsaWQgY2xpY2sgKGFzIG9wcG9zZWQgdG8gYSBtb3VzZSBkcmFnKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYXR0cmlidXRpb25Db250cm9sPXRydWVdIElmIGB0cnVlYCwgYW4ge0BsaW5rIEF0dHJpYnV0aW9uQ29udHJvbH0gd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFwLlxuICogQHBhcmFtIHtzdHJpbmcgfCBBcnJheTxzdHJpbmc+fSBbb3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbl0gU3RyaW5nIG9yIHN0cmluZ3MgdG8gc2hvdyBpbiBhbiB7QGxpbmsgQXR0cmlidXRpb25Db250cm9sfS4gT25seSBhcHBsaWNhYmxlIGlmIGBvcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbGAgaXMgYHRydWVgLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvZ29Qb3NpdGlvbj0nYm90dG9tLWxlZnQnXSBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBNYXBib3ggd29yZG1hcmsgb24gdGhlIG1hcC4gVmFsaWQgb3B0aW9ucyBhcmUgYHRvcC1sZWZ0YCxgdG9wLXJpZ2h0YCwgYGJvdHRvbS1sZWZ0YCwgYGJvdHRvbS1yaWdodGAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZmFsc2VdIElmIGB0cnVlYCwgbWFwIGNyZWF0aW9uIHdpbGwgZmFpbCBpZiB0aGUgcGVyZm9ybWFuY2Ugb2YgTWFwYm94XG4gKiAgIEdMIEpTIHdvdWxkIGJlIGRyYW1hdGljYWxseSB3b3JzZSB0aGFuIGV4cGVjdGVkIChpLmUuIGEgc29mdHdhcmUgcmVuZGVyZXIgd291bGQgYmUgdXNlZCkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0gSWYgYHRydWVgLCB0aGUgbWFwJ3MgY2FudmFzIGNhbiBiZSBleHBvcnRlZCB0byBhIFBORyB1c2luZyBgbWFwLmdldENhbnZhcygpLnRvRGF0YVVSTCgpYC4gVGhpcyBpcyBgZmFsc2VgIGJ5IGRlZmF1bHQgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFudGlhbGlhc10gSWYgYHRydWVgLCB0aGUgZ2wgY29udGV4dCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBNU0FBIGFudGlhbGlhc2luZywgd2hpY2ggY2FuIGJlIHVzZWZ1bCBmb3IgYW50aWFsaWFzaW5nIGN1c3RvbSBsYXllcnMuIHRoaXMgaXMgYGZhbHNlYCBieSBkZWZhdWx0IGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yZWZyZXNoRXhwaXJlZFRpbGVzPXRydWVdIElmIGBmYWxzZWAsIHRoZSBtYXAgd29uJ3QgYXR0ZW1wdCB0byByZS1yZXF1ZXN0IHRpbGVzIG9uY2UgdGhleSBleHBpcmUgcGVyIHRoZWlyIEhUVFAgYGNhY2hlQ29udHJvbGAvYGV4cGlyZXNgIGhlYWRlcnMuXG4gKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc0xpa2V9IFtvcHRpb25zLm1heEJvdW5kc10gSWYgc2V0LCB0aGUgbWFwIHdpbGwgYmUgY29uc3RyYWluZWQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IFtvcHRpb25zLnNjcm9sbFpvb209dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJzY3JvbGwgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuIEFuIGBPYmplY3RgIHZhbHVlIGlzIHBhc3NlZCBhcyBvcHRpb25zIHRvIHtAbGluayBTY3JvbGxab29tSGFuZGxlciNlbmFibGV9LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5ib3hab29tPXRydWVdIElmIGB0cnVlYCwgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkIChzZWUge0BsaW5rIEJveFpvb21IYW5kbGVyfSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRyYWdSb3RhdGU9dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQgKHNlZSB7QGxpbmsgRHJhZ1JvdGF0ZUhhbmRsZXJ9KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZHJhZ1Bhbj10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZCAoc2VlIHtAbGluayBEcmFnUGFuSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5rZXlib2FyZD10cnVlXSBJZiBgdHJ1ZWAsIGtleWJvYXJkIHNob3J0Y3V0cyBhcmUgZW5hYmxlZCAoc2VlIHtAbGluayBLZXlib2FyZEhhbmRsZXJ9KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZG91YmxlQ2xpY2tab29tPXRydWVdIElmIGB0cnVlYCwgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkIChzZWUge0BsaW5rIERvdWJsZUNsaWNrWm9vbUhhbmRsZXJ9KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IFtvcHRpb25zLnRvdWNoWm9vbVJvdGF0ZT10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuIEFuIGBPYmplY3RgIHZhbHVlIGlzIHBhc3NlZCBhcyBvcHRpb25zIHRvIHtAbGluayBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyI2VuYWJsZX0uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWNrUmVzaXplPXRydWVdICBJZiBgdHJ1ZWAsIHRoZSBtYXAgd2lsbCBhdXRvbWF0aWNhbGx5IHJlc2l6ZSB3aGVuIHRoZSBicm93c2VyIHdpbmRvdyByZXNpemVzLlxuICogQHBhcmFtIHtMbmdMYXRMaWtlfSBbb3B0aW9ucy5jZW50ZXI9WzAsIDBdXSBUaGUgaW5pdGFsIGdlb2dyYXBoaWNhbCBjZW50ZXJwb2ludCBvZiB0aGUgbWFwLiBJZiBgY2VudGVyYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLCBNYXBib3ggR0wgSlMgd2lsbCBsb29rIGZvciBpdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHlsZSwgZWl0aGVyLCBpdCB3aWxsIGRlZmF1bHQgdG8gYFswLCAwXWAgTm90ZTogTWFwYm94IEdMIHVzZXMgbG9uZ2l0dWRlLCBsYXRpdHVkZSBjb29yZGluYXRlIG9yZGVyIChhcyBvcHBvc2VkIHRvIGxhdGl0dWRlLCBsb25naXR1ZGUpIHRvIG1hdGNoIEdlb0pTT04uXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuem9vbT0wXSBUaGUgaW5pdGlhbCB6b29tIGxldmVsIG9mIHRoZSBtYXAuIElmIGB6b29tYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLCBNYXBib3ggR0wgSlMgd2lsbCBsb29rIGZvciBpdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHlsZSwgZWl0aGVyLCBpdCB3aWxsIGRlZmF1bHQgdG8gYDBgLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJlYXJpbmc9MF0gVGhlIGluaXRpYWwgYmVhcmluZyAocm90YXRpb24pIG9mIHRoZSBtYXAsIG1lYXN1cmVkIGluIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UgZnJvbSBub3J0aC4gSWYgYGJlYXJpbmdgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgMGAuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGl0Y2g9MF0gVGhlIGluaXRpYWwgcGl0Y2ggKHRpbHQpIG9mIHRoZSBtYXAsIG1lYXN1cmVkIGluIGRlZ3JlZXMgYXdheSBmcm9tIHRoZSBwbGFuZSBvZiB0aGUgc2NyZWVuICgwLTYwKS4gSWYgYHBpdGNoYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLCBNYXBib3ggR0wgSlMgd2lsbCBsb29rIGZvciBpdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHlsZSwgZWl0aGVyLCBpdCB3aWxsIGRlZmF1bHQgdG8gYDBgLlxuICogQHBhcmFtIHtMbmdMYXRCb3VuZHNMaWtlfSBbb3B0aW9ucy5ib3VuZHNdIFRoZSBpbml0aWFsIGJvdW5kcyBvZiB0aGUgbWFwLiBJZiBgYm91bmRzYCBpcyBzcGVjaWZpZWQsIGl0IG92ZXJyaWRlcyBgY2VudGVyYCBhbmQgYHpvb21gIGNvbnN0cnVjdG9yIG9wdGlvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuZml0Qm91bmRzT3B0aW9uc10gQSBbYGZpdEJvdW5kc2BdKCNtYXAjZml0Ym91bmRzKSBvcHRpb25zIG9iamVjdCB0byB1c2UgX29ubHlfIHdoZW4gZml0dGluZyB0aGUgaW5pdGlhbCBgYm91bmRzYCBwcm92aWRlZCBhYm92ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucmVuZGVyV29ybGRDb3BpZXM9dHJ1ZV0gIElmIGB0cnVlYCwgbXVsdGlwbGUgY29waWVzIG9mIHRoZSB3b3JsZCB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSBiZXlvbmQgLTE4MCBhbmQgMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLiBJZiBzZXQgdG8gYGZhbHNlYDpcbiAqIC0gV2hlbiB0aGUgbWFwIGlzIHpvb21lZCBvdXQgZmFyIGVub3VnaCB0aGF0IGEgc2luZ2xlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3b3JsZCBkb2VzIG5vdCBmaWxsIHRoZSBtYXAncyBlbnRpcmVcbiAqIGNvbnRhaW5lciwgdGhlcmUgd2lsbCBiZSBibGFuayBzcGFjZSBiZXlvbmQgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLlxuICogLSBGZWF0dXJlcyB0aGF0IGNyb3NzIDE4MCBhbmQgLTE4MCBkZWdyZWVzIGxvbmdpdHVkZSB3aWxsIGJlIGN1dCBpbiB0d28gKHdpdGggb25lIHBvcnRpb24gb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlXG4gKiBtYXAgYW5kIHRoZSBvdGhlciBvbiB0aGUgbGVmdCBlZGdlIG9mIHRoZSBtYXApIGF0IGV2ZXJ5IHpvb20gbGV2ZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4VGlsZUNhY2hlU2l6ZT1udWxsXSAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbGVzIHN0b3JlZCBpbiB0aGUgdGlsZSBjYWNoZSBmb3IgYSBnaXZlbiBzb3VyY2UuIElmIG9taXR0ZWQsIHRoZSBjYWNoZSB3aWxsIGJlIGR5bmFtaWNhbGx5IHNpemVkIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdwb3J0LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT0nc2Fucy1zZXJpZiddIERlZmluZXMgYSBDU1NcbiAqICAgZm9udC1mYW1pbHkgZm9yIGxvY2FsbHkgb3ZlcnJpZGluZyBnZW5lcmF0aW9uIG9mIGdseXBocyBpbiB0aGUgJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnLCAnSGlyYWdhbmEnLCAnS2F0YWthbmEnIGFuZCAnSGFuZ3VsIFN5bGxhYmxlcycgcmFuZ2VzLlxuICogICBJbiB0aGVzZSByYW5nZXMsIGZvbnQgc2V0dGluZ3MgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUgd2lsbCBiZSBpZ25vcmVkLCBleGNlcHQgZm9yIGZvbnQtd2VpZ2h0IGtleXdvcmRzIChsaWdodC9yZWd1bGFyL21lZGl1bS9ib2xkKS5cbiAqICAgU2V0IHRvIGBmYWxzZWAsIHRvIGVuYWJsZSBmb250IHNldHRpbmdzIGZyb20gdGhlIG1hcCdzIHN0eWxlIGZvciB0aGVzZSBnbHlwaCByYW5nZXMuICBOb3RlIHRoYXQgW01hcGJveCBTdHVkaW9dKGh0dHBzOi8vc3R1ZGlvLm1hcGJveC5jb20vKSBzZXRzIHRoaXMgdmFsdWUgdG8gYGZhbHNlYCBieSBkZWZhdWx0LlxuICogICBUaGUgcHVycG9zZSBvZiB0aGlzIG9wdGlvbiBpcyB0byBhdm9pZCBiYW5kd2lkdGgtaW50ZW5zaXZlIGdseXBoIHNlcnZlciByZXF1ZXN0cy4gKFNlZSBbVXNlIGxvY2FsbHkgZ2VuZXJhdGVkIGlkZW9ncmFwaHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbG9jYWwtaWRlb2dyYXBocykuKVxuICogQHBhcmFtIHtSZXF1ZXN0VHJhbnNmb3JtRnVuY3Rpb259IFtvcHRpb25zLnRyYW5zZm9ybVJlcXVlc3Q9bnVsbF0gQSBjYWxsYmFjayBydW4gYmVmb3JlIHRoZSBNYXAgbWFrZXMgYSByZXF1ZXN0IGZvciBhbiBleHRlcm5hbCBVUkwuIFRoZSBjYWxsYmFjayBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIHVybCwgc2V0IGhlYWRlcnMsIG9yIHNldCB0aGUgY3JlZGVudGlhbHMgcHJvcGVydHkgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy5cbiAqICAgRXhwZWN0ZWQgdG8gcmV0dXJuIGFuIG9iamVjdCB3aXRoIGEgYHVybGAgcHJvcGVydHkgYW5kIG9wdGlvbmFsbHkgYGhlYWRlcnNgIGFuZCBgY3JlZGVudGlhbHNgIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNvbGxlY3RSZXNvdXJjZVRpbWluZz1mYWxzZV0gSWYgYHRydWVgLCBSZXNvdXJjZSBUaW1pbmcgQVBJIGluZm9ybWF0aW9uIHdpbGwgYmUgY29sbGVjdGVkIGZvciByZXF1ZXN0cyBtYWRlIGJ5IEdlb0pTT04gYW5kIFZlY3RvciBUaWxlIHdlYiB3b3JrZXJzICh0aGlzIGluZm9ybWF0aW9uIGlzIG5vcm1hbGx5IGluYWNjZXNzaWJsZSBmcm9tIHRoZSBtYWluIEphdmFzY3JpcHQgdGhyZWFkKS4gSW5mb3JtYXRpb24gd2lsbCBiZSByZXR1cm5lZCBpbiBhIGByZXNvdXJjZVRpbWluZ2AgcHJvcGVydHkgb2YgcmVsZXZhbnQgYGRhdGFgIGV2ZW50cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5mYWRlRHVyYXRpb249MzAwXSBDb250cm9scyB0aGUgZHVyYXRpb24gb2YgdGhlIGZhZGUtaW4vZmFkZS1vdXQgYW5pbWF0aW9uIGZvciBsYWJlbCBjb2xsaXNpb25zLCBpbiBtaWxsaXNlY29uZHMuIFRoaXMgc2V0dGluZyBhZmZlY3RzIGFsbCBzeW1ib2wgbGF5ZXJzLiBUaGlzIHNldHRpbmcgZG9lcyBub3QgYWZmZWN0IHRoZSBkdXJhdGlvbiBvZiBydW50aW1lIHN0eWxpbmcgdHJhbnNpdGlvbnMgb3IgcmFzdGVyIHRpbGUgY3Jvc3MtZmFkaW5nLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jcm9zc1NvdXJjZUNvbGxpc2lvbnM9dHJ1ZV0gSWYgYHRydWVgLCBzeW1ib2xzIGZyb20gbXVsdGlwbGUgc291cmNlcyBjYW4gY29sbGlkZSB3aXRoIGVhY2ggb3RoZXIgZHVyaW5nIGNvbGxpc2lvbiBkZXRlY3Rpb24uIElmIGBmYWxzZWAsIGNvbGxpc2lvbiBkZXRlY3Rpb24gaXMgcnVuIHNlcGFyYXRlbHkgZm9yIHRoZSBzeW1ib2xzIGluIGVhY2ggc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFjY2Vzc1Rva2VuPW51bGxdIElmIHNwZWNpZmllZCwgbWFwIHdpbGwgdXNlIHRoaXMgdG9rZW4gaW5zdGVhZCBvZiB0aGUgb25lIGRlZmluZWQgaW4gbWFwYm94Z2wuYWNjZXNzVG9rZW4uXG5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7XG4gKiAgIGNvbnRhaW5lcjogJ21hcCcsXG4gKiAgIGNlbnRlcjogWy0xMjIuNDIwNjc5LCAzNy43NzI1MzddLFxuICogICB6b29tOiAxMyxcbiAqICAgc3R5bGU6IHN0eWxlX29iamVjdCxcbiAqICAgaGFzaDogdHJ1ZSxcbiAqICAgdHJhbnNmb3JtUmVxdWVzdDogKHVybCwgcmVzb3VyY2VUeXBlKT0+IHtcbiAqICAgICBpZihyZXNvdXJjZVR5cGUgPT09ICdTb3VyY2UnICYmIHVybC5zdGFydHNXaXRoKCdodHRwOi8vbXlIb3N0JykpIHtcbiAqICAgICAgIHJldHVybiB7XG4gKiAgICAgICAgdXJsOiB1cmwucmVwbGFjZSgnaHR0cCcsICdodHRwcycpLFxuICogICAgICAgIGhlYWRlcnM6IHsgJ215LWN1c3RvbS1oZWFkZXInOiB0cnVlfSxcbiAqICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnICAvLyBJbmNsdWRlIGNvb2tpZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0c1xuICogICAgICB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqIEBzZWUgW0Rpc3BsYXkgYSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGVzLylcbiAqL1xuY2xhc3MgTWFwIGV4dGVuZHMgQ2FtZXJhIHtcbiAgICBzdHlsZTogU3R5bGU7XG4gICAgcGFpbnRlcjogUGFpbnRlcjtcblxuICAgIF9jb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9taXNzaW5nQ1NTQ2FuYXJ5OiBIVE1MRWxlbWVudDtcbiAgICBfY2FudmFzQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfY29udHJvbENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRyb2xQb3NpdGlvbnM6IHtbc3RyaW5nXTogSFRNTEVsZW1lbnR9O1xuICAgIF9pbnRlcmFjdGl2ZTogP2Jvb2xlYW47XG4gICAgX3Nob3dUaWxlQm91bmRhcmllczogP2Jvb2xlYW47XG4gICAgX3Nob3dDb2xsaXNpb25Cb3hlczogP2Jvb2xlYW47XG4gICAgX3Nob3dPdmVyZHJhd0luc3BlY3RvcjogYm9vbGVhbjtcbiAgICBfcmVwYWludDogP2Jvb2xlYW47XG4gICAgX3ZlcnRpY2VzOiA/Ym9vbGVhbjtcbiAgICBfY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgICBfbWF4VGlsZUNhY2hlU2l6ZTogbnVtYmVyO1xuICAgIF9mcmFtZTogP0NhbmNlbGFibGU7XG4gICAgX3N0eWxlRGlydHk6ID9ib29sZWFuO1xuICAgIF9zb3VyY2VzRGlydHk6ID9ib29sZWFuO1xuICAgIF9wbGFjZW1lbnREaXJ0eTogP2Jvb2xlYW47XG4gICAgX2xvYWRlZDogYm9vbGVhbjtcbiAgICBfdHJhY2tSZXNpemU6IGJvb2xlYW47XG4gICAgX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcjogYm9vbGVhbjtcbiAgICBfZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDogYm9vbGVhbjtcbiAgICBfYW50aWFsaWFzOiBib29sZWFuO1xuICAgIF9yZWZyZXNoRXhwaXJlZFRpbGVzOiBib29sZWFuO1xuICAgIF9oYXNoOiBIYXNoO1xuICAgIF9kZWxlZ2F0ZWRMaXN0ZW5lcnM6IGFueTtcbiAgICBfZmFkZUR1cmF0aW9uOiBudW1iZXI7XG4gICAgX2Nyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbjtcbiAgICBfY3Jvc3NGYWRpbmdGYWN0b3I6IG51bWJlcjtcbiAgICBfY29sbGVjdFJlc291cmNlVGltaW5nOiBib29sZWFuO1xuICAgIF9yZW5kZXJUYXNrUXVldWU6IFRhc2tRdWV1ZTtcbiAgICBfY29udHJvbHM6IEFycmF5PElDb250cm9sPjtcbiAgICBfbWFwSWQ6IG51bWJlcjtcbiAgICBfbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiBzdHJpbmc7XG4gICAgX3JlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgU2Nyb2xsWm9vbUhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIHpvb21pbmcgaW4gYW5kIG91dCB3aXRoIGEgc2Nyb2xsIHdoZWVsIG9yIHRyYWNrcGFkLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgc2Nyb2xsWm9vbWAgaW4gdGhlIHtAbGluayBTY3JvbGxab29tSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBzY3JvbGxab29tOiBTY3JvbGxab29tSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIHpvb21pbmcgdXNpbmcgYSBkcmFnIGdlc3R1cmUgd2l0aCB0aGUgU2hpZnQga2V5IHByZXNzZWQuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBib3hab29tYCBpbiB0aGUge0BsaW5rIEJveFpvb21IYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGJveFpvb206IEJveFpvb21IYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0sIHdoaWNoIGltcGxlbWVudHMgcm90YXRpbmcgdGhlIG1hcCB3aGlsZSBkcmFnZ2luZyB3aXRoIHRoZSByaWdodFxuICAgICAqIG1vdXNlIGJ1dHRvbiBvciB3aXRoIHRoZSBDb250cm9sIGtleSBwcmVzc2VkLiBGaW5kIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMgdXNpbmcgYGRyYWdSb3RhdGVgXG4gICAgICogaW4gdGhlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBkcmFnUm90YXRlOiBEcmFnUm90YXRlSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIGRyYWdnaW5nIHRoZSBtYXAgd2l0aCBhIG1vdXNlIG9yIHRvdWNoIGdlc3R1cmUuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBkcmFnUGFuYCBpbiB0aGUge0BsaW5rIERyYWdQYW5IYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGRyYWdQYW46IERyYWdQYW5IYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBLZXlib2FyZEhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSwgcm90YXRlLCBhbmQgcGFuIHRoZSBtYXAgdXNpbmcga2V5Ym9hcmRcbiAgICAgKiBzaG9ydGN1dHMuIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBga2V5Ym9hcmRgIGluIHRoZSB7QGxpbmsgS2V5Ym9hcmRIYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGtleWJvYXJkOiBLZXlib2FyZEhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIERvdWJsZUNsaWNrWm9vbUhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSBieSBkb3VibGUgY2xpY2tpbmcuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBkb3VibGVDbGlja1pvb21gIGluIHRoZSB7QGxpbmsgRG91YmxlQ2xpY2tab29tSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBkb3VibGVDbGlja1pvb206IERvdWJsZUNsaWNrWm9vbUhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSBvciByb3RhdGUgdGhlIG1hcCB3aXRoIHRvdWNoIGdlc3R1cmVzLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgdG91Y2hab29tUm90YXRlYCBpbiB0aGUge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJ9IHNlY3Rpb24uXG4gICAgICovXG4gICAgdG91Y2hab29tUm90YXRlOiBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogTWFwT3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWluWm9vbSAhPSBudWxsICYmIG9wdGlvbnMubWF4Wm9vbSAhPSBudWxsICYmIG9wdGlvbnMubWluWm9vbSA+IG9wdGlvbnMubWF4Wm9vbSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIG1pblpvb21gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0ob3B0aW9ucy5taW5ab29tLCBvcHRpb25zLm1heFpvb20sIG9wdGlvbnMucmVuZGVyV29ybGRDb3BpZXMpO1xuICAgICAgICBzdXBlcih0cmFuc2Zvcm0sIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX2ludGVyYWN0aXZlID0gb3B0aW9ucy5pbnRlcmFjdGl2ZTtcbiAgICAgICAgdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSA9IG9wdGlvbnMubWF4VGlsZUNhY2hlU2l6ZTtcbiAgICAgICAgdGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCA9IG9wdGlvbnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDtcbiAgICAgICAgdGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG4gICAgICAgIHRoaXMuX2FudGlhbGlhcyA9IG9wdGlvbnMuYW50aWFsaWFzO1xuICAgICAgICB0aGlzLl90cmFja1Jlc2l6ZSA9IG9wdGlvbnMudHJhY2tSZXNpemU7XG4gICAgICAgIHRoaXMuX2JlYXJpbmdTbmFwID0gb3B0aW9ucy5iZWFyaW5nU25hcDtcbiAgICAgICAgdGhpcy5fcmVmcmVzaEV4cGlyZWRUaWxlcyA9IG9wdGlvbnMucmVmcmVzaEV4cGlyZWRUaWxlcztcbiAgICAgICAgdGhpcy5fZmFkZUR1cmF0aW9uID0gb3B0aW9ucy5mYWRlRHVyYXRpb247XG4gICAgICAgIHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucyA9IG9wdGlvbnMuY3Jvc3NTb3VyY2VDb2xsaXNpb25zO1xuICAgICAgICB0aGlzLl9jcm9zc0ZhZGluZ0ZhY3RvciA9IDE7XG4gICAgICAgIHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyA9IG9wdGlvbnMuY29sbGVjdFJlc291cmNlVGltaW5nO1xuICAgICAgICB0aGlzLl9yZW5kZXJUYXNrUXVldWUgPSBuZXcgVGFza1F1ZXVlKCk7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xzID0gW107XG4gICAgICAgIHRoaXMuX21hcElkID0gdW5pcXVlSWQoKTtcblxuICAgICAgICB0aGlzLl9yZXF1ZXN0TWFuYWdlciA9IG5ldyBSZXF1ZXN0TWFuYWdlcihvcHRpb25zLnRyYW5zZm9ybVJlcXVlc3QsIG9wdGlvbnMuYWNjZXNzVG9rZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250YWluZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5jb250YWluZXIpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRhaW5lciAnJHtvcHRpb25zLmNvbnRhaW5lcn0nIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlOiAnY29udGFpbmVyJyBtdXN0IGJlIGEgU3RyaW5nIG9yIEhUTUxFbGVtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4Qm91bmRzKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1heEJvdW5kcyhvcHRpb25zLm1heEJvdW5kcyk7XG4gICAgICAgIH1cblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25XaW5kb3dPbmxpbmUnLFxuICAgICAgICAgICAgJ19vbldpbmRvd1Jlc2l6ZScsXG4gICAgICAgICAgICAnX2NvbnRleHRMb3N0JyxcbiAgICAgICAgICAgICdfY29udGV4dFJlc3RvcmVkJ1xuICAgICAgICBdLCB0aGlzKTtcblxuICAgICAgICB0aGlzLl9zZXR1cENvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9zZXR1cFBhaW50ZXIoKTtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbignbW92ZScsICgpID0+IHRoaXMuX3VwZGF0ZShmYWxzZSkpO1xuICAgICAgICB0aGlzLm9uKCdtb3ZlZW5kJywgKCkgPT4gdGhpcy5fdXBkYXRlKGZhbHNlKSk7XG4gICAgICAgIHRoaXMub24oJ3pvb20nLCAoKSA9PiB0aGlzLl91cGRhdGUodHJ1ZSkpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMuX29uV2luZG93T25saW5lLCBmYWxzZSk7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJpbmRIYW5kbGVycyh0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICBjb25zdCBoYXNoTmFtZSA9ICh0eXBlb2Ygb3B0aW9ucy5oYXNoID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmhhc2gpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5faGFzaCA9IG9wdGlvbnMuaGFzaCAmJiAobmV3IEhhc2goaGFzaE5hbWUpKS5hZGRUbyh0aGlzKTtcbiAgICAgICAgLy8gZG9uJ3Qgc2V0IHBvc2l0aW9uIGZyb20gb3B0aW9ucyBpZiBzZXQgdGhyb3VnaCBoYXNoXG4gICAgICAgIGlmICghdGhpcy5faGFzaCB8fCAhdGhpcy5faGFzaC5fb25IYXNoQ2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvKHtcbiAgICAgICAgICAgICAgICBjZW50ZXI6IG9wdGlvbnMuY2VudGVyLFxuICAgICAgICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbSxcbiAgICAgICAgICAgICAgICBiZWFyaW5nOiBvcHRpb25zLmJlYXJpbmcsXG4gICAgICAgICAgICAgICAgcGl0Y2g6IG9wdGlvbnMucGl0Y2hcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5ib3VuZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZml0Qm91bmRzKG9wdGlvbnMuYm91bmRzLCBleHRlbmQoe30sIG9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucywge2R1cmF0aW9uOiAwfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXNpemUoKTtcblxuICAgICAgICB0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkgPSBvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3R5bGUpIHRoaXMuc2V0U3R5bGUob3B0aW9ucy5zdHlsZSwge2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogb3B0aW9ucy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9KTtcblxuICAgICAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2wpXG4gICAgICAgICAgICB0aGlzLmFkZENvbnRyb2wobmV3IEF0dHJpYnV0aW9uQ29udHJvbCh7Y3VzdG9tQXR0cmlidXRpb246IG9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb259KSk7XG5cbiAgICAgICAgdGhpcy5hZGRDb250cm9sKG5ldyBMb2dvQ29udHJvbCgpLCBvcHRpb25zLmxvZ29Qb3NpdGlvbik7XG5cbiAgICAgICAgdGhpcy5vbignc3R5bGUubG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybS51bm1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wVG8oKHRoaXMuc3R5bGUuc3R5bGVzaGVldDogYW55KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uKCdkYXRhJywgKGV2ZW50OiBNYXBEYXRhRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZShldmVudC5kYXRhVHlwZSA9PT0gJ3N0eWxlJyk7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KGAke2V2ZW50LmRhdGFUeXBlfWRhdGFgLCBldmVudCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbignZGF0YWxvYWRpbmcnLCAoZXZlbnQ6IE1hcERhdGFFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudChgJHtldmVudC5kYXRhVHlwZX1kYXRhbG9hZGluZ2AsIGV2ZW50KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qXG4gICAgKiBSZXR1cm5zIGEgdW5pcXVlIG51bWJlciBmb3IgdGhpcyBtYXAgaW5zdGFuY2Ugd2hpY2ggaXMgdXNlZCBmb3IgdGhlIE1hcExvYWRFdmVudFxuICAgICogdG8gbWFrZSBzdXJlIHdlIG9ubHkgZmlyZSBvbmUgZXZlbnQgcGVyIGluc3RhbnRpYXRlZCBtYXAgb2JqZWN0LlxuICAgICogQHByaXZhdGVcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgKi9cbiAgICBfZ2V0TWFwSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXBJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIHtAbGluayBJQ29udHJvbH0gdG8gdGhlIG1hcCwgY2FsbGluZyBgY29udHJvbC5vbkFkZCh0aGlzKWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0lDb250cm9sfSBjb250cm9sIFRoZSB7QGxpbmsgSUNvbnRyb2x9IHRvIGFkZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3Bvc2l0aW9uXSBwb3NpdGlvbiBvbiB0aGUgbWFwIHRvIHdoaWNoIHRoZSBjb250cm9sIHdpbGwgYmUgYWRkZWQuXG4gICAgICogVmFsaWQgdmFsdWVzIGFyZSBgJ3RvcC1sZWZ0J2AsIGAndG9wLXJpZ2h0J2AsIGAnYm90dG9tLWxlZnQnYCwgYW5kIGAnYm90dG9tLXJpZ2h0J2AuIERlZmF1bHRzIHRvIGAndG9wLXJpZ2h0J2AuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBBZGQgem9vbSBhbmQgcm90YXRpb24gY29udHJvbHMgdG8gdGhlIG1hcC5cbiAgICAgKiBtYXAuYWRkQ29udHJvbChuZXcgbWFwYm94Z2wuTmF2aWdhdGlvbkNvbnRyb2woKSk7XG4gICAgICogQHNlZSBbRGlzcGxheSBtYXAgbmF2aWdhdGlvbiBjb250cm9sc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9uYXZpZ2F0aW9uLylcbiAgICAgKi9cbiAgICBhZGRDb250cm9sKGNvbnRyb2w6IElDb250cm9sLCBwb3NpdGlvbj86IENvbnRyb2xQb3NpdGlvbikge1xuICAgICAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCAmJiBjb250cm9sLmdldERlZmF1bHRQb3NpdGlvbikge1xuICAgICAgICAgICAgcG9zaXRpb24gPSBjb250cm9sLmdldERlZmF1bHRQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9ICd0b3AtcmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC5vbkFkZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgdG8gbWFwLmFkZENvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRyb2xFbGVtZW50ID0gY29udHJvbC5vbkFkZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fY29udHJvbHMucHVzaChjb250cm9sKTtcblxuICAgICAgICBjb25zdCBwb3NpdGlvbkNvbnRhaW5lciA9IHRoaXMuX2NvbnRyb2xQb3NpdGlvbnNbcG9zaXRpb25dO1xuICAgICAgICBpZiAocG9zaXRpb24uaW5kZXhPZignYm90dG9tJykgIT09IC0xKSB7XG4gICAgICAgICAgICBwb3NpdGlvbkNvbnRhaW5lci5pbnNlcnRCZWZvcmUoY29udHJvbEVsZW1lbnQsIHBvc2l0aW9uQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zaXRpb25Db250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGNvbnRyb2wgZnJvbSB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtJQ29udHJvbH0gY29udHJvbCBUaGUge0BsaW5rIElDb250cm9sfSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBEZWZpbmUgYSBuZXcgbmF2aWdhdGlvbiBjb250cm9sLlxuICAgICAqIHZhciBuYXZpZ2F0aW9uID0gbmV3IG1hcGJveGdsLk5hdmlnYXRpb25Db250cm9sKCk7XG4gICAgICogLy8gQWRkIHpvb20gYW5kIHJvdGF0aW9uIGNvbnRyb2xzIHRvIHRoZSBtYXAuXG4gICAgICogbWFwLmFkZENvbnRyb2wobmF2aWdhdGlvbik7XG4gICAgICogLy8gUmVtb3ZlIHpvb20gYW5kIHJvdGF0aW9uIGNvbnRyb2xzIGZyb20gdGhlIG1hcC5cbiAgICAgKiBtYXAucmVtb3ZlQ29udHJvbChuYXZpZ2F0aW9uKTtcbiAgICAgKi9cbiAgICByZW1vdmVDb250cm9sKGNvbnRyb2w6IElDb250cm9sKSB7XG4gICAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC5vblJlbW92ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgdG8gbWFwLnJlbW92ZUNvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNpID0gdGhpcy5fY29udHJvbHMuaW5kZXhPZihjb250cm9sKTtcbiAgICAgICAgaWYgKGNpID4gLTEpIHRoaXMuX2NvbnRyb2xzLnNwbGljZShjaSwgMSk7XG4gICAgICAgIGNvbnRyb2wub25SZW1vdmUodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2l6ZXMgdGhlIG1hcCBhY2NvcmRpbmcgdG8gdGhlIGRpbWVuc2lvbnMgb2YgaXRzXG4gICAgICogYGNvbnRhaW5lcmAgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIENoZWNrcyBpZiB0aGUgbWFwIGNvbnRhaW5lciBzaXplIGNoYW5nZWQgYW5kIHVwZGF0ZXMgdGhlIG1hcCBpZiBpdCBoYXMgY2hhbmdlZC5cbiAgICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgbWFwJ3MgYGNvbnRhaW5lcmAgaXMgcmVzaXplZCBwcm9ncmFtbWF0aWNhbGx5XG4gICAgICogb3Igd2hlbiB0aGUgbWFwIGlzIHNob3duIGFmdGVyIGJlaW5nIGluaXRpYWxseSBoaWRkZW4gd2l0aCBDU1MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBwYXNzZWQgdG8gYG1vdmVzdGFydGAsIGBtb3ZlYCwgYHJlc2l6ZWAsIGFuZCBgbW92ZWVuZGBcbiAgICAgKiAgIGV2ZW50cyB0aGF0IGdldCB0cmlnZ2VyZWQgYXMgYSByZXN1bHQgb2YgcmVzaXplLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGRpZmZlcmVudGlhdGluZyB0aGVcbiAgICAgKiAgIHNvdXJjZSBvZiBhbiBldmVudCAoZm9yIGV4YW1wbGUsIHVzZXItaW5pdGlhdGVkIG9yIHByb2dyYW1tYXRpY2FsbHktdHJpZ2dlcmVkIGV2ZW50cykuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBSZXNpemUgdGhlIG1hcCB3aGVuIHRoZSBtYXAgY29udGFpbmVyIGlzIHNob3duXG4gICAgICogLy8gYWZ0ZXIgYmVpbmcgaW5pdGlhbGx5IGhpZGRlbiB3aXRoIENTUy5cbiAgICAgKiB2YXIgbWFwRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpO1xuICAgICAqIGlmIChtYXBEaXYuc3R5bGUudmlzaWJpbGl0eSA9PT0gdHJ1ZSkgbWFwLnJlc2l6ZSgpO1xuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBkaW1lbnNpb25zWzBdO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBkaW1lbnNpb25zWzFdO1xuXG4gICAgICAgIHRoaXMuX3Jlc2l6ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0ucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLnBhaW50ZXIucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmVzdGFydCcsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdyZXNpemUnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdtb3ZlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuIFdoZW4gdGhlIGJlYXJpbmcgb3IgcGl0Y2ggaXMgbm9uLXplcm8sIHRoZSB2aXNpYmxlIHJlZ2lvbiBpcyBub3RcbiAgICAgKiBhbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc21hbGxlc3QgYm91bmRzIHRoYXQgZW5jb21wYXNzZXMgdGhlIHZpc2libGUgcmVnaW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGJvdW5kcyA9IG1hcC5nZXRCb3VuZHMoKTtcbiAgICAgKi9cbiAgICBnZXRCb3VuZHMoKTogTG5nTGF0Qm91bmRzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLmdldEJvdW5kcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gZ2VvZ3JhcGhpY2FsIGJvdW5kcyB0aGUgbWFwIGlzIGNvbnN0cmFpbmVkIHRvLCBvciBgbnVsbGAgaWYgbm9uZSBzZXQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbWF4Qm91bmRzID0gbWFwLmdldE1heEJvdW5kcygpO1xuICAgICAqL1xuICAgIGdldE1heEJvdW5kcygpOiBMbmdMYXRCb3VuZHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLmdldE1heEJvdW5kcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBnZW9ncmFwaGljYWwgYm91bmRzLlxuICAgICAqXG4gICAgICogUGFuIGFuZCB6b29tIG9wZXJhdGlvbnMgYXJlIGNvbnN0cmFpbmVkIHdpdGhpbiB0aGVzZSBib3VuZHMuXG4gICAgICogSWYgYSBwYW4gb3Igem9vbSBpcyBwZXJmb3JtZWQgdGhhdCB3b3VsZFxuICAgICAqIGRpc3BsYXkgcmVnaW9ucyBvdXRzaWRlIHRoZXNlIGJvdW5kcywgdGhlIG1hcCB3aWxsXG4gICAgICogaW5zdGVhZCBkaXNwbGF5IGEgcG9zaXRpb24gYW5kIHpvb20gbGV2ZWxcbiAgICAgKiBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgb3BlcmF0aW9uJ3MgcmVxdWVzdCB3aGlsZSBzdGlsbFxuICAgICAqIHJlbWFpbmluZyB3aXRoaW4gdGhlIGJvdW5kcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0Qm91bmRzTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IGJvdW5kcyBUaGUgbWF4aW11bSBib3VuZHMgdG8gc2V0LiBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSBtYXAncyBtYXhpbXVtIGJvdW5kcy5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIERlZmluZSBib3VuZHMgdGhhdCBjb25mb3JtIHRvIHRoZSBgTG5nTGF0Qm91bmRzTGlrZWAgb2JqZWN0LlxuICAgICAqIHZhciBib3VuZHMgPSBbXG4gICAgICogICBbLTc0LjA0NzI4LCA0MC42ODM5Ml0sIC8vIFt3ZXN0LCBzb3V0aF1cbiAgICAgKiAgIFstNzMuOTEwNTgsIDQwLjg3NzY0XSAgLy8gW2Vhc3QsIG5vcnRoXVxuICAgICAqIF07XG4gICAgICogLy8gU2V0IHRoZSBtYXAncyBtYXggYm91bmRzLlxuICAgICAqIG1hcC5zZXRNYXhCb3VuZHMoYm91bmRzKTtcbiAgICAgKi9cbiAgICBzZXRNYXhCb3VuZHMoYm91bmRzOiBMbmdMYXRCb3VuZHNMaWtlKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtLnNldE1heEJvdW5kcyhMbmdMYXRCb3VuZHMuY29udmVydChib3VuZHMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBtaW5pbXVtIHpvb20gbGV2ZWwuXG4gICAgICogSWYgdGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbCBpcyBsb3dlciB0aGFuIHRoZSBuZXcgbWluaW11bSxcbiAgICAgKiB0aGUgbWFwIHdpbGwgem9vbSB0byB0aGUgbmV3IG1pbmltdW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IG1pblpvb20gVGhlIG1pbmltdW0gem9vbSBsZXZlbCB0byBzZXQgKDAtMjQpLlxuICAgICAqICAgSWYgYG51bGxgIG9yIGB1bmRlZmluZWRgIGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY3VycmVudCBtaW5pbXVtIHpvb20gKGkuZS4gc2V0cyBpdCB0byAwKS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRNaW5ab29tKDEyLjI1KTtcbiAgICAgKi9cbiAgICBzZXRNaW5ab29tKG1pblpvb20/OiA/bnVtYmVyKSB7XG5cbiAgICAgICAgbWluWm9vbSA9IG1pblpvb20gPT09IG51bGwgfHwgbWluWm9vbSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdE1pblpvb20gOiBtaW5ab29tO1xuXG4gICAgICAgIGlmIChtaW5ab29tID49IGRlZmF1bHRNaW5ab29tICYmIG1pblpvb20gPD0gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSkge1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ubWluWm9vbSA9IG1pblpvb207XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Wm9vbSgpIDwgbWluWm9vbSkgdGhpcy5zZXRab29tKG1pblpvb20pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBtaW5ab29tIG11c3QgYmUgYmV0d2VlbiAke2RlZmF1bHRNaW5ab29tfSBhbmQgdGhlIGN1cnJlbnQgbWF4Wm9vbSwgaW5jbHVzaXZlYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgbWluaW11bSBhbGxvd2FibGUgem9vbSBsZXZlbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IG1pblpvb21cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtaW5ab29tID0gbWFwLmdldE1pblpvb20oKTtcbiAgICAgKi9cbiAgICBnZXRNaW5ab29tKCkgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbTsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIG1heGltdW0gem9vbSBsZXZlbC5cbiAgICAgKiBJZiB0aGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsIGlzIGhpZ2hlciB0aGFuIHRoZSBuZXcgbWF4aW11bSxcbiAgICAgKiB0aGUgbWFwIHdpbGwgem9vbSB0byB0aGUgbmV3IG1heGltdW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IG1heFpvb20gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBzZXQuXG4gICAgICogICBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSBjdXJyZW50IG1heGltdW0gem9vbSAoc2V0cyBpdCB0byAyMikuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0TWF4Wm9vbSgxOC43NSk7XG4gICAgICovXG4gICAgc2V0TWF4Wm9vbShtYXhab29tPzogP251bWJlcikge1xuXG4gICAgICAgIG1heFpvb20gPSBtYXhab29tID09PSBudWxsIHx8IG1heFpvb20gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNYXhab29tIDogbWF4Wm9vbTtcblxuICAgICAgICBpZiAobWF4Wm9vbSA+PSB0aGlzLnRyYW5zZm9ybS5taW5ab29tKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5tYXhab29tID0gbWF4Wm9vbTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRab29tKCkgPiBtYXhab29tKSB0aGlzLnNldFpvb20obWF4Wm9vbSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoYG1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluWm9vbWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIG1heGltdW0gYWxsb3dhYmxlIHpvb20gbGV2ZWwuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBtYXhab29tXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbWF4Wm9vbSA9IG1hcC5nZXRNYXhab29tKCk7XG4gICAgICovXG4gICAgZ2V0TWF4Wm9vbSgpIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb207IH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0YXRlIG9mIGByZW5kZXJXb3JsZENvcGllc2AuIElmIGB0cnVlYCwgbXVsdGlwbGUgY29waWVzIG9mIHRoZSB3b3JsZCB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSBiZXlvbmQgLTE4MCBhbmQgMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLiBJZiBzZXQgdG8gYGZhbHNlYDpcbiAgICAgKiAtIFdoZW4gdGhlIG1hcCBpcyB6b29tZWQgb3V0IGZhciBlbm91Z2ggdGhhdCBhIHNpbmdsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgd29ybGQgZG9lcyBub3QgZmlsbCB0aGUgbWFwJ3MgZW50aXJlXG4gICAgICogY29udGFpbmVyLCB0aGVyZSB3aWxsIGJlIGJsYW5rIHNwYWNlIGJleW9uZCAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUuXG4gICAgICogLSBGZWF0dXJlcyB0aGF0IGNyb3NzIDE4MCBhbmQgLTE4MCBkZWdyZWVzIGxvbmdpdHVkZSB3aWxsIGJlIGN1dCBpbiB0d28gKHdpdGggb25lIHBvcnRpb24gb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlXG4gICAgICogbWFwIGFuZCB0aGUgb3RoZXIgb24gdGhlIGxlZnQgZWRnZSBvZiB0aGUgbWFwKSBhdCBldmVyeSB6b29tIGxldmVsLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSByZW5kZXJXb3JsZENvcGllc1xuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHdvcmxkQ29waWVzUmVuZGVyZWQgPSBtYXAuZ2V0UmVuZGVyV29ybGRDb3BpZXMoKTtcbiAgICAgKiBAc2VlIFtSZW5kZXIgd29ybGQgY29waWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9yZW5kZXItd29ybGQtY29waWVzLylcbiAgICAgKi9cbiAgICBnZXRSZW5kZXJXb3JsZENvcGllcygpIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiBgcmVuZGVyV29ybGRDb3BpZXNgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZW5kZXJXb3JsZENvcGllcyBJZiBgdHJ1ZWAsIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgd29ybGQgd2lsbCBiZSByZW5kZXJlZCBzaWRlIGJ5IHNpZGUgYmV5b25kIC0xODAgYW5kIDE4MCBkZWdyZWVzIGxvbmdpdHVkZS4gSWYgc2V0IHRvIGBmYWxzZWA6XG4gICAgICogLSBXaGVuIHRoZSBtYXAgaXMgem9vbWVkIG91dCBmYXIgZW5vdWdoIHRoYXQgYSBzaW5nbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHdvcmxkIGRvZXMgbm90IGZpbGwgdGhlIG1hcCdzIGVudGlyZVxuICAgICAqIGNvbnRhaW5lciwgdGhlcmUgd2lsbCBiZSBibGFuayBzcGFjZSBiZXlvbmQgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLlxuICAgICAqIC0gRmVhdHVyZXMgdGhhdCBjcm9zcyAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUgd2lsbCBiZSBjdXQgaW4gdHdvICh3aXRoIG9uZSBwb3J0aW9uIG9uIHRoZSByaWdodCBlZGdlIG9mIHRoZVxuICAgICAqIG1hcCBhbmQgdGhlIG90aGVyIG9uIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIG1hcCkgYXQgZXZlcnkgem9vbSBsZXZlbC5cbiAgICAgKlxuICAgICAqIGB1bmRlZmluZWRgIGlzIHRyZWF0ZWQgYXMgYHRydWVgLCBgbnVsbGAgaXMgdHJlYXRlZCBhcyBgZmFsc2VgLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldFJlbmRlcldvcmxkQ29waWVzKHRydWUpO1xuICAgICAqIEBzZWUgW1JlbmRlciB3b3JsZCBjb3BpZXNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3JlbmRlci13b3JsZC1jb3BpZXMvKVxuICAgICAqL1xuICAgIHNldFJlbmRlcldvcmxkQ29waWVzKHJlbmRlcldvcmxkQ29waWVzPzogP2Jvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMgPSByZW5kZXJXb3JsZENvcGllcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgUG9pbnR9IHJlcHJlc2VudGluZyBwaXhlbCBjb29yZGluYXRlcywgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGBjb250YWluZXJgLFxuICAgICAqIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc3BlY2lmaWVkIGdlb2dyYXBoaWNhbCBsb2NhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gbG5nbGF0IFRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gdG8gcHJvamVjdC5cbiAgICAgKiBAcmV0dXJucyB7UG9pbnR9IFRoZSB7QGxpbmsgUG9pbnR9IGNvcnJlc3BvbmRpbmcgdG8gYGxuZ2xhdGAsIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBgY29udGFpbmVyYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBjb29yZGluYXRlID0gWy0xMjIuNDIwNjc5LCAzNy43NzI1MzddO1xuICAgICAqIHZhciBwb2ludCA9IG1hcC5wcm9qZWN0KGNvb3JkaW5hdGUpO1xuICAgICAqL1xuICAgIHByb2plY3QobG5nbGF0OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5sb2NhdGlvblBvaW50KExuZ0xhdC5jb252ZXJ0KGxuZ2xhdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgTG5nTGF0fSByZXByZXNlbnRpbmcgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIHRoYXQgY29ycmVzcG9uZFxuICAgICAqIHRvIHRoZSBzcGVjaWZpZWQgcGl4ZWwgY29vcmRpbmF0ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gcG9pbnQgVGhlIHBpeGVsIGNvb3JkaW5hdGVzIHRvIHVucHJvamVjdC5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUge0BsaW5rIExuZ0xhdH0gY29ycmVzcG9uZGluZyB0byBgcG9pbnRgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIC8vIFdoZW4gdGhlIG1hcCBpcyBjbGlja2VkLCBnZXQgdGhlIGdlb2dyYXBoaWMgY29vcmRpbmF0ZS5cbiAgICAgKiAgIHZhciBjb29yZGluYXRlID0gbWFwLnVucHJvamVjdChlLnBvaW50KTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB1bnByb2plY3QocG9pbnQ6IFBvaW50TGlrZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihQb2ludC5jb252ZXJ0KHBvaW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtYXAgaXMgcGFubmluZywgem9vbWluZywgcm90YXRpbmcsIG9yIHBpdGNoaW5nIGR1ZSB0byBhIGNhbWVyYSBhbmltYXRpb24gb3IgdXNlciBnZXN0dXJlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGlzTW92aW5nID0gbWFwLmlzTW92aW5nKCk7XG4gICAgICovXG4gICAgaXNNb3ZpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb3ZpbmcgfHxcbiAgICAgICAgICAgIHRoaXMuZHJhZ1Bhbi5pc0FjdGl2ZSgpIHx8XG4gICAgICAgICAgICB0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKSB8fFxuICAgICAgICAgICAgdGhpcy5zY3JvbGxab29tLmlzQWN0aXZlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtYXAgaXMgem9vbWluZyBkdWUgdG8gYSBjYW1lcmEgYW5pbWF0aW9uIG9yIHVzZXIgZ2VzdHVyZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBpc1pvb21pbmcgPSBtYXAuaXNab29taW5nKCk7XG4gICAgICovXG4gICAgaXNab29taW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fem9vbWluZyB8fFxuICAgICAgICAgICAgdGhpcy5zY3JvbGxab29tLmlzWm9vbWluZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFwIGlzIHJvdGF0aW5nIGR1ZSB0byBhIGNhbWVyYSBhbmltYXRpb24gb3IgdXNlciBnZXN0dXJlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmlzUm90YXRpbmcoKTtcbiAgICAgKi9cbiAgICBpc1JvdGF0aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpbmcgfHxcbiAgICAgICAgICAgIHRoaXMuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3IgZXZlbnRzIG9mIGEgc3BlY2lmaWVkIHR5cGUuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG5hbWUgb25cbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gYWRkIGEgbGlzdGVuIGZvci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqICAgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBkYXRhIG9iamVjdCBwYXNzZWQgdG8gYGZpcmVgLFxuICAgICAqICAgZXh0ZW5kZWQgd2l0aCBgdGFyZ2V0YCBhbmQgYHR5cGVgIHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgZm9yIGV2ZW50cyBvZiBhIHNwZWNpZmllZCB0eXBlIG9jY3VycmluZyBvbiBmZWF0dXJlcyBpbiBhIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIGxpc3RlbiBmb3I7IG9uZSBvZiBgJ21vdXNlZG93bidgLCBgJ21vdXNldXAnYCwgYCdjbGljaydgLCBgJ2RibGNsaWNrJ2AsXG4gICAgICogYCdtb3VzZW1vdmUnYCwgYCdtb3VzZWVudGVyJ2AsIGAnbW91c2VsZWF2ZSdgLCBgJ21vdXNlb3ZlcidgLCBgJ21vdXNlb3V0J2AsIGAnY29udGV4dG1lbnUnYCwgYCd0b3VjaHN0YXJ0J2AsXG4gICAgICogYCd0b3VjaGVuZCdgLCBvciBgJ3RvdWNoY2FuY2VsJ2AuIGBtb3VzZWVudGVyYCBhbmQgYG1vdXNlb3ZlcmAgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY3Vyc29yIGVudGVyc1xuICAgICAqIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGF5ZXIgZnJvbSBvdXRzaWRlIHRoYXQgbGF5ZXIgb3Igb3V0c2lkZSB0aGUgbWFwIGNhbnZhcy4gYG1vdXNlbGVhdmVgXG4gICAgICogYW5kIGBtb3VzZW91dGAgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY3Vyc29yIGxlYXZlcyBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgc3BlY2lmaWVkIGxheWVyLCBvciBsZWF2ZXNcbiAgICAgKiB0aGUgbWFwIGNhbnZhcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgYSBzdHlsZSBsYXllci4gT25seSBldmVudHMgd2hvc2UgbG9jYXRpb24gaXMgd2l0aGluIGEgdmlzaWJsZVxuICAgICAqIGZlYXR1cmUgaW4gdGhpcyBsYXllciB3aWxsIHRyaWdnZXIgdGhlIGxpc3RlbmVyLiBUaGUgZXZlbnQgd2lsbCBoYXZlIGEgYGZlYXR1cmVzYCBwcm9wZXJ0eSBjb250YWluaW5nXG4gICAgICogYW4gYXJyYXkgb2YgdGhlIG1hdGNoaW5nIGZlYXR1cmVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgb24odHlwZTogTWFwRXZlbnQsIGxheWVySWQ6IGFueSwgbGlzdGVuZXI6IGFueSkge1xuICAgICAgICBpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLm9uKHR5cGUsIGxheWVySWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVsZWdhdGVkTGlzdGVuZXIgPSAoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdtb3VzZWVudGVyJyB8fCB0eXBlID09PSAnbW91c2VvdmVyJykge1xuICAgICAgICAgICAgICAgIGxldCBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgbW91c2Vtb3ZlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmdldExheWVyKGxheWVySWQpID8gdGhpcy5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoZS5wb2ludCwge2xheWVyczogW2xheWVySWRdfSkgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbW91c2Vpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIG5ldyBNYXBNb3VzZUV2ZW50KHR5cGUsIHRoaXMsIGUub3JpZ2luYWxFdmVudCwge2ZlYXR1cmVzfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3VzZW91dCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtsYXllcjogbGF5ZXJJZCwgbGlzdGVuZXIsIGRlbGVnYXRlczoge21vdXNlbW92ZSwgbW91c2VvdXR9fTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21vdXNlbGVhdmUnIHx8IHR5cGUgPT09ICdtb3VzZW91dCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5nZXRMYXllcihsYXllcklkKSA/IHRoaXMucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUucG9pbnQsIHtsYXllcnM6IFtsYXllcklkXX0pIDogW107XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vdXNlaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgbmV3IE1hcE1vdXNlRXZlbnQodHlwZSwgdGhpcywgZS5vcmlnaW5hbEV2ZW50KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vdXNlb3V0ID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vdXNlaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgbmV3IE1hcE1vdXNlRXZlbnQodHlwZSwgdGhpcywgZS5vcmlnaW5hbEV2ZW50KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB7bGF5ZXI6IGxheWVySWQsIGxpc3RlbmVyLCBkZWxlZ2F0ZXM6IHttb3VzZW1vdmUsIG1vdXNlb3V0fX07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGVnYXRlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmdldExheWVyKGxheWVySWQpID8gdGhpcy5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoZS5wb2ludCwge2xheWVyczogW2xheWVySWRdfSkgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSBuZWVkIHRvIG11dGF0ZSB0aGUgb3JpZ2luYWwgZXZlbnQsIHNvIHRoYXQgcHJldmVudERlZmF1bHQgd29ya3MgYXMgZXhwZWN0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmZlYXR1cmVzID0gZmVhdHVyZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGUuZmVhdHVyZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB7bGF5ZXI6IGxheWVySWQsIGxpc3RlbmVyLCBkZWxlZ2F0ZXM6IHtbdHlwZV06IGRlbGVnYXRlfX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzID0gdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzIHx8IHt9O1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV0gPSB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV0gfHwgW107XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0eXBlXS5wdXNoKGRlbGVnYXRlZExpc3RlbmVyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IGluIGRlbGVnYXRlZExpc3RlbmVyLmRlbGVnYXRlcykge1xuICAgICAgICAgICAgdGhpcy5vbigoZXZlbnQ6IGFueSksIGRlbGVnYXRlZExpc3RlbmVyLmRlbGVnYXRlc1tldmVudF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lciBwcmV2aW91c2x5IGFkZGVkIHdpdGggYE1hcCNvbmAuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG5hbWUgb2ZmXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHByZXZpb3VzbHkgdXNlZCB0byBpbnN0YWxsIHRoZSBsaXN0ZW5lci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gcHJldmlvdXNseSBpbnN0YWxsZWQgYXMgYSBsaXN0ZW5lci5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIGxheWVyLXNwZWNpZmljIGV2ZW50cyBwcmV2aW91c2x5IGFkZGVkIHdpdGggYE1hcCNvbmAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSBwcmV2aW91c2x5IHVzZWQgdG8gaW5zdGFsbCB0aGUgbGlzdGVuZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIGxheWVyIElEIHByZXZpb3VzbHkgdXNlZCB0byBpbnN0YWxsIHRoZSBsaXN0ZW5lci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gcHJldmlvdXNseSBpbnN0YWxsZWQgYXMgYSBsaXN0ZW5lci5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBvZmYodHlwZTogTWFwRXZlbnQsIGxheWVySWQ6IGFueSwgbGlzdGVuZXI6IGFueSkge1xuICAgICAgICBpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLm9mZih0eXBlLCBsYXllcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMgJiYgdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGVnYXRlZExpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZWRMaXN0ZW5lci5sYXllciA9PT0gbGF5ZXJJZCAmJiBkZWxlZ2F0ZWRMaXN0ZW5lci5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBldmVudCBpbiBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmKChldmVudDogYW55KSwgZGVsZWdhdGVkTGlzdGVuZXIuZGVsZWdhdGVzW2V2ZW50XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBbR2VvSlNPTl0oaHR0cDovL2dlb2pzb24ub3JnLylcbiAgICAgKiBbRmVhdHVyZSBvYmplY3RzXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NiNzZWN0aW9uLTMuMilcbiAgICAgKiByZXByZXNlbnRpbmcgdmlzaWJsZSBmZWF0dXJlcyB0aGF0IHNhdGlzZnkgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZXxBcnJheTxQb2ludExpa2U+fSBbZ2VvbWV0cnldIC0gVGhlIGdlb21ldHJ5IG9mIHRoZSBxdWVyeSByZWdpb246XG4gICAgICogZWl0aGVyIGEgc2luZ2xlIHBvaW50IG9yIHNvdXRod2VzdCBhbmQgbm9ydGhlYXN0IHBvaW50cyBkZXNjcmliaW5nIGEgYm91bmRpbmcgYm94LlxuICAgICAqIE9taXR0aW5nIHRoaXMgcGFyYW1ldGVyIChpLmUuIGNhbGxpbmcge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9IHdpdGggemVybyBhcmd1bWVudHMsXG4gICAgICogb3Igd2l0aCBvbmx5IGEgYG9wdGlvbnNgIGFyZ3VtZW50KSBpcyBlcXVpdmFsZW50IHRvIHBhc3NpbmcgYSBib3VuZGluZyBib3ggZW5jb21wYXNzaW5nIHRoZSBlbnRpcmVcbiAgICAgKiBtYXAgdmlld3BvcnQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW29wdGlvbnMubGF5ZXJzXSBBbiBhcnJheSBvZiBbc3R5bGUgbGF5ZXIgSURzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXItaWQpIGZvciB0aGUgcXVlcnkgdG8gaW5zcGVjdC5cbiAgICAgKiAgIE9ubHkgZmVhdHVyZXMgd2l0aGluIHRoZXNlIGxheWVycyB3aWxsIGJlIHJldHVybmVkLiBJZiB0aGlzIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIGFsbCBsYXllcnMgd2lsbCBiZSBjaGVja2VkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLmZpbHRlcl0gQSBbZmlsdGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNvdGhlci1maWx0ZXIpXG4gICAgICogICB0byBsaW1pdCBxdWVyeSByZXN1bHRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgW29wdGlvbnMuZmlsdGVyXSBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBbiBhcnJheSBvZiBbR2VvSlNPTl0oaHR0cDovL2dlb2pzb24ub3JnLylcbiAgICAgKiBbZmVhdHVyZSBvYmplY3RzXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NiNzZWN0aW9uLTMuMikuXG4gICAgICpcbiAgICAgKiBUaGUgYHByb3BlcnRpZXNgIHZhbHVlIG9mIGVhY2ggcmV0dXJuZWQgZmVhdHVyZSBvYmplY3QgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgb2YgaXRzIHNvdXJjZSBmZWF0dXJlLiBGb3IgR2VvSlNPTiBzb3VyY2VzLCBvbmx5XG4gICAgICogc3RyaW5nIGFuZCBudW1lcmljIHByb3BlcnR5IHZhbHVlcyBhcmUgc3VwcG9ydGVkIChpLmUuIGBudWxsYCwgYEFycmF5YCwgYW5kIGBPYmplY3RgIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCkuXG4gICAgICpcbiAgICAgKiBFYWNoIGZlYXR1cmUgaW5jbHVkZXMgdG9wLWxldmVsIGBsYXllcmAsIGBzb3VyY2VgLCBhbmQgYHNvdXJjZUxheWVyYCBwcm9wZXJ0aWVzLiBUaGUgYGxheWVyYCBwcm9wZXJ0eSBpcyBhbiBvYmplY3RcbiAgICAgKiByZXByZXNlbnRpbmcgdGhlIHN0eWxlIGxheWVyIHRvICB3aGljaCB0aGUgZmVhdHVyZSBiZWxvbmdzLiBMYXlvdXQgYW5kIHBhaW50IHByb3BlcnRpZXMgaW4gdGhpcyBvYmplY3QgY29udGFpbiB2YWx1ZXNcbiAgICAgKiB3aGljaCBhcmUgZnVsbHkgZXZhbHVhdGVkIGZvciB0aGUgZ2l2ZW4gem9vbSBsZXZlbCBhbmQgZmVhdHVyZS5cbiAgICAgKlxuICAgICAqIE9ubHkgZmVhdHVyZXMgdGhhdCBhcmUgY3VycmVudGx5IHJlbmRlcmVkIGFyZSBpbmNsdWRlZC4gU29tZSBmZWF0dXJlcyB3aWxsICoqbm90KiogYmUgaW5jbHVkZWQsIGxpa2U6XG4gICAgICpcbiAgICAgKiAtIEZlYXR1cmVzIGZyb20gbGF5ZXJzIHdob3NlIGB2aXNpYmlsaXR5YCBwcm9wZXJ0eSBpcyBgXCJub25lXCJgLlxuICAgICAqIC0gRmVhdHVyZXMgZnJvbSBsYXllcnMgd2hvc2Ugem9vbSByYW5nZSBleGNsdWRlcyB0aGUgY3VycmVudCB6b29tIGxldmVsLlxuICAgICAqIC0gU3ltYm9sIGZlYXR1cmVzIHRoYXQgaGF2ZSBiZWVuIGhpZGRlbiBkdWUgdG8gdGV4dCBvciBpY29uIGNvbGxpc2lvbi5cbiAgICAgKlxuICAgICAqIEZlYXR1cmVzIGZyb20gYWxsIG90aGVyIGxheWVycyBhcmUgaW5jbHVkZWQsIGluY2x1ZGluZyBmZWF0dXJlcyB0aGF0IG1heSBoYXZlIG5vIHZpc2libGVcbiAgICAgKiBjb250cmlidXRpb24gdG8gdGhlIHJlbmRlcmVkIHJlc3VsdDsgZm9yIGV4YW1wbGUsIGJlY2F1c2UgdGhlIGxheWVyJ3Mgb3BhY2l0eSBvciBjb2xvciBhbHBoYSBjb21wb25lbnQgaXMgc2V0IHRvXG4gICAgICogMC5cbiAgICAgKlxuICAgICAqIFRoZSB0b3Btb3N0IHJlbmRlcmVkIGZlYXR1cmUgYXBwZWFycyBmaXJzdCBpbiB0aGUgcmV0dXJuZWQgYXJyYXksIGFuZCBzdWJzZXF1ZW50IGZlYXR1cmVzIGFyZSBzb3J0ZWQgYnlcbiAgICAgKiBkZXNjZW5kaW5nIHotb3JkZXIuIEZlYXR1cmVzIHRoYXQgYXJlIHJlbmRlcmVkIG11bHRpcGxlIHRpbWVzIChkdWUgdG8gd3JhcHBpbmcgYWNyb3NzIHRoZSBhbnRpbWVyaWRpYW4gYXQgbG93XG4gICAgICogem9vbSBsZXZlbHMpIGFyZSByZXR1cm5lZCBvbmx5IG9uY2UgKHRob3VnaCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY2F2ZWF0KS5cbiAgICAgKlxuICAgICAqIEJlY2F1c2UgZmVhdHVyZXMgY29tZSBmcm9tIHRpbGVkIHZlY3RvciBkYXRhIG9yIEdlb0pTT04gZGF0YSB0aGF0IGlzIGNvbnZlcnRlZCB0byB0aWxlcyBpbnRlcm5hbGx5LCBmZWF0dXJlXG4gICAgICogZ2VvbWV0cmllcyBtYXkgYmUgc3BsaXQgb3IgZHVwbGljYXRlZCBhY3Jvc3MgdGlsZSBib3VuZGFyaWVzIGFuZCwgYXMgYSByZXN1bHQsIGZlYXR1cmVzIG1heSBhcHBlYXIgbXVsdGlwbGVcbiAgICAgKiB0aW1lcyBpbiBxdWVyeSByZXN1bHRzLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGVyZSBpcyBhIGhpZ2h3YXkgcnVubmluZyB0aHJvdWdoIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgYSBxdWVyeS5cbiAgICAgKiBUaGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkgd2lsbCBiZSB0aG9zZSBwYXJ0cyBvZiB0aGUgaGlnaHdheSB0aGF0IGxpZSB3aXRoaW4gdGhlIG1hcCB0aWxlcyBjb3ZlcmluZyB0aGUgYm91bmRpbmdcbiAgICAgKiByZWN0YW5nbGUsIGV2ZW4gaWYgdGhlIGhpZ2h3YXkgZXh0ZW5kcyBpbnRvIG90aGVyIHRpbGVzLCBhbmQgdGhlIHBvcnRpb24gb2YgdGhlIGhpZ2h3YXkgd2l0aGluIGVhY2ggbWFwIHRpbGVcbiAgICAgKiB3aWxsIGJlIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgZmVhdHVyZS4gU2ltaWxhcmx5LCBhIHBvaW50IGZlYXR1cmUgbmVhciBhIHRpbGUgYm91bmRhcnkgbWF5IGFwcGVhciBpbiBtdWx0aXBsZVxuICAgICAqIHRpbGVzIGR1ZSB0byB0aWxlIGJ1ZmZlcmluZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRmluZCBhbGwgZmVhdHVyZXMgYXQgYSBwb2ludFxuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICogICBbMjAsIDM1XSxcbiAgICAgKiAgIHsgbGF5ZXJzOiBbJ215LWxheWVyLW5hbWUnXSB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRmluZCBhbGwgZmVhdHVyZXMgd2l0aGluIGEgc3RhdGljIGJvdW5kaW5nIGJveFxuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICogICBbWzEwLCAyMF0sIFszMCwgNTBdXSxcbiAgICAgKiAgIHsgbGF5ZXJzOiBbJ215LWxheWVyLW5hbWUnXSB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRmluZCBhbGwgZmVhdHVyZXMgd2l0aGluIGEgYm91bmRpbmcgYm94IGFyb3VuZCBhIHBvaW50XG4gICAgICogdmFyIHdpZHRoID0gMTA7XG4gICAgICogdmFyIGhlaWdodCA9IDIwO1xuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoW1xuICAgICAqICAgW3BvaW50LnggLSB3aWR0aCAvIDIsIHBvaW50LnkgLSBoZWlnaHQgLyAyXSxcbiAgICAgKiAgIFtwb2ludC54ICsgd2lkdGggLyAyLCBwb2ludC55ICsgaGVpZ2h0IC8gMl1cbiAgICAgKiBdLCB7IGxheWVyczogWydteS1sYXllci1uYW1lJ10gfSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFF1ZXJ5IGFsbCByZW5kZXJlZCBmZWF0dXJlcyBmcm9tIGEgc2luZ2xlIGxheWVyXG4gICAgICogdmFyIGZlYXR1cmVzID0gbWFwLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh7IGxheWVyczogWydteS1sYXllci1uYW1lJ10gfSk7XG4gICAgICogQHNlZSBbR2V0IGZlYXR1cmVzIHVuZGVyIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3F1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAgICAgKiBAc2VlIFtGaWx0ZXIgZmVhdHVyZXMgd2l0aGluIG1hcCB2aWV3XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1mZWF0dXJlcy13aXRoaW4tbWFwLXZpZXcvKVxuICAgICAqL1xuICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhnZW9tZXRyeT86IFBvaW50TGlrZSB8IFtQb2ludExpa2UsIFBvaW50TGlrZV0sIG9wdGlvbnM/OiBPYmplY3QpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcmFtZXRlciBjYW4gYmUgb21pdHRlZCBlbnRpcmVseSwgbWFraW5nIHRoaXMgZWZmZWN0aXZlbHkgYW4gb3ZlcmxvYWRlZCBtZXRob2RcbiAgICAgICAgLy8gd2l0aCB0d28gc2lnbmF0dXJlczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhnZW9tZXRyeTogUG9pbnRMaWtlIHwgW1BvaW50TGlrZSwgUG9pbnRMaWtlXSwgb3B0aW9ucz86IE9iamVjdClcbiAgICAgICAgLy8gICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhvcHRpb25zPzogT2JqZWN0KVxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGVyZSBubyB3YXkgdG8gZXhwcmVzcyB0aGF0IGluIGEgd2F5IHRoYXQncyBjb21wYXRpYmxlIHdpdGggYm90aCBmbG93IGFuZCBkb2N1bWVudGF0aW9uLmpzLlxuICAgICAgICAvLyBSZWxhdGVkOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTU1NlxuXG4gICAgICAgIGlmICghdGhpcy5zdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiBnZW9tZXRyeSAhPT0gdW5kZWZpbmVkICYmICEoZ2VvbWV0cnkgaW5zdGFuY2VvZiBQb2ludCkgJiYgIUFycmF5LmlzQXJyYXkoZ2VvbWV0cnkpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gKGdlb21ldHJ5OiBPYmplY3QpO1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9tZXRyeSB8fCBbWzAsIDBdLCBbdGhpcy50cmFuc2Zvcm0ud2lkdGgsIHRoaXMudHJhbnNmb3JtLmhlaWdodF1dO1xuXG4gICAgICAgIGxldCBxdWVyeUdlb21ldHJ5O1xuICAgICAgICBpZiAoZ2VvbWV0cnkgaW5zdGFuY2VvZiBQb2ludCB8fCB0eXBlb2YgZ2VvbWV0cnlbMF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBxdWVyeUdlb21ldHJ5ID0gW1BvaW50LmNvbnZlcnQoZ2VvbWV0cnkpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRsID0gUG9pbnQuY29udmVydChnZW9tZXRyeVswXSk7XG4gICAgICAgICAgICBjb25zdCBiciA9IFBvaW50LmNvbnZlcnQoZ2VvbWV0cnlbMV0pO1xuICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSA9IFt0bCwgbmV3IFBvaW50KGJyLngsIHRsLnkpLCBiciwgbmV3IFBvaW50KHRsLngsIGJyLnkpLCB0bF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMocXVlcnlHZW9tZXRyeSwgb3B0aW9ucywgdGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgW0dlb0pTT05dKGh0dHA6Ly9nZW9qc29uLm9yZy8pXG4gICAgICogW0ZlYXR1cmUgb2JqZWN0c10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc5NDYjc2VjdGlvbi0zLjIpXG4gICAgICogcmVwcmVzZW50aW5nIGZlYXR1cmVzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHZlY3RvciB0aWxlIG9yIEdlb0pTT04gc291cmNlIHRoYXQgc2F0aXNmeSB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VJZCBUaGUgSUQgb2YgdGhlIHZlY3RvciB0aWxlIG9yIEdlb0pTT04gc291cmNlIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1ldGVyc11cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtZXRlcnMuc291cmNlTGF5ZXJdIFRoZSBuYW1lIG9mIHRoZSBbc291cmNlIGxheWVyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3NvdXJjZS1sYXllci8pXG4gICAgICogICB0byBxdWVyeS4gKkZvciB2ZWN0b3IgdGlsZSBzb3VyY2VzLCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZC4qIEZvciBHZW9KU09OIHNvdXJjZXMsIGl0IGlzIGlnbm9yZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcmFtZXRlcnMuZmlsdGVyXSBBIFtmaWx0ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI290aGVyLWZpbHRlcilcbiAgICAgKiAgIHRvIGxpbWl0IHF1ZXJ5IHJlc3VsdHMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcGFyYW1ldGVycy52YWxpZGF0ZT10cnVlXSBXaGV0aGVyIHRvIGNoZWNrIGlmIHRoZSBbcGFyYW1ldGVycy5maWx0ZXJdIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IEFuIGFycmF5IG9mIFtHZW9KU09OXShodHRwOi8vZ2VvanNvbi5vcmcvKVxuICAgICAqIFtGZWF0dXJlIG9iamVjdHNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3OTQ2I3NlY3Rpb24tMy4yKS5cbiAgICAgKlxuICAgICAqIEluIGNvbnRyYXN0IHRvIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFsbCBmZWF0dXJlcyBtYXRjaGluZyB0aGUgcXVlcnkgcGFyYW1ldGVycyxcbiAgICAgKiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSByZW5kZXJlZCBieSB0aGUgY3VycmVudCBzdHlsZSAoaS5lLiB2aXNpYmxlKS4gVGhlIGRvbWFpbiBvZiB0aGUgcXVlcnkgaW5jbHVkZXMgYWxsIGN1cnJlbnRseS1sb2FkZWRcbiAgICAgKiB2ZWN0b3IgdGlsZXMgYW5kIEdlb0pTT04gc291cmNlIHRpbGVzOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRpbGVzIG91dHNpZGUgdGhlIGN1cnJlbnRseVxuICAgICAqIHZpc2libGUgdmlld3BvcnQuXG4gICAgICpcbiAgICAgKiBCZWNhdXNlIGZlYXR1cmVzIGNvbWUgZnJvbSB0aWxlZCB2ZWN0b3IgZGF0YSBvciBHZW9KU09OIGRhdGEgdGhhdCBpcyBjb252ZXJ0ZWQgdG8gdGlsZXMgaW50ZXJuYWxseSwgZmVhdHVyZVxuICAgICAqIGdlb21ldHJpZXMgbWF5IGJlIHNwbGl0IG9yIGR1cGxpY2F0ZWQgYWNyb3NzIHRpbGUgYm91bmRhcmllcyBhbmQsIGFzIGEgcmVzdWx0LCBmZWF0dXJlcyBtYXkgYXBwZWFyIG11bHRpcGxlXG4gICAgICogdGltZXMgaW4gcXVlcnkgcmVzdWx0cy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlcmUgaXMgYSBoaWdod2F5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIGEgcXVlcnkuXG4gICAgICogVGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5IHdpbGwgYmUgdGhvc2UgcGFydHMgb2YgdGhlIGhpZ2h3YXkgdGhhdCBsaWUgd2l0aGluIHRoZSBtYXAgdGlsZXMgY292ZXJpbmcgdGhlIGJvdW5kaW5nXG4gICAgICogcmVjdGFuZ2xlLCBldmVuIGlmIHRoZSBoaWdod2F5IGV4dGVuZHMgaW50byBvdGhlciB0aWxlcywgYW5kIHRoZSBwb3J0aW9uIG9mIHRoZSBoaWdod2F5IHdpdGhpbiBlYWNoIG1hcCB0aWxlXG4gICAgICogd2lsbCBiZSByZXR1cm5lZCBhcyBhIHNlcGFyYXRlIGZlYXR1cmUuIFNpbWlsYXJseSwgYSBwb2ludCBmZWF0dXJlIG5lYXIgYSB0aWxlIGJvdW5kYXJ5IG1heSBhcHBlYXIgaW4gbXVsdGlwbGVcbiAgICAgKiB0aWxlcyBkdWUgdG8gdGlsZSBidWZmZXJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEZpbmQgYWxsIGZlYXR1cmVzIGluIG9uZSBzb3VyY2UgbGF5ZXIgaW4gYSB2ZWN0b3Igc291cmNlXG4gICAgICogdmFyIGZlYXR1cmVzID0gbWFwLnF1ZXJ5U291cmNlRmVhdHVyZXMoJ3lvdXItc291cmNlLWlkJywge1xuICAgICAqICAgc291cmNlTGF5ZXI6ICd5b3VyLXNvdXJjZS1sYXllcidcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyBjb250YWluaW5nIHNpbWlsYXIgZGF0YV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9xdWVyeS1zaW1pbGFyLWZlYXR1cmVzLylcbiAgICAgKi9cbiAgICBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUlkOiBzdHJpbmcsIHBhcmFtZXRlcnM6ID97c291cmNlTGF5ZXI6ID9zdHJpbmcsIGZpbHRlcjogP0FycmF5PGFueT4sIHZhbGlkYXRlPzogYm9vbGVhbn0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUucXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VJZCwgcGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgbWFwJ3MgTWFwYm94IHN0eWxlIG9iamVjdCB3aXRoIGEgbmV3IHZhbHVlLiBJZiBhIHN0eWxlIGFscmVhZHkgaXMgc2V0IGFuZCBvcHRpb25zLmRpZmYgaXMgdHJ1ZSxcbiAgICAgKiB0aGlzIGNvbXBhcmVzIHRoZSBzdHlsZSBhZ2FpbnN0IHRoZSBtYXAncyBjdXJyZW50IHN0YXRlIGFuZCBwZXJmb3JtcyBvbmx5IHRoZSBjaGFuZ2VzIG5lY2Vzc2FyeSB0byBtYWtlXG4gICAgICogdGhlIG1hcCBzdHlsZSBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHlsZSBBIEpTT04gb2JqZWN0IGNvbmZvcm1pbmcgdG8gdGhlIHNjaGVtYSBkZXNjcmliZWQgaW4gdGhlXG4gICAgICogICBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vbWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8pLCBvciBhIFVSTCB0byBzdWNoIEpTT04uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlmZj10cnVlXSBJZiBmYWxzZSwgZm9yY2UgYSAnZnVsbCcgdXBkYXRlLCByZW1vdmluZyB0aGUgY3VycmVudCBzdHlsZVxuICAgICAqICAgYW5kIGJ1aWxkaW5nIHRoZSBnaXZlbiBvbmUgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGEgZGlmZi1iYXNlZCB1cGRhdGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT0nc2Fucy1zZXJpZiddIERlZmluZXMgYSBDU1NcbiAgICAgKiAgIGZvbnQtZmFtaWx5IGZvciBsb2NhbGx5IG92ZXJyaWRpbmcgZ2VuZXJhdGlvbiBvZiBnbHlwaHMgaW4gdGhlICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzJywgJ0hpcmFnYW5hJywgJ0thdGFrYW5hJyBhbmQgJ0hhbmd1bCBTeWxsYWJsZXMnIHJhbmdlcy5cbiAgICAgKiAgIEluIHRoZXNlIHJhbmdlcywgZm9udCBzZXR0aW5ncyBmcm9tIHRoZSBtYXAncyBzdHlsZSB3aWxsIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgZm9udC13ZWlnaHQga2V5d29yZHMgKGxpZ2h0L3JlZ3VsYXIvbWVkaXVtL2JvbGQpLlxuICAgICAqICAgU2V0IHRvIGBmYWxzZWAsIHRvIGVuYWJsZSBmb250IHNldHRpbmdzIGZyb20gdGhlIG1hcCdzIHN0eWxlIGZvciB0aGVzZSBnbHlwaCByYW5nZXMuXG4gICAgICogICBGb3JjZXMgYSBmdWxsIHVwZGF0ZS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAc2VlIFtDaGFuZ2UgYSBtYXAncyBzdHlsZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9zZXRzdHlsZS8pXG4gICAgICovXG4gICAgc2V0U3R5bGUoc3R5bGU6IFN0eWxlU3BlY2lmaWNhdGlvbiB8IHN0cmluZyB8IG51bGwsIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe30sIHtsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6IHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmICgob3B0aW9ucy5kaWZmICE9PSBmYWxzZSAmJiBvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSA9PT0gdGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KSAmJiB0aGlzLnN0eWxlICYmIHN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWZmU3R5bGUoc3R5bGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkgPSBvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVTdHlsZShzdHlsZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlU3R5bGUoc3R5bGU6IFN0eWxlU3BlY2lmaWNhdGlvbiB8IHN0cmluZyB8IG51bGwsICBvcHRpb25zPzoge2RpZmY/OiBib29sZWFufSAmIFN0eWxlT3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5zdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5fcmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0eWxlKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdHlsZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdHlsZSA9IG5ldyBTdHlsZSh0aGlzLCBvcHRpb25zIHx8IHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudCh0aGlzLCB7c3R5bGU6IHRoaXMuc3R5bGV9KTtcblxuICAgICAgICBpZiAodHlwZW9mIHN0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5sb2FkVVJMKHN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUubG9hZEpTT04oc3R5bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2RpZmZTdHlsZShzdHlsZTogU3R5bGVTcGVjaWZpY2F0aW9uIHwgc3RyaW5nLCAgb3B0aW9ucz86IHtkaWZmPzogYm9vbGVhbn0gJiBTdHlsZU9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVN0eWxlVVJMKHN0eWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlN0eWxlKTtcbiAgICAgICAgICAgIGdldEpTT04ocmVxdWVzdCwgKGVycm9yOiA/RXJyb3IsIGpzb246ID9PYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycm9yKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpZmYoanNvbiwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0eWxlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGlmZihzdHlsZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlRGlmZihzdHlsZTogU3R5bGVTcGVjaWZpY2F0aW9uLCAgb3B0aW9ucz86IHtkaWZmPzogYm9vbGVhbn0gJiBTdHlsZU9wdGlvbnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0eWxlLnNldFN0YXRlKHN0eWxlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byBwZXJmb3JtIHN0eWxlIGRpZmY6ICR7ZS5tZXNzYWdlIHx8IGUuZXJyb3IgfHwgZX0uICBSZWJ1aWxkaW5nIHRoZSBzdHlsZSBmcm9tIHNjcmF0Y2guYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVN0eWxlKHN0eWxlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIE1hcGJveCBzdHlsZSBvYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlY3JlYXRlIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBtYXAncyBzdHlsZSBvYmplY3QuXG4gICAgICovXG4gICAgZ2V0U3R5bGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwJ3Mgc3R5bGUgaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN0eWxlIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKi9cbiAgICBpc1N0eWxlTG9hZGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHJldHVybiB3YXJuT25jZSgnVGhlcmUgaXMgbm8gc3R5bGUgYWRkZWQgdG8gdGhlIG1hcC4nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUubG9hZGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNvdXJjZSB0byB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gYWRkLiBNdXN0IG5vdCBjb25mbGljdCB3aXRoIGV4aXN0aW5nIHNvdXJjZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCwgY29uZm9ybWluZyB0byB0aGVcbiAgICAgKiBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbidzIFtzb3VyY2UgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcykgb3JcbiAgICAgKiB7QGxpbmsgQ2FudmFzU291cmNlT3B0aW9uc30uXG4gICAgICogQGZpcmVzIHNvdXJjZS5hZGRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5hZGRTb3VyY2UoJ215LWRhdGEnLCB7XG4gICAgICogICB0eXBlOiAndmVjdG9yJyxcbiAgICAgKiAgIHVybDogJ21hcGJveDovL215dXNlcm5hbWUudGlsZXNldGlkJ1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmFkZFNvdXJjZSgnbXktZGF0YScsIHtcbiAgICAgKiAgIFwidHlwZVwiOiBcImdlb2pzb25cIixcbiAgICAgKiAgIFwiZGF0YVwiOiB7XG4gICAgICogICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAgICAgKiAgICAgXCJnZW9tZXRyeVwiOiB7XG4gICAgICogICAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAgICAgKiAgICAgICBcImNvb3JkaW5hdGVzXCI6IFstNzcuMDMyMywgMzguOTEzMV1cbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgKiAgICAgICBcInRpdGxlXCI6IFwiTWFwYm94IERDXCIsXG4gICAgICogICAgICAgXCJtYXJrZXItc3ltYm9sXCI6IFwibW9udW1lbnRcIlxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICogQHNlZSBWZWN0b3Igc291cmNlOiBbU2hvdyBhbmQgaGlkZSBsYXllcnNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3RvZ2dsZS1sYXllcnMvKVxuICAgICAqIEBzZWUgR2VvSlNPTiBzb3VyY2U6IFtBZGQgbGl2ZSByZWFsdGltZSBkYXRhXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLWdlb2pzb24vKVxuICAgICAqIEBzZWUgUmFzdGVyIERFTSBzb3VyY2U6IFtBZGQgaGlsbHNoYWRpbmddKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hpbGxzaGFkZS8pXG4gICAgICovXG4gICAgYWRkU291cmNlKGlkOiBzdHJpbmcsIHNvdXJjZTogU291cmNlU3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLnN0eWxlLmFkZFNvdXJjZShpZCwgc291cmNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNvdXJjZSBpcyBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gYmUgY2hlY2tlZC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc291cmNlIGlzIGxvYWRlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBzb3VyY2VMb2FkZWQgPSBtYXAuaXNTb3VyY2VMb2FkZWQoJ2JhdGh5bWV0cnktZGF0YScpO1xuICAgICAqL1xuICAgIGlzU291cmNlTG9hZGVkKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5zdHlsZSAmJiB0aGlzLnN0eWxlLnNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgIGlmIChzb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gc291cmNlIHdpdGggSUQgJyR7aWR9J2ApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNvdXJjZS5sb2FkZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYWxsIHRpbGVzIGluIHRoZSB2aWV3cG9ydCBmcm9tIGFsbCBzb3VyY2VzIG9uXG4gICAgICogdGhlIHN0eWxlIGFyZSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhbGwgdGlsZXMgYXJlIGxvYWRlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciB0aWxlc0xvYWRlZCA9IG1hcC5hcmVUaWxlc0xvYWRlZCgpO1xuICAgICAqL1xuXG4gICAgYXJlVGlsZXNMb2FkZWQoKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPSB0aGlzLnN0eWxlICYmIHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXNbaWRdO1xuICAgICAgICAgICAgY29uc3QgdGlsZXMgPSBzb3VyY2UuX3RpbGVzO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0IGluIHRpbGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRpbGVzW3RdO1xuICAgICAgICAgICAgICAgIGlmICghKHRpbGUuc3RhdGUgPT09ICdsb2FkZWQnIHx8IHRpbGUuc3RhdGUgPT09ICdlcnJvcmVkJykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgW2N1c3RvbSBzb3VyY2UgdHlwZV0oI0N1c3RvbSBTb3VyY2VzKSwgbWFraW5nIGl0IGF2YWlsYWJsZSBmb3IgdXNlIHdpdGhcbiAgICAgKiB7QGxpbmsgTWFwI2FkZFNvdXJjZX0uXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgc291cmNlIHR5cGU7IHNvdXJjZSBkZWZpbml0aW9uIG9iamVjdHMgdXNlIHRoaXMgbmFtZSBpbiB0aGUgYHt0eXBlOiAuLi59YCBmaWVsZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBTb3VyY2VUeXBlIEEge0BsaW5rIFNvdXJjZX0gY29uc3RydWN0b3IuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIHdoZW4gdGhlIHNvdXJjZSB0eXBlIGlzIHJlYWR5IG9yIHdpdGggYW4gZXJyb3IgYXJndW1lbnQgaWYgdGhlcmUgaXMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgYWRkU291cmNlVHlwZShuYW1lOiBzdHJpbmcsIFNvdXJjZVR5cGU6IGFueSwgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZVR5cGUobmFtZSwgU291cmNlVHlwZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBzb3VyY2UgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnJlbW92ZVNvdXJjZSgnYmF0aHltZXRyeS1kYXRhJyk7XG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UoaWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNvdXJjZSB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgaW4gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgc291cmNlIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7P09iamVjdH0gVGhlIHN0eWxlIHNvdXJjZSB3aXRoIHRoZSBzcGVjaWZpZWQgSUQsIG9yIGB1bmRlZmluZWRgXG4gICAgICogICBpZiB0aGUgSUQgY29ycmVzcG9uZHMgdG8gbm8gZXhpc3Rpbmcgc291cmNlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBzb3VyY2VPYmplY3QgPSBtYXAuZ2V0U291cmNlKCdwb2ludHMnKTtcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLXBvaW50LylcbiAgICAgKiBAc2VlIFtBbmltYXRlIGEgcG9pbnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYW5pbWF0ZS1wb2ludC1hbG9uZy1saW5lLylcbiAgICAgKiBAc2VlIFtBZGQgbGl2ZSByZWFsdGltZSBkYXRhXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2xpdmUtZ2VvanNvbi8pXG4gICAgICovXG4gICAgZ2V0U291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0U291cmNlKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYW4gaW1hZ2UgdG8gdGhlIHN0eWxlLiBUaGlzIGltYWdlIGNhbiBiZSBkaXNwbGF5ZWQgb24gdGhlIG1hcCBsaWtlIGFueSBvdGhlciBpY29uIGluIHRoZSBzdHlsZSdzXG4gICAgICogW3Nwcml0ZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zcHJpdGUvKSB1c2luZyB0aGUgaW1hZ2UncyBJRCB3aXRoXG4gICAgICogW2BpY29uLWltYWdlYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheW91dC1zeW1ib2wtaWNvbi1pbWFnZSksXG4gICAgICogW2BiYWNrZ3JvdW5kLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLXBhdHRlcm4pLFxuICAgICAqIFtgZmlsbC1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWZpbGwtZmlsbC1wYXR0ZXJuKSxcbiAgICAgKiBvciBbYGxpbmUtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1saW5lLWxpbmUtcGF0dGVybikuXG4gICAgICogQSB7QGxpbmsgTWFwI2Vycm9yfSBldmVudCB3aWxsIGJlIGZpcmVkIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIHNwcml0ZSB0byBhZGQgdGhpcyBpbWFnZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGltYWdlLlxuICAgICAqIEBwYXJhbSBpbWFnZSBUaGUgaW1hZ2UgYXMgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWBcbiAgICAgKiBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgLlxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMucGl4ZWxSYXRpbyBUaGUgcmF0aW8gb2YgcGl4ZWxzIGluIHRoZSBpbWFnZSB0byBwaHlzaWNhbCBwaXhlbHMgb24gdGhlIHNjcmVlblxuICAgICAqIEBwYXJhbSBvcHRpb25zLnNkZiBXaGV0aGVyIHRoZSBpbWFnZSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gU0RGIGltYWdlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIElmIHRoZSBzdHlsZSdzIHNwcml0ZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRhaW4gYW4gaW1hZ2Ugd2l0aCBJRCAnY2F0JyxcbiAgICAgKiAvLyBhZGQgdGhlIGltYWdlICdjYXQtaWNvbi5wbmcnIHRvIHRoZSBzdHlsZSdzIHNwcml0ZSB3aXRoIHRoZSBJRCAnY2F0Jy5cbiAgICAgKiBpZiAoIW1hcC5oYXNJbWFnZSgnY2F0JykpIG1hcC5hZGRJbWFnZSgnY2F0JywgJy4vY2F0LWljb24ucG5nJyk7XG4gICAgICpcbiAgICAgKiBAc2VlIFVzZSBgSFRNTEltYWdlRWxlbWVudGA6IFtBZGQgYW4gaWNvbiB0byB0aGUgbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS8pXG4gICAgICogQHNlZSBVc2UgYEltYWdlRGF0YWA6IFtBZGQgYSBnZW5lcmF0ZWQgaWNvbiB0byB0aGUgbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS1nZW5lcmF0ZWQvKVxuICAgICAqL1xuICAgIGFkZEltYWdlKGlkOiBzdHJpbmcsXG4gICAgICAgICAgICAgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZURhdGEgfCB7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGRhdGE6IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheX0gfCBTdHlsZUltYWdlSW50ZXJmYWNlLFxuICAgICAgICAgICAgIHtwaXhlbFJhdGlvID0gMSwgc2RmID0gZmFsc2V9OiB7cGl4ZWxSYXRpbz86IG51bWJlciwgc2RmPzogYm9vbGVhbn0gPSB7fSkge1xuXG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSAwO1xuXG4gICAgICAgIGlmIChpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBkYXRhfSA9IGJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGltYWdlKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuYWRkSW1hZ2UoaWQsIHtkYXRhOiBuZXcgUkdCQUltYWdlKHt3aWR0aCwgaGVpZ2h0fSwgZGF0YSksIHBpeGVsUmF0aW8sIHNkZiwgdmVyc2lvbn0pO1xuICAgICAgICB9IGVsc2UgaWYgKGltYWdlLndpZHRoID09PSB1bmRlZmluZWQgfHwgaW1hZ2UuaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyB0byBtYXAuYWRkSW1hZ2UoKS4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsICcgK1xuICAgICAgICAgICAgICAgICdvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgJykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBkYXRhfSA9IGltYWdlO1xuICAgICAgICAgICAgY29uc3QgdXNlckltYWdlID0gKChpbWFnZTogYW55KTogU3R5bGVJbWFnZUludGVyZmFjZSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3R5bGUuYWRkSW1hZ2UoaWQsIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBuZXcgUkdCQUltYWdlKHt3aWR0aCwgaGVpZ2h0fSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpLFxuICAgICAgICAgICAgICAgIHBpeGVsUmF0aW8sXG4gICAgICAgICAgICAgICAgc2RmLFxuICAgICAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICAgICAgdXNlckltYWdlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHVzZXJJbWFnZS5vbkFkZCkge1xuICAgICAgICAgICAgICAgIHVzZXJJbWFnZS5vbkFkZCh0aGlzLCBpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYW4gZXhpc3RpbmcgaW1hZ2UgaW4gYSBzdHlsZS4gVGhpcyBpbWFnZSBjYW4gYmUgZGlzcGxheWVkIG9uIHRoZSBtYXAgbGlrZSBhbnkgb3RoZXIgaWNvbiBpbiB0aGUgc3R5bGUnc1xuICAgICAqIFtzcHJpdGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3ByaXRlLykgdXNpbmcgdGhlIGltYWdlJ3MgSUQgd2l0aFxuICAgICAqIFtgaWNvbi1pbWFnZWBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXlvdXQtc3ltYm9sLWljb24taW1hZ2UpLFxuICAgICAqIFtgYmFja2dyb3VuZC1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWJhY2tncm91bmQtYmFja2dyb3VuZC1wYXR0ZXJuKSxcbiAgICAgKiBbYGZpbGwtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1maWxsLWZpbGwtcGF0dGVybiksXG4gICAgICogb3IgW2BsaW5lLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtbGluZS1saW5lLXBhdHRlcm4pLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgaW1hZ2UuXG4gICAgICogQHBhcmFtIGltYWdlIFRoZSBpbWFnZSBhcyBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYFxuICAgICAqIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIElmIGFuIGltYWdlIHdpdGggdGhlIElEICdjYXQnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBzdHlsZSdzIHNwcml0ZSxcbiAgICAgKiAvLyByZXBsYWNlIHRoYXQgaW1hZ2Ugd2l0aCBhIG5ldyBpbWFnZSwgJ290aGVyLWNhdC1pY29uLnBuZycuXG4gICAgICogaWYgKG1hcC5oYXNJbWFnZSgnY2F0JykpIG1hcC51cGRhdGVJbWFnZSgnY2F0JywgJy4vb3RoZXItY2F0LWljb24ucG5nJyk7XG4gICAgICovXG4gICAgdXBkYXRlSW1hZ2UoaWQ6IHN0cmluZyxcbiAgICAgICAgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZURhdGEgfCB7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGRhdGE6IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheX0gfCBTdHlsZUltYWdlSW50ZXJmYWNlKSB7XG5cbiAgICAgICAgY29uc3QgZXhpc3RpbmdJbWFnZSA9IHRoaXMuc3R5bGUuZ2V0SW1hZ2UoaWQpO1xuICAgICAgICBpZiAoIWV4aXN0aW5nSW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdUaGUgbWFwIGhhcyBubyBpbWFnZSB3aXRoIHRoYXQgaWQuIElmIHlvdSBhcmUgYWRkaW5nIGEgbmV3IGltYWdlIHVzZSBgbWFwLmFkZEltYWdlKC4uLilgIGluc3RlYWQuJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCA/IGJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGltYWdlKSA6IGltYWdlO1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgZGF0YX0gPSBpbWFnZURhdGE7XG5cbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyB0byBtYXAudXBkYXRlSW1hZ2UoKS4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsICcgK1xuICAgICAgICAgICAgICAgICdvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3aWR0aCAhPT0gZXhpc3RpbmdJbWFnZS5kYXRhLndpZHRoIHx8IGhlaWdodCAhPT0gZXhpc3RpbmdJbWFnZS5kYXRhLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1RoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB1cGRhdGVkIGltYWdlIG11c3QgYmUgdGhhdCBzYW1lIGFzIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBpbWFnZScpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb3B5ID0gIShpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpO1xuICAgICAgICBleGlzdGluZ0ltYWdlLmRhdGEucmVwbGFjZShkYXRhLCBjb3B5KTtcblxuICAgICAgICB0aGlzLnN0eWxlLnVwZGF0ZUltYWdlKGlkLCBleGlzdGluZ0ltYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIG9yIG5vdCBhbiBpbWFnZSB3aXRoIGEgc3BlY2lmaWMgSUQgZXhpc3RzIGluIHRoZSBzdHlsZS4gVGhpcyBjaGVja3MgYm90aCBpbWFnZXNcbiAgICAgKiBpbiB0aGUgc3R5bGUncyBvcmlnaW5hbCBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pIGFuZCBhbnkgaW1hZ2VzXG4gICAgICogdGhhdCBoYXZlIGJlZW4gYWRkZWQgYXQgcnVudGltZSB1c2luZyB7QGxpbmsgYWRkSW1hZ2V9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgaW1hZ2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGltYWdlIGV4aXN0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIENoZWNrIGlmIGFuIGltYWdlIHdpdGggdGhlIElEICdjYXQnIGV4aXN0cyBpblxuICAgICAqIC8vIHRoZSBzdHlsZSdzIHNwcml0ZS5cbiAgICAgKiB2YXIgY2F0SWNvbkV4aXN0cyA9IG1hcC5oYXNJbWFnZSgnY2F0Jyk7XG4gICAgICovXG4gICAgaGFzSW1hZ2UoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIGltYWdlIGlkJykpKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhIXRoaXMuc3R5bGUuZ2V0SW1hZ2UoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBpbWFnZSBmcm9tIGEgc3R5bGUuIFRoaXMgY2FuIGJlIGFuIGltYWdlIGZyb20gdGhlIHN0eWxlJ3Mgb3JpZ2luYWxcbiAgICAgKiBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pIG9yIGFueSBpbWFnZXNcbiAgICAgKiB0aGF0IGhhdmUgYmVlbiBhZGRlZCBhdCBydW50aW1lIHVzaW5nIHtAbGluayBhZGRJbWFnZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBpbWFnZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSWYgYW4gaW1hZ2Ugd2l0aCB0aGUgSUQgJ2NhdCcgZXhpc3RzIGluXG4gICAgICogLy8gdGhlIHN0eWxlJ3Mgc3ByaXRlLCByZW1vdmUgaXQuXG4gICAgICogaWYgKG1hcC5oYXNJbWFnZSgnY2F0JykpIG1hcC5yZW1vdmVJbWFnZSgnY2F0Jyk7XG4gICAgICovXG4gICAgcmVtb3ZlSW1hZ2UoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZUltYWdlKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGFuIGltYWdlIGZyb20gYW4gZXh0ZXJuYWwgVVJMIHRvIGJlIHVzZWQgd2l0aCBgTWFwI2FkZEltYWdlYC4gRXh0ZXJuYWxcbiAgICAgKiBkb21haW5zIG11c3Qgc3VwcG9ydCBbQ09SU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9BY2Nlc3NfY29udHJvbF9DT1JTKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCBvZiB0aGUgaW1hZ2UgZmlsZS4gSW1hZ2UgZmlsZSBtdXN0IGJlIGluIHBuZywgd2VicCwgb3IganBnIGZvcm1hdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBFeHBlY3RpbmcgYGNhbGxiYWNrKGVycm9yLCBkYXRhKWAuIENhbGxlZCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkIG9yIHdpdGggYW4gZXJyb3IgYXJndW1lbnQgaWYgdGhlcmUgaXMgYW4gZXJyb3IuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIExvYWQgYW4gaW1hZ2UgZnJvbSBhbiBleHRlcm5hbCBVUkwuXG4gICAgICogbWFwLmxvYWRJbWFnZSgnaHR0cDovL3BsYWNla2l0dGVuLmNvbS81MC81MCcsIGZ1bmN0aW9uKGVycm9yLCBpbWFnZSkge1xuICAgICAqICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgKiAgIC8vIEFkZCB0aGUgbG9hZGVkIGltYWdlIHRvIHRoZSBzdHlsZSdzIHNwcml0ZSB3aXRoIHRoZSBJRCAna2l0dGVuJy5cbiAgICAgKiAgIG1hcC5hZGRJbWFnZSgna2l0dGVuJywgaW1hZ2UpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogQHNlZSBbQWRkIGFuIGljb24gdG8gdGhlIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGQtaW1hZ2UvKVxuICAgICAqL1xuICAgIGxvYWRJbWFnZSh1cmw6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIGdldEltYWdlKHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuSW1hZ2UpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIGFuIEFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgSURzIG9mIGFsbCBpbWFnZXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgbWFwLlxuICAgICogVGhpcyBpbmNsdWRlcyBib3RoIGltYWdlcyBmcm9tIHRoZSBzdHlsZSdzIG9yaWdpbmFsIFtzcHJpdGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3ByaXRlLylcbiAgICAqIGFuZCBhbnkgaW1hZ2VzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIGF0IHJ1bnRpbWUgdXNpbmcge0BsaW5rIGFkZEltYWdlfS5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gQXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBhbGwgc3ByaXRlcy9pbWFnZXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgbWFwLlxuICAgICpcbiAgICAqIEBleGFtcGxlXG4gICAgKiB2YXIgYWxsSW1hZ2VzID0gbWFwLmxpc3RJbWFnZXMoKTtcbiAgICAqXG4gICAgKi9cbiAgICBsaXN0SW1hZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5saXN0SW1hZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIFtNYXBib3ggc3R5bGUgbGF5ZXJdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXllcnMpXG4gICAgICogdG8gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQSBsYXllciBkZWZpbmVzIGhvdyBkYXRhIGZyb20gYSBzcGVjaWZpZWQgc291cmNlIHdpbGwgYmUgc3R5bGVkLiBSZWFkIG1vcmUgYWJvdXQgbGF5ZXIgdHlwZXNcbiAgICAgKiBhbmQgYXZhaWxhYmxlIHBhaW50IGFuZCBsYXlvdXQgcHJvcGVydGllcyBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXJzKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0IHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGxheWVyIFRoZSBzdHlsZSBsYXllciB0byBhZGQsIGNvbmZvcm1pbmcgdG8gdGhlIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uJ3NcbiAgICAgKiAgIFtsYXllciBkZWZpbml0aW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXJzKS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZUlkXSBUaGUgSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYmVmb3JlLlxuICAgICAqICAgSWYgdGhpcyBhcmd1bWVudCBpcyBvbWl0dGVkLCB0aGUgbGF5ZXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBsYXllcnMgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gQWRkIGEgY2lyY2xlIGxheWVyIHdpdGggYSB2ZWN0b3Igc291cmNlLlxuICAgICAqIG1hcC5hZGRMYXllcih7XG4gICAgICogICBpZDogJ3BvaW50cy1vZi1pbnRlcmVzdCcsXG4gICAgICogICBzb3VyY2U6IHtcbiAgICAgKiAgICAgdHlwZTogJ3ZlY3RvcicsXG4gICAgICogICAgIHVybDogJ21hcGJveDovL21hcGJveC5tYXBib3gtc3RyZWV0cy12OCdcbiAgICAgKiAgIH0sXG4gICAgICogICAnc291cmNlLWxheWVyJzogJ3BvaV9sYWJlbCcsXG4gICAgICogICB0eXBlOiAnY2lyY2xlJyxcbiAgICAgKiAgIHBhaW50OiB7XG4gICAgICogICAgIC8vIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uIHBhaW50IHByb3BlcnRpZXNcbiAgICAgKiAgIH0sXG4gICAgICogICBsYXlvdXQ6IHtcbiAgICAgKiAgICAgLy8gTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24gbGF5b3V0IHByb3BlcnRpZXNcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0NyZWF0ZSBhbmQgc3R5bGUgY2x1c3RlcnNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2x1c3Rlci8pXG4gICAgICogQHNlZSBbQWRkIGEgdmVjdG9yIHRpbGUgc291cmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3ZlY3Rvci1zb3VyY2UvKVxuICAgICAqIEBzZWUgW0FkZCBhIFdNUyBzb3VyY2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvd21zLylcbiAgICAgKi9cbiAgICBhZGRMYXllcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uIHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UsIGJlZm9yZUlkPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3R5bGUuYWRkTGF5ZXIobGF5ZXIsIGJlZm9yZUlkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlcyBhIGxheWVyIHRvIGEgZGlmZmVyZW50IHotcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBtb3ZlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYmVmb3JlSWRdIFRoZSBJRCBvZiBhbiBleGlzdGluZyBsYXllciB0byBpbnNlcnQgdGhlIG5ldyBsYXllciBiZWZvcmUuXG4gICAgICogICBJZiB0aGlzIGFyZ3VtZW50IGlzIG9taXR0ZWQsIHRoZSBsYXllciB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxheWVycyBhcnJheS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gTW92ZSBhIGxheWVyIHdpdGggSUQgJ2xhYmVsJyBiZWZvcmUgdGhlIGxheWVyIHdpdGggSUQgJ3dhdGVyd2F5cycuXG4gICAgICogbWFwLm1vdmVMYXllcignbGFiZWwnLCAnd2F0ZXJ3YXlzJyk7XG4gICAgICovXG4gICAgbW92ZUxheWVyKGlkOiBzdHJpbmcsIGJlZm9yZUlkPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3R5bGUubW92ZUxheWVyKGlkLCBiZWZvcmVJZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gSUQgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBJZiBubyBzdWNoIGxheWVyIGV4aXN0cywgYW4gYGVycm9yYCBldmVudCBpcyBmaXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBpZCBvZiB0aGUgbGF5ZXIgdG8gcmVtb3ZlXG4gICAgICogQGZpcmVzIGVycm9yXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIElmIGEgbGF5ZXIgd2l0aCBJRCAnc3RhdGUtZGF0YScgZXhpc3RzLCByZW1vdmUgaXQuXG4gICAgICogaWYgKG1hcC5nZXRMYXllcignc3RhdGUtZGF0YScpKSBtYXAucmVtb3ZlTGF5ZXIoJ3N0YXRlLWRhdGEnKTtcbiAgICAgKi9cbiAgICByZW1vdmVMYXllcihpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlTGF5ZXIoaWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxheWVyIHdpdGggdGhlIHNwZWNpZmllZCBJRCBpbiB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBnZXQuXG4gICAgICogQHJldHVybnMgez9PYmplY3R9IFRoZSBsYXllciB3aXRoIHRoZSBzcGVjaWZpZWQgSUQsIG9yIGB1bmRlZmluZWRgXG4gICAgICogICBpZiB0aGUgSUQgY29ycmVzcG9uZHMgdG8gbm8gZXhpc3RpbmcgbGF5ZXJzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc3RhdGVEYXRhTGF5ZXIgPSBtYXAuZ2V0TGF5ZXIoJ3N0YXRlLWRhdGEnKTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0ZpbHRlciBzeW1ib2xzIGJ5IHRvZ2dsaW5nIGEgbGlzdF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maWx0ZXItbWFya2Vycy8pXG4gICAgICogQHNlZSBbRmlsdGVyIHN5bWJvbHMgYnkgdGV4dCBpbnB1dF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maWx0ZXItbWFya2Vycy1ieS1pbnB1dC8pXG4gICAgICovXG4gICAgZ2V0TGF5ZXIoaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXllcihpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgem9vbSBleHRlbnQgZm9yIHRoZSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuIFRoZSB6b29tIGV4dGVudCBpbmNsdWRlcyB0aGVcbiAgICAgKiBbbWluaW11bSB6b29tIGxldmVsXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXItbWluem9vbSlcbiAgICAgKiBhbmQgW21heGltdW0gem9vbSBsZXZlbF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVyLW1heHpvb20pKVxuICAgICAqIGF0IHdoaWNoIHRoZSBsYXllciB3aWxsIGJlIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogTm90ZTogRm9yIHN0eWxlIGxheWVycyB1c2luZyB2ZWN0b3Igc291cmNlcywgc3R5bGUgbGF5ZXJzIGNhbm5vdCBiZSByZW5kZXJlZCBhdCB6b29tIGxldmVscyBsb3dlciB0aGFuIHRoZVxuICAgICAqIG1pbmltdW0gem9vbSBsZXZlbCBvZiB0aGUgX3NvdXJjZSBsYXllcl8gYmVjYXVzZSB0aGUgZGF0YSBkb2VzIG5vdCBleGlzdCBhdCB0aG9zZSB6b29tIGxldmVscy4gSWYgdGhlIG1pbmltdW1cbiAgICAgKiB6b29tIGxldmVsIG9mIHRoZSBzb3VyY2UgbGF5ZXIgaXMgaGlnaGVyIHRoYW4gdGhlIG1pbmltdW0gem9vbSBsZXZlbCBkZWZpbmVkIGluIHRoZSBzdHlsZSBsYXllciwgdGhlIHN0eWxlXG4gICAgICogbGF5ZXIgd2lsbCBub3QgYmUgcmVuZGVyZWQgYXQgYWxsIHpvb20gbGV2ZWxzIGluIHRoZSB6b29tIHJhbmdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byB3aGljaCB0aGUgem9vbSBleHRlbnQgd2lsbCBiZSBhcHBsaWVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW56b29tIFRoZSBtaW5pbXVtIHpvb20gdG8gc2V0ICgwLTI0KS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4em9vbSBUaGUgbWF4aW11bSB6b29tIHRvIHNldCAoMC0yNCkuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRMYXllclpvb21SYW5nZSgnbXktbGF5ZXInLCAyLCA1KTtcbiAgICAgKlxuICAgICAqL1xuICAgIHNldExheWVyWm9vbVJhbmdlKGxheWVySWQ6IHN0cmluZywgbWluem9vbTogbnVtYmVyLCBtYXh6b29tOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRMYXllclpvb21SYW5nZShsYXllcklkLCBtaW56b29tLCBtYXh6b29tKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBmaWx0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIGxheWVyIHRvIHdoaWNoIHRoZSBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXkgfCBudWxsIHwgdW5kZWZpbmVkfSBmaWx0ZXIgVGhlIGZpbHRlciwgY29uZm9ybWluZyB0byB0aGUgTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24nc1xuICAgICAqICAgW2ZpbHRlciBkZWZpbml0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNvdGhlci1maWx0ZXIpLiAgSWYgYG51bGxgIG9yIGB1bmRlZmluZWRgIGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyBhbnkgZXhpc3RpbmcgZmlsdGVyIGZyb20gdGhlIGxheWVyLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgdGhlIGZpbHRlciBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldEZpbHRlcignbXktbGF5ZXInLCBbJz09JywgJ25hbWUnLCAnVVNBJ10pO1xuICAgICAqXG4gICAgICogQHNlZSBbRmlsdGVyIGZlYXR1cmVzIHdpdGhpbiBtYXAgdmlld10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maWx0ZXItZmVhdHVyZXMtd2l0aGluLW1hcC12aWV3LylcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgY29udGFpbmluZyBzaW1pbGFyIGRhdGFdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcXVlcnktc2ltaWxhci1mZWF0dXJlcy8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgdGltZWxpbmUgYW5pbWF0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3RpbWVsaW5lLWFuaW1hdGlvbi8pXG4gICAgICovXG4gICAgc2V0RmlsdGVyKGxheWVySWQ6IHN0cmluZywgZmlsdGVyOiA/RmlsdGVyU3BlY2lmaWNhdGlvbiwgIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0RmlsdGVyKGxheWVySWQsIGZpbHRlciwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlsdGVyIGFwcGxpZWQgdG8gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgc3R5bGUgbGF5ZXIgd2hvc2UgZmlsdGVyIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBsYXllcidzIGZpbHRlci5cbiAgICAgKi9cbiAgICBnZXRGaWx0ZXIobGF5ZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldEZpbHRlcihsYXllcklkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIHBhaW50IHByb3BlcnR5IGluIHRoZSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIGxheWVyIHRvIHNldCB0aGUgcGFpbnQgcHJvcGVydHkgaW4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhaW50IHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcGFpbnQgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqICAgTXVzdCBiZSBvZiBhIHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBwcm9wZXJ0eSwgYXMgZGVmaW5lZCBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLykuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiBgdmFsdWVgIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldFBhaW50UHJvcGVydHkoJ215LWxheWVyJywgJ2ZpbGwtY29sb3InLCAnI2ZhYWZlZScpO1xuICAgICAqIEBzZWUgW0NoYW5nZSBhIGxheWVyJ3MgY29sb3Igd2l0aCBidXR0b25zXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NvbG9yLXN3aXRjaGVyLylcbiAgICAgKiBAc2VlIFtBZGp1c3QgYSBsYXllcidzIG9wYWNpdHldKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRqdXN0LWxheWVyLW9wYWNpdHkvKVxuICAgICAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqL1xuICAgIHNldFBhaW50UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0UGFpbnRQcm9wZXJ0eShsYXllcklkLCBuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBwYWludCBwcm9wZXJ0eSBpbiB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBnZXQgdGhlIHBhaW50IHByb3BlcnR5IGZyb20uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgYSBwYWludCBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHBhaW50IHByb3BlcnR5LlxuICAgICAqL1xuICAgIGdldFBhaW50UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0UGFpbnRQcm9wZXJ0eShsYXllcklkLCBuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIGxheW91dCBwcm9wZXJ0eSBpbiB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBzZXQgdGhlIGxheW91dCBwcm9wZXJ0eSBpbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbGF5b3V0IHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgbGF5b3V0IHByb3BlcnR5LiBNdXN0IGJlIG9mIGEgdHlwZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHByb3BlcnR5LCBhcyBkZWZpbmVkIGluIHRoZSBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy52YWxpZGF0ZT10cnVlXSBXaGV0aGVyIHRvIGNoZWNrIGlmIGB2YWx1ZWAgY29uZm9ybXMgdG8gdGhlIE1hcGJveCBHTCBTdHlsZSBTcGVjaWZpY2F0aW9uLiBEaXNhYmxpbmcgdmFsaWRhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGhhdmUgcHJldmlvdXNseSB2YWxpZGF0ZWQgdGhlIHZhbHVlcyB5b3Ugd2lsbCBiZSBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0TGF5b3V0UHJvcGVydHkoJ215LWxheWVyJywgJ3Zpc2liaWxpdHknLCAnbm9uZScpO1xuICAgICAqL1xuICAgIHNldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnN0eWxlLnNldExheW91dFByb3BlcnR5KGxheWVySWQsIG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGxheW91dCBwcm9wZXJ0eSBpbiB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBnZXQgdGhlIGxheW91dCBwcm9wZXJ0eSBmcm9tLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBsYXlvdXQgcHJvcGVydHkuXG4gICAgICovXG4gICAgZ2V0TGF5b3V0UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5b3V0UHJvcGVydHkobGF5ZXJJZCwgbmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW55IGNvbWJpbmF0aW9uIG9mIGxpZ2h0IHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsaWdodCBMaWdodCBwcm9wZXJ0aWVzIHRvIHNldC4gTXVzdCBjb25mb3JtIHRvIHRoZSBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI2xpZ2h0KS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy52YWxpZGF0ZT10cnVlXSBXaGV0aGVyIHRvIGNoZWNrIGlmIHRoZSBmaWx0ZXIgY29uZm9ybXMgdG8gdGhlIE1hcGJveCBHTCBTdHlsZSBTcGVjaWZpY2F0aW9uLiBEaXNhYmxpbmcgdmFsaWRhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGhhdmUgcHJldmlvdXNseSB2YWxpZGF0ZWQgdGhlIHZhbHVlcyB5b3Ugd2lsbCBiZSBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0TGlnaHQobGlnaHQ6IExpZ2h0U3BlY2lmaWNhdGlvbiwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRMaWdodChsaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxpZ2h0IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGxpZ2h0IExpZ2h0IHByb3BlcnRpZXMgb2YgdGhlIHN0eWxlLlxuICAgICAqL1xuICAgIGdldExpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRMaWdodCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0YXRlIG9mIGEgZmVhdHVyZS4gVGhlIGBzdGF0ZWAgb2JqZWN0IGlzIG1lcmdlZCBpbiB3aXRoIHRoZSBleGlzdGluZyBzdGF0ZSBvZiB0aGUgZmVhdHVyZS5cbiAgICAgKiBGZWF0dXJlcyBhcmUgaWRlbnRpZmllZCBieSB0aGVpciBgaWRgIGF0dHJpYnV0ZSwgd2hpY2ggbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGEgc3RyaW5nIHRoYXQgY2FuIGJlXG4gICAgICogY2FzdCB0byBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGZlYXR1cmUgRmVhdHVyZSBpZGVudGlmaWVyLiBGZWF0dXJlIG9iamVjdHMgcmV0dXJuZWQgZnJvbVxuICAgICAqIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSBvciBldmVudCBoYW5kbGVycyBjYW4gYmUgdXNlZCBhcyBmZWF0dXJlIGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBmZWF0dXJlLmlkIFVuaXF1ZSBpZCBvZiB0aGUgZmVhdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmVhdHVyZS5zb3VyY2UgVGhlIElkIG9mIHRoZSB2ZWN0b3Igc291cmNlIG9yIEdlb0pTT04gc291cmNlIGZvciB0aGUgZmVhdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZlYXR1cmUuc291cmNlTGF5ZXJdIChvcHRpb25hbCkgICpGb3IgdmVjdG9yIHRpbGUgc291cmNlcywgdGhlIHNvdXJjZUxheWVyIGlzXG4gICAgICogIHJlcXVpcmVkLipcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgQSBzZXQgb2Yga2V5LXZhbHVlIHBhaXJzLiBUaGUgdmFsdWVzIHNob3VsZCBiZSB2YWxpZCBKU09OIHR5cGVzLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgcmVxdWlyZXMgdGhlIGBmZWF0dXJlLmlkYCBhdHRyaWJ1dGUgb24gZGF0YSBzZXRzLiBGb3IgR2VvSlNPTiBzb3VyY2VzIHdpdGhvdXRcbiAgICAgKiBmZWF0dXJlIGlkcywgc2V0IHRoZSBgZ2VuZXJhdGVJZGAgb3B0aW9uIGluIHRoZSBgR2VvSlNPTlNvdXJjZVNwZWNpZmljYXRpb25gIHRvIGF1dG8tYXNzaWduIHRoZW0uIFRoaXNcbiAgICAgKiBvcHRpb24gYXNzaWducyBpZHMgYmFzZWQgb24gYSBmZWF0dXJlJ3MgaW5kZXggaW4gdGhlIHNvdXJjZSBkYXRhLiBJZiB5b3UgY2hhbmdlIGZlYXR1cmUgZGF0YSB1c2luZ1xuICAgICAqIGBtYXAuZ2V0U291cmNlKCdzb21lIGlkJykuc2V0RGF0YSguLilgLCB5b3UgbWF5IG5lZWQgdG8gcmUtYXBwbHkgc3RhdGUgdGFraW5nIGludG8gYWNjb3VudCB1cGRhdGVkIGBpZGAgdmFsdWVzLlxuICAgICAqL1xuICAgIHNldEZlYXR1cmVTdGF0ZShmZWF0dXJlOiB7IHNvdXJjZTogc3RyaW5nOyBzb3VyY2VMYXllcj86IHN0cmluZzsgaWQ6IHN0cmluZyB8IG51bWJlcjsgfSwgc3RhdGU6IE9iamVjdCkge1xuICAgICAgICB0aGlzLnN0eWxlLnNldEZlYXR1cmVTdGF0ZShmZWF0dXJlLCBzdGF0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGZlYXR1cmUgc3RhdGUsIHNldHRpbmcgaXQgYmFjayB0byB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSWYgb25seVxuICAgICAqIHNvdXJjZSBpcyBzcGVjaWZpZWQsIHJlbW92ZXMgYWxsIHN0YXRlcyBvZiB0aGF0IHNvdXJjZS4gSWZcbiAgICAgKiB0YXJnZXQuaWQgaXMgYWxzbyBzcGVjaWZpZWQsIHJlbW92ZXMgYWxsIGtleXMgZm9yIHRoYXQgZmVhdHVyZSdzIHN0YXRlLlxuICAgICAqIElmIGtleSBpcyBhbHNvIHNwZWNpZmllZCwgcmVtb3ZlcyB0aGF0IGtleSBmcm9tIHRoYXQgZmVhdHVyZSdzIHN0YXRlLlxuICAgICAqIEZlYXR1cmVzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZWlyIGBpZGAgYXR0cmlidXRlLCB3aGljaCBtdXN0IGJlIGFuIGludGVnZXIgb3IgYSBzdHJpbmcgdGhhdCBjYW4gYmVcbiAgICAgKiBjYXN0IHRvIGFuIGludGVnZXIuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCBJZGVudGlmaWVyIG9mIHdoZXJlIHRvIHNldCBzdGF0ZTogY2FuIGJlIGEgc291cmNlLCBhIGZlYXR1cmUsIG9yIGEgc3BlY2lmaWMga2V5IG9mIGZlYXR1cmUuXG4gICAgICogRmVhdHVyZSBvYmplY3RzIHJldHVybmVkIGZyb20ge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9IG9yIGV2ZW50IGhhbmRsZXJzIGNhbiBiZSB1c2VkIGFzIGZlYXR1cmUgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IHRhcmdldC5pZCAob3B0aW9uYWwpIFVuaXF1ZSBpZCBvZiB0aGUgZmVhdHVyZS4gT3B0aW9uYWwgaWYga2V5IGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldC5zb3VyY2UgVGhlIElkIG9mIHRoZSB2ZWN0b3Igc291cmNlIG9yIEdlb0pTT04gc291cmNlIGZvciB0aGUgZmVhdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldC5zb3VyY2VMYXllcl0gKG9wdGlvbmFsKSAgKkZvciB2ZWN0b3IgdGlsZSBzb3VyY2VzLCB0aGUgc291cmNlTGF5ZXIgaXNcbiAgICAgKiAgcmVxdWlyZWQuKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgKG9wdGlvbmFsKSBUaGUga2V5IGluIHRoZSBmZWF0dXJlIHN0YXRlIHRvIHJlc2V0LlxuICAgICovXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHRhcmdldDogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkPzogc3RyaW5nIHwgbnVtYmVyOyB9LCBrZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVGZWF0dXJlU3RhdGUodGFyZ2V0LCBrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3RhdGUgb2YgYSBmZWF0dXJlLlxuICAgICAqIEZlYXR1cmVzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZWlyIGBpZGAgYXR0cmlidXRlLCB3aGljaCBtdXN0IGJlIGFuIGludGVnZXIgb3IgYSBzdHJpbmcgdGhhdCBjYW4gYmVcbiAgICAgKiBjYXN0IHRvIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZmVhdHVyZSBGZWF0dXJlIGlkZW50aWZpZXIuIEZlYXR1cmUgb2JqZWN0cyByZXR1cm5lZCBmcm9tXG4gICAgICoge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9IG9yIGV2ZW50IGhhbmRsZXJzIGNhbiBiZSB1c2VkIGFzIGZlYXR1cmUgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGZlYXR1cmUuaWQgVW5pcXVlIGlkIG9mIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmZWF0dXJlLnNvdXJjZSBUaGUgSWQgb2YgdGhlIHZlY3RvciBzb3VyY2Ugb3IgR2VvSlNPTiBzb3VyY2UgZm9yIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZmVhdHVyZS5zb3VyY2VMYXllcl0gKG9wdGlvbmFsKSAgKkZvciB2ZWN0b3IgdGlsZSBzb3VyY2VzLCB0aGUgc291cmNlTGF5ZXIgaXNcbiAgICAgKiAgcmVxdWlyZWQuKlxuICAgICAqXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIHN0YXRlIG9mIHRoZSBmZWF0dXJlLlxuICAgICAqL1xuICAgIGdldEZlYXR1cmVTdGF0ZShmZWF0dXJlOiB7IHNvdXJjZTogc3RyaW5nOyBzb3VyY2VMYXllcj86IHN0cmluZzsgaWQ6IHN0cmluZyB8IG51bWJlcjsgfSk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldEZlYXR1cmVTdGF0ZShmZWF0dXJlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBjb250YWluaW5nIEhUTUwgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gVGhlIG1hcCdzIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBnZXRDb250YWluZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIG1hcCdzIGA8Y2FudmFzPmAgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGFkZCBub24tR0wgb3ZlcmxheXMgdG8gdGhlIG1hcCwgeW91IHNob3VsZCBhcHBlbmQgdGhlbSB0byB0aGlzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHRoZSBlbGVtZW50IHRvIHdoaWNoIGV2ZW50IGJpbmRpbmdzIGZvciBtYXAgaW50ZXJhY3Rpdml0eSAoc3VjaCBhcyBwYW5uaW5nIGFuZCB6b29taW5nKSBhcmVcbiAgICAgKiBhdHRhY2hlZC4gSXQgd2lsbCByZWNlaXZlIGJ1YmJsZWQgZXZlbnRzIGZyb20gY2hpbGQgZWxlbWVudHMgc3VjaCBhcyB0aGUgYDxjYW52YXM+YCwgYnV0IG5vdCBmcm9tXG4gICAgICogbWFwIGNvbnRyb2xzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSBUaGUgY29udGFpbmVyIG9mIHRoZSBtYXAncyBgPGNhbnZhcz5gLlxuICAgICAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICovXG4gICAgZ2V0Q2FudmFzQ29udGFpbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FudmFzQ29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGA8Y2FudmFzPmAgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIG1hcCdzIGA8Y2FudmFzPmAgZWxlbWVudC5cbiAgICAgKiBAc2VlIFtNZWFzdXJlIGRpc3RhbmNlc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9tZWFzdXJlLylcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gaG92ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24taG92ZXIvKVxuICAgICAqIEBzZWUgW0NlbnRlciB0aGUgbWFwIG9uIGEgY2xpY2tlZCBzeW1ib2xdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2VudGVyLW9uLXN5bWJvbC8pXG4gICAgICovXG4gICAgZ2V0Q2FudmFzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FudmFzO1xuICAgIH1cblxuICAgIF9jb250YWluZXJEaW1lbnNpb25zKCkge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICB3aWR0aCA9IHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aCB8fCA0MDA7XG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0IHx8IDMwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbd2lkdGgsIGhlaWdodF07XG4gICAgfVxuXG4gICAgX2RldGVjdE1pc3NpbmdDU1MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkQ29sb3IgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5KS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLWNvbG9yJyk7XG4gICAgICAgIGlmIChjb21wdXRlZENvbG9yICE9PSAncmdiKDI1MCwgMTI4LCAxMTQpJykge1xuICAgICAgICAgICAgd2Fybk9uY2UoJ1RoaXMgcGFnZSBhcHBlYXJzIHRvIGJlIG1pc3NpbmcgQ1NTIGRlY2xhcmF0aW9ucyBmb3IgJyArXG4gICAgICAgICAgICAgICAgJ01hcGJveCBHTCBKUywgd2hpY2ggbWF5IGNhdXNlIHRoZSBtYXAgdG8gZGlzcGxheSBpbmNvcnJlY3RseS4gJyArXG4gICAgICAgICAgICAgICAgJ1BsZWFzZSBlbnN1cmUgeW91ciBwYWdlIGluY2x1ZGVzIG1hcGJveC1nbC5jc3MsIGFzIGRlc2NyaWJlZCAnICtcbiAgICAgICAgICAgICAgICAnaW4gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvYXBpLy4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zZXR1cENvbnRhaW5lcigpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyO1xuICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtbWFwJyk7XG5cbiAgICAgICAgY29uc3QgbWlzc2luZ0NTU0NhbmFyeSA9IHRoaXMuX21pc3NpbmdDU1NDYW5hcnkgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY2FuYXJ5JywgY29udGFpbmVyKTtcbiAgICAgICAgbWlzc2luZ0NTU0NhbmFyeS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIHRoaXMuX2RldGVjdE1pc3NpbmdDU1MoKTtcblxuICAgICAgICBjb25zdCBjYW52YXNDb250YWluZXIgPSB0aGlzLl9jYW52YXNDb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY2FudmFzLWNvbnRhaW5lcicsIGNvbnRhaW5lcik7XG4gICAgICAgIGlmICh0aGlzLl9pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWludGVyYWN0aXZlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYW52YXMgPSBET00uY3JlYXRlKCdjYW52YXMnLCAnbWFwYm94Z2wtY2FudmFzJywgY2FudmFzQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLl9jb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLl9jb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICB0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ01hcCcpO1xuXG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCk7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZUNhbnZhcyhkaW1lbnNpb25zWzBdLCBkaW1lbnNpb25zWzFdKTtcblxuICAgICAgICBjb25zdCBjb250cm9sQ29udGFpbmVyID0gdGhpcy5fY29udHJvbENvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lcicsIGNvbnRhaW5lcik7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMuX2NvbnRyb2xQb3NpdGlvbnMgPSB7fTtcbiAgICAgICAgWyd0b3AtbGVmdCcsICd0b3AtcmlnaHQnLCAnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0J10uZm9yRWFjaCgocG9zaXRpb25OYW1lKSA9PiB7XG4gICAgICAgICAgICBwb3NpdGlvbnNbcG9zaXRpb25OYW1lXSA9IERPTS5jcmVhdGUoJ2RpdicsIGBtYXBib3hnbC1jdHJsLSR7cG9zaXRpb25OYW1lfWAsIGNvbnRyb2xDb250YWluZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVzaXplQ2FudmFzKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuXG4gICAgICAgIC8vIFJlcXVlc3QgdGhlIHJlcXVpcmVkIGNhbnZhcyBzaXplIHRha2luZyB0aGUgcGl4ZWxyYXRpbyBpbnRvIGFjY291bnQuXG4gICAgICAgIHRoaXMuX2NhbnZhcy53aWR0aCA9IHBpeGVsUmF0aW8gKiB3aWR0aDtcbiAgICAgICAgdGhpcy5fY2FudmFzLmhlaWdodCA9IHBpeGVsUmF0aW8gKiBoZWlnaHQ7XG5cbiAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNhbWUgY2FudmFzIHNpemUsIHBvdGVudGlhbGx5IGRvd25zY2FsaW5nIGl0IGZvciBIaURQSSBkaXNwbGF5c1xuICAgICAgICB0aGlzLl9jYW52YXMuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIF9zZXR1cFBhaW50ZXIoKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBleHRlbmQoe30sIGlzU3VwcG9ydGVkLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgIGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6IHRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsXG4gICAgICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcixcbiAgICAgICAgICAgIGFudGlhbGlhczogdGhpcy5fYW50aWFsaWFzIHx8IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5fY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKTtcblxuICAgICAgICBpZiAoIWdsKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTCcpKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBhaW50ZXIgPSBuZXcgUGFpbnRlcihnbCwgdGhpcy50cmFuc2Zvcm0pO1xuXG4gICAgICAgIHdlYnBTdXBwb3J0ZWQudGVzdFN1cHBvcnQoZ2wpO1xuICAgIH1cblxuICAgIF9jb250ZXh0TG9zdChldmVudDogKikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fZnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3dlYmdsY29udGV4dGxvc3QnLCB7b3JpZ2luYWxFdmVudDogZXZlbnR9KSk7XG4gICAgfVxuXG4gICAgX2NvbnRleHRSZXN0b3JlZChldmVudDogKikge1xuICAgICAgICB0aGlzLl9zZXR1cFBhaW50ZXIoKTtcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywge29yaWdpbmFsRXZlbnQ6IGV2ZW50fSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYGZhbHNlYCBpZiB0aGUgc3R5bGUgaXMgbm90IHlldCBmdWxseSBsb2FkZWQsXG4gICAgICogb3IgaWYgdGhlcmUgaGFzIGJlZW4gYSBjaGFuZ2UgdG8gdGhlIHNvdXJjZXMgb3Igc3R5bGUgdGhhdFxuICAgICAqIGhhcyBub3QgeWV0IGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqL1xuICAgIGxvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9zdHlsZURpcnR5ICYmICF0aGlzLl9zb3VyY2VzRGlydHkgJiYgISF0aGlzLnN0eWxlICYmIHRoaXMuc3R5bGUubG9hZGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoaXMgbWFwJ3Mgc3R5bGUgYW5kIHNvdXJjZXMsIGFuZCByZS1yZW5kZXIgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBkYXRlU3R5bGUgbWFyayB0aGUgbWFwJ3Mgc3R5bGUgZm9yIHJlcHJvY2Vzc2luZyBhc1xuICAgICAqIHdlbGwgYXMgaXRzIHNvdXJjZXNcbiAgICAgKiBAcmV0dXJucyB7TWFwfSB0aGlzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdXBkYXRlKHVwZGF0ZVN0eWxlPzogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHJldHVybiB0aGlzO1xuXG4gICAgICAgIHRoaXMuX3N0eWxlRGlydHkgPSB0aGlzLl9zdHlsZURpcnR5IHx8IHVwZGF0ZVN0eWxlO1xuICAgICAgICB0aGlzLl9zb3VyY2VzRGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnRyaWdnZXJSZXBhaW50KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVxdWVzdCB0aGF0IHRoZSBnaXZlbiBjYWxsYmFjayBiZSBleGVjdXRlZCBkdXJpbmcgdGhlIG5leHQgcmVuZGVyXG4gICAgICogZnJhbWUuICBTY2hlZHVsZSBhIHJlbmRlciBmcmFtZSBpZiBvbmUgaXMgbm90IGFscmVhZHkgc2NoZWR1bGVkLlxuICAgICAqIEByZXR1cm5zIEFuIGlkIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBjYWxsYmFja1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlcXVlc3RSZW5kZXJGcmFtZShjYWxsYmFjazogKCkgPT4gdm9pZCk6IFRhc2tJRCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmFkZChjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgX2NhbmNlbFJlbmRlckZyYW1lKGlkOiBUYXNrSUQpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJlbW92ZShpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbCB3aGVuIGEgKHJlLSlyZW5kZXIgb2YgdGhlIG1hcCBpcyByZXF1aXJlZDpcbiAgICAgKiAtIFRoZSBzdHlsZSBoYXMgY2hhbmdlZCAoYHNldFBhaW50UHJvcGVydHkoKWAsIGV0Yy4pXG4gICAgICogLSBTb3VyY2UgZGF0YSBoYXMgY2hhbmdlZCAoZS5nLiB0aWxlcyBoYXZlIGZpbmlzaGVkIGxvYWRpbmcpXG4gICAgICogLSBUaGUgbWFwIGhhcyBpcyBtb3ZpbmcgKG9yIGp1c3QgZmluaXNoZWQgbW92aW5nKVxuICAgICAqIC0gQSB0cmFuc2l0aW9uIGlzIGluIHByb2dyZXNzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TWFwfSB0aGlzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVuZGVyKCkge1xuICAgICAgICAvLyBBIGN1c3RvbSBsYXllciBtYXkgaGF2ZSB1c2VkIHRoZSBjb250ZXh0IGFzeW5jaHJvbm91c2x5LiBNYXJrIHRoZSBzdGF0ZSBhcyBkaXJ0eS5cbiAgICAgICAgdGhpcy5wYWludGVyLmNvbnRleHQuc2V0RGlydHkoKTtcbiAgICAgICAgdGhpcy5wYWludGVyLnNldEJhc2VTdGF0ZSgpO1xuXG4gICAgICAgIHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5ydW4oKTtcblxuICAgICAgICBsZXQgY3Jvc3NGYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAvLyBJZiB0aGUgc3R5bGUgaGFzIGNoYW5nZWQsIHRoZSBtYXAgaXMgYmVpbmcgem9vbWVkLCBvciBhIHRyYW5zaXRpb24gb3IgZmFkZSBpcyBpbiBwcm9ncmVzczpcbiAgICAgICAgLy8gIC0gQXBwbHkgc3R5bGUgY2hhbmdlcyAoaW4gYSBiYXRjaClcbiAgICAgICAgLy8gIC0gUmVjYWxjdWxhdGUgcGFpbnQgcHJvcGVydGllcy5cbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgJiYgdGhpcy5fc3R5bGVEaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fc3R5bGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCB6b29tID0gdGhpcy50cmFuc2Zvcm0uem9vbTtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnpvb21IaXN0b3J5LnVwZGF0ZSh6b29tLCBub3cpO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHpvb20sIHtcbiAgICAgICAgICAgICAgICBub3csXG4gICAgICAgICAgICAgICAgZmFkZUR1cmF0aW9uOiB0aGlzLl9mYWRlRHVyYXRpb24sXG4gICAgICAgICAgICAgICAgem9vbUhpc3Rvcnk6IHRoaXMuc3R5bGUuem9vbUhpc3RvcnksXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogdGhpcy5zdHlsZS5nZXRUcmFuc2l0aW9uKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBmYWN0b3IgPSBwYXJhbWV0ZXJzLmNyb3NzRmFkaW5nRmFjdG9yKCk7XG4gICAgICAgICAgICBpZiAoZmFjdG9yICE9PSAxIHx8IGZhY3RvciAhPT0gdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3IpIHtcbiAgICAgICAgICAgICAgICBjcm9zc0ZhZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3IgPSBmYWN0b3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3R5bGUudXBkYXRlKHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIF9yZW5kZXIgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBpbi1wcm9ncmVzcyBwYWludFxuICAgICAgICAvLyB0cmFuc2l0aW9uLCB1cGRhdGUgc291cmNlIGNhY2hlcyB0byBjaGVjayBmb3IgYW5kIGxvYWQgYW55IHRpbGVzIHdlXG4gICAgICAgIC8vIG5lZWQgZm9yIHRoZSBjdXJyZW50IHRyYW5zZm9ybVxuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiB0aGlzLl9zb3VyY2VzRGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZXNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wbGFjZW1lbnREaXJ0eSA9IHRoaXMuc3R5bGUgJiYgdGhpcy5zdHlsZS5fdXBkYXRlUGxhY2VtZW50KHRoaXMucGFpbnRlci50cmFuc2Zvcm0sIHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLCB0aGlzLl9mYWRlRHVyYXRpb24sIHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucyk7XG5cbiAgICAgICAgLy8gQWN0dWFsbHkgZHJhd1xuICAgICAgICB0aGlzLnBhaW50ZXIucmVuZGVyKHRoaXMuc3R5bGUsIHtcbiAgICAgICAgICAgIHNob3dUaWxlQm91bmRhcmllczogdGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsXG4gICAgICAgICAgICBzaG93T3ZlcmRyYXdJbnNwZWN0b3I6IHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcixcbiAgICAgICAgICAgIHJvdGF0aW5nOiB0aGlzLmlzUm90YXRpbmcoKSxcbiAgICAgICAgICAgIHpvb21pbmc6IHRoaXMuaXNab29taW5nKCksXG4gICAgICAgICAgICBtb3Zpbmc6IHRoaXMuaXNNb3ZpbmcoKSxcbiAgICAgICAgICAgIGZhZGVEdXJhdGlvbjogdGhpcy5fZmFkZUR1cmF0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JlbmRlcicpKTtcblxuICAgICAgICBpZiAodGhpcy5sb2FkZWQoKSAmJiAhdGhpcy5fbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbG9hZCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlICYmICh0aGlzLnN0eWxlLmhhc1RyYW5zaXRpb25zKCkgfHwgY3Jvc3NGYWRpbmcpKSB7XG4gICAgICAgICAgICB0aGlzLl9zdHlsZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlICYmICF0aGlzLl9wbGFjZW1lbnREaXJ0eSkge1xuICAgICAgICAgICAgLy8gU2luY2Ugbm8gZmFkZSBvcGVyYXRpb25zIGFyZSBpbiBwcm9ncmVzcywgd2UgY2FuIHJlbGVhc2VcbiAgICAgICAgICAgIC8vIGFsbCB0aWxlcyBoZWxkIGZvciBmYWRpbmcuIElmIHdlIGRpZG4ndCBkbyB0aGlzLCB0aGUgdGlsZXNcbiAgICAgICAgICAgIC8vIHdvdWxkIGp1c3Qgc2l0IGluIHRoZSBTb3VyY2VDYWNoZXMgdW50aWwgdGhlIG5leHQgcmVuZGVyXG4gICAgICAgICAgICB0aGlzLnN0eWxlLl9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTY2hlZHVsZSBhbm90aGVyIHJlbmRlciBmcmFtZSBpZiBpdCdzIG5lZWRlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRXZlbiB0aG91Z2ggYF9zdHlsZURpcnR5YCBhbmQgYF9zb3VyY2VzRGlydHlgIGFyZSByZXNldCBpbiB0aGlzXG4gICAgICAgIC8vIG1ldGhvZCwgc3luY2hyb25vdXMgZXZlbnRzIGZpcmVkIGR1cmluZyBTdHlsZSN1cGRhdGUgb3JcbiAgICAgICAgLy8gU3R5bGUjX3VwZGF0ZVNvdXJjZXMgY291bGQgaGF2ZSBjYXVzZWQgdGhlbSB0byBiZSBzZXQgYWdhaW4uXG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2VzRGlydHkgfHwgdGhpcy5fcmVwYWludCB8fCB0aGlzLl9zdHlsZURpcnR5IHx8IHRoaXMuX3BsYWNlbWVudERpcnR5KSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJSZXBhaW50KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNNb3ZpbmcoKSAmJiB0aGlzLmxvYWRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdpZGxlJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFuIHVwIGFuZCByZWxlYXNlIGFsbCBpbnRlcm5hbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFwLlxuICAgICAqXG4gICAgICogVGhpcyBpbmNsdWRlcyBET00gZWxlbWVudHMsIGV2ZW50IGJpbmRpbmdzLCB3ZWIgd29ya2VycywgYW5kIFdlYkdMIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHlvdSBhcmUgZG9uZSB1c2luZyB0aGUgbWFwIGFuZCB3aXNoIHRvIGVuc3VyZSB0aGF0IGl0IG5vXG4gICAgICogbG9uZ2VyIGNvbnN1bWVzIGJyb3dzZXIgcmVzb3VyY2VzLiBBZnRlcndhcmRzLCB5b3UgbXVzdCBub3QgY2FsbCBhbnkgb3RoZXJcbiAgICAgKiBtZXRob2RzIG9uIHRoZSBtYXAuXG4gICAgICovXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5faGFzaCkgdGhpcy5faGFzaC5yZW1vdmUoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5fY29udHJvbHMpIGNvbnRyb2wub25SZW1vdmUodGhpcyk7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xzID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZW5kZXJUYXNrUXVldWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZXRTdHlsZShudWxsKTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUsIGZhbHNlKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCB0aGlzLl9vbldpbmRvd09ubGluZSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gdGhpcy5wYWludGVyLmNvbnRleHQuZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9sb3NlX2NvbnRleHQnKTtcbiAgICAgICAgaWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uLmxvc2VDb250ZXh0KCk7XG4gICAgICAgIHJlbW92ZU5vZGUodGhpcy5fY2FudmFzQ29udGFpbmVyKTtcbiAgICAgICAgcmVtb3ZlTm9kZSh0aGlzLl9jb250cm9sQ29udGFpbmVyKTtcbiAgICAgICAgcmVtb3ZlTm9kZSh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5KTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLW1hcCcpO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyZW1vdmUnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgcmVuZGVyaW5nIG9mIGEgc2luZ2xlIGZyYW1lLiBVc2UgdGhpcyBtZXRob2Qgd2l0aCBjdXN0b20gbGF5ZXJzIHRvXG4gICAgICogcmVwYWludCB0aGUgbWFwIHdoZW4gdGhlIGxheWVyIGNoYW5nZXMuIENhbGxpbmcgdGhpcyBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdGhlXG4gICAgICogbmV4dCBmcmFtZSBpcyByZW5kZXJlZCB3aWxsIHN0aWxsIHJlc3VsdCBpbiBvbmx5IGEgc2luZ2xlIGZyYW1lIGJlaW5nIHJlbmRlcmVkLlxuICAgICAqL1xuICAgIHRyaWdnZXJSZXBhaW50KCkge1xuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiAhdGhpcy5fZnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gYnJvd3Nlci5mcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25XaW5kb3dPbmxpbmUoKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIF9vbldpbmRvd1Jlc2l6ZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrUmVzaXplKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZSh7b3JpZ2luYWxFdmVudDogZXZlbnR9KS5fdXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCB3aWxsIHJlbmRlciBhbiBvdXRsaW5lXG4gICAgICogYXJvdW5kIGVhY2ggdGlsZSBhbmQgdGhlIHRpbGUgSUQuIFRoZXNlIHRpbGUgYm91bmRhcmllcyBhcmUgdXNlZnVsIGZvclxuICAgICAqIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIFRoZSB1bmNvbXByZXNzZWQgZmlsZSBzaXplIG9mIHRoZSBmaXJzdCB2ZWN0b3Igc291cmNlIGlzIGRyYXduIGluIHRoZSB0b3AgbGVmdFxuICAgICAqIGNvcm5lciBvZiBlYWNoIHRpbGUsIG5leHQgdG8gdGhlIHRpbGUgSUQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzaG93VGlsZUJvdW5kYXJpZXNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICovXG4gICAgZ2V0IHNob3dUaWxlQm91bmRhcmllcygpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzOyB9XG4gICAgc2V0IHNob3dUaWxlQm91bmRhcmllcyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgd2lsbCByZW5kZXIgYm94ZXNcbiAgICAgKiBhcm91bmQgYWxsIHN5bWJvbHMgaW4gdGhlIGRhdGEgc291cmNlLCByZXZlYWxpbmcgd2hpY2ggc3ltYm9sc1xuICAgICAqIHdlcmUgcmVuZGVyZWQgb3Igd2hpY2ggd2VyZSBoaWRkZW4gZHVlIHRvIGNvbGxpc2lvbnMuXG4gICAgICogVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNob3dDb2xsaXNpb25Cb3hlc1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKi9cbiAgICBnZXQgc2hvd0NvbGxpc2lvbkJveGVzKCk6IGJvb2xlYW4geyByZXR1cm4gISF0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM7IH1cbiAgICBzZXQgc2hvd0NvbGxpc2lvbkJveGVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMgPT09IHZhbHVlKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyA9IHZhbHVlO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgdHVybiBjb2xsaXNpb24gYm94ZXMgb24gd2UgaGF2ZSB0byBnZW5lcmF0ZSB0aGVtIGZvciBleGlzdGluZyB0aWxlc1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSB0dXJuIHRoZW0gb2ZmLCB0aGVyZSdzIG5vIGNvc3QgdG8gbGVhdmluZyBleGlzdGluZyBib3hlcyBpbiBwbGFjZVxuICAgICAgICAgICAgdGhpcy5zdHlsZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjYWxsIGFuIHVwZGF0ZSB0byByZW1vdmUgY29sbGlzaW9uIGJveGVzXG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgc2hvdWxkIGNvbG9yLWNvZGVcbiAgICAgKiBlYWNoIGZyYWdtZW50IHRvIHNob3cgaG93IG1hbnkgdGltZXMgaXQgaGFzIGJlZW4gc2hhZGVkLlxuICAgICAqIFdoaXRlIGZyYWdtZW50cyBoYXZlIGJlZW4gc2hhZGVkIDggb3IgbW9yZSB0aW1lcy5cbiAgICAgKiBCbGFjayBmcmFnbWVudHMgaGF2ZSBiZWVuIHNoYWRlZCAwIHRpbWVzLlxuICAgICAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzaG93T3ZlcmRyYXdcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICovXG4gICAgZ2V0IHNob3dPdmVyZHJhd0luc3BlY3RvcigpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yOyB9XG4gICAgc2V0IHNob3dPdmVyZHJhd0luc3BlY3Rvcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgd2lsbFxuICAgICAqIGNvbnRpbnVvdXNseSByZXBhaW50LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3IgYW5hbHl6aW5nIHBlcmZvcm1hbmNlLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVwYWludFxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKi9cbiAgICBnZXQgcmVwYWludCgpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fcmVwYWludDsgfVxuICAgIHNldCByZXBhaW50KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXBhaW50ICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fcmVwYWludCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVwYWludCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNob3cgdmVydGljZXNcbiAgICBnZXQgdmVydGljZXMoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3ZlcnRpY2VzOyB9XG4gICAgc2V0IHZlcnRpY2VzKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuX3ZlcnRpY2VzID0gdmFsdWU7IHRoaXMuX3VwZGF0ZSgpOyB9XG5cbiAgICAvLyBmb3IgY2FjaGUgYnJvd3NlciB0ZXN0c1xuICAgIF9zZXRDYWNoZUxpbWl0cyhsaW1pdDogbnVtYmVyLCBjaGVja1RocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgICAgIHNldENhY2hlTGltaXRzKGxpbWl0LCBjaGVja1RocmVzaG9sZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHZlcnNpb24gb2YgTWFwYm94IEdMIEpTIGluIHVzZSBhcyBzcGVjaWZpZWQgaW4gcGFja2FnZS5qc29uLCBDSEFOR0VMT0cubWQsIGFuZCB0aGUgR2l0SHViIHJlbGVhc2UuXG4gICAgICpcbiAgICAgKiBAbmFtZSB2ZXJzaW9uXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEB2YXIge3N0cmluZ30gdmVyc2lvblxuICAgICAqL1xuXG4gICAgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHsgcmV0dXJuIHZlcnNpb247IH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFwO1xuXG5mdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBpbnRlcmFjdGl2ZSBjb250cm9scyBhZGRlZCB0byB0aGUgbWFwLiBUaGlzIGlzIGFcbiAqIHNwZWNpZmljYXRpb24gZm9yIGltcGxlbWVudGVycyB0byBtb2RlbDogaXQgaXMgbm90XG4gKiBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogQ29udHJvbHMgbXVzdCBpbXBsZW1lbnQgYG9uQWRkYCBhbmQgYG9uUmVtb3ZlYCwgYW5kIG11c3Qgb3duIGFuXG4gKiBlbGVtZW50LCB3aGljaCBpcyBvZnRlbiBhIGBkaXZgIGVsZW1lbnQuIFRvIHVzZSBNYXBib3ggR0wgSlMnc1xuICogZGVmYXVsdCBjb250cm9sIHN0eWxpbmcsIGFkZCB0aGUgYG1hcGJveGdsLWN0cmxgIGNsYXNzIHRvIHlvdXIgY29udHJvbCdzXG4gKiBub2RlLlxuICpcbiAqIEBpbnRlcmZhY2UgSUNvbnRyb2xcbiAqIEBleGFtcGxlXG4gKiAvLyBDb250cm9sIGltcGxlbWVudGVkIGFzIEVTNiBjbGFzc1xuICogY2xhc3MgSGVsbG9Xb3JsZENvbnRyb2wge1xuICogICAgIG9uQWRkKG1hcCkge1xuICogICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gKiAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICogICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0gJ21hcGJveGdsLWN0cmwnO1xuICogICAgICAgICB0aGlzLl9jb250YWluZXIudGV4dENvbnRlbnQgPSAnSGVsbG8sIHdvcmxkJztcbiAqICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAqICAgICB9XG4gKlxuICogICAgIG9uUmVtb3ZlKCkge1xuICogICAgICAgICB0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpO1xuICogICAgICAgICB0aGlzLl9tYXAgPSB1bmRlZmluZWQ7XG4gKiAgICAgfVxuICogfVxuICpcbiAqIC8vIENvbnRyb2wgaW1wbGVtZW50ZWQgYXMgRVM1IHByb3RvdHlwaWNhbCBjbGFzc1xuICogZnVuY3Rpb24gSGVsbG9Xb3JsZENvbnRyb2woKSB7IH1cbiAqXG4gKiBIZWxsb1dvcmxkQ29udHJvbC5wcm90b3R5cGUub25BZGQgPSBmdW5jdGlvbihtYXApIHtcbiAqICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gKiAgICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gKiAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTmFtZSA9ICdtYXBib3hnbC1jdHJsJztcbiAqICAgICB0aGlzLl9jb250YWluZXIudGV4dENvbnRlbnQgPSAnSGVsbG8sIHdvcmxkJztcbiAqICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICogfTtcbiAqXG4gKiBIZWxsb1dvcmxkQ29udHJvbC5wcm90b3R5cGUub25SZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gKiAgICAgIHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gKiAgICAgIHRoaXMuX21hcCA9IHVuZGVmaW5lZDtcbiAqIH07XG4gKi9cblxuLyoqXG4gKiBSZWdpc3RlciBhIGNvbnRyb2wgb24gdGhlIG1hcCBhbmQgZ2l2ZSBpdCBhIGNoYW5jZSB0byByZWdpc3RlciBldmVudCBsaXN0ZW5lcnNcbiAqIGFuZCByZXNvdXJjZXMuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB7QGxpbmsgTWFwI2FkZENvbnRyb2x9XG4gKiBpbnRlcm5hbGx5LlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIElDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uQWRkXG4gKiBAcGFyYW0ge01hcH0gbWFwIHRoZSBNYXAgdGhpcyBjb250cm9sIHdpbGwgYmUgYWRkZWQgdG9cbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gVGhlIGNvbnRyb2wncyBjb250YWluZXIgZWxlbWVudC4gVGhpcyBzaG91bGRcbiAqIGJlIGNyZWF0ZWQgYnkgdGhlIGNvbnRyb2wgYW5kIHJldHVybmVkIGJ5IG9uQWRkIHdpdGhvdXQgYmVpbmcgYXR0YWNoZWRcbiAqIHRvIHRoZSBET006IHRoZSBtYXAgd2lsbCBpbnNlcnQgdGhlIGNvbnRyb2wncyBlbGVtZW50IGludG8gdGhlIERPTVxuICogYXMgbmVjZXNzYXJ5LlxuICovXG5cbi8qKlxuICogVW5yZWdpc3RlciBhIGNvbnRyb2wgb24gdGhlIG1hcCBhbmQgZ2l2ZSBpdCBhIGNoYW5jZSB0byBkZXRhY2ggZXZlbnQgbGlzdGVuZXJzXG4gKiBhbmQgcmVzb3VyY2VzLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkge0BsaW5rIE1hcCNyZW1vdmVDb250cm9sfVxuICogaW50ZXJuYWxseS5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBJQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICogQHBhcmFtIHtNYXB9IG1hcCB0aGUgTWFwIHRoaXMgY29udHJvbCB3aWxsIGJlIHJlbW92ZWQgZnJvbVxuICogQHJldHVybnMge3VuZGVmaW5lZH0gdGhlcmUgaXMgbm8gcmVxdWlyZWQgcmV0dXJuIHZhbHVlIGZvciB0aGlzIG1ldGhvZFxuICovXG5cbi8qKlxuICogT3B0aW9uYWxseSBwcm92aWRlIGEgZGVmYXVsdCBwb3NpdGlvbiBmb3IgdGhpcyBjb250cm9sLiBJZiB0aGlzIG1ldGhvZFxuICogaXMgaW1wbGVtZW50ZWQgYW5kIHtAbGluayBNYXAjYWRkQ29udHJvbH0gaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGBwb3NpdGlvbmBcbiAqIHBhcmFtZXRlciwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGdldERlZmF1bHRQb3NpdGlvbiB3aWxsIGJlIHVzZWQgYXMgdGhlXG4gKiBjb250cm9sJ3MgcG9zaXRpb24uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgSUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgZ2V0RGVmYXVsdFBvc2l0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBhIGNvbnRyb2wgcG9zaXRpb24sIG9uZSBvZiB0aGUgdmFsdWVzIHZhbGlkIGluIGFkZENvbnRyb2wuXG4gKi9cblxuLyoqXG4gKiBBIFtgUG9pbnRgIGdlb21ldHJ5XShodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L3BvaW50LWdlb21ldHJ5KSBvYmplY3QsIHdoaWNoIGhhc1xuICogYHhgIGFuZCBgeWAgcHJvcGVydGllcyByZXByZXNlbnRpbmcgc2NyZWVuIGNvb3JkaW5hdGVzIGluIHBpeGVscy5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQb2ludFxuICovXG5cbi8qKlxuICogQSB7QGxpbmsgUG9pbnR9IG9yIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIHJlcHJlc2VudGluZyBgeGAgYW5kIGB5YCBzY3JlZW4gY29vcmRpbmF0ZXMgaW4gcGl4ZWxzLlxuICpcbiAqIEB0eXBlZGVmIHsoUG9pbnQgfCBBcnJheTxudW1iZXI+KX0gUG9pbnRMaWtlXG4gKi9cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuaW1wb3J0IHtleHRlbmQsIGJpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRHJhZ1JvdGF0ZUhhbmRsZXIgZnJvbSAnLi4vaGFuZGxlci9kcmFnX3JvdGF0ZSc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgc2hvd0NvbXBhc3M/OiBib29sZWFuLFxuICAgIHNob3dab29tPzogYm9vbGVhbixcbiAgICB2aXN1YWxpemVQaXRjaD86IGJvb2xlYW5cbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgIHNob3dDb21wYXNzOiB0cnVlLFxuICAgIHNob3dab29tOiB0cnVlLFxuICAgIHZpc3VhbGl6ZVBpdGNoOiBmYWxzZVxufTtcblxuLyoqXG4gKiBBIGBOYXZpZ2F0aW9uQ29udHJvbGAgY29udHJvbCBjb250YWlucyB6b29tIGJ1dHRvbnMgYW5kIGEgY29tcGFzcy5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNob3dDb21wYXNzPXRydWVdIElmIGB0cnVlYCB0aGUgY29tcGFzcyBidXR0b24gaXMgaW5jbHVkZWQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNob3dab29tPXRydWVdIElmIGB0cnVlYCB0aGUgem9vbS1pbiBhbmQgem9vbS1vdXQgYnV0dG9ucyBhcmUgaW5jbHVkZWQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnZpc3VhbGl6ZVBpdGNoPWZhbHNlXSBJZiBgdHJ1ZWAgdGhlIHBpdGNoIGlzIHZpc3VhbGl6ZWQgYnkgcm90YXRpbmcgWC1heGlzIG9mIGNvbXBhc3MuXG4gKiBAZXhhbXBsZVxuICogdmFyIG5hdiA9IG5ldyBtYXBib3hnbC5OYXZpZ2F0aW9uQ29udHJvbCgpO1xuICogbWFwLmFkZENvbnRyb2wobmF2LCAndG9wLWxlZnQnKTtcbiAqIEBzZWUgW0Rpc3BsYXkgbWFwIG5hdmlnYXRpb24gY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbmF2aWdhdGlvbi8pXG4gKiBAc2VlIFtBZGQgYSB0aGlyZCBwYXJ0eSB2ZWN0b3IgdGlsZSBzb3VyY2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdGhpcmQtcGFydHkvKVxuICovXG5jbGFzcyBOYXZpZ2F0aW9uQ29udHJvbCB7XG4gICAgX21hcDogTWFwO1xuICAgIG9wdGlvbnM6IE9wdGlvbnM7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX3pvb21JbkJ1dHRvbjogSFRNTEVsZW1lbnQ7XG4gICAgX3pvb21PdXRCdXR0b246IEhUTUxFbGVtZW50O1xuICAgIF9jb21wYXNzOiBIVE1MRWxlbWVudDtcbiAgICBfY29tcGFzc0Fycm93OiBIVE1MRWxlbWVudDtcbiAgICBfaGFuZGxlcjogRHJhZ1JvdGF0ZUhhbmRsZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAnKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGUpID0+IGUucHJldmVudERlZmF1bHQoKSk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Wm9vbSkge1xuICAgICAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAgICAgJ191cGRhdGVab29tQnV0dG9ucydcbiAgICAgICAgICAgIF0sIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5fem9vbUluQnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKCdtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC16b29tLWluJywgJ1pvb20gaW4nLCAoZSkgPT4gdGhpcy5fbWFwLnpvb21Jbih7fSwge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgICAgICAgICB0aGlzLl96b29tT3V0QnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKCdtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC16b29tLW91dCcsICdab29tIG91dCcsIChlKSA9PiB0aGlzLl9tYXAuem9vbU91dCh7fSwge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcykge1xuICAgICAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAgICAgJ19yb3RhdGVDb21wYXNzQXJyb3cnXG4gICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBhc3MgPSB0aGlzLl9jcmVhdGVCdXR0b24oJ21hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLWNvbXBhc3MnLCAnUmVzZXQgYmVhcmluZyB0byBub3J0aCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAucmVzZXROb3J0aFBpdGNoKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5yZXNldE5vcnRoKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY29tcGFzc0Fycm93ID0gRE9NLmNyZWF0ZSgnc3BhbicsICdtYXBib3hnbC1jdHJsLWNvbXBhc3MtYXJyb3cnLCB0aGlzLl9jb21wYXNzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVab29tQnV0dG9ucygpIHtcbiAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMuX21hcC5nZXRab29tKCk7XG4gICAgICAgIGlmICh6b29tID09PSB0aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpKSB7XG4gICAgICAgICAgICB0aGlzLl96b29tSW5CdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1pY29uLWRpc2FibGVkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl96b29tSW5CdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1pY29uLWRpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHpvb20gPT09IHRoaXMuX21hcC5nZXRNaW5ab29tKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3pvb21PdXRCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1pY29uLWRpc2FibGVkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl96b29tT3V0QnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtaWNvbi1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3JvdGF0ZUNvbXBhc3NBcnJvdygpIHtcbiAgICAgICAgY29uc3Qgcm90YXRlID0gdGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoID9cbiAgICAgICAgICAgIGBzY2FsZSgkezEgLyBNYXRoLnBvdyhNYXRoLmNvcyh0aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNoICogKE1hdGguUEkgLyAxODApKSwgMC41KX0pIHJvdGF0ZVgoJHt0aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNofWRlZykgcm90YXRlWigke3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUgKiAoMTgwIC8gTWF0aC5QSSl9ZGVnKWAgOlxuICAgICAgICAgICAgYHJvdGF0ZSgke3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUgKiAoMTgwIC8gTWF0aC5QSSl9ZGVnKWA7XG5cbiAgICAgICAgdGhpcy5fY29tcGFzc0Fycm93LnN0eWxlLnRyYW5zZm9ybSA9IHJvdGF0ZTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1pvb20pIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignem9vbScsIHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcykge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vbigncGl0Y2gnLCB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdyb3RhdGUnLCB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpO1xuICAgICAgICAgICAgdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVyID0gbmV3IERyYWdSb3RhdGVIYW5kbGVyKG1hcCwge2J1dHRvbjogJ2xlZnQnLCBlbGVtZW50OiB0aGlzLl9jb21wYXNzfSk7XG4gICAgICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl9jb21wYXNzLCAnbW91c2Vkb3duJywgdGhpcy5faGFuZGxlci5vbk1vdXNlRG93bik7XG4gICAgICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl9jb21wYXNzLCAndG91Y2hzdGFydCcsIHRoaXMuX2hhbmRsZXIub25Nb3VzZURvd24sIHtwYXNzaXZlOiBmYWxzZX0pO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlci5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1pvb20pIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3pvb20nLCB0aGlzLl91cGRhdGVab29tQnV0dG9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcykge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3BpdGNoJywgdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3JvdGF0ZScsIHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyk7XG4gICAgICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9jb21wYXNzLCAnbW91c2Vkb3duJywgdGhpcy5faGFuZGxlci5vbk1vdXNlRG93bik7XG4gICAgICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9jb21wYXNzLCAndG91Y2hzdGFydCcsIHRoaXMuX2hhbmRsZXIub25Nb3VzZURvd24sIHtwYXNzaXZlOiBmYWxzZX0pO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlci5kaXNhYmxlKCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5faGFuZGxlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXA7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUJ1dHRvbihjbGFzc05hbWU6IHN0cmluZywgYXJpYUxhYmVsOiBzdHJpbmcsIGZuOiAoKSA9PiBtaXhlZCkge1xuICAgICAgICBjb25zdCBhID0gRE9NLmNyZWF0ZSgnYnV0dG9uJywgY2xhc3NOYW1lLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICBhLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgYS50aXRsZSA9IGFyaWFMYWJlbDtcbiAgICAgICAgYS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBhcmlhTGFiZWwpO1xuICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZm4pO1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb25Db250cm9sO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5cbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuXG4vKipcbiAqIEdpdmVuIGEgTG5nTGF0LCBwcmlvciBwcm9qZWN0ZWQgcG9zaXRpb24sIGFuZCBhIHRyYW5zZm9ybSwgcmV0dXJuIGEgbmV3IExuZ0xhdCBzaGlmdGVkXG4gKiBuIMODwpcgMzYww4LCsCBlYXN0IG9yIHdlc3QgZm9yIHNvbWUgbiDDosKJwqUgMCBzdWNoIHRoYXQ6XG4gKlxuICogKiB0aGUgcHJvamVjdGVkIGxvY2F0aW9uIG9mIHRoZSByZXN1bHQgaXMgb24gc2NyZWVuLCBpZiBwb3NzaWJsZSwgYW5kIHNlY29uZGFyaWx5OlxuICogKiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwcm9qZWN0ZWQgbG9jYXRpb24gb2YgdGhlIHJlc3VsdCBhbmQgdGhlIHByaW9yIHBvc2l0aW9uXG4gKiAgIGlzIG1pbmltaXplZC5cbiAqXG4gKiBUaGUgb2JqZWN0IGlzIHRvIHByZXNlcnZlIHBlcmNlaXZlZCBvYmplY3QgY29uc3RhbmN5IGZvciBQb3B1cHMgYW5kIE1hcmtlcnMgYXMgbXVjaCBhc1xuICogcG9zc2libGU7IHRoZXkgc2hvdWxkIGF2b2lkIHNoaWZ0aW5nIGxhcmdlIGRpc3RhbmNlcyBhY3Jvc3MgdGhlIHNjcmVlbiwgZXZlbiB3aGVuIHRoZVxuICogbWFwIGNlbnRlciBjaGFuZ2VzIGJ5IMOCwrEzNjDDgsKwIGR1ZSB0byBhdXRvbWF0aWMgd3JhcHBpbmcsIGFuZCB3aGVuIGFib3V0IHRvIGdvIG9mZiBzY3JlZW4sXG4gKiBzaG91bGQgd3JhcCBqdXN0IGVub3VnaCB0byBhdm9pZCBkb2luZyBzby5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsbmdMYXQ6IExuZ0xhdCwgcHJpb3JQb3M6ID9Qb2ludCwgdHJhbnNmb3JtOiBUcmFuc2Zvcm0pOiBMbmdMYXQge1xuICAgIGxuZ0xhdCA9IG5ldyBMbmdMYXQobG5nTGF0LmxuZywgbG5nTGF0LmxhdCk7XG5cbiAgICAvLyBGaXJzdCwgdHJ5IHNoaWZ0aW5nIG9uZSB3b3JsZCBpbiBlaXRoZXIgZGlyZWN0aW9uLCBhbmQgc2VlIGlmIGVpdGhlciBpcyBjbG9zZXIgdG8gdGhlXG4gICAgLy8gcHJpb3IgcG9zaXRpb24uIFRoaXMgcHJlc2VydmVzIG9iamVjdCBjb25zdGFuY3kgd2hlbiB0aGUgbWFwIGNlbnRlciBpcyBhdXRvLXdyYXBwZWRcbiAgICAvLyBkdXJpbmcgYW5pbWF0aW9ucy5cbiAgICBpZiAocHJpb3JQb3MpIHtcbiAgICAgICAgY29uc3QgbGVmdCAgPSBuZXcgTG5nTGF0KGxuZ0xhdC5sbmcgLSAzNjAsIGxuZ0xhdC5sYXQpO1xuICAgICAgICBjb25zdCByaWdodCA9IG5ldyBMbmdMYXQobG5nTGF0LmxuZyArIDM2MCwgbG5nTGF0LmxhdCk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQobG5nTGF0KS5kaXN0U3FyKHByaW9yUG9zKTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybS5sb2NhdGlvblBvaW50KGxlZnQpLmRpc3RTcXIocHJpb3JQb3MpIDwgZGVsdGEpIHtcbiAgICAgICAgICAgIGxuZ0xhdCA9IGxlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQocmlnaHQpLmRpc3RTcXIocHJpb3JQb3MpIDwgZGVsdGEpIHtcbiAgICAgICAgICAgIGxuZ0xhdCA9IHJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2Vjb25kLCB3cmFwIHRvd2FyZCB0aGUgY2VudGVyIHVudGlsIHRoZSBuZXcgcG9zaXRpb24gaXMgb24gc2NyZWVuLCBvciB3ZSBjYW4ndCBnZXRcbiAgICAvLyBhbnkgY2xvc2VyLlxuICAgIHdoaWxlIChNYXRoLmFicyhsbmdMYXQubG5nIC0gdHJhbnNmb3JtLmNlbnRlci5sbmcpID4gMTgwKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRyYW5zZm9ybS5sb2NhdGlvblBvaW50KGxuZ0xhdCk7XG4gICAgICAgIGlmIChwb3MueCA+PSAwICYmIHBvcy55ID49IDAgJiYgcG9zLnggPD0gdHJhbnNmb3JtLndpZHRoICYmIHBvcy55IDw9IHRyYW5zZm9ybS5oZWlnaHQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsbmdMYXQubG5nID4gdHJhbnNmb3JtLmNlbnRlci5sbmcpIHtcbiAgICAgICAgICAgIGxuZ0xhdC5sbmcgLT0gMzYwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG5nTGF0LmxuZyArPSAzNjA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbG5nTGF0O1xufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IHR5cGUgQW5jaG9yID1cbiAgICB8ICdjZW50ZXInXG4gICAgfCAndG9wJ1xuICAgIHwgJ2JvdHRvbSdcbiAgICB8ICdsZWZ0J1xuICAgIHwgJ3JpZ2h0J1xuICAgIHwgJ3RvcC1sZWZ0J1xuICAgIHwgJ3RvcC1yaWdodCdcbiAgICB8ICdib3R0b20tbGVmdCdcbiAgICB8ICdib3R0b20tcmlnaHQnO1xuXG5leHBvcnQgY29uc3QgYW5jaG9yVHJhbnNsYXRlOiB7W0FuY2hvcl06IHN0cmluZ30gPSB7XG4gICAgJ2NlbnRlcic6ICd0cmFuc2xhdGUoLTUwJSwtNTAlKScsXG4gICAgJ3RvcCc6ICd0cmFuc2xhdGUoLTUwJSwwKScsXG4gICAgJ3RvcC1sZWZ0JzogJ3RyYW5zbGF0ZSgwLDApJyxcbiAgICAndG9wLXJpZ2h0JzogJ3RyYW5zbGF0ZSgtMTAwJSwwKScsXG4gICAgJ2JvdHRvbSc6ICd0cmFuc2xhdGUoLTUwJSwtMTAwJSknLFxuICAgICdib3R0b20tbGVmdCc6ICd0cmFuc2xhdGUoMCwtMTAwJSknLFxuICAgICdib3R0b20tcmlnaHQnOiAndHJhbnNsYXRlKC0xMDAlLC0xMDAlKScsXG4gICAgJ2xlZnQnOiAndHJhbnNsYXRlKDAsLTUwJSknLFxuICAgICdyaWdodCc6ICd0cmFuc2xhdGUoLTEwMCUsLTUwJSknXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlBbmNob3JDbGFzcyhlbGVtZW50OiBIVE1MRWxlbWVudCwgYW5jaG9yOiBBbmNob3IsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5jbGFzc0xpc3Q7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gYW5jaG9yVHJhbnNsYXRlKSB7XG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoYG1hcGJveGdsLSR7cHJlZml4fS1hbmNob3ItJHtrZXl9YCk7XG4gICAgfVxuICAgIGNsYXNzTGlzdC5hZGQoYG1hcGJveGdsLSR7cHJlZml4fS1hbmNob3ItJHthbmNob3J9YCk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uL3V0aWwvZG9tJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgc21hcnRXcmFwIGZyb20gJy4uL3V0aWwvc21hcnRfd3JhcCc7XG5pbXBvcnQge2JpbmRBbGwsIGV4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7dHlwZSBBbmNob3IsIGFuY2hvclRyYW5zbGF0ZSwgYXBwbHlBbmNob3JDbGFzc30gZnJvbSAnLi9hbmNob3InO1xuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5pbXBvcnQgdHlwZSBQb3B1cCBmcm9tICcuL3BvcHVwJztcbmltcG9ydCB0eXBlIHtMbmdMYXRMaWtlfSBmcm9tIFwiLi4vZ2VvL2xuZ19sYXRcIjtcbmltcG9ydCB0eXBlIHtNYXBNb3VzZUV2ZW50LCBNYXBUb3VjaEV2ZW50fSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSB7UG9pbnRMaWtlfSBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIGVsZW1lbnQ/OiBIVE1MRWxlbWVudCxcbiAgICBvZmZzZXQ/OiBQb2ludExpa2UsXG4gICAgYW5jaG9yPzogQW5jaG9yLFxuICAgIGNvbG9yPzogc3RyaW5nLFxuICAgIGRyYWdnYWJsZT86IGJvb2xlYW5cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcmtlciBjb21wb25lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFtvcHRpb25zLmVsZW1lbnRdIERPTSBlbGVtZW50IHRvIHVzZSBhcyBhIG1hcmtlci4gVGhlIGRlZmF1bHQgaXMgYSBsaWdodCBibHVlLCBkcm9wbGV0LXNoYXBlZCBTVkcgbWFya2VyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuY2hvcj0nY2VudGVyJ10gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgcGFydCBvZiB0aGUgTWFya2VyIHRoYXQgc2hvdWxkIGJlIHBvc2l0aW9uZWQgY2xvc2VzdCB0byB0aGUgY29vcmRpbmF0ZSBzZXQgdmlhIHtAbGluayBNYXJrZXIjc2V0TG5nTGF0fS5cbiAqICAgT3B0aW9ucyBhcmUgYCdjZW50ZXInYCwgYCd0b3AnYCwgYCdib3R0b20nYCwgYCdsZWZ0J2AsIGAncmlnaHQnYCwgYCd0b3AtbGVmdCdgLCBgJ3RvcC1yaWdodCdgLCBgJ2JvdHRvbS1sZWZ0J2AsIGFuZCBgJ2JvdHRvbS1yaWdodCdgLlxuICogQHBhcmFtIHtQb2ludExpa2V9IFtvcHRpb25zLm9mZnNldF0gVGhlIG9mZnNldCBpbiBwaXhlbHMgYXMgYSB7QGxpbmsgUG9pbnRMaWtlfSBvYmplY3QgdG8gYXBwbHkgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQncyBjZW50ZXIuIE5lZ2F0aXZlcyBpbmRpY2F0ZSBsZWZ0IGFuZCB1cC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb2xvcj0nIzNGQjFDRSddIFRoZSBjb2xvciB0byB1c2UgZm9yIHRoZSBkZWZhdWx0IG1hcmtlciBpZiBvcHRpb25zLmVsZW1lbnQgaXMgbm90IHByb3ZpZGVkLiBUaGUgZGVmYXVsdCBpcyBsaWdodCBibHVlLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kcmFnZ2FibGU9ZmFsc2VdIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IGEgbWFya2VyIGlzIGFibGUgdG8gYmUgZHJhZ2dlZCB0byBhIG5ldyBwb3NpdGlvbiBvbiB0aGUgbWFwLlxuICogQGV4YW1wbGVcbiAqIHZhciBtYXJrZXIgPSBuZXcgbWFwYm94Z2wuTWFya2VyKClcbiAqICAgLnNldExuZ0xhdChbMzAuNSwgNTAuNV0pXG4gKiAgIC5hZGRUbyhtYXApO1xuICogQHNlZSBbQWRkIGN1c3RvbSBpY29ucyB3aXRoIE1hcmtlcnNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY3VzdG9tLW1hcmtlci1pY29ucy8pXG4gKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgTWFya2VyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1tYXJrZXIvKVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJrZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2FuY2hvcjogQW5jaG9yO1xuICAgIF9vZmZzZXQ6IFBvaW50O1xuICAgIF9lbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBfcG9wdXA6ID9Qb3B1cDtcbiAgICBfbG5nTGF0OiBMbmdMYXQ7XG4gICAgX3BvczogP1BvaW50O1xuICAgIF9jb2xvcjogP3N0cmluZztcbiAgICBfZGVmYXVsdE1hcmtlcjogYm9vbGVhbjtcbiAgICBfZHJhZ2dhYmxlOiBib29sZWFuO1xuICAgIF9zdGF0ZTogJ2luYWN0aXZlJyB8ICdwZW5kaW5nJyB8ICdhY3RpdmUnOyAvLyB1c2VkIGZvciBoYW5kbGluZyBkcmFnIGV2ZW50c1xuICAgIF9wb3NpdGlvbkRlbHRhOiA/bnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IE9wdGlvbnMsIGxlZ2FjeU9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IC0tIHRoZSBjb25zdHJ1Y3RvciB1c2VkIHRvIGFjY2VwdCB0aGUgZWxlbWVudCBhcyBhXG4gICAgICAgIC8vIHJlcXVpcmVkIGZpcnN0IGFyZ3VtZW50LCBiZWZvcmUgaXQgd2FzIG1hZGUgb3B0aW9uYWwuXG4gICAgICAgIGlmIChvcHRpb25zIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50IHx8IGxlZ2FjeU9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe2VsZW1lbnQ6IG9wdGlvbnN9LCBsZWdhY3lPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ191cGRhdGUnLFxuICAgICAgICAgICAgJ19vbk1vdmUnLFxuICAgICAgICAgICAgJ19vblVwJyxcbiAgICAgICAgICAgICdfYWRkRHJhZ0hhbmRsZXInLFxuICAgICAgICAgICAgJ19vbk1hcENsaWNrJ1xuICAgICAgICBdLCB0aGlzKTtcblxuICAgICAgICB0aGlzLl9hbmNob3IgPSBvcHRpb25zICYmIG9wdGlvbnMuYW5jaG9yIHx8ICdjZW50ZXInO1xuICAgICAgICB0aGlzLl9jb2xvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb2xvciB8fCAnIzNGQjFDRSc7XG4gICAgICAgIHRoaXMuX2RyYWdnYWJsZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kcmFnZ2FibGUgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2luYWN0aXZlJztcblxuICAgICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdE1hcmtlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50ID0gRE9NLmNyZWF0ZSgnZGl2Jyk7XG5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBkZWZhdWx0IG1hcCBtYXJrZXIgU1ZHXG4gICAgICAgICAgICBjb25zdCBzdmcgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2hlaWdodCcsICc0MXB4Jyk7XG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3dpZHRoJywgJzI3cHgnKTtcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndmlld0JveCcsICcwIDAgMjcgNDEnKTtcblxuICAgICAgICAgICAgY29uc3QgbWFya2VyTGFyZ2UgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIG1hcmtlckxhcmdlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdzdHJva2UnLCAnbm9uZScpO1xuICAgICAgICAgICAgbWFya2VyTGFyZ2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZS13aWR0aCcsICcxJyk7XG4gICAgICAgICAgICBtYXJrZXJMYXJnZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICdub25lJyk7XG4gICAgICAgICAgICBtYXJrZXJMYXJnZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbC1ydWxlJywgJ2V2ZW5vZGQnKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnZTEgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIHBhZ2UxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsLXJ1bGUnLCAnbm9uemVybycpO1xuXG4gICAgICAgICAgICBjb25zdCBzaGFkb3cgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIHNoYWRvdy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgzLjAsIDI5LjApJyk7XG4gICAgICAgICAgICBzaGFkb3cuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnIzAwMDAwMCcpO1xuXG4gICAgICAgICAgICBjb25zdCBlbGxpcHNlcyA9IFtcbiAgICAgICAgICAgICAgICB7J3J4JzogJzEwLjUnLCAncnknOiAnNS4yNTAwMjI3Myd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnMTAuNScsICdyeSc6ICc1LjI1MDAyMjczJ30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc5LjUnLCAncnknOiAnNC43NzI3NTAwNyd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnOC41JywgJ3J5JzogJzQuMjk1NDk5MzYnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzcuNScsICdyeSc6ICczLjgxODIyMzA4J30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc2LjUnLCAncnknOiAnMy4zNDA5NDY3OSd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnNS41JywgJ3J5JzogJzIuODYzNjcwNTEnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzQuNScsICdyeSc6ICcyLjM4NjM2ODY0J31cbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZGF0YSBvZiBlbGxpcHNlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsbGlwc2UgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2VsbGlwc2UnKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdvcGFjaXR5JywgJzAuMDQnKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeCcsICcxMC41Jyk7XG4gICAgICAgICAgICAgICAgZWxsaXBzZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3knLCAnNS44MDAyOTAwOCcpO1xuICAgICAgICAgICAgICAgIGVsbGlwc2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3J4JywgZGF0YVsncngnXSk7XG4gICAgICAgICAgICAgICAgZWxsaXBzZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncnknLCBkYXRhWydyeSddKTtcbiAgICAgICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoZWxsaXBzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIGJhY2tncm91bmQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCB0aGlzLl9jb2xvcik7XG5cbiAgICAgICAgICAgIGNvbnN0IGJnUGF0aCA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncGF0aCcpO1xuICAgICAgICAgICAgYmdQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgJ00yNywxMy41IEMyNywxOS4wNzQ2NDQgMjAuMjUwMDAxLDI3LjAwMDAwMiAxNC43NSwzNC41MDAwMDIgQzE0LjAxNjY2NSwzNS41MDAwMDQgMTIuOTgzMzM1LDM1LjUwMDAwNCAxMi4yNSwzNC41MDAwMDIgQzYuNzQ5OTk5MywyNy4wMDAwMDIgMCwxOS4yMjI1NjIgMCwxMy41IEMwLDYuMDQ0MTU1OSA2LjA0NDE1NTksMCAxMy41LDAgQzIwLjk1NTg0NCwwIDI3LDYuMDQ0MTU1OSAyNywxMy41IFonKTtcblxuICAgICAgICAgICAgYmFja2dyb3VuZC5hcHBlbmRDaGlsZChiZ1BhdGgpO1xuXG4gICAgICAgICAgICBjb25zdCBib3JkZXIgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIGJvcmRlci5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnb3BhY2l0eScsICcwLjI1Jyk7XG4gICAgICAgICAgICBib3JkZXIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnIzAwMDAwMCcpO1xuXG4gICAgICAgICAgICBjb25zdCBib3JkZXJQYXRoID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJyk7XG4gICAgICAgICAgICBib3JkZXJQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgJ00xMy41LDAgQzYuMDQ0MTU1OSwwIDAsNi4wNDQxNTU5IDAsMTMuNSBDMCwxOS4yMjI1NjIgNi43NDk5OTkzLDI3IDEyLjI1LDM0LjUgQzEzLDM1LjUyMjcyNyAxNC4wMTY2NjQsMzUuNTAwMDA0IDE0Ljc1LDM0LjUgQzIwLjI1MDAwMSwyNyAyNywxOS4wNzQ2NDQgMjcsMTMuNSBDMjcsNi4wNDQxNTU5IDIwLjk1NTg0NCwwIDEzLjUsMCBaIE0xMy41LDEgQzIwLjQxNTQwNCwxIDI2LDYuNTg0NTk2IDI2LDEzLjUgQzI2LDE1Ljg5ODY1NyAyNC40OTU1ODQsMTkuMTgxNDMxIDIyLjIyMDcwMywyMi43MzgyODEgQzE5Ljk0NTgyMywyNi4yOTUxMzIgMTYuNzA1MTE5LDMwLjE0MjE2NyAxMy45NDMzNTksMzMuOTA4MjAzIEMxMy43NDM0NDUsMzQuMTgwODE0IDEzLjYxMjcxNSwzNC4zMjI3MzggMTMuNSwzNC40NDE0MDYgQzEzLjM4NzI4NSwzNC4zMjI3MzggMTMuMjU2NTU1LDM0LjE4MDgxNCAxMy4wNTY2NDEsMzMuOTA4MjAzIEMxMC4yODQ0ODEsMzAuMTI3OTg1IDcuNDE0ODY4NCwyNi4zMTQxNTkgNS4wMTU2MjUsMjIuNzczNDM4IEMyLjYxNjM4MTYsMTkuMjMyNzE1IDEsMTUuOTUzNTM4IDEsMTMuNSBDMSw2LjU4NDU5NiA2LjU4NDU5NiwxIDEzLjUsMSBaJyk7XG5cbiAgICAgICAgICAgIGJvcmRlci5hcHBlbmRDaGlsZChib3JkZXJQYXRoKTtcblxuICAgICAgICAgICAgY29uc3QgbWFraSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgbWFraS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSg2LjAsIDcuMCknKTtcbiAgICAgICAgICAgIG1ha2kuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnI0ZGRkZGRicpO1xuXG4gICAgICAgICAgICBjb25zdCBjaXJjbGVDb250YWluZXIgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIGNpcmNsZUNvbnRhaW5lci5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSg4LjAsIDguMCknKTtcblxuICAgICAgICAgICAgY29uc3QgY2lyY2xlMSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnY2lyY2xlJyk7XG4gICAgICAgICAgICBjaXJjbGUxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJyMwMDAwMDAnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ29wYWNpdHknLCAnMC4yNScpO1xuICAgICAgICAgICAgY2lyY2xlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3gnLCAnNS41Jyk7XG4gICAgICAgICAgICBjaXJjbGUxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeScsICc1LjUnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3InLCAnNS40OTk5OTYyJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZTIgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2NpcmNsZScpO1xuICAgICAgICAgICAgY2lyY2xlMi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjRkZGRkZGJyk7XG4gICAgICAgICAgICBjaXJjbGUyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeCcsICc1LjUnKTtcbiAgICAgICAgICAgIGNpcmNsZTIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N5JywgJzUuNScpO1xuICAgICAgICAgICAgY2lyY2xlMi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncicsICc1LjQ5OTk5NjInKTtcblxuICAgICAgICAgICAgY2lyY2xlQ29udGFpbmVyLmFwcGVuZENoaWxkKGNpcmNsZTEpO1xuICAgICAgICAgICAgY2lyY2xlQ29udGFpbmVyLmFwcGVuZENoaWxkKGNpcmNsZTIpO1xuXG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChzaGFkb3cpO1xuICAgICAgICAgICAgcGFnZTEuYXBwZW5kQ2hpbGQoYmFja2dyb3VuZCk7XG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChib3JkZXIpO1xuICAgICAgICAgICAgcGFnZTEuYXBwZW5kQ2hpbGQobWFraSk7XG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChjaXJjbGVDb250YWluZXIpO1xuXG4gICAgICAgICAgICBzdmcuYXBwZW5kQ2hpbGQocGFnZTEpO1xuXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKHN2Zyk7XG5cbiAgICAgICAgICAgIC8vIGlmIG5vIGVsZW1lbnQgYW5kIG5vIG9mZnNldCBvcHRpb24gZ2l2ZW4gYXBwbHkgYW4gb2Zmc2V0IGZvciB0aGUgZGVmYXVsdCBtYXJrZXJcbiAgICAgICAgICAgIC8vIHRoZSAtMTQgYXMgdGhlIHkgdmFsdWUgb2YgdGhlIGRlZmF1bHQgbWFya2VyIG9mZnNldCB3YXMgZGV0ZXJtaW5lZCBhcyBmb2xsb3dzXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gdGhlIG1hcmtlciB0aXAgaXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgc2hhZG93IGVsbGlwc2UgZnJvbSB0aGUgZGVmYXVsdCBzdmdcbiAgICAgICAgICAgIC8vIHRoZSB5IHZhbHVlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIHNoYWRvdyBlbGxpcHNlIHJlbGF0aXZlIHRvIHRoZSBzdmcgdG9wIGxlZnQgaXMgXCJzaGFkb3cgdHJhbnNmb3JtIHRyYW5zbGF0ZS15ICgyOS4wKSArIGVsbGlwc2UgY3kgKDUuODAwMjkwMDgpXCJcbiAgICAgICAgICAgIC8vIG9mZnNldCB0byB0aGUgc3ZnIGNlbnRlciBcImhlaWdodCAoNDEgLyAyKVwiIGdpdmVzICgyOS4wICsgNS44MDAyOTAwOCkgLSAoNDEgLyAyKSBhbmQgcm91bmRlZCBmb3IgYW4gaW50ZWdlciBwaXhlbCBvZmZzZXQgZ2l2ZXMgMTRcbiAgICAgICAgICAgIC8vIG5lZ2F0aXZlIGlzIHVzZWQgdG8gbW92ZSB0aGUgbWFya2VyIHVwIGZyb20gdGhlIGNlbnRlciBzbyB0aGUgdGlwIGlzIGF0IHRoZSBNYXJrZXIgbG5nTGF0XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBQb2ludC5jb252ZXJ0KG9wdGlvbnMgJiYgb3B0aW9ucy5vZmZzZXQgfHwgWzAsIC0xNF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IFBvaW50LmNvbnZlcnQob3B0aW9ucyAmJiBvcHRpb25zLm9mZnNldCB8fCBbMCwgMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1tYXJrZXInKTtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCAoZTogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcHBseUFuY2hvckNsYXNzKHRoaXMuX2VsZW1lbnQsIHRoaXMuX2FuY2hvciwgJ21hcmtlcicpO1xuXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2hlcyB0aGUgbWFya2VyIHRvIGEgbWFwXG4gICAgICogQHBhcmFtIHtNYXB9IG1hcFxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIGFkZFRvKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICBtYXAub24oJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICBtYXAub24oJ21vdmVlbmQnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICB0aGlzLnNldERyYWdnYWJsZSh0aGlzLl9kcmFnZ2FibGUpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICAvLyBJZiB3ZSBhdHRhY2hlZCB0aGUgYGNsaWNrYCBsaXN0ZW5lciB0byB0aGUgbWFya2VyIGVsZW1lbnQsIHRoZSBwb3B1cFxuICAgICAgICAvLyB3b3VsZCBjbG9zZSBvbmNlIHRoZSBldmVudCBwcm9wb2dhdGVkIHRvIGBtYXBgIGR1ZSB0byB0aGVcbiAgICAgICAgLy8gYFBvcHVwI19vbkNsaWNrQ2xvc2VgIGxpc3RlbmVyLlxuICAgICAgICB0aGlzLl9tYXAub24oJ2NsaWNrJywgdGhpcy5fb25NYXBDbGljayk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgbWFya2VyIGZyb20gYSBtYXBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtYXJrZXIgPSBuZXcgbWFwYm94Z2wuTWFya2VyKCkuYWRkVG8obWFwKTtcbiAgICAgKiBtYXJrZXIucmVtb3ZlKCk7XG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdjbGljaycsIHRoaXMuX29uTWFwQ2xpY2spO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlZG93bicsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNoc3RhcnQnLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZXVwJywgdGhpcy5fb25VcCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaGVuZCcsIHRoaXMuX29uVXApO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWFwO1xuICAgICAgICB9XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fZWxlbWVudCk7XG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCkgdGhpcy5fcG9wdXAucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbWFya2VyJ3MgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGxvbmdpdHVkZSBvZiB0aGUgcmVzdWx0IG1heSBkaWZmZXIgYnkgYSBtdWx0aXBsZSBvZiAzNjAgZGVncmVlcyBmcm9tIHRoZSBsb25naXR1ZGUgcHJldmlvdXNseVxuICAgICAqIHNldCBieSBgc2V0TG5nTGF0YCBiZWNhdXNlIGBNYXJrZXJgIHdyYXBzIHRoZSBhbmNob3IgbG9uZ2l0dWRlIGFjcm9zcyBjb3BpZXMgb2YgdGhlIHdvcmxkIHRvIGtlZXBcbiAgICAgKiB0aGUgbWFya2VyIG9uIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9XG4gICAgICovXG4gICAgZ2V0TG5nTGF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG5nTGF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgbWFya2VyJ3MgZ2VvZ3JhcGhpY2FsIHBvc2l0aW9uIGFuZCBtb3ZlIGl0LlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldExuZ0xhdChsbmdsYXQ6IExuZ0xhdExpa2UpIHtcbiAgICAgICAgdGhpcy5fbG5nTGF0ID0gTG5nTGF0LmNvbnZlcnQobG5nbGF0KTtcbiAgICAgICAgdGhpcy5fcG9zID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBNYXJrZXJgJ3MgSFRNTCBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgICAqL1xuICAgIGdldEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJpbmRzIGEgUG9wdXAgdG8gdGhlIE1hcmtlclxuICAgICAqIEBwYXJhbSBwb3B1cCBhbiBpbnN0YW5jZSBvZiB0aGUgYFBvcHVwYCBjbGFzcy4gSWYgdW5kZWZpbmVkIG9yIG51bGwsIGFueSBwb3B1cFxuICAgICAqIHNldCBvbiB0aGlzIGBNYXJrZXJgIGluc3RhbmNlIGlzIHVuc2V0XG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0UG9wdXAocG9wdXA6ID9Qb3B1cCkge1xuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvcHVwKSB7XG4gICAgICAgICAgICBpZiAoISgnb2Zmc2V0JyBpbiBwb3B1cC5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlckhlaWdodCA9IDQxIC0gKDUuOCAvIDIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlclJhZGl1cyA9IDEzLjU7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZWFyT2Zmc2V0ID0gTWF0aC5zcXJ0KE1hdGgucG93KG1hcmtlclJhZGl1cywgMikgLyAyKTtcbiAgICAgICAgICAgICAgICBwb3B1cC5vcHRpb25zLm9mZnNldCA9IHRoaXMuX2RlZmF1bHRNYXJrZXIgPyB7XG4gICAgICAgICAgICAgICAgICAgICd0b3AnOiBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgICd0b3AtbGVmdCc6IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgJ3RvcC1yaWdodCc6IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgJ2JvdHRvbSc6IFswLCAtbWFya2VySGVpZ2h0XSxcbiAgICAgICAgICAgICAgICAgICAgJ2JvdHRvbS1sZWZ0JzogW2xpbmVhck9mZnNldCwgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cyArIGxpbmVhck9mZnNldCkgKiAtMV0sXG4gICAgICAgICAgICAgICAgICAgICdib3R0b20tcmlnaHQnOiBbLWxpbmVhck9mZnNldCwgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cyArIGxpbmVhck9mZnNldCkgKiAtMV0sXG4gICAgICAgICAgICAgICAgICAgICdsZWZ0JzogW21hcmtlclJhZGl1cywgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cykgKiAtMV0sXG4gICAgICAgICAgICAgICAgICAgICdyaWdodCc6IFstbWFya2VyUmFkaXVzLCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzKSAqIC0xXVxuICAgICAgICAgICAgICAgIH0gOiB0aGlzLl9vZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IHBvcHVwO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xuZ0xhdCkgdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfb25NYXBDbGljayhlOiBNYXBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlLm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgICBpZiAodGhpcy5fcG9wdXAgJiYgKHRhcmdldEVsZW1lbnQgPT09IGVsZW1lbnQgfHwgZWxlbWVudC5jb250YWlucygodGFyZ2V0RWxlbWVudDogYW55KSkpKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBQb3B1cCBpbnN0YW5jZSB0aGF0IGlzIGJvdW5kIHRvIHRoZSBNYXJrZXJcbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IHBvcHVwXG4gICAgICovXG4gICAgZ2V0UG9wdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBvciBjbG9zZXMgdGhlIGJvdW5kIHBvcHVwLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3RhdGVcbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICB0b2dnbGVQb3B1cCgpIHtcbiAgICAgICAgY29uc3QgcG9wdXAgPSB0aGlzLl9wb3B1cDtcblxuICAgICAgICBpZiAoIXBvcHVwKSByZXR1cm4gdGhpcztcbiAgICAgICAgZWxzZSBpZiAocG9wdXAuaXNPcGVuKCkpIHBvcHVwLnJlbW92ZSgpO1xuICAgICAgICBlbHNlIHBvcHVwLmFkZFRvKHRoaXMuX21hcCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF91cGRhdGUoZT86IHt0eXBlOiAnbW92ZScgfCAnbW92ZWVuZCd9KSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2xuZ0xhdCA9IHNtYXJ0V3JhcCh0aGlzLl9sbmdMYXQsIHRoaXMuX3BvcywgdGhpcy5fbWFwLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wb3MgPSB0aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLl9hZGQodGhpcy5fb2Zmc2V0KTtcblxuICAgICAgICAvLyBiZWNhdXNlIHJvdW5kaW5nIHRoZSBjb29yZGluYXRlcyBhdCBldmVyeSBgbW92ZWAgZXZlbnQgY2F1c2VzIHN0dXR0ZXJlZCB6b29taW5nXG4gICAgICAgIC8vIHdlIG9ubHkgcm91bmQgdGhlbSB3aGVuIF91cGRhdGUgaXMgY2FsbGVkIHdpdGggYG1vdmVlbmRgIG9yIHdoZW4gaXRzIGNhbGxlZCB3aXRoXG4gICAgICAgIC8vIG5vIGFyZ3VtZW50cyAod2hlbiB0aGUgTWFya2VyIGlzIGluaXRpYWxpemVkIG9yIE1hcmtlciNzZXRMbmdMYXQgaXMgaW52b2tlZCkuXG4gICAgICAgIGlmICghZSB8fCBlLnR5cGUgPT09IFwibW92ZWVuZFwiKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3MgPSB0aGlzLl9wb3Mucm91bmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5zZXRUcmFuc2Zvcm0odGhpcy5fZWxlbWVudCwgYCR7YW5jaG9yVHJhbnNsYXRlW3RoaXMuX2FuY2hvcl19IHRyYW5zbGF0ZSgke3RoaXMuX3Bvcy54fXB4LCAke3RoaXMuX3Bvcy55fXB4KWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbWFya2VyJ3Mgb2Zmc2V0LlxuICAgICAqIEByZXR1cm5zIHtQb2ludH1cbiAgICAgKi9cbiAgICBnZXRPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vZmZzZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgb2Zmc2V0IG9mIHRoZSBtYXJrZXJcbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gb2Zmc2V0IFRoZSBvZmZzZXQgaW4gcGl4ZWxzIGFzIGEge0BsaW5rIFBvaW50TGlrZX0gb2JqZWN0IHRvIGFwcGx5IHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50J3MgY2VudGVyLiBOZWdhdGl2ZXMgaW5kaWNhdGUgbGVmdCBhbmQgdXAuXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0T2Zmc2V0KG9mZnNldDogUG9pbnRMaWtlKSB7XG4gICAgICAgIHRoaXMuX29mZnNldCA9IFBvaW50LmNvbnZlcnQob2Zmc2V0KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9vbk1vdmUoZTogTWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fcG9zID0gZS5wb2ludC5zdWIodGhpcy5fcG9zaXRpb25EZWx0YSk7XG4gICAgICAgIHRoaXMuX2xuZ0xhdCA9IHRoaXMuX21hcC51bnByb2plY3QodGhpcy5fcG9zKTtcbiAgICAgICAgdGhpcy5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KTtcbiAgICAgICAgLy8gc3VwcHJlc3MgY2xpY2sgZXZlbnQgc28gdGhhdCBwb3B1cHMgZG9uJ3QgdG9nZ2xlIG9uIGRyYWdcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSBkcmFnc3RhcnQgb25seSBmaXJlcyBvbiB0aGUgZmlyc3QgbW92ZSBldmVudCBhZnRlciBtb3VzZWRvd24uXG4gICAgICAgIC8vIHRoaXMgY2FuJ3QgYmUgb24gbW91c2Vkb3duIGJlY2F1c2UgdGhhdCBldmVudCBkb2Vzbid0IG5lY2Vzc2FyaWx5XG4gICAgICAgIC8vIGltcGx5IHRoYXQgYSBkcmFnIGlzIGFib3V0IHRvIGhhcHBlbi5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2FjdGl2ZSc7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmlyZWQgd2hlbiBkcmFnZ2luZyBzdGFydHNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAZXZlbnQgZHJhZ3N0YXJ0XG4gICAgICAgICAgICAgKiBAbWVtYmVyb2YgTWFya2VyXG4gICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAgICAgKiBAcHJvcGVydHkge01hcmtlcn0gbWFya2VyIG9iamVjdCB0aGF0IGlzIGJlaW5nIGRyYWdnZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZHJhZ3N0YXJ0JykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVkIHdoaWxlIGRyYWdnaW5nXG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBkcmFnXG4gICAgICAgICAqIEBtZW1iZXJvZiBNYXJrZXJcbiAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqIEBwcm9wZXJ0eSB7TWFya2VyfSBtYXJrZXIgb2JqZWN0IHRoYXQgaXMgYmVpbmcgZHJhZ2dlZFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZHJhZycpKTtcbiAgICB9XG5cbiAgICBfb25VcCgpIHtcbiAgICAgICAgLy8gcmV2ZXJ0IHRvIG5vcm1hbCBwb2ludGVyIGV2ZW50IGhhbmRsaW5nXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5fcG9zaXRpb25EZWx0YSA9IG51bGw7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSk7XG5cbiAgICAgICAgLy8gb25seSBmaXJlIGRyYWdlbmQgaWYgaXQgd2FzIHByZWNlZGVkIGJ5IGF0IGxlYXN0IG9uZSBkcmFnIGV2ZW50XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBGaXJlZCB3aGVuIHRoZSBtYXJrZXIgaXMgZmluaXNoZWQgYmVpbmcgZHJhZ2dlZFxuICAgICAgICAgICAgKlxuICAgICAgICAgICAgKiBAZXZlbnQgZHJhZ2VuZFxuICAgICAgICAgICAgKiBAbWVtYmVyb2YgTWFya2VyXG4gICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgICAgKiBAcHJvcGVydHkge01hcmtlcn0gbWFya2VyIG9iamVjdCB0aGF0IHdhcyBkcmFnZ2VkXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZHJhZ2VuZCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2luYWN0aXZlJztcbiAgICB9XG5cbiAgICBfYWRkRHJhZ0hhbmRsZXIoZTogTWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQuY29udGFpbnMoKGUub3JpZ2luYWxFdmVudC50YXJnZXQ6IGFueSkpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwaXhlbCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjbGljayBwb2ludFxuICAgICAgICAgICAgLy8gYW5kIHRoZSBtYXJrZXIgcG9zaXRpb24sIHdpdGggdGhlIG9mZnNldCBhY2NvdW50ZWQgZm9yLiBUaGVuIHdlXG4gICAgICAgICAgICAvLyBjYW4gc3VidHJhY3QgdGhpcyBkaXN0YW5jZSBmcm9tIHRoZSBtb3VzZW1vdmUgZXZlbnQncyBwb3NpdGlvblxuICAgICAgICAgICAgLy8gdG8gY2FsY3VsYXRlIHRoZSBuZXcgbWFya2VyIHBvc2l0aW9uLlxuICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlIG1hcmtlciAnanVtcHMnIHRvIHRoZSBjbGljayBwb3NpdGlvblxuICAgICAgICAgICAgLy8gY3JlYXRpbmcgYSBqYXJyaW5nIFVYIGVmZmVjdC5cbiAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uRGVsdGEgPSBlLnBvaW50LnN1Yih0aGlzLl9wb3MpLmFkZCh0aGlzLl9vZmZzZXQpO1xuXG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbmNlKCdtb3VzZXVwJywgdGhpcy5fb25VcCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub25jZSgndG91Y2hlbmQnLCB0aGlzLl9vblVwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBkcmFnZ2FibGVgIHByb3BlcnR5IGFuZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBtYXJrZXJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG91bGRCZURyYWdnYWJsZT1mYWxzZV0gVHVybnMgZHJhZyBmdW5jdGlvbmFsaXR5IG9uL29mZlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldERyYWdnYWJsZShzaG91bGRCZURyYWdnYWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSAhIXNob3VsZEJlRHJhZ2dhYmxlOyAvLyBjb252ZXJ0IHBvc3NpYmxlIHVuZGVmaW5lZCB2YWx1ZSB0byBmYWxzZVxuXG4gICAgICAgIC8vIGhhbmRsZSBjYXNlIHdoZXJlIG1hcCBtYXkgbm90IGV4aXN0IHlldFxuICAgICAgICAvLyBlLmcuIHdoZW4gc2V0RHJhZ2dhYmxlIGlzIGNhbGxlZCBiZWZvcmUgYWRkVG9cbiAgICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICAgICAgaWYgKHNob3VsZEJlRHJhZ2dhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3VzZWRvd24nLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCd0b3VjaHN0YXJ0JywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZWRvd24nLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2hzdGFydCcsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFya2VyIGNhbiBiZSBkcmFnZ2VkXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNEcmFnZ2FibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcmFnZ2FibGU7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi8uLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQge2V4dGVuZCwgYmluZEFsbCwgd2Fybk9uY2V9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uLy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCBNYXJrZXIgZnJvbSAnLi4vbWFya2VyJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5pbXBvcnQgdHlwZSB7QW5pbWF0aW9uT3B0aW9ucywgQ2FtZXJhT3B0aW9uc30gZnJvbSAnLi4vY2FtZXJhJztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIHBvc2l0aW9uT3B0aW9ucz86IFBvc2l0aW9uT3B0aW9ucyxcbiAgICBmaXRCb3VuZHNPcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucyAmIENhbWVyYU9wdGlvbnMsXG4gICAgdHJhY2tVc2VyTG9jYXRpb24/OiBib29sZWFuLFxuICAgIHNob3dVc2VyTG9jYXRpb24/OiBib29sZWFuXG59O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogT3B0aW9ucyA9IHtcbiAgICBwb3NpdGlvbk9wdGlvbnM6IHtcbiAgICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiBmYWxzZSxcbiAgICAgICAgbWF4aW11bUFnZTogMCxcbiAgICAgICAgdGltZW91dDogNjAwMCAvKiA2IHNlYyAqL1xuICAgIH0sXG4gICAgZml0Qm91bmRzT3B0aW9uczoge1xuICAgICAgICBtYXhab29tOiAxNVxuICAgIH0sXG4gICAgdHJhY2tVc2VyTG9jYXRpb246IGZhbHNlLFxuICAgIHNob3dVc2VyTG9jYXRpb246IHRydWVcbn07XG5jb25zdCBjbGFzc05hbWUgPSAnbWFwYm94Z2wtY3RybCc7XG5cbmxldCBzdXBwb3J0c0dlb2xvY2F0aW9uO1xuXG5mdW5jdGlvbiBjaGVja0dlb2xvY2F0aW9uU3VwcG9ydChjYWxsYmFjaykge1xuICAgIGlmIChzdXBwb3J0c0dlb2xvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2soc3VwcG9ydHNHZW9sb2NhdGlvbik7XG5cbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5uYXZpZ2F0b3IucGVybWlzc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBuYXZpZ2F0b3IucGVybWlzc2lvbnMgaGFzIGluY29tcGxldGUgYnJvd3NlciBzdXBwb3J0XG4gICAgICAgIC8vIGh0dHA6Ly9jYW5pdXNlLmNvbS8jZmVhdD1wZXJtaXNzaW9ucy1hcGlcbiAgICAgICAgLy8gVGVzdCBmb3IgdGhlIGNhc2Ugd2hlcmUgYSBicm93c2VyIGRpc2FibGVzIEdlb2xvY2F0aW9uIGJlY2F1c2Ugb2YgYW5cbiAgICAgICAgLy8gaW5zZWN1cmUgb3JpZ2luXG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6ICdnZW9sb2NhdGlvbid9KS50aGVuKChwKSA9PiB7XG4gICAgICAgICAgICBzdXBwb3J0c0dlb2xvY2F0aW9uID0gcC5zdGF0ZSAhPT0gJ2RlbmllZCc7XG4gICAgICAgICAgICBjYWxsYmFjayhzdXBwb3J0c0dlb2xvY2F0aW9uKTtcbiAgICAgICAgfSk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBzdXBwb3J0c0dlb2xvY2F0aW9uID0gISF3aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uO1xuICAgICAgICBjYWxsYmFjayhzdXBwb3J0c0dlb2xvY2F0aW9uKTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBgR2VvbG9jYXRlQ29udHJvbGAgY29udHJvbCBwcm92aWRlcyBhIGJ1dHRvbiB0aGF0IHVzZXMgdGhlIGJyb3dzZXIncyBnZW9sb2NhdGlvblxuICogQVBJIHRvIGxvY2F0ZSB0aGUgdXNlciBvbiB0aGUgbWFwLlxuICpcbiAqIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCBnZW9sb2NhdGlvbixcbiAqIGFuZCBzb21lIHVzZXJzIG1heSBkaXNhYmxlIHRoZSBmZWF0dXJlLiBHZW9sb2NhdGlvbiBzdXBwb3J0IGZvciBtb2Rlcm5cbiAqIGJyb3dzZXJzIGluY2x1ZGluZyBDaHJvbWUgcmVxdWlyZXMgc2l0ZXMgdG8gYmUgc2VydmVkIG92ZXIgSFRUUFMuIElmXG4gKiBnZW9sb2NhdGlvbiBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBHZW9sb2NhdGVDb250cm9sIHdpbGwgbm90XG4gKiBiZSB2aXNpYmxlLlxuICpcbiAqIFRoZSB6b29tIGxldmVsIGFwcGxpZWQgd2lsbCBkZXBlbmQgb24gdGhlIGFjY3VyYWN5IG9mIHRoZSBnZW9sb2NhdGlvbiBwcm92aWRlZCBieSB0aGUgZGV2aWNlLlxuICpcbiAqIFRoZSBHZW9sb2NhdGVDb250cm9sIGhhcyB0d28gbW9kZXMuIElmIGB0cmFja1VzZXJMb2NhdGlvbmAgaXMgYGZhbHNlYCAoZGVmYXVsdCkgdGhlIGNvbnRyb2wgYWN0cyBhcyBhIGJ1dHRvbiwgd2hpY2ggd2hlbiBwcmVzc2VkIHdpbGwgc2V0IHRoZSBtYXAncyBjYW1lcmEgdG8gdGFyZ2V0IHRoZSB1c2VyIGxvY2F0aW9uLiBJZiB0aGUgdXNlciBtb3ZlcywgdGhlIG1hcCB3b24ndCB1cGRhdGUuIFRoaXMgaXMgbW9zdCBzdWl0ZWQgZm9yIHRoZSBkZXNrdG9wLiBJZiBgdHJhY2tVc2VyTG9jYXRpb25gIGlzIGB0cnVlYCB0aGUgY29udHJvbCBhY3RzIGFzIGEgdG9nZ2xlIGJ1dHRvbiB0aGF0IHdoZW4gYWN0aXZlIHRoZSB1c2VyJ3MgbG9jYXRpb24gaXMgYWN0aXZlbHkgbW9uaXRvcmVkIGZvciBjaGFuZ2VzLiBJbiB0aGlzIG1vZGUgdGhlIEdlb2xvY2F0ZUNvbnRyb2wgaGFzIHRocmVlIHN0YXRlczpcbiAqICogYWN0aXZlIC0gdGhlIG1hcCdzIGNhbWVyYSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgYXMgdGhlIHVzZXIncyBsb2NhdGlvbiBjaGFuZ2VzLCBrZWVwaW5nIHRoZSBsb2NhdGlvbiBkb3QgaW4gdGhlIGNlbnRlci5cbiAqICogcGFzc2l2ZSAtIHRoZSB1c2VyJ3MgbG9jYXRpb24gZG90IGF1dG9tYXRpY2FsbHkgdXBkYXRlcywgYnV0IHRoZSBtYXAncyBjYW1lcmEgZG9lcyBub3QuXG4gKiAqIGRpc2FibGVkXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnBvc2l0aW9uT3B0aW9ucz17ZW5hYmxlSGlnaEFjY3VyYWN5OiBmYWxzZSwgdGltZW91dDogNjAwMH1dIEEgR2VvbG9jYXRpb24gQVBJIFtQb3NpdGlvbk9wdGlvbnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbk9wdGlvbnMpIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5maXRCb3VuZHNPcHRpb25zPXttYXhab29tOiAxNX1dIEEgW2BmaXRCb3VuZHNgXSgjbWFwI2ZpdGJvdW5kcykgb3B0aW9ucyBvYmplY3QgdG8gdXNlIHdoZW4gdGhlIG1hcCBpcyBwYW5uZWQgYW5kIHpvb21lZCB0byB0aGUgdXNlcidzIGxvY2F0aW9uLiBUaGUgZGVmYXVsdCBpcyB0byB1c2UgYSBgbWF4Wm9vbWAgb2YgMTUgdG8gbGltaXQgaG93IGZhciB0aGUgbWFwIHdpbGwgem9vbSBpbiBmb3IgdmVyeSBhY2N1cmF0ZSBsb2NhdGlvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMudHJhY2tVc2VyTG9jYXRpb249ZmFsc2VdIElmIGB0cnVlYCB0aGUgR2VvbG9jYXRlIENvbnRyb2wgYmVjb21lcyBhIHRvZ2dsZSBidXR0b24gYW5kIHdoZW4gYWN0aXZlIHRoZSBtYXAgd2lsbCByZWNlaXZlIHVwZGF0ZXMgdG8gdGhlIHVzZXIncyBsb2NhdGlvbiBhcyBpdCBjaGFuZ2VzLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnNob3dVc2VyTG9jYXRpb249dHJ1ZV0gQnkgZGVmYXVsdCBhIGRvdCB3aWxsIGJlIHNob3duIG9uIHRoZSBtYXAgYXQgdGhlIHVzZXIncyBsb2NhdGlvbi4gU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZENvbnRyb2wobmV3IG1hcGJveGdsLkdlb2xvY2F0ZUNvbnRyb2woe1xuICogICAgIHBvc2l0aW9uT3B0aW9uczoge1xuICogICAgICAgICBlbmFibGVIaWdoQWNjdXJhY3k6IHRydWVcbiAqICAgICB9LFxuICogICAgIHRyYWNrVXNlckxvY2F0aW9uOiB0cnVlXG4gKiB9KSk7XG4gKiBAc2VlIFtMb2NhdGUgdGhlIHVzZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbG9jYXRlLXVzZXIvKVxuICovXG5jbGFzcyBHZW9sb2NhdGVDb250cm9sIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgX21hcDogTWFwO1xuICAgIG9wdGlvbnM6IE9wdGlvbnM7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2RvdEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIF9nZW9sb2NhdGVCdXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xuICAgIF9nZW9sb2NhdGlvbldhdGNoSUQ6IG51bWJlcjtcbiAgICBfdGltZW91dElkOiA/VGltZW91dElEO1xuICAgIF93YXRjaFN0YXRlOiAnT0ZGJyB8ICdBQ1RJVkVfTE9DSycgfCAnV0FJVElOR19BQ1RJVkUnIHwgJ0FDVElWRV9FUlJPUicgfCAnQkFDS0dST1VORCcgfCAnQkFDS0dST1VORF9FUlJPUic7XG4gICAgX2xhc3RLbm93blBvc2l0aW9uOiBhbnk7XG4gICAgX3VzZXJMb2NhdGlvbkRvdE1hcmtlcjogTWFya2VyO1xuICAgIF9zZXR1cDogYm9vbGVhbjsgLy8gc2V0IHRvIHRydWUgb25jZSB0aGUgY29udHJvbCBoYXMgYmVlbiBzZXR1cFxuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25TdWNjZXNzJyxcbiAgICAgICAgICAgICdfb25FcnJvcicsXG4gICAgICAgICAgICAnX2ZpbmlzaCcsXG4gICAgICAgICAgICAnX3NldHVwVUknLFxuICAgICAgICAgICAgJ191cGRhdGVDYW1lcmEnLFxuICAgICAgICAgICAgJ191cGRhdGVNYXJrZXInXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgYCR7Y2xhc3NOYW1lfSAke2NsYXNzTmFtZX0tZ3JvdXBgKTtcbiAgICAgICAgY2hlY2tHZW9sb2NhdGlvblN1cHBvcnQodGhpcy5fc2V0dXBVSSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIC8vIGNsZWFyIHRoZSBnZW9sb2NhdGlvbiB3YXRjaCBpZiBleGlzdHNcbiAgICAgICAgaWYgKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgbWFya2VyIGZyb20gdGhlIG1hcFxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24gJiYgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyKSB7XG4gICAgICAgICAgICB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX21hcCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgfVxuXG4gICAgX2lzT3V0T2ZNYXBNYXhCb3VuZHMocG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuX21hcC5nZXRNYXhCb3VuZHMoKTtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBwb3NpdGlvbi5jb29yZHM7XG5cbiAgICAgICAgcmV0dXJuIGJvdW5kcyAmJiAoXG4gICAgICAgICAgICBjb29yZGluYXRlcy5sb25naXR1ZGUgPCBib3VuZHMuZ2V0V2VzdCgpIHx8XG4gICAgICAgICAgICBjb29yZGluYXRlcy5sb25naXR1ZGUgPiBib3VuZHMuZ2V0RWFzdCgpIHx8XG4gICAgICAgICAgICBjb29yZGluYXRlcy5sYXRpdHVkZSA8IGJvdW5kcy5nZXRTb3V0aCgpIHx8XG4gICAgICAgICAgICBjb29yZGluYXRlcy5sYXRpdHVkZSA+IGJvdW5kcy5nZXROb3J0aCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX3NldEVycm9yU3RhdGUoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fd2F0Y2hTdGF0ZSkge1xuICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0FDVElWRV9FUlJPUic7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQUNUSVZFX0xPQ0snOlxuICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfRVJST1InO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgIC8vIHR1cm4gbWFya2VyIGdyZXlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCQUNLR1JPVU5EJzpcbiAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQkFDS0dST1VORF9FUlJPUic7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAvLyB0dXJuIG1hcmtlciBncmV5XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQUNUSVZFX0VSUk9SJzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vblN1Y2Nlc3MocG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc091dE9mTWFwTWF4Qm91bmRzKHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0RXJyb3JTdGF0ZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdvdXRvZm1heGJvdW5kcycsIHBvc2l0aW9uKSk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVNYXJrZXIoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICAvLyBrZWVwIGEgcmVjb3JkIG9mIHRoZSBwb3NpdGlvbiBzbyB0aGF0IGlmIHRoZSBzdGF0ZSBpcyBCQUNLR1JPVU5EIGFuZCB0aGUgdXNlclxuICAgICAgICAgICAgLy8gY2xpY2tzIHRoZSBidXR0b24sIHdlIGNhbiBtb3ZlIHRvIEFDVElWRV9MT0NLIGltbWVkaWF0ZWx5IHdpdGhvdXQgd2FpdGluZyBmb3JcbiAgICAgICAgICAgIC8vIHdhdGNoUG9zaXRpb24gdG8gdHJpZ2dlciBfb25TdWNjZXNzXG4gICAgICAgICAgICB0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiA9IHBvc2l0aW9uO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1dBSVRJTkdfQUNUSVZFJzpcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9MT0NLJzpcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfTE9DSyc7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORCc6XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EX0VSUk9SJzpcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkQnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGBVbmV4cGVjdGVkIHdhdGNoU3RhdGUgJHt0aGlzLl93YXRjaFN0YXRlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgc2hvd1VzZXJMb2NhdGlvbiBhbmQgdGhlIHdhdGNoIHN0YXRlIGlzbid0IG9mZiB0aGVuIHVwZGF0ZSB0aGUgbWFya2VyIGxvY2F0aW9uXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiAmJiB0aGlzLl93YXRjaFN0YXRlICE9PSAnT0ZGJykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFya2VyKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGluIG5vcm1hbCBtb2RlIChub3Qgd2F0Y2ggbW9kZSksIG9yIGlmIGluIHdhdGNoIG1vZGUgYW5kIHRoZSBzdGF0ZSBpcyBhY3RpdmUgd2F0Y2hcbiAgICAgICAgLy8gdGhlbiB1cGRhdGUgdGhlIGNhbWVyYVxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiB8fCB0aGlzLl93YXRjaFN0YXRlID09PSAnQUNUSVZFX0xPQ0snKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDYW1lcmEocG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdnZW9sb2NhdGUnLCBwb3NpdGlvbikpO1xuICAgICAgICB0aGlzLl9maW5pc2goKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlQ2FtZXJhKHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgTG5nTGF0KHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsIHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSk7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHBvc2l0aW9uLmNvb3Jkcy5hY2N1cmFjeTtcbiAgICAgICAgY29uc3QgYmVhcmluZyA9IHRoaXMuX21hcC5nZXRCZWFyaW5nKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe2JlYXJpbmd9LCB0aGlzLm9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fbWFwLmZpdEJvdW5kcyhjZW50ZXIudG9Cb3VuZHMocmFkaXVzKSwgb3B0aW9ucywge1xuICAgICAgICAgICAgZ2VvbG9jYXRlU291cmNlOiB0cnVlIC8vIHRhZyB0aGlzIGNhbWVyYSBjaGFuZ2Ugc28gaXQgd29uJ3QgY2F1c2UgdGhlIGNvbnRyb2wgdG8gY2hhbmdlIHRvIGJhY2tncm91bmQgc3RhdGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZU1hcmtlcihwb3NpdGlvbjogP1Bvc2l0aW9uKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnNldExuZ0xhdChbcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlXSkuYWRkVG8odGhpcy5fbWFwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkVycm9yKGVycm9yOiBQb3NpdGlvbkVycm9yKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gUEVSTUlTU0lPTl9ERU5JRURcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZSA9ICdMb2NhdGlvbiBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0xvY2F0aW9uIG5vdCBhdmFpbGFibGUnKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhcldhdGNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvclN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fd2F0Y2hTdGF0ZSAhPT0gJ09GRicgJiYgdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2Vycm9yJywgZXJyb3IpKTtcblxuICAgICAgICB0aGlzLl9maW5pc2goKTtcbiAgICB9XG5cbiAgICBfZmluaXNoKCkge1xuICAgICAgICBpZiAodGhpcy5fdGltZW91dElkKSB7IGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpOyB9XG4gICAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBfc2V0dXBVSShzdXBwb3J0ZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGU6IE1vdXNlRXZlbnQpID0+IGUucHJldmVudERlZmF1bHQoKSk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbiA9IERPTS5jcmVhdGUoJ2J1dHRvbicsXG4gICAgICAgICAgICBgJHtjbGFzc05hbWV9LWljb24gJHtjbGFzc05hbWV9LWdlb2xvY2F0ZWAsXG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24udHlwZSA9ICdidXR0b24nO1xuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24udGl0bGUgPSAnRmluZCBteSBsb2NhdGlvbic7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnRmluZCBteSBsb2NhdGlvbicpO1xuICAgICAgICBpZiAoc3VwcG9ydGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoJ0dlb2xvY2F0aW9uIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSBzbyB0aGUgR2VvbG9jYXRlQ29udHJvbCB3aWxsIGJlIGRpc2FibGVkLicpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZSA9ICdMb2NhdGlvbiBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnTG9jYXRpb24gbm90IGF2YWlsYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHNob3dVc2VyTG9jYXRpb24gaXMgZW5hYmxlZCwga2VlcCB0aGUgR2VvbG9jYXRlIGJ1dHRvbiBkaXNhYmxlZCB1bnRpbCB0aGUgZGV2aWNlIGxvY2F0aW9uIG1hcmtlciBpcyBzZXR1cCBvbiB0aGUgbWFwXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZG90RWxlbWVudCA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdCcpO1xuXG4gICAgICAgICAgICB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIgPSBuZXcgTWFya2VyKHRoaXMuX2RvdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLFxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuX3NldHVwID0gdHJ1ZTtcblxuICAgICAgICAvLyB3aGVuIHRoZSBjYW1lcmEgaXMgY2hhbmdlZCAoYW5kIGl0J3Mgbm90IGFzIGEgcmVzdWx0IG9mIHRoZSBHZW9sb2NhdGlvbiBDb250cm9sKSBjaGFuZ2VcbiAgICAgICAgLy8gdGhlIHdhdGNoIG1vZGUgdG8gYmFja2dyb3VuZCB3YXRjaCwgc28gdGhhdCB0aGUgbWFya2VyIGlzIHVwZGF0ZWQgYnV0IG5vdCB0aGUgY2FtZXJhLlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmVzdGFydCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyb21SZXNpemUgPSBldmVudC5vcmlnaW5hbEV2ZW50ICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQudHlwZSA9PT0gJ3Jlc2l6ZSc7XG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC5nZW9sb2NhdGVTb3VyY2UgJiYgdGhpcy5fd2F0Y2hTdGF0ZSA9PT0gJ0FDVElWRV9MT0NLJyAmJiAhZnJvbVJlc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgndHJhY2t1c2VybG9jYXRpb25lbmQnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIGEgZ2VvbG9jYXRpb25cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAgaWYgY2FsbGVkIGJlZm9yZSBjb250cm9sIHdhcyBhZGRlZCB0byBhIG1hcCwgb3RoZXJ3aXNlIHJldHVybnMgYHRydWVgLlxuICAgICAqL1xuICAgIHRyaWdnZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5fc2V0dXApIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdHZW9sb2NhdGUgY29udHJvbCB0cmlnZ2VyZWQgYmVmb3JlIGFkZGVkIHRvIGEgbWFwJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHdhdGNoU3RhdGUgYW5kIGRvIGFueSBvdXRnb2luZyBzdGF0ZSBjbGVhbnVwXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ09GRic6XG4gICAgICAgICAgICAgICAgLy8gdHVybiBvbiB0aGUgR2VvbG9jYXRlIENvbnRyb2xcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ1dBSVRJTkdfQUNUSVZFJztcblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3RyYWNrdXNlcmxvY2F0aW9uc3RhcnQnKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfTE9DSyc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfRVJST1InOlxuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORF9FUlJPUic6XG4gICAgICAgICAgICAgICAgLy8gdHVybiBvZmYgdGhlIEdlb2xvY2F0ZSBDb250cm9sXG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdPRkYnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd0cmFja3VzZXJsb2NhdGlvbmVuZCcpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JBQ0tHUk9VTkQnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQUNUSVZFX0xPQ0snO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGNhbWVyYSB0byBsYXN0IGtub3duIGxvY2F0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKSB0aGlzLl91cGRhdGVDYW1lcmEodGhpcy5fbGFzdEtub3duUG9zaXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgndHJhY2t1c2VybG9jYXRpb25zdGFydCcpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW5jb21pbmcgc3RhdGUgc2V0dXBcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fd2F0Y2hTdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAnV0FJVElOR19BQ1RJVkUnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQUNUSVZFX0xPQ0snOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORF9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvcicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnT0ZGJzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbWFuYWdlIGdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24gLyBnZW9sb2NhdGlvbi5jbGVhcldhdGNoXG4gICAgICAgICAgICBpZiAodGhpcy5fd2F0Y2hTdGF0ZSA9PT0gJ09GRicgJiYgdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhciB3YXRjaFBvc2l0aW9uIGFzIHdlJ3ZlIGNoYW5nZWQgdG8gYW4gT0ZGIHN0YXRlXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJXYXRjaCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGVuYWJsZSB3YXRjaFBvc2l0aW9uIHNpbmNlIHdhdGNoU3RhdGUgaXMgbm90IE9GRiBhbmQgdGhlcmUgaXMgbm8gd2F0Y2hQb3NpdGlvbiBhbHJlYWR5IHJ1bm5pbmdcblxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9IHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25TdWNjZXNzLCB0aGlzLl9vbkVycm9yLCB0aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuX29uU3VjY2VzcywgdGhpcy5fb25FcnJvciwgdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyk7XG5cbiAgICAgICAgICAgIC8vIFRoaXMgdGltZW91dCBlbnN1cmVzIHRoYXQgd2Ugc3RpbGwgY2FsbCBmaW5pc2goKSBldmVuIGlmXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBkZWNsaW5lcyB0byBzaGFyZSB0aGVpciBsb2NhdGlvbiBpbiBGaXJlZm94XG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaCwgMTAwMDAgLyogMTBzZWMgKi8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2NsZWFyV2F0Y2goKSB7XG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpO1xuXG4gICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFya2VyKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHZW9sb2NhdGVDb250cm9sO1xuXG4vKiBHZW9sb2NhdGUgQ29udHJvbCBXYXRjaCBTdGF0ZXNcbiAqIFRoaXMgaXMgdGhlIHByaXZhdGUgc3RhdGUgb2YgdGhlIGNvbnRyb2wuXG4gKlxuICogT0ZGXG4gKiAgICBvZmYvaW5hY3RpdmVcbiAqIFdBSVRJTkdfQUNUSVZFXG4gKiAgICBHZW9sb2NhdGUgQ29udHJvbCB3YXMgY2xpY2tlZCBidXQgc3RpbGwgd2FpdGluZyBmb3IgR2VvbG9jYXRpb24gQVBJIHJlc3BvbnNlIHdpdGggdXNlciBsb2NhdGlvblxuICogQUNUSVZFX0xPQ0tcbiAqICAgIFNob3dpbmcgdGhlIHVzZXIgbG9jYXRpb24gYXMgYSBkb3QgQU5EIHRyYWNraW5nIHRoZSBjYW1lcmEgdG8gYmUgZml4ZWQgdG8gdGhlaXIgbG9jYXRpb24uIElmIHRoZWlyIGxvY2F0aW9uIGNoYW5nZXMgdGhlIG1hcCBtb3ZlcyB0byBmb2xsb3cuXG4gKiBBQ1RJVkVfRVJST1JcbiAqICAgIFRoZXJlIHdhcyBlbiBlcnJvciBmcm9tIHRoZSBHZW9sb2NhdGlvbiBBUEkgd2hpbGUgdHJ5aW5nIHRvIHNob3cgYW5kIHRyYWNrIHRoZSB1c2VyIGxvY2F0aW9uLlxuICogQkFDS0dST1VORFxuICogICAgU2hvd2luZyB0aGUgdXNlciBsb2NhdGlvbiBhcyBhIGRvdCBidXQgdGhlIGNhbWVyYSBkb2Vzbid0IGZvbGxvdyB0aGVpciBsb2NhdGlvbiBhcyBpdCBjaGFuZ2VzLlxuICogQkFDS0dST1VORF9FUlJPUlxuICogICAgVGhlcmUgd2FzIGFuIGVycm9yIGZyb20gdGhlIEdlb2xvY2F0aW9uIEFQSSB3aGlsZSB0cnlpbmcgdG8gc2hvdyAoYnV0IG5vdCB0cmFjaykgdGhlIHVzZXIgbG9jYXRpb24uXG4gKi9cblxuLyoqXG4gKiBGaXJlZCBvbiBlYWNoIEdlb2xvY2F0aW9uIEFQSSBwb3NpdGlvbiB1cGRhdGUgd2hpY2ggcmV0dXJuZWQgYXMgc3VjY2Vzcy5cbiAqXG4gKiBAZXZlbnQgZ2VvbG9jYXRlXG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAcHJvcGVydHkge1Bvc2l0aW9ufSBkYXRhIFRoZSByZXR1cm5lZCBbUG9zaXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbikgb2JqZWN0IGZyb20gdGhlIGNhbGxiYWNrIGluIFtHZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL2dldEN1cnJlbnRQb3NpdGlvbikgb3IgW0dlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL3dhdGNoUG9zaXRpb24pLlxuICpcbiAqL1xuXG4vKipcbiAqIEZpcmVkIG9uIGVhY2ggR2VvbG9jYXRpb24gQVBJIHBvc2l0aW9uIHVwZGF0ZSB3aGljaCByZXR1cm5lZCBhcyBhbiBlcnJvci5cbiAqXG4gKiBAZXZlbnQgZXJyb3JcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb25FcnJvcn0gZGF0YSBUaGUgcmV0dXJuZWQgW1Bvc2l0aW9uRXJyb3JdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbkVycm9yKSBvYmplY3QgZnJvbSB0aGUgY2FsbGJhY2sgaW4gW0dlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vZ2V0Q3VycmVudFBvc2l0aW9uKSBvciBbR2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vd2F0Y2hQb3NpdGlvbikuXG4gKlxuICovXG5cbi8qKlxuICogRmlyZWQgb24gZWFjaCBHZW9sb2NhdGlvbiBBUEkgcG9zaXRpb24gdXBkYXRlIHdoaWNoIHJldHVybmVkIGFzIHN1Y2Nlc3MgYnV0IHVzZXIgcG9zaXRpb24gaXMgb3V0IG9mIG1hcCBtYXhCb3VuZHMuXG4gKlxuICogQGV2ZW50IG91dG9mbWF4Ym91bmRzXG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAcHJvcGVydHkge1Bvc2l0aW9ufSBkYXRhIFRoZSByZXR1cm5lZCBbUG9zaXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbikgb2JqZWN0IGZyb20gdGhlIGNhbGxiYWNrIGluIFtHZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL2dldEN1cnJlbnRQb3NpdGlvbikgb3IgW0dlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL3dhdGNoUG9zaXRpb24pLlxuICpcbiAqL1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIEdlb2xvY2F0ZSBDb250cm9sIGNoYW5nZXMgdG8gdGhlIGFjdGl2ZSBsb2NrIHN0YXRlLCB3aGljaCBoYXBwZW5zIGVpdGhlciB1cG9uIGZpcnN0IG9idGFpbmluZyBhIHN1Y2Nlc3NmdWwgR2VvbG9jYXRpb24gQVBJIHBvc2l0aW9uIGZvciB0aGUgdXNlciAoYSBnZW9sb2NhdGUgZXZlbnQgd2lsbCBmb2xsb3cpLCBvciB0aGUgdXNlciBjbGlja3MgdGhlIGdlb2xvY2F0ZSBidXR0b24gd2hlbiBpbiB0aGUgYmFja2dyb3VuZCBzdGF0ZSB3aGljaCB1c2VzIHRoZSBsYXN0IGtub3duIHBvc2l0aW9uIHRvIHJlY2VudGVyIHRoZSBtYXAgYW5kIGVudGVyIGFjdGl2ZSBsb2NrIHN0YXRlIChubyBnZW9sb2NhdGUgZXZlbnQgd2lsbCBmb2xsb3cgdW5sZXNzIHRoZSB1c2VycydzIGxvY2F0aW9uIGNoYW5nZXMpLlxuICpcbiAqIEBldmVudCB0cmFja3VzZXJsb2NhdGlvbnN0YXJ0XG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKlxuICovXG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgR2VvbG9jYXRlIENvbnRyb2wgY2hhbmdlcyB0byB0aGUgYmFja2dyb3VuZCBzdGF0ZSwgd2hpY2ggaGFwcGVucyB3aGVuIGEgdXNlciBjaGFuZ2VzIHRoZSBjYW1lcmEgZHVyaW5nIGFuIGFjdGl2ZSBwb3NpdGlvbiBsb2NrLiBUaGlzIG9ubHkgYXBwbGllcyB3aGVuIHRyYWNrVXNlckxvY2F0aW9uIGlzIHRydWUuIEluIHRoZSBiYWNrZ3JvdW5kIHN0YXRlLCB0aGUgZG90IG9uIHRoZSBtYXAgd2lsbCB1cGRhdGUgd2l0aCBsb2NhdGlvbiB1cGRhdGVzIGJ1dCB0aGUgY2FtZXJhIHdpbGwgbm90LlxuICpcbiAqIEBldmVudCB0cmFja3VzZXJsb2NhdGlvbmVuZFxuICogQG1lbWJlcm9mIEdlb2xvY2F0ZUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICpcbiAqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2V4dGVuZCwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbnR5cGUgVW5pdCA9ICdpbXBlcmlhbCcgfCAnbWV0cmljJyB8ICduYXV0aWNhbCc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBtYXhXaWR0aD86IG51bWJlcixcbiAgICB1bml0PzogVW5pdDtcbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgIG1heFdpZHRoOiAxMDAsXG4gICAgdW5pdDogJ21ldHJpYydcbn07XG5cbi8qKlxuICogQSBgU2NhbGVDb250cm9sYCBjb250cm9sIGRpc3BsYXlzIHRoZSByYXRpbyBvZiBhIGRpc3RhbmNlIG9uIHRoZSBtYXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGlzdGFuY2Ugb24gdGhlIGdyb3VuZC5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2lkdGg9JzEwMCddIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgc2NhbGUgY29udHJvbCBpbiBwaXhlbHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudW5pdD0nbWV0cmljJ10gVW5pdCBvZiB0aGUgZGlzdGFuY2UgKGAnaW1wZXJpYWwnYCwgYCdtZXRyaWMnYCBvciBgJ25hdXRpY2FsJ2ApLlxuICogQGV4YW1wbGVcbiAqIHZhciBzY2FsZSA9IG5ldyBtYXBib3hnbC5TY2FsZUNvbnRyb2woe1xuICogICAgIG1heFdpZHRoOiA4MCxcbiAqICAgICB1bml0OiAnaW1wZXJpYWwnXG4gKiB9KTtcbiAqIG1hcC5hZGRDb250cm9sKHNjYWxlKTtcbiAqXG4gKiBzY2FsZS5zZXRVbml0KCdtZXRyaWMnKTtcbiAqL1xuY2xhc3MgU2NhbGVDb250cm9sIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgb3B0aW9uczogT3B0aW9ucztcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uTW92ZScsXG4gICAgICAgICAgICAnc2V0VW5pdCdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ2JvdHRvbS1sZWZ0JztcbiAgICB9XG5cbiAgICBfb25Nb3ZlKCkge1xuICAgICAgICB1cGRhdGVTY2FsZSh0aGlzLl9tYXAsIHRoaXMuX2NvbnRhaW5lciwgdGhpcy5vcHRpb25zKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtc2NhbGUnLCBtYXAuZ2V0Q29udGFpbmVyKCkpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbignbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgIHRoaXMuX29uTW92ZSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgIHRoaXMuX21hcCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzY2FsZSdzIHVuaXQgb2YgdGhlIGRpc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdW5pdCBVbml0IG9mIHRoZSBkaXN0YW5jZSAoYCdpbXBlcmlhbCdgLCBgJ21ldHJpYydgIG9yIGAnbmF1dGljYWwnYCkuXG4gICAgICovXG4gICAgc2V0VW5pdCh1bml0OiBVbml0KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy51bml0ID0gdW5pdDtcbiAgICAgICAgdXBkYXRlU2NhbGUodGhpcy5fbWFwLCB0aGlzLl9jb250YWluZXIsIHRoaXMub3B0aW9ucyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTY2FsZUNvbnRyb2w7XG5cbmZ1bmN0aW9uIHVwZGF0ZVNjYWxlKG1hcCwgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgLy8gQSBob3Jpem9udGFsIHNjYWxlIGlzIGltYWdpbmVkIHRvIGJlIHByZXNlbnQgYXQgY2VudGVyIG9mIHRoZSBtYXBcbiAgICAvLyBjb250YWluZXIgd2l0aCBtYXhpbXVtIGxlbmd0aCAoRGVmYXVsdCkgYXMgMTAwcHguXG4gICAgLy8gVXNpbmcgc3BoZXJpY2FsIGxhdyBvZiBjb3NpbmVzIGFwcHJveGltYXRpb24sIHRoZSByZWFsIGRpc3RhbmNlIGlzXG4gICAgLy8gZm91bmQgYmV0d2VlbiB0aGUgdHdvIGNvb3JkaW5hdGVzLlxuICAgIGNvbnN0IG1heFdpZHRoID0gb3B0aW9ucyAmJiBvcHRpb25zLm1heFdpZHRoIHx8IDEwMDtcblxuICAgIGNvbnN0IHkgPSBtYXAuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgLyAyO1xuICAgIGNvbnN0IG1heE1ldGVycyA9IGdldERpc3RhbmNlKG1hcC51bnByb2plY3QoWzAsIHldKSwgbWFwLnVucHJvamVjdChbbWF4V2lkdGgsIHldKSk7XG4gICAgLy8gVGhlIHJlYWwgZGlzdGFuY2UgY29ycmVzcG9uZGluZyB0byAxMDBweCBzY2FsZSBsZW5ndGggaXMgcm91bmRlZCBvZmYgdG9cbiAgICAvLyBuZWFyIHByZXR0eSBudW1iZXIgYW5kIHRoZSBzY2FsZSBsZW5ndGggZm9yIHRoZSBzYW1lIGlzIGZvdW5kIG91dC5cbiAgICAvLyBEZWZhdWx0IHVuaXQgb2YgdGhlIHNjYWxlIGlzIGJhc2VkIG9uIFVzZXIncyBsb2NhbGUuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bml0ID09PSAnaW1wZXJpYWwnKSB7XG4gICAgICAgIGNvbnN0IG1heEZlZXQgPSAzLjI4MDggKiBtYXhNZXRlcnM7XG4gICAgICAgIGlmIChtYXhGZWV0ID4gNTI4MCkge1xuICAgICAgICAgICAgY29uc3QgbWF4TWlsZXMgPSBtYXhGZWV0IC8gNTI4MDtcbiAgICAgICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heE1pbGVzLCAnbWknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heEZlZXQsICdmdCcpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5pdCA9PT0gJ25hdXRpY2FsJykge1xuICAgICAgICBjb25zdCBtYXhOYXV0aWNhbHMgPSBtYXhNZXRlcnMgLyAxODUyO1xuICAgICAgICBzZXRTY2FsZShjb250YWluZXIsIG1heFdpZHRoLCBtYXhOYXV0aWNhbHMsICdubScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heE1ldGVycywgJ20nKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heERpc3RhbmNlLCB1bml0KSB7XG4gICAgbGV0IGRpc3RhbmNlID0gZ2V0Um91bmROdW0obWF4RGlzdGFuY2UpO1xuICAgIGNvbnN0IHJhdGlvID0gZGlzdGFuY2UgLyBtYXhEaXN0YW5jZTtcblxuICAgIGlmICh1bml0ID09PSAnbScgJiYgZGlzdGFuY2UgPj0gMTAwMCkge1xuICAgICAgICBkaXN0YW5jZSA9IGRpc3RhbmNlIC8gMTAwMDtcbiAgICAgICAgdW5pdCA9ICdrbSc7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gYCR7bWF4V2lkdGggKiByYXRpb31weGA7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9IGRpc3RhbmNlICsgdW5pdDtcbn1cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UobGF0bG5nMSwgbGF0bG5nMikge1xuICAgIC8vIFVzZXMgc3BoZXJpY2FsIGxhdyBvZiBjb3NpbmVzIGFwcHJveGltYXRpb24uXG4gICAgY29uc3QgUiA9IDYzNzEwMDA7XG5cbiAgICBjb25zdCByYWQgPSBNYXRoLlBJIC8gMTgwLFxuICAgICAgICBsYXQxID0gbGF0bG5nMS5sYXQgKiByYWQsXG4gICAgICAgIGxhdDIgPSBsYXRsbmcyLmxhdCAqIHJhZCxcbiAgICAgICAgYSA9IE1hdGguc2luKGxhdDEpICogTWF0aC5zaW4obGF0MikgK1xuICAgICAgICAgIE1hdGguY29zKGxhdDEpICogTWF0aC5jb3MobGF0MikgKiBNYXRoLmNvcygobGF0bG5nMi5sbmcgLSBsYXRsbmcxLmxuZykgKiByYWQpO1xuXG4gICAgY29uc3QgbWF4TWV0ZXJzID0gUiAqIE1hdGguYWNvcyhNYXRoLm1pbihhLCAxKSk7XG4gICAgcmV0dXJuIG1heE1ldGVycztcblxufVxuXG5mdW5jdGlvbiBnZXREZWNpbWFsUm91bmROdW0oZCkge1xuICAgIGNvbnN0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgTWF0aC5jZWlsKC1NYXRoLmxvZyhkKSAvIE1hdGguTE4xMCkpO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGQgKiBtdWx0aXBsaWVyKSAvIG11bHRpcGxpZXI7XG59XG5cbmZ1bmN0aW9uIGdldFJvdW5kTnVtKG51bSkge1xuICAgIGNvbnN0IHBvdzEwID0gTWF0aC5wb3coMTAsIChgJHtNYXRoLmZsb29yKG51bSl9YCkubGVuZ3RoIC0gMSk7XG4gICAgbGV0IGQgPSBudW0gLyBwb3cxMDtcblxuICAgIGQgPSBkID49IDEwID8gMTAgOlxuICAgICAgICBkID49IDUgPyA1IDpcbiAgICAgICAgZCA+PSAzID8gMyA6XG4gICAgICAgIGQgPj0gMiA/IDIgOlxuICAgICAgICBkID49IDEgPyAxIDogZ2V0RGVjaW1hbFJvdW5kTnVtKGQpO1xuXG4gICAgcmV0dXJuIHBvdzEwICogZDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge2JpbmRBbGwsIHdhcm5PbmNlfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi8uLi91dGlsL3dpbmRvdyc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgY29udGFpbmVyPzogSFRNTEVsZW1lbnRcbn07XG5cbi8qKlxuICogQSBgRnVsbHNjcmVlbkNvbnRyb2xgIGNvbnRyb2wgY29udGFpbnMgYSBidXR0b24gZm9yIHRvZ2dsaW5nIHRoZSBtYXAgaW4gYW5kIG91dCBvZiBmdWxsc2NyZWVuIG1vZGUuXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW29wdGlvbnMuY29udGFpbmVyXSBgY29udGFpbmVyYCBpcyB0aGUgW2NvbXBhdGlibGUgRE9NIGVsZW1lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3JlcXVlc3RGdWxsU2NyZWVuI0NvbXBhdGlibGVfZWxlbWVudHMpIHdoaWNoIHNob3VsZCBiZSBtYWRlIGZ1bGwgc2NyZWVuLiBCeSBkZWZhdWx0LCB0aGUgbWFwIGNvbnRhaW5lciBlbGVtZW50IHdpbGwgYmUgbWFkZSBmdWxsIHNjcmVlbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZENvbnRyb2wobmV3IG1hcGJveGdsLkZ1bGxzY3JlZW5Db250cm9sKHtjb250YWluZXI6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKX0pKTtcbiAqIEBzZWUgW1ZpZXcgYSBmdWxsc2NyZWVuIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9mdWxsc2NyZWVuLylcbiAqL1xuXG5jbGFzcyBGdWxsc2NyZWVuQ29udHJvbCB7XG4gICAgX21hcDogTWFwO1xuICAgIF9jb250cm9sQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZnVsbHNjcmVlbjogYm9vbGVhbjtcbiAgICBfZnVsbHNjcmVlbmNoYW5nZTogc3RyaW5nO1xuICAgIF9mdWxsc2NyZWVuQnV0dG9uOiBIVE1MRWxlbWVudDtcbiAgICBfY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5lciBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnRnVsbCBzY3JlZW4gY29udHJvbCBcXCdjb250YWluZXJcXCcgbXVzdCBiZSBhIERPTSBlbGVtZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbkNsaWNrRnVsbHNjcmVlbicsXG4gICAgICAgICAgICAnX2NoYW5nZUljb24nXG4gICAgICAgIF0sIHRoaXMpO1xuICAgICAgICBpZiAoJ29uZnVsbHNjcmVlbmNoYW5nZScgaW4gd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuY2hhbmdlID0gJ2Z1bGxzY3JlZW5jaGFuZ2UnO1xuICAgICAgICB9IGVsc2UgaWYgKCdvbm1vemZ1bGxzY3JlZW5jaGFuZ2UnIGluIHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbmNoYW5nZSA9ICdtb3pmdWxsc2NyZWVuY2hhbmdlJztcbiAgICAgICAgfSBlbHNlIGlmICgnb253ZWJraXRmdWxsc2NyZWVuY2hhbmdlJyBpbiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UgPSAnd2Via2l0ZnVsbHNjcmVlbmNoYW5nZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoJ29ubXNmdWxsc2NyZWVuY2hhbmdlJyBpbiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UgPSAnTVNGdWxsc2NyZWVuQ2hhbmdlJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSAnbWFwYm94Z2wtY3RybCc7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lcikgdGhpcy5fY29udGFpbmVyID0gdGhpcy5fbWFwLmdldENvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9jb250cm9sQ29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgYCR7dGhpcy5fY2xhc3NOYW1lfSBtYXBib3hnbC1jdHJsLWdyb3VwYCk7XG4gICAgICAgIGlmICh0aGlzLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHVwVUkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIHdhcm5PbmNlKCdUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGZ1bGxzY3JlZW4gbW9kZS4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY29udHJvbENvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250cm9sQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fbWFwID0gKG51bGw6IGFueSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsIHRoaXMuX2NoYW5nZUljb24pO1xuICAgIH1cblxuICAgIF9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCkge1xuICAgICAgICByZXR1cm4gISEoXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWQgfHxcbiAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkubW96RnVsbFNjcmVlbkVuYWJsZWQgfHxcbiAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkubXNGdWxsc2NyZWVuRW5hYmxlZCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS53ZWJraXRGdWxsc2NyZWVuRW5hYmxlZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9zZXR1cFVJKCkge1xuICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uID0gRE9NLmNyZWF0ZSgnYnV0dG9uJywgKGAke3RoaXMuX2NsYXNzTmFtZX0taWNvbiAke3RoaXMuX2NsYXNzTmFtZX0tZnVsbHNjcmVlbmApLCB0aGlzLl9jb250cm9sQ29udGFpbmVyKTtcbiAgICAgICAgYnV0dG9uLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgdGhpcy5fdXBkYXRlVGl0bGUoKTtcbiAgICAgICAgdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2tGdWxsc2NyZWVuKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSwgdGhpcy5fY2hhbmdlSWNvbik7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVRpdGxlKCkge1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX2lzRnVsbHNjcmVlbigpID8gXCJFeGl0IGZ1bGxzY3JlZW5cIiA6IFwiRW50ZXIgZnVsbHNjcmVlblwiO1xuICAgICAgICB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdGl0bGUpO1xuICAgICAgICB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLnRpdGxlID0gdGl0bGU7XG4gICAgfVxuXG4gICAgX2lzRnVsbHNjcmVlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxzY3JlZW47XG4gICAgfVxuXG4gICAgX2NoYW5nZUljb24oKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxzY3JlZW5FbGVtZW50ID1cbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tb3pGdWxsU2NyZWVuRWxlbWVudCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tc0Z1bGxzY3JlZW5FbGVtZW50O1xuXG4gICAgICAgIGlmICgoZnVsbHNjcmVlbkVsZW1lbnQgPT09IHRoaXMuX2NvbnRhaW5lcikgIT09IHRoaXMuX2Z1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW4gPSAhdGhpcy5fZnVsbHNjcmVlbjtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZShgJHt0aGlzLl9jbGFzc05hbWV9LXNocmlua2ApO1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKGAke3RoaXMuX2NsYXNzTmFtZX0tZnVsbHNjcmVlbmApO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGl0bGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkNsaWNrRnVsbHNjcmVlbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRnVsbHNjcmVlbigpKSB7XG4gICAgICAgICAgICBpZiAod2luZG93LmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5leGl0RnVsbHNjcmVlbigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbikge1xuICAgICAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkubW96Q2FuY2VsRnVsbFNjcmVlbigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkubXNFeGl0RnVsbHNjcmVlbigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbikge1xuICAgICAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX2NvbnRhaW5lcjogYW55KS5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xuICAgICAgICAgICAgKHRoaXMuX2NvbnRhaW5lcjogYW55KS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl9jb250YWluZXI6IGFueSkubXNSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgKHRoaXMuX2NvbnRhaW5lcjogYW55KS5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX2NvbnRhaW5lcjogYW55KS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgKHRoaXMuX2NvbnRhaW5lcjogYW55KS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGdWxsc2NyZWVuQ29udHJvbDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBET00gZnJvbSAnLi4vdXRpbC9kb20nO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCBzbWFydFdyYXAgZnJvbSAnLi4vdXRpbC9zbWFydF93cmFwJztcbmltcG9ydCB7dHlwZSBBbmNob3IsIGFuY2hvclRyYW5zbGF0ZSwgYXBwbHlBbmNob3JDbGFzc30gZnJvbSAnLi9hbmNob3InO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB0eXBlIHtQb2ludExpa2V9IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICBjbG9zZU9uQ2xpY2s6IHRydWUsXG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBtYXhXaWR0aDogXCIyNDBweFwiXG59O1xuXG5leHBvcnQgdHlwZSBPZmZzZXQgPSBudW1iZXIgfCBQb2ludExpa2UgfCB7W0FuY2hvcl06IFBvaW50TGlrZX07XG5cbmV4cG9ydCB0eXBlIFBvcHVwT3B0aW9ucyA9IHtcbiAgICBjbG9zZUJ1dHRvbj86IGJvb2xlYW4sXG4gICAgY2xvc2VPbkNsaWNrPzogYm9vbGVhbixcbiAgICBhbmNob3I/OiBBbmNob3IsXG4gICAgb2Zmc2V0PzogT2Zmc2V0LFxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgICBtYXhXaWR0aD86IHN0cmluZ1xufTtcblxuLyoqXG4gKiBBIHBvcHVwIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNsb3NlQnV0dG9uPXRydWVdIElmIGB0cnVlYCwgYSBjbG9zZSBidXR0b24gd2lsbCBhcHBlYXIgaW4gdGhlXG4gKiAgIHRvcCByaWdodCBjb3JuZXIgb2YgdGhlIHBvcHVwLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jbG9zZU9uQ2xpY2s9dHJ1ZV0gSWYgYHRydWVgLCB0aGUgcG9wdXAgd2lsbCBjbG9zZWQgd2hlbiB0aGVcbiAqICAgbWFwIGlzIGNsaWNrZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5jaG9yXSAtIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIHBhcnQgb2YgdGhlIFBvcHVwIHRoYXQgc2hvdWxkXG4gKiAgIGJlIHBvc2l0aW9uZWQgY2xvc2VzdCB0byB0aGUgY29vcmRpbmF0ZSBzZXQgdmlhIHtAbGluayBQb3B1cCNzZXRMbmdMYXR9LlxuICogICBPcHRpb25zIGFyZSBgJ2NlbnRlcidgLCBgJ3RvcCdgLCBgJ2JvdHRvbSdgLCBgJ2xlZnQnYCwgYCdyaWdodCdgLCBgJ3RvcC1sZWZ0J2AsXG4gKiAgIGAndG9wLXJpZ2h0J2AsIGAnYm90dG9tLWxlZnQnYCwgYW5kIGAnYm90dG9tLXJpZ2h0J2AuIElmIHVuc2V0IHRoZSBhbmNob3Igd2lsbCBiZVxuICogICBkeW5hbWljYWxseSBzZXQgdG8gZW5zdXJlIHRoZSBwb3B1cCBmYWxscyB3aXRoaW4gdGhlIG1hcCBjb250YWluZXIgd2l0aCBhIHByZWZlcmVuY2VcbiAqICAgZm9yIGAnYm90dG9tJ2AuXG4gKiBAcGFyYW0ge251bWJlcnxQb2ludExpa2V8T2JqZWN0fSBbb3B0aW9ucy5vZmZzZXRdIC1cbiAqICBBIHBpeGVsIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBwb3B1cCdzIGxvY2F0aW9uIHNwZWNpZmllZCBhczpcbiAqICAgLSBhIHNpbmdsZSBudW1iZXIgc3BlY2lmeWluZyBhIGRpc3RhbmNlIGZyb20gdGhlIHBvcHVwJ3MgbG9jYXRpb25cbiAqICAgLSBhIHtAbGluayBQb2ludExpa2V9IHNwZWNpZnlpbmcgYSBjb25zdGFudCBvZmZzZXRcbiAqICAgLSBhbiBvYmplY3Qgb2Yge0BsaW5rIFBvaW50fXMgc3BlY2lmaW5nIGFuIG9mZnNldCBmb3IgZWFjaCBhbmNob3IgcG9zaXRpb25cbiAqICBOZWdhdGl2ZSBvZmZzZXRzIGluZGljYXRlIGxlZnQgYW5kIHVwLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNsYXNzTmFtZV0gU3BhY2Utc2VwYXJhdGVkIENTUyBjbGFzcyBuYW1lcyB0byBhZGQgdG8gcG9wdXAgY29udGFpbmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubWF4V2lkdGg9JzI0MHB4J10gLVxuICogIEEgc3RyaW5nIHRoYXQgc2V0cyB0aGUgQ1NTIHByb3BlcnR5IG9mIHRoZSBwb3B1cCdzIG1heGltdW0gd2lkdGgsIGVnIGAnMzAwcHgnYC5cbiAqICBUbyBlbnN1cmUgdGhlIHBvcHVwIHJlc2l6ZXMgdG8gZml0IGl0cyBjb250ZW50LCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBgJ25vbmUnYC5cbiAqICBBdmFpbGFibGUgdmFsdWVzIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWF4LXdpZHRoXG4gKiBAZXhhbXBsZVxuICogdmFyIG1hcmtlckhlaWdodCA9IDUwLCBtYXJrZXJSYWRpdXMgPSAxMCwgbGluZWFyT2Zmc2V0ID0gMjU7XG4gKiB2YXIgcG9wdXBPZmZzZXRzID0ge1xuICogICd0b3AnOiBbMCwgMF0sXG4gKiAgJ3RvcC1sZWZ0JzogWzAsMF0sXG4gKiAgJ3RvcC1yaWdodCc6IFswLDBdLFxuICogICdib3R0b20nOiBbMCwgLW1hcmtlckhlaWdodF0sXG4gKiAgJ2JvdHRvbS1sZWZ0JzogW2xpbmVhck9mZnNldCwgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cyArIGxpbmVhck9mZnNldCkgKiAtMV0sXG4gKiAgJ2JvdHRvbS1yaWdodCc6IFstbGluZWFyT2Zmc2V0LCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzICsgbGluZWFyT2Zmc2V0KSAqIC0xXSxcbiAqICAnbGVmdCc6IFttYXJrZXJSYWRpdXMsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMpICogLTFdLFxuICogICdyaWdodCc6IFstbWFya2VyUmFkaXVzLCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzKSAqIC0xXVxuICogIH07XG4gKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoe29mZnNldDogcG9wdXBPZmZzZXRzLCBjbGFzc05hbWU6ICdteS1jbGFzcyd9KVxuICogICAuc2V0TG5nTGF0KGUubG5nTGF0KVxuICogICAuc2V0SFRNTChcIjxoMT5IZWxsbyBXb3JsZCE8L2gxPlwiKVxuICogICAuc2V0TWF4V2lkdGgoXCIzMDBweFwiKVxuICogICAuYWRkVG8obWFwKTtcbiAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC8pXG4gKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gaG92ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24taG92ZXIvKVxuICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGNsaWNrXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWNsaWNrLylcbiAqIEBzZWUgW0F0dGFjaCBhIHBvcHVwIHRvIGEgbWFya2VyIGluc3RhbmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3NldC1wb3B1cC8pXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvcHVwIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgX21hcDogTWFwO1xuICAgIG9wdGlvbnM6IFBvcHVwT3B0aW9ucztcbiAgICBfY29udGVudDogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2Nsb3NlQnV0dG9uOiBIVE1MRWxlbWVudDtcbiAgICBfdGlwOiBIVE1MRWxlbWVudDtcbiAgICBfbG5nTGF0OiBMbmdMYXQ7XG4gICAgX3RyYWNrUG9pbnRlcjogYm9vbGVhbjtcbiAgICBfcG9zOiA/UG9pbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQb3B1cE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUoZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICAgICAgYmluZEFsbChbJ191cGRhdGUnLCAnX29uQ2xpY2tDbG9zZScsICdyZW1vdmUnXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgcG9wdXAgdG8gYSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBNYXBib3ggR0wgSlMgbWFwIHRvIGFkZCB0aGUgcG9wdXAgdG8uXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBhZGRUbyhtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ2NsaWNrJywgdGhpcy5fb25DbGlja0Nsb3NlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hcC5vbigncmVtb3ZlJywgdGhpcy5yZW1vdmUpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICBpZiAodGhpcy5fdHJhY2tQb2ludGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNlbW92ZScsIChlKSA9PiB7IHRoaXMuX3VwZGF0ZShlLnBvaW50KTsgfSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNldXAnLCAoZSkgPT4geyB0aGlzLl91cGRhdGUoZS5wb2ludCk7IH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVkIHdoZW4gdGhlIHBvcHVwIGlzIG9wZW5lZCBtYW51YWxseSBvciBwcm9ncmFtYXRpY2FsbHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBvcGVuXG4gICAgICAgICAqIEBtZW1iZXJvZiBQb3B1cFxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICogQHByb3BlcnR5IHtQb3B1cH0gcG9wdXAgb2JqZWN0IHRoYXQgd2FzIG9wZW5lZFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnb3BlbicpKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwb3B1cCBpcyBvcGVuLCBgZmFsc2VgIGlmIGl0IGlzIGNsb3NlZC5cbiAgICAgKi9cbiAgICBpc09wZW4oKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX21hcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBwb3B1cCBmcm9tIHRoZSBtYXAgaXQgaGFzIGJlZW4gYWRkZWQgdG8uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpLmFkZFRvKG1hcCk7XG4gICAgICogcG9wdXAucmVtb3ZlKCk7XG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbnRhaW5lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignY2xpY2snLCB0aGlzLl9vbkNsaWNrQ2xvc2UpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigncmVtb3ZlJywgdGhpcy5yZW1vdmUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vtb3ZlJyk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWFwO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVkIHdoZW4gdGhlIHBvcHVwIGlzIGNsb3NlZCBtYW51YWxseSBvciBwcm9ncmFtYXRpY2FsbHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBjbG9zZVxuICAgICAgICAgKiBAbWVtYmVyb2YgUG9wdXBcbiAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqIEBwcm9wZXJ0eSB7UG9wdXB9IHBvcHVwIG9iamVjdCB0aGF0IHdhcyBjbG9zZWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2Nsb3NlJykpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbiBvZiB0aGUgcG9wdXAncyBhbmNob3IuXG4gICAgICpcbiAgICAgKiBUaGUgbG9uZ2l0dWRlIG9mIHRoZSByZXN1bHQgbWF5IGRpZmZlciBieSBhIG11bHRpcGxlIG9mIDM2MCBkZWdyZWVzIGZyb20gdGhlIGxvbmdpdHVkZSBwcmV2aW91c2x5XG4gICAgICogc2V0IGJ5IGBzZXRMbmdMYXRgIGJlY2F1c2UgYFBvcHVwYCB3cmFwcyB0aGUgYW5jaG9yIGxvbmdpdHVkZSBhY3Jvc3MgY29waWVzIG9mIHRoZSB3b3JsZCB0byBrZWVwXG4gICAgICogdGhlIHBvcHVwIG9uIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gb2YgdGhlIHBvcHVwJ3MgYW5jaG9yLlxuICAgICAqL1xuICAgIGdldExuZ0xhdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xuZ0xhdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gb2YgdGhlIHBvcHVwJ3MgYW5jaG9yLCBhbmQgbW92ZXMgdGhlIHBvcHVwIHRvIGl0LiBSZXBsYWNlcyB0cmFja1BvaW50ZXIoKSBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsbmdsYXQgVGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbiB0byBzZXQgYXMgdGhlIHBvcHVwJ3MgYW5jaG9yLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0TG5nTGF0KGxuZ2xhdDogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9sbmdMYXQgPSBMbmdMYXQuY29udmVydChsbmdsYXQpO1xuICAgICAgICB0aGlzLl9wb3MgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3RyYWNrUG9pbnRlciA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZW1vdmUnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtdHJhY2stcG9pbnRlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBwb3B1cCBhbmNob3IgdG8gdGhlIGN1cnNvciBwb3NpdGlvbiwgb24gc2NyZWVucyB3aXRoIGEgcG9pbnRlciBkZXZpY2UgKHdpbGwgYmUgaGlkZGVuIG9uIHRvdWNoc2NyZWVucykuIFJlcGxhY2VzIHRoZSBzZXRMbmdMYXQgYmVoYXZpb3IuXG4gICAgICogRm9yIG1vc3QgdXNlIGNhc2VzLCBgY2xvc2VPbkNsaWNrYCBhbmQgYGNsb3NlQnV0dG9uYCBzaG91bGQgYWxzbyBiZSBzZXQgdG8gYGZhbHNlYCBoZXJlLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgdHJhY2tQb2ludGVyKCkge1xuICAgICAgICB0aGlzLl90cmFja1BvaW50ZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLl9wb3MgPSBudWxsO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNlbW92ZScsIChlKSA9PiB7IHRoaXMuX3VwZGF0ZShlLnBvaW50KTsgfSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ2RyYWcnLCAoZSkgPT4geyB0aGlzLl91cGRhdGUoZS5wb2ludCk7IH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBQb3B1cGAncyBIVE1MIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAgICovXG4gICAgZ2V0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwb3B1cCdzIGNvbnRlbnQgdG8gYSBzdHJpbmcgb2YgdGV4dC5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIFtUZXh0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVGV4dCkgbm9kZSBpbiB0aGUgRE9NLFxuICAgICAqIHNvIGl0IGNhbm5vdCBpbnNlcnQgcmF3IEhUTUwuIFVzZSB0aGlzIG1ldGhvZCBmb3Igc2VjdXJpdHkgYWdhaW5zdCBYU1NcbiAgICAgKiBpZiB0aGUgcG9wdXAgY29udGVudCBpcyB1c2VyLXByb3ZpZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQgVGV4dHVhbCBjb250ZW50IGZvciB0aGUgcG9wdXAuXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogICAuc2V0TG5nTGF0KGUubG5nTGF0KVxuICAgICAqICAgLnNldFRleHQoJ0hlbGxvLCB3b3JsZCEnKVxuICAgICAqICAgLmFkZFRvKG1hcCk7XG4gICAgICovXG4gICAgc2V0VGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudCh3aW5kb3cuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBvcHVwJ3MgY29udGVudCB0byB0aGUgSFRNTCBwcm92aWRlZCBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHBlcmZvcm0gSFRNTCBmaWx0ZXJpbmcgb3Igc2FuaXRpemF0aW9uLCBhbmQgbXVzdCBiZVxuICAgICAqIHVzZWQgb25seSB3aXRoIHRydXN0ZWQgY29udGVudC4gQ29uc2lkZXIge0BsaW5rIFBvcHVwI3NldFRleHR9IGlmXG4gICAgICogdGhlIGNvbnRlbnQgaXMgYW4gdW50cnVzdGVkIHRleHQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGh0bWwgQSBzdHJpbmcgcmVwcmVzZW50aW5nIEhUTUwgY29udGVudCBmb3IgdGhlIHBvcHVwLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0SFRNTChodG1sOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZnJhZyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYm9keScpO1xuICAgICAgICBsZXQgY2hpbGQ7XG4gICAgICAgIHRlbXAuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNoaWxkID0gdGVtcC5maXJzdENoaWxkO1xuICAgICAgICAgICAgaWYgKCFjaGlsZCkgYnJlYWs7XG4gICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNldERPTUNvbnRlbnQoZnJhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcG9wdXAncyBtYXhpbXVtIHdpZHRoLlxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG1heGltdW0gd2lkdGggb2YgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIGdldE1heFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBvcHVwJ3MgbWF4aW11bSB3aWR0aC4gVGhpcyBpcyBzZXR0aW5nIHRoZSBDU1MgcHJvcGVydHkgYG1heC13aWR0aGAuXG4gICAgICogQXZhaWxhYmxlIHZhbHVlcyBjYW4gYmUgZm91bmQgaGVyZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21heC13aWR0aFxuICAgICAqXG4gICAgICogQHBhcmFtIG1heFdpZHRoIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgZm9yIHRoZSBtYXhpbXVtIHdpZHRoLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0TWF4V2lkdGgobWF4V2lkdGg6IHN0cmluZykge1xuICAgICAgICB0aGlzLm9wdGlvbnMubWF4V2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBvcHVwJ3MgY29udGVudCB0byB0aGUgZWxlbWVudCBwcm92aWRlZCBhcyBhIERPTSBub2RlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGh0bWxOb2RlIEEgRE9NIG5vZGUgdG8gYmUgdXNlZCBhcyBjb250ZW50IGZvciB0aGUgcG9wdXAuXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIGNyZWF0ZSBhbiBlbGVtZW50IHdpdGggdGhlIHBvcHVwIGNvbnRlbnRcbiAgICAgKiB2YXIgZGl2ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAqIGRpdi5pbm5lckhUTUwgPSAnSGVsbG8sIHdvcmxkISc7XG4gICAgICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKClcbiAgICAgKiAgIC5zZXRMbmdMYXQoZS5sbmdMYXQpXG4gICAgICogICAuc2V0RE9NQ29udGVudChkaXYpXG4gICAgICogICAuYWRkVG8obWFwKTtcbiAgICAgKi9cbiAgICBzZXRET01Db250ZW50KGh0bWxOb2RlOiBOb2RlKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUNvbnRlbnQoKTtcbiAgICAgICAgdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZChodG1sTm9kZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfY3JlYXRlQ29udGVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb250ZW50ID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLXBvcHVwLWNvbnRlbnQnLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUJ1dHRvbiA9IERPTS5jcmVhdGUoJ2J1dHRvbicsICdtYXBib3hnbC1wb3B1cC1jbG9zZS1idXR0b24nLCB0aGlzLl9jb250ZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdDbG9zZSBwb3B1cCcpO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VCdXR0b24uaW5uZXJIVE1MID0gJyYjMjE1Oyc7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2tDbG9zZSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIF91cGRhdGUoY3Vyc29yOiBQb2ludExpa2UpIHtcbiAgICAgICAgY29uc3QgaGFzUG9zaXRpb24gPSB0aGlzLl9sbmdMYXQgfHwgdGhpcy5fdHJhY2tQb2ludGVyO1xuXG4gICAgICAgIGlmICghdGhpcy5fbWFwIHx8ICFoYXNQb3NpdGlvbiB8fCAhdGhpcy5fY29udGVudCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLXBvcHVwJywgdGhpcy5fbWFwLmdldENvbnRhaW5lcigpKTtcbiAgICAgICAgICAgIHRoaXMuX3RpcCAgICAgICA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1wb3B1cC10aXAnLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2xhc3NOYW1lLnNwbGl0KCcgJykuZm9yRWFjaChuYW1lID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKG5hbWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl90cmFja1BvaW50ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5tYXhXaWR0aCAmJiB0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGggIT09IHRoaXMub3B0aW9ucy5tYXhXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoID0gdGhpcy5vcHRpb25zLm1heFdpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMgJiYgIXRoaXMuX3RyYWNrUG9pbnRlcikge1xuICAgICAgICAgICAgdGhpcy5fbG5nTGF0ID0gc21hcnRXcmFwKHRoaXMuX2xuZ0xhdCwgdGhpcy5fcG9zLCB0aGlzLl9tYXAudHJhbnNmb3JtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl90cmFja1BvaW50ZXIgJiYgIWN1cnNvcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuX3BvcyA9IHRoaXMuX3RyYWNrUG9pbnRlciAmJiBjdXJzb3IgPyBjdXJzb3IgOiB0aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpO1xuXG4gICAgICAgIGxldCBhbmNob3I6ID9BbmNob3IgPSB0aGlzLm9wdGlvbnMuYW5jaG9yO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBub3JtYWxpemVPZmZzZXQodGhpcy5vcHRpb25zLm9mZnNldCk7XG5cbiAgICAgICAgaWYgKCFhbmNob3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIGxldCBhbmNob3JDb21wb25lbnRzO1xuXG4gICAgICAgICAgICBpZiAocG9zLnkgKyBvZmZzZXQuYm90dG9tLnkgPCBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBhbmNob3JDb21wb25lbnRzID0gWyd0b3AnXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zLnkgPiB0aGlzLl9tYXAudHJhbnNmb3JtLmhlaWdodCAtIGhlaWdodCkge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMgPSBbJ2JvdHRvbSddO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbmNob3JDb21wb25lbnRzID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwb3MueCA8IHdpZHRoIC8gMikge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMucHVzaCgnbGVmdCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MueCA+IHRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGggLSB3aWR0aCAvIDIpIHtcbiAgICAgICAgICAgICAgICBhbmNob3JDb21wb25lbnRzLnB1c2goJ3JpZ2h0Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhbmNob3JDb21wb25lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFuY2hvciA9ICdib3R0b20nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbmNob3IgPSAoYW5jaG9yQ29tcG9uZW50cy5qb2luKCctJyk6IGFueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvZmZzZXRlZFBvcyA9IHBvcy5hZGQob2Zmc2V0W2FuY2hvcl0pLnJvdW5kKCk7XG4gICAgICAgIERPTS5zZXRUcmFuc2Zvcm0odGhpcy5fY29udGFpbmVyLCBgJHthbmNob3JUcmFuc2xhdGVbYW5jaG9yXX0gdHJhbnNsYXRlKCR7b2Zmc2V0ZWRQb3MueH1weCwke29mZnNldGVkUG9zLnl9cHgpYCk7XG4gICAgICAgIGFwcGx5QW5jaG9yQ2xhc3ModGhpcy5fY29udGFpbmVyLCBhbmNob3IsICdwb3B1cCcpO1xuICAgIH1cblxuICAgIF9vbkNsaWNrQ2xvc2UoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVPZmZzZXQob2Zmc2V0OiA/T2Zmc2V0KSB7XG4gICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZU9mZnNldChuZXcgUG9pbnQoMCwgMCkpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBpbnB1dCBzcGVjaWZpZXMgYSByYWRpdXMgZnJvbSB3aGljaCB0byBjYWxjdWxhdGUgb2Zmc2V0cyBhdCBhbGwgcG9zaXRpb25zXG4gICAgICAgIGNvbnN0IGNvcm5lck9mZnNldCA9IE1hdGgucm91bmQoTWF0aC5zcXJ0KDAuNSAqIE1hdGgucG93KG9mZnNldCwgMikpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjZW50ZXInOiBuZXcgUG9pbnQoMCwgMCksXG4gICAgICAgICAgICAndG9wJzogbmV3IFBvaW50KDAsIG9mZnNldCksXG4gICAgICAgICAgICAndG9wLWxlZnQnOiBuZXcgUG9pbnQoY29ybmVyT2Zmc2V0LCBjb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ3RvcC1yaWdodCc6IG5ldyBQb2ludCgtY29ybmVyT2Zmc2V0LCBjb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ2JvdHRvbSc6IG5ldyBQb2ludCgwLCAtb2Zmc2V0KSxcbiAgICAgICAgICAgICdib3R0b20tbGVmdCc6IG5ldyBQb2ludChjb3JuZXJPZmZzZXQsIC1jb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ2JvdHRvbS1yaWdodCc6IG5ldyBQb2ludCgtY29ybmVyT2Zmc2V0LCAtY29ybmVyT2Zmc2V0KSxcbiAgICAgICAgICAgICdsZWZ0JzogbmV3IFBvaW50KG9mZnNldCwgMCksXG4gICAgICAgICAgICAncmlnaHQnOiBuZXcgUG9pbnQoLW9mZnNldCwgMClcbiAgICAgICAgfTtcblxuICAgIH0gZWxzZSBpZiAob2Zmc2V0IGluc3RhbmNlb2YgUG9pbnQgfHwgQXJyYXkuaXNBcnJheShvZmZzZXQpKSB7XG4gICAgICAgIC8vIGlucHV0IHNwZWNpZmllcyBhIHNpbmdsZSBvZmZzZXQgdG8gYmUgYXBwbGllZCB0byBhbGwgcG9zaXRpb25zXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZE9mZnNldCA9IFBvaW50LmNvbnZlcnQob2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjZW50ZXInOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAndG9wJzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ3RvcC1sZWZ0JzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ3RvcC1yaWdodCc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdib3R0b20nOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAnYm90dG9tLWxlZnQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAnYm90dG9tLXJpZ2h0JzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ2xlZnQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAncmlnaHQnOiBjb252ZXJ0ZWRPZmZzZXRcbiAgICAgICAgfTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlucHV0IHNwZWNpZmllcyBhbiBvZmZzZXQgcGVyIHBvc2l0aW9uXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnY2VudGVyJzogUG9pbnQuY29udmVydChvZmZzZXRbJ2NlbnRlciddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAndG9wJzogUG9pbnQuY29udmVydChvZmZzZXRbJ3RvcCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAndG9wLWxlZnQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsndG9wLWxlZnQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ3RvcC1yaWdodCc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wyd0b3AtcmlnaHQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2JvdHRvbSc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wydib3R0b20nXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2JvdHRvbS1sZWZ0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ2JvdHRvbS1sZWZ0J10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICdib3R0b20tcmlnaHQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnYm90dG9tLXJpZ2h0J10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICdsZWZ0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ2xlZnQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ3JpZ2h0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ3JpZ2h0J10gfHwgWzAsIDBdKVxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzdXBwb3J0ZWQgZnJvbSAnQG1hcGJveC9tYXBib3gtZ2wtc3VwcG9ydGVkJztcblxuaW1wb3J0IHt2ZXJzaW9ufSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IE1hcCBmcm9tICcuL3VpL21hcCc7XG5pbXBvcnQgTmF2aWdhdGlvbkNvbnRyb2wgZnJvbSAnLi91aS9jb250cm9sL25hdmlnYXRpb25fY29udHJvbCc7XG5pbXBvcnQgR2VvbG9jYXRlQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvZ2VvbG9jYXRlX2NvbnRyb2wnO1xuaW1wb3J0IEF0dHJpYnV0aW9uQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvYXR0cmlidXRpb25fY29udHJvbCc7XG5pbXBvcnQgU2NhbGVDb250cm9sIGZyb20gJy4vdWkvY29udHJvbC9zY2FsZV9jb250cm9sJztcbmltcG9ydCBGdWxsc2NyZWVuQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvZnVsbHNjcmVlbl9jb250cm9sJztcbmltcG9ydCBQb3B1cCBmcm9tICcuL3VpL3BvcHVwJztcbmltcG9ydCBNYXJrZXIgZnJvbSAnLi91aS9tYXJrZXInO1xuaW1wb3J0IFN0eWxlIGZyb20gJy4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuL2dlby9sbmdfbGF0JztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL3V0aWwvY29uZmlnJztcbmltcG9ydCB7c2V0UlRMVGV4dFBsdWdpbiwgZ2V0UlRMVGV4dFBsdWdpblN0YXR1c30gZnJvbSAnLi9zb3VyY2UvcnRsX3RleHRfcGx1Z2luJztcbmltcG9ydCBXb3JrZXJQb29sIGZyb20gJy4vdXRpbC93b3JrZXJfcG9vbCc7XG5pbXBvcnQge2NsZWFyVGlsZUNhY2hlfSBmcm9tICcuL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuY29uc3QgZXhwb3J0ZWQgPSB7XG4gICAgdmVyc2lvbixcbiAgICBzdXBwb3J0ZWQsXG4gICAgc2V0UlRMVGV4dFBsdWdpbixcbiAgICBnZXRSVExUZXh0UGx1Z2luU3RhdHVzLFxuICAgIE1hcCxcbiAgICBOYXZpZ2F0aW9uQ29udHJvbCxcbiAgICBHZW9sb2NhdGVDb250cm9sLFxuICAgIEF0dHJpYnV0aW9uQ29udHJvbCxcbiAgICBTY2FsZUNvbnRyb2wsXG4gICAgRnVsbHNjcmVlbkNvbnRyb2wsXG4gICAgUG9wdXAsXG4gICAgTWFya2VyLFxuICAgIFN0eWxlLFxuICAgIExuZ0xhdCxcbiAgICBMbmdMYXRCb3VuZHMsXG4gICAgUG9pbnQsXG4gICAgTWVyY2F0b3JDb29yZGluYXRlLFxuICAgIEV2ZW50ZWQsXG4gICAgY29uZmlnLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyB0aGUgbWFwJ3MgW2FjY2VzcyB0b2tlbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL2RlZmluZS1hY2Nlc3MtdG9rZW4vKS5cbiAgICAgKlxuICAgICAqIEB2YXIge3N0cmluZ30gYWNjZXNzVG9rZW5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcGJveGdsLmFjY2Vzc1Rva2VuID0gbXlBY2Nlc3NUb2tlbjtcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlcy8pXG4gICAgICovXG4gICAgZ2V0IGFjY2Vzc1Rva2VuKCk6ID9zdHJpbmcge1xuICAgICAgICByZXR1cm4gY29uZmlnLkFDQ0VTU19UT0tFTjtcbiAgICB9LFxuXG4gICAgc2V0IGFjY2Vzc1Rva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgY29uZmlnLkFDQ0VTU19UT0tFTiA9IHRva2VuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXAncyBkZWZhdWx0IEFQSSBVUkwgZm9yIHJlcXVlc3RpbmcgdGlsZXMsIHN0eWxlcywgc3ByaXRlcywgYW5kIGdseXBoc1xuICAgICAqXG4gICAgICogQHZhciB7c3RyaW5nfSBiYXNlQXBpVXJsXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXBib3hnbC5iYXNlQXBpVXJsID0gJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20nO1xuICAgICAqL1xuICAgIGdldCBiYXNlQXBpVXJsKCk6ID9zdHJpbmcge1xuICAgICAgICByZXR1cm4gY29uZmlnLkFQSV9VUkw7XG4gICAgfSxcblxuICAgIHNldCBiYXNlQXBpVXJsKHVybDogc3RyaW5nKSB7XG4gICAgICAgIGNvbmZpZy5BUElfVVJMID0gdXJsO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2Ygd2ViIHdvcmtlcnMgaW5zdGFudGlhdGVkIG9uIGEgcGFnZSB3aXRoIEdMIEpTIG1hcHMuXG4gICAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIGhhbGYgdGhlIG51bWJlciBvZiBDUFUgY29yZXMgKGNhcHBlZCBhdCA2KS5cbiAgICAgKiBNYWtlIHN1cmUgdG8gc2V0IHRoaXMgcHJvcGVydHkgYmVmb3JlIGNyZWF0aW5nIGFueSBtYXAgaW5zdGFuY2VzIGZvciBpdCB0byBoYXZlIGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEB2YXIge3N0cmluZ30gd29ya2VyQ291bnRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcGJveGdsLndvcmtlckNvdW50ID0gMjtcbiAgICAgKi9cbiAgICBnZXQgd29ya2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIFdvcmtlclBvb2wud29ya2VyQ291bnQ7XG4gICAgfSxcblxuICAgIHNldCB3b3JrZXJDb3VudChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIFdvcmtlclBvb2wud29ya2VyQ291bnQgPSBjb3VudDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW1hZ2VzIChyYXN0ZXIgdGlsZXMsIHNwcml0ZXMsIGljb25zKSB0byBsb2FkIGluIHBhcmFsbGVsLFxuICAgICAqIHdoaWNoIGFmZmVjdHMgcGVyZm9ybWFuY2UgaW4gcmFzdGVyLWhlYXZ5IG1hcHMuIDE2IGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAdmFyIHtzdHJpbmd9IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0c1xuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwYm94Z2wubWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzID0gMTA7XG4gICAgICovXG4gICAgZ2V0IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUztcbiAgICB9LFxuXG4gICAgc2V0IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0cyhudW1SZXF1ZXN0czogbnVtYmVyKSB7XG4gICAgICAgIGNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFMgPSBudW1SZXF1ZXN0cztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGJyb3dzZXIgc3RvcmFnZSB1c2VkIGJ5IHRoaXMgbGlicmFyeS4gVXNpbmcgdGhpcyBtZXRob2QgZmx1c2hlcyB0aGUgTWFwYm94IHRpbGVcbiAgICAgKiBjYWNoZSB0aGF0IGlzIG1hbmFnZWQgYnkgdGhpcyBsaWJyYXJ5LiBUaWxlcyBtYXkgc3RpbGwgYmUgY2FjaGVkIGJ5IHRoZSBicm93c2VyXG4gICAgICogaW4gc29tZSBjYXNlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBvbiBicm93c2VycyB3aGVyZSB0aGUgW2BDYWNoZWAgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ2FjaGUpXG4gICAgICogaXMgc3VwcG9ydGVkIGFuZCBlbmFibGVkLiBUaGlzIGluY2x1ZGVzIGFsbCBtYWpvciBicm93c2VycyB3aGVuIHBhZ2VzIGFyZSBzZXJ2ZWQgb3ZlclxuICAgICAqIGBodHRwczovL2AsIGV4Y2VwdCBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBNb2JpbGUuXG4gICAgICpcbiAgICAgKiBXaGVuIGNhbGxlZCBpbiB1bnN1cHBvcnRlZCBicm93c2VycyBvciBlbnZpcm9ubWVudHMgKHByaXZhdGUgb3IgaW5jb2duaXRvIG1vZGUpLCB0aGVcbiAgICAgKiBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aXRoIGFuIGVycm9yIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uIGNsZWFyU3RvcmFnZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICAgICAqL1xuICAgIGNsZWFyU3RvcmFnZShjYWxsYmFjaz86IChlcnI6ID9FcnJvcikgPT4gdm9pZCkge1xuICAgICAgICBjbGVhclRpbGVDYWNoZShjYWxsYmFjayk7XG4gICAgfSxcblxuICAgIHdvcmtlclVybDogJydcbn07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgTWFwYm94IEdMIEpTIGluIHVzZSBhcyBzcGVjaWZpZWQgaW4gYHBhY2thZ2UuanNvbmAsXG4gKiBgQ0hBTkdFTE9HLm1kYCwgYW5kIHRoZSBHaXRIdWIgcmVsZWFzZS5cbiAqXG4gKiBAdmFyIHtzdHJpbmd9IHZlcnNpb25cbiAqL1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgYnJvd3NlciBbc3VwcG9ydHMgTWFwYm94IEdMIEpTXShodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvbWFwYm94LWJyb3dzZXItc3VwcG9ydC8jbWFwYm94LWdsLWpzKS5cbiAqXG4gKiBAZnVuY3Rpb24gc3VwcG9ydGVkXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZmFsc2VdIElmIGB0cnVlYCxcbiAqICAgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgdGhlIHBlcmZvcm1hbmNlIG9mIE1hcGJveCBHTCBKUyB3b3VsZFxuICogICBiZSBkcmFtYXRpY2FsbHkgd29yc2UgdGhhbiBleHBlY3RlZCAoZS5nLiBhIHNvZnR3YXJlIFdlYkdMIHJlbmRlcmVyIHdvdWxkIGJlIHVzZWQpLlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBleGFtcGxlXG4gKiBtYXBib3hnbC5zdXBwb3J0ZWQoKSAvLyA9IHRydWVcbiAqIEBzZWUgW0NoZWNrIGZvciBicm93c2VyIHN1cHBvcnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2hlY2stZm9yLXN1cHBvcnQvKVxuICovXG5cbi8qKlxuICogU2V0cyB0aGUgbWFwJ3MgW1JUTCB0ZXh0IHBsdWdpbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvcGx1Z2lucy8jbWFwYm94LWdsLXJ0bC10ZXh0KS5cbiAqIE5lY2Vzc2FyeSBmb3Igc3VwcG9ydGluZyB0aGUgQXJhYmljIGFuZCBIZWJyZXcgbGFuZ3VhZ2VzLCB3aGljaCBhcmUgd3JpdHRlbiByaWdodC10by1sZWZ0LiBNYXBib3ggU3R1ZGlvIGxvYWRzIHRoaXMgcGx1Z2luIGJ5IGRlZmF1bHQuXG4gKlxuICogQGZ1bmN0aW9uIHNldFJUTFRleHRQbHVnaW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwbHVnaW5VUkwgVVJMIHBvaW50aW5nIHRvIHRoZSBNYXBib3ggUlRMIHRleHQgcGx1Z2luIHNvdXJjZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICogQGV4YW1wbGVcbiAqIG1hcGJveGdsLnNldFJUTFRleHRQbHVnaW4oJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3BsdWdpbnMvbWFwYm94LWdsLXJ0bC10ZXh0L3YwLjIuMC9tYXBib3gtZ2wtcnRsLXRleHQuanMnKTtcbiAqIEBzZWUgW0FkZCBzdXBwb3J0IGZvciByaWdodC10by1sZWZ0IHNjcmlwdHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWFwYm94LWdsLXJ0bC10ZXh0LylcbiAqL1xuXG4vKipcbiAgKiBHZXRzIHRoZSBtYXAncyBbUlRMIHRleHQgcGx1Z2luXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9wbHVnaW5zLyNtYXBib3gtZ2wtcnRsLXRleHQpIHN0YXR1cy5cbiAgKiBUaGUgc3RhdHVzIGNhbiBiZSBgdW5hdmFpbGFibGVgIChpLmUuIG5vdCByZXF1ZXN0ZWQgb3IgcmVtb3ZlZCksIGBsb2FkaW5nYCwgYGxvYWRlZGAgb3IgYGVycm9yYC5cbiAgKiBJZiB0aGUgc3RhdHVzIGlzIGBsb2FkZWRgIGFuZCB0aGUgcGx1Z2luIGlzIHJlcXVlc3RlZCBhZ2FpbiwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gICpcbiAgKiBAZnVuY3Rpb24gZ2V0UlRMVGV4dFBsdWdpblN0YXR1c1xuICAqIEBleGFtcGxlXG4gICogY29uc3QgcGx1Z2luU3RhdHVzID0gbWFwYm94Z2wuZ2V0UlRMVGV4dFBsdWdpblN0YXR1cygpO1xuICAqL1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcblxuLy8gY2FuYXJ5IGFzc2VydDogdXNlZCB0byBjb25maXJtIHRoYXQgYXNzZXJ0cyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHByb2R1Y3Rpb24gYnVpbGRcbmFzc2VydCh0cnVlLCAnY2FuYXJ5IGFzc2VydCcpO1xuIiwiLy9cbi8vIE91ciBjdXN0b20gaW50cm8gcHJvdmlkZXMgYSBzcGVjaWFsaXplZCBcImRlZmluZSgpXCIgZnVuY3Rpb24sIGNhbGxlZCBieSB0aGVcbi8vIEFNRCBtb2R1bGVzIGJlbG93LCB0aGF0IHNldHMgdXAgdGhlIHdvcmtlciBibG9iIFVSTCBhbmQgdGhlbiBleGVjdXRlcyB0aGVcbi8vIG1haW4gbW9kdWxlLCBzdG9yaW5nIGl0cyBleHBvcnRlZCB2YWx1ZSBhcyAnbWFwYm94Z2wnXG5cbi8vIFRoZSB0aHJlZSBcImNodW5rc1wiIGltcG9ydGVkIGhlcmUgYXJlIHByb2R1Y2VkIGJ5IGEgZmlyc3QgUm9sbHVwIHBhc3MsXG4vLyB3aGljaCBvdXRwdXRzIHRoZW0gYXMgQU1EIG1vZHVsZXMuXG5cbi8vIFNoYXJlZCBkZXBlbmRlbmNpZXMsIGkuZS46XG4vKlxuZGVmaW5lKFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgIC8vIENvZGUgZm9yIGFsbCBjb21tb24gZGVwZW5kZW5jaWVzXG4gICAgLy8gRWFjaCBtb2R1bGUncyBleHBvcnRzIGFyZSBhdHRhY2hlZCBhdHRhY2hlZCB0byAnZXhwb3J0cycgKHdpdGhcbiAgICAvLyBuYW1lcyByZXdyaXR0ZW4gdG8gYXZvaWQgY29sbGlzaW9ucywgZXRjLilcbn0pXG4qL1xuaW1wb3J0ICcuL2J1aWxkL21hcGJveGdsL3NoYXJlZCc7XG5cbi8vIFdvcmtlciBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMsIGkuZS46XG4vKlxuZGVmaW5lKFsnLi9zaGFyZWQuanMnXSwgZnVuY3Rpb24gKF9fc2hhcmVkX19qcykge1xuICAgIC8vICBDb2RlIGZvciB3b3JrZXIgc2NyaXB0IGFuZCBpdHMgdW5pcXVlIGRlcGVuZGVuY2llcy5cbiAgICAvLyAgRXhwZWN0cyB0aGUgb3V0cHV0IG9mICdzaGFyZWQnIG1vZHVsZSB0byBiZSBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQsXG4gICAgLy8gIHNpbmNlIGFsbCByZWZlcmVuY2VzIHRvIGNvbW1vbiBkZXBzIGxvb2sgbGlrZSwgZS5nLixcbiAgICAvLyAgX19zaGFyZWRfX2pzLnNoYXBlVGV4dCgpLlxufSk7XG4qL1xuLy8gV2hlbiB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIG91ciBjdXN0b20gZGVmaW5lKCkgYWJvdmUsXG4vLyBpdCBnZXRzIHN0cmluZ2lmaWVkLCB0b2dldGhlciB3aXRoIHRoZSBzaGFyZWQgd3JhcHBlciAodXNpbmdcbi8vIEZ1bmN0aW9uLnRvU3RyaW5nKCkpLCBhbmQgdGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgY29kZSBpcyBtYWRlIGludG8gYVxuLy8gQmxvYiBVUkwgdGhhdCBnZXRzIHVzZWQgYnkgdGhlIG1haW4gbW9kdWxlIHRvIGNyZWF0ZSB0aGUgd2ViIHdvcmtlcnMuXG5pbXBvcnQgJy4vYnVpbGQvbWFwYm94Z2wvd29ya2VyJztcblxuLy8gTWFpbiBtb2R1bGUgYW5kIGl0cyB1bmlxdWUgZGVwZW5kZW5jaWVzXG4vKlxuZGVmaW5lKFsnLi9zaGFyZWQuanMnXSwgZnVuY3Rpb24gKF9fc2hhcmVkX19qcykge1xuICAgIC8vICBDb2RlIGZvciBtYWluIEdMIEpTIG1vZHVsZSBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMuXG4gICAgLy8gIEV4cGVjdHMgdGhlIG91dHB1dCBvZiAnc2hhcmVkJyBtb2R1bGUgdG8gYmUgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LFxuICAgIC8vICBzaW5jZSBhbGwgcmVmZXJlbmNlcyB0byBjb21tb24gZGVwcyBsb29rIGxpa2UsIGUuZy4sXG4gICAgLy8gIF9fc2hhcmVkX19qcy5zaGFwZVRleHQoKS5cbiAgICAvL1xuICAgIC8vICBSZXR1cm5zIHRoZSBhY3R1YWwgbWFwYm94Z2wgKGkuZS4gc3JjL2luZGV4LmpzKVxufSk7XG4qL1xuaW1wb3J0ICcuL2J1aWxkL21hcGJveGdsL2luZGV4JztcblxuZXhwb3J0IGRlZmF1bHQgbWFwYm94Z2w7XG4iXSwibmFtZXMiOlsiYXJndW1lbnRzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJsZXQiLCJjb25zdCIsIlVuaXRCZXppZXIiLCJ3aW5kb3ciLCJleHBvcnRlZCIsImJyb3dzZXIiLCJ3ZWJwU3VwcG9ydGVkIiwic2RrVmVyc2lvbiIsInRoaXMiLCJzdXBlciIsImFzc2VydCIsImxpc3RlbmVyIiwicGFyc2VDU1NDb2xvciIsInRvU3RyaW5nIiwidHlwZSIsInR5cGVzIiwiYXJnIiwidmFsdWVUb1N0cmluZyIsImkiLCJleHBlY3RlZCIsInBhcnNlZCIsImVycm9yIiwiYXJyYXkiLCJpbnRlcnBvbGF0ZU51bWJlciIsIm91dHB1dEluZGV4IiwibHQiLCJydCIsInR5cGVUb1N0cmluZyIsImV4dGVuZCIsInN0b3AiLCJpbnRlcnBvbGF0aW9uVHlwZSIsImRlZmluaXRpb25zIiwiaXNDb25zdGFudC5pc1N0YXRlQ29uc3RhbnQiLCJpc0ZlYXR1cmVDb25zdGFudCIsImlzQ29uc3RhbnQuaXNGZWF0dXJlQ29uc3RhbnQiLCJpc0NvbnN0YW50LmlzR2xvYmFsUHJvcGVydHlDb25zdGFudCIsInZhbGlkYXRlU3BlYyIsImVsZW1lbnRTcGVjS2V5IiwibGF0ZXN0U3R5bGVTcGVjIiwidmFsaWRhdGVTb3VyY2UiLCJ2YWxpZGF0ZUxpZ2h0IiwidmFsaWRhdGVGaWx0ZXIiLCJ2YWxpZGF0ZVBhaW50UHJvcGVydHkiLCJ2YWxpZGF0ZUxheW91dFByb3BlcnR5IiwiR3JpZCIsIm5hbWUiLCJpc0NoYXIiLCJydGxUZXh0UGx1Z2luIiwicHJvcGVydHkiLCJzdHlsZVNwZWMiLCJQb2ludCIsImxheW91dCIsIlN0cnVjdEFycmF5TGF5b3V0IiwiUGF0dGVybkxheW91dEFycmF5IiwiQ2lyY2xlTGF5b3V0QXJyYXkiLCJUcmlhbmdsZUluZGV4QXJyYXkiLCJsYXlvdXRBdHRyaWJ1dGVzIiwiYnVja2V0RmVhdHVyZSIsImZlYXR1cmUiLCJpbmRleCIsImdlb21ldHJ5Iiwic291cmNlTGF5ZXJJbmRleCIsInBhaW50IiwiZ2xNYXRyaXguQVJSQVlfVFlQRSIsImNsb25lIiwiZXF1YWxzIiwiZ2xNYXRyaXguRVBTSUxPTiIsImNyZWF0ZSIsImNvcHkiLCJpZGVudGl0eSIsImZyb21WYWx1ZXMiLCJzZXQiLCJpbnZlcnQiLCJkZXRlcm1pbmFudCIsIm11bHRpcGx5Iiwicm90YXRlIiwic2NhbGUiLCJ0cmFuc2xhdGUiLCJmcm9tUm90YXRpb24iLCJmcm9tU2NhbGluZyIsInN0ciIsImZyb2IiLCJhZGQiLCJzdWJ0cmFjdCIsIm11bHRpcGx5U2NhbGFyIiwibXVsdGlwbHlTY2FsYXJBbmRBZGQiLCJleGFjdEVxdWFscyIsIm11bCIsInN1YiIsInRyYW5zcG9zZSIsImFkam9pbnQiLCJmcm9tVHJhbnNsYXRpb24iLCJmcm9tUXVhdCIsImJlemllciIsImdsTWF0cml4LlJBTkRPTSIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsImRpdmlkZSIsImNlaWwiLCJmbG9vciIsIm1pbiIsIm1heCIsInJvdW5kIiwic2NhbGVBbmRBZGQiLCJkaXN0YW5jZSIsInNxdWFyZWREaXN0YW5jZSIsImxlbmd0aCIsInNxdWFyZWRMZW5ndGgiLCJuZWdhdGUiLCJpbnZlcnNlIiwibm9ybWFsaXplIiwiZG90IiwiY3Jvc3MiLCJsZXJwIiwicmFuZG9tIiwidHJhbnNmb3JtTWF0NCIsInRyYW5zZm9ybVF1YXQiLCJ6ZXJvIiwiZGl2IiwiZGlzdCIsInNxckRpc3QiLCJsZW4iLCJzcXJMZW4iLCJmb3JFYWNoIiwidmVjNC5jbG9uZSIsInZlYzQuZnJvbVZhbHVlcyIsInZlYzQuY29weSIsInZlYzQuc2V0IiwidmVjNC5hZGQiLCJ2ZWM0LnNjYWxlIiwidmVjNC5kb3QiLCJ2ZWM0LmxlcnAiLCJ2ZWM0Lmxlbmd0aCIsInZlYzQuc3F1YXJlZExlbmd0aCIsInZlYzQubm9ybWFsaXplIiwidmVjNC5leGFjdEVxdWFscyIsInZlYzQuZXF1YWxzIiwidmVjMy5jcmVhdGUiLCJ2ZWMzLmZyb21WYWx1ZXMiLCJ2ZWMzLmRvdCIsInZlYzMuY3Jvc3MiLCJ2ZWMzLmxlbiIsInZlYzMubm9ybWFsaXplIiwibWF0My5jcmVhdGUiLCJmcm9tUm90YXRpb25UcmFuc2xhdGlvbiIsImZyb21NYXQ0IiwicXVhdC5jcmVhdGUiLCJtYXQ0LmdldFJvdGF0aW9uIiwibWF0NC5nZXRUcmFuc2xhdGlvbiIsInF1YXQuY29weSIsImdldFRyYW5zbGF0aW9uIiwicXVhdC5yb3RhdGVYIiwicXVhdC5yb3RhdGVZIiwicXVhdC5yb3RhdGVaIiwicXVhdC5kb3QiLCJjb25qdWdhdGUiLCJxdWF0Lmxlbmd0aCIsInF1YXQuc3F1YXJlZExlbmd0aCIsInRyYW5zZm9ybU1hdDMiLCJhbmdsZSIsInZlYzQudHJhbnNmb3JtTWF0NCIsInByb3BlcnRpZXMiLCJzd2FwIiwiRmlsbExheW91dEFycmF5IiwiTGluZUluZGV4QXJyYXkiLCJyaW5nIiwiZWFyY3V0IiwiY2xhc3NpZnlSaW5ncyIsInNpZ25lZEFyZWEiLCJWZWN0b3JUaWxlRmVhdHVyZSIsIlZlY3RvclRpbGVMYXllciIsInJlcXVpcmUkJDIiLCJtdnQiLCJFQVJDVVRfTUFYX1JJTkdTIiwiRmlsbEV4dHJ1c2lvbkxheW91dEFycmF5IiwicCIsInByb2plY3RRdWVyeUdlb21ldHJ5IiwidmVjdG9yVGlsZUZlYXR1cmVUeXBlcyIsIkxpbmVMYXlvdXRBcnJheSIsIm9mZnNldCIsImxpbmUiLCJ0YWdnZWRMaW5lIiwiYWxpZ24iLCJpbnRlcnBvbGF0ZSIsImFkZFZlcnRleCIsIlN5bWJvbExheW91dEFycmF5IiwiU3ltYm9sRHluYW1pY0xheW91dEFycmF5IiwiU3ltYm9sT3BhY2l0eUFycmF5IiwidXBsb2FkIiwiQ29sbGlzaW9uVmVydGV4QXJyYXkiLCJDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSIsIkNvbGxpc2lvbkNpcmNsZUxheW91dEFycmF5IiwidHJhbnNmb3JtVGV4dCIsInJlc29sdmVkVG9rZW5zIiwic3ltYm9sIiwiaW5kZXhBcnJheSIsImsiLCJib3giLCJjaXJjbGUiLCJoZWF0bWFwIiwiaGlsbHNoYWRlIiwiZmlsbCIsImZpbGxFeHRydXNpb24iLCJiYWNrZ3JvdW5kIiwicmFzdGVyIiwiaWQiLCJzcmMiLCJiaW4iLCJ3IiwiaCIsIkltYWdlRGF0YSIsIlByb3RvYnVmIiwiY2FsbGJhY2siLCJkZXNlcmlhbGl6ZSIsInByb3RvdHlwZUFjY2Vzc29ycyIsInNvdXJjZUxheWVyIiwibGF5ZXJTdGF0ZXMiLCJ2dCIsImZlYXR1cmVGaWx0ZXIiLCJHZW9KU09ORmVhdHVyZSIsImRlc2VyaWFsaXplQnVja2V0IiwiYnVja2V0IiwiUmFzdGVyQm91bmRzQXJyYXkiLCJkZWZhdWx0Q29tcGFyZSIsIlF1ZXVlIiwibXVybXVyMyIsIm11cm11cjIiLCJtaW5ab29tIiwibWF4Wm9vbSIsInNoYXBpbmciLCJhbmNob3IiLCJyZWZQcm9wZXJ0aWVzIiwiY3JlYXRlU3R5bGVMYXllciIsInZhbHVlcyIsImxheWVyQ29uZmlncyIsImxheWVyIiwicG90cGFjayIsIkFscGhhSW1hZ2UiLCJzdGFjayIsImdseXBocyIsInJlZ2lzdGVyIiwiT3ZlcnNjYWxlZFRpbGVJRCIsIkNvbGxpc2lvbkJveEFycmF5IiwiRGljdGlvbmFyeUNvZGVyIiwiRmVhdHVyZUluZGV4Iiwid2Fybk9uY2UiLCJtYXBPYmplY3QiLCJJbWFnZUF0bGFzIiwiU3ltYm9sQnVja2V0IiwicGVyZm9ybVN5bWJvbExheW91dCIsIkxpbmVCdWNrZXQiLCJGaWxsQnVja2V0IiwiRmlsbEV4dHJ1c2lvbkJ1Y2tldCIsIkV2YWx1YXRpb25QYXJhbWV0ZXJzIiwiZ2V0QXJyYXlCdWZmZXIiLCJwZXJmb3JtYW5jZSIsIkRFTURhdGEiLCJFWFRFTlQiLCJwb2ludCIsImllZWU3NTQiLCJHZW9KU09OV3JhcHBlciIsIkZlYXR1cmVXcmFwcGVyIiwiUGJmIiwic29ydCIsInJld2luZCIsInRyYW5zZm9ybSIsInZ0cGJmIiwiZ2V0SlNPTiIsImNyZWF0ZUV4cHJlc3Npb24iLCJBY3RvciIsImdsb2JhbFJUTFRleHRQbHVnaW4iLCJlbmZvcmNlQ2FjaGVTaXplTGltaXQiLCJzZWxmIiwib3B0aW9ucyIsIlJlc291cmNlVHlwZSIsImdldEltYWdlIiwiUkdCQUltYWdlIiwiRXZlbnQiLCJJbWFnZVBvc2l0aW9uIiwiVGV4dHVyZSIsIkV2ZW50ZWQiLCJwYXJzZUdseXBoUEJGIiwiYXN5bmNBbGwiLCJUaW55U0RGIiwic3BoZXJpY2FsVG9DYXJ0ZXNpYW4iLCJQcm9wZXJ0aWVzIiwiRGF0YUNvbnN0YW50UHJvcGVydHkiLCJUcmFuc2l0aW9uYWJsZSIsImVuZHNXaXRoIiwiZW1pdFZhbGlkYXRpb25FcnJvcnMiLCJ2YWxpZGF0ZVN0eWxlIiwidW5pcXVlSWQiLCJwaWNrIiwiTG5nTGF0Qm91bmRzIiwibWVyY2F0b3JYZnJvbUxuZyIsIm1lcmNhdG9yWWZyb21MYXQiLCJFcnJvckV2ZW50IiwicG9zdFR1cm5zdGlsZUV2ZW50IiwicG9zdE1hcExvYWRFdmVudCIsImNhY2hlRW50cnlQb3NzaWJseUFkZGVkIiwiTWVyY2F0b3JDb29yZGluYXRlIiwicmFzdGVyQm91bmRzQXR0cmlidXRlcyIsIlNlZ21lbnRWZWN0b3IiLCJDYW5vbmljYWxUaWxlSUQiLCJnZXRWaWRlbyIsIlZhbGlkYXRpb25FcnJvciIsInZlY3RvciIsInJhc3RlckRlbSIsImdlb2pzb24iLCJ2aWRlbyIsImltYWdlIiwiY2FudmFzIiwiYmluZEFsbCIsIm1hdDQuaWRlbnRpdHkiLCJtYXQ0LnRyYW5zbGF0ZSIsIm1hdDQuc2NhbGUiLCJtYXQ0Lm11bHRpcGx5IiwiQ29sb3IiLCJBTFdBWVMiLCJkZWVwRXF1YWwiLCJjcmVhdGVTb3VyY2UiLCJTb3VyY2VGZWF0dXJlU3RhdGUiLCJ0aWxlIiwia2V5c0RpZmZlcmVuY2UiLCJ0aWxlSUQiLCJUaWxlIiwibWFwYm94Z2wiLCJpc0VxdWFsIiwibWF0NC5jcmVhdGUiLCJtYXQ0LnJvdGF0ZVoiLCJtYXQ0LmNsb25lIiwic3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3Jab29tIiwiV3JpdGluZ01vZGUiLCJzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUiLCJvcmllbnRhdGlvbkNoYW5nZSIsImFkZER5bmFtaWNBdHRyaWJ1dGVzIiwicHJvamVjdGlvbi5wcm9qZWN0IiwicHJvamVjdGlvbi5wbGFjZUZpcnN0QW5kTGFzdEdseXBoIiwiaW50ZXJzZWN0aW9uVGVzdHMucG9seWdvbkludGVyc2VjdHNQb2x5Z29uIiwicHJvamVjdGlvbi54eVRyYW5zZm9ybU1hdDQiLCJnZXRBbmNob3JBbGlnbm1lbnQiLCJldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0IiwicHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4IiwicGxhY2VIb3Jpem9udGFsIiwicGxhY2VWZXJ0aWNhbCIsImdldEFuY2hvckp1c3RpZmljYXRpb24iLCJjcm9zc1RpbGVJRCIsInByZXZPcGFjaXR5IiwicGFja2VkT3BhY2l0eSIsImhvcml6b250YWxPcGFjaXR5IiwidmVydGljYWxPcGFjaXR5IiwicyIsInN5bWJvbEluc3RhbmNlIiwiX2VtaXRWYWxpZGF0aW9uRXJyb3JzIiwiZGlmZk9wZXJhdGlvbnMiLCJnZXRXb3JrZXJQb29sIiwiWm9vbUhpc3RvcnkiLCJnZXRSZWZlcnJlciIsImlzTWFwYm94VVJMIiwiZGVyZWYiLCJ2YWxpZGF0ZUN1c3RvbVN0eWxlTGF5ZXIiLCJmaWx0ZXJPYmplY3QiLCJsIiwibGF5ZXJJZCIsInNvdXJjZVJlc3VsdCIsImxheWVyRmVhdHVyZXMiLCJmZWF0dXJlV3JhcHBlciIsInJ0bFRleHRQbHVnaW5FdmVudGVkIiwibGF5ZXJJRCIsInN0eWxlTGF5ZXIiLCJtYWtlUmVxdWVzdCIsImdldFNvdXJjZVR5cGUiLCJzZXRTb3VyY2VUeXBlIiwicmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHkiLCJjcmVhdGVMYXlvdXQiLCJ2ZXJ0ZXhCdWZmZXIiLCJQcm9ncmFtIiwiVW5pZm9ybU1hdHJpeDRmIiwiVW5pZm9ybTNmIiwiVW5pZm9ybTFmIiwiVW5pZm9ybTFpIiwiVW5pZm9ybTJmIiwiVW5pZm9ybTRmIiwibWF0My5mcm9tUm90YXRpb24iLCJ2ZWMzLnRyYW5zZm9ybU1hdDMiLCJVbmlmb3JtQ29sb3IiLCJtYXQ0Lm9ydGhvIiwic3ltYm9sUHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4Iiwic3ltYm9sU2l6ZSIsInN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyIsInN5bWJvbFByb2plY3Rpb24ucHJvamVjdCIsIk9ORV9FTSIsInNoaWZ0IiwiZyIsInN5bWJvbFByb2plY3Rpb24uZ2V0R2xDb29yZE1hdHJpeCIsInN5bWJvbFByb2plY3Rpb24udXBkYXRlTGluZUxhYmVscyIsInN0YXRlIiwidW5pZm9ybVZhbHVlcyIsInByb2dyYW0iLCJsYXlvdXRWZXJ0ZXhCdWZmZXIiLCJpbmRleEJ1ZmZlciIsInByb2dyYW1Db25maWd1cmF0aW9uIiwiZGVwdGhNb2RlIiwiY2xhbXAiLCJQb3NBcnJheSIsImRyYXciLCJkZWJ1ZyIsImN1c3RvbSIsIlByb2dyYW1Db25maWd1cmF0aW9uIiwiTGluZVN0cmlwSW5kZXhBcnJheSIsInNvdXJjZUNhY2hlIiwiY29vcmRzIiwiTG5nTGF0Iiwid3JhcCIsIm1hdDIuY3JlYXRlIiwibWF0Mi5yb3RhdGUiLCJVbndyYXBwZWRUaWxlSUQiLCJtYXQ0LnBlcnNwZWN0aXZlIiwibWF0NC5yb3RhdGVYIiwibWVyY2F0b3JaZnJvbUFsdGl0dWRlIiwibWF0NC5pbnZlcnQiLCJfZWFzZSIsImluZXJ0aWFMaW5lYXJpdHkiLCJpbmVydGlhRWFzaW5nIiwiaW5lcnRpYU1heFNwZWVkIiwiaW5lcnRpYURlY2VsZXJhdGlvbiIsInNjcm9sbFpvb20iLCJib3hab29tIiwiZHJhZ1JvdGF0ZSIsImRyYWdQYW4iLCJrZXlib2FyZCIsImRvdWJsZUNsaWNrWm9vbSIsInRvdWNoWm9vbVJvdGF0ZSIsImRlZmF1bHRFYXNpbmciLCJjb25maWciLCJSZXF1ZXN0TWFuYWdlciIsIm1vdXNlaW4iLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIndpZHRoIiwiaGVpZ2h0IiwiZGF0YSIsImlzU3VwcG9ydGVkIiwic2V0Q2FjaGVMaW1pdHMiLCJ2ZXJzaW9uIiwiZGVmYXVsdE9wdGlvbnMiLCJzdXBwb3J0ZWQiLCJzZXRSVExUZXh0UGx1Z2luIiwiZ2V0UlRMVGV4dFBsdWdpblN0YXR1cyIsImNsZWFyVGlsZUNhY2hlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxZQUFZLENBQUM7O0FBRWIsSUFBSSxxQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7QUFDekQsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDckQsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDOztBQUU3RCxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Q0FDdEIsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7RUFDdEMsTUFBTSxJQUFJLFNBQVMsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0VBQzdFOztDQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ25COztBQUVELFNBQVMsZUFBZSxHQUFHO0NBQzFCLElBQUk7RUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtHQUNuQixPQUFPLEtBQUssQ0FBQztHQUNiOzs7OztFQUtELElBQUksS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzlCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDaEIsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0dBQ2pELE9BQU8sS0FB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QUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzttQkFDN0IsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDOzs7Ozs7OztHQVF2RCxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUNsRCxPQUFPLEtBQUssQ0FBQztHQUNkLE1BQU07SUFDTCxLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7O0lBRTVDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO01BQ3RCLElBQUksV0FBVyxLQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3BELE9BQU8sSUFBSSxDQUFDO09BQ2I7S0FDRjs7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7SUFFOUIsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7R0FDbEQ7Q0FDRjs7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUU7RUFDM0IsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksb0JBQW9CLENBQUM7Q0FDdkU7O0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUU7RUFDcEQsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxD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QUFDO0lBQ3BCLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7SUFFbEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDbEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEVBQUU7O0lBRTVDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3RELENBQUM7O0FBRUYsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDNUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDdEQsQ0FBQzs7QUFFRixVQUFVLENBQUMsU0FBUyxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RELE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Q0FDNUQsQ0FBQzs7QUFFRixVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUU7SUFD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Ozs7Ozs7OztJQVFwRSxVQUFVLE1BQU0sU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7Ozs7SUFRbkUsSUFBSSxLQUFLLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXRELEdBQUcsTUFBTSxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7Ozs7OztJQVFyRCxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7Ozs7O0lBU3hELFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7SUFPeEUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7OztJQVN6RCxJQUFJLEtBQUssV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXBELElBQUksS0FBSyxXQUFXLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTs7Ozs7OztJQU9wRCxLQUFLLElBQUksV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXJELEdBQUcsRUFBRSxXQUFXO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN2RDs7Ozs7Ozs7SUFRRCxNQUFNLEVBQUUsU0FBUyxLQUFLLEVBQUU7UUFDcEIsT0FBTyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO2VBQ2xCLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztLQUM3Qjs7Ozs7OztJQU9ELElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckM7Ozs7Ozs7OztJQVNELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7S0FDNUI7Ozs7Ozs7SUFPRCxLQUFLLEVBQUUsV0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQzs7Ozs7OztJQU9ELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pEOzs7Ozs7O0lBT0QsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0Qzs7Ozs7Ozs7O0lBU0QsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLO1lBQ2IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDaEM7O0lBRUQsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNqQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7O0lBRUQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUM7S0FDZjs7SUFFRCxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNkLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELEtBQUssRUFBRSxXQUFXO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELEtBQUssRUFBRSxXQUFXO1FBQ2QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ1osT0FBTyxJQUFJLENBQUM7S0FDZjs7SUFFRCxPQUFPLEVBQUUsU0FBUyxLQUFLLEVBQUU7UUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNyRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDakQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDcEQsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDOUQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9DLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNsRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUQsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3JELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRCxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzlELGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM3RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDN0QsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN4RCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDeEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFELGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0QsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ2xELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzdELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDckUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRCxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDL0QsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbEUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNwRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkQsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM5RCxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDL0QsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNwRSxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3JFLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2hFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0QsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9DLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNuRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM5RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDL0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3BELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNoRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNoRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDekQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDckQsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ25ELE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNqRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDcEQs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Q0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDM0MsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUN4QyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3hDLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDM0MsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTs7QUFFM0MsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNsRSxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDdEUsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNoRSxTQUFTLFNBQVMs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VUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVTtRQUNsT0EsSUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQkEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQkEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7OztFQTNDa0QsY0E0Q3REOztBQUVELHdDQUF3QyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQ3hFLFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFDOzs7Ozs7Ozs7OztBQVcvRixJQUFNLDhCQUE4Qjs7Ozs7Ozs7OzZDQU9oQywwQ0FBZ0I7UUFDWixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUNyRDs7NkNBRUQsb0NBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVTtRQUNoVkEsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNsSjs7NkNBRUQsNEJBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVU7UUFDdlZBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEJBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FB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QyxHQUFFO0lBQzdGLHFCQUFJLGlEQUFpQyxFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFFO0lBQ3hGLHFCQUFJLCtDQUErQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFO0lBQzlGLHFCQUFJLCtDQUErQixFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFFO0lBQ3RGLHFCQUFJLDZDQUE2QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFO0lBQzVGLHFCQUFJLGdEQUFnQyxFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFFO0lBQ3ZGLHFCQUFJLDhDQUE4QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFO0lBQzdGLHFCQUFJLHdDQUF3QixFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFFO0lBQy9FLHFCQUFJLHNDQUFzQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFO0lBQ3JGLHFCQUFJLGdEQUFnQyxFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFFO0lBQ3ZGLHFCQUFJLDhDQUE4QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFO0lBQzdGLHFCQUFJLHNCQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUU7SUFDOUQscUJBQUksb0JBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUNwRSxxQkFBSSxvQ0FBb0IsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRTtJQUM1RSxxQkFBSSxrQ0FBa0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUNsRixxQkFBSSxrQ0FBa0IsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRTtJQUMzRSxxQkFBSSxnQ0FBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUNqRixxQkFBSSw0Q0FBNEIsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRTtJQUNyRixxQkFBSSwwQ0FBMEIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUMzRixxQkFBSSwwQ0FBMEIsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRTtJQUNuRixxQkFBSSx3Q0FBd0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUN6RixxQkFBSSxvQ0FBb0IsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRTtJQUM3RSxxQkFBSSxrQ0FBa0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUNuRixxQkFBSSxrQ0FBa0IsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRTtJQUMzRSxxQkFBSSxnQ0FBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUNqRixxQkFBSSw0Q0FBNEIsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRTtJQUNyRixxQkFBSSwwQ0FBMEIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxD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QUssQ0FBQyxDQUFDLENBQUM7SUFDdkNELElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7SUFDakJBLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7O0lBRWxCLE9BQU8sSUFBSSxFQUFFO1FBQ1QsS0FBRyxDQUFDLEVBQUUsR0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7UUFDL0IsS0FBRyxDQUFDLEVBQUUsR0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFFLFFBQU07UUFDbEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3pDOztJQUVELElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQ3RDOztBQUVELFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JCQyxJQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixH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ZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFO0VBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDN0MsSUFBSSxHQUFHLEdBQUcsSUFBSUEsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7O0FBWU0sU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTs7O0VBR2hDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtJQUNiLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0dBQ2IsTUFBTTtJQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7R0FDZjs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFZCxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0VBRTVCLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDUixPQUFPLElBQUksQ0FBQztHQUNiOztFQUVELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFOztFQUU5QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBUyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQzdCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xDOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMvQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcs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LENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlDLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJ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QUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDL0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFdBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNuQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMs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QUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMxRDs7Ozs7Ozs7OztBQVVELFNBQWdCQyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxnQkFBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0JDLHNCQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtFQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzNHOzs7Ozs7Ozs7QUFTTSxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxF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QUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNLLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMs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QUMsRUFBRTtJQUNiLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7R0FDZCxNQUFNO0lBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENB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QUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTakIsYUFBVyxDQUFDLENBQUMsRUFBRTtFQUM3QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixPQUFPLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDdkc7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkcsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ25DLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDakMsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCRixRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7RUFDbEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7TUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjtBQUNELENBQUM7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVNlLGlCQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU2IsY0FBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDckMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7TUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU0MsYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBUyxTQUFTLENBQUMs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QUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztFQUVoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7RUFFaEYsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNSLE9BQU8sSUFBSSxDQUFDO0dBQ2I7O0VBRUQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtFQUM3QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU0MsS0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUM3STs7Ozs7Ozs7QUFRTSxTQUFTQyxNQUFJLENBQUMsQ0FBQyxFQUFFO0VBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3pFOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLGdCQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQkMsc0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLGFBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUo7Ozs7Ozs7OztBQVNNLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlDLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FB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Q0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNLLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCTSxTQUFTRSxZQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3pHLElBQUksR0FBRyxHQUFHLElBQUlQLFVBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCTSxTQUFTUSxLQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTRixVQUFRLENBQUMsR0FBRyxFQUFFO0VBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTb0IsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0VBRWhDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtJQUNiLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0dBQ2YsTUFBTTtJQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDakI7O0VBRUQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU2pCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0VBRWhDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztFQUVoRixJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ1IsT0FBTyxJQUFJLENBQUM7R0FDYjs7RUFFRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDcEQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU2tCLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzlCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDMUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDMUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDMUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3hHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDeEcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDeEcsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTakIsYUFBVyxDQUFDLENBQUMsRUFBRTtFQUM3QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztFQUVoQyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQzlFOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztFQUVoQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1gsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ3BELEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1gsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNYLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNwRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JHLFdBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDdkIsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDdkIsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7O0VBRXZCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDbkQsTUFBTTtJQUNMLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1osR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDL0M7O0VBRUQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCRCxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FB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QyxDQUFDLENBQUM7RUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1osR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7RUFFWixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7RUFFcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FB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Q0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUNqQjs7O0VBR0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FB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LENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU1osYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7O0FBY0QsU0FBZ0JELGNBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtFQUMzQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ1gsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDWCxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztFQUVaLElBQUksR0FBRyxHQUFHWixPQUFnQixFQUFFO0lBQzFCLE9BQU8sSUFBSSxDQUFDO0dBQ2I7O0VBRUQsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxDQUFDLElBQUksR0FBRyxDQUFDO0VBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNULENBQUMsSUFBSSxHQUFHLENBQUM7RUFDVCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7RUFFVixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDdEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUV0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUN0QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0VBRXRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFD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QW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztFQUV0RCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7SUFDakIsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3pFLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUN6RSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7R0FDMUUsTUFBTTtJQUNMLFdBQVcsQ0FBQyxDQUFD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QUFDO0VBQ3hCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDeEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN4QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3hCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDeEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN4QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3hCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDeEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN6QixJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztFQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0VBRVYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0lBQ2IsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztHQUM1QixNQUFNLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO0lBQ3JDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztHQUM1QixNQUFNLElBQUksSUFBSSxHQUFHLElBQUksRUFBRTtJQUN0QixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7R0FDNUIsTUFBTTtJQUNMLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztHQUNuQjs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJELFNBQWdCLDRCQUE0QixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7RUFFekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUMvQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQk0sU0FBUyxrQ0FBa0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztFQUVsRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ2hDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUMxQixJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQzFCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDaEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUMxQixJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQzFCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDMUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztFQUMxRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzFELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFB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QUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDN0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7RUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtFQUN4RCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO01BQzVCLEVBQUUsQ0FBQztFQUNQLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7RUFFWixJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRTtJQUNuQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN0QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM1QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcs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RSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0VBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7QUFZRCxTQUFnQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFF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QUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7R0FDUixNQUFNO0lBQ0wsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZCxFQUFFLElBQUksR0FBRyxDQUFDO0lBQ1YsRUFBRSxJQUFJLEdBQUcsQ0FBQztJQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7R0FDWDs7RUFFRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFB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QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNuSDs7Ozs7Ozs7OztBQVVELFNBQWdCQyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxnQkFBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0JDLHNCQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtFQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDaEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsYUFBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ2pTOzs7Ozs7Ozs7QUFTTSxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlDLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxD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QUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQlQsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFB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LENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoRDs7Ozs7Ozs7OztBQVVELFNBQWdCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMvQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENB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RSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEQsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN2RCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsYUFB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QUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRW5CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUUvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDcEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtNQUNOLENBQUMsR0FBRyxFQUFFLENBQUM7O0VBRVgsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRW5CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUUvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDcEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtNQUNOLENBQUMsR0FBRyxFQUFFLENBQUM7O0VBRVgsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRW5CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FB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LENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7QUFZTSxTQUFTRyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCVyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCVCxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCd0IsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCM0IsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxD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QUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RDOzs7Ozs7Ozs7QUFTTSxTQUFTQyxRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUV4QyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7SUFDWCxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDMUI7O0VBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsS0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlEOzs7Ozs7Ozs7OztBQVdELFNBQWdCQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQyxPQUFPLEdBQUcsQ0FBQztDQUNaO0FBQ0QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQkMsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsUUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7RUFDakMsS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLENBQUM7Ozs7RUFJckIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDbkIsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDOztFQUVYLEdBQUc7SUFDRCxFQUFFLEdBQUdyQixNQUFlLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLEVBQUUsR0FBR0EsTUFBZSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0dBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTs7RUFFbEIsR0FBRztJQUNELEVBQUUsR0FBR0EsTUFBZSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixFQUFFLEdBQUdBLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztHQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7O0VBRWxCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDeEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCc0IsZUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsZUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRWQsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7RUFFbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU0MsTUFBSSxDQUFDLEdBQUcsRUFBRTtFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTdEMsS0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3ZFOzs7Ozs7Ozs7QUFTTSxTQUFTTSxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekU7Ozs7Ozs7OztBQVNNLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FB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QztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCcUIsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNsQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNsQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNsQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV00sU0FBUyxVQUFV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QyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN2RCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDWHJCLE9BQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ25CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7OztFQUdsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7O0VBRXhDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztFQUU5QyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7SUFDZixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDZixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDVCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDVCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDVCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7R0FDVjs7O0VBR0QsSUFBSSxHQUFHLEdBQUcsS0FBSyxHQUFHVixPQUFnQixFQUFFOztJQUVsQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzdDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7R0FDdEMsTUFBTTs7O0lBR0wsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakIsTUFBTSxHQUFHLENBQUMsQ0FBQztHQUNaOzs7RUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0VBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7RUFDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0VBQ25DLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU2lELFFBQU0sQ0FBQyxHQUFHLEVBQUU7OztFQUcxQixJQUFJLEVBQUUsR0FBR3JCLE1BQWUsRUFBRSxDQUFDO0VBQzNCLElBQUksRUFBRSxHQUFHQSxNQUFlLEVBQUUsQ0FBQztFQUMzQixJQUFJLEVBQUUsR0FBR0EsTUFBZSxFQUFFLENBQUM7RUFDM0IsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDckMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU3RCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEQsSUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztFQUVqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0VBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7RUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVU0sU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7OztFQUcvQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQyxJQUFJLEtBQUssQ0FBQzs7RUFFVixJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUU7O0lBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQzs7SUFFaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7O0lBRXBCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0dBQ2hDLE1BQU07O0lBRUwsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBRyxDQUFDLEdBQUM7SUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFHLENBQUMsR0FBQztJQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxD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QUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxFQUFFLENBQUM7Q0FDWDs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTSxTQUFTTyxZQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUN6RCxJQUFJLEVBQUUsR0FBRyxJQUFJUCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsT0FBTyxFQUFFLENBQUM7Q0FDWDs7Ozs7Ozs7Ozs7Ozs7O0FBZU0sU0FBUyw2QkFBNkIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7RUFDeEUsSUFBSSxFQUFFLEdBQUcsSUFBSUEsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUc7TUFDYixFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUc7TUFDYixFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNsQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQyxPQUFPLEVBQUUsQ0FBQztDQUNYOzs7Ozs7Ozs7OztBQVdELFNBQWdCa0YseUJBQXVCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDakQsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVTSxTQUFTdEQsaUJBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVNLFNBQVNiLGNBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVNLFNBQVNv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Q0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVNLElBQUksT0FBTyxHQUFHQSxNQUFTLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxnQkFBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFH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QyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDM0MsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoRHlELFNBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0J4RCxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7RUFDbkMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDM0MsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaER5RCxTQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUMxQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCeEQsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDM0MsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hEeUQsU0FBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDMUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM1QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7O0VBRWxELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBR3hGLE9BQWdCLEVBQUU7SUFDcEMsT0FBT0UsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztHQUNyQjs7RUFFRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0JjLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JSLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3ZHLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7OztBQU1NLElBQUlhLEtBQUcsR0FBR2IsVUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVcxQixTQUFnQkUsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FB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QUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxJQUFJLFNBQVMsQ0FBQztJQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxTQUFTLENBQUM7SUFDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0dBQzFDOztFQUVELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBUzVCLEtBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDckIsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ2hJOzs7Ozs7Ozs7QUFTTSxTQUFTTSxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3STs7Ozs7Ozs7O0FBU00sU0FBU3JCLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVB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R0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQlQsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQndCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FB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LEtBQUs7UUFDbkMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDdkMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0tBQzFFOztJQUVELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNO1FBQzNCLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztRQUNuQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUN2QyxNQUFNLElBQUksVUFBVSxDQUFDLHFEQUFxRCxDQUFDLENBQUM7S0FDL0U7O0lBRURBLElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDNUJBLElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7O0lBRTVCUyxRQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDOztJQUU1QixLQUFLVixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbENDLElBQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDO1FBQ3RFQSxJQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQztRQUN0RSxLQUFLRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMs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QUUsU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FBQzs7O0lBRzVFLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUV0QixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDdEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFDO1NBQzFCOzs7UUFHRCxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM3QyxPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUM3Qzs7SUFFRCxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs7SUFFN0QsT0FBTyxTQUFTLENBQUM7Q0FDcEI7OztBQUdELFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFL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Q0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUcxRSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJ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T0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoRTs7O0FBR0QsU0FBU0EsUUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDcEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3pDOzs7QUFHRCxTQUFTLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDaEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0lBRWhDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFFLE9BQU8sSUFBSSxHQUFDOztJQUV4QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUUsT0FBTyxJQUFJLEdBQUM7SUFDbkQsSUFBSSxFQUFFLEtBQUssQ0FB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QUksQ0FBQztRQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLEdBQUc7UUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDL0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ2pFLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBQztRQUNyQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztLQUNkLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTs7SUFFbEIsT0FBTyxNQUFNLENBQUM7Q0FDakI7Ozs7QUFJRCxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3hCLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUk7UUFDWCxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7SUFFaEIsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMs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LENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzFCQSxJQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzFCQSxJQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzNCQSxJQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDOztJQUUzQixLQUFLLHNCQUFXLHVDQUFRLEVBQUU7UUFBckJBLElBQU07O1FBQ1BBLElBQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQkEsSUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLEtBQUssa0JBQVcsMEJBQUMsRUFBRTtZQUFkQSxJQUFNOztZQUNQQSxJQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2RBLElBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRWRBLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkNBLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkNBLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkNBLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lB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YyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxPQUFPLENBQUMsQ0FBQztLQUNaOztJQUVELFNBQVMsYUFBYSxDQUFDLE9BQU8sVUFBVSxRQUFRLFVBQVUsSUFBSSxFQUFFO1FBQzVEQSxJQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzs7UUFFdkIsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7O0lBRUQsU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7UUFDakNBLElBQU0sS0FBSyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsUUFBVSxJQUFJLFVBQUksS0FBSyxDQUFDLEVBQUMsVUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHO0tBQzFDOztJQUVELEtBQUtELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxD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R0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1Is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SSxFQUFDO0VBQy9CLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFDO0VBQ3JCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDOztFQUUxQixDQUFDLElBQUksRUFBQzs7RUFFTixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDO0VBQzdCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBQztFQUNkLEtBQUssSUFBSSxLQUFJO0VBQ2IsT0FBTyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTs7RUFFNUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQztFQUM3QixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUM7RUFDZCxLQUFLLElBQUksS0FBSTtFQUNiLE9BQU8sS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUU7O0VBRTVFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUNYLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBSztHQUNkLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0lBQ3JCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDO0dBQzNDLE1BQU07SUFDTCxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBQztJQUN6QixDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQUs7R0FDZDtFQUNELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2hEOztBQUVELFNBQWEsR0FBRyxVQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0VBQ25FLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFDO0VBQ1gsSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFDO0VBQ2xDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFDO0VBQzFCLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxFQUFDO0VBQ3JCLElBQUksRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQztFQUNoRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUM7RUFDL0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUM7RUFDckIsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7O0VBRTNELEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQzs7RUFFdkIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtJQUN0QyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0lBQ3hCLENBQUMsR0FBRyxLQUFJO0dBQ1QsTUFBTTtJQUNMLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBQztJQUMxQyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUNyQyxDQUFDLEdBQUU7TUFDSCxDQUFDLElBQUksRUFBQztLQUNQO0lBQ0QsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsRUFBRTtNQUNsQixLQUFLLElBQUksRUFBRSxHQUFHLEVBQUM7S0FDaEIsTUFBTTtNQUNMLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBQztLQUNyQztJQUNELElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFDbEIsQ0FBQyxHQUFFO01BQ0gsQ0FBQyxJQUFJLEVBQUM7S0FDUDs7SUFFRCxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxFQUFFO01BQ3JCLENBQUMsR0FBRyxFQUFDO01BQ0wsQ0FBQyxHQUFHLEtBQUk7S0FDVCxNQUFNLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEVBQUU7TUFDekIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUM7TUFDekMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFLO0tBQ2QsTUFBTTtNQUNMLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFH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LE9BQU8sR0FBRyxDQUFDO0tBQ2Q7O0lBRUQsU0FBUyxFQUFFLFdBQVc7UUFDbEIsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNkLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7O0lBRUQsVUFBVSxFQUFFLFdBQVc7UUFDbkIsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNkLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7O0lBRUQsVUFBVSxFQUFFLFNBQVMsUUFBUSxFQUFFO1FBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHO1lBQ2QsR0FBRyxFQUFFLENBQUMsQ0FBQzs7UUFFWCxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxHQUFHLEdBQUM7UUFDdkUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFFLE9BQU8sR0FBRyxHQUFDO1FBQ3ZFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FB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QUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzNCO0lBQ0QsaUJBQWlCLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzFCO0lBQ0Qsa0JBQWtCLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzNCO0lBQ0QsaUJBQWlCLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzFCO0lBQ0Qsa0JBQWtCLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzNCO0lBQ0QsZ0JBQWdCLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3pCO0lBQ0QsaUJBQWlCLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzFCO0lBQ0QsZ0JBQWdCLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3pCO0lBQ0QsZUFBZSxFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN4QjtJQUNELGdCQUFnQixFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QjtJQUNELGlCQUFpQixFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzVDO0NBQ0osQ0FBQzs7QUFFRixTQUFTLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHO1FBQ1gsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFVCxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQztJQUM3RSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQztJQUM3RSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQztJQUM3RSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQztJQUM3RSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQztJQUM3RSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxL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RCxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQzs7SUFFN0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztJQUNsRixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztJQUNsRixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztJQUNsRixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztJQUNsRixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztJQUNsRixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDckM7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxJQUFJLFFBQVE7UUFDUixHQUFHLElBQUksTUFBTSxHQUFHLENBQUM7UUFDakIsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDO1FBQ25CLEdBQUcsSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUd0RSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDO0NBQ3BGOztBQUVELFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSTtBQUMxRyxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUc7QUFDMUcsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxLQUFLO0FBQzFHLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSTtBQUMxRyxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUc7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRTtBQUMxRyxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUc7QUFDMUcsU0FBUyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFOzs7O0FBSTFHLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDMUIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUNaLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ25CLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7Q0FDbEM7O0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDL0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNmLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQy9COztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQUcs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QUFDLENBQUMsQ0FBQyxDQUFDOztRQUVoRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXpELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25FOztJQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElB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YUFDckYsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixFQUFFLEdBQUcsSUFBSUEsYUFBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3JGOztZQUVELElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3hCLFNBQVM7YUFDWixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2xCLEVBQUUsR0FBRyxJQUFJQSxhQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDckYsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixFQUFFLEdBQUcsSUFBSUEsYUFBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3JGOztZQUVELElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzFCLFNBQVM7YUFDWixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25CLEVBQUUsR0FBRyxJQUFJQSxhQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDckYsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNuQixFQUFFLEdBQUcsSUFBSUEsYUFBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3JGOztZQUVELElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzFCLFNBQVM7YUFDWixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25CLEVBQUUsR0FBRyxJQUFJQSxhQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENB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QyxDQUFDO0lBQ2xDLEtBQUtELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2Q0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUM7UUFDakMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQztRQUNqQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFDO1FBQ2pDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUM7S0FDcEM7O0lBRURBLElBQU0sS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUJBLElBQU0sTUFBTSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7SUFDM0JBLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDRCxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDOzs7SUFHckJDLElBQU0sU0FBUyxHQUFHLElBQUlnTyxTQUFLLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDOztJQUU1QyxJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUUsT0FBTyxJQUFJL0ssYUFBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBQzs7O0lBR2pELEtBQUtsRCxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksUUFBUSxF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RSxFQUFFLEtBQUssR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQzs7RUFFekMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUM7RUFDakYsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7RUFDOUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUM7RUFDakYsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNUOztDQUVELEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDOztDQUVqQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQztDQUNqRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUNoQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxLQUFLLFVBQVUsQ0FBQztDQUNuRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzs7Q0FFaEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFD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QyxDQUFDLEdBQUM7SUFDN0UsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUM7SUFDN0UsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUM7SUFDN0UsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUM7SUFDN0UsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUM7O0lBRTdFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztDQUM3RDs7QUFFRCxTQUFTLGFBQWEsQ0FBQyxHQUFHLEVBQUU7SUFDeEIsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLO1FBQ3pCLEdBQUcsQ0FBQyxV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QUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87SUFDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87SUFDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87SUFDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87SUFDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87SUFDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3JDOztBQUVELFNBQVMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDaEQsSUFBSSxRQUFRO1FBQ1IsR0FBRyxJQUFJLE1BQU0sR0FBRyxDQUFDO1FBQ2pCLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQztRQUNuQixHQUFHLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7SUFHdEUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQztDQUNwRjs7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUk7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsS0FBSztBQUMxRyxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUk7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRztBQUMxRyxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUU7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdB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QUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFOztJQUU5QyxPQUFPLEtBQUssR0FBRyxJQUFJLEVBQUU7UUFDakIsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRTtZQUNwQkEsSUFBTSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDM0JBLElBQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCQSxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCQSxJQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BDQSxJQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0VBLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0RBLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFD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QyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwREEsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25GLElBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFcEQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRTtRQUMxQixNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDbEIsTUFBVSxHQUFHLEdBQUcsQ0FBQztLQUNoQixNQUFNLElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRTtRQUM1QixJQUFVLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0UsSUFBVSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUUsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3hDOztJQUVEQyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvQ0EsSUFBTSxHQUFHLEdB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LENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUMsQ0FBQyxLQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFcEUsR0FBQyxFQUFFLE1BQU0sRUFBRUMsR0FBQyxDQUFDLENBQUMsQ0FBQzs7O1lBR3RFbUUsdUJBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFbkUsR0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUVELEdBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRm9FLHVCQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHbkUsR0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUVELEdBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRm9FLHVCQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUVwRSxHQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUVDLEdBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakZtRSx1QkFBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHcEUsR0FBQyxLQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUVDLEdBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEY7O1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDckI7OzJCQUVELG9DQUFhO1FBQ1QsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztNQUN6Qzs7MkJBRUQsNERBQXdCLEdBQUcsaUJBQWlCO1FBQ3hDLEtBQUssa0JBQVksNEJBQUcsRUFBRTs7O1lBQWpCak4sSUFBTTs7VUFHUCxJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsSUFBRSxXQUFTO1lBQ25ELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7O1lBRTVDQSxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCUyxvQkFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDOztZQUVkVCxJQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxJQUFJLE9BQU8sRUFBRTtnQkFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUMvQjtTQUNKO0tBQ0o7OztFQTNOc0J3Uix3QkE0TjFCOzs7Ozs7OztBQ3pQYyx5QkFBVSxTQUFTOzJCQUNQLEtBQUs7MkJBQ0wsV0FBVzsyQkFDWCxjQUFjOzJCQUNkLFFBQVEsMkNBQTJDO0lBQzFFeFIsSUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUMxQkEsSUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQzs7SUFFeEJBLElBQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0I7UUFDM0MsY0FBYyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQzthQUN6QyxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQzthQUNqQyxPQUFPLENBQUMsU0FBUyxHQUFLLEtBQUssU0FBSSxHQUFHLEVBQUc7UUFDMUNrUiwwQkFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztJQUV6QnBCLDRCQUFjLENBQUMsT0FBTyxZQUFHLEdBQUcsVUFBVSxJQUFJLGdCQUFnQjtRQUN0RCxJQUFJLEdBQUcsRUFBRTtZQUNMLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqQixNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2I5UCxJQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7O1lBRWxCLEtBQUssa0JBQWV5UiwyQkFBYSxDQUFDLElBQUksMEJBQUMsRUFBRTtnQkFBcEN6UixJQUFNOztnQkFDUCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUM1Qjs7WUFFRCxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzFCO0tBQ0osQ0FBQyxDQUFDO0NBQ047O0FDckNELFlBQVksQ0FBQzs7QUFFYixXQUFjLEdBQUcsT0FBTyxDQUFDO0FBQ3pCLGFBQXNCLEdBQUcsT0FBTyxDQUFDOztBQUVqQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7O0FBRWYsU0FBUyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7SUFDdkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0lBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2hELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQztJQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxZQUFZLENBQUM7SUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLElBQUksUUFBUSxDQUFDO0lBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7O0lBRXZELElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O0lBRTlDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNoRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7SUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDOzs7SUFHN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7OztJQUc5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqRzs7QUFFRCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLElBQUksRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7SUFFbEQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRSxJQUFJLFlBQVksR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUVoRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3ZGOztJQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFMUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pHOztJQUVELE9BQU8sWUFBWSxDQUFDO0NBQ3ZCLENBQUM7OztBQUdGLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUI7S0FDSjtJQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3pCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM5QjtRQUNELEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QztLQUNKO0NBQ0o7OztBQUdELFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7SUFFWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2QsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMs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LFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN6QyxJQUFNLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3pDLElBQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDN0MsSUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN2QyxJQUFNLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDLElBQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDM0MsSUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMzQyxJQUFNLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDLElBQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDM0MsSUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN6QyxJQUFNLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDLElBQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkMsSUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMvQixJQUFNLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDLElBQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDekMsSUFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMvQyxJQUFNLENBQUMsUUFB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QUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4RTtRQUNELElBQUksQ0FBQ0EsdUJBQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUNELElBQUksQ0FBQ0EsdUJBQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxRTtRQUNELElBQUksQ0FBQ0EsdUJBQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RTtRQUNELElBQUksQ0FBQ0EsdUJBQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4RTtRQUNE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RCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEQsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RNLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdPLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvUCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUQsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuSCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JILEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hMLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4TixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3SyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0IsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFKLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4WixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEwsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4SSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4SCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlKLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyTCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNySSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4SixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0MsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEQsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdGLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVELEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pLLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEYsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25KLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDblIsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BSLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNsTCxDQUFDOztBQUVGLFNBQVMsa0JBQWtCLENB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RUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7O0lBRXBGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQUUsRUFBRSxFQUFFO1FBQzNCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2hCLENBQUMsQ0FBQztDQUNOOzs7OztBQUtELFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVM7SUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRWpELElBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDN0MsT0FBTztRQUNILEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNQLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNQLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNQLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNQLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDaEIsQ0FBQztDQUNMOztBQUVELFNBQVMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDN0NBLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0NBLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztJQUc1QyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7U0FDbEMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtTQUNyQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN6Q0EsSUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDakM7OztJQUdEQSxJQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDekJBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN6QkEsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckJBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLEtBQUtELElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCQyxJQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyRUEsSUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDckUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM5QztDQUNKOztBQUVELFNBQVMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQ3RFRCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztJQUVwQkEsSUFBSSxDQUFDLENBQUM7OztJQUdOLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDL0MsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUMvQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFOzs7SUFHL0MsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFFLFNBQVMsQ0FBQyxFQUFF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 diff --git a/app/assets/stylesheets/mapbox-gl.scss b/app/assets/stylesheets/mapbox-gl.scss index 1a5e6bd..97845c3 100644 --- a/app/assets/stylesheets/mapbox-gl.scss +++ b/app/assets/stylesheets/mapbox-gl.scss @@ -152,20 +152,20 @@ /* https://bugzilla.mozilla.org/show_bug.cgi?id=140562 */ -.mapboxgl-ctrl > button { - &::-moz-focus-inner { - border: 0; - padding: 0; - } - - &:hover { - background-color: rgba(0, 0, 0, 0.05); - } +.mapboxgl-ctrl > button::-moz-focus-inner { + border: 0; + padding: 0; } .mapboxgl-ctrl-group > button:focus { box-shadow: 0 0 2px 2px rgba(0, 150, 255, 1); +} + +.mapboxgl-ctrl > button:not(:disabled):hover { + background-color: rgba(0, 0, 0, 0.05); +} +.mapboxgl-ctrl-group > button:focus { &:focus-visible { box-shadow: 0 0 2px 2px rgba(0, 150, 255, 1); } @@ -220,10 +220,10 @@ display: block; width: 100%; height: 100%; + } - &:disabled { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E %3Cpath d='M10 4C9 4 9 5 9 5L9 5.1A5 5 0 0 0 5.1 9L5 9C5 9 4 9 4 10 4 11 5 11 5 11L5.1 11A5 5 0 0 0 9 14.9L9 15C9 15 9 16 10 16 11 16 11 15 11 15L11 14.9A5 5 0 0 0 14.9 11L15 11C15 11 16 11 16 10 16 9 15 9 15 9L14.9 9A5 5 0 0 0 11 5.1L11 5C11 5 11 4 10 4zM10 6.5A3.5 3.5 0 0 1 13.5 10 3.5 3.5 0 0 1 10 13.5 3.5 3.5 0 0 1 6.5 10 3.5 3.5 0 0 1 10 6.5zM10 8.3A1.8 1.8 0 0 0 8.3 10 1.8 1.8 0 0 0 10 11.8 1.8 1.8 0 0 0 11.8 10 1.8 1.8 0 0 0 10 8.3z'/%3E %3C/svg%3E"); - } + &:disabled::before { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E %3Cpath d='M14.434,7.688c0.213,0.407 0.371,0.848 0.466,1.312l0.1,0c0,0 1,0 1,1c0,1 -1,1 -1,1l-0.1,0c-0.4,1.96 -1.94,3.5 -3.9,3.9l0,0.1c0,0 0,1 -1,1c-1,0 -1,-1 -1,-1l0,-0.1c-0.477,-0.097 -0.93,-0.262 -1.347,-0.484c0.383,-0.377 0.767,-0.753 1.151,-1.129c0.374,0.138 0.777,0.213 1.196,0.213c1.92,0 3.5,-1.58 3.5,-3.5c0,-0.403 -0.07,-0.791 -0.197,-1.153c0.379,-0.384 0.756,-0.77 1.131,-1.159Zm-9.334,1.312c0.4,-1.961 1.94,-3.5 3.9,-3.9l0,-0.1c0,0 0,-1 1,-1c1,0 1,1 1,1l0,0.1c0.477,0.097 0.93,0.262 1.347,0.484c-0.383,0.377 -0.767,0.753 -1.151,1.129c-0.374,-0.138 -0.777,-0.213 -1.196,-0.213c-1.92,0 -3.5,1.58 -3.5,3.5c0,0.403 0.07,0.791 0.197,1.153c-0.379,0.384 -0.756,0.77 -1.131,1.159c-0.213,-0.407 -0.371,-0.848 -0.466,-1.312l-0.1,0c-0.005,0 -1,-0.003 -1,-1c0,-0.997 0.995,-1 1,-1l0.1,0Z'/%3E %3Cpath d='M14,5l1,1l-9,9l-1,-1l9,-9Z'/%3E %3C/svg%3E"); } &.mapboxgl-ctrl-geolocate-active::before { diff --git a/lib/mapbox-gl/rails/version.rb b/lib/mapbox-gl/rails/version.rb index b0b8a1f..94e609b 100644 --- a/lib/mapbox-gl/rails/version.rb +++ b/lib/mapbox-gl/rails/version.rb @@ -14,7 +14,7 @@ module VERSION # Major version number MAJOR = 1 # Minor version number - MINOR = 4 + MINOR = 5 # Smallest version number TINY = 0